diff --git a/.gitignore b/.gitignore index 1915aed8b23..5e1bff92ff9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,10 @@ +#bower deps +**/wwwroot/lib/ bin/ obj/ .idea/ latest/ +node_modules/ /env-vars.bat *.suo #ignore thumbnails created by windows @@ -38,17 +41,20 @@ build/*.dll *.user *.userprefs packages/ +.vs/ +.vscode/ +*.lock.json +*.nuget.props +*.nuget.targets release/latest/ *.nupkg release/* +requestlogs/ *.DS_Store NuGet/ -NuGet.Pcl/ -NuGet.Signed/ -*.pfx build/ diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index a95a4a6066e..5e9b96594eb 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -276,7 +276,7 @@ - [kaza](https://github.com/kaza) - [mishfit](https://github.com/mishfit) - [rfvgyhn](https://github.com/rfvgyhn) (Chris) - - [caiopoiete](https://github.com/caiopoiete) (Caio Proiete) + - [augustoproiete](https://github.com/augustoproiete) (C. Augusto Proiete) - [sjuxax](https://github.com/sjuxax) (Jeff Cook) - [madaleno](https://github.com/madaleno) (Luis Madaleno) - [yavosh](https://github.com/yavosh) (Yavor Shahpasov) @@ -302,6 +302,7 @@ - [barambani](https://github.com/barambani) - [nhalm](https://github.com/et1975) - [scottmcarthur](https://github.com/scottmcarthur) (Scott McArthur) + - [siliconrob](https://github.com/Siliconrob) (Robin Michael) diff --git a/NuGet.Config b/NuGet.Config new file mode 100644 index 00000000000..8c1ce21b6f6 --- /dev/null +++ b/NuGet.Config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/NuGet.Pcl/ServiceStack.Client.Pcl/servicestack.client.pcl.nuspec b/NuGet.Pcl/ServiceStack.Client.Pcl/servicestack.client.pcl.nuspec deleted file mode 100644 index 6fa343debc3..00000000000 --- a/NuGet.Pcl/ServiceStack.Client.Pcl/servicestack.client.pcl.nuspec +++ /dev/null @@ -1,33 +0,0 @@ - - - - ServiceStack.Client.Pcl - PCL Service Clients for ServiceStack - 4.0.0 - Service Stack - Service Stack - ServiceStack.Client.Pcl (deprecated) - - This package is no longer maintained as the PCL builds have been merged into the main "ServiceStack.Client" NuGet package. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - true - https://servicestack.net/img/logo-32.png - ServiceStack Common Framework Clients ServiceClients Gateway - en-US - Copyright 2014 Service Stack - - - - - - - - - - - - - - diff --git a/NuGet.Pcl/ServiceStack.Interfaces.Pcl/servicestack.interfaces.pcl.nuspec b/NuGet.Pcl/ServiceStack.Interfaces.Pcl/servicestack.interfaces.pcl.nuspec deleted file mode 100644 index 0911e6187dc..00000000000 --- a/NuGet.Pcl/ServiceStack.Interfaces.Pcl/servicestack.interfaces.pcl.nuspec +++ /dev/null @@ -1,26 +0,0 @@ - - - - ServiceStack.Interfaces.Pcl - PCL Lightweight and implementation-free interfaces for ServiceStack - 4.0.0 - Service Stack - Service Stack - ServiceStack.Interfaces.Pcl (deprecated) - - This package is no longer maintained as the PCL builds have been merged into the main "ServiceStack.Interfaces" NuGet package. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - Fast JSON XML CSV HTML SOAP JSV REST Web Service Framework MONO ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - \ No newline at end of file diff --git a/NuGet.Signed/ServiceStack.Api.Swagger.Signed/servicestack.api.swagger.signed.nuspec b/NuGet.Signed/ServiceStack.Api.Swagger.Signed/servicestack.api.swagger.signed.nuspec deleted file mode 100644 index 9317b1d556b..00000000000 --- a/NuGet.Signed/ServiceStack.Api.Swagger.Signed/servicestack.api.swagger.signed.nuspec +++ /dev/null @@ -1,33 +0,0 @@ - - - - ServiceStack.Api.Swagger.Signed - ServiceStack.Api.Swagger.Signed - 4.0.0 - Service Stack - Service Stack - ServiceStack integration with Swagger - - Provides a set of services to be discovered by Swagger (http://swagger.wordnik.com/) - Swagger is a specification and complete framework implementation for describing, producing, consuming, and visualizing RESTful web services. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - Swagger API REST Docs ServiceStack - en-US - StackExpress.net 2012 and contributors - - - - - - - - - - - - - - \ No newline at end of file diff --git a/NuGet.Signed/ServiceStack.Client.Signed/servicestack.client.signed.nuspec b/NuGet.Signed/ServiceStack.Client.Signed/servicestack.client.signed.nuspec deleted file mode 100644 index 24f45d28fd1..00000000000 --- a/NuGet.Signed/ServiceStack.Client.Signed/servicestack.client.signed.nuspec +++ /dev/null @@ -1,29 +0,0 @@ - - - - ServiceStack.Client.Signed - ServiceStack.Client.Signed - 4.0.0 - Service Stack - Service Stack - Opensource .NET and Mono REST Web Services framework - - JSON, XML, JSV, SOAP and MQ Generic Service Clients. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - true - https://servicestack.net/img/logo-32.png - ServiceStack Common Framework Clients ServiceClients Gateway - en-US - Copyright 2014 Service Stack - - - - - - - - - - diff --git a/NuGet.Signed/ServiceStack.Common.Signed/servicestack.common.signed.nuspec b/NuGet.Signed/ServiceStack.Common.Signed/servicestack.common.signed.nuspec deleted file mode 100644 index a8c8af4ed2c..00000000000 --- a/NuGet.Signed/ServiceStack.Common.Signed/servicestack.common.signed.nuspec +++ /dev/null @@ -1,28 +0,0 @@ - - - - ServiceStack.Common.Signed - ServiceStack.Common.Signed - 4.0.0 - Service Stack - Service Stack - Opensource .NET and Mono REST Web Services framework - - Common base library for ServiceStack projects. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - ServiceStack Common Framework Clients ServiceClients Gateway - en-US - Copyright 2014 Service Stack - - - - - - - - - - diff --git a/NuGet.Signed/ServiceStack.ProtoBuf.Signed/servicestack.protobuf.signed.nuspec b/NuGet.Signed/ServiceStack.ProtoBuf.Signed/servicestack.protobuf.signed.nuspec deleted file mode 100644 index 96d2fe35d15..00000000000 --- a/NuGet.Signed/ServiceStack.ProtoBuf.Signed/servicestack.protobuf.signed.nuspec +++ /dev/null @@ -1,28 +0,0 @@ - - - - ServiceStack.ProtoBuf.Signed - Protocol Buffers support for ServiceStack. Includes typed ProtoBuf Client - 4.0.0 - Service Stack - Service Stack - ProtoBuf Format Serializer ContentType ServiceClients for ServiceStack - - Add the ProtoBuf binary format and endpoint to a ServiceStack web service host. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - ProtoBuf Fast Binary Serializer Format ContentType REST Web Services ServiceStack - en-US - Copyright 2013 Service Stack - - - - - - - - - - \ No newline at end of file diff --git a/NuGet.Signed/ServiceStack.Razor.Signed/content/web.config.transform b/NuGet.Signed/ServiceStack.Razor.Signed/content/web.config.transform deleted file mode 100644 index 5546d322a18..00000000000 --- a/NuGet.Signed/ServiceStack.Razor.Signed/content/web.config.transform +++ /dev/null @@ -1,33 +0,0 @@ - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/NuGet.Signed/ServiceStack.Razor.Signed/servicestack.razor.signed.nuspec b/NuGet.Signed/ServiceStack.Razor.Signed/servicestack.razor.signed.nuspec deleted file mode 100644 index 3ad299554f4..00000000000 --- a/NuGet.Signed/ServiceStack.Razor.Signed/servicestack.razor.signed.nuspec +++ /dev/null @@ -1,41 +0,0 @@ - - - - ServiceStack.Razor.Signed - ServiceStack.Razor.Signed - 4.0.0 - Service Stack - Service Stack - Provides ServiceStack's HTML Story including integrated support for MVC Razor's ViewEngine - - ServiceStack Razor Documentation: http://razor.servicestack.net - - - Turns ServiceStack into a Complete Web + REST Services Stack. Replaces need for ASP.NET MVC. - - Runs In ASP.NET or Self-host, first-class cross-platform support on .NET / Mono runtimes. - - Add HTML views to existing services. - - Change Views and Layout templates at runtime. - - No Ceremony development options - Pages without controllers, with typed and dynamic View Models. - - Include Partial Markdown views in Razor pages. - - Cascading Layout templates. - - Pretty urls by default (no custom Routes needed). - - Keep all views and assets together. - - Smart View Pages. - - http://razor.servicestack.net - https://servicestack.net/terms - true - https://servicestack.net/img/logo-32.png - Razor ViewEngine View Templates Controllers Mono ASP.NET Self-Host ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - - - - \ No newline at end of file diff --git a/NuGet.Signed/ServiceStack.Server.Signed/servicestack.server.signed.nuspec b/NuGet.Signed/ServiceStack.Server.Signed/servicestack.server.signed.nuspec deleted file mode 100644 index d846ad9e9d5..00000000000 --- a/NuGet.Signed/ServiceStack.Server.Signed/servicestack.server.signed.nuspec +++ /dev/null @@ -1,31 +0,0 @@ - - - - ServiceStack.Server.Signed - ServiceStack.Server.Signed - 4.0.0 - Service Stack - Service Stack - Opensource .NET and Mono REST Web Services framework - - Integration libraries and adapters with other major ServiceStack server components. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - true - https://servicestack.net/img/logo-32.png - Fast JSON XML CSV HTML SOAP JSV REST Web Service Framework MONO ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - - - - - \ No newline at end of file diff --git a/NuGet.Signed/ServiceStack.Signed/servicestack.signed.nuspec b/NuGet.Signed/ServiceStack.Signed/servicestack.signed.nuspec deleted file mode 100644 index 18765b9d9c9..00000000000 --- a/NuGet.Signed/ServiceStack.Signed/servicestack.signed.nuspec +++ /dev/null @@ -1,36 +0,0 @@ - - - - ServiceStack.Signed - ServiceStack.Signed - 4.0.0 - Service Stack - Service Stack - Opensource .NET and Mono REST Web Services framework - - Binaries for the ServiceStack web framework. - Visit https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project - and https://github.com/ServiceStack/ServiceStack/wiki/Create-your-first-webservice - for walk throughs and docs on creating your first web service. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - true - https://servicestack.net/img/logo-32.png - Fast JSON XML CSV HTML SOAP JSV REST Web Service Framework MONO ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/NuGetPack.cmd b/NuGet/NuGetPack.cmd deleted file mode 100644 index 565594c3646..00000000000 --- a/NuGet/NuGetPack.cmd +++ /dev/null @@ -1,33 +0,0 @@ -SET NUGET=..\src\.nuget\nuget -%NUGET% pack ServiceStack\servicestack.nuspec -symbols -%NUGET% pack ServiceStack.Server\servicestack.server.nuspec -symbols -%NUGET% pack ServiceStack.Interfaces\servicestack.interfaces.nuspec -symbols -%NUGET% pack ServiceStack.Client\servicestack.client.nuspec -symbols -%NUGET% pack ServiceStack.Common\servicestack.common.nuspec -symbols -%NUGET% pack ServiceStack.Mvc\servicestack.mvc.nuspec -symbols -%NUGET% pack ServiceStack.Api.Swagger\servicestack.api.swagger.nuspec -symbols -%NUGET% pack ServiceStack.Razor\servicestack.razor.nuspec -symbols - -%NUGET% pack ServiceStack.Host.AspNet\servicestack.host.aspnet.nuspec -%NUGET% pack ServiceStack.Host.Mvc\servicestack.host.mvc.nuspec - -%NUGET% pack ServiceStack.Authentication.OpenId\servicestack.authentication.openid.nuspec -symbols -%NUGET% pack ServiceStack.Authentication.OAuth2\servicestack.authentication.oauth2.nuspec -symbols - -%NUGET% pack ServiceStack.Authentication.MongoDb\servicestack.authentication.mongodb.nuspec -symbols -%NUGET% pack ServiceStack.Authentication.NHibernate\servicestack.authentication.nhibernate.nuspec -symbols -%NUGET% pack ServiceStack.Authentication.RavenDb\servicestack.authentication.ravendb.nuspec -symbols - -%NUGET% pack ServiceStack.Caching.AwsDynamoDb\servicestack.caching.awsdynamodb.nuspec -symbols -%NUGET% pack ServiceStack.Caching.Azure\servicestack.caching.azure.nuspec -symbols -%NUGET% pack ServiceStack.Caching.Memcached\servicestack.caching.memcached.nuspec -symbols - -%NUGET% pack ServiceStack.Logging.Elmah\servicestack.logging.elmah.nuspec -symbols -%NUGET% pack ServiceStack.Logging.EntLib5\servicestack.logging.entlib5.nuspec -symbols -%NUGET% pack ServiceStack.Logging.EventLog\servicestack.logging.eventlog.nuspec -symbols -%NUGET% pack ServiceStack.Logging.Log4Net\servicestack.logging.log4net.nuspec -symbols -%NUGET% pack ServiceStack.Logging.NLog\servicestack.logging.nlog.nuspec -symbols - -%NUGET% pack ServiceStack.ProtoBuf\servicestack.protobuf.nuspec -symbols -%NUGET% pack ServiceStack.MsgPack\servicestack.msgpack.nuspec -symbols - diff --git a/NuGet/NuGetPush.cmd b/NuGet/NuGetPush.cmd deleted file mode 100644 index eca3f99e164..00000000000 --- a/NuGet/NuGetPush.cmd +++ /dev/null @@ -1,22 +0,0 @@ -SET NUGET=..\src\.nuget\nuget -%NUGET% push ServiceStack.3.9.60.nupkg -%NUGET% push ServiceStack.3.9.60.symbols.nupkg -%NUGET% push ServiceStack.Api.Swagger.3.9.60.nupkg -%NUGET% push ServiceStack.Api.Swagger.3.9.60.symbols.nupkg -%NUGET% push ServiceStack.Authentication.OAuth2.3.9.60.nupkg -%NUGET% push ServiceStack.Authentication.OAuth2.3.9.60.symbols.nupkg -%NUGET% push ServiceStack.Authentication.OpenId.3.9.60.nupkg -%NUGET% push ServiceStack.Authentication.OpenId.3.9.60.symbols.nupkg -%NUGET% push ServiceStack.Client.Silverlight.3.9.60.nupkg -%NUGET% push ServiceStack.Common.3.9.60.nupkg -%NUGET% push ServiceStack.Common.3.9.60.symbols.nupkg -%NUGET% push ServiceStack.Host.AspNet.3.9.60.nupkg -%NUGET% push ServiceStack.Host.Mvc.3.9.60.nupkg -%NUGET% push ServiceStack.Mvc.3.9.60.nupkg -%NUGET% push ServiceStack.Mvc.3.9.60.symbols.nupkg -%NUGET% push ServiceStack.Plugins.MsgPack.3.9.60.nupkg -%NUGET% push ServiceStack.Plugins.MsgPack.3.9.60.symbols.nupkg -%NUGET% push ServiceStack.Plugins.ProtoBuf.3.9.60.nupkg -%NUGET% push ServiceStack.Plugins.ProtoBuf.3.9.60.symbols.nupkg -%NUGET% push ServiceStack.Razor.3.9.60.nupkg -%NUGET% push ServiceStack.Razor.3.9.60.symbols.nupkg diff --git a/NuGet/ServiceStack.Api.Swagger/servicestack.api.swagger.nuspec b/NuGet/ServiceStack.Api.Swagger/servicestack.api.swagger.nuspec deleted file mode 100644 index fb341402e26..00000000000 --- a/NuGet/ServiceStack.Api.Swagger/servicestack.api.swagger.nuspec +++ /dev/null @@ -1,33 +0,0 @@ - - - - ServiceStack.Api.Swagger - ServiceStack additional API for integration with Swagger - 4.0.0 - Service Stack - Service Stack - ServiceStack integration with Swagger - - Provides a set of services to be discovered by Swagger (http://swagger.wordnik.com/) - Swagger is a specification and complete framework implementation for describing, producing, consuming, and visualizing RESTful web services. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - Swagger API REST Docs ServiceStack - en-US - StackExpress.net 2012 and contributors - - - - - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Authentication.MongoDb/servicestack.authentication.mongodb.nuspec b/NuGet/ServiceStack.Authentication.MongoDb/servicestack.authentication.mongodb.nuspec deleted file mode 100644 index c34192b8750..00000000000 --- a/NuGet/ServiceStack.Authentication.MongoDb/servicestack.authentication.mongodb.nuspec +++ /dev/null @@ -1,30 +0,0 @@ - - - - ServiceStack.Authentication.MongoDB - 4.0.0 - Assaf Raman, ServiceStack contributors - Assaf Raman, ServiceStack contributors - A MongoDB IUserAuthRepository to persist User registration and auth info in a NoSQL Mongo DB - - A MongoDB IUserAuthRepository to persist User registration and auth info in a NoSQL Mongo DB. - Implements ServiceStack's built-in AuthProvider Model: - https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization - inc. Twitter, Facebook, Basic, Digest, Credentials Auth modes out-of-the-box. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - ServiceStack Authentication Authorization MongoDB NoSQL POCO Code-First - en-US - ServiceStack 2014 and contributors - - - - - - - - - - diff --git a/NuGet/ServiceStack.Authentication.NHibernate/servicestack.authentication.nhibernate.nuspec b/NuGet/ServiceStack.Authentication.NHibernate/servicestack.authentication.nhibernate.nuspec deleted file mode 100644 index 4ebfe40f7b6..00000000000 --- a/NuGet/ServiceStack.Authentication.NHibernate/servicestack.authentication.nhibernate.nuspec +++ /dev/null @@ -1,32 +0,0 @@ - - - - ServiceStack.Authentication.NHibernate - 4.0.0 - Joshua Lewis, ServiceStack contributors - Joshua Lewis, ServiceStack contributors - An NHibernate IUserAuthRepository to persist User registration and auth info in any RDBMS NHibernate supports - - An NHibernate IUserAuthRepository to persist User registration and authentication info in any RDBMS NHibernate supports. - Implements ServiceStack's built-in AuthProvider Model: - https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization - inc. Twitter, Facebook, Basic, Digest, Credentials Auth modes out-of-the-box. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - ServiceStack Authentication Authorization NHibernate SQLServer Sqlite Oracle MySql PostgreSQL POCO Code-First - en-US - ServiceStack 2014 and contributors - - - - - - - - - - - - diff --git a/NuGet/ServiceStack.Authentication.OAuth2/servicestack.authentication.oauth2.nuspec b/NuGet/ServiceStack.Authentication.OAuth2/servicestack.authentication.oauth2.nuspec deleted file mode 100644 index f64e357e6fc..00000000000 --- a/NuGet/ServiceStack.Authentication.OAuth2/servicestack.authentication.oauth2.nuspec +++ /dev/null @@ -1,32 +0,0 @@ - - - - ServiceStack.Authentication.OAuth2 - OAuth2 Providers for ServiceStack - inc. Google, LinkedIn - 4.0.0 - Service Stack - Service Stack - OpenId Auth Providers for ServiceStack - inc. Google, LinkedIn - - Adds OAuth2 Providers for use in ServiceStack Web and REST Services. - Includes built-in support for Google and LinkedIn OAuth2 providers. - - More Info on Auth Providers: - https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - OAuth OAuth2 Google LinkedIn Authentication Auth Provider ServiceStack Web Services - en-US - Copyright 2014 Service Stack - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Authentication.OpenId/servicestack.authentication.openid.nuspec b/NuGet/ServiceStack.Authentication.OpenId/servicestack.authentication.openid.nuspec deleted file mode 100644 index 4edabaaf6d6..00000000000 --- a/NuGet/ServiceStack.Authentication.OpenId/servicestack.authentication.openid.nuspec +++ /dev/null @@ -1,32 +0,0 @@ - - - - ServiceStack.Authentication.OpenId - OpenId Auth Providers for ServiceStack - inc. Google, Yahoo, MyOpenId - 4.0.0 - Service Stack - Service Stack - OpenId Auth Providers for ServiceStack - inc. Google, Yahoo, MyOpenId - - Adds OpenId Auth Providers for use in ServiceStack Web and REST Services. - Includes built-in support for Google, Yahoo, MyOpenId and Custom OpenId providers. - - More Info on Auth Providers: - https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - OpenId Google Yahoo MyOpenId Authentication Auth Provider ServiceStack REST Web Services ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Authentication.RavenDb/servicestack.authentication.ravendb.nuspec b/NuGet/ServiceStack.Authentication.RavenDb/servicestack.authentication.ravendb.nuspec deleted file mode 100644 index bbac14afddf..00000000000 --- a/NuGet/ServiceStack.Authentication.RavenDb/servicestack.authentication.ravendb.nuspec +++ /dev/null @@ -1,30 +0,0 @@ - - - - ServiceStack.Authentication.RavenDB - 4.0.0 - ServiceStack contributors - ServiceStack contributors - A RavenDB IUserAuthRepository to persist User registration and auth info in a NoSQL Raven DB - - A RavenDB IUserAuthRepository to persist User registration and auth info in a NoSQL Raven DB. - Implements ServiceStack's built-in AuthProvider Model: - https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization - inc. Twitter, Facebook, Basic, Digest, Credentials Auth modes out-of-the-box. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - ServiceStack Authentication Authorization RavenDB Raven NoSQL POCO Code-First - en-US - ServiceStack 2014 and contributors - - - - - - - - - - diff --git a/NuGet/ServiceStack.Caching.AwsDynamoDb/servicestack.caching.awsdynamodb.nuspec b/NuGet/ServiceStack.Caching.AwsDynamoDb/servicestack.caching.awsdynamodb.nuspec deleted file mode 100644 index f22877a0997..00000000000 --- a/NuGet/ServiceStack.Caching.AwsDynamoDb/servicestack.caching.awsdynamodb.nuspec +++ /dev/null @@ -1,27 +0,0 @@ - - - - ServiceStack.Caching.AwsDynamoDb - 4.0.0 - ServiceStack contributors - ServiceStack contributors - - An Amazon Web Services In-Memory DynamoDb DataCache implementing ServiceStack's ICacheClient: - https://github.com/ServiceStack/ServiceStack/wiki/Caching - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - ServiceStack Caching AwsDynamoDb Amazon WebServices AWS DynamoDb Cache CacheClient - en-US - ServiceStack 2014 and contributors - - - - - - - - - - diff --git a/NuGet/ServiceStack.Caching.Azure/servicestack.caching.azure.nuspec b/NuGet/ServiceStack.Caching.Azure/servicestack.caching.azure.nuspec deleted file mode 100644 index d209f0cf524..00000000000 --- a/NuGet/ServiceStack.Caching.Azure/servicestack.caching.azure.nuspec +++ /dev/null @@ -1,27 +0,0 @@ - - - - ServiceStack.Caching.Azure - 4.0.0 - Manuel Nelson, ServiceStack contributors - Manuel Nelson, ServiceStack contributors - - An Azure In-Memory DataCache implementing ServiceStack's ICacheClient: - https://github.com/ServiceStack/ServiceStack/wiki/Caching - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - ServiceStack Caching Windows Azure Cache CacheClient POCO Code-First - en-US - ServiceStack 2014 and contributors - - - - - - - - - - diff --git a/NuGet/ServiceStack.Caching.Memcached/servicestack.caching.memcached.nuspec b/NuGet/ServiceStack.Caching.Memcached/servicestack.caching.memcached.nuspec deleted file mode 100644 index a74f1160798..00000000000 --- a/NuGet/ServiceStack.Caching.Memcached/servicestack.caching.memcached.nuspec +++ /dev/null @@ -1,27 +0,0 @@ - - - - ServiceStack.Caching.Memcached - 4.0.0 - Service Stack, Thomas Grassauer and ServiceStack contributors - Service Stack, Thomas Grassauer and ServiceStack contributors - - An Memcached cache client implementing ServiceStack's ICacheClient: - https://github.com/ServiceStack/ServiceStack/wiki/Caching - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - ServiceStack Caching Memcached Cache CacheClient POCO Code-First - en-US - ServiceStack 2014 and contributors - - - - - - - - - - diff --git a/NuGet/ServiceStack.Client/servicestack.client.nuspec b/NuGet/ServiceStack.Client/servicestack.client.nuspec deleted file mode 100644 index da4c59f41b9..00000000000 --- a/NuGet/ServiceStack.Client/servicestack.client.nuspec +++ /dev/null @@ -1,33 +0,0 @@ - - - - ServiceStack.Client - Service Clients for ServiceStack - 4.0.0 - Service Stack - Service Stack - Opensource .NET and Mono REST Web Services framework - - JSON, XML, JSV, SOAP and MQ Generic Service Clients. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - true - https://servicestack.net/img/logo-32.png - ServiceStack Common Framework Clients ServiceClients Gateway - en-US - Copyright 2014 Service Stack - - - - - - - - - - - - - - diff --git a/NuGet/ServiceStack.Common/servicestack.common.nuspec b/NuGet/ServiceStack.Common/servicestack.common.nuspec deleted file mode 100644 index 3bf81813e1d..00000000000 --- a/NuGet/ServiceStack.Common/servicestack.common.nuspec +++ /dev/null @@ -1,28 +0,0 @@ - - - - ServiceStack.Common - Common libs for ServiceStack projects - 4.0.0 - Service Stack - Service Stack - Opensource .NET and Mono REST Web Services framework - - Common base library for ServiceStack projects. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - ServiceStack Common Framework Clients ServiceClients Gateway - en-US - Copyright 2014 Service Stack - - - - - - - - - - diff --git a/NuGet/ServiceStack.Gap/build/ServiceStack.Gap.targets b/NuGet/ServiceStack.Gap/build/ServiceStack.Gap.targets deleted file mode 100644 index 799dc3c07d9..00000000000 --- a/NuGet/ServiceStack.Gap/build/ServiceStack.Gap.targets +++ /dev/null @@ -1,25 +0,0 @@ - - - $(CoreCompileDependsOn);RazorGeneratorOutput - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Gap/servicestack.gap.nuspec b/NuGet/ServiceStack.Gap/servicestack.gap.nuspec deleted file mode 100644 index 481222083b6..00000000000 --- a/NuGet/ServiceStack.Gap/servicestack.gap.nuspec +++ /dev/null @@ -1,32 +0,0 @@ - - - - ServiceStack.Gap - ServiceStack.Gap - Tools to help create embedded versions of ServiceStack - 4.0.0 - Service Stack - Service Stack - Tools to help create embedded versions of ServiceStack - - MSBuild Tasks to help creating self-contained embedded versions of ServiceStack that can be ILMerged into a single cross-platform .exe accessed by the users perferred browser or hosted inside a Native Desktop App shell containing a Web Browser widget. - - Once added to a project the install.ps1 script will set the BuildAction to all Razor *.cshtml pages to 'Content' so they get pre-compiled and change all html/img/css assets to Embedded Resources so they get bundled inside the dll. - - This package also includes a copy of ILMerge.exe under \tools that can be used to merge all ServiceStack .dlls into a single exe. See the https://github.com/ServiceStack/ServiceStack.Gap project for more info. - - https://github.com/ServiceStack/ServiceStack.Gap - https://servicestack.net/terms - true - https://servicestack.net/img/logo-32.png - Embed Resources Razor ViewEngine View Templates Mono ASP.NET Self-Host ServiceStack - en-US - Copyright 2013 Service Stack - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Gap/tools/ILMerge License.rtf b/NuGet/ServiceStack.Gap/tools/ILMerge License.rtf deleted file mode 100644 index e8001515e64..00000000000 --- a/NuGet/ServiceStack.Gap/tools/ILMerge License.rtf +++ /dev/null @@ -1,104 +0,0 @@ -{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f37\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;} -{\f39\froman\fcharset0\fprq2{\*\panose 02040602050305030304}Book Antiqua;}{\f40\fswiss\fcharset0\fprq2{\*\panose 020b0706030402020204}Franklin Gothic Demi Cond;}{\f41\fswiss\fcharset0\fprq2{\*\panose 020b0503020102020204}Franklin Gothic Book;} -{\f42\froman\fcharset238\fprq2 Times New Roman CE;}{\f43\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f45\froman\fcharset161\fprq2 Times New Roman Greek;}{\f46\froman\fcharset162\fprq2 Times New Roman Tur;} -{\f47\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f48\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f49\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f50\froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\f412\fswiss\fcharset238\fprq2 Tahoma CE;}{\f413\fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f415\fswiss\fcharset161\fprq2 Tahoma Greek;}{\f416\fswiss\fcharset162\fprq2 Tahoma Tur;}{\f417\fswiss\fcharset177\fprq2 Tahoma (Hebrew);} -{\f418\fswiss\fcharset178\fprq2 Tahoma (Arabic);}{\f419\fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f420\fswiss\fcharset163\fprq2 Tahoma (Vietnamese);}{\f421\fswiss\fcharset222\fprq2 Tahoma (Thai);}{\f432\froman\fcharset238\fprq2 Book Antiqua CE;} -{\f433\froman\fcharset204\fprq2 Book Antiqua Cyr;}{\f435\froman\fcharset161\fprq2 Book Antiqua Greek;}{\f436\froman\fcharset162\fprq2 Book Antiqua Tur;}{\f439\froman\fcharset186\fprq2 Book Antiqua Baltic;} -{\f442\fswiss\fcharset238\fprq2 Franklin Gothic Demi Cond CE;}{\f443\fswiss\fcharset204\fprq2 Franklin Gothic Demi Cond Cyr;}{\f445\fswiss\fcharset161\fprq2 Franklin Gothic Demi Cond Greek;}{\f446\fswiss\fcharset162\fprq2 Franklin Gothic Demi Cond Tur;} -{\f449\fswiss\fcharset186\fprq2 Franklin Gothic Demi Cond Baltic;}{\f452\fswiss\fcharset238\fprq2 Franklin Gothic Book CE;}{\f453\fswiss\fcharset204\fprq2 Franklin Gothic Book Cyr;}{\f455\fswiss\fcharset161\fprq2 Franklin Gothic Book Greek;} -{\f456\fswiss\fcharset162\fprq2 Franklin Gothic Book Tur;}{\f459\fswiss\fcharset186\fprq2 Franklin Gothic Book Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255; -\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;} -{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\* -\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv -\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}{\s15\ql \fi-274\li274\ri0\sb120\sl460\slmult0 -\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin274\itap0 \f40\fs44\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext15 \styrsid9786739 1sectionhead;}{\s16\ql \li0\ri0\sb120\sl200\slmult0 -\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \caps\f40\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext16 \styrsid9786739 4laparahead;}{\s17\ql \li0\ri-18\sb120\sl240\slmult0 -\widctlpar\aspalpha\aspnum\faauto\adjustright\rin-18\lin0\itap0 \f40\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext17 \styrsid9786739 2lasubhead;}{\s18\ql \fi-187\li187\ri0\sb60\sl180\slmult0 -\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin187\itap0 \f41\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext18 \styrsid9786739 3cnumbered;}{\s19\ql \fi-340\li624\ri0\sb60\sl160\slmult0 -\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin624\itap0 \f41\fs14\cf1\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext19 \styrsid9786739 3inumbered2ndlevel;}{\s20\ql \li0\ri0\sb240\sl240\slmult0 -\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f40\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext20 \styrsid9786739 2afrenchsubhead;}{\s21\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 -\cbpat9 \f37\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext21 \ssemihidden \styrsid7154712 Document Map;}}{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\pgptbl {\pgp\ipgp2\itap0\li0\ri0\sb0\sa0\brdrt\brdrs\brdrw20 }{\pgp\ipgp0 -\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid2099452\rsid4207571\rsid5465292\rsid5510097\rsid5510644\rsid7154712\rsid7241305\rsid7672529\rsid7735936\rsid9179139\rsid9786739\rsid10440675\rsid11303133\rsid13130884\rsid14028235\rsid14100361\rsid14113652 -\rsid15276140\rsid16213514}{\*\generator Microsoft Word 11.0.6359;}{\info{\title ILMerge EULA}{\author Ken Leppert}{\operator mbarnett}{\creatim\yr2005\mo3\dy16\hr15\min43}{\revtim\yr2005\mo3\dy16\hr15\min43}{\printim\yr2004\mo4\dy30\hr13\min9}{\version2} -{\edmins0}{\nofpages3}{\nofwords1188}{\nofchars6775}{\*\company Microsoft Corporation}{\nofcharsws7948}{\vern24703}}\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180 -\dghorigin1800\dgvorigin1440\dghshow1\dgvshow1\jexpand\viewkind1\viewscale68\viewzk2\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel -\wrppunct\asianbrkrule\rsidroot9786739\newtblstyruls\nogrowautofit \fet0\sectd \linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang -{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang -{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain -\s15\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid7154712 \f40\fs44\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f39\fs28\insrsid9786739 MICROSOFT }{ -\b\f39\fs28\insrsid5465292 ILMerge}{\insrsid9786739 -\par }{\b\f39\fs22\insrsid9786739 END-USER LICENSE AGREEMENT FOR MICROSOFT SOFTWARE}{\insrsid9786739 -\par }\pard\plain \s17\qj \li0\ri-17\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin-17\lin0\itap0\pararsid14100361 \f40\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f39\insrsid9786739 IMPORTANT\emdash -READ CAREFULLY: }{\f39\insrsid9786739 This End-User License Agreement (\'93EULA\'94) is a legal agreement between you (either an individual or a single entity) and Microsoft Corporation (\'93Microsoft\'94) for th -e Microsoft software that accompanies this EULA, which includes computer software and may include associated media, printed materials, \'93online\'94 or electronic documentation, and Internet-based services (\'93Software\'94).\~ - An amendment or addendum to this EULA may accompany the Software.\~ }{\b\f39\insrsid9786739 -YOU AGREE TO BE BOUND BY THE TERMS OF THIS EULA BY INSTALLING, COPYING, OR OTHERWISE USING THE SOFTWARE. IF YOU DO NOT AGREE, DO NOT INSTALL, COPY, OR USE THE SOFTWARE.}{\insrsid9786739 -\par }\pard\plain \qj \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14100361 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f39\fs22\insrsid9786739 1.\~\~\~\~\~\~\~\~ }{ -\b\f39\fs22\insrsid9786739 GRANTS OF LICENSE}{\f39\fs22\insrsid9786739 . Microsoft grants you the rights described in this EULA provided that you comply with all terms and conditions of this EULA.\~ }{\insrsid9786739 -\par }\pard\plain \s19\qj \fi720\li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14100361 \f41\fs14\cf1\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f39\fs22\cf0\insrsid9786739 1.1\~\~\~\~\~\~ }{ -\b\i\f39\fs22\cf0\insrsid9786739 License Grant}{\f39\fs22\cf0\insrsid9786739 . Microsoft grants to you a personal, nonexclusive, nontransferable, limited license to }{\f39\fs22\insrsid9786739 install and use a reasonable number of copies of -the Software on computers residing on your premises }{\f39\fs22\cf0\insrsid9786739 for the purposes of designing, developing, and testing, your software product(s), provided that you are the only individual using the Software.\~ }{\insrsid9786739 -\par }\pard\plain \s18\qj \fi720\li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14100361 \f41\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f39\fs22\insrsid9786739 1.2\~\~\~\~\~\~ }{ -\b\i\f39\fs22\insrsid9786739 Documentation}{\f39\fs22\insrsid9786739 .}{\b\f39\fs22\insrsid9786739 \~ }{\f39\fs22\insrsid9786739 You may make and use a reasonabl -e number of copies of any documentation, provided that such copies shall be used only for your personal purposes and are not to be republished or distributed (either in hard copy or electronic form) beyond your premises.}{\insrsid9786739 -\par }\pard \s18\qj \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14100361 {\f39\fs22\insrsid9786739 2.\~\~\~\~\~\~\~\~ }{\b\f39\fs22\insrsid9786739 RESERVATION OF RIGHTS AND OWNERSHIP.\~ }{ -\f39\fs22\insrsid9786739 The Software is licensed as a single product.\~ Its component parts may not be separated. Microsoft reserves all rights not expressly granted to you in this EULA.\~ - The Software is protected by copyright and other intellectual property laws and treaties}{\f39\fs22\insrsid14028235 , and}{\f39\fs22\insrsid9786739 Microsoft }{\f39\fs22\insrsid14028235 (}{\f39\fs22\insrsid9786739 or its suppliers}{ -\f39\fs22\insrsid14028235 , where applicable)}{\f39\fs22\insrsid9786739 own }{\f39\fs22\insrsid14028235 all right, }{\f39\fs22\insrsid9786739 title, }{\f39\fs22\insrsid14028235 and interest in all }{\f39\fs22\insrsid9786739 -intellectual property rights in the Software.\~ }{\b\f39\fs22\insrsid9786739 The Software is licensed, not sold.}{\insrsid9786739 -\par }\pard\plain \s19\qj \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14100361 \f41\fs14\cf1\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f39\fs22\cf0\insrsid9786739 3.\~\~\~\~\~\~\~\~ }{ -\b\f39\fs22\cf0\insrsid9786739 LIMITATIONS ON REVERSE ENGINEERING, DECOMPILATION, AND DISASSEMBLY}{\b\i\f39\fs22\cf0\insrsid9786739 .}{\f39\fs22\cf0\insrsid9786739 \~ - You may not reverse engineer, decompile, or disassemble the Software, except and only to the extent that such activity is expressly permitted by applicable law notwithstanding this limitation.}{\insrsid9786739 -\par }\pard\plain \s18\qj \li0\ri0\sb100\sa100\sbauto1\saauto1\sl220\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14100361 \f41\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f39\fs22\insrsid9786739 4.\~\~\~\~\~\~\~\~ -}{\b\f39\fs22\insrsid9786739 NO RENTAL/COMMERCIAL HOSTING.}{\b\i\f39\fs22\insrsid9786739 }{\f39\fs22\insrsid9786739 You may not rent, lease, lend or provide commercial hosting services with the Software.}{\insrsid9786739 -\par }\pard\plain \s19\qj \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14100361 \f41\fs14\cf1\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f39\fs22\cf0\insrsid9786739 5.\~\~\~\~\~\~\~\~ }{ -\b\f39\fs22\cf0\insrsid9786739 NO SOFTWARE TRANSFER.\~ }{\f39\fs22\cf0\insrsid9786739 You may not assign or otherwise transfer the SOFTWARE or any of your rights hereunder to any third party.}{\insrsid9786739 -\par }{\f39\fs22\cf0\insrsid9786739 6.\~\~\~\~\~\~\~\~ }{\b\f39\fs22\cf0\insrsid9786739 CONSENT TO USE OF DATA.\~ }{\f39\fs22\cf0\insrsid9786739 You - agree that Microsoft and its affiliates may collect and use technical information gathered as part of the product support services provided to you, if any, related to the Software.\~ - Microsoft may use this information solely to improve our products or to provide customized services or technologies to you and will not disclose this information in a form that personally identifies you.\~\~ }{\insrsid9786739 -\par }{\f39\fs22\cf0\insrsid5510644 7}{\f39\fs22\cf0\insrsid9786739 .\~\~\~\~\~\~\~\~ }{\b\f39\fs22\cf0\insrsid9786739 ADDITIONAL SOFTWARE/SERVICES.\~ }{\f39\fs22\insrsid9786739 Microsoft is not obligated to provide maintenance, technical supplements}{ -\f39\fs22\insrsid14028235 , updates,}{\f39\fs22\insrsid9786739 or other support to you for the Software licensed under this EULA. }{\f39\fs22\insrsid7241305 }{\f39\fs22\insrsid9786739 In the event that Microsoft does provide such supplements or updates} -{\b\f39\fs22\insrsid9786739 , }{\f39\fs22\insrsid9786739 this EULA applies to such updates, supplements, or add-on components of the Software that Microsoft may provide to -you or make available to you after the date you obtain your initial copy of the Software, unless we provide other terms along with the update, supplement, or add-on component}{\f39\fs22\cf0\insrsid9786739 .\~ - Microsoft reserves the right to discontinue any Internet-based services provided to you or made available to you through the use of the Software.\~ }{\insrsid9786739 -\par }\pard\plain \s18\qj \li0\ri0\sb100\sa100\sbauto1\saauto1\sl220\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14100361 \f41\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f39\fs22\insrsid5510644 8}{ -\f39\fs22\insrsid9786739 .\~\~\~\~\~\~\~\~ }{\b\f39\fs22\insrsid9786739 EXPORT RESTRICTIONS}{\f39\fs22\insrsid9786739 .\~ }{\f39\fs22\cgrid0\insrsid9786739 You acknowledge that the Software is subject to U.S. export jurisdiction.\~ - You agree to comply with all applicable international and national laws that apply to the Software, including the U.S. Export Administration Regulations, as well as end-user, end-use, and destination restrictions issued by U.S. and other governments.\~\~ - For additional information see }{\f39\fs22\ul\cgrid0\insrsid9786739 http://www.microsoft.com/exporting/}{\f39\fs22\cgrid0\insrsid9786739 .}{\insrsid9786739 -\par }\pard\plain \s19\qj \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14100361 \f41\fs14\cf1\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f39\fs22\cf0\insrsid14113652 9}{ -\f39\fs22\cf0\insrsid9786739 .\~\~\~\~\~\~ }{\b\f39\fs22\cf0\insrsid9786739 TERMINATION.}{\f39\fs22\cf0\insrsid9786739 \~ Without prejudice to any other rights, Microsoft may terminate this EULA if you fail to comply with }{\f39\fs22\cf0\insrsid7241305 -any }{\f39\fs22\cf0\insrsid9786739 term}{\f39\fs22\cf0\insrsid7241305 or}{\f39\fs22\cf0\insrsid9786739 condition of this EULA. }{\f39\fs22\cf0\insrsid7241305 }{\f39\fs22\cf0\insrsid9786739 -In such event, you must destroy all copies of the Software and all of its component parts.}{\insrsid9786739 -\par }\pard\plain \s18\qj \li0\ri0\sb100\sa100\sbauto1\saauto1\sl220\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14100361 \f41\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f39\fs22\insrsid9786739 1}{ -\f39\fs22\insrsid14113652 0}{\f39\fs22\insrsid9786739 .\~\~\~\~\~\~ }{\b\f39\fs22\ul\insrsid9786739 DISCLAIMER OF WARRANTIES}{\b\f39\fs22\insrsid9786739 .\~ - TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, MICROSOFT AND ITS SUPPLIERS PROVIDE THE SOFTWARE}{\f39\fs22\insrsid9786739 }{\b\f39\fs22\insrsid9786739 AND SUPPORT SERVICES (IF ANY) }{\b\i\f39\fs22\insrsid9786739 AS IS AND WITH ALL FAULTS}{ -\b\f39\fs22\insrsid9786739 , AND HEREBY DISCLAIM ALL OTHER WARRANTIES AND CONDITIONS, WHETHER EXPRESS, IMPLIED - OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES, DUTIES OR CONDITIONS OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF RELIABILITY OR AVAILABILITY, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OF WORKMANLI -K -E EFFORT, OF LACK OF VIRUSES, AND OF LACK OF NEGLIGENCE, ALL WITH REGARD TO THE SOFTWARE, AND THE PROVISION OF OR FAILURE TO PROVIDE SUPPORT OR OTHER SERVICES, INFORMATION, SOFTWARE, AND RELATED CONTENT THROUGH THE SOFTWARE OR OTHERWISE ARISING OUT OF THE - USE OF THE SOFTWARE.\~ ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT WITH REGARD TO THE SOFTWARE.}{\insrsid9786739 -\par }{\f39\fs22\insrsid9786739 1}{\f39\fs22\insrsid14113652 1}{\f39\fs22\insrsid9786739 .}{\b\f39\fs22\insrsid9786739 \~\~\~\~\~\~ }{\b\f39\fs22\ul\insrsid9786739 EXCLUSION OF INCIDENTAL, CONSEQUENTIAL AND CERTAIN OTHER DAMAGES}{\b\f39\fs22\insrsid9786739 .\~ - }{\b\caps\f39\fs22\insrsid9786739 -To the maximum extent permitted by applicable law, in no event shall Microsoft or its suppliers be liable for any special, incidental, punitive, indirect, or consequential damages whatsoever (including, but not limited to, damages for loss of profit -s, LOSS OF DATA, or confidential or other information}{\b\f39\fs22\insrsid9786739 , }{\b\caps\f39\fs22\insrsid9786739 -for business interruption, for personal injury, for loss of privacy, for failure to meet any duty including of good faith or of reasonable care, for negligence, and}{\b\f39\fs22\insrsid9786739 }{\b\caps\f39\fs22\insrsid9786739 -for any other pecuniary or other los -s whatsoever) arising out of or in any way related to the use of or inability to use the SOFTWARE, the provision of or failure to provide Support OR OTHER Services, informatIon, software, and related CONTENT through the software or otherwise arising out o -f - the use of the software, or otherwise under or in connection with any provision of this EULA, even in the event of the fault, tort (including negligence), misrepresentation, strict liability, breach of contract or breach of warranty of Microsoft or any s -upplier, and even if Microsoft or any supplier has been advised of the possibility of such damages. }{\insrsid9786739 -\par }{\f39\fs22\insrsid9786739 1}{\f39\fs22\insrsid14113652 2}{\f39\fs22\insrsid9786739 .}{\b\f39\fs22\insrsid9786739 \~\~\~\~\~\~ }{\b\f39\fs22\ul\insrsid9786739 LIMITATION OF LIABILITY AND REMEDIES}{\b\f39\fs22\insrsid9786739 -. NOTWITHSTANDING ANY DAMAGES THAT YOU MIGHT INCUR FOR ANY REASON WHATSOEVER (INCLUDING, WITHOUT LIMITATION, A -LL DAMAGES REFERENCED HEREIN AND ALL DIRECT OR GENERAL DAMAGES IN CONTRACT OR ANYTHING ELSE), THE ENTIRE LIABILITY OF MICROSOFT AND ANY OF ITS SUPPLIERS UNDER ANY PROVISION OF THIS EULA AND YOUR EXCLUSIVE REMEDY HEREUNDER SHALL BE LIMITED TO THE GREATER O -F THE ACTUAL DAMAGES YOU INCUR IN REASONABLE RELIANCE ON THE SOFTWARE UP TO THE AMOUNT ACTUALLY PAID BY YOU FOR THE SOFTWARE}{\f39\fs22\insrsid9786739 }{\b\f39\fs22\insrsid9786739 OR US$5.00.\~ - THE FOREGOING LIMITATIONS, EXCLUSIONS AND DISCLAIMERS SHALL APPLY TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, EVEN IF ANY REMEDY FAILS ITS ESSENTIAL PURPOSE.}{\insrsid9786739 -\par }{\f39\fs22\insrsid9786739 1}{\f39\fs22\insrsid14113652 3}{\f39\fs22\insrsid9786739 .\~\~\~\~\~\~ }{\b\f39\fs22\insrsid9786739 APPLICABLE LAW.\~ }{\f39\fs22\insrsid7735936 T}{\f39\fs22\insrsid9786739 his EULA }{\f39\fs22\insrsid7735936 -shall be construed under and }{\f39\fs22\insrsid9786739 governed by the laws of the State of Washington}{\f39\fs22\insrsid7735936 , without regard to conflicts of law principles}{\f39\fs22\insrsid9786739 .\~ }{\insrsid9786739 -\par }\pard\plain \s20\qj \li0\ri0\sb100\sa100\sbauto1\saauto1\sl240\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14100361 \f40\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f39\insrsid9786739 1}{\f39\insrsid14113652 -4}{\f39\insrsid9786739 .\~\~\~\~ }{\b\f39\insrsid9786739 ENTIRE AGREEMENT; SEVERABILITY.\~ }{\f39\insrsid9786739 This -EULA (including any addendum or amendment to this EULA which is included with the Software) are the entire agreement between you and Microsoft relating to the Software and the support services (if any) and they supersede all prior or contemporaneous oral -or written communications,\~proposals and representations with respect to the Software or any other subject matter covered by this EULA.\~ - If any provision of this EULA is held to be void, invalid, unenforceable or illegal, the other provisions shall continue in full force and effect}{\insrsid9786739 -\par }\pard\plain \qj \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14100361 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid10440675 -\par }} \ No newline at end of file diff --git a/NuGet/ServiceStack.Gap/tools/ILMerge.exe b/NuGet/ServiceStack.Gap/tools/ILMerge.exe deleted file mode 100644 index 9667425b396..00000000000 Binary files a/NuGet/ServiceStack.Gap/tools/ILMerge.exe and /dev/null differ diff --git a/NuGet/ServiceStack.Gap/tools/install.ps1 b/NuGet/ServiceStack.Gap/tools/install.ps1 deleted file mode 100644 index 401c3fd39b5..00000000000 --- a/NuGet/ServiceStack.Gap/tools/install.ps1 +++ /dev/null @@ -1,37 +0,0 @@ -param($installPath, $toolsPath, $package, $project) - -# Set BuildAction of Razor Views to Content -function CompileRazorViews($projectItems) { - $projectItems | %{ - $x = $_.Name.ToLower() - if ($x -like "*.cshtml") { - $_.Properties.Item("BuildAction").Value = [int]2 # Content - } - - # Recursively - if ($_.ProjectItems) { - CompileRazorViews $_.ProjectItems - } - } -} - -# Embed Resource Files -function EmbedResources($projectItems) { - $projectItems | %{ - $ext = [System.IO.Path]::GetExtension($_.Name.ToLower()) - $embedExts = ".js",".css",".md",".html",".htm",".png",".gif",".jpg",".jpeg",".bmp",".ico",".svg",".tiff",".webp",".webm",".xap",".xaml",".flv",".swf",".xml",".csv",".pdf",".mp3",".wav",".mpg",".ttf",".woff",".eot",".map" - - if ($embedExts -contains $ext) { - $_.Properties.Item("BuildAction").Value = [int]3 # Embed - } - - # Recursively - if ($_.ProjectItems) { - EmbedResources $_.ProjectItems - } - } -} - -CompileRazorViews $project.ProjectItems -EmbedResources $project.ProjectItems - diff --git a/NuGet/ServiceStack.Host.AspNet/content/App_Start/AppHost.cs.pp b/NuGet/ServiceStack.Host.AspNet/content/App_Start/AppHost.cs.pp deleted file mode 100644 index 078740d9cde..00000000000 --- a/NuGet/ServiceStack.Host.AspNet/content/App_Start/AppHost.cs.pp +++ /dev/null @@ -1,79 +0,0 @@ -using System.Configuration; -using ServiceStack; -using ServiceStack.Auth; -using ServiceStack.Configuration; -using ServiceStack.Data; -using ServiceStack.OrmLite; - -[assembly: WebActivator.PreApplicationStartMethod(typeof($rootnamespace$.App_Start.AppHost), "Start")] - - -/** - * Entire ServiceStack Starter Template configured with a 'Hello' Web Service and a 'Todo' Rest Service. - * - * Auto-Generated Metadata API page at: /metadata - * See other complete web service examples at: https://github.com/ServiceStack/ServiceStack.Examples - */ - -namespace $rootnamespace$.App_Start -{ - public class AppHost : AppHostBase - { - public AppHost() //Tell ServiceStack the name and where to find your web services - : base("StarterTemplate ASP.NET Host", typeof(HelloService).Assembly) { } - - public override void Configure(Funq.Container container) - { - //Set JSON web services to return idiomatic JSON camelCase properties - ServiceStack.Text.JsConfig.EmitCamelCaseNames = true; - - //Configure User Defined REST Paths - Routes - .Add("/hello") - .Add("/hello/{Name*}"); - - //Uncomment to change the default ServiceStack configuration - //SetConfig(new HostConfig { - //}); - - //Enable Authentication - //ConfigureAuth(container); - - //Register all your dependencies - container.Register(new TodoRepository()); - } - - /* Example ServiceStack Authentication and CustomUserSession */ - private void ConfigureAuth(Funq.Container container) - { - var appSettings = new AppSettings(); - - //Default route: /auth/{provider} - Plugins.Add(new AuthFeature(() => new CustomUserSession(), - new IAuthProvider[] { - new CredentialsAuthProvider(appSettings), - new FacebookAuthProvider(appSettings), - new TwitterAuthProvider(appSettings), - new BasicAuthProvider(appSettings), - })); - - //Default route: /register - Plugins.Add(new RegistrationFeature()); - - //Requires ConnectionString configured in Web.Config - var connectionString = ConfigurationManager.ConnectionStrings["AppDb"].ConnectionString; - container.Register(c => - new OrmLiteConnectionFactory(connectionString, SqlServerDialect.Provider)); - - container.Register(c => - new OrmLiteAuthRepository(c.Resolve())); - - container.Resolve().InitSchema(); - } - - public static void Start() - { - new AppHost().Init(); - } - } -} diff --git a/NuGet/ServiceStack.Host.AspNet/content/App_Start/PageBase.cs.pp b/NuGet/ServiceStack.Host.AspNet/content/App_Start/PageBase.cs.pp deleted file mode 100644 index 446f4be9a2c..00000000000 --- a/NuGet/ServiceStack.Host.AspNet/content/App_Start/PageBase.cs.pp +++ /dev/null @@ -1,66 +0,0 @@ -using System.Web.UI; -using ServiceStack; -using ServiceStack.Caching; - - -/** - * Base ASP.NET WebForms page using ServiceStack's Compontents, see: http://www.servicestack.net/mvc-powerpack/ - */ - -namespace $rootnamespace$.App_Start -{ - //A customizeable typed UserSession that can be extended with your own properties - public class CustomUserSession : AuthUserSession - { - public string CustomProperty { get; set; } - } - - public class PageBase : Page - { - /// - /// Typed UserSession - /// - private object userSession; - protected virtual TUserSession SessionAs() - { - return (TUserSession)(userSession ?? (userSession = Cache.SessionAs())); - } - - protected CustomUserSession UserSession - { - get - { - return SessionAs(); - } - } - - public new ICacheClient Cache - { - get { return HostContext.Resolve(); } - } - - private ISessionFactory sessionFactory; - public virtual ISessionFactory SessionFactory - { - get { return sessionFactory ?? (sessionFactory = HostContext.Resolve()) ?? new SessionFactory(Cache); } - } - - /// - /// Dynamic SessionBag Bag - /// - private ISession sessionBag; - public new ISession SessionBag - { - get - { - return sessionBag ?? (sessionBag = SessionFactory.GetOrCreateSession()); - } - } - - public void ClearSession() - { - userSession = null; - this.Cache.Remove(SessionFeature.GetSessionKey()); - } - } -} diff --git a/NuGet/ServiceStack.Host.AspNet/content/App_Start/WebServiceExamples.cs.pp b/NuGet/ServiceStack.Host.AspNet/content/App_Start/WebServiceExamples.cs.pp deleted file mode 100644 index b997f3b88c1..00000000000 --- a/NuGet/ServiceStack.Host.AspNet/content/App_Start/WebServiceExamples.cs.pp +++ /dev/null @@ -1,133 +0,0 @@ -using System.Linq; -using System.Collections.Generic; -using ServiceStack; - -namespace $rootnamespace$ -{ - //Request DTO - public class Hello - { - public string Name { get; set; } - } - - //Response DTO - public class HelloResponse - { - public string Result { get; set; } - public ResponseStatus ResponseStatus { get; set; } //Where Exceptions get auto-serialized - } - - //Can be called via any endpoint or format, see: http://mono.servicestack.net/ServiceStack.Hello/ - public class HelloService : Service - { - public object Any(Hello request) - { - return new HelloResponse { Result = "Hello, " + request.Name }; - } - } - - //REST Resource DTO - [Route("/todos")] - [Route("/todos/{Ids}")] - public class Todos : IReturn> - { - public long[] Ids { get; set; } - public Todos(params long[] ids) - { - this.Ids = ids; - } - } - - [Route("/todos", "POST")] - [Route("/todos/{Id}", "PUT")] - public class Todo : IReturn - { - public long Id { get; set; } - public string Content { get; set; } - public int Order { get; set; } - public bool Done { get; set; } - } - - public class TodosService : Service - { - public TodoRepository Repository { get; set; } //Injected by IOC - - public object Get(Todos request) - { - return request.Ids.IsEmpty() - ? Repository.GetAll() - : Repository.GetByIds(request.Ids); - } - - public object Post(Todo todo) - { - return Repository.Store(todo); - } - - public object Put(Todo todo) - { - return Repository.Store(todo); - } - - public void Delete(Todos request) - { - Repository.DeleteByIds(request.Ids); - } - } - - public class TodoRepository - { - List todos = new List(); - - public List GetByIds(long[] ids) - { - return todos.Where(x => ids.Contains(x.Id)).ToList(); - } - - public List GetAll() - { - return todos; - } - - public Todo Store(Todo todo) - { - var existing = todos.FirstOrDefault(x => x.Id == todo.Id); - if (existing == null) - { - var newId = todos.Count > 0 ? todos.Max(x => x.Id) + 1 : 1; - todo.Id = newId; - todos.Add(todo); - } - else - { - existing.PopulateWith(todo); - } - return todo; - } - - public void DeleteByIds(params long[] ids) - { - todos.RemoveAll(x => ids.Contains(x.Id)); - } - } - - -/* Example calling above Service with ServiceStack's C# clients: - - var client = new JsonServiceClient(BaseUri); - List all = client.Get(new Todos()); // Count = 0 - - var todo = client.Post( - new Todo { Content = "New TODO", Order = 1 }); // todo.Id = 1 - all = client.Get(new Todos()); // Count = 1 - - todo.Content = "Updated TODO"; - todo = client.Put(todo); // todo.Content = Updated TODO - - client.Delete(new Todos(todo.Id)); - all = client.Get(new Todos()); // Count = 0 - -*/ - -} - diff --git a/NuGet/ServiceStack.Host.AspNet/content/README.txt b/NuGet/ServiceStack.Host.AspNet/content/README.txt deleted file mode 100644 index a75aa9feab6..00000000000 --- a/NuGet/ServiceStack.Host.AspNet/content/README.txt +++ /dev/null @@ -1,36 +0,0 @@ -To enable the Mini Profiler add the following lines in to Global class in Global.asax.cs: - - - protected void Application_BeginRequest(object src, EventArgs e) - { - if (Request.IsLocal) - ServiceStack.MiniProfiler.Profiler.Start(); - } - - protected void Application_EndRequest(object src, EventArgs e) - { - ServiceStack.MiniProfiler.Profiler.Stop(); - } - - -For more info on the MiniProfiler see v3.09 of the https://github.com/ServiceStack/ServiceStack/wiki/Release-Notes - - -The Urls for metadata page and included Services: - - * /metadata - Auto generated metadata pages - * /hello - Simple Hello World Service. see: http://www.servicestack.net/ServiceStack.Hello/ - * /todos - Simple REST Service. see: http://www.servicestack.net/Backbone.Todos/ - - * /default.htm - Backbone.js TODO application talking to the TODO REST service at /todos - - -For more info about ServiceStack please visit: http://www.servicestack.net - -Feel free to ask questions about ServiceStack on: -http://stackoverflow.com/ - -or on the mailing Group at: -http://groups.google.com/group/servicestack - -Enjoy! \ No newline at end of file diff --git a/NuGet/ServiceStack.Host.AspNet/content/default.htm b/NuGet/ServiceStack.Host.AspNet/content/default.htm deleted file mode 100644 index 78c2a89314c..00000000000 --- a/NuGet/ServiceStack.Host.AspNet/content/default.htm +++ /dev/null @@ -1,685 +0,0 @@ - - - - - Backbone Demo: Todos - - - - - - - - - - - - -
- -
-

Todos

-
- -
- -
- - -
- -
-
    -
    - -
    - -
    - -
    - - - -
    - Created by -
    - Jérôme Gravel-Niquet -
    -
    - Powered By Open Source -
    - servicestack.net - | redis - | mono -
    - - - - - - - - - - - - - - diff --git a/NuGet/ServiceStack.Host.AspNet/content/jqunback-1.51.min.js b/NuGet/ServiceStack.Host.AspNet/content/jqunback-1.51.min.js deleted file mode 100644 index 97da2a076f8..00000000000 --- a/NuGet/ServiceStack.Host.AspNet/content/jqunback-1.51.min.js +++ /dev/null @@ -1,68 +0,0 @@ -/*! - * jQuery JavaScript Library v1.5.1 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Wed Feb 23 13:55:29 2011 -0500 - */ -(function(a,b){function cg(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cd(a){if(!bZ[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";bZ[a]=c}return bZ[a]}function cc(a,b){var c={};d.each(cb.concat.apply([],cb.slice(0,b)),function(){c[this]=a});return c}function bY(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bX(){try{return new a.XMLHttpRequest}catch(b){}}function bW(){d(a).unload(function(){for(var a in bU)bU[a](0,1)})}function bQ(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g=0===c})}function N(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function F(a,b){return(a&&a!=="*"?a+".":"")+b.replace(r,"`").replace(s,"&")}function E(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,q=[],r=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;ic)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function C(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function w(){return!0}function v(){return!1}function g(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function f(a,c,f){if(f===b&&a.nodeType===1){f=a.getAttribute("data-"+c);if(typeof f==="string"){try{f=f==="true"?!0:f==="false"?!1:f==="null"?null:d.isNaN(f)?e.test(f)?d.parseJSON(f):f:parseFloat(f)}catch(g){}d.data(a,c,f)}else f=b}return f}var c=a.document,d=function(){function I(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(I,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x=!1,y,z="then done fail isResolved isRejected promise".split(" "),A,B=Object.prototype.toString,C=Object.prototype.hasOwnProperty,D=Array.prototype.push,E=Array.prototype.slice,F=String.prototype.trim,G=Array.prototype.indexOf,H={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.1",length:0,size:function(){return this.length},toArray:function(){return E.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?D.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(E.apply(this,arguments),"slice",E.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:D,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=!0;if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",A,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",A),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&I()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):H[B.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!C.call(a,"constructor")&&!C.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||C.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g1){var f=E.call(arguments,0),g=b,h=function(a){return function(b){f[a]=arguments.length>1?E.call(arguments,0):b,--g||c.resolveWith(e,f)}};while(b--)a=f[b],a&&d.isFunction(a.promise)?a.promise().then(h(b),c.reject):--g;g||c.resolveWith(e,f)}else c!==a&&c.resolve(a);return e},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}d.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.subclass=this.subclass,a.fn.init=function b(b,c){c&&c instanceof d&&!(c instanceof a)&&(c=a(c));return d.fn.init.call(this,b,c,e)},a.fn.init.prototype=a.fn;var e=a(c);return a},browser:{}}),y=d._Deferred(),d.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){H["[object "+b+"]"]=b.toLowerCase()}),w=d.uaMatch(v),w.browser&&(d.browser[w.browser]=!0,d.browser.version=w.version),d.browser.webkit&&(d.browser.safari=!0),G&&(d.inArray=function(a,b){return G.call(b,a)}),i.test(" ")&&(j=/^[\s\xA0]+/,k=/[\s\xA0]+$/),g=d(c),c.addEventListener?A=function(){c.removeEventListener("DOMContentLoaded",A,!1),d.ready()}:c.attachEvent&&(A=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",A),d.ready())});return d}();(function(){d.support={};var b=c.createElement("div");b.style.display="none",b.innerHTML="
    a";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e),b=e=f=null}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
    ",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
    t
    ";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function"),b=null;return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}})();var e=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!g(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,h=b.nodeType,i=h?d.cache:b,j=h?b[d.expando]:d.expando;if(!i[j])return;if(c){var k=e?i[j][f]:i[j];if(k){delete k[c];if(!g(k))return}}if(e){delete i[j][f];if(!g(i[j]))return}var l=i[j][f];d.support.deleteExpando||i!=a?delete i[j]:i[j]=null,l?(i[j]={},h||(i[j].toJSON=d.noop),i[j][f]=l):h&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var g=this[0].attributes,h;for(var i=0,j=g.length;i-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var k=i?f:0,l=i?f+1:h.length;k=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=k.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&l.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var o=a.getAttributeNode("tabIndex");return o&&o.specified?o.value:m.test(a.nodeName)||n.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var p=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return p===null?b:p}h&&(a[c]=e);return a[c]}});var p=/\.(.*)$/,q=/^(?:textarea|input|select)$/i,r=/\./g,s=/ /g,t=/[^\w\s.|`]/g,u=function(a){return a.replace(t,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=v;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(){return typeof d!=="undefined"&&!d.event.triggered?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=v);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),u).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(p,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=!0,l[m]())}catch(q){}k&&(l["on"+m]=k),d.event.triggered=!1}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},B=function B(a){var c=a.target,e,f;if(q.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=A(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:B,beforedeactivate:B,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&B.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&B.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",A(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in z)d.event.add(this,c+".specialChange",z[c]);return q.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return q.test(this.nodeName)}},z=d.event.special.change.filters,z.focus=z.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function c(a){a=d.event.fix(a),a.type=b;return d.event.handle.call(this,a)}d.event.special[b]={setup:function(){this.addEventListener(a,c,!0)},teardown:function(){this.removeEventListener(a,c,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){return"text"===a.getAttribute("type")},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector,d=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(e){d=!0}b&&(k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(d||!l.match.PSEUDO.test(c)&&!/!=/.test(c))return b.call(a,c)}catch(e){}return k(c,null,null,[a]).length>0})}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(var g=c;g0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=L.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(N(c[0])||N(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=K.call(arguments);G.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!M[a]?d.unique(f):f,(this.length>1||I.test(e))&&H.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var P=/ jQuery\d+="(?:\d+|null)"/g,Q=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,S=/<([\w:]+)/,T=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};X.optgroup=X.option,X.tbody=X.tfoot=X.colgroup=X.caption=X.thead,X.th=X.td,d.support.htmlSerialize||(X._default=[1,"div
    ","
    "]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(P,""):null;if(typeof a!=="string"||V.test(a)||!d.support.leadingWhitespace&&Q.test(a)||X[(S.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(R,"<$1>");try{for(var c=0,e=this.length;c1&&l0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){$(a,e),f=_(a),g=_(e);for(h=0;f[h];++h)$(f[h],g[h])}if(b){Z(a,e);if(c){f=_(a),g=_(e);for(h=0;f[h];++h)Z(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||U.test(i)){if(typeof i==="string"){i=i.replace(R,"<$1>");var j=(S.exec(i)||["",""])[1].toLowerCase(),k=X[j]||X._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=T.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]===""&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&Q.test(i)&&m.insertBefore(b.createTextNode(Q.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bb=/alpha\([^)]*\)/i,bc=/opacity=([^)]*)/,bd=/-([a-z])/ig,be=/([A-Z])/g,bf=/^-?\d+(?:px)?$/i,bg=/^-?\d/,bh={position:"absolute",visibility:"hidden",display:"block"},bi=["Left","Right"],bj=["Top","Bottom"],bk,bl,bm,bn=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bk(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bk)return bk(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bd,bn)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bo(a,b,e):d.swap(a,bh,function(){f=bo(a,b,e)});if(f<=0){f=bk(a,b,b),f==="0px"&&bm&&(f=bm(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bf.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return bc.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bb.test(f)?f.replace(bb,e):c.filter+" "+e}}),c.defaultView&&c.defaultView.getComputedStyle&&(bl=function(a,c,e){var f,g,h;e=e.replace(be,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bm=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bf.test(d)&&bg.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bk=bl||bm,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var bp=/%20/g,bq=/\[\]$/,br=/\r?\n/g,bs=/#.*$/,bt=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bu=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bv=/(?:^file|^widget|\-extension):$/,bw=/^(?:GET|HEAD)$/,bx=/^\/\//,by=/\?/,bz=/)<[^<]*)*<\/script>/gi,bA=/^(?:select|textarea)/i,bB=/\s+/,bC=/([?&])_=[^&]*/,bD=/(^|\-)([a-z])/g,bE=function(a,b,c){return b+c.toUpperCase()},bF=/^([\w\+\.\-]+:)\/\/([^\/?#:]*)(?::(\d+))?/,bG=d.fn.load,bH={},bI={},bJ,bK;try{bJ=c.location.href}catch(bL){bJ=c.createElement("a"),bJ.href="",bJ=bJ.href}bK=bF.exec(bJ.toLowerCase()),d.fn.extend({load:function(a,c,e){if(typeof a!=="string"&&bG)return bG.apply(this,arguments);if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var g=a.slice(f,a.length);a=a.slice(0,f)}var h="GET";c&&(d.isFunction(c)?(e=c,c=b):typeof c==="object"&&(c=d.param(c,d.ajaxSettings.traditional),h="POST"));var i=this;d.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?d("
    ").append(c.replace(bz,"")).find(g):c)),e&&i.each(e,[c,b,a])}});return this},serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?d.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bA.test(this.nodeName)||bu.test(this.type))}).map(function(a,b){var c=d(this).val();return c==null?null:d.isArray(c)?d.map(c,function(a,c){return{name:b.name,value:a.replace(br,"\r\n")}}):{name:b.name,value:c.replace(br,"\r\n")}}).get()}}),d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.bind(b,a)}}),d.each(["get","post"],function(a,c){d[c]=function(a,e,f,g){d.isFunction(e)&&(g=g||f,f=e,e=b);return d.ajax({type:c,url:a,data:e,success:f,dataType:g})}}),d.extend({getScript:function(a,c){return d.get(a,b,c,"script")},getJSON:function(a,b,c){return d.get(a,b,c,"json")},ajaxSetup:function(a,b){b?d.extend(!0,a,d.ajaxSettings,b):(b=a,a=d.extend(!0,d.ajaxSettings,b));for(var c in {context:1,url:1})c in b?a[c]=b[c]:c in d.ajaxSettings&&(a[c]=d.ajaxSettings[c]);return a},ajaxSettings:{url:bJ,isLocal:bv.test(bK[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML}},ajaxPrefilter:bM(bH),ajaxTransport:bM(bI),ajax:function(a,c){function v(a,c,l,n){if(r!==2){r=2,p&&clearTimeout(p),o=b,m=n||"",u.readyState=a?4:0;var q,t,v,w=l?bP(e,u,l):b,x,y;if(a>=200&&a<300||a===304){if(e.ifModified){if(x=u.getResponseHeader("Last-Modified"))d.lastModified[k]=x;if(y=u.getResponseHeader("Etag"))d.etag[k]=y}if(a===304)c="notmodified",q=!0;else try{t=bQ(e,w),c="success",q=!0}catch(z){c="parsererror",v=z}}else{v=c;if(!c||a)c="error",a<0&&(a=0)}u.status=a,u.statusText=c,q?h.resolveWith(f,[t,c,u]):h.rejectWith(f,[u,c,v]),u.statusCode(j),j=b,s&&g.trigger("ajax"+(q?"Success":"Error"),[u,e,q?t:v]),i.resolveWith(f,[u,c]),s&&(g.trigger("ajaxComplete",[u,e]),--d.active||d.event.trigger("ajaxStop"))}}typeof a==="object"&&(c=a,a=b),c=c||{};var e=d.ajaxSetup({},c),f=e.context||e,g=f!==e&&(f.nodeType||f instanceof d)?d(f):d.event,h=d.Deferred(),i=d._Deferred(),j=e.statusCode||{},k,l={},m,n,o,p,q,r=0,s,t,u={readyState:0,setRequestHeader:function(a,b){r||(l[a.toLowerCase().replace(bD,bE)]=b);return this},getAllResponseHeaders:function(){return r===2?m:null},getResponseHeader:function(a){var c;if(r===2){if(!n){n={};while(c=bt.exec(m))n[c[1].toLowerCase()]=c[2]}c=n[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){r||(e.mimeType=a);return this},abort:function(a){a=a||"abort",o&&o.abort(a),v(0,a);return this}};h.promise(u),u.success=u.done,u.error=u.fail,u.complete=i.done,u.statusCode=function(a){if(a){var b;if(r<2)for(b in a)j[b]=[j[b],a[b]];else b=a[u.status],u.then(b,b)}return this},e.url=((a||e.url)+"").replace(bs,"").replace(bx,bK[1]+"//"),e.dataTypes=d.trim(e.dataType||"*").toLowerCase().split(bB),e.crossDomain||(q=bF.exec(e.url.toLowerCase()),e.crossDomain=q&&(q[1]!=bK[1]||q[2]!=bK[2]||(q[3]||(q[1]==="http:"?80:443))!=(bK[3]||(bK[1]==="http:"?80:443)))),e.data&&e.processData&&typeof e.data!=="string"&&(e.data=d.param(e.data,e.traditional)),bN(bH,e,c,u);if(r===2)return!1;s=e.global,e.type=e.type.toUpperCase(),e.hasContent=!bw.test(e.type),s&&d.active++===0&&d.event.trigger("ajaxStart");if(!e.hasContent){e.data&&(e.url+=(by.test(e.url)?"&":"?")+e.data),k=e.url;if(e.cache===!1){var w=d.now(),x=e.url.replace(bC,"$1_="+w);e.url=x+(x===e.url?(by.test(e.url)?"&":"?")+"_="+w:"")}}if(e.data&&e.hasContent&&e.contentType!==!1||c.contentType)l["Content-Type"]=e.contentType;e.ifModified&&(k=k||e.url,d.lastModified[k]&&(l["If-Modified-Since"]=d.lastModified[k]),d.etag[k]&&(l["If-None-Match"]=d.etag[k])),l.Accept=e.dataTypes[0]&&e.accepts[e.dataTypes[0]]?e.accepts[e.dataTypes[0]]+(e.dataTypes[0]!=="*"?", */*; q=0.01":""):e.accepts["*"];for(t in e.headers)u.setRequestHeader(t,e.headers[t]);if(e.beforeSend&&(e.beforeSend.call(f,u,e)===!1||r===2)){u.abort();return!1}for(t in {success:1,error:1,complete:1})u[t](e[t]);o=bN(bI,e,c,u);if(o){u.readyState=1,s&&g.trigger("ajaxSend",[u,e]),e.async&&e.timeout>0&&(p=setTimeout(function(){u.abort("timeout")},e.timeout));try{r=1,o.send(l,v)}catch(y){status<2?v(-1,y):d.error(y)}}else v(-1,"No Transport");return u},param:function(a,c){var e=[],f=function(a,b){b=d.isFunction(b)?b():b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(var g in a)bO(g,a[g],c,f);return e.join("&").replace(bp,"+")}}),d.extend({active:0,lastModified:{},etag:{}});var bR=d.now(),bS=/(\=)\?(&|$)|()\?\?()/i;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return d.expando+"_"+bR++}}),d.ajaxPrefilter("json jsonp",function(b,c,e){var f=typeof b.data==="string";if(b.dataTypes[0]==="jsonp"||c.jsonpCallback||c.jsonp!=null||b.jsonp!==!1&&(bS.test(b.url)||f&&bS.test(b.data))){var g,h=b.jsonpCallback=d.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2",m=function(){a[h]=i,g&&d.isFunction(i)&&a[h](g[0])};b.jsonp!==!1&&(j=j.replace(bS,l),b.url===j&&(f&&(k=k.replace(bS,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},e.then(m,m),b.converters["script json"]=function(){g||d.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){d.globalEval(a);return a}}}),d.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),d.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var bT=d.now(),bU,bV;d.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&bX()||bY()}:bX,bV=d.ajaxSettings.xhr(),d.support.ajax=!!bV,d.support.cors=bV&&"withCredentials"in bV,bV=b,d.support.ajax&&d.ajaxTransport(function(a){if(!a.crossDomain||d.support.cors){var c;return{send:function(e,f){var g=a.xhr(),h,i;a.username?g.open(a.type,a.url,a.async,a.username,a.password):g.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)g[i]=a.xhrFields[i];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType),(!a.crossDomain||a.hasContent)&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(i in e)g.setRequestHeader(i,e[i])}catch(j){}g.send(a.hasContent&&a.data||null),c=function(e,i){var j,k,l,m,n;try{if(c&&(i||g.readyState===4)){c=b,h&&(g.onreadystatechange=d.noop,delete bU[h]);if(i)g.readyState!==4&&g.abort();else{j=g.status,l=g.getAllResponseHeaders(),m={},n=g.responseXML,n&&n.documentElement&&(m.xml=n),m.text=g.responseText;try{k=g.statusText}catch(o){k=""}j||!a.isLocal||a.crossDomain?j===1223&&(j=204):j=m.text?200:404}}}catch(p){i||f(-1,p)}m&&f(j,k,m,l)},a.async&&g.readyState!==4?(bU||(bU={},bW()),h=bT++,g.onreadystatechange=bU[h]=c):c()},abort:function(){c&&c(0,1)}}}});var bZ={},b$=/^(?:toggle|show|hide)$/,b_=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,ca,cb=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];d.fn.extend({show:function(a,b,c){var e,f;if(a||a===0)return this.animate(cc("show",3),a,b,c);for(var g=0,h=this.length;g=0;a--)c[a].elem===this&&(b&&c[a](!0),c.splice(a,1))}),b||this.dequeue();return this}}),d.each({slideDown:cc("show",1),slideUp:cc("hide",1),slideToggle:cc("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),d.extend({speed:function(a,b,c){var e=a&&typeof a==="object"?d.extend({},a):{complete:c||!c&&b||d.isFunction(a)&&a,duration:a,easing:c&&b||b&&!d.isFunction(b)&&b};e.duration=d.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in d.fx.speeds?d.fx.speeds[e.duration]:d.fx.speeds._default,e.old=e.complete,e.complete=function(){e.queue!==!1&&d(this).dequeue(),d.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig||(b.orig={})}}),d.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(d.fx.step[this.prop]||d.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=d.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return e.step(a)}var e=this,f=d.fx;this.startTime=d.now(),this.start=a,this.end=b,this.unit=c||this.unit||(d.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&d.timers.push(g)&&!ca&&(ca=setInterval(f.tick,f.interval))},show:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),d(this.elem).show()},hide:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=d.now(),c=!0;if(a||b>=this.options.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),this.options.curAnim[this.prop]=!0;for(var e in this.options.curAnim)this.options.curAnim[e]!==!0&&(c=!1);if(c){if(this.options.overflow!=null&&!d.support.shrinkWrapBlocks){var f=this.elem,g=this.options;d.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]})}this.options.hide&&d(this.elem).hide();if(this.options.hide||this.options.show)for(var h in this.options.curAnim)d.style(this.elem,h,this.options.orig[h]);this.options.complete.call(this.elem)}return!1}var i=b-this.startTime;this.state=i/this.options.duration;var j=this.options.specialEasing&&this.options.specialEasing[this.prop],k=this.options.easing||(d.easing.swing?"swing":"linear");this.pos=d.easing[j||k](this.state,i,0,1,this.options.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update();return!0}},d.extend(d.fx,{tick:function(){var a=d.timers;for(var b=0;b
    ";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),a=b=e=f=g=h=null,d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=e==="absolute"&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=cf.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!cf.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=cg(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=cg(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window);// Underscore.js 1.1.5 -// (c) 2011 Jeremy Ashkenas, DocumentCloud Inc. -// Underscore is freely distributable under the MIT license. -// Portions of Underscore are inspired or borrowed from Prototype, -// Oliver Steele's Functional, and John Resig's Micro-Templating. -// For all details and documentation: -// http://documentcloud.github.com/underscore -(function(){var q=this,D=q._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,E=k.unshift,F=o.toString,m=o.hasOwnProperty,s=k.forEach,t=k.map,u=k.reduce,v=k.reduceRight,w=k.filter,x=k.every,y=k.some,p=k.indexOf,z=k.lastIndexOf;o=Array.isArray;var G=Object.keys,A=Function.prototype.bind,c=function(a){return new l(a)};if(typeof module!=="undefined"&&module.exports){module.exports=c;c._=c}else q._=c;c.VERSION="1.1.5";var j=c.each=c.forEach=function(a,b,d){if(a!=null)if(s&&a.forEach===s)a.forEach(b, -d);else if(c.isNumber(a.length))for(var e=0,f=a.length;e=e.computed&&(e={value:f,computed:g})});return e.value};c.min=function(a,b,d){if(!b&&c.isArray(a))return Math.min.apply(Math,a);var e={computed:Infinity};j(a,function(f,g,h){g=b?b.call(d,f,g,h):f;gh?1:0}),"value")};c.sortedIndex= -function(a,b,d){d=d||c.identity;for(var e=0,f=a.length;e>1;d(a[g])=0})})};c.zip=function(){for(var a=i.call(arguments),b=c.max(c.pluck(a,"length")),d=Array(b),e=0;e=0;d--)b=[a[d].apply(this,b)];return b[0]}};c.keys=G||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)if(m.call(a, -d))b[b.length]=d;return b};c.values=function(a){return c.map(a,c.identity)};c.functions=c.methods=function(a){return c.filter(c.keys(a),function(b){return c.isFunction(a[b])}).sort()};c.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};c.defaults=function(a){j(i.call(arguments,1),function(b){for(var d in b)if(a[d]==null)a[d]=b[d]});return a};c.clone=function(a){return c.isArray(a)?a.slice():c.extend({},a)};c.tap=function(a,b){b(a);return a};c.isEqual=function(a, -b){if(a===b)return true;var d=typeof a;if(d!=typeof b)return false;if(a==b)return true;if(!a&&b||a&&!b)return false;if(a._chain)a=a._wrapped;if(b._chain)b=b._wrapped;if(a.isEqual)return a.isEqual(b);if(c.isDate(a)&&c.isDate(b))return a.getTime()===b.getTime();if(c.isNaN(a)&&c.isNaN(b))return false;if(c.isRegExp(a)&&c.isRegExp(b))return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;if(d!=="object")return false;if(a.length&&a.length!==b.length)return false; -d=c.keys(a);var e=c.keys(b);if(d.length!=e.length)return false;for(var f in a)if(!(f in b)||!c.isEqual(a[f],b[f]))return false;return true};c.isEmpty=function(a){if(c.isArray(a)||c.isString(a))return a.length===0;for(var b in a)if(m.call(a,b))return false;return true};c.isElement=function(a){return!!(a&&a.nodeType==1)};c.isArray=o||function(a){return F.call(a)==="[object Array]"};c.isArguments=function(a){return!!(a&&m.call(a,"callee"))};c.isFunction=function(a){return!!(a&&a.constructor&&a.call&& -a.apply)};c.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)};c.isNumber=function(a){return!!(a===0||a&&a.toExponential&&a.toFixed)};c.isNaN=function(a){return a!==a};c.isBoolean=function(a){return a===true||a===false};c.isDate=function(a){return!!(a&&a.getTimezoneOffset&&a.setUTCFullYear)};c.isRegExp=function(a){return!!(a&&a.test&&a.exec&&(a.ignoreCase||a.ignoreCase===false))};c.isNull=function(a){return a===null};c.isUndefined=function(a){return a===void 0};c.noConflict=function(){q._= -D;return this};c.identity=function(a){return a};c.times=function(a,b,d){for(var e=0;e/g,interpolate:/<%=([\s\S]+?)%>/g};c.template=function(a,b){var d=c.templateSettings;d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.interpolate, -function(e,f){return"',"+f.replace(/\\'/g,"'")+",'"}).replace(d.evaluate||null,function(e,f){return"');"+f.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+"__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');";d=new Function("obj",d);return b?d(b):d};var l=function(a){this._wrapped=a};c.prototype=l.prototype;var r=function(a,b){return b?c(a).chain():a},I=function(a,b){l.prototype[a]=function(){var d=i.call(arguments);E.call(d,this._wrapped);return r(b.apply(c, -d),this._chain)}};c.mixin(c);j(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=k[a];l.prototype[a]=function(){b.apply(this._wrapped,arguments);return r(this._wrapped,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];l.prototype[a]=function(){return r(b.apply(this._wrapped,arguments),this._chain)}});l.prototype.chain=function(){this._chain=true;return this};l.prototype.value=function(){return this._wrapped}})(); -// Backbone.js 0.3.3 -// (c) 2010 Jeremy Ashkenas, DocumentCloud Inc. -// Backbone may be freely distributed under the MIT license. -// For all details and documentation: -// http://documentcloud.github.com/backbone -(function(){var e;e=typeof exports!=="undefined"?exports:this.Backbone={};e.VERSION="0.3.3";var f=this._;if(!f&&typeof require!=="undefined")f=require("underscore")._;var h=this.jQuery||this.Zepto;e.emulateHTTP=false;e.emulateJSON=false;e.Events={bind:function(a,b){this._callbacks||(this._callbacks={});(this._callbacks[a]||(this._callbacks[a]=[])).push(b);return this},unbind:function(a,b){var c;if(a){if(c=this._callbacks)if(b){c=c[a];if(!c)return this;for(var d=0,g=c.length;d/g,">").replace(/"/g, -""")},set:function(a,b){b||(b={});if(!a)return this;if(a.attributes)a=a.attributes;var c=this.attributes,d=this._escapedAttributes;if(!b.silent&&this.validate&&!this._performValidation(a,b))return false;if("id"in a)this.id=a.id;for(var g in a){var i=a[g];if(!f.isEqual(c[g],i)){c[g]=i;delete d[g];if(!b.silent){this._changed=true;this.trigger("change:"+g,this,i,b)}}}!b.silent&&this._changed&&this.change(b);return this},unset:function(a,b){b||(b={});var c={};c[a]=void 0;if(!b.silent&&this.validate&& -!this._performValidation(c,b))return false;delete this.attributes[a];delete this._escapedAttributes[a];if(!b.silent){this._changed=true;this.trigger("change:"+a,this,void 0,b);this.change(b)}return this},clear:function(a){a||(a={});var b=this.attributes,c={};for(attr in b)c[attr]=void 0;if(!a.silent&&this.validate&&!this._performValidation(c,a))return false;this.attributes={};this._escapedAttributes={};if(!a.silent){this._changed=true;for(attr in b)this.trigger("change:"+attr,this,void 0,a);this.change(a)}return this}, -fetch:function(a){a||(a={});var b=this,c=j(a.error,b,a);(this.sync||e.sync)("read",this,function(d){if(!b.set(b.parse(d),a))return false;a.success&&a.success(b,d)},c);return this},save:function(a,b){b||(b={});if(a&&!this.set(a,b))return false;var c=this,d=j(b.error,c,b),g=this.isNew()?"create":"update";(this.sync||e.sync)(g,this,function(i){if(!c.set(c.parse(i),b))return false;b.success&&b.success(c,i)},d);return this},destroy:function(a){a||(a={});var b=this,c=j(a.error,b,a);(this.sync||e.sync)("delete", -this,function(d){b.collection&&b.collection.remove(b);a.success&&a.success(b,d)},c);return this},url:function(){var a=k(this.collection);if(this.isNew())return a;return a+(a.charAt(a.length-1)=="/"?"":"/")+this.id},parse:function(a){return a},clone:function(){return new this.constructor(this)},isNew:function(){return!this.id},change:function(a){this.trigger("change",this,a);this._previousAttributes=f.clone(this.attributes);this._changed=false},hasChanged:function(a){if(a)return this._previousAttributes[a]!= -this.attributes[a];return this._changed},changedAttributes:function(a){a||(a=this.attributes);var b=this._previousAttributes,c=false,d;for(d in a)if(!f.isEqual(b[d],a[d])){c=c||{};c[d]=a[d]}return c},previous:function(a){if(!a||!this._previousAttributes)return null;return this._previousAttributes[a]},previousAttributes:function(){return f.clone(this._previousAttributes)},_performValidation:function(a,b){var c=this.validate(a);if(c){b.error?b.error(this,c):this.trigger("error",this,c,b);return false}return true}}); -e.Collection=function(a,b){b||(b={});if(b.comparator){this.comparator=b.comparator;delete b.comparator}this._boundOnModelEvent=f.bind(this._onModelEvent,this);this._reset();a&&this.refresh(a,{silent:true});this.initialize(a,b)};f.extend(e.Collection.prototype,e.Events,{model:e.Model,initialize:function(){},toJSON:function(){return this.map(function(a){return a.toJSON()})},add:function(a,b){if(f.isArray(a))for(var c=0,d=a.length;c').hide().appendTo("body")[0].contentWindow; -"onhashchange"in window&&!a?h(window).bind("hashchange",this.checkUrl):setInterval(this.checkUrl,this.interval);return this.loadUrl()},route:function(a,b){this.handlers.push({route:a,callback:b})},checkUrl:function(){var a=this.getFragment();if(a==this.fragment&&this.iframe)a=this.getFragment(this.iframe.location);if(a==this.fragment||a==decodeURIComponent(this.fragment))return false;if(this.iframe)window.location.hash=this.iframe.location.hash=a;this.loadUrl()},loadUrl:function(){var a=this.fragment= -this.getFragment();return f.any(this.handlers,function(b){if(b.route.test(a)){b.callback(a);return true}})},saveLocation:function(a){a=(a||"").replace(l,"");if(this.fragment!=a){window.location.hash=this.fragment=a;if(this.iframe&&a!=this.getFragment(this.iframe.location)){this.iframe.document.open().close();this.iframe.location.hash=a}}}});e.View=function(a){this._configure(a||{});this._ensureElement();this.delegateEvents();this.initialize(a)};var q=/^(\w+)\s*(.*)$/;f.extend(e.View.prototype,e.Events, -{tagName:"div",$:function(a){return h(a,this.el)},initialize:function(){},render:function(){return this},remove:function(){h(this.el).remove();return this},make:function(a,b,c){a=document.createElement(a);b&&h(a).attr(b);c&&h(a).html(c);return a},delegateEvents:function(a){if(a||(a=this.events)){h(this.el).unbind();for(var b in a){var c=a[b],d=b.match(q),g=d[1];d=d[2];c=f.bind(this[c],this);d===""?h(this.el).bind(g,c):h(this.el).delegate(d,g,c)}}},_configure:function(a){if(this.options)a=f.extend({}, -this.options,a);if(a.model)this.model=a.model;if(a.collection)this.collection=a.collection;if(a.el)this.el=a.el;if(a.id)this.id=a.id;if(a.className)this.className=a.className;if(a.tagName)this.tagName=a.tagName;this.options=a},_ensureElement:function(){if(!this.el){var a={};if(this.id)a.id=this.id;if(this.className)a["class"]=this.className;this.el=this.make(this.tagName,a)}}});var m=function(a,b){var c=r(this,a,b);c.extend=m;return c};e.Model.extend=e.Collection.extend=e.Controller.extend=e.View.extend= -m;var s={create:"POST",update:"PUT","delete":"DELETE",read:"GET"};e.sync=function(a,b,c,d){var g=s[a];a=a==="create"||a==="update"?JSON.stringify(b.toJSON()):null;b={url:k(b),type:g,contentType:"application/json",data:a,dataType:"json",processData:false,success:c,error:d};if(e.emulateJSON){b.contentType="application/x-www-form-urlencoded";b.processData=true;b.data=a?{model:a}:{}}if(e.emulateHTTP)if(g==="PUT"||g==="DELETE"){if(e.emulateJSON)b.data._method=g;b.type="POST";b.beforeSend=function(i){i.setRequestHeader("X-HTTP-Method-Override", -g)}}h.ajax(b)};var n=function(){},r=function(a,b,c){var d;d=b&&b.hasOwnProperty("constructor")?b.constructor:function(){return a.apply(this,arguments)};n.prototype=a.prototype;d.prototype=new n;b&&f.extend(d.prototype,b);c&&f.extend(d,c);d.prototype.constructor=d;d.__super__=a.prototype;return d},k=function(a){if(!(a&&a.url))throw Error("A 'url' property or function must be specified");return f.isFunction(a.url)?a.url():a.url},j=function(a,b,c){return function(d){a?a(b,d):b.trigger("error",b,d,c)}}})(); diff --git a/NuGet/ServiceStack.Host.AspNet/content/web.config.transform b/NuGet/ServiceStack.Host.AspNet/content/web.config.transform deleted file mode 100644 index 0b4a8586dc0..00000000000 --- a/NuGet/ServiceStack.Host.AspNet/content/web.config.transform +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/NuGet/ServiceStack.Host.AspNet/servicestack.host.aspnet.nuspec b/NuGet/ServiceStack.Host.AspNet/servicestack.host.aspnet.nuspec deleted file mode 100644 index 320a473e39c..00000000000 --- a/NuGet/ServiceStack.Host.AspNet/servicestack.host.aspnet.nuspec +++ /dev/null @@ -1,26 +0,0 @@ - - - - ServiceStack.Host.AspNet - Starter ASP.NET Website Template - ServiceStack at / - 4.0.0 - Service Stack - Service Stack - Opensource .NET and Mono REST Web Services framework - -Host ServiceStack in an existing ASP.NET web application at the root path '/'. -ServiceStack is a modern, high-performance, code-first web service framework promoting code and web services best practices. Simple, Fast, Elegant. Website: https://servicestack.net - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - Fast JSON XML CSV HTML SOAP JSV REST Web Service Framework MONO ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Host.Mvc/content/App_Start/AppHost.cs.pp b/NuGet/ServiceStack.Host.Mvc/content/App_Start/AppHost.cs.pp deleted file mode 100644 index 3db30ad0502..00000000000 --- a/NuGet/ServiceStack.Host.Mvc/content/App_Start/AppHost.cs.pp +++ /dev/null @@ -1,96 +0,0 @@ -using System.Configuration; -using System.Web.Mvc; -using ServiceStack; -using ServiceStack.Auth; -using ServiceStack.Configuration; -using ServiceStack.Data; -using ServiceStack.Mvc; -using ServiceStack.OrmLite; - -[assembly: WebActivator.PreApplicationStartMethod(typeof($rootnamespace$.App_Start.AppHost), "Start")] - -//IMPORTANT: Add the line below to RouteConfig.RegisterRoutes(RouteCollection) in the Global.asax: -//routes.IgnoreRoute("api/{*pathInfo}"); -//More info on how to integrate with MVC: https://github.com/ServiceStack/ServiceStack/wiki/Mvc-integration - -/** - * Entire ServiceStack Starter Template configured with a 'Hello' Web Service and a 'Todo' Rest Service. - * - * Auto-Generated Metadata API page at: /metadata - * See other complete web service examples at: https://github.com/ServiceStack/ServiceStack.Examples - */ - -namespace $rootnamespace$.App_Start -{ - //A customizeable typed UserSession that can be extended with your own properties - //To access ServiceStack's Session, Cache, etc from MVC Controllers inherit from ControllerBase - public class CustomUserSession : AuthUserSession - { - public string CustomProperty { get; set; } - } - - public class AppHost - : AppHostBase - { - public AppHost() //Tell ServiceStack the name and where to find your web services - : base("StarterTemplate ASP.NET Host", typeof(HelloService).Assembly) { } - - public override void Configure(Funq.Container container) - { - //Set JSON web services to return idiomatic JSON camelCase properties - ServiceStack.Text.JsConfig.EmitCamelCaseNames = true; - - //Configure User Defined REST Paths - Routes - .Add("/hello") - .Add("/hello/{Name*}"); - - //Uncomment to change the default ServiceStack configuration - //SetConfig(new HostConfig - //{ - //}); - - //Enable Authentication - //ConfigureAuth(container); - - //Register all your dependencies - container.Register(new TodoRepository()); - - //Set MVC to use the same Funq IOC as ServiceStack - ControllerBuilder.Current.SetControllerFactory(new FunqControllerFactory(container)); - } - - /* Uncomment to enable ServiceStack Authentication and CustomUserSession */ - private void ConfigureAuth(Funq.Container container) - { - var appSettings = new AppSettings(); - - //Default route: /auth/{provider} - Plugins.Add(new AuthFeature(() => new CustomUserSession(), - new IAuthProvider[] { - new CredentialsAuthProvider(appSettings), - new FacebookAuthProvider(appSettings), - new TwitterAuthProvider(appSettings), - new BasicAuthProvider(appSettings), - })); - - //Default route: /register - Plugins.Add(new RegistrationFeature()); - - //Requires ConnectionString configured in Web.Config - var connectionString = ConfigurationManager.ConnectionStrings["AppDb"].ConnectionString; - container.Register(c => - new OrmLiteConnectionFactory(connectionString, SqlServerDialect.Provider)); - - container.Register(c => - new OrmLiteAuthRepository(c.Resolve())); - - container.Resolve().InitSchema(); - } - - public static void Start() - { - new AppHost().Init(); - } - } -} diff --git a/NuGet/ServiceStack.Host.Mvc/content/README.txt b/NuGet/ServiceStack.Host.Mvc/content/README.txt deleted file mode 100644 index a02de2a60bd..00000000000 --- a/NuGet/ServiceStack.Host.Mvc/content/README.txt +++ /dev/null @@ -1,48 +0,0 @@ -You *MUST* register ServiceStacks '/api' path by adding the lines below to MvcApplication.RegisterRoutes(RouteCollection) in the Global.asax: - - routes.IgnoreRoute("api/{*pathInfo}"); - routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); //Prevent exceptions for favicon - -Place them before the current entries the method. - -For MVC4 applications you also need to unregister WebApi, by commenting out this line: - - //WebApiConfig.Register(GlobalConfiguration.Configuration); - - -To enable the Mini Profiler add the following lines in to MvcApplication in Global.asax.cs: - - protected void Application_BeginRequest(object src, EventArgs e) - { - if (Request.IsLocal) - ServiceStack.MiniProfiler.Profiler.Start(); - } - - protected void Application_EndRequest(object src, EventArgs e) - { - ServiceStack.MiniProfiler.Profiler.Stop(); - } - - -For more info on the MiniProfiler see v3.09 of the https://github.com/ServiceStack/ServiceStack/wiki/Release-Notes - - -The Urls for metadata page and included Services: - - * /api/metadata - Auto generated metadata pages - * /api/hello - Simple Hello World Service see: http://www.servicestack.net/ServiceStack.Hello/ - * /api/todos - Simple REST Service see: http://www.servicestack.net/Backbone.Todos/ - - * /default.htm - Backbone.js TODO application talking to the TODO REST service at /api/todos - - - -For more info about ServiceStack please visit: http://www.servicestack.net - -Feel free to ask questions about ServiceStack on: -http://stackoverflow.com/ - -or on the mailing Group at: -http://groups.google.com/group/servicestack - -Enjoy! \ No newline at end of file diff --git a/NuGet/ServiceStack.Host.Mvc/content/WebServiceExamples.cs.pp b/NuGet/ServiceStack.Host.Mvc/content/WebServiceExamples.cs.pp deleted file mode 100644 index 9f16bcd8c63..00000000000 --- a/NuGet/ServiceStack.Host.Mvc/content/WebServiceExamples.cs.pp +++ /dev/null @@ -1,132 +0,0 @@ -using System.Linq; -using System.Collections.Generic; -using ServiceStack; - -namespace $rootnamespace$ -{ - //Request DTO - public class Hello - { - public string Name { get; set; } - } - - //Response DTO - public class HelloResponse - { - public string Result { get; set; } - public ResponseStatus ResponseStatus { get; set; } //Where Exceptions get auto-serialized - } - - //Can be called via any endpoint or format, see: http://mono.servicestack.net/ServiceStack.Hello/ - public class HelloService : Service - { - public object Any(Hello request) - { - return new HelloResponse { Result = "Hello, " + request.Name }; - } - } - - //REST Resource DTO - [Route("/todos")] - [Route("/todos/{Ids}")] - public class Todos : IReturn> - { - public long[] Ids { get; set; } - public Todos(params long[] ids) - { - this.Ids = ids; - } - } - - [Route("/todos", "POST")] - [Route("/todos/{Id}", "PUT")] - public class Todo : IReturn - { - public long Id { get; set; } - public string Content { get; set; } - public int Order { get; set; } - public bool Done { get; set; } - } - - public class TodosService : Service - { - public TodoRepository Repository { get; set; } //Injected by IOC - - public object Get(Todos request) - { - return request.Ids.IsEmpty() - ? Repository.GetAll() - : Repository.GetByIds(request.Ids); - } - - public object Post(Todo todo) - { - return Repository.Store(todo); - } - - public object Put(Todo todo) - { - return Repository.Store(todo); - } - - public void Delete(Todos request) - { - Repository.DeleteByIds(request.Ids); - } - } - - public class TodoRepository - { - List todos = new List(); - - public List GetByIds(long[] ids) - { - return todos.Where(x => ids.Contains(x.Id)).ToList(); - } - - public List GetAll() - { - return todos; - } - - public Todo Store(Todo todo) - { - var existing = todos.FirstOrDefault(x => x.Id == todo.Id); - if (existing == null) - { - var newId = todos.Count > 0 ? todos.Max(x => x.Id) + 1 : 1; - todo.Id = newId; - todos.Add(todo); - } - else - { - existing.PopulateWith(todo); - } - return todo; - } - - public void DeleteByIds(params long[] ids) - { - todos.RemoveAll(x => ids.Contains(x.Id)); - } - } - - -/* Example calling above Service with ServiceStack's C# clients: - - var client = new JsonServiceClient(BaseUri); - List all = client.Get(new Todos()); // Count = 0 - - var todo = client.Post( - new Todo { Content = "New TODO", Order = 1 }); // todo.Id = 1 - all = client.Get(new Todos()); // Count = 1 - - todo.Content = "Updated TODO"; - todo = client.Put(todo); // todo.Content = Updated TODO - - client.Delete(new Todos(todo.Id)); - all = client.Get(new Todos()); // Count = 0 - -*/ - -} diff --git a/NuGet/ServiceStack.Host.Mvc/content/default.htm b/NuGet/ServiceStack.Host.Mvc/content/default.htm deleted file mode 100644 index a451c4f026a..00000000000 --- a/NuGet/ServiceStack.Host.Mvc/content/default.htm +++ /dev/null @@ -1,685 +0,0 @@ - - - - - Backbone Demo: Todos - - - - - - - - - - - - -
    - -
    -

    Todos

    -
    - -
    - -
    - - -
    - -
    -
      -
      - -
      - -
      - -
      - - - -
      - Created by -
      - Jérôme Gravel-Niquet -
      -
      - Powered By Open Source -
      - servicestack.net - | redis - | mono -
      - - - - - - - - - - - - - - diff --git a/NuGet/ServiceStack.Host.Mvc/content/jqunback-1.51.min.js b/NuGet/ServiceStack.Host.Mvc/content/jqunback-1.51.min.js deleted file mode 100644 index 97da2a076f8..00000000000 --- a/NuGet/ServiceStack.Host.Mvc/content/jqunback-1.51.min.js +++ /dev/null @@ -1,68 +0,0 @@ -/*! - * jQuery JavaScript Library v1.5.1 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Wed Feb 23 13:55:29 2011 -0500 - */ -(function(a,b){function cg(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cd(a){if(!bZ[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";bZ[a]=c}return bZ[a]}function cc(a,b){var c={};d.each(cb.concat.apply([],cb.slice(0,b)),function(){c[this]=a});return c}function bY(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bX(){try{return new a.XMLHttpRequest}catch(b){}}function bW(){d(a).unload(function(){for(var a in bU)bU[a](0,1)})}function bQ(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g=0===c})}function N(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function F(a,b){return(a&&a!=="*"?a+".":"")+b.replace(r,"`").replace(s,"&")}function E(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,q=[],r=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;ic)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function C(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function w(){return!0}function v(){return!1}function g(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function f(a,c,f){if(f===b&&a.nodeType===1){f=a.getAttribute("data-"+c);if(typeof f==="string"){try{f=f==="true"?!0:f==="false"?!1:f==="null"?null:d.isNaN(f)?e.test(f)?d.parseJSON(f):f:parseFloat(f)}catch(g){}d.data(a,c,f)}else f=b}return f}var c=a.document,d=function(){function I(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(I,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x=!1,y,z="then done fail isResolved isRejected promise".split(" "),A,B=Object.prototype.toString,C=Object.prototype.hasOwnProperty,D=Array.prototype.push,E=Array.prototype.slice,F=String.prototype.trim,G=Array.prototype.indexOf,H={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.1",length:0,size:function(){return this.length},toArray:function(){return E.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?D.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(E.apply(this,arguments),"slice",E.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:D,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=!0;if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",A,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",A),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&I()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):H[B.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!C.call(a,"constructor")&&!C.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||C.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g1){var f=E.call(arguments,0),g=b,h=function(a){return function(b){f[a]=arguments.length>1?E.call(arguments,0):b,--g||c.resolveWith(e,f)}};while(b--)a=f[b],a&&d.isFunction(a.promise)?a.promise().then(h(b),c.reject):--g;g||c.resolveWith(e,f)}else c!==a&&c.resolve(a);return e},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}d.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.subclass=this.subclass,a.fn.init=function b(b,c){c&&c instanceof d&&!(c instanceof a)&&(c=a(c));return d.fn.init.call(this,b,c,e)},a.fn.init.prototype=a.fn;var e=a(c);return a},browser:{}}),y=d._Deferred(),d.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){H["[object "+b+"]"]=b.toLowerCase()}),w=d.uaMatch(v),w.browser&&(d.browser[w.browser]=!0,d.browser.version=w.version),d.browser.webkit&&(d.browser.safari=!0),G&&(d.inArray=function(a,b){return G.call(b,a)}),i.test(" ")&&(j=/^[\s\xA0]+/,k=/[\s\xA0]+$/),g=d(c),c.addEventListener?A=function(){c.removeEventListener("DOMContentLoaded",A,!1),d.ready()}:c.attachEvent&&(A=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",A),d.ready())});return d}();(function(){d.support={};var b=c.createElement("div");b.style.display="none",b.innerHTML="
      a";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e),b=e=f=null}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
      ",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
      t
      ";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function"),b=null;return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}})();var e=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!g(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,h=b.nodeType,i=h?d.cache:b,j=h?b[d.expando]:d.expando;if(!i[j])return;if(c){var k=e?i[j][f]:i[j];if(k){delete k[c];if(!g(k))return}}if(e){delete i[j][f];if(!g(i[j]))return}var l=i[j][f];d.support.deleteExpando||i!=a?delete i[j]:i[j]=null,l?(i[j]={},h||(i[j].toJSON=d.noop),i[j][f]=l):h&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var g=this[0].attributes,h;for(var i=0,j=g.length;i-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var k=i?f:0,l=i?f+1:h.length;k=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=k.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&l.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var o=a.getAttributeNode("tabIndex");return o&&o.specified?o.value:m.test(a.nodeName)||n.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var p=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return p===null?b:p}h&&(a[c]=e);return a[c]}});var p=/\.(.*)$/,q=/^(?:textarea|input|select)$/i,r=/\./g,s=/ /g,t=/[^\w\s.|`]/g,u=function(a){return a.replace(t,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=v;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(){return typeof d!=="undefined"&&!d.event.triggered?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=v);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),u).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(p,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=!0,l[m]())}catch(q){}k&&(l["on"+m]=k),d.event.triggered=!1}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},B=function B(a){var c=a.target,e,f;if(q.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=A(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:B,beforedeactivate:B,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&B.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&B.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",A(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in z)d.event.add(this,c+".specialChange",z[c]);return q.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return q.test(this.nodeName)}},z=d.event.special.change.filters,z.focus=z.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function c(a){a=d.event.fix(a),a.type=b;return d.event.handle.call(this,a)}d.event.special[b]={setup:function(){this.addEventListener(a,c,!0)},teardown:function(){this.removeEventListener(a,c,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){return"text"===a.getAttribute("type")},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

      ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector,d=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(e){d=!0}b&&(k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(d||!l.match.PSEUDO.test(c)&&!/!=/.test(c))return b.call(a,c)}catch(e){}return k(c,null,null,[a]).length>0})}(),function(){var a=c.createElement("div");a.innerHTML="
      ";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(var g=c;g0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=L.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(N(c[0])||N(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=K.call(arguments);G.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!M[a]?d.unique(f):f,(this.length>1||I.test(e))&&H.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var P=/ jQuery\d+="(?:\d+|null)"/g,Q=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,S=/<([\w:]+)/,T=/",""],legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]};X.optgroup=X.option,X.tbody=X.tfoot=X.colgroup=X.caption=X.thead,X.th=X.td,d.support.htmlSerialize||(X._default=[1,"div
      ","
      "]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(P,""):null;if(typeof a!=="string"||V.test(a)||!d.support.leadingWhitespace&&Q.test(a)||X[(S.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(R,"<$1>");try{for(var c=0,e=this.length;c1&&l0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){$(a,e),f=_(a),g=_(e);for(h=0;f[h];++h)$(f[h],g[h])}if(b){Z(a,e);if(c){f=_(a),g=_(e);for(h=0;f[h];++h)Z(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||U.test(i)){if(typeof i==="string"){i=i.replace(R,"<$1>");var j=(S.exec(i)||["",""])[1].toLowerCase(),k=X[j]||X._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=T.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]===""&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&Q.test(i)&&m.insertBefore(b.createTextNode(Q.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bb=/alpha\([^)]*\)/i,bc=/opacity=([^)]*)/,bd=/-([a-z])/ig,be=/([A-Z])/g,bf=/^-?\d+(?:px)?$/i,bg=/^-?\d/,bh={position:"absolute",visibility:"hidden",display:"block"},bi=["Left","Right"],bj=["Top","Bottom"],bk,bl,bm,bn=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bk(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bk)return bk(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bd,bn)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bo(a,b,e):d.swap(a,bh,function(){f=bo(a,b,e)});if(f<=0){f=bk(a,b,b),f==="0px"&&bm&&(f=bm(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bf.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return bc.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bb.test(f)?f.replace(bb,e):c.filter+" "+e}}),c.defaultView&&c.defaultView.getComputedStyle&&(bl=function(a,c,e){var f,g,h;e=e.replace(be,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bm=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bf.test(d)&&bg.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bk=bl||bm,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var bp=/%20/g,bq=/\[\]$/,br=/\r?\n/g,bs=/#.*$/,bt=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bu=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bv=/(?:^file|^widget|\-extension):$/,bw=/^(?:GET|HEAD)$/,bx=/^\/\//,by=/\?/,bz=/)<[^<]*)*<\/script>/gi,bA=/^(?:select|textarea)/i,bB=/\s+/,bC=/([?&])_=[^&]*/,bD=/(^|\-)([a-z])/g,bE=function(a,b,c){return b+c.toUpperCase()},bF=/^([\w\+\.\-]+:)\/\/([^\/?#:]*)(?::(\d+))?/,bG=d.fn.load,bH={},bI={},bJ,bK;try{bJ=c.location.href}catch(bL){bJ=c.createElement("a"),bJ.href="",bJ=bJ.href}bK=bF.exec(bJ.toLowerCase()),d.fn.extend({load:function(a,c,e){if(typeof a!=="string"&&bG)return bG.apply(this,arguments);if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var g=a.slice(f,a.length);a=a.slice(0,f)}var h="GET";c&&(d.isFunction(c)?(e=c,c=b):typeof c==="object"&&(c=d.param(c,d.ajaxSettings.traditional),h="POST"));var i=this;d.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?d("
      ").append(c.replace(bz,"")).find(g):c)),e&&i.each(e,[c,b,a])}});return this},serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?d.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bA.test(this.nodeName)||bu.test(this.type))}).map(function(a,b){var c=d(this).val();return c==null?null:d.isArray(c)?d.map(c,function(a,c){return{name:b.name,value:a.replace(br,"\r\n")}}):{name:b.name,value:c.replace(br,"\r\n")}}).get()}}),d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.bind(b,a)}}),d.each(["get","post"],function(a,c){d[c]=function(a,e,f,g){d.isFunction(e)&&(g=g||f,f=e,e=b);return d.ajax({type:c,url:a,data:e,success:f,dataType:g})}}),d.extend({getScript:function(a,c){return d.get(a,b,c,"script")},getJSON:function(a,b,c){return d.get(a,b,c,"json")},ajaxSetup:function(a,b){b?d.extend(!0,a,d.ajaxSettings,b):(b=a,a=d.extend(!0,d.ajaxSettings,b));for(var c in {context:1,url:1})c in b?a[c]=b[c]:c in d.ajaxSettings&&(a[c]=d.ajaxSettings[c]);return a},ajaxSettings:{url:bJ,isLocal:bv.test(bK[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML}},ajaxPrefilter:bM(bH),ajaxTransport:bM(bI),ajax:function(a,c){function v(a,c,l,n){if(r!==2){r=2,p&&clearTimeout(p),o=b,m=n||"",u.readyState=a?4:0;var q,t,v,w=l?bP(e,u,l):b,x,y;if(a>=200&&a<300||a===304){if(e.ifModified){if(x=u.getResponseHeader("Last-Modified"))d.lastModified[k]=x;if(y=u.getResponseHeader("Etag"))d.etag[k]=y}if(a===304)c="notmodified",q=!0;else try{t=bQ(e,w),c="success",q=!0}catch(z){c="parsererror",v=z}}else{v=c;if(!c||a)c="error",a<0&&(a=0)}u.status=a,u.statusText=c,q?h.resolveWith(f,[t,c,u]):h.rejectWith(f,[u,c,v]),u.statusCode(j),j=b,s&&g.trigger("ajax"+(q?"Success":"Error"),[u,e,q?t:v]),i.resolveWith(f,[u,c]),s&&(g.trigger("ajaxComplete",[u,e]),--d.active||d.event.trigger("ajaxStop"))}}typeof a==="object"&&(c=a,a=b),c=c||{};var e=d.ajaxSetup({},c),f=e.context||e,g=f!==e&&(f.nodeType||f instanceof d)?d(f):d.event,h=d.Deferred(),i=d._Deferred(),j=e.statusCode||{},k,l={},m,n,o,p,q,r=0,s,t,u={readyState:0,setRequestHeader:function(a,b){r||(l[a.toLowerCase().replace(bD,bE)]=b);return this},getAllResponseHeaders:function(){return r===2?m:null},getResponseHeader:function(a){var c;if(r===2){if(!n){n={};while(c=bt.exec(m))n[c[1].toLowerCase()]=c[2]}c=n[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){r||(e.mimeType=a);return this},abort:function(a){a=a||"abort",o&&o.abort(a),v(0,a);return this}};h.promise(u),u.success=u.done,u.error=u.fail,u.complete=i.done,u.statusCode=function(a){if(a){var b;if(r<2)for(b in a)j[b]=[j[b],a[b]];else b=a[u.status],u.then(b,b)}return this},e.url=((a||e.url)+"").replace(bs,"").replace(bx,bK[1]+"//"),e.dataTypes=d.trim(e.dataType||"*").toLowerCase().split(bB),e.crossDomain||(q=bF.exec(e.url.toLowerCase()),e.crossDomain=q&&(q[1]!=bK[1]||q[2]!=bK[2]||(q[3]||(q[1]==="http:"?80:443))!=(bK[3]||(bK[1]==="http:"?80:443)))),e.data&&e.processData&&typeof e.data!=="string"&&(e.data=d.param(e.data,e.traditional)),bN(bH,e,c,u);if(r===2)return!1;s=e.global,e.type=e.type.toUpperCase(),e.hasContent=!bw.test(e.type),s&&d.active++===0&&d.event.trigger("ajaxStart");if(!e.hasContent){e.data&&(e.url+=(by.test(e.url)?"&":"?")+e.data),k=e.url;if(e.cache===!1){var w=d.now(),x=e.url.replace(bC,"$1_="+w);e.url=x+(x===e.url?(by.test(e.url)?"&":"?")+"_="+w:"")}}if(e.data&&e.hasContent&&e.contentType!==!1||c.contentType)l["Content-Type"]=e.contentType;e.ifModified&&(k=k||e.url,d.lastModified[k]&&(l["If-Modified-Since"]=d.lastModified[k]),d.etag[k]&&(l["If-None-Match"]=d.etag[k])),l.Accept=e.dataTypes[0]&&e.accepts[e.dataTypes[0]]?e.accepts[e.dataTypes[0]]+(e.dataTypes[0]!=="*"?", */*; q=0.01":""):e.accepts["*"];for(t in e.headers)u.setRequestHeader(t,e.headers[t]);if(e.beforeSend&&(e.beforeSend.call(f,u,e)===!1||r===2)){u.abort();return!1}for(t in {success:1,error:1,complete:1})u[t](e[t]);o=bN(bI,e,c,u);if(o){u.readyState=1,s&&g.trigger("ajaxSend",[u,e]),e.async&&e.timeout>0&&(p=setTimeout(function(){u.abort("timeout")},e.timeout));try{r=1,o.send(l,v)}catch(y){status<2?v(-1,y):d.error(y)}}else v(-1,"No Transport");return u},param:function(a,c){var e=[],f=function(a,b){b=d.isFunction(b)?b():b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(var g in a)bO(g,a[g],c,f);return e.join("&").replace(bp,"+")}}),d.extend({active:0,lastModified:{},etag:{}});var bR=d.now(),bS=/(\=)\?(&|$)|()\?\?()/i;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return d.expando+"_"+bR++}}),d.ajaxPrefilter("json jsonp",function(b,c,e){var f=typeof b.data==="string";if(b.dataTypes[0]==="jsonp"||c.jsonpCallback||c.jsonp!=null||b.jsonp!==!1&&(bS.test(b.url)||f&&bS.test(b.data))){var g,h=b.jsonpCallback=d.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2",m=function(){a[h]=i,g&&d.isFunction(i)&&a[h](g[0])};b.jsonp!==!1&&(j=j.replace(bS,l),b.url===j&&(f&&(k=k.replace(bS,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},e.then(m,m),b.converters["script json"]=function(){g||d.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){d.globalEval(a);return a}}}),d.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),d.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var bT=d.now(),bU,bV;d.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&bX()||bY()}:bX,bV=d.ajaxSettings.xhr(),d.support.ajax=!!bV,d.support.cors=bV&&"withCredentials"in bV,bV=b,d.support.ajax&&d.ajaxTransport(function(a){if(!a.crossDomain||d.support.cors){var c;return{send:function(e,f){var g=a.xhr(),h,i;a.username?g.open(a.type,a.url,a.async,a.username,a.password):g.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)g[i]=a.xhrFields[i];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType),(!a.crossDomain||a.hasContent)&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(i in e)g.setRequestHeader(i,e[i])}catch(j){}g.send(a.hasContent&&a.data||null),c=function(e,i){var j,k,l,m,n;try{if(c&&(i||g.readyState===4)){c=b,h&&(g.onreadystatechange=d.noop,delete bU[h]);if(i)g.readyState!==4&&g.abort();else{j=g.status,l=g.getAllResponseHeaders(),m={},n=g.responseXML,n&&n.documentElement&&(m.xml=n),m.text=g.responseText;try{k=g.statusText}catch(o){k=""}j||!a.isLocal||a.crossDomain?j===1223&&(j=204):j=m.text?200:404}}}catch(p){i||f(-1,p)}m&&f(j,k,m,l)},a.async&&g.readyState!==4?(bU||(bU={},bW()),h=bT++,g.onreadystatechange=bU[h]=c):c()},abort:function(){c&&c(0,1)}}}});var bZ={},b$=/^(?:toggle|show|hide)$/,b_=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,ca,cb=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];d.fn.extend({show:function(a,b,c){var e,f;if(a||a===0)return this.animate(cc("show",3),a,b,c);for(var g=0,h=this.length;g=0;a--)c[a].elem===this&&(b&&c[a](!0),c.splice(a,1))}),b||this.dequeue();return this}}),d.each({slideDown:cc("show",1),slideUp:cc("hide",1),slideToggle:cc("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),d.extend({speed:function(a,b,c){var e=a&&typeof a==="object"?d.extend({},a):{complete:c||!c&&b||d.isFunction(a)&&a,duration:a,easing:c&&b||b&&!d.isFunction(b)&&b};e.duration=d.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in d.fx.speeds?d.fx.speeds[e.duration]:d.fx.speeds._default,e.old=e.complete,e.complete=function(){e.queue!==!1&&d(this).dequeue(),d.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig||(b.orig={})}}),d.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(d.fx.step[this.prop]||d.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=d.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return e.step(a)}var e=this,f=d.fx;this.startTime=d.now(),this.start=a,this.end=b,this.unit=c||this.unit||(d.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&d.timers.push(g)&&!ca&&(ca=setInterval(f.tick,f.interval))},show:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),d(this.elem).show()},hide:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=d.now(),c=!0;if(a||b>=this.options.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),this.options.curAnim[this.prop]=!0;for(var e in this.options.curAnim)this.options.curAnim[e]!==!0&&(c=!1);if(c){if(this.options.overflow!=null&&!d.support.shrinkWrapBlocks){var f=this.elem,g=this.options;d.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]})}this.options.hide&&d(this.elem).hide();if(this.options.hide||this.options.show)for(var h in this.options.curAnim)d.style(this.elem,h,this.options.orig[h]);this.options.complete.call(this.elem)}return!1}var i=b-this.startTime;this.state=i/this.options.duration;var j=this.options.specialEasing&&this.options.specialEasing[this.prop],k=this.options.easing||(d.easing.swing?"swing":"linear");this.pos=d.easing[j||k](this.state,i,0,1,this.options.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update();return!0}},d.extend(d.fx,{tick:function(){var a=d.timers;for(var b=0;b
      ";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),a=b=e=f=g=h=null,d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=e==="absolute"&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=cf.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!cf.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=cg(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=cg(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window);// Underscore.js 1.1.5 -// (c) 2011 Jeremy Ashkenas, DocumentCloud Inc. -// Underscore is freely distributable under the MIT license. -// Portions of Underscore are inspired or borrowed from Prototype, -// Oliver Steele's Functional, and John Resig's Micro-Templating. -// For all details and documentation: -// http://documentcloud.github.com/underscore -(function(){var q=this,D=q._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,E=k.unshift,F=o.toString,m=o.hasOwnProperty,s=k.forEach,t=k.map,u=k.reduce,v=k.reduceRight,w=k.filter,x=k.every,y=k.some,p=k.indexOf,z=k.lastIndexOf;o=Array.isArray;var G=Object.keys,A=Function.prototype.bind,c=function(a){return new l(a)};if(typeof module!=="undefined"&&module.exports){module.exports=c;c._=c}else q._=c;c.VERSION="1.1.5";var j=c.each=c.forEach=function(a,b,d){if(a!=null)if(s&&a.forEach===s)a.forEach(b, -d);else if(c.isNumber(a.length))for(var e=0,f=a.length;e=e.computed&&(e={value:f,computed:g})});return e.value};c.min=function(a,b,d){if(!b&&c.isArray(a))return Math.min.apply(Math,a);var e={computed:Infinity};j(a,function(f,g,h){g=b?b.call(d,f,g,h):f;gh?1:0}),"value")};c.sortedIndex= -function(a,b,d){d=d||c.identity;for(var e=0,f=a.length;e>1;d(a[g])=0})})};c.zip=function(){for(var a=i.call(arguments),b=c.max(c.pluck(a,"length")),d=Array(b),e=0;e=0;d--)b=[a[d].apply(this,b)];return b[0]}};c.keys=G||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)if(m.call(a, -d))b[b.length]=d;return b};c.values=function(a){return c.map(a,c.identity)};c.functions=c.methods=function(a){return c.filter(c.keys(a),function(b){return c.isFunction(a[b])}).sort()};c.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};c.defaults=function(a){j(i.call(arguments,1),function(b){for(var d in b)if(a[d]==null)a[d]=b[d]});return a};c.clone=function(a){return c.isArray(a)?a.slice():c.extend({},a)};c.tap=function(a,b){b(a);return a};c.isEqual=function(a, -b){if(a===b)return true;var d=typeof a;if(d!=typeof b)return false;if(a==b)return true;if(!a&&b||a&&!b)return false;if(a._chain)a=a._wrapped;if(b._chain)b=b._wrapped;if(a.isEqual)return a.isEqual(b);if(c.isDate(a)&&c.isDate(b))return a.getTime()===b.getTime();if(c.isNaN(a)&&c.isNaN(b))return false;if(c.isRegExp(a)&&c.isRegExp(b))return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;if(d!=="object")return false;if(a.length&&a.length!==b.length)return false; -d=c.keys(a);var e=c.keys(b);if(d.length!=e.length)return false;for(var f in a)if(!(f in b)||!c.isEqual(a[f],b[f]))return false;return true};c.isEmpty=function(a){if(c.isArray(a)||c.isString(a))return a.length===0;for(var b in a)if(m.call(a,b))return false;return true};c.isElement=function(a){return!!(a&&a.nodeType==1)};c.isArray=o||function(a){return F.call(a)==="[object Array]"};c.isArguments=function(a){return!!(a&&m.call(a,"callee"))};c.isFunction=function(a){return!!(a&&a.constructor&&a.call&& -a.apply)};c.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)};c.isNumber=function(a){return!!(a===0||a&&a.toExponential&&a.toFixed)};c.isNaN=function(a){return a!==a};c.isBoolean=function(a){return a===true||a===false};c.isDate=function(a){return!!(a&&a.getTimezoneOffset&&a.setUTCFullYear)};c.isRegExp=function(a){return!!(a&&a.test&&a.exec&&(a.ignoreCase||a.ignoreCase===false))};c.isNull=function(a){return a===null};c.isUndefined=function(a){return a===void 0};c.noConflict=function(){q._= -D;return this};c.identity=function(a){return a};c.times=function(a,b,d){for(var e=0;e/g,interpolate:/<%=([\s\S]+?)%>/g};c.template=function(a,b){var d=c.templateSettings;d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.interpolate, -function(e,f){return"',"+f.replace(/\\'/g,"'")+",'"}).replace(d.evaluate||null,function(e,f){return"');"+f.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+"__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');";d=new Function("obj",d);return b?d(b):d};var l=function(a){this._wrapped=a};c.prototype=l.prototype;var r=function(a,b){return b?c(a).chain():a},I=function(a,b){l.prototype[a]=function(){var d=i.call(arguments);E.call(d,this._wrapped);return r(b.apply(c, -d),this._chain)}};c.mixin(c);j(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=k[a];l.prototype[a]=function(){b.apply(this._wrapped,arguments);return r(this._wrapped,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];l.prototype[a]=function(){return r(b.apply(this._wrapped,arguments),this._chain)}});l.prototype.chain=function(){this._chain=true;return this};l.prototype.value=function(){return this._wrapped}})(); -// Backbone.js 0.3.3 -// (c) 2010 Jeremy Ashkenas, DocumentCloud Inc. -// Backbone may be freely distributed under the MIT license. -// For all details and documentation: -// http://documentcloud.github.com/backbone -(function(){var e;e=typeof exports!=="undefined"?exports:this.Backbone={};e.VERSION="0.3.3";var f=this._;if(!f&&typeof require!=="undefined")f=require("underscore")._;var h=this.jQuery||this.Zepto;e.emulateHTTP=false;e.emulateJSON=false;e.Events={bind:function(a,b){this._callbacks||(this._callbacks={});(this._callbacks[a]||(this._callbacks[a]=[])).push(b);return this},unbind:function(a,b){var c;if(a){if(c=this._callbacks)if(b){c=c[a];if(!c)return this;for(var d=0,g=c.length;d/g,">").replace(/"/g, -""")},set:function(a,b){b||(b={});if(!a)return this;if(a.attributes)a=a.attributes;var c=this.attributes,d=this._escapedAttributes;if(!b.silent&&this.validate&&!this._performValidation(a,b))return false;if("id"in a)this.id=a.id;for(var g in a){var i=a[g];if(!f.isEqual(c[g],i)){c[g]=i;delete d[g];if(!b.silent){this._changed=true;this.trigger("change:"+g,this,i,b)}}}!b.silent&&this._changed&&this.change(b);return this},unset:function(a,b){b||(b={});var c={};c[a]=void 0;if(!b.silent&&this.validate&& -!this._performValidation(c,b))return false;delete this.attributes[a];delete this._escapedAttributes[a];if(!b.silent){this._changed=true;this.trigger("change:"+a,this,void 0,b);this.change(b)}return this},clear:function(a){a||(a={});var b=this.attributes,c={};for(attr in b)c[attr]=void 0;if(!a.silent&&this.validate&&!this._performValidation(c,a))return false;this.attributes={};this._escapedAttributes={};if(!a.silent){this._changed=true;for(attr in b)this.trigger("change:"+attr,this,void 0,a);this.change(a)}return this}, -fetch:function(a){a||(a={});var b=this,c=j(a.error,b,a);(this.sync||e.sync)("read",this,function(d){if(!b.set(b.parse(d),a))return false;a.success&&a.success(b,d)},c);return this},save:function(a,b){b||(b={});if(a&&!this.set(a,b))return false;var c=this,d=j(b.error,c,b),g=this.isNew()?"create":"update";(this.sync||e.sync)(g,this,function(i){if(!c.set(c.parse(i),b))return false;b.success&&b.success(c,i)},d);return this},destroy:function(a){a||(a={});var b=this,c=j(a.error,b,a);(this.sync||e.sync)("delete", -this,function(d){b.collection&&b.collection.remove(b);a.success&&a.success(b,d)},c);return this},url:function(){var a=k(this.collection);if(this.isNew())return a;return a+(a.charAt(a.length-1)=="/"?"":"/")+this.id},parse:function(a){return a},clone:function(){return new this.constructor(this)},isNew:function(){return!this.id},change:function(a){this.trigger("change",this,a);this._previousAttributes=f.clone(this.attributes);this._changed=false},hasChanged:function(a){if(a)return this._previousAttributes[a]!= -this.attributes[a];return this._changed},changedAttributes:function(a){a||(a=this.attributes);var b=this._previousAttributes,c=false,d;for(d in a)if(!f.isEqual(b[d],a[d])){c=c||{};c[d]=a[d]}return c},previous:function(a){if(!a||!this._previousAttributes)return null;return this._previousAttributes[a]},previousAttributes:function(){return f.clone(this._previousAttributes)},_performValidation:function(a,b){var c=this.validate(a);if(c){b.error?b.error(this,c):this.trigger("error",this,c,b);return false}return true}}); -e.Collection=function(a,b){b||(b={});if(b.comparator){this.comparator=b.comparator;delete b.comparator}this._boundOnModelEvent=f.bind(this._onModelEvent,this);this._reset();a&&this.refresh(a,{silent:true});this.initialize(a,b)};f.extend(e.Collection.prototype,e.Events,{model:e.Model,initialize:function(){},toJSON:function(){return this.map(function(a){return a.toJSON()})},add:function(a,b){if(f.isArray(a))for(var c=0,d=a.length;c').hide().appendTo("body")[0].contentWindow; -"onhashchange"in window&&!a?h(window).bind("hashchange",this.checkUrl):setInterval(this.checkUrl,this.interval);return this.loadUrl()},route:function(a,b){this.handlers.push({route:a,callback:b})},checkUrl:function(){var a=this.getFragment();if(a==this.fragment&&this.iframe)a=this.getFragment(this.iframe.location);if(a==this.fragment||a==decodeURIComponent(this.fragment))return false;if(this.iframe)window.location.hash=this.iframe.location.hash=a;this.loadUrl()},loadUrl:function(){var a=this.fragment= -this.getFragment();return f.any(this.handlers,function(b){if(b.route.test(a)){b.callback(a);return true}})},saveLocation:function(a){a=(a||"").replace(l,"");if(this.fragment!=a){window.location.hash=this.fragment=a;if(this.iframe&&a!=this.getFragment(this.iframe.location)){this.iframe.document.open().close();this.iframe.location.hash=a}}}});e.View=function(a){this._configure(a||{});this._ensureElement();this.delegateEvents();this.initialize(a)};var q=/^(\w+)\s*(.*)$/;f.extend(e.View.prototype,e.Events, -{tagName:"div",$:function(a){return h(a,this.el)},initialize:function(){},render:function(){return this},remove:function(){h(this.el).remove();return this},make:function(a,b,c){a=document.createElement(a);b&&h(a).attr(b);c&&h(a).html(c);return a},delegateEvents:function(a){if(a||(a=this.events)){h(this.el).unbind();for(var b in a){var c=a[b],d=b.match(q),g=d[1];d=d[2];c=f.bind(this[c],this);d===""?h(this.el).bind(g,c):h(this.el).delegate(d,g,c)}}},_configure:function(a){if(this.options)a=f.extend({}, -this.options,a);if(a.model)this.model=a.model;if(a.collection)this.collection=a.collection;if(a.el)this.el=a.el;if(a.id)this.id=a.id;if(a.className)this.className=a.className;if(a.tagName)this.tagName=a.tagName;this.options=a},_ensureElement:function(){if(!this.el){var a={};if(this.id)a.id=this.id;if(this.className)a["class"]=this.className;this.el=this.make(this.tagName,a)}}});var m=function(a,b){var c=r(this,a,b);c.extend=m;return c};e.Model.extend=e.Collection.extend=e.Controller.extend=e.View.extend= -m;var s={create:"POST",update:"PUT","delete":"DELETE",read:"GET"};e.sync=function(a,b,c,d){var g=s[a];a=a==="create"||a==="update"?JSON.stringify(b.toJSON()):null;b={url:k(b),type:g,contentType:"application/json",data:a,dataType:"json",processData:false,success:c,error:d};if(e.emulateJSON){b.contentType="application/x-www-form-urlencoded";b.processData=true;b.data=a?{model:a}:{}}if(e.emulateHTTP)if(g==="PUT"||g==="DELETE"){if(e.emulateJSON)b.data._method=g;b.type="POST";b.beforeSend=function(i){i.setRequestHeader("X-HTTP-Method-Override", -g)}}h.ajax(b)};var n=function(){},r=function(a,b,c){var d;d=b&&b.hasOwnProperty("constructor")?b.constructor:function(){return a.apply(this,arguments)};n.prototype=a.prototype;d.prototype=new n;b&&f.extend(d.prototype,b);c&&f.extend(d,c);d.prototype.constructor=d;d.__super__=a.prototype;return d},k=function(a){if(!(a&&a.url))throw Error("A 'url' property or function must be specified");return f.isFunction(a.url)?a.url():a.url},j=function(a,b,c){return function(d){a?a(b,d):b.trigger("error",b,d,c)}}})(); diff --git a/NuGet/ServiceStack.Host.Mvc/content/web.config.transform b/NuGet/ServiceStack.Host.Mvc/content/web.config.transform deleted file mode 100644 index bf9e6a08ec6..00000000000 --- a/NuGet/ServiceStack.Host.Mvc/content/web.config.transform +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NuGet/ServiceStack.Host.Mvc/servicestack.host.mvc.nuspec b/NuGet/ServiceStack.Host.Mvc/servicestack.host.mvc.nuspec deleted file mode 100644 index 7d7a2ed5376..00000000000 --- a/NuGet/ServiceStack.Host.Mvc/servicestack.host.mvc.nuspec +++ /dev/null @@ -1,27 +0,0 @@ - - - - ServiceStack.Host.Mvc - Starter ASP.NET MVC Website Template - ServiceStack at /api - 4.0.0 - Service Stack - Service Stack - Opensource .NET and Mono REST Web Services framework - -Host ServiceStack side-by-side with an existing ASP.NET MVC application at the path '/api'. -ServiceStack is a modern, high-performance, code-first web service framework promoting code and web services best practices. Simple, Fast, Elegant. Website: https://servicestack.net - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - Fast JSON XML CSV HTML SOAP JSV REST Web Service Framework MONO ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Interfaces/servicestack.interfaces.nuspec b/NuGet/ServiceStack.Interfaces/servicestack.interfaces.nuspec deleted file mode 100644 index 169475d2256..00000000000 --- a/NuGet/ServiceStack.Interfaces/servicestack.interfaces.nuspec +++ /dev/null @@ -1,26 +0,0 @@ - - - - ServiceStack.Interfaces - Lightweight and implementation-free interfaces for ServiceStack - 4.0.0 - Service Stack - Service Stack - Opensource .NET and Mono REST Web Services framework - - Lightweight and implementation-free interfaces for DTO's, providers and adapters. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - Fast JSON XML CSV HTML SOAP JSV REST Web Service Framework MONO ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Logging.Elmah/servicestack.logging.elmah.nuspec b/NuGet/ServiceStack.Logging.Elmah/servicestack.logging.elmah.nuspec deleted file mode 100644 index 2d878f9867b..00000000000 --- a/NuGet/ServiceStack.Logging.Elmah/servicestack.logging.elmah.nuspec +++ /dev/null @@ -1,29 +0,0 @@ - - - - ServiceStack.Logging.Elmah - 4.0.0 - ServiceStack.Logging.Elmah - Service Stack - Service Stack - Elmah logging integration for ServiceStack, the Opensource .NET and Mono REST Web Services Framework - false - - Provides Elmah logging integration for other ServiceStack projects - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - servicestack log logging elmah - en-US - Copyright 2014 Service Stack - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Logging.EntLib5/servicestack.logging.entlib5.nuspec b/NuGet/ServiceStack.Logging.EntLib5/servicestack.logging.entlib5.nuspec deleted file mode 100644 index eb4e49de869..00000000000 --- a/NuGet/ServiceStack.Logging.EntLib5/servicestack.logging.entlib5.nuspec +++ /dev/null @@ -1,29 +0,0 @@ - - - - ServiceStack.Logging.EntLib5 - 4.0.0 - ServiceStack.Logging.EntLib5 - Service Stack - Service Stack - Enterprise Library 5.0 Logging Application Block integration for ServiceStack, the Opensource .NET and Mono REST Web Services Framework - false - - Provides Enterprise Library 5.0 Logging Application Block logging integration for other ServiceStack projects - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - servicestack log logging nlog - en-US - Copyright 2014 Service Stack - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Logging.EventLog/servicestack.logging.eventlog.nuspec b/NuGet/ServiceStack.Logging.EventLog/servicestack.logging.eventlog.nuspec deleted file mode 100644 index 6a1d3ec55ff..00000000000 --- a/NuGet/ServiceStack.Logging.EventLog/servicestack.logging.eventlog.nuspec +++ /dev/null @@ -1,28 +0,0 @@ - - - - ServiceStack.Logging.EventLog - 4.0.0 - ServiceStack.Logging.EventLog - Service Stack - Service Stack - Windows Event Log integration for ServiceStack, the Opensource .NET and Mono REST Web Services Framework - false - - Provides EventLog logging integration for other ServiceStack projects - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - servicestack log logging eventlog - en-US - Copyright 2014 Service Stack - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Logging.Log4Net/servicestack.logging.log4net.nuspec b/NuGet/ServiceStack.Logging.Log4Net/servicestack.logging.log4net.nuspec deleted file mode 100644 index 853979d5ee5..00000000000 --- a/NuGet/ServiceStack.Logging.Log4Net/servicestack.logging.log4net.nuspec +++ /dev/null @@ -1,29 +0,0 @@ - - - - ServiceStack.Logging.Log4Net - 4.0.0 - ServiceStack.Logging.Log4Net - Service Stack - Service Stack - log4Net logging integration for ServiceStack, the Opensource .NET and Mono REST Web Services Framework - false - - Provides log4net logging integration for other ServiceStack projects - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - servicestack log logging log4net - en-US - Copyright 2014 Service Stack - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Logging.NLog/servicestack.logging.nlog.nuspec b/NuGet/ServiceStack.Logging.NLog/servicestack.logging.nlog.nuspec deleted file mode 100644 index af657729465..00000000000 --- a/NuGet/ServiceStack.Logging.NLog/servicestack.logging.nlog.nuspec +++ /dev/null @@ -1,29 +0,0 @@ - - - - ServiceStack.Logging.NLog - 4.0.0 - ServiceStack.Logging.NLog - Service Stack - Service Stack - NLog logging integration for ServiceStack, the Opensource .NET and Mono REST Web Services Framework - false - - Provides NLog logging integration for other ServiceStack projects - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - servicestack log logging nlog - en-US - Copyright 2014 Service Stack - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.MsgPack/servicestack.msgpack.nuspec b/NuGet/ServiceStack.MsgPack/servicestack.msgpack.nuspec deleted file mode 100644 index 8922b75bc5f..00000000000 --- a/NuGet/ServiceStack.MsgPack/servicestack.msgpack.nuspec +++ /dev/null @@ -1,28 +0,0 @@ - - - - ServiceStack.MsgPack - Message Pack support for ServiceStack. Includes typed MsgPack Client - 4.0.0 - Service Stack - Service Stack - MsgPack Format Serializer ContentType ServiceClients for ServiceStack - - Add the MsgPack binary format and endpoint to a ServiceStack web service host. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - MsgPack MessagePack Message Pack Fast Binary Serializer Format ContentType REST Web Services ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Mvc/servicestack.mvc.nuspec b/NuGet/ServiceStack.Mvc/servicestack.mvc.nuspec deleted file mode 100644 index 48a29051cbc..00000000000 --- a/NuGet/ServiceStack.Mvc/servicestack.mvc.nuspec +++ /dev/null @@ -1,30 +0,0 @@ - - - - ServiceStack.Mvc - MVC Adapters for integrating with ServiceStack webservices - 4.0.0 - Service Stack - Service Stack - .NET 4.0 project Integration of ServiceStack with MVC3 - - Full details in Mvc PowerPack: http://servicestack.net/mvc-powerpack/ - Adapter classes to provide tight integration and re-usable functionality between ServiceStack and MVC3. - Including adapters for: MiniProfiler, FluentValidation, Funq IOC Controller Factory, Funq Validator Factory - ControllerBase (configured with access to ServiceStack's ICacheClient, ISession, typed UserSession dependencies). - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - MiniProfiler FluentValidation MVC Controller ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.ProtoBuf/servicestack.protobuf.nuspec b/NuGet/ServiceStack.ProtoBuf/servicestack.protobuf.nuspec deleted file mode 100644 index 9eec3599b92..00000000000 --- a/NuGet/ServiceStack.ProtoBuf/servicestack.protobuf.nuspec +++ /dev/null @@ -1,28 +0,0 @@ - - - - ServiceStack.ProtoBuf - Protocol Buffers support for ServiceStack. Includes typed ProtoBuf Client - 4.0.0 - Service Stack - Service Stack - ProtoBuf Format Serializer ContentType ServiceClients for ServiceStack - - Add the ProtoBuf binary format and endpoint to a ServiceStack web service host. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - https://servicestack.net/img/logo-32.png - ProtoBuf Fast Binary Serializer Format ContentType REST Web Services ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.RabbitMq/servicestack.rabbitmq.nuspec b/NuGet/ServiceStack.RabbitMq/servicestack.rabbitmq.nuspec deleted file mode 100644 index b2a380d79bb..00000000000 --- a/NuGet/ServiceStack.RabbitMq/servicestack.rabbitmq.nuspec +++ /dev/null @@ -1,30 +0,0 @@ - - - - ServiceStack.RabbitMq - ServiceStack.RabbitMq - 4.0.0 - Service Stack - Service Stack - Opensource .NET and Mono REST Web Services framework - - Rabbit MQ client and server adapters for the ServiceStack web services framework. - This library enables consuming and publishing to ServiceStack services when hosted within a Rabbit MQ Server Host. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - true - https://servicestack.net/img/logo-32.png - MQ Message Queue Web Service Framework Fast JSON MONO ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Razor.BuildTask/build/ServiceStack.Razor.BuildTask.targets b/NuGet/ServiceStack.Razor.BuildTask/build/ServiceStack.Razor.BuildTask.targets deleted file mode 100644 index 799dc3c07d9..00000000000 --- a/NuGet/ServiceStack.Razor.BuildTask/build/ServiceStack.Razor.BuildTask.targets +++ /dev/null @@ -1,25 +0,0 @@ - - - $(CoreCompileDependsOn);RazorGeneratorOutput - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Razor.BuildTask/servicestack.razor.buildtask.nuspec b/NuGet/ServiceStack.Razor.BuildTask/servicestack.razor.buildtask.nuspec deleted file mode 100644 index 0923c282ad7..00000000000 --- a/NuGet/ServiceStack.Razor.BuildTask/servicestack.razor.buildtask.nuspec +++ /dev/null @@ -1,30 +0,0 @@ - - - - ServiceStack.Razor.BuildTask - ServiceStack.Razor.BuildTask - MSBuild Task to compile Razor Views as a build-step - 4.0.0 - Service Stack - Service Stack - MSBuild Task to generate and compile Service Stack Razor Views as a build-step, ready for instant use at run-time - - ServiceStack Razor Documentation: http://razor.servicestack.net - - Compile Razor Views into a compiled .dll you can use in ServiceStack hosts to eliminate Razor View compilation at runtime for instant start-up times. - - http://razor.servicestack.net - https://servicestack.net/terms - true - https://servicestack.net/img/logo-32.png - Razor ViewEngine View Templates Controllers Mono ASP.NET Self-Host ServiceStack - en-US - Copyright 2013 Service Stack - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Razor.BuildTask/tools/uninstall.ps1 b/NuGet/ServiceStack.Razor.BuildTask/tools/uninstall.ps1 deleted file mode 100644 index 750d3ccbfc0..00000000000 --- a/NuGet/ServiceStack.Razor.BuildTask/tools/uninstall.ps1 +++ /dev/null @@ -1,17 +0,0 @@ -param($installPath, $toolsPath, $package, $project) - -<# -$targetsFileName = 'ServiceStack.Razor.BuildTask.targets'; - -# Need to load MSBuild assembly if it's not loaded yet. -Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' - -# Grab the loaded MSBuild project for the project -$msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1 - -# Remove imports to .targets -$msbuild.Xml.Imports | Where-Object {$_.Project.ToLowerInvariant().EndsWith($targetsFileName.ToLowerInvariant()) } | Foreach { - $_.Parent.RemoveChild( $_ ) - [string]::Format( "Removed import of '{0}'" , $_.Project ) -} -#> \ No newline at end of file diff --git a/NuGet/ServiceStack.Razor/content/web.config.transform b/NuGet/ServiceStack.Razor/content/web.config.transform deleted file mode 100644 index 5546d322a18..00000000000 --- a/NuGet/ServiceStack.Razor/content/web.config.transform +++ /dev/null @@ -1,33 +0,0 @@ - - - - -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Razor/servicestack.razor.nuspec b/NuGet/ServiceStack.Razor/servicestack.razor.nuspec deleted file mode 100644 index 18495cd54a2..00000000000 --- a/NuGet/ServiceStack.Razor/servicestack.razor.nuspec +++ /dev/null @@ -1,41 +0,0 @@ - - - - ServiceStack.Razor - ServiceStack.Razor - ServiceStack's HTML story including MVC Razor - 4.0.0 - Service Stack - Service Stack - Provides ServiceStack's HTML Story including integrated support for MVC Razor's ViewEngine - - ServiceStack Razor Documentation: http://razor.servicestack.net - - - Turns ServiceStack into a Complete Web + REST Services Stack. Replaces need for ASP.NET MVC. - - Runs In ASP.NET or Self-host, first-class cross-platform support on .NET / Mono runtimes. - - Add HTML views to existing services. - - Change Views and Layout templates at runtime. - - No Ceremony development options - Pages without controllers, with typed and dynamic View Models. - - Include Partial Markdown views in Razor pages. - - Cascading Layout templates. - - Pretty urls by default (no custom Routes needed). - - Keep all views and assets together. - - Smart View Pages. - - http://razor.servicestack.net - https://servicestack.net/terms - true - https://servicestack.net/img/logo-32.png - Razor ViewEngine View Templates Controllers Mono ASP.NET Self-Host ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack.Server/servicestack.server.nuspec b/NuGet/ServiceStack.Server/servicestack.server.nuspec deleted file mode 100644 index a459fcd81e7..00000000000 --- a/NuGet/ServiceStack.Server/servicestack.server.nuspec +++ /dev/null @@ -1,30 +0,0 @@ - - - - ServiceStack.Server - ServiceStack Server integration with Redis and OrmLite - 4.0.0 - Service Stack - Service Stack - Opensource .NET and Mono REST Web Services framework - - Integration libraries and adapters with other major ServiceStack server components. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - true - https://servicestack.net/img/logo-32.png - Fast JSON XML CSV HTML SOAP JSV REST Web Service Framework MONO ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - - - - \ No newline at end of file diff --git a/NuGet/ServiceStack/servicestack.nuspec b/NuGet/ServiceStack/servicestack.nuspec deleted file mode 100644 index 7e6dbc92a81..00000000000 --- a/NuGet/ServiceStack/servicestack.nuspec +++ /dev/null @@ -1,37 +0,0 @@ - - - - ServiceStack - ServiceStack webservice framework: Faster, Cleaner, Modern WCF alternative - 4.0.0 - Service Stack - Service Stack - Opensource .NET and Mono REST Web Services framework - - Binaries for the ServiceStack web framework. - Visit https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project - and https://github.com/ServiceStack/ServiceStack/wiki/Create-your-first-webservice - for walk throughs and docs on creating your first web service. - - https://github.com/ServiceStack/ServiceStack - https://servicestack.net/terms - true - https://servicestack.net/img/logo-32.png - Fast JSON XML CSV HTML SOAP JSV REST Web Service Framework MONO ServiceStack - en-US - Copyright 2014 Service Stack - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index 18d52b16f54..7e2b1b27335 100644 --- a/README.md +++ b/README.md @@ -1,182 +1,349 @@ -See [servicestack.net/features](http://servicestack.net/features) for an overview. +Follow [@ServiceStack](https://twitter.com/servicestack) or [view the docs](https://docs.servicestack.net), use [StackOverflow](http://stackoverflow.com/questions/ask) or the [Customer Forums](https://forums.servicestack.net/) for support. -Join the [ServiceStack Google+ Community](https://plus.google.com/u/0/communities/112445368900682590445) or -follow [@ServiceStack](http://twitter.com/servicestack) for project updates. +> View the [Release Notes](https://docs.servicestack.net/release-notes-history) for latest features or see [servicestack.net/features](https://servicestack.net/features) for an overview. ### Simple, Fast, Versatile and full-featured Services Framework -ServiceStack is a simple, fast, versatile and full-featured [Web](http://razor.servicestack.net) and -[Web Services](https://github.com/ServiceStack/ServiceStack/wiki/Service-Stack-Web-Services) Framework that's -thoughtfully-architected to [reduce artificial complexity](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query#why-not-complexity) and promote -[remote services best-practices](https://github.com/ServiceStack/ServiceStack/wiki/Advantages-of-message-based-web-services) -with a [message-based design](https://github.com/ServiceStack/ServiceStack/wiki/What-is-a-message-based-web-service%3F) -that allows for maximum re-use where ServiceStack Services are able to be consumed via an array of built-in fast data formats (inc. +ServiceStack is a simple, fast, versatile and highly-productive full-featured [Web](http://razor.servicestack.net) and +[Web Services](https://docs.servicestack.net/web-services.html) Framework that's +thoughtfully-architected to [reduce artificial complexity](https://docs.servicestack.net/why-not-odata.html#why-not-complexity) and promote +[remote services best-practices](https://docs.servicestack.net/advantages-of-message-based-web-services.html) +with a [message-based design](https://docs.servicestack.net/what-is-a-message-based-web-service.html) +that allows for maximum re-use that can leverage an integrated +[Service Gateway](https://docs.servicestack.net/service-gateway.html) +for the creation of loosely-coupled +[Modularized Service](https://docs.servicestack.net/modularizing-services.html) Architectures. +ServiceStack Services are consumable via an array of built-in fast data formats (inc. [JSON](https://github.com/ServiceStack/ServiceStack.Text), XML, -[CSV](https://github.com/ServiceStack/ServiceStack/wiki/ServiceStack-CSV-Format), -[JSV](https://github.com/ServiceStack/ServiceStack.Text/wiki/JSV-Format), -[ProtoBuf](https://github.com/ServiceStack/ServiceStack/wiki/Protobuf-format) and -[MsgPack](https://github.com/ServiceStack/ServiceStack/wiki/MessagePack-Format)) -as well as XSD/WSDL for [SOAP endpoints](https://github.com/ServiceStack/ServiceStack/wiki/SOAP-support) and -[Rabbit MQ](https://github.com/ServiceStack/ServiceStack/wiki/Rabbit-MQ) and -[Redis MQ](https://github.com/ServiceStack/ServiceStack/wiki/Messaging-and-Redis) hosts. +[CSV](https://docs.servicestack.net/csv-format.html), +[JSV](https://docs.servicestack.net/json-jsv-and-xml.html), +[ProtoBuf](https://docs.servicestack.net/protobuf-format.html), +[Wire](https://docs.servicestack.net/wire-format.html) and +[MsgPack](https://docs.servicestack.net/messagepack-format.html)) +as well as XSD/WSDL for [SOAP endpoints](https://docs.servicestack.net/soap-support.html) and +[Rabbit MQ](https://docs.servicestack.net/rabbit-mq.html), +[Redis MQ](https://docs.servicestack.net/messaging-and-redis.html) and +[Amazon SQS](https://github.com/ServiceStack/ServiceStack.Aws#sqsmqserver) MQ hosts. + +Its design and simplicity focus offers an unparalleled suite of productivity features that can be declaratively enabled +without code, from creating fully queryable Web API's with just a single Typed Request DTO with +[Auto Query](https://docs.servicestack.net/autoquery.html) supporting +[every major RDBMS](https://github.com/ServiceStack/ServiceStack.OrmLite#8-flavours-of-ormlite-is-on-nuget) +to the built-in support for +[Auto Batched Requests](https://docs.servicestack.net/auto-batched-requests.html) +or effortlessly enabling rich [HTTP Caching](https://docs.servicestack.net/http-caching.html) and +[Encrypted Messaging](https://docs.servicestack.net/encrypted-messaging.html) +for all your existing services via [Plugins](https://docs.servicestack.net/plugins.html). Your same Services also serve as the Controller in ServiceStack's [Smart Razor Views](http://razor.servicestack.net/) reducing the effort to serve both [Web and Single Page Apps](https://github.com/ServiceStackApps/LiveDemos) as well as -[Rich Desktop and Mobile Clients](https://github.com/ServiceStackApps/HelloMobile). +[Rich Desktop and Mobile Clients](https://github.com/ServiceStackApps/HelloMobile) that are able to deliver instant interactive +experiences using ServiceStack's real-time [Server Events](https://docs.servicestack.net/server-events.html). ServiceStack Services also maximize productivity for consumers providing an -[instant end-to-end typed API without code-gen](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client), -or when preferred, clients can -[Add a remote ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) to generate typed DTO's for -[C#](https://github.com/ServiceStack/ServiceStack/wiki/CSharp-Add-ServiceStack-Reference), -[F#](https://github.com/ServiceStack/ServiceStack/wiki/FSharp-Add-ServiceStack-Reference), -[VB.NET](https://github.com/ServiceStack/ServiceStack/wiki/VB.Net-Add-ServiceStack-Reference) -and -[TypeScript](https://github.com/ServiceStack/ServiceStack/wiki/TypeScript-Add-ServiceStack-Reference) -clients. +[instant end-to-end typed API without code-gen](https://docs.servicestack.net/csharp-client.html) enabling +the most productive development experience for developing .NET to .NET Web Services. +### [Generate Instant Typed APIs from within all Major IDEs!](https://docs.servicestack.net/add-servicestack-reference.html) -## Simple REST service example +ServiceStack now integrates with all Major IDE's used for creating the best native experiences on the most popular platforms +to enable a highly productive dev workflow for consuming Web Services, making ServiceStack the ideal back-end choice for powering +rich, native iPhone and iPad Apps on iOS with Swift, Mobile and Tablet Apps on the Android platform with Java, OSX Desktop Applications +as well as targeting the most popular .NET PCL platforms including Xamarin.iOS, Xamarin.Android, Windows Store, WPF, WinForms and Silverlight: -This example is also available as a [stand-alone integration test](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/NewApiTodos.cs): + + +#### [VS.NET integration with ServiceStackVS](https://visualstudiogallery.msdn.microsoft.com/5bd40817-0986-444d-a77d-482e43a48da7) + +Providing instant Native Typed API's for +[C#](https://docs.servicestack.net/csharp-add-servicestack-reference.html), +[TypeScript](https://docs.servicestack.net/typescript-add-servicestack-reference.html), +[F#](https://docs.servicestack.net/fsharp-add-servicestack-reference.html) and +[VB.NET](https://docs.servicestack.net/vbnet-add-servicestack-reference.html) +directly in Visual Studio for the +[most popular .NET platforms](https://github.com/ServiceStackApps/HelloMobile) including iOS and Android using +[Xamarin.iOS](https://github.com/ServiceStackApps/HelloMobile#xamarinios-client) and +[Xamarin.Android](https://github.com/ServiceStackApps/HelloMobile#xamarinandroid-client) on Windows. + +#### [Xamarin Studio integration with ServiceStackXS](https://docs.servicestack.net/csharp-add-servicestack-reference.html#xamarin-studio) + +Providing [C# Native Types](https://docs.servicestack.net/csharp-add-servicestack-reference.html) +support for developing iOS and Android mobile Apps using +[Xamarin.iOS](https://github.com/ServiceStackApps/HelloMobile#xamarinios-client) and +[Xamarin.Android](https://github.com/ServiceStackApps/HelloMobile#xamarinandroid-client) with +[Xamarin Studio](https://www.xamarin.com/studio) on OSX. The **ServiceStackXS** plugin also provides a rich web service +development experience developing Client applications with +[Mono Develop on Linux](https://docs.servicestack.net/csharp-add-servicestack-reference.html#xamarin-studio-for-linux) + +#### [Xcode integration with ServiceStackXC Plugin](https://docs.servicestack.net/swift-add-servicestack-reference.html) + +Providing [an instant Native Typed API in Swift](https://docs.servicestack.net/swift-add-servicestack-reference.html) +including generic Service Clients enabling a highly-productive workflow and effortless consumption of Web Services from +native iOS and OSX Applications - directly from within Xcode! + +#### [Android Studio integration with ServiceStackIDEA](https://docs.servicestack.net/java-add-servicestack-reference.html) + +Providing [an instant Native Typed API in Java](https://docs.servicestack.net/java-add-servicestack-reference.html) +and [Kotlin](https://docs.servicestack.net/kotlin-add-servicestack-reference.html) +including idiomatic Java Generic Service Clients supporting Sync and Async Requests by leveraging Android's AsyncTasks to enable the creation of services-rich and responsive native Java or Kotlin Mobile Apps on the Android platform - directly from within Android Studio! + +#### [IntelliJ integration with ServiceStackIDEA](https://docs.servicestack.net/java-add-servicestack-reference.html#install-servicestack-idea-from-the-plugin-repository) + +The ServiceStack IDEA plugin is installable directly from IntelliJ's Plugin repository and enables seamless integration with IntelliJ Java Maven projects for generating a Typed API to quickly and effortlessly consume remote ServiceStack Web Services from pure cross-platform Java or Kotlin Clients. + +#### [Eclipse integration with ServiceStackEclipse](https://github.com/ServiceStack/ServiceStack.Java/tree/master/src/ServiceStackEclipse#eclipse-integration-with-servicestack) + +The unmatched productivity offered by [Java Add ServiceStack Reference](https://docs.servicestack.net/java-add-servicestack-reference.html) is also available in the +[ServiceStackEclipse IDE Plugin](https://github.com/ServiceStack/ServiceStack.Java/tree/master/src/ServiceStackEclipse#eclipse-integration-with-servicestack) that's installable +from the [Eclipse MarketPlace](https://marketplace.eclipse.org/content/servicestackeclipse) to provide deep integration of Add ServiceStack Reference with Eclipse Java Maven Projects +enabling Java Developers to effortlessly Add and Update the references of their evolving remote ServiceStack Web Services. + +#### [servicestack-cli - Simple command-line utilities for ServiceStack](https://docs.servicestack.net/add-servicestack-reference.html#simple-command-line-utilities-for-servicestack) + +In addition to our growing list of supported IDE's, the [servicestack-cli](https://github.com/ServiceStack/servicestack-cli) +cross-platform command-line npm scripts makes it easy for build servers, automated tasks and command-line runners of your +favorite text editors to easily Add and Update ServiceStack References! + +## Simple Customer Database REST Services Example + +This example is also available as a [stand-alone integration test](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/CustomerRestExample.cs): ```csharp //Web Service Host Configuration public class AppHost : AppSelfHostBase { - public AppHost() : base("TODOs Tests", typeof(Todo).Assembly) {} + public AppHost() + : base("Customer REST Example", typeof(CustomerService).Assembly) {} public override void Configure(Container container) { - container.Register(new TodoRepository()); + //Register which RDBMS provider to use + container.Register(c => + new OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider)); + + using (var db = container.Resolve().Open()) + { + //Create the Customer POCO table if it doesn't already exist + db.CreateTableIfNotExists(); + } } } -//REST Resource DTO -[Route("/todos")] -[Route("/todos/{Ids}")] -public class Todos : IReturn> +//Web Service DTO's +[Route("/customers", "GET")] +public class GetCustomers : IReturn {} + +public class GetCustomersResponse { - public long[] Ids { get; set; } - public Todos(params long[] ids) - { - this.Ids = ids; - } + public List Results { get; set; } +} + +[Route("/customers/{Id}", "GET")] +public class GetCustomer : IReturn +{ + public int Id { get; set; } } -[Route("/todos", "POST")] -[Route("/todos/{Id}", "PUT")] -public class Todo : IReturn +[Route("/customers", "POST")] +public class CreateCustomer : IReturn { - public long Id { get; set; } - public string Content { get; set; } - public int Order { get; set; } - public bool Done { get; set; } + public string Name { get; set; } } -public class TodosService : Service +[Route("/customers/{Id}", "PUT")] +public class UpdateCustomer : IReturn { - public TodoRepository Repository { get; set; } //Injected by IOC + public int Id { get; set; } + + public string Name { get; set; } +} - public object Get(Todos request) +[Route("/customers/{Id}", "DELETE")] +public class DeleteCustomer : IReturnVoid +{ + public int Id { get; set; } +} + +// POCO DB Model +public class Customer +{ + [AutoIncrement] + public int Id { get; set; } + + public string Name { get; set; } +} + +//Web Services Implementation +public class CustomerService : Service +{ + public object Get(GetCustomers request) { - return request.Ids.IsEmpty() - ? Repository.GetAll() - : Repository.GetByIds(request.Ids); + return new GetCustomersResponse { Results = Db.Select() }; } - public object Post(Todo todo) + public object Get(GetCustomer request) { - return Repository.Store(todo); + return Db.SingleById(request.Id); } - public object Put(Todo todo) + public object Post(CreateCustomer request) { - return Repository.Store(todo); + var customer = new Customer { Name = request.Name }; + Db.Save(customer); + return customer; } - public void Delete(Todos request) + public object Put(UpdateCustomer request) { - Repository.DeleteByIds(request.Ids); + var customer = Db.SingleById(request.Id); + if (customer == null) + throw HttpError.NotFound("Customer '{0}' does not exist".Fmt(request.Id)); + + customer.Name = request.Name; + Db.Update(customer); + + return customer; + } + + public void Delete(DeleteCustomer request) + { + Db.DeleteById(request.Id); } } + ``` -### [Calling the above TODO REST service from any C#/.NET Client](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client) +### [Calling the above REST Service from any C#/.NET Client](https://docs.servicestack.net/csharp-add-servicestack-reference.html) + +> No code-gen required, can re-use above Server DTOs: ```csharp -//no code-gen required, can re-use above DTO's +var client = new JsonServiceClient(BaseUri); + +//GET /customers +var all = client.Get(new GetCustomers()); // Count = 0 + +//POST /customers +var customer = client.Post(new CreateCustomer { Name = "Foo" }); +//GET /customer/1 +customer = client.Get(new GetCustomer { Id = customer.Id }); // Name = Foo + +//GET /customers +all = client.Get(new GetCustomers()); // Count = 1 + +//PUT /customers/1 +customer = client.Put( + new UpdateCustomer { Id = customer.Id, Name = "Bar" }); // Name = Bar + +//DELETE /customers/1 +client.Delete(new DeleteCustomer { Id = customer.Id }); + +//GET /customers +all = client.Get(new GetCustomers()); // Count = 0 +``` + +Same code also works with [Android, iOS, Xamarin.Forms, UWP and WPF clients](https://github.com/ServiceStackApps/HelloMobile). + +> [F#](https://docs.servicestack.net/fsharp-add-servicestack-reference.html) and +[VB.NET](https://docs.servicestack.net/vbnet-add-servicestack-reference.html) can re-use same +[.NET Service Clients](https://docs.servicestack.net/csharp-client.html) and DTO's + +### [Calling from TypeScript](https://docs.servicestack.net/typescript-add-servicestack-reference.html#ideal-typed-message-based-api) + +```ts +const client = new JsonServiceClient(baseUrl); +const { results } = await client.get(new GetCustomers()); +``` + +### [Calling from Swift](https://docs.servicestack.net/swift-add-servicestack-reference.html#jsonserviceclientswift) + +```swift +let client = JsonServiceClient(baseUrl: BaseUri) + +client.getAsync(GetCustomers()) + .then { + let results = $0.results; + } +``` + +### [Calling from Java](https://docs.servicestack.net/java-add-servicestack-reference.html#jsonserviceclient-usage) + +```java +JsonServiceClient client = new JsonServiceClient(BaseUri); + +GetCustomersResponse response = client.get(new GetCustomers()); +List results = response.results; +``` + +### [Calling from Kotlin](https://docs.servicestack.net/kotlin-add-servicestack-reference.html#jsonserviceclient-usage) + +```kotlin +val client = JsonServiceClient(BaseUri) + +val response = client.get(GetCustomers()) +val results = response.results +``` + +### [Calling from Dart](https://docs.servicestack.net/dart-add-servicestack-reference) + +```dart var client = new JsonServiceClient(BaseUri); -List all = client.Get(new Todos()); // Count = 0 -var todo = client.Post( - new Todo { Content = "New TODO", Order = 1 }); // todo.Id = 1 -all = client.Get(new Todos()); // Count = 1 +var response = await client.get(GetCustomers()); +var results = client.results; +``` -todo.Content = "Updated TODO"; -todo = client.Put(todo); // todo.Content = Updated TODO +### [Calling from jQuery using TypeScript Definitions](https://docs.servicestack.net/typescript-add-servicestack-reference.html#typescript-interface-definitions) -client.Delete(new Todos(todo.Id)); -all = client.Get(new Todos()); // Count = 0 +```js +$.getJSON($.ss.createUrl("/customers", request), request, (r: GetCustomersResponse) => { + var results = r.results; +}); ``` -### Calling the TODO REST service from jQuery +Using TypeScript Definitions with Angular HTTP Client: - $.getJSON(baseUri + "/todos", function(todos) { - alert(todos.length == 1); - }); +```ts +this.http.get(createUrl('/customers', request)).subscribe(r => { + this.results = r.results; +}); +``` -### Calling the TODO REST service from [Dart JsonClient](https://github.com/mythz/DartJsonClient) +### Calling from jQuery - var client = new JsonClient(baseUri); - client.todos() - .then((todos) => alert(todos.length == 1)); +```js +$.getJSON(baseUri + "/customers", function(r) { + var results = r.results; +}); +``` -That's all the application code required to create a simple REST web service. +That's all the application code required to create and consume a simple database-enabled REST Web Service! ## Getting Started - * [Start with the **Getting Started** section on the Wiki](https://github.com/ServiceStack/ServiceStack/wiki) - * [Example Apps and Demos](http://stackoverflow.com/questions/15862634/in-what-order-are-the-servicestack-examples-supposed-to-be-grokked/15869816#15869816) - * [Community resources](https://github.com/ServiceStack/ServiceStack/wiki/Community-Resources) + * [Start with the **Getting Started** section](https://docs.servicestack.net/create-your-first-webservice.html) + * [Example Apps and Demos](https://github.com/ServiceStackApps/LiveDemos) + * [Community resources](https://docs.servicestack.net/community-resources.html) -### [Release Notes](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md) +### [Release Notes](https://servicestack.net/release-notes) ## Download -If you have [NuGet](http://nuget.org) installed, the easiest way to get started is to: +If you have [NuGet](http://www.nuget.org/) installed, the easiest way to get started is to: ### [Install ServiceStack via NuGet](https://servicestack.net/download). -_Latest v4+ on NuGet is a commercial release with [free quotas](https://servicestack.net/download#free-quotas)._ +_Latest v4+ on NuGet is a [commercial release](https://servicestack.net/pricing) with [free quotas](https://servicestack.net/download#free-quotas)._ ### [Docs and Downloads for older v3 BSD releases](https://github.com/ServiceStackV3/ServiceStackV3) -### Examples +### [Live Demos](https://github.com/ServiceStackApps/LiveDemos) -**The [Definitive list of Example Projects, Use-Cases, Demos, Starter Templates](http://stackoverflow.com/a/15869816)** +**The [Definitive list of Example Projects, Use-Cases, Demos, Starter Templates](https://github.com/ServiceStackApps/LiveDemos)** -## Download published NuGet binaries without NuGet - -GitHub has disabled its download feature so currently NuGet is the best way to get ServiceStack published releases. -For environments that don't have NuGet installed (e.g. OSX/Linux) you can still download the published binaries by -extracting them from the published NuGet packages. The url to download a nuget package is: - - http://packages.nuget.org/api/v1/package/{PackageName}/{Version} - - So to get the core ServiceStack and ServiceStack.Text libs in OSX/Linux (or using gnu tools for Windows) you can just do: - - wget -O ServiceStack http://packages.nuget.org/api/v1/package/ServiceStack/3.9.71 - unzip ServiceStack 'lib/*' - - wget -O ServiceStack.Text http://packages.nuget.org/api/v1/package/ServiceStack.Text/3.9.71 - unzip ServiceStack.Text 'lib/*' - -which will download and extract the dlls into your local local `lib/` folder. - ## Copying Since September 2013, ServiceStack source code is available under GNU Affero General Public License/FOSS License Exception, see license.txt in the source. @@ -184,33 +351,30 @@ Alternative commercial licensing is also available, see https://servicestack.net ## Contributing -Contributors need to approve the [Contributor License Agreement](https://docs.google.com/forms/d/16Op0fmKaqYtxGL4sg7w_g-cXXyCoWjzppgkuqzOeKyk/viewform) before any code will be reviewed, see the [Contributing wiki](https://github.com/ServiceStack/ServiceStack/wiki/Contributing) for more details. All contributions must include tests verifying the desired behavior. +Contributors need to approve the [Contributor License Agreement](https://docs.google.com/forms/d/16Op0fmKaqYtxGL4sg7w_g-cXXyCoWjzppgkuqzOeKyk/viewform) before any code will be reviewed, see the [Contributing docs](https://docs.servicestack.net/contributing.html) for more details. All contributions must include tests verifying the desired behavior. ## OSS Libraries used ServiceStack includes source code of the great libraries below for some of its core functionality. Each library is released under its respective licence: - - [Mono](https://github.com/mono/mono) [(License)](https://github.com/mono/mono/blob/master/LICENSE) - - [Funq IOC](http://funq.codeplex.com) [(License)](http://funq.codeplex.com/license) - - [Fluent Validation](http://fluentvalidation.codeplex.com) [(License)](http://fluentvalidation.codeplex.com/license) - - [Mini Profiler](http://code.google.com/p/mvc-mini-profiler/) [(License)](http://www.apache.org/licenses/LICENSE-2.0) - - [Dapper](http://code.google.com/p/dapper-dot-net/) [(License)](http://www.apache.org/licenses/LICENSE-2.0) - - [TweetStation's OAuth library](https://github.com/migueldeicaza/TweetStation) [(License)](https://github.com/migueldeicaza/TweetStation/blob/master/LICENSE) - - [MarkdownSharp](http://code.google.com/p/markdownsharp/) [(License)](http://opensource.org/licenses/mit-license.php) - - [MarkdownDeep](https://github.com/toptensoftware/markdowndeep) [(License)](http://www.toptensoftware.com/markdowndeep/license) - -## Similar open source projects - -Similar Open source .NET projects for developing or accessing web services include: - - * [Nancy Fx](http://nancyfx.org) - A Sinatra-inspired lightweight Web Framework for .NET: - * [Fubu MVC](http://mvc.fubu-project.org) - A "Front Controller" pattern-style MVC framework designed for use in web applications built on ASP.NET: - * [Rest Sharp](http://restsharp.org) - An open source REST client for .NET + - [Mono](https://github.com/mono/mono) [(MIT License)](https://github.com/mono/mono/blob/master/LICENSE) + - [Funq IOC](http://funq.codeplex.com) [(MS-PL License)](https://opensource.org/licenses/MS-PL) + - [Fluent Validation](https://github.com/JeremySkinner/FluentValidation) [(Apache License 2.0)](https://github.com/JeremySkinner/FluentValidation/blob/master/License.txt) + - [Mini Profiler](https://github.com/MiniProfiler/dotnet) [(MIT License)](https://github.com/MiniProfiler/dotnet/blob/master/LICENSE.txt) + - [Dapper](https://github.com/StackExchange/Dapper) [(Apache License 2.0)](http://www.apache.org/licenses/LICENSE-2.0) + - [TweetStation's OAuth library](https://github.com/migueldeicaza/TweetStation) [(MIT License)](https://github.com/migueldeicaza/TweetStation/blob/master/LICENSE) + - [MarkdownSharp](https://code.google.com/archive/p/markdownsharp) [(MIT License)](https://opensource.org/licenses/mit-license.php) + - [MarkdownDeep](https://github.com/toptensoftware/markdowndeep) [(Apache License 2.0)](http://www.toptensoftware.com/markdowndeep/license) + - [HtmlCompressor](https://code.google.com/archive/p/htmlcompressor) [(Apache License 2.0)](http://www.apache.org/licenses/LICENSE-2.0) + - [JSMin](https://github.com/douglascrockford/JSMin/blob/master/jsmin.c) [(Apache License 2.0)](http://www.apache.org/licenses/LICENSE-2.0) + - [RecyclableMemoryStream](https://github.com/Microsoft/Microsoft.IO.RecyclableMemoryStream) [(MIT License)](https://github.com/Microsoft/Microsoft.IO.RecyclableMemoryStream/blob/master/LICENSE) + - [ASP.NET MVC](https://github.com/aspnet/Mvc) [(Apache License 2.0)](https://github.com/aspnet/Mvc/blob/release/2.2/LICENSE.txt) + - [CoreFX](https://github.com/dotnet/corefx) [(MIT License)](https://github.com/dotnet/corefx/blob/master/LICENSE.TXT) ## Find out More -Follow [@ServiceStack](http://twitter.com/ServiceStack) and +Follow [@ServiceStack](https://twitter.com/ServiceStack) and [+ServiceStack](https://plus.google.com/u/0/communities/112445368900682590445) for project updates. ----- @@ -218,10 +382,13 @@ Follow [@ServiceStack](http://twitter.com/ServiceStack) and ## Core Team - [mythz](https://github.com/mythz) (Demis Bellot) - - [arxisos](https://github.com/arxisos) (Steffen Müller) / [@arxisos](https://twitter.com/arxisos) + - [layoric](https://github.com/layoric) (Darren Reid) / [@layoric](https://twitter.com/layoric) + - [xplicit](https://github.com/xplicit) (Sergey Zhukov) / [@quantumcalc](https://twitter.com/quantumcalc) - [desunit](https://github.com/desunit) (Sergey Bogdanov) / [@desunit](https://twitter.com/desunit) + - [arxisos](https://github.com/arxisos) (Steffen Müller) / [@arxisos](https://twitter.com/arxisos) ## Contributors + A big thanks to GitHub and all of ServiceStack's contributors: - [bman654](https://github.com/bman654) (Brandon Wallace) @@ -497,7 +664,7 @@ A big thanks to GitHub and all of ServiceStack's contributors: - [kaza](https://github.com/kaza) - [mishfit](https://github.com/mishfit) - [rfvgyhn](https://github.com/rfvgyhn) (Chris) - - [caioproiete](https://github.com/caioproiete) (Caio Proiete) + - [augustoproiete](https://github.com/augustoproiete) (C. Augusto Proiete) - [sjuxax](https://github.com/sjuxax) (Jeff Cook) - [madaleno](https://github.com/madaleno) (Luis Madaleno) - [yavosh](https://github.com/yavosh) (Yavor Shahpasov) @@ -527,4 +694,10 @@ A big thanks to GitHub and all of ServiceStack's contributors: *** -Runs on both Mono and .NET _(Live preview hosted on Mono / Ubuntu)_ +## Similar open source projects + +Similar Open source .NET projects for developing or accessing web services include: + + * [Nancy Fx](http://nancyfx.org) - A Sinatra-inspired lightweight Web Framework for .NET: + * [Fubu MVC](https://fubumvc.github.io/) - A "Front Controller" pattern-style MVC framework designed for use in web applications built on ASP.NET: + * [Rest Sharp](http://restsharp.org) - An open source REST client for .NET diff --git a/build/7za.exe b/build/7za.exe deleted file mode 100644 index 06e8b434f73..00000000000 Binary files a/build/7za.exe and /dev/null differ diff --git a/build/appsettings.license.txt b/build/appsettings.license.txt deleted file mode 100644 index 1e498b17527..00000000000 --- a/build/appsettings.license.txt +++ /dev/null @@ -1 +0,0 @@ -1001-e1JlZjoxMDAxLE5hbWU6VGVzdCBCdXNpbmVzcyxUeXBlOkJ1c2luZXNzLEhhc2g6UHVNTVRPclhvT2ZIbjQ5MG5LZE1mUTd5RUMzQnBucTFEbTE3TDczVEF4QUNMT1FhNXJMOWkzVjFGL2ZkVTE3Q2pDNENqTkQyUktRWmhvUVBhYTBiekJGUUZ3ZE5aZHFDYm9hL3lydGlwUHI5K1JsaTBYbzNsUC85cjVJNHE5QVhldDN6QkE4aTlvdldrdTgyTk1relY2eis2dFFqTThYN2lmc0JveHgycFdjPSxFeHBpcnk6MjAxMy0wMS0wMX0= \ No newline at end of file diff --git a/build/build-common-core.proj b/build/build-common-core.proj new file mode 100644 index 00000000000..5197ad42469 --- /dev/null +++ b/build/build-common-core.proj @@ -0,0 +1,105 @@ + + + + + + 5 + 0 + $(BUILD_NUMBER) + + + + $(MSBuildProjectDirectory)/.. + $(BuildSolutionDir)/src + Release + $(BuildSolutionDir)/NuGet/ + $(MajorVersion).$(MinorVersion).$(PatchVersion) + + + + + BeforeBuildSolutions; + BuildSolutions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <Version>[^<]* + <Version>$(PackageVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/build-common.proj b/build/build-common.proj new file mode 100644 index 00000000000..d93eb2f341b --- /dev/null +++ b/build/build-common.proj @@ -0,0 +1,108 @@ + + + + + + 5 + 0 + $(BUILD_NUMBER) + + + + $(MSBuildProjectDirectory)/.. + $(BuildSolutionDir)/src + Release + $(BuildSolutionDir)/NuGet/ + $(MajorVersion).$(MinorVersion).$(PatchVersion) + + + + + BeforeBuildSolutions; + BuildSolutions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <Version>[^<]* + <Version>$(PackageVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/build-core.proj b/build/build-core.proj new file mode 100644 index 00000000000..c8c1df59d36 --- /dev/null +++ b/build/build-core.proj @@ -0,0 +1,175 @@ + + + + + + 5 + 0 + $(BUILD_NUMBER) + + + + $(MSBuildProjectDirectory)/.. + $(BuildSolutionDir)/src + Release + $(BuildSolutionDir)/NuGet/ + $(MajorVersion).$(MinorVersion).$(PatchVersion) + + + + + BeforeBuildSolutions; + BuildSolutions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <Version>[^<]* + <Version>$(PackageVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/build-pcl.proj b/build/build-pcl.proj deleted file mode 100644 index a7f2510105a..00000000000 --- a/build/build-pcl.proj +++ /dev/null @@ -1,169 +0,0 @@ - - - - - 4 - 0 - $(BUILD_NUMBER) - - - - $(MSBuildProjectDirectory)/.. - $(BuildSolutionDir)/src - Release - /noshadow - $(SrcDir)/.nuget/nuget.exe - $(BuildSolutionDir)/NuGet.Pcl/ - $(MajorVersion).$(MinorVersion).$(PatchVersion).0 - -unstable - $(MajorVersion).$(MinorVersion).$(PatchVersion)$(UnstableTag) - $(MajorVersion).$(MinorVersion)$(PatchVersion) - - - - - BuildSolutions - - - - - - - - - - - - - - - - - - - - - - - - - - - - AssemblyFileVersion\(\"\d+\.\d+\.\d+\.\d+\"\) - AssemblyFileVersion("$(Version)") - - - - - AssemblyVersion\(\"\d+\.\d+\.\d+\.\d+\"\) - AssemblyVersion("4.0.0.0") - - - - - version="4\.0[^"]*" - version="$(PackageVersion)" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/build-remote.proj b/build/build-remote.proj deleted file mode 100644 index 01e6b2eccf0..00000000000 --- a/build/build-remote.proj +++ /dev/null @@ -1,223 +0,0 @@ - - - - - 3 - 9 - $(BUILD_NUMBER) - - - - $(MSBuildProjectDirectory)/.. - $(BuildSolutionDir)/src - Release - /noshadow - $(BuildSolutionDir)/src/.nuget/nuget.exe - $(BuildSolutionDir)/NuGet/ - $(MSBuildProjectDirectory) - $(MajorVersion).$(MinorVersion).$(PatchVersion).0 - -unstable - $(MajorVersion).$(MinorVersion).$(PatchVersion)$(UnstableTag) - $(MajorVersion).$(MinorVersion)$(PatchVersion) - - - - - BuildSolutions - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \d+\.\d+\.\d+\.\d+ - $(Version) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/build-sn.proj b/build/build-sn.proj deleted file mode 100644 index 67de6a8bca4..00000000000 --- a/build/build-sn.proj +++ /dev/null @@ -1,199 +0,0 @@ - - - - - 4 - 0 - $(BUILD_NUMBER) - - - - $(MSBuildProjectDirectory)/.. - $(BuildSolutionDir)/src - Signed - /noshadow - $(SrcDir)/.nuget/nuget.exe - $(BuildSolutionDir)/NuGet.Signed/ - $(MajorVersion).$(MinorVersion).$(PatchVersion).0 - -unstable - $(MajorVersion).$(MinorVersion).$(PatchVersion)$(UnstableTag) - $(MajorVersion).$(MinorVersion)$(PatchVersion) - - - - - BuildSolutions - - - - - - - - - - - - - - - - - - - - - - - - - - AssemblyFileVersion\(\"\d+\.\d+\.\d+\.\d+\"\) - AssemblyFileVersion("$(Version)") - - - - - AssemblyVersion\(\"\d+\.\d+\.\d+\.\d+\"\) - AssemblyVersion("4.0.0.0") - - - - - version="4\.0[^"]*" - version="$(PackageVersion)" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/build.bat b/build/build.bat index 07cc97dc034..7cd0981c96d 100644 --- a/build/build.bat +++ b/build/build.bat @@ -1,8 +1,4 @@ -SET MSBUILD=C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe - -%MSBUILD% build.proj /target:TeamCityBuild;NuGetPack /property:Configuration=Release;RELEASE=true;PatchVersion=0 -REM %MSBUILD% build-sn.proj /target:TeamCityBuild;NuGetPack /property:Configuration=Signed;RELEASE=true;PatchVersion=0 -REM %MSBUILD% build-pcl.proj /target:TeamCityBuild;NuGetPack /property:Configuration=Release;RELEASE=true;PatchVersion=0 - -REM Debug Task -REM C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe /t:rebuild /debug C:\src\ServiceStack\tests\RazorRockstars.BuildTask\RazorRockstars.BuildTask.csproj +for /f "usebackq tokens=*" %%i in (`vswhere.exe -latest -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe`) do ( + SET MSBUILD="%%i" +) +%MSBUILD% build.proj /property:Configuration=Release;MinorVersion=8;PatchVersion=1 diff --git a/build/build.proj b/build/build.proj index fc6f0a9d5b1..09b5df954d7 100644 --- a/build/build.proj +++ b/build/build.proj @@ -1,8 +1,10 @@ - + + - 4 + 5 0 $(BUILD_NUMBER) @@ -11,503 +13,247 @@ $(MSBuildProjectDirectory)/.. $(BuildSolutionDir)/src Release - /noshadow - $(SrcDir)/.nuget/nuget.exe $(BuildSolutionDir)/NuGet/ - $(MajorVersion).$(MinorVersion).$(PatchVersion).0 - -unstable - $(MajorVersion).$(MinorVersion).$(PatchVersion)$(UnstableTag) - $(MajorVersion).$(MinorVersion)$(PatchVersion) + $(MajorVersion).$(MinorVersion).$(PatchVersion) + BeforeBuildSolutions; BuildSolutions - - - - - - - - - + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - AssemblyFileVersion\(\"\d+\.\d+\.\d+\.\d+\"\) - AssemblyFileVersion("$(Version)") - - - AssemblyVersion\(\"\d+\.\d+\.\d+\.\d+\"\) - AssemblyVersion("$(Version)") - - - key="servicestack:license".* - key="servicestack:license" value="$([System.IO.File]::ReadAllText($(MSBuildProjectDirectory)/appsettings.license.txt))" /> - - - - version="4\.0(\.\d+)?" - version="$(PackageVersion)" + + <Version>[^<]* + <Version>$(PackageVersion) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - + + - - - + + + - - - - - + + + - + + - + + - - + + + + - + Targets="Build;Pack" + Properties="Configuration=$(Configuration)" /> - - + + - - - - - - - - - - + + - - + + - - + + - + + - + + - - + + - + + + - - - - + Targets="Build;Pack" + Properties="Configuration=$(Configuration)" /> - - - + + + + - - - - - + Targets="Build;Pack" + Properties="Configuration=$(Configuration)" /> - - - - - - + Targets="Build;Pack" + Properties="Configuration=$(Configuration)" /> - - - - - - - - - - - - - - - - - - - - - - - - + Targets="Build;Pack" + Properties="Configuration=$(Configuration)" /> + - + Targets="Build;Pack" + Properties="Configuration=$(Configuration)" /> - - + + + - + + + + + - - - - - - + Targets="Build;Pack" + Properties="Configuration=$(Configuration)" /> - - - - - - + Targets="Build;Pack" + Properties="Configuration=$(Configuration)" /> - - - - - - + Targets="Build;Pack" + Properties="Configuration=$(Configuration)" /> - - - - - - + Targets="Build;Pack" + Properties="Configuration=$(Configuration)" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Targets="Build;Pack" + Properties="Configuration=$(Configuration)" /> - + + - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + - - - - - + + diff --git a/build/build.sh b/build/build.sh deleted file mode 100755 index 23f055432b6..00000000000 --- a/build/build.sh +++ /dev/null @@ -1,170 +0,0 @@ -#!/bin/bash - -MODO=Debug -LIB_DIR=lib -MONO_DIR=lib -#MODO=Release - -CURRENT_DIR=`pwd` -cd ../.. - -function makeMonoDir { - echo "$1/$MONO_DIR" - if [ ! -d "$1/$MONO_DIR" ] - then - mkdir -p "$1/$MONO_DIR"/tests - fi -} - -if [ ! -d "$LIB_DIR" ] -then - mkdir "$LIB_DIR" -fi - -function buildComponentAndCopyToServiceStack { - xbuild /p:Configuration="$MODO" "$1"/src/"$2"/"$2".csproj - cp "$1"/src/"$2"/bin/"$MODO"/"$2".dll "$LIB_DIR" - cp "$LIB_DIR"/"$2".dll ServiceStack/"$MONO_DIR" -} - -function buildComponent { - xbuild /p:Configuration="$MODO" "$1"/src/"$2"/"$2".csproj - cp "$1"/src/"$2"/bin/"$MODO"/"$2".dll "$LIB_DIR" -} - -function buildTestComponent { - xbuild /p:Configuration="$MODO" "$1"/tests/"$2"/"$2".csproj - cp "$1"/tests/"$2"/bin/"$MODO"/"$2".dll "$LIB_DIR" -} - -function buildServiceStackBenchmarks { - xbuild /p:Configuration="$MODO" "$1"/src/"$2"/"$3"/"$3".csproj - cp "$1"/src/"$2"/"$3"/bin/"$MODO"/"$3".dll "$LIB_DIR" -} - -makeMonoDir ServiceStack -makeMonoDir ServiceStack.OrmLite -makeMonoDir ServiceStack.Redis -makeMonoDir ServiceStack.Text - - -buildComponentAndCopyToServiceStack ServiceStack.Text ServiceStack.Text -cp "$LIB_DIR"/ServiceStack.Text.dll ServiceStack.OrmLite/"$MONO_DIR" -cp "$LIB_DIR"/ServiceStack.Text.dll ServiceStack.Redis/"$MONO_DIR" -cp "$LIB_DIR"/ServiceStack.Text.dll ServiceStack.Redis/"$MONO_DIR"/tests -cp "$LIB_DIR"/ServiceStack.Text.dll ServiceStack.Text/"$MONO_DIR"/tests -cp "$LIB_DIR"/ServiceStack.Text.dll ServiceStack.Logging/"$MONO_DIR" - -buildComponentAndCopyToServiceStack ServiceStack ServiceStack.Interfaces -cp "$LIB_DIR"/ServiceStack.Interfaces.dll ServiceStack.OrmLite/"$MONO_DIR" -cp "$LIB_DIR"/ServiceStack.Interfaces.dll ServiceStack.Redis/"$MONO_DIR" -cp "$LIB_DIR"/ServiceStack.Interfaces.dll ServiceStack.Redis/"$MONO_DIR"/tests -cp "$LIB_DIR"/ServiceStack.Interfaces.dll ServiceStack.Text/"$MONO_DIR"/tests -cp "$LIB_DIR"/ServiceStack.Interfaces.dll ServiceStack.Logging/"$MONO_DIR" - -buildComponentAndCopyToServiceStack ServiceStack ServiceStack.Common -cp "$LIB_DIR"/ServiceStack.Common.dll ServiceStack.OrmLite/"$MONO_DIR" -cp "$LIB_DIR"/ServiceStack.Common.dll ServiceStack.Redis/"$MONO_DIR" -cp "$LIB_DIR"/ServiceStack.Common.dll ServiceStack.Redis/"$MONO_DIR"/tests -cp "$LIB_DIR"/ServiceStack.Common.dll ServiceStack.Text/"$MONO_DIR"/tests/ -cp "$LIB_DIR"/ServiceStack.Common.dll ServiceStack.Logging/"$MONO_DIR" - -buildComponent ServiceStack ServiceStack -cp "$LIB_DIR"/ServiceStack.dll ServiceStack.Redis/"$MONO_DIR"/tests -cp "$LIB_DIR"/ServiceStack.dll ServiceStack.Text/"$MONO_DIR"/tests - -buildComponentAndCopyToServiceStack ServiceStack.OrmLite ServiceStack.OrmLite -buildComponentAndCopyToServiceStack ServiceStack.OrmLite ServiceStack.OrmLite.Sqlite -buildComponentAndCopyToServiceStack ServiceStack.OrmLite ServiceStack.OrmLite.SqlServer -buildComponent ServiceStack.OrmLite ServiceStack.OrmLite.MySql -buildComponent ServiceStack.OrmLite ServiceStack.OrmLite.PostgreSQL -buildComponent ServiceStack.OrmLite ServiceStack.OrmLite.Firebird -buildComponent ServiceStack.OrmLite ServiceStack.OrmLite.Oracle - -cp "$LIB_DIR"/ServiceStack.OrmLite.dll ServiceStack.Text/"$MONO_DIR"/tests -cp "$LIB_DIR"/ServiceStack.OrmLite.SqlServer.dll ServiceStack.Text/"$MONO_DIR"/tests -cp "$LIB_DIR"/ServiceStack.OrmLite.Sqlite.dll ServiceStack.Text/"$MONO_DIR"/tests - -#ServiceStack again -buildComponent ServiceStack ServiceStack.Authentication.OpenId -buildComponent ServiceStack ServiceStack.Plugins.MsgPack -buildComponent ServiceStack ServiceStack.ServiceInterface -buildComponent ServiceStack ServiceStack.Plugins.ProtoBuf -buildComponent ServiceStack ServiceStack.FluentValidation.Mvc3 -buildComponent ServiceStack ServiceStack.Razor2 -cp "$LIB_DIR"/ServiceStack.Razor2.dll ServiceStack.Redis/"$MONO_DIR"/tests/ -cp "$LIB_DIR"/ServiceStack.ServiceInterface.dll ServiceStack.Redis/"$MONO_DIR"/tests/ -cp "$LIB_DIR"/ServiceStack.ServiceInterface.dll ServiceStack.Text/"$MONO_DIR"/tests/ - - -buildComponentAndCopyToServiceStack ServiceStack.Redis ServiceStack.Redis -cp "$LIB_DIR"/ServiceStack.Redis.dll ServiceStack.Redis/"$LIB_DIR"/tests -cp "$LIB_DIR"/ServiceStack.Redis.dll ServiceStack.Text/"$LIB_DIR"/tests - -#ServiceStack.Benchmarks -cp "$LIB_DIR"/ServiceStack.dll ServiceStack.Benchmarks/lib -cp "$LIB_DIR"/ServiceStack.Interfaces.dll ServiceStack.Benchmarks/lib - -cp "$LIB_DIR"/ServiceStack.Text.dll ServiceStack.Benchmarks/src/Northwind.Benchmarks/Lib -cp "$LIB_DIR"/ServiceStack.Interfaces.dll ServiceStack.Benchmarks/src/Northwind.Benchmarks/Lib - -buildServiceStackBenchmarks ServiceStack.Benchmarks Northwind.Benchmarks Northwind.Common -buildServiceStackBenchmarks ServiceStack.Benchmarks Northwind.Benchmarks Northwind.Perf -buildServiceStackBenchmarks ServiceStack.Benchmarks Northwind.Benchmarks Northwind.Benchmarks -buildServiceStackBenchmarks ServiceStack.Benchmarks Northwind.Benchmarks Northwind.Benchmarks.Console - -cp "$LIB_DIR"/Northwind.Common.dll ServiceStack/"$MONO_DIR"/tests/ -cp "$LIB_DIR"/Northwind.Common.dll ServiceStack.OrmLite/"$MONO_DIR"/tests/ -cp "$LIB_DIR"/Northwind.Common.dll ServiceStack.Redis/"$MONO_DIR"/tests/ -cp "$LIB_DIR"/Northwind.Common.dll ServiceStack.Text/"$MONO_DIR"/tests/ -cp "$LIB_DIR"/Northwind.Perf.dll ServiceStack.OrmLite/"$MONO_DIR"/tests/ - - -buildTestComponent ServiceStack ServiceStack.Common.Tests -cp "$LIB_DIR"/ServiceStack.Common.Tests.dll ServiceStack.OrmLite/"$MONO_DIR"/tests -cp "$LIB_DIR"/ServiceStack.Common.Tests.dll ServiceStack.Redis/"$MONO_DIR"/tests -cp "$LIB_DIR"/ServiceStack.Common.Tests.dll ServiceStack.Text/"$MONO_DIR"/tests -buildTestComponent ServiceStack ServiceStack.Messaging.Tests -cp "$LIB_DIR"/ServiceStack.Messaging.Tests.dll ServiceStack.Redis/"$MONO_DIR"/tests -cp "$LIB_DIR"/ServiceStack.Messaging.Tests.dll ServiceStack.Text/"$MONO_DIR"/tests - - -#ServiceStack.RazorHostTests : xbuild can not build it, but monodevelop does it! - -#xbuild ServiceStack/tests/ServiceStack.RazorHostTests/ServiceStack.RazorHostTests.csproj - -#Imported project: -#"/usr/local/lib/mono/xbuild/Microsoft/VisualStudio/v10.0/WebApplications/Microsoft.WebApplication.targets" does not exist. -# there is v9.0 - -#ServiceStack.RazorNancyTests : xbuild can not build it, but monodevelop does it! -#xbuild ServiceStack/tests/ServiceStack.RazorNancyTests/ServiceStack.RazorNancyTests.csproj - -buildTestComponent ServiceStack ServiceStack.ServiceHost.Tests -buildTestComponent ServiceStack ServiceStack.ServiceModel.Tests -#ServiceStack.WebHost.Endpoints.Tests: warning as error -buildTestComponent ServiceStack ServiceStack.WebHost.Endpoints.Tests -#ServiceStack.WebHost.IntegrationTests -# execute once : -#sudo ln -s /usr/local/lib/mono/xbuild/Microsoft/VisualStudio/v9.0 /usr/local/lib/mono/xbuild/Microsoft/VisualStudio/v10.0 -buildTestComponent ServiceStack ServiceStack.WebHost.IntegrationTests -cp ServiceStack/tests/ServiceStack.WebHost.IntegrationTests/bin/ServiceStack.WebHost.IntegrationTests.dll "$LIB_DIR" - - -buildTestComponent ServiceStack.Redis ServiceStack.Redis.Tests -buildTestComponent ServiceStack.Text ServiceStack.Text.Tests -#ServiceStack.Text.Tests // comment public void #Can_Serialize_User_OAuthSession_list() and public void #Doesnt_serialize_TypeInfo_when_set() - - -#ServiceStack.Logging.EventLog - -#fail: ../../src//.nuget/nuget.targets: Project file could not be imported -#use monodevelop -#xbuild ServiceStack.Logging/src/ServiceStack.Logging.EventLog/ServiceStack.Logging.EventLog.csproj - -#ServiceStack.Logging.Log4Net -#fail: ../../src//.nuget/nuget.targets: Project file could not be imported -#use monodevelop -#xbuild #ServiceStack.Logging/src/ServiceStack.Logging.Log4Net/ServiceStack.Logging.Log4Net.csproj - -cd "$CURRENT_DIR" diff --git a/build/codegen-projs.js b/build/codegen-projs.js deleted file mode 100644 index 8182ff757f6..00000000000 --- a/build/codegen-projs.js +++ /dev/null @@ -1,393 +0,0 @@ -// Copyright (c) Service Stack LLC. All Rights Reserved. -// License: https://raw.github.com/ServiceStack/ServiceStack/master/license.txt - - -var fs = require('fs'); -var path = require('path'); -var sax = require("sax"); - -var log = console.log; -log("Generating .Signed.csprojs..."); - -function stripBOM(content) { - if (content.charCodeAt(0) === 0xFEFF) { - content = content.slice(1); - } - return content; -} - -String.prototype.lines = function() { - return this.replace(/\r/g, '').split('\n'); -}; - -var SIGN_PROJS = [ - '../../ServiceStack.Text/src/ServiceStack.Text/ServiceStack.Text.csproj', - '../../ServiceStack.Redis/src/ServiceStack.Redis/ServiceStack.Redis.csproj', - '../../ServiceStack.OrmLite/src/ServiceStack.OrmLite/ServiceStack.OrmLite.csproj', - '../../ServiceStack.OrmLite/src/ServiceStack.OrmLiteV45/ServiceStack.OrmLiteV45.csproj', - '../../ServiceStack.OrmLite/src/ServiceStack.OrmLite.SqlServer/ServiceStack.OrmLite.SqlServer.csproj', - '../../ServiceStack.OrmLite/src/ServiceStack.OrmLite.SqlServerV45/ServiceStack.OrmLite.SqlServerV45.csproj', - '../../ServiceStack.OrmLite/src/ServiceStack.OrmLite.Oracle/ServiceStack.OrmLite.Oracle.csproj', - '../../ServiceStack.OrmLite/src/ServiceStack.OrmLite.Sqlite.Windows/ServiceStack.OrmLite.Sqlite.Windows.csproj', - '../src/ServiceStack.Common/ServiceStack.Common.csproj', - '../src/ServiceStack.Client/ServiceStack.Client.csproj', - '../src/ServiceStack.Server/ServiceStack.Server.csproj', - '../src/ServiceStack.ServerV45/ServiceStack.ServerV45.csproj', - '../src/ServiceStack.Razor/ServiceStack.Razor.csproj', - '../src/ServiceStack.ProtoBuf/ServiceStack.ProtoBuf.csproj', - '../src/ServiceStack.Api.Swagger/ServiceStack.Api.Swagger.csproj', - '../src/ServiceStack/ServiceStack.csproj' -]; -var SIGN_REPLACE_TEXTS = { - '..\\..\\lib\\ServiceStack.Text.dll': '..\\..\\lib\\signed\\ServiceStack.Text.dll', - '..\\..\\lib\\ServiceStack.Common.dll': '..\\..\\lib\\signed\\ServiceStack.Common.dll', - '..\\..\\lib\\ServiceStack.Redis.dll': '..\\..\\lib\\signed\\ServiceStack.Redis.dll', - '..\\..\\lib\\ServiceStack.OrmLite.dll': '..\\..\\lib\\signed\\ServiceStack.OrmLite.dll', - '..\\..\\lib\\net45\\ServiceStack.OrmLite.dll': '..\\..\\lib\\net45\\signed\\ServiceStack.OrmLite.dll', - '..\\..\\lib\\ServiceStack.OrmLite.SqlServer.dll': '..\\..\\lib\\signed\\ServiceStack.OrmLite.SqlServer.dll', - '': '', - '': '', - '': '' -}; - -var injectSignedElements = [ - { - PropertyGroup: { - SignAssembly: "true", - } - }, - { - PropertyGroup: { - AssemblyOriginatorKeyFile: "servicestack-sn.pfx" - } - } -]; - -var readTextFile = function (path) { - return stripBOM(fs.readFileSync(path, { encoding: 'UTF-8' })); -}; - -var mergeElements = function (xml, els) { - els.forEach(function(elSeek) { - Object.keys(elSeek).forEach(function(tag) { - var tagToMatch = tag.toUpperCase(); - - var strict = false; - var parser = sax.parser(strict); - - var matches = []; - var open = { line: 0, coloumn: 0, startTagPosition: 0 }; - - parser.onopentag = function (el) { - if (el.name == tagToMatch) { - log("found <" + tag + "> at: ", this.line + ":" + this.column); - open = { line: this.line, column: this.column, startTagPosition: this.startTagPosition }; - } - }; - parser.onclosetag = function (name) { - if (name == tagToMatch) { - log("found at: ", this.line + ":" + this.column); - matches.push({ start: open, end: { line: this.line, column: this.column, startTagPosition: this.startTagPosition } }); - } - }; - - parser.write(xml); - - log("results for " + tag); - log(matches); - - var props = elSeek[tag]; - var out = []; - var lastPos = 0; - var found = false; - - matches.forEach(function(match) { - var startPos = match.start.startTagPosition + match.start.column; - var endPos = match.end.startTagPosition - 1; - - out.push(xml.substring(lastPos, startPos)); - - var fragment = xml.substring(startPos, endPos); - - if (!found) { - var missing = []; - Object.keys(props).forEach(function (elName) { - var elValue = props[elName]; - var seekTag = "<" + elName + ">"; - var seekEndTag = ""; - var injectXml = seekTag + elValue + seekEndTag; - - var startPos; - if ((startPos = fragment.indexOf(seekTag)) >= 0) { - var endPos = fragment.indexOf(seekEndTag) + seekEndTag.length; - if (endPos == -1) - throw "Couldn't find matching end tag: " + seekEndTag; - - fragment = fragment.substring(0, startPos) - + injectXml - + fragment.substring(endPos); - - found = true; - } else { - missing.push(injectXml); - } - }); - - //If one was found, add the missing at the end fragment - if (found) { - missing.forEach(function(injectXml) { - fragment += " " + injectXml + "\n"; - }); - fragment += " "; - } - } - - out.push(fragment); - - lastPos = endPos; - }); - - //If we can't merge, append - if (!found) { - //Close open end tag first, then open new tag: - out.push("\n "); - out.push("<" + tag + ">\n"); - Object.keys(props).forEach(function (elName) { - var injectXml = " <" + elName + ">" + props[elName] + "\n"; - out.push(injectXml); - }); - //remaining fragment starts with closing tag - } - - out.push(" "); - out.push(xml.substring(lastPos)); - - xml = out.join(''); - }); - }); - - return xml; -}; - -SIGN_PROJS.forEach(function(proj) { - log("file: " + proj); - var xml = readTextFile(proj); - log(xml); - - var transformedXml = mergeElements(xml, injectSignedElements); - - Object.keys(SIGN_REPLACE_TEXTS).forEach(function (find) { - log("replacing: " + find + ", with: " + SIGN_REPLACE_TEXTS[find]); - transformedXml = transformedXml.replace(find, SIGN_REPLACE_TEXTS[find]); - }); - - var signedProjPath = path.join(path.dirname(proj), path.basename(proj).replace(".csproj", ".Signed.csproj")); - log("writing transformedXml to: " + signedProjPath); - log(transformedXml); - - fs.writeFileSync(signedProjPath, transformedXml); -}); - - -log("Generating Custom build .csprojs..."); - -var CUSTOM_TEMPLATES = [{ - Code: 'PCL', - Path: '../src/Templates/PclTemplate.csproj', - ProjectGuid: '{BF5EEDF0-594C-4660-AFF5-AF3423F3602D}', - RootNamespace: 'PclTemplate', - AssemblyName: 'PclTemplate', -}, -{ - Code: 'SL5', - Path: '../src/Templates/SilverlightTemplate.csproj', - ProjectGuid: '{12B8CB9F-E397-4B5F-89AF-B6998296BFE6}', - RootNamespace: 'SilverlightTemplate', - AssemblyName: 'SilverlightTemplate', -} -/*,{ - Code: 'Android', - Path: '../src/Templates/AndroidTemplate.csproj', - ProjectGuid: '{BEA92E9F-00B1-4923-BD81-7F3A9CA24408}', - RootNamespace: 'AndroidTemplate', - AssemblyName: 'AndroidTemplate', -}, -{ - Code: 'AndroidIndie', - Path: '../src/Templates/AndroidIndieTemplate.csproj', - ProjectGuid: '{BEA92E9F-00B1-4923-BD81-7F3A9CA24408}', - RootNamespace: 'AndroidIndieTemplate', - AssemblyName: 'AndroidIndieTemplate', -}*/ -]; - -var CUSTOM_PROJS = [ -//{ -// Path: '../src/ServiceStack.Interfaces/ServiceStack.Interfaces.csproj', -// ReplaceElements: { -// ProjectGuid: '{42E1C8C0-A163-44CC-92B1-8F416F2C0B01}', -// RootNamespace: 'ServiceStack', -// AssemblyName: 'ServiceStack.Interfaces', -// }, -// ReplaceTemplate: function (code, tmpl) { -// var replaceTexts = { -// '11.0': '10.0', -// 'v4.5': 'v4.0', -// 'Profile7': 'Profile136' -// }; -// if (code == 'PCL') { -// for (var needle in replaceTexts) { -// var replaceText = replaceTexts[needle]; -// tmpl = tmpl.replace(needle, replaceText); -// } -// } -// return tmpl; -// } -//}, -{ - Path: '../../ServiceStack.Text/src/ServiceStack.Text/ServiceStack.Text.csproj', - ReplaceElements: { - ProjectGuid: '{579B3FDB-CDAD-44E1-8417-885C38E49A0E}', - RootNamespace: 'ServiceStack.Text', - AssemblyName: 'ServiceStack.Text', - } -}, -{ - Path: '../src/ServiceStack.Client/ServiceStack.Client.csproj', - ReplaceElements: { - ProjectGuid: '{42E1C8C0-A163-44CC-92B1-8F416F2C0B01}', - RootNamespace: 'ServiceStack', - AssemblyName: 'ServiceStack.Client' - }, - ReplaceTexts: { - '': [ - '', - ' ', - ' {55942102-033A-4DA8-A6AF-1DB7B2F34A2D}', - ' ServiceStack.Interfaces', - ' ', - '', - '', - ' ', - ' ..\\..\\lib\\ServiceStack.Text.dll', - ' ', - '' - ].join('\n') - }, - ReplaceTemplate: function (code, tmpl) { - if (code == 'SL5') { - //tmpl = tmpl.replace(/ServiceStack.Interfaces.SL5/g, 'ServiceStack.Interfaces'); - tmpl = tmpl.replace('..\\..\\lib\\ServiceStack.Text.dll', '..\\..\\lib\\sl5\\ServiceStack.Text.dll'); - } - else if (code == 'PCL') { - tmpl = tmpl.replace('..\\..\\lib\\ServiceStack.Text.dll', '..\\..\\lib\\pcl\\ServiceStack.Text.dll'); - } - return tmpl; - } -}]; - -var CUSTOM_MERGE_FRAGMENTS = [ - ["ItemGroup", "Compile"], - ["ItemGroup", "Content"], - ["ItemGroup", "None"] -]; - -CUSTOM_TEMPLATES.forEach(function(tmpl) { - log(tmpl.Path); - var originalTemplateXml = readTextFile(tmpl.Path); - log(originalTemplateXml); - - CUSTOM_PROJS.forEach(function (proj) { - var tmplXml = originalTemplateXml; - - Object.keys(proj.ReplaceElements || {}).forEach(function (elName) { - var from = '<' + elName + '>' + tmpl[elName] + ''; - var to = '<' + elName + '>' + proj.ReplaceElements[elName] + ''; - log('\nReplaceElements(' + from + ',' + to + ')\n'); - tmplXml = tmplXml.replace(from, to); - }); - - Object.keys(proj.ReplaceTexts || {}).forEach(function (from) { - var code = tmpl.getCode ? tmpl.getCode(proj) : tmpl.Code; - var to = proj.ReplaceTexts[from].replace(/\$Code/g, code); - log('\nReplaceTexts(' + from + ',' + to + ')\n'); - tmplXml = tmplXml.replace(new RegExp(from,'g'), to); - }); - - var xml = readTextFile(proj.Path); - log(proj.Path); - //log(xml); - - CUSTOM_MERGE_FRAGMENTS.forEach(function (seekCombo) { - var strict = false; - var parser = sax.parser(strict); - - var matches = []; - var root; - var found = false; - var comboFound = []; - - parser.onopentag = function (el) { - var tag = seekCombo[0] || ''; - var tagToMatch = tag.toUpperCase(); - - if (el.name == tagToMatch) { - - var isRoot = comboFound.length == 0; - if (isRoot) { - log("found open root <" + tag + "> at: ", this.line + ":" + this.column + ", " + this.startTagPosition); - root = { line: this.line, column: this.column, startTagPosition: this.startTagPosition }; - } - - comboFound.unshift(seekCombo.shift()); - - if (seekCombo.length == 0 && !found) { - log("found open match <" + tag + "> at: ", this.line + ":" + this.column + ", " + this.startTagPosition); - found = true; - } - } - }; - - parser.onclosetag = function (name) { - if (comboFound.length > 0) { - var tag = comboFound[0]; - var tagToMatch = tag.toUpperCase(); - - if (name == tagToMatch) { - - seekCombo.unshift(comboFound.shift()); - - if (comboFound.length == 0 && found) { - log("found close at: ", this.line + ":" + this.column + ", " + this.startTagPosition); - var match = { start: root, end: { line: this.line, column: this.column, startTagPosition: this.startTagPosition } }; - matches.push(match); - found = false; - - var startPos = match.start.startTagPosition + match.start.column; - var endPos = match.end.startTagPosition - 1; - var fragment = xml.substring(startPos, endPos); - log("fragment for " + seekCombo); - log(match); - //log(fragment); - var placeholder = ""; - var withFragment = "<" + seekCombo[0] + ">\n " + fragment + ""; - tmplXml = tmplXml.replace(placeholder, withFragment); - } - } - } - }; - - parser.write(xml); - }); - - if (proj.ReplaceTemplate) { - tmplXml = proj.ReplaceTemplate(tmpl.Code, tmplXml); - } - - var customProjPath = path.join(path.dirname(proj.Path), path.basename(proj.Path).replace(".csproj", "." + tmpl.Code + ".csproj")); - log("\nwriting transformedXml to: " + customProjPath); - log(tmplXml); - - fs.writeFileSync(customProjPath, tmplXml); - }); -}); \ No newline at end of file diff --git a/build/copy-pcl.bat b/build/copy-pcl.bat deleted file mode 100644 index 6be0f883260..00000000000 --- a/build/copy-pcl.bat +++ /dev/null @@ -1,30 +0,0 @@ -SET MSBUILD=C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe - -REM SET BUILD=Debug -SET BUILD=Release - -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\bin\Pcl\ServiceStack.Text.* ..\lib\pcl -COPY ..\src\ServiceStack.Client\bin\Pcl\ServiceStack.Client.* ..\lib\pcl - -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\PclExport.Net40.cs ..\src\ServiceStack.Pcl.Android -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\PclExport.Net40.cs ..\src\ServiceStack.Pcl.Ios -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\PclExport.Net40.cs ..\src\ServiceStack.Pcl.Ios10 -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\PclExport.Net40.cs ..\src\ServiceStack.Pcl.Net45 -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\PclExport.WinStore.cs ..\src\ServiceStack.Pcl.WinStore - -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\Pcl.* ..\src\ServiceStack.Pcl.Android -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\Pcl.* ..\src\ServiceStack.Pcl.Ios -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\Pcl.* ..\src\ServiceStack.Pcl.Ios10 -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\Pcl.* ..\src\ServiceStack.Pcl.Net45 -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\Pcl.* ..\src\ServiceStack.Pcl.WinStore - -COPY ..\src\ServiceStack.Client\Pcl.NameValueCollectionWrapper.cs ..\src\ServiceStack.Pcl.Android -COPY ..\src\ServiceStack.Client\PclExportClient.Android.cs ..\src\ServiceStack.Pcl.Android -COPY ..\src\ServiceStack.Client\Pcl.NameValueCollectionWrapper.cs ..\src\ServiceStack.Pcl.iOS -COPY ..\src\ServiceStack.Client\Pcl.NameValueCollectionWrapper.cs ..\src\ServiceStack.Pcl.iOS10 -COPY ..\src\ServiceStack.Client\PclExportClient.iOS.cs ..\src\ServiceStack.Pcl.iOS -COPY ..\src\ServiceStack.Client\PclExportClient.iOS.cs ..\src\ServiceStack.Pcl.iOS10 -COPY ..\src\ServiceStack.Client\Pcl.NameValueCollectionWrapper.cs ..\src\ServiceStack.Pcl.Net45 -COPY ..\src\ServiceStack.Client\PclExportClient.Net40.cs ..\src\ServiceStack.Pcl.Net45 -REM COPY ..\src\ServiceStack.Client\Pcl.NameValueCollectionWrapper.cs ..\src\ServiceStack.Pcl.WinStore //Not Required -COPY ..\src\ServiceStack.Client\PclExportClient.WinStore.cs ..\src\ServiceStack.Pcl.WinStore diff --git a/build/copy-sn.bat b/build/copy-sn.bat deleted file mode 100644 index 9d32a6c520f..00000000000 --- a/build/copy-sn.bat +++ /dev/null @@ -1,20 +0,0 @@ -SET BUILD=Signed - -COPY ..\src\ServiceStack.Common\bin\%BUILD%\ServiceStack.Common.dll ..\lib\signed -COPY ..\src\ServiceStack.Common\bin\%BUILD%\ServiceStack.Common.dll ..\..\ServiceStack.Redis\lib\signed -COPY ..\src\ServiceStack.Common\bin\%BUILD%\ServiceStack.Common.dll ..\..\ServiceStack.OrmLite\lib\signed - -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\bin\%BUILD%\ServiceStack.Text.dll ..\lib\signed -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\bin\%BUILD%\ServiceStack.Text.dll ..\..\ServiceStack.Redis\lib\signed -COPY ..\..\ServiceStack.Text\src\ServiceStack.Text\bin\%BUILD%\ServiceStack.Text.dll ..\..\ServiceStack.OrmLite\lib\signed - -COPY ..\src\ServiceStack.Client\bin\%BUILD%\ServiceStack.Client.dll ..\lib\signed - -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.dll ..\lib\signed - -COPY ..\..\ServiceStack.OrmLite\src\ServiceStack.OrmLite\bin\%BUILD%\ServiceStack.OrmLite.dll ..\lib\signed -COPY ..\..\ServiceStack.OrmLite\src\ServiceStack.OrmLite\bin\%BUILD%\ServiceStack.OrmLite.dll ..\..\ServiceStack.OrmLite\lib\signed - -COPY ..\..\ServiceStack.Redis\src\ServiceStack.Redis\bin\%BUILD%\ServiceStack.Redis.dll ..\lib\signed -COPY ..\..\ServiceStack.OrmLite\src\ServiceStack.OrmLite.SqlServer\bin\%BUILD%\ServiceStack.OrmLite.SqlServer.dll ..\lib\signed - diff --git a/build/copy.bat b/build/copy.bat deleted file mode 100644 index f31276fa46a..00000000000 --- a/build/copy.bat +++ /dev/null @@ -1,86 +0,0 @@ -SET MSBUILD=C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe - -REM SET BUILD=Debug -SET BUILD=Release - -REM %MSBUILD% build.msbuild - -MD ..\NuGet\ServiceStack\lib\net40 -MD ..\NuGet\ServiceStack.Api.Swagger\lib\net40 -MD ..\NuGet\ServiceStack.Common\lib\net40 -MD ..\NuGet\ServiceStack.Mvc\lib\net40 -MD ..\NuGet\ServiceStack.Razor\lib\net40 -MD ..\NuGet\ServiceStack.Authentication.OpenId\lib\net40 -MD ..\NuGet\ServiceStack.Authentication.OAuth2\lib\net40 -MD ..\NuGet\ServiceStack.ProtoBuf\lib\net40 -MD ..\NuGet\ServiceStack.MsgPack\lib\net40 - -COPY ..\src\ServiceStack.Razor\bin\%BUILD%\ServiceStack.Razor.* ..\NuGet\ServiceStack.Razor\lib\net40 - -COPY ..\src\ServiceStack.Mvc\bin\%BUILD%\ServiceStack.Mvc.* ..\NuGet\ServiceStack.Mvc\lib\net40 -COPY ..\src\ServiceStack.Mvc\bin\%BUILD%\ServiceStack.Mvc.* ..\NuGet\ServiceStack.Mvc\lib\net40 - -COPY ..\src\ServiceStack.Authentication.OpenId\bin\%BUILD%\ServiceStack.Authentication.OpenId.* ..\NuGet\ServiceStack.Authentication.OpenId\lib\net40 - -COPY ..\src\ServiceStack.Authentication.OAuth2\bin\%BUILD%\ServiceStack.Authentication.OAuth2.* ..\NuGet\ServiceStack.Authentication.OAuth2\lib\net40 - -COPY ..\src\ServiceStack.ProtoBuf\bin\%BUILD%\ServiceStack.ProtoBuf.* ..\NuGet\ServiceStack.ProtoBuf\lib\net40 - -COPY ..\lib\MsgPack.dll ..\NuGet\ServiceStack.MsgPack\lib\net40 -COPY ..\src\ServiceStack.MsgPack\bin\%BUILD%\ServiceStack.MsgPack.* ..\NuGet\ServiceStack.MsgPack\lib\net40 - -IF EXIST ..\..\swagger-ui\dist-disable ( - RMDIR ..\NuGet\ServiceStack.Api.Swagger\content\swagger-ui /s /q - MD ..\NuGet\ServiceStack.Api.Swagger\content\swagger-ui - - RMDIR ..\src\ServiceStack.Api.Swagger\swagger-ui /s /q - MD ..\src\ServiceStack.Api.Swagger\swagger-ui - - XCOPY /E ..\..\swagger-ui\dist ..\src\ServiceStack.Api.Swagger\swagger-ui -) - -COPY ..\src\ServiceStack.Api.Swagger\bin\%BUILD%\ServiceStack.Api.Swagger.* ..\NuGet\ServiceStack.Api.Swagger\lib\net35 - -COPY ..\src\ServiceStack\bin\%BUILD%\*.* ..\..\ServiceStack.Contrib\lib -COPY ..\src\ServiceStack\bin\%BUILD%\*.* ..\..\ServiceStack.RedisWebServices\lib -COPY ..\src\ServiceStack.Server\bin\%BUILD%\ServiceStack.Server.* ..\..\ServiceStack.RedisWebServices\lib - -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.Text.* ..\..\ServiceStack.Redis\lib -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.Common.* ..\..\ServiceStack.Redis\lib -COPY ..\src\ServiceStack.Server\bin\%BUILD%\ServiceStack.* ..\..\ServiceStack.Redis\lib\tests -COPY ..\tests\ServiceStack.Messaging.Tests\bin\%BUILD%\ServiceStack.Messaging.Tests.* ..\..\ServiceStack.Redis\lib\tests - -COPY ..\tests\ServiceStack.Common.Tests\bin\%BUILD%\ServiceStack.Common.Tests.* ..\..\ServiceStack.Text\lib\tests -COPY ..\tests\ServiceStack.Common.Tests\bin\%BUILD%\ServiceStack.Common.Tests.* ..\..\ServiceStack.Redis\lib\tests -COPY ..\tests\ServiceStack.Common.Tests\bin\%BUILD%\ServiceStack.Common.Tests.* ..\..\ServiceStack.OrmLite\lib\tests -COPY ..\src\ServiceStack.Server\bin\%BUILD%\ServiceStack.* ..\..\ServiceStack.Text\lib\tests -COPY ..\src\ServiceStack.Server\bin\%BUILD%\ServiceStack.* ..\..\ServiceStack.Rediss\lib\tests -COPY ..\src\ServiceStack.Server\bin\%BUILD%\ServiceStack.* ..\..\ServiceStack.OrmLite\lib\tests - -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.dll ..\..\ServiceStack.OrmLite\lib -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.pdb ..\..\ServiceStack.OrmLite\lib -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.Text.dll ..\..\ServiceStack.OrmLite\lib -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.Text.pdb ..\..\ServiceStack.OrmLite\lib -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.Common.dll ..\..\ServiceStack.OrmLite\lib -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.Common.pdb ..\..\ServiceStack.OrmLite\lib -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.Client.dll ..\..\ServiceStack.OrmLite\lib -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.Client.pdb ..\..\ServiceStack.OrmLite\lib -COPY ..\tests\ServiceStack.Common.Tests\bin\%BUILD%\ServiceStack.Common.Tests.* ..\..\ServiceStack.OrmLite\lib\tests - -COPY ..\src\ServiceStack.Interfaces\bin\Pcl\ServiceStack.Interfaces.* ..\lib -COPY ..\src\ServiceStack.Common\bin\%BUILD%\ServiceStack.Common.* ..\lib -COPY ..\src\ServiceStack.Client\bin\%BUILD%\ServiceStack.Client.* ..\lib -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.dll ..\lib -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.pdb ..\lib - -COPY ..\lib\ServiceStack.Interfaces.dll ..\..\ServiceStack.Text\lib -COPY ..\lib\ServiceStack.Interfaces.dll ..\..\ServiceStack.Redis\lib -COPY ..\lib\ServiceStack.Interfaces.dll ..\..\ServiceStack.OrmLite\lib - -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.Client.dll ..\..\Stripe\lib -COPY ..\src\ServiceStack\bin\%BUILD%\ServiceStack.Client.pdb ..\..\Stripe\lib -COPY ..\lib\ServiceStack.Interfaces.dll ..\..\Stripe\lib - -COPY ..\src\ServiceStack.Razor.BuildTask\bin\%BUILD%\ServiceStack.Razor.BuildTask.dll ..\lib - -REM COPY ..\src\ServiceStack.DtoGen\*.cs ..\src\ServiceStack\DtoGen diff --git a/build/node.exe b/build/node.exe deleted file mode 100644 index a139fd213e8..00000000000 Binary files a/build/node.exe and /dev/null differ diff --git a/build/node_modules/sax/AUTHORS b/build/node_modules/sax/AUTHORS deleted file mode 100644 index 7145cbcd99c..00000000000 --- a/build/node_modules/sax/AUTHORS +++ /dev/null @@ -1,10 +0,0 @@ -# contributors sorted by whether or not they're me. -Isaac Z. Schlueter -Stein Martin Hustad -Mikeal Rogers -Laurie Harper -Jann Horn -Elijah Insua -Henry Rawas -Justin Makeig -Mike Schilling diff --git a/build/node_modules/sax/LICENSE b/build/node_modules/sax/LICENSE deleted file mode 100644 index 62e4ccf916e..00000000000 --- a/build/node_modules/sax/LICENSE +++ /dev/null @@ -1,32 +0,0 @@ -Copyright (c) Isaac Z. Schlueter ("Author") -All rights reserved. - -The BSD License - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -The file "examples/strict.dtd" is licensed by the W3C and used according -to the terms of the W3C SOFTWARE NOTICE AND LICENSE. See LICENSE-W3C.html -for details. diff --git a/build/node_modules/sax/LICENSE-W3C.html b/build/node_modules/sax/LICENSE-W3C.html deleted file mode 100644 index a611e3f907f..00000000000 --- a/build/node_modules/sax/LICENSE-W3C.html +++ /dev/null @@ -1,188 +0,0 @@ - -W3C Software Notice and License
      - - - -
      -

      - W3C - -

      - -
      - - - -
      -
      - -
      - - -
      -
      - -
      - - -
      -
      -
      - -
      -
      -

      W3C Software Notice and License

      -
      -
      -

      This work (and included software, documentation such as READMEs, or other -related items) is being provided by the copyright holders under the following -license.

      -

      License

      - -

      -By obtaining, using and/or copying this work, you (the licensee) -agree that you have read, understood, and will comply with the following -terms and conditions.

      - -

      Permission to copy, modify, and distribute this software and its -documentation, with or without modification, for any purpose and without -fee or royalty is hereby granted, provided that you include the following on -ALL copies of the software and documentation or portions thereof, including -modifications:

      - -
      • The full text of this NOTICE in a location viewable to users of the - redistributed or derivative work.
      • Any pre-existing intellectual property disclaimers, notices, or terms - and conditions. If none exist, the W3C Software Short - Notice should be included (hypertext is preferred, text is permitted) - within the body of any redistributed or derivative code.
      • Notice of any changes or modifications to the files, including the date - changes were made. (We recommend you provide URIs to the location from - which the code is derived.)
      - -

      Disclaimers

      - -

      THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS -MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR -PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE -ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.

      - -

      COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR -DOCUMENTATION.

      - -

      The name and trademarks of copyright holders may NOT be used in -advertising or publicity pertaining to the software without specific, written -prior permission. Title to copyright in this software and any associated -documentation will at all times remain with copyright holders.

      - -

      Notes

      - -

      This version: http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231

      - -

      This formulation of W3C's notice and license became active on December 31 -2002. This version removes the copyright ownership notice such that this -license can be used with materials other than those owned by the W3C, -reflects that ERCIM is now a host of the W3C, includes references to this -specific dated version of the license, and removes the ambiguous grant of -"use". Otherwise, this version is the same as the previous -version and is written so as to preserve the Free -Software Foundation's assessment of GPL compatibility and OSI's certification -under the Open Source -Definition.

      -
      -
      -
      -
      - - - -
      - -
      diff --git a/build/node_modules/sax/README.md b/build/node_modules/sax/README.md deleted file mode 100644 index c9652420c1a..00000000000 --- a/build/node_modules/sax/README.md +++ /dev/null @@ -1,216 +0,0 @@ -# sax js - -A sax-style parser for XML and HTML. - -Designed with [node](http://nodejs.org/) in mind, but should work fine in -the browser or other CommonJS implementations. - -## What This Is - -* A very simple tool to parse through an XML string. -* A stepping stone to a streaming HTML parser. -* A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML - docs. - -## What This Is (probably) Not - -* An HTML Parser - That's a fine goal, but this isn't it. It's just - XML. -* A DOM Builder - You can use it to build an object model out of XML, - but it doesn't do that out of the box. -* XSLT - No DOM = no querying. -* 100% Compliant with (some other SAX implementation) - Most SAX - implementations are in Java and do a lot more than this does. -* An XML Validator - It does a little validation when in strict mode, but - not much. -* A Schema-Aware XSD Thing - Schemas are an exercise in fetishistic - masochism. -* A DTD-aware Thing - Fetching DTDs is a much bigger job. - -## Regarding `Hello, world!').close(); - - // stream usage - // takes the same options as the parser - var saxStream = require("sax").createStream(strict, options) - saxStream.on("error", function (e) { - // unhandled errors will throw, since this is a proper node - // event emitter. - console.error("error!", e) - // clear the error - this._parser.error = null - this._parser.resume() - }) - saxStream.on("opentag", function (node) { - // same object as above - }) - // pipe is supported, and it's readable/writable - // same chunks coming in also go out. - fs.createReadStream("file.xml") - .pipe(saxStream) - .pipe(fs.createWriteStream("file-copy.xml")) - - - -## Arguments - -Pass the following arguments to the parser function. All are optional. - -`strict` - Boolean. Whether or not to be a jerk. Default: `false`. - -`opt` - Object bag of settings regarding string formatting. All default to `false`. - -Settings supported: - -* `trim` - Boolean. Whether or not to trim text and comment nodes. -* `normalize` - Boolean. If true, then turn any whitespace into a single - space. -* `lowercase` - Boolean. If true, then lowercase tag names and attribute names - in loose mode, rather than uppercasing them. -* `xmlns` - Boolean. If true, then namespaces are supported. -* `position` - Boolean. If false, then don't track line/col/position. - -## Methods - -`write` - Write bytes onto the stream. You don't have to do this all at -once. You can keep writing as much as you want. - -`close` - Close the stream. Once closed, no more data may be written until -it is done processing the buffer, which is signaled by the `end` event. - -`resume` - To gracefully handle errors, assign a listener to the `error` -event. Then, when the error is taken care of, you can call `resume` to -continue parsing. Otherwise, the parser will not continue while in an error -state. - -## Members - -At all times, the parser object will have the following members: - -`line`, `column`, `position` - Indications of the position in the XML -document where the parser currently is looking. - -`startTagPosition` - Indicates the position where the current tag starts. - -`closed` - Boolean indicating whether or not the parser can be written to. -If it's `true`, then wait for the `ready` event to write again. - -`strict` - Boolean indicating whether or not the parser is a jerk. - -`opt` - Any options passed into the constructor. - -`tag` - The current tag being dealt with. - -And a bunch of other stuff that you probably shouldn't touch. - -## Events - -All events emit with a single argument. To listen to an event, assign a -function to `on`. Functions get executed in the this-context of -the parser object. The list of supported events are also in the exported -`EVENTS` array. - -When using the stream interface, assign handlers using the EventEmitter -`on` function in the normal fashion. - -`error` - Indication that something bad happened. The error will be hanging -out on `parser.error`, and must be deleted before parsing can continue. By -listening to this event, you can keep an eye on that kind of stuff. Note: -this happens *much* more in strict mode. Argument: instance of `Error`. - -`text` - Text node. Argument: string of text. - -`doctype` - The ``. Argument: -object with `name` and `body` members. Attributes are not parsed, as -processing instructions have implementation dependent semantics. - -`sgmldeclaration` - Random SGML declarations. Stuff like `` -would trigger this kind of event. This is a weird thing to support, so it -might go away at some point. SAX isn't intended to be used to parse SGML, -after all. - -`opentag` - An opening tag. Argument: object with `name` and `attributes`. -In non-strict mode, tag names are uppercased, unless the `lowercase` -option is set. If the `xmlns` option is set, then it will contain -namespace binding information on the `ns` member, and will have a -`local`, `prefix`, and `uri` member. - -`closetag` - A closing tag. In loose mode, tags are auto-closed if their -parent closes. In strict mode, well-formedness is enforced. Note that -self-closing tags will have `closeTag` emitted immediately after `openTag`. -Argument: tag name. - -`attribute` - An attribute node. Argument: object with `name` and `value`. -In non-strict mode, attribute names are uppercased, unless the `lowercase` -option is set. If the `xmlns` option is set, it will also contains namespace -information. - -`comment` - A comment node. Argument: the string of the comment. - -`opencdata` - The opening tag of a ``) of a `` tags trigger a `"script"` -event, and their contents are not checked for special xml characters. -If you pass `noscript: true`, then this behavior is suppressed. - -## Reporting Problems - -It's best to write a failing test if you find an issue. I will always -accept pull requests with failing tests if they demonstrate intended -behavior, but it is very hard to figure out what issue you're describing -without a test. Writing a test is also the best way for you yourself -to figure out if you really understand the issue you think you have with -sax-js. diff --git a/build/node_modules/sax/component.json b/build/node_modules/sax/component.json deleted file mode 100644 index 96b5d731d09..00000000000 --- a/build/node_modules/sax/component.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "sax", - "description": "An evented streaming XML parser in JavaScript", - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "version": "0.5.2", - "main": "lib/sax.js", - "license": "BSD", - "scripts": [ - "lib/sax.js" - ], - "repository": "git://github.com/isaacs/sax-js.git" -} diff --git a/build/node_modules/sax/examples/big-not-pretty.xml b/build/node_modules/sax/examples/big-not-pretty.xml deleted file mode 100644 index fb5265dde1a..00000000000 --- a/build/node_modules/sax/examples/big-not-pretty.xml +++ /dev/null @@ -1,8002 +0,0 @@ - - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - - something blerm a bit down here - diff --git a/build/node_modules/sax/examples/example.js b/build/node_modules/sax/examples/example.js deleted file mode 100644 index 7b0246e9ab5..00000000000 --- a/build/node_modules/sax/examples/example.js +++ /dev/null @@ -1,29 +0,0 @@ - -var fs = require("fs"), - util = require("util"), - path = require("path"), - xml = fs.readFileSync(path.join(__dirname, "test.xml"), "utf8"), - sax = require("../lib/sax"), - strict = sax.parser(true), - loose = sax.parser(false, {trim:true}), - inspector = function (ev) { return function (data) { - console.error("%s %s %j", this.line+":"+this.column, ev, data); - }}; - -sax.EVENTS.forEach(function (ev) { - loose["on"+ev] = inspector(ev); -}); -loose.onend = function () { - console.error("end"); - console.error(loose); -}; - -// do this in random bits at a time to verify that it works. -(function () { - if (xml) { - var c = Math.ceil(Math.random() * 1000) - loose.write(xml.substr(0,c)); - xml = xml.substr(c); - process.nextTick(arguments.callee); - } else loose.close(); -})(); diff --git a/build/node_modules/sax/examples/get-products.js b/build/node_modules/sax/examples/get-products.js deleted file mode 100644 index 9e8d74aacd0..00000000000 --- a/build/node_modules/sax/examples/get-products.js +++ /dev/null @@ -1,58 +0,0 @@ -// pull out /GeneralSearchResponse/categories/category/items/product tags -// the rest we don't care about. - -var sax = require("../lib/sax.js") -var fs = require("fs") -var path = require("path") -var xmlFile = path.resolve(__dirname, "shopping.xml") -var util = require("util") -var http = require("http") - -fs.readFile(xmlFile, function (er, d) { - http.createServer(function (req, res) { - if (er) throw er - var xmlstr = d.toString("utf8") - - var parser = sax.parser(true) - var products = [] - var product = null - var currentTag = null - - parser.onclosetag = function (tagName) { - if (tagName === "product") { - products.push(product) - currentTag = product = null - return - } - if (currentTag && currentTag.parent) { - var p = currentTag.parent - delete currentTag.parent - currentTag = p - } - } - - parser.onopentag = function (tag) { - if (tag.name !== "product" && !product) return - if (tag.name === "product") { - product = tag - } - tag.parent = currentTag - tag.children = [] - tag.parent && tag.parent.children.push(tag) - currentTag = tag - } - - parser.ontext = function (text) { - if (currentTag) currentTag.children.push(text) - } - - parser.onend = function () { - var out = util.inspect(products, false, 3, true) - res.writeHead(200, {"content-type":"application/json"}) - res.end("{\"ok\":true}") - // res.end(JSON.stringify(products)) - } - - parser.write(xmlstr).end() - }).listen(1337) -}) diff --git a/build/node_modules/sax/examples/hello-world.js b/build/node_modules/sax/examples/hello-world.js deleted file mode 100644 index cbfa5184ecd..00000000000 --- a/build/node_modules/sax/examples/hello-world.js +++ /dev/null @@ -1,4 +0,0 @@ -require("http").createServer(function (req, res) { - res.writeHead(200, {"content-type":"application/json"}) - res.end(JSON.stringify({ok: true})) -}).listen(1337) diff --git a/build/node_modules/sax/examples/not-pretty.xml b/build/node_modules/sax/examples/not-pretty.xml deleted file mode 100644 index 9592852d0c0..00000000000 --- a/build/node_modules/sax/examples/not-pretty.xml +++ /dev/null @@ -1,8 +0,0 @@ - - something blerm a bit down here diff --git a/build/node_modules/sax/examples/pretty-print.js b/build/node_modules/sax/examples/pretty-print.js deleted file mode 100644 index cd6aca9e1cb..00000000000 --- a/build/node_modules/sax/examples/pretty-print.js +++ /dev/null @@ -1,74 +0,0 @@ -var sax = require("../lib/sax") - , printer = sax.createStream(false, {lowercasetags:true, trim:true}) - , fs = require("fs") - -function entity (str) { - return str.replace('"', '"') -} - -printer.tabstop = 2 -printer.level = 0 -printer.indent = function () { - print("\n") - for (var i = this.level; i > 0; i --) { - for (var j = this.tabstop; j > 0; j --) { - print(" ") - } - } -} -printer.on("opentag", function (tag) { - this.indent() - this.level ++ - print("<"+tag.name) - for (var i in tag.attributes) { - print(" "+i+"=\""+entity(tag.attributes[i])+"\"") - } - print(">") -}) - -printer.on("text", ontext) -printer.on("doctype", ontext) -function ontext (text) { - this.indent() - print(text) -} - -printer.on("closetag", function (tag) { - this.level -- - this.indent() - print("") -}) - -printer.on("cdata", function (data) { - this.indent() - print("") -}) - -printer.on("comment", function (comment) { - this.indent() - print("") -}) - -printer.on("error", function (error) { - console.error(error) - throw error -}) - -if (!process.argv[2]) { - throw new Error("Please provide an xml file to prettify\n"+ - "TODO: read from stdin or take a file") -} -var xmlfile = require("path").join(process.cwd(), process.argv[2]) -var fstr = fs.createReadStream(xmlfile, { encoding: "utf8" }) - -function print (c) { - if (!process.stdout.write(c)) { - fstr.pause() - } -} - -process.stdout.on("drain", function () { - fstr.resume() -}) - -fstr.pipe(printer) diff --git a/build/node_modules/sax/examples/shopping.xml b/build/node_modules/sax/examples/shopping.xml deleted file mode 100644 index 223c6c66562..00000000000 --- a/build/node_modules/sax/examples/shopping.xml +++ /dev/null @@ -1,2 +0,0 @@ - -sandbox3.1 r31.Kadu4DC.phase357782011.10.06 15:37:23 PSTp2.a121bc2aaf029435dce62011-10-21T18:38:45.982-04:00P0Y0M0DT0H0M0.169S1112You are currently using the SDC API sandbox environment! No clicks to merchant URLs from this response will be paid. Please change the host of your API requests to 'publisher.api.shopping.com' when you have finished development and testinghttp://statTest.dealtime.com/pixel/noscript?PV_EvnTyp=APPV&APPV_APITSP=10%2F21%2F11_06%3A38%3A45_PM&APPV_DSPRQSID=p2.a121bc2aaf029435dce6&APPV_IMGURL=http://img.shopping.com/sc/glb/sdc_logo_106x19.gif&APPV_LI_LNKINID=7000610&APPV_LI_SBMKYW=nikon&APPV_MTCTYP=1000&APPV_PRTID=2002&APPV_BrnID=14804http://www.shopping.com/digital-cameras/productsDigital CamerasDigital CamerasElectronicshttp://www.shopping.com/xCH-electronics-nikon~linkin_id-7000610?oq=nikonCameras and Photographyhttp://www.shopping.com/xCH-cameras_and_photography-nikon~linkin_id-7000610?oq=nikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610nikonnikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610Nikon D3100 Digital Camera14.2 Megapixel, SLR Camera, 3 in. LCD Screen, With High Definition Video, Weight: 1 lb.The Nikon D3100 digital SLR camera speaks to the growing ranks of enthusiastic D-SLR users and aspiring photographers by providing an easy-to-use and affordable entrance to the world of Nikon D-SLR’s. The 14.2-megapixel D3100 has powerful features, such as the enhanced Guide Mode that makes it easy to unleash creative potential and capture memories with still images and full HD video. Like having a personal photo tutor at your fingertips, this unique feature provides a simple graphical interface on the camera’s LCD that guides users by suggesting and/or adjusting camera settings to achieve the desired end result images. The D3100 is also the world’s first D-SLR to introduce full time auto focus (AF) in Live View and D-Movie mode to effortlessly achieve the critical focus needed when shooting Full HD 1080p video.http://di1.shopping.com/images/pi/93/bc/04/101677489-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-606x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=194.56http://img.shopping.com/sc/pr/sdc_stars_sm_4.5.gifhttp://www.shopping.com/Nikon-D3100/reviews~linkin_id-7000610429.001360.00http://www.shopping.com/Nikon-D3100/prices~linkin_id-7000610http://www.shopping.com/Nikon-D3100/info~linkin_id-7000610Nikon D3100 Digital SLR Camera with 18-55mm NIKKOR VR LensThe Nikon D3100 Digital SLR Camera is an affordable compact and lightweight photographic power-house. It features the all-purpose 18-55mm VR lens a high-resolution 14.2 MP CMOS sensor along with a feature set that's comprehensive yet easy to navigate - the intuitive onboard learn-as-you grow guide mode allows the photographer to understand what the 3100 can do quickly and easily. Capture beautiful pictures and amazing Full HD 1080p movies with sound and full-time autofocus. Availabilty: In Stock!7185Nikonhttp://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFree Shipping with Any Purchase!529.000.00799.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=-ZW6BMZqz6fbS-aULwga_g%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F343.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+Digital+SLR+Camera+with+18-55mm+NIKKOR+VR+Lens&dlprc=529.0&crn=&istrsmrc=1&isathrsl=0&AR=1&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=1&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF343C5Nikon Nikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR, CamerasNikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR7185Nikonhttp://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-385x352-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock549.000.00549.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=779&BEFID=7185&aon=%5E1&MerchantID=305814&crawler_id=305814&dealId=md1e9lD8vdOu4FHQfJqKng%3D%3D&url=http%3A%2F%2Fwww.electronics-expo.com%2Findex.php%3Fpage%3Ditem%26id%3DNIKD3100%26source%3DSideCar%26scpid%3D8%26scid%3Dscsho318727%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Nikon+D3100+14.2MP+Digital+SLR+Camera+with+18-55mm+f%2F3.5-5.6+AF-S+DX+VR%2C+Cameras&dlprc=549.0&crn=&istrsmrc=1&isathrsl=0&AR=9&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=9&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=771&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Electronics Expohttp://img.shopping.com/cctool/merch_logos/305814.gif1-888-707-EXPO3713.90http://img.shopping.com/sc/mr/sdc_checks_4.gifhttp://www.shopping.com/xMR-store_electronics_expo~MRD-305814~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSNIKD3100Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, BlackSplit-second shutter response captures shots other cameras may have missed Helps eliminate the frustration of shutter delay! 14.2-megapixels for enlargements worth framing and hanging. Takes breathtaking 1080p HD movies. ISO sensitivity from 100-1600 for bright or dimly lit settings. 3.0in. color LCD for beautiful, wide-angle framing and viewing. In-camera image editing lets you retouch with no PC. Automatic scene modes include Child, Sports, Night Portrait and more. Accepts SDHC memory cards. Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, Black is one of many Digital SLR Cameras available through Office Depot. Made by Nikon.7185Nikonhttp://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-250x250-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock549.990.00699.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=698&BEFID=7185&aon=%5E1&MerchantID=467671&crawler_id=467671&dealId=yYuaXnDFtCY7rDUjkY2aaw%3D%3D&url=http%3A%2F%2Flink.mercent.com%2Fredirect.ashx%3Fmr%3AmerchantID%3DOfficeDepot%26mr%3AtrackingCode%3DCEC9669E-6ABC-E011-9F24-0019B9C043EB%26mr%3AtargetUrl%3Dhttp%3A%2F%2Fwww.officedepot.com%2Fa%2Fproducts%2F486292%2FNikon-D3100-142-Megapixel-Digital-SLR%2F%253fcm_mmc%253dMercent-_-Shopping-_-Cameras_and_Camcorders-_-486292&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+14.2-Megapixel+Digital+SLR+Camera+With+18-55mm+Zoom-Nikkor+Lens%2C+Black&dlprc=549.99&crn=&istrsmrc=1&isathrsl=0&AR=10&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=10&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=690&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Office Depothttp://img.shopping.com/cctool/merch_logos/467671.gif1-800-GO-DEPOT1352.37http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_office_depot_4158555~MRD-467671~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS486292Nikon® D3100™ 14.2MP Digital SLR with 18-55mm LensThe Nikon D3100 DSLR will surprise you with its simplicity and impress you with superb results.7185Nikonhttp://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock549.996.05549.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=Rl56U7CuiTYsH4MGZ02lxQ%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D903483107%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D3100%E2%84%A2+14.2MP+Digital+SLR+with+18-55mm+Lens&dlprc=549.99&crn=&istrsmrc=0&isathrsl=0&AR=11&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=11&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS9614867Nikon D3100 SLR w/Nikon 18-55mm VR & 55-200mm VR Lenses14.2 Megapixels3" LCDLive ViewHD 1080p Video w/ Sound & Autofocus11-point Autofocus3 Frames per Second ShootingISO 100 to 3200 (Expand to 12800-Hi2)Self Cleaning SensorEXPEED 2, Image Processing EngineScene Recognition System7185Nikonhttp://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-345x345-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stock695.000.00695.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=huS6xZKDKaKMTMP71eI6DA%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D32983%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+SLR+w%2FNikon+18-55mm+VR+%26+55-200mm+VR+Lenses&dlprc=695.0&crn=&istrsmrc=0&isathrsl=0&AR=15&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=15&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS32983Nikon COOLPIX S203 Digital Camera10 Megapixel, Ultra-Compact Camera, 2.5 in. LCD Screen, 3x Optical Zoom, With Video Capability, Weight: 0.23 lb.With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.http://di1.shopping.com/images/pi/c4/ef/1b/95397883-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-500x499-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=20139.00139.00http://www.shopping.com/Nikon-Coolpix-S203/prices~linkin_id-7000610http://www.shopping.com/Nikon-Coolpix-S203/info~linkin_id-7000610Nikon Coolpix S203 Digital Camera (Red)With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.7185Nikonhttp://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFantastic prices with ease & comfort of Amazon.com!139.009.50139.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=sBd2JnIEPM-A_lBAM1RZgQ%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB002T964IM%2Fref%3Dasc_df_B002T964IM1751618%3Fsmid%3DA22UHVNXG98FAT%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB002T964IM&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S203+Digital+Camera+%28Red%29&dlprc=139.0&crn=&istrsmrc=0&isathrsl=0&AR=63&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=95397883&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=63&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=518&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB002T964IMNikon S3100 Digital Camera14.5 Megapixel, Compact Camera, 2.7 in. LCD Screen, 5x Optical Zoom, With High Definition Video, Weight: 0.23 lb.This digital camera features a wide-angle optical Zoom-NIKKOR glass lens that allows you to capture anything from landscapes to portraits to action shots. The high-definition movie mode with one-touch recording makes it easy to capture video clips.http://di1.shopping.com/images/pi/66/2d/33/106834268-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-507x387-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=312.00http://img.shopping.com/sc/pr/sdc_stars_sm_2.gifhttp://www.shopping.com/nikon-s3100/reviews~linkin_id-700061099.95134.95http://www.shopping.com/nikon-s3100/prices~linkin_id-7000610http://www.shopping.com/nikon-s3100/info~linkin_id-7000610CoolPix S3100 14 Megapixel Compact Digital Camera- RedNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - red7185Nikonhttp://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=UUyGoqV8r0-xrkn-rnGNbg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJ3Yx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmDAJeU1oyGG0GcBdhGwUGCAVqYF9SO0xSN1sZdmA7dmMdBQAJB24qX1NbQxI6AjA2ME5dVFULPDsGPFcQTTdaLTA6SR0OFlQvPAwMDxYcYlxIVkcoLTcCDA%3D%3D%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=CoolPix+S3100+14+Megapixel+Compact+Digital+Camera-+Red&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=28&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=28&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337013000COOLPIX S3100 PinkNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - pink7185Nikonhttp://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=X87AwXlW1dXoMXk4QQDToQ%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJxYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGsPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Pink&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=31&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=31&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337015000Nikon Coolpix S3100 14.0 MP Digital Camera - SilverNikon Coolpix S3100 14.0 MP Digital Camera - Silver7185Nikonhttp://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-270x270-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock109.970.00109.97http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=803&BEFID=7185&aon=%5E&MerchantID=475774&crawler_id=475774&dealId=nvFwnpfA4rlA1Dbksdsa0w%3D%3D&url=http%3A%2F%2Fwww.thewiz.com%2Fcatalog%2Fproduct.jsp%3FmodelNo%3DS3100SILVER%26gdftrk%3DgdfV2677_a_7c996_a_7c4049_a_7c26262&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S3100+14.0+MP+Digital+Camera+-+Silver&dlprc=109.97&crn=&istrsmrc=0&isathrsl=0&AR=33&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=33&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=797&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=TheWiz.comhttp://img.shopping.com/cctool/merch_logos/475774.gif877-542-69880http://img.shopping.com/sc/glb/flag/US.gifUS26262Nikon� COOLPIX� S3100 14MP Digital Camera (Silver)The Nikon COOLPIX S3100 is the easy way to share your life and stay connected.7185Nikonhttp://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock119.996.05119.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=5GtaN2NeryKwps-Se2l-4g%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D848064082%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C3%AF%C2%BF%C2%BD+COOLPIX%C3%AF%C2%BF%C2%BD+S3100+14MP+Digital+Camera+%28Silver%29&dlprc=119.99&crn=&istrsmrc=0&isathrsl=0&AR=37&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=37&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=509&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10101095COOLPIX S3100 YellowNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - yellow7185Nikonhttp://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=a43m0RXulX38zCnQjU59jw%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJwYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGoPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Yellow&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=38&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=38&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337014000Nikon D90 Digital Camera12.3 Megapixel, Point and Shoot Camera, 3 in. LCD Screen, With Video Capability, Weight: 1.36 lb.Untitled Document Nikon D90 SLR Digital Camera With 28-80mm 75-300mm Lens Kit The Nikon D90 SLR Digital Camera, with its 12.3-megapixel DX-format CMOS, 3" High resolution LCD display, Scene Recognition System, Picture Control, Active D-Lighting, and one-button Live View, provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera.http://di1.shopping.com/images/pi/52/fb/d3/99671132-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-499x255-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=475.00http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-270mm-Lens/reviews~linkin_id-7000610689.002299.00http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/info~linkin_id-7000610Nikon® D90 12.3MP Digital SLR Camera (Body Only)The Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock1015.996.051015.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=GU5JJkpUAxe5HujB7fkwAA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D851830266%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=1015.99&crn=&istrsmrc=0&isathrsl=0&AR=14&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=14&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10148659Nikon D90 SLR Digital Camera (Camera Body)The Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CCD 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera. In addition the D90 introduces the D-Movie mode allowing for the first time an interchangeable lens SLR camera that is capable of recording 720p HD movie clips. Availabilty: In Stock7185Nikonhttp://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockFree Shipping with Any Purchase!689.000.00900.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=XhURuSC-spBbTIDfo4qfzQ%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F169.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+Digital+Camera+%28Camera+Body%29&dlprc=689.0&crn=&istrsmrc=1&isathrsl=0&AR=16&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=16&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF169C5Nikon D90 SLR w/Nikon 18-105mm VR & 55-200mm VR Lenses12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock1189.000.001189.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=o0Px_XLWDbrxAYRy3rCmyQ%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30619%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+%26+55-200mm+VR+Lenses&dlprc=1189.0&crn=&istrsmrc=0&isathrsl=0&AR=20&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=20&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS30619Nikon D90 12.3 Megapixel Digital SLR Camera (Body Only)Fusing 12.3 megapixel image quality and a cinematic 24fps D-Movie Mode, the Nikon D90 exceeds the demands of passionate photographers. Coupled with Nikon's EXPEED image processing technologies and NIKKOR optics, breathtaking image fidelity is assured. Combined with fast 0.15ms power-up and split-second 65ms shooting lag, dramatic action and decisive moments are captured easily. Effective 4-frequency, ultrasonic sensor cleaning frees image degrading dust particles from the sensor's optical low pass filter.7185Nikonhttp://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stockFREE FEDEX 2-3 DAY DELIVERY899.950.00899.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=269&BEFID=7185&aon=%5E&MerchantID=9296&crawler_id=811558&dealId=4HgbWJSJ8ssgIf8B0MXIwA%3D%3D&url=http%3A%2F%2Fwww.pcnation.com%2Foptics-gallery%2Fdetails.asp%3Faffid%3D305%26item%3D2N145P&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3+Megapixel+Digital+SLR+Camera+%28Body+Only%29&dlprc=899.95&crn=&istrsmrc=1&isathrsl=0&AR=21&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=21&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=257&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=PCNationhttp://img.shopping.com/cctool/merch_logos/9296.gif800-470-707916224.43http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_pcnation_9689~MRD-9296~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS2N145PNikon D90 12.3MP Digital SLR Camera (Body Only)Fusing 12.3-megapixel image quality inherited from the award-winning D300 with groundbreaking features, the D90's breathtaking, low-noise image quality is further advanced with EXPEED image processing. Split-second shutter response and continuous shooting at up to 4.5 frames-per-second provide the power to capture fast action and precise moments perfectly, while Nikon's exclusive Scene Recognition System contributes to faster 11-area autofocus performance, finer white balance detection and more. The D90 delivers the control passionate photographers demand, utilizing comprehensive exposure functions and the intelligence of 3D Color Matrix Metering II. Stunning results come to life on a 3-inch 920,000-dot color LCD monitor, providing accurate image review, Live View composition and brilliant playback of the D90's cinematic-quality 24-fps HD D-Movie mode.7185Nikonhttp://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockFantastic prices with ease & comfort of Amazon.com!780.000.00780.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=UNDa3uMDZXOnvD_7sTILYg%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB001ET5U92%2Fref%3Dasc_df_B001ET5U921751618%3Fsmid%3DAHF4SYKP09WBH%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB001ET5U92&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=780.0&crn=&istrsmrc=0&isathrsl=0&AR=29&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=29&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=520&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB001ET5U92Nikon D90 Digital Camera with 18-105mm lens12.9 Megapixel, SLR Camera, 3 in. LCD Screen, 5.8x Optical Zoom, With Video Capability, Weight: 2.3 lb.Its 12.3 megapixel DX-format CMOS image sensor and EXPEED image processing system offer outstanding image quality across a wide ISO light sensitivity range. Live View mode lets you compose and shoot via the high-resolution 3-inch LCD monitor, and an advanced Scene Recognition System and autofocus performance help capture images with astounding accuracy. Movies can be shot in Motion JPEG format using the D-Movie function. The camera’s large image sensor ensures exceptional movie image quality and you can create dramatic effects by shooting with a wide range of interchangeable NIKKOR lenses, from wide-angle to macro to fisheye, or by adjusting the lens aperture and experimenting with depth-of-field. The D90 – designed to fuel your passion for photography.http://di1.shopping.com/images/pi/57/6a/4f/70621646-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-490x489-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5324.81http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-105mm-lens/reviews~linkin_id-7000610849.951599.95http://www.shopping.com/Nikon-D90-with-18-105mm-lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-105mm-lens/info~linkin_id-7000610Nikon D90 18-105mm VR LensThe Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CMOS 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View prov7185Nikonhttp://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-260x260-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock849.950.00849.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=419&BEFID=7185&aon=%5E1&MerchantID=9390&crawler_id=1905054&dealId=3o5e1VghgJPfhLvT1JFKTA%3D%3D&url=http%3A%2F%2Fwww.ajrichard.com%2FNikon-D90-18-105mm-VR-Lens%2Fp-292%3Frefid%3DShopping%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+18-105mm+VR+Lens&dlprc=849.95&crn=&istrsmrc=0&isathrsl=0&AR=2&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=2&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=425&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=AJRichardhttp://img.shopping.com/cctool/merch_logos/9390.gif1-888-871-125631244.48http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_ajrichard~MRD-9390~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS292Nikon D90 SLR w/Nikon 18-105mm VR Lens12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock909.000.00909.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=_lYWj_jbwfsSkfcwUcDuww%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30971%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+Lens&dlprc=909.0&crn=&istrsmrc=0&isathrsl=0&AR=3&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=3&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS3097125448/D90 12.3 Megapixel Digital Camera 18-105mm Zoom Lens w/ 3" Screen - BlackNikon D90 - Digital camera - SLR - 12.3 Mpix - Nikon AF-S DX 18-105mm lens - optical zoom: 5.8 x - supported memory: SD, SDHC7185Nikonhttp://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stockGet 30 days FREE SHIPPING w/ ShipVantage1199.008.201199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=1KCclCGuWvty2XKU9skadg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBRtFXpzYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcVlhCGGkPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=25448%2FD90+12.3+Megapixel+Digital+Camera+18-105mm+Zoom+Lens+w%2F+3%22+Screen+-+Black&dlprc=1199.0&crn=&istrsmrc=1&isathrsl=0&AR=4&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=4&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=586&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00353197000Nikon® D90 12.3MP Digital SLR with 18-105mm LensThe Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock1350.996.051350.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=3-VOSfVV5Jo7HlA4kJtanA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D982673361%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+with+18-105mm+Lens&dlprc=1350.99&crn=&istrsmrc=0&isathrsl=0&AR=5&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=5&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS11148905Nikon D90 Kit 12.3-megapixel Digital SLR with 18-105mm VR LensPhotographers, take your passion further!Now is the time for new creativity, and to rethink what a digital SLR camera can achieve. It's time for the D90, a camera with everything you would expect from Nikon's next-generation D-SLRs, and some unexpected surprises, as well. The stunning image quality is inherited from the D300, Nikon's DX-format flagship. The D90 also has Nikon's unmatched ergonomics and high performance, and now takes high-quality movies with beautifully cinematic results. The world of photography has changed, and with the D90 in your hands, it's time to make your own rules.AF-S DX NIKKOR 18-105mm f/3.5-5.6G ED VR LensWide-ratio 5.8x zoom Compact, versatile and ideal for a broad range of shooting situations, ranging from interiors and landscapes to beautiful portraits� a perfect everyday zoom. Nikon VR (Vibration Reduction) image stabilization Vibration Reduction is engineered specifically for each VR NIKKOR lens and enables handheld shooting at up to 3 shutter speeds slower than would7185Nikonhttp://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x232-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockShipping Included!1050.000.001199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=135&BEFID=7185&aon=%5E1&MerchantID=313162&crawler_id=313162&dealId=kQnB6rS4AjN5dx5h2_631g%3D%3D&url=http%3A%2F%2Fonecall.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1pZSxNoWHFwLx8GTAICa2ZeH1sPXTZLNzRpAh1HR0BxPQEGCBJNMhFHUElsFCFCVkVTTHAcBggEHQ4aHXNpGERGH3RQODsbAgdechJtbBt8fx8JAwhtZFAzJj1oGgIWCxRlNyFOUV9UUGIxBgo0T0IyTSYqJ0RWHw4QPCIBAAQXRGMDICg6TllZVBhh%26nAID%3D13736960&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+Kit+12.3-megapixel+Digital+SLR+with+18-105mm+VR+Lens&dlprc=1050.0&crn=&istrsmrc=1&isathrsl=0&AR=6&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=6&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=1&code=&acode=143&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=OneCallhttp://img.shopping.com/cctool/merch_logos/313162.gif1.800.398.07661804.44http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_onecall_9689~MRD-313162~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS92826Price rangehttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610$24 - $4012http://www.shopping.com/digital-cameras/nikon/products?minPrice=24&maxPrice=4012&linkin_id=7000610$4012 - $7999http://www.shopping.com/digital-cameras/nikon/products?minPrice=4012&maxPrice=7999&linkin_id=7000610Brandhttp://www.shopping.com/digital-cameras/nikon/products~all-9688-brand~MS-1?oq=nikon&linkin_id=7000610Nikonhttp://www.shopping.com/digital-cameras/nikon+brand-nikon/products~linkin_id-7000610Cranehttp://www.shopping.com/digital-cameras/nikon+9688-brand-crane/products~linkin_id-7000610Ikelitehttp://www.shopping.com/digital-cameras/nikon+ikelite/products~linkin_id-7000610Bowerhttp://www.shopping.com/digital-cameras/nikon+bower/products~linkin_id-7000610FUJIFILMhttp://www.shopping.com/digital-cameras/nikon+brand-fuji/products~linkin_id-7000610Storehttp://www.shopping.com/digital-cameras/nikon/products~all-store~MS-1?oq=nikon&linkin_id=7000610Amazon Marketplacehttp://www.shopping.com/digital-cameras/nikon+store-amazon-marketplace-9689/products~linkin_id-7000610Amazonhttp://www.shopping.com/digital-cameras/nikon+store-amazon/products~linkin_id-7000610Adoramahttp://www.shopping.com/digital-cameras/nikon+store-adorama/products~linkin_id-7000610J&R Music and Computer Worldhttp://www.shopping.com/digital-cameras/nikon+store-j-r-music-and-computer-world/products~linkin_id-7000610RytherCamera.comhttp://www.shopping.com/digital-cameras/nikon+store-rythercamera-com/products~linkin_id-7000610Resolutionhttp://www.shopping.com/digital-cameras/nikon/products~all-21885-resolution~MS-1?oq=nikon&linkin_id=7000610Under 4 Megapixelhttp://www.shopping.com/digital-cameras/nikon+under-4-megapixel/products~linkin_id-7000610At least 5 Megapixelhttp://www.shopping.com/digital-cameras/nikon+5-megapixel-digital-cameras/products~linkin_id-7000610At least 6 Megapixelhttp://www.shopping.com/digital-cameras/nikon+6-megapixel-digital-cameras/products~linkin_id-7000610At least 7 Megapixelhttp://www.shopping.com/digital-cameras/nikon+7-megapixel-digital-cameras/products~linkin_id-7000610At least 8 Megapixelhttp://www.shopping.com/digital-cameras/nikon+8-megapixel-digital-cameras/products~linkin_id-7000610Featureshttp://www.shopping.com/digital-cameras/nikon/products~all-32804-features~MS-1?oq=nikon&linkin_id=7000610Shockproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-shockproof/products~linkin_id-7000610Waterproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-waterproof/products~linkin_id-7000610Freezeproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-freezeproof/products~linkin_id-7000610Dust proofhttp://www.shopping.com/digital-cameras/nikon+32804-features-dust-proof/products~linkin_id-7000610Image Stabilizationhttp://www.shopping.com/digital-cameras/nikon+32804-features-image-stabilization/products~linkin_id-7000610hybriddigital camerag1sonycameracanonnikonkodak digital camerakodaksony cybershotkodak easyshare digital cameranikon coolpixolympuspink digital cameracanon powershot \ No newline at end of file diff --git a/build/node_modules/sax/examples/strict.dtd b/build/node_modules/sax/examples/strict.dtd deleted file mode 100644 index b27455943fc..00000000000 --- a/build/node_modules/sax/examples/strict.dtd +++ /dev/null @@ -1,870 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%HTMLlat1; - - -%HTMLsymbol; - - -%HTMLspecial; - - - - - - - - - - - - - -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/node_modules/sax/examples/test.html b/build/node_modules/sax/examples/test.html deleted file mode 100644 index 61f8f1ab91c..00000000000 --- a/build/node_modules/sax/examples/test.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - testing the parser - - - -

      hello - - - - diff --git a/build/node_modules/sax/examples/test.xml b/build/node_modules/sax/examples/test.xml deleted file mode 100644 index 801292d7f27..00000000000 --- a/build/node_modules/sax/examples/test.xml +++ /dev/null @@ -1,1254 +0,0 @@ - - -]> - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - - Some Text - - - - - - - are ok in here. ]]> - - Pre-Text & Inlined text Post-text. -  - - \ No newline at end of file diff --git a/build/node_modules/sax/lib/sax.js b/build/node_modules/sax/lib/sax.js deleted file mode 100644 index 77e20ae8715..00000000000 --- a/build/node_modules/sax/lib/sax.js +++ /dev/null @@ -1,1329 +0,0 @@ -// wrapper for non-node envs -;(function (sax) { - -sax.parser = function (strict, opt) { return new SAXParser(strict, opt) } -sax.SAXParser = SAXParser -sax.SAXStream = SAXStream -sax.createStream = createStream - -// When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns. -// When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)), -// since that's the earliest that a buffer overrun could occur. This way, checks are -// as rare as required, but as often as necessary to ensure never crossing this bound. -// Furthermore, buffers are only tested at most once per write(), so passing a very -// large string into write() might have undesirable effects, but this is manageable by -// the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme -// edge case, result in creating at most one complete copy of the string passed in. -// Set to Infinity to have unlimited buffers. -sax.MAX_BUFFER_LENGTH = 64 * 1024 - -var buffers = [ - "comment", "sgmlDecl", "textNode", "tagName", "doctype", - "procInstName", "procInstBody", "entity", "attribName", - "attribValue", "cdata", "script" -] - -sax.EVENTS = // for discoverability. - [ "text" - , "processinginstruction" - , "sgmldeclaration" - , "doctype" - , "comment" - , "attribute" - , "opentag" - , "closetag" - , "opencdata" - , "cdata" - , "closecdata" - , "error" - , "end" - , "ready" - , "script" - , "opennamespace" - , "closenamespace" - ] - -function SAXParser (strict, opt) { - if (!(this instanceof SAXParser)) return new SAXParser(strict, opt) - - var parser = this - clearBuffers(parser) - parser.q = parser.c = "" - parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH - parser.opt = opt || {} - parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags - parser.looseCase = parser.opt.lowercase ? "toLowerCase" : "toUpperCase" - parser.tags = [] - parser.closed = parser.closedRoot = parser.sawRoot = false - parser.tag = parser.error = null - parser.strict = !!strict - parser.noscript = !!(strict || parser.opt.noscript) - parser.state = S.BEGIN - parser.ENTITIES = Object.create(sax.ENTITIES) - parser.attribList = [] - - // namespaces form a prototype chain. - // it always points at the current tag, - // which protos to its parent tag. - if (parser.opt.xmlns) parser.ns = Object.create(rootNS) - - // mostly just for error reporting - parser.trackPosition = parser.opt.position !== false - if (parser.trackPosition) { - parser.position = parser.line = parser.column = 0 - } - emit(parser, "onready") -} - -if (!Object.create) Object.create = function (o) { - function f () { this.__proto__ = o } - f.prototype = o - return new f -} - -if (!Object.getPrototypeOf) Object.getPrototypeOf = function (o) { - return o.__proto__ -} - -if (!Object.keys) Object.keys = function (o) { - var a = [] - for (var i in o) if (o.hasOwnProperty(i)) a.push(i) - return a -} - -function checkBufferLength (parser) { - var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10) - , maxActual = 0 - for (var i = 0, l = buffers.length; i < l; i ++) { - var len = parser[buffers[i]].length - if (len > maxAllowed) { - // Text/cdata nodes can get big, and since they're buffered, - // we can get here under normal conditions. - // Avoid issues by emitting the text node now, - // so at least it won't get any bigger. - switch (buffers[i]) { - case "textNode": - closeText(parser) - break - - case "cdata": - emitNode(parser, "oncdata", parser.cdata) - parser.cdata = "" - break - - case "script": - emitNode(parser, "onscript", parser.script) - parser.script = "" - break - - default: - error(parser, "Max buffer length exceeded: "+buffers[i]) - } - } - maxActual = Math.max(maxActual, len) - } - // schedule the next check for the earliest possible buffer overrun. - parser.bufferCheckPosition = (sax.MAX_BUFFER_LENGTH - maxActual) - + parser.position -} - -function clearBuffers (parser) { - for (var i = 0, l = buffers.length; i < l; i ++) { - parser[buffers[i]] = "" - } -} - -SAXParser.prototype = - { end: function () { end(this) } - , write: write - , resume: function () { this.error = null; return this } - , close: function () { return this.write(null) } - } - -try { - var Stream = require("stream").Stream -} catch (ex) { - var Stream = function () {} -} - - -var streamWraps = sax.EVENTS.filter(function (ev) { - return ev !== "error" && ev !== "end" -}) - -function createStream (strict, opt) { - return new SAXStream(strict, opt) -} - -function SAXStream (strict, opt) { - if (!(this instanceof SAXStream)) return new SAXStream(strict, opt) - - Stream.apply(this) - - this._parser = new SAXParser(strict, opt) - this.writable = true - this.readable = true - - - var me = this - - this._parser.onend = function () { - me.emit("end") - } - - this._parser.onerror = function (er) { - me.emit("error", er) - - // if didn't throw, then means error was handled. - // go ahead and clear error, so we can write again. - me._parser.error = null - } - - this._decoder = null; - - streamWraps.forEach(function (ev) { - Object.defineProperty(me, "on" + ev, { - get: function () { return me._parser["on" + ev] }, - set: function (h) { - if (!h) { - me.removeAllListeners(ev) - return me._parser["on"+ev] = h - } - me.on(ev, h) - }, - enumerable: true, - configurable: false - }) - }) -} - -SAXStream.prototype = Object.create(Stream.prototype, - { constructor: { value: SAXStream } }) - -SAXStream.prototype.write = function (data) { - if (typeof Buffer === 'function' && - typeof Buffer.isBuffer === 'function' && - Buffer.isBuffer(data)) { - if (!this._decoder) { - var SD = require('string_decoder').StringDecoder - this._decoder = new SD('utf8') - } - data = this._decoder.write(data); - } - - this._parser.write(data.toString()) - this.emit("data", data) - return true -} - -SAXStream.prototype.end = function (chunk) { - if (chunk && chunk.length) this.write(chunk) - else if (this.leftovers) this._parser.write(this.leftovers.toString()) - this._parser.end() - return true -} - -SAXStream.prototype.on = function (ev, handler) { - var me = this - if (!me._parser["on"+ev] && streamWraps.indexOf(ev) !== -1) { - me._parser["on"+ev] = function () { - var args = arguments.length === 1 ? [arguments[0]] - : Array.apply(null, arguments) - args.splice(0, 0, ev) - me.emit.apply(me, args) - } - } - - return Stream.prototype.on.call(me, ev, handler) -} - - - -// character classes and tokens -var whitespace = "\r\n\t " - // this really needs to be replaced with character classes. - // XML allows all manner of ridiculous numbers and digits. - , number = "0124356789" - , letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - // (Letter | "_" | ":") - , quote = "'\"" - , entity = number+letter+"#" - , attribEnd = whitespace + ">" - , CDATA = "[CDATA[" - , DOCTYPE = "DOCTYPE" - , XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace" - , XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/" - , rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE } - -// turn all the string character sets into character class objects. -whitespace = charClass(whitespace) -number = charClass(number) -letter = charClass(letter) - -// http://www.w3.org/TR/REC-xml/#NT-NameStartChar -// This implementation works on strings, a single character at a time -// as such, it cannot ever support astral-plane characters (10000-EFFFF) -// without a significant breaking change to either this parser, or the -// JavaScript language. Implementation of an emoji-capable xml parser -// is left as an exercise for the reader. -var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ - -var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/ - -quote = charClass(quote) -entity = charClass(entity) -attribEnd = charClass(attribEnd) - -function charClass (str) { - return str.split("").reduce(function (s, c) { - s[c] = true - return s - }, {}) -} - -function isRegExp (c) { - return Object.prototype.toString.call(c) === '[object RegExp]' -} - -function is (charclass, c) { - return isRegExp(charclass) ? !!c.match(charclass) : charclass[c] -} - -function not (charclass, c) { - return !is(charclass, c) -} - -var S = 0 -sax.STATE = -{ BEGIN : S++ -, TEXT : S++ // general stuff -, TEXT_ENTITY : S++ // & and such. -, OPEN_WAKA : S++ // < -, SGML_DECL : S++ // -, SCRIPT : S++ // " - , expect : - [ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] - , [ "opentag", { name: "script", attributes: {}, isSelfClosing: false } ] - , [ "text", "hello world" ] - , [ "closetag", "script" ] - , [ "closetag", "xml" ] - ] - , strict : false - , opt : { lowercasetags: true, noscript: true } - } - ) - -require(__dirname).test - ( { xml : "" - , expect : - [ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] - , [ "opentag", { name: "script", attributes: {}, isSelfClosing: false } ] - , [ "opencdata", undefined ] - , [ "cdata", "hello world" ] - , [ "closecdata", undefined ] - , [ "closetag", "script" ] - , [ "closetag", "xml" ] - ] - , strict : false - , opt : { lowercasetags: true, noscript: true } - } - ) - diff --git a/build/node_modules/sax/test/issue-84.js b/build/node_modules/sax/test/issue-84.js deleted file mode 100644 index 0e7ee699abc..00000000000 --- a/build/node_modules/sax/test/issue-84.js +++ /dev/null @@ -1,13 +0,0 @@ -// https://github.com/isaacs/sax-js/issues/49 -require(__dirname).test - ( { xml : "body" - , expect : - [ [ "processinginstruction", { name: "has", body: "unbalanced \"quotes" } ], - [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] - , [ "text", "body" ] - , [ "closetag", "xml" ] - ] - , strict : false - , opt : { lowercasetags: true, noscript: true } - } - ) diff --git a/build/node_modules/sax/test/parser-position.js b/build/node_modules/sax/test/parser-position.js deleted file mode 100644 index e4a68b1e960..00000000000 --- a/build/node_modules/sax/test/parser-position.js +++ /dev/null @@ -1,28 +0,0 @@ -var sax = require("../lib/sax"), - assert = require("assert") - -function testPosition(chunks, expectedEvents) { - var parser = sax.parser(); - expectedEvents.forEach(function(expectation) { - parser['on' + expectation[0]] = function() { - for (var prop in expectation[1]) { - assert.equal(parser[prop], expectation[1][prop]); - } - } - }); - chunks.forEach(function(chunk) { - parser.write(chunk); - }); -}; - -testPosition(['

      abcdefgh
      '], - [ ['opentag', { position: 5, startTagPosition: 1 }] - , ['text', { position: 19, startTagPosition: 14 }] - , ['closetag', { position: 19, startTagPosition: 14 }] - ]); - -testPosition(['
      abcde','fgh
      '], - [ ['opentag', { position: 5, startTagPosition: 1 }] - , ['text', { position: 19, startTagPosition: 14 }] - , ['closetag', { position: 19, startTagPosition: 14 }] - ]); diff --git a/build/node_modules/sax/test/script-close-better.js b/build/node_modules/sax/test/script-close-better.js deleted file mode 100644 index f4887b9a053..00000000000 --- a/build/node_modules/sax/test/script-close-better.js +++ /dev/null @@ -1,12 +0,0 @@ -require(__dirname).test({ - xml : "", - expect : [ - ["opentag", {"name": "HTML","attributes": {}, isSelfClosing: false}], - ["opentag", {"name": "HEAD","attributes": {}, isSelfClosing: false}], - ["opentag", {"name": "SCRIPT","attributes": {}, isSelfClosing: false}], - ["script", "'
      foo
      ", - expect : [ - ["opentag", {"name": "HTML","attributes": {}, "isSelfClosing": false}], - ["opentag", {"name": "HEAD","attributes": {}, "isSelfClosing": false}], - ["opentag", {"name": "SCRIPT","attributes": {}, "isSelfClosing": false}], - ["script", "if (1 < 0) { console.log('elo there'); }"], - ["closetag", "SCRIPT"], - ["closetag", "HEAD"], - ["closetag", "HTML"] - ] -}); diff --git a/build/node_modules/sax/test/self-closing-child-strict.js b/build/node_modules/sax/test/self-closing-child-strict.js deleted file mode 100644 index 3d6e98520d8..00000000000 --- a/build/node_modules/sax/test/self-closing-child-strict.js +++ /dev/null @@ -1,44 +0,0 @@ - -require(__dirname).test({ - xml : - ""+ - "" + - "" + - "" + - "" + - "=(|)" + - "" + - "", - expect : [ - ["opentag", { - "name": "root", - "attributes": {}, - "isSelfClosing": false - }], - ["opentag", { - "name": "child", - "attributes": {}, - "isSelfClosing": false - }], - ["opentag", { - "name": "haha", - "attributes": {}, - "isSelfClosing": true - }], - ["closetag", "haha"], - ["closetag", "child"], - ["opentag", { - "name": "monkey", - "attributes": {}, - "isSelfClosing": false - }], - ["text", "=(|)"], - ["closetag", "monkey"], - ["closetag", "root"], - ["end"], - ["ready"] - ], - strict : true, - opt : {} -}); - diff --git a/build/node_modules/sax/test/self-closing-child.js b/build/node_modules/sax/test/self-closing-child.js deleted file mode 100644 index f31c36646cc..00000000000 --- a/build/node_modules/sax/test/self-closing-child.js +++ /dev/null @@ -1,44 +0,0 @@ - -require(__dirname).test({ - xml : - ""+ - "" + - "" + - "" + - "" + - "=(|)" + - "" + - "", - expect : [ - ["opentag", { - "name": "ROOT", - "attributes": {}, - "isSelfClosing": false - }], - ["opentag", { - "name": "CHILD", - "attributes": {}, - "isSelfClosing": false - }], - ["opentag", { - "name": "HAHA", - "attributes": {}, - "isSelfClosing": true - }], - ["closetag", "HAHA"], - ["closetag", "CHILD"], - ["opentag", { - "name": "MONKEY", - "attributes": {}, - "isSelfClosing": false - }], - ["text", "=(|)"], - ["closetag", "MONKEY"], - ["closetag", "ROOT"], - ["end"], - ["ready"] - ], - strict : false, - opt : {} -}); - diff --git a/build/node_modules/sax/test/self-closing-tag.js b/build/node_modules/sax/test/self-closing-tag.js deleted file mode 100644 index d1d8b7c828c..00000000000 --- a/build/node_modules/sax/test/self-closing-tag.js +++ /dev/null @@ -1,25 +0,0 @@ - -require(__dirname).test({ - xml : - " "+ - " "+ - " "+ - " "+ - "=(|) "+ - ""+ - " ", - expect : [ - ["opentag", {name:"ROOT", attributes:{}, isSelfClosing: false}], - ["opentag", {name:"HAHA", attributes:{}, isSelfClosing: true}], - ["closetag", "HAHA"], - ["opentag", {name:"HAHA", attributes:{}, isSelfClosing: true}], - ["closetag", "HAHA"], - // ["opentag", {name:"HAHA", attributes:{}}], - // ["closetag", "HAHA"], - ["opentag", {name:"MONKEY", attributes:{}, isSelfClosing: false}], - ["text", "=(|)"], - ["closetag", "MONKEY"], - ["closetag", "ROOT"] - ], - opt : { trim : true } -}); \ No newline at end of file diff --git a/build/node_modules/sax/test/stray-ending.js b/build/node_modules/sax/test/stray-ending.js deleted file mode 100644 index bec467b2267..00000000000 --- a/build/node_modules/sax/test/stray-ending.js +++ /dev/null @@ -1,17 +0,0 @@ -// stray ending tags should just be ignored in non-strict mode. -// https://github.com/isaacs/sax-js/issues/32 -require(__dirname).test - ( { xml : - "" - , expect : - [ [ "opentag", { name: "A", attributes: {}, isSelfClosing: false } ] - , [ "opentag", { name: "B", attributes: {}, isSelfClosing: false } ] - , [ "text", "" ] - , [ "closetag", "B" ] - , [ "closetag", "A" ] - ] - , strict : false - , opt : {} - } - ) - diff --git a/build/node_modules/sax/test/trailing-attribute-no-value.js b/build/node_modules/sax/test/trailing-attribute-no-value.js deleted file mode 100644 index 222837f8f9d..00000000000 --- a/build/node_modules/sax/test/trailing-attribute-no-value.js +++ /dev/null @@ -1,10 +0,0 @@ - -require(__dirname).test({ - xml : - "", - expect : [ - ["attribute", {name:"ATTRIB", value:"attrib"}], - ["opentag", {name:"ROOT", attributes:{"ATTRIB":"attrib"}, isSelfClosing: false}] - ], - opt : { trim : true } -}); diff --git a/build/node_modules/sax/test/trailing-non-whitespace.js b/build/node_modules/sax/test/trailing-non-whitespace.js deleted file mode 100644 index 619578b1773..00000000000 --- a/build/node_modules/sax/test/trailing-non-whitespace.js +++ /dev/null @@ -1,18 +0,0 @@ - -require(__dirname).test({ - xml : "Welcome, to monkey land", - expect : [ - ["opentag", { - "name": "SPAN", - "attributes": {}, - isSelfClosing: false - }], - ["text", "Welcome,"], - ["closetag", "SPAN"], - ["text", " to monkey land"], - ["end"], - ["ready"] - ], - strict : false, - opt : {} -}); diff --git a/build/node_modules/sax/test/unclosed-root.js b/build/node_modules/sax/test/unclosed-root.js deleted file mode 100644 index f4eeac61b31..00000000000 --- a/build/node_modules/sax/test/unclosed-root.js +++ /dev/null @@ -1,11 +0,0 @@ -require(__dirname).test - ( { xml : "" - - , expect : - [ [ "opentag", { name: "root", attributes: {}, isSelfClosing: false } ] - , [ "error", "Unclosed root tag\nLine: 0\nColumn: 6\nChar: " ] - ] - , strict : true - , opt : {} - } - ) diff --git a/build/node_modules/sax/test/unquoted.js b/build/node_modules/sax/test/unquoted.js deleted file mode 100644 index b3a9a8122e8..00000000000 --- a/build/node_modules/sax/test/unquoted.js +++ /dev/null @@ -1,18 +0,0 @@ -// unquoted attributes should be ok in non-strict mode -// https://github.com/isaacs/sax-js/issues/31 -require(__dirname).test - ( { xml : - "" - , expect : - [ [ "attribute", { name: "CLASS", value: "test" } ] - , [ "attribute", { name: "HELLO", value: "world" } ] - , [ "opentag", { name: "SPAN", - attributes: { CLASS: "test", HELLO: "world" }, - isSelfClosing: false } ] - , [ "closetag", "SPAN" ] - ] - , strict : false - , opt : {} - } - ) - diff --git a/build/node_modules/sax/test/utf8-split.js b/build/node_modules/sax/test/utf8-split.js deleted file mode 100644 index e22bc100443..00000000000 --- a/build/node_modules/sax/test/utf8-split.js +++ /dev/null @@ -1,32 +0,0 @@ -var assert = require('assert') -var saxStream = require('../lib/sax').createStream() - -var b = new Buffer('误') - -saxStream.on('text', function(text) { - assert.equal(text, b.toString()) -}) - -saxStream.write(new Buffer('')) -saxStream.write(b.slice(0, 1)) -saxStream.write(b.slice(1)) -saxStream.write(new Buffer('')) -saxStream.write(b.slice(0, 2)) -saxStream.write(b.slice(2)) -saxStream.write(new Buffer('')) -saxStream.write(b) -saxStream.write(new Buffer('')) -saxStream.write(Buffer.concat([new Buffer(''), b.slice(0, 1)])) -saxStream.end(Buffer.concat([b.slice(1), new Buffer('')])) - -var saxStream2 = require('../lib/sax').createStream() - -saxStream2.on('text', function(text) { - assert.equal(text, '�') -}); - -saxStream2.write(new Buffer('')); -saxStream2.write(new Buffer([0xC0])); -saxStream2.write(new Buffer('')); -saxStream2.write(Buffer.concat([new Buffer(''), b.slice(0,1)])); -saxStream2.end(); diff --git a/build/node_modules/sax/test/xmlns-issue-41.js b/build/node_modules/sax/test/xmlns-issue-41.js deleted file mode 100644 index 17ab45a0fb7..00000000000 --- a/build/node_modules/sax/test/xmlns-issue-41.js +++ /dev/null @@ -1,68 +0,0 @@ -var t = require(__dirname) - - , xmls = // should be the same both ways. - [ "" - , "" ] - - , ex1 = - [ [ "opennamespace" - , { prefix: "a" - , uri: "http://ATTRIBUTE" - } - ] - , [ "attribute" - , { name: "xmlns:a" - , value: "http://ATTRIBUTE" - , prefix: "xmlns" - , local: "a" - , uri: "http://www.w3.org/2000/xmlns/" - } - ] - , [ "attribute" - , { name: "a:attr" - , local: "attr" - , prefix: "a" - , uri: "http://ATTRIBUTE" - , value: "value" - } - ] - , [ "opentag" - , { name: "parent" - , uri: "" - , prefix: "" - , local: "parent" - , attributes: - { "a:attr": - { name: "a:attr" - , local: "attr" - , prefix: "a" - , uri: "http://ATTRIBUTE" - , value: "value" - } - , "xmlns:a": - { name: "xmlns:a" - , local: "a" - , prefix: "xmlns" - , uri: "http://www.w3.org/2000/xmlns/" - , value: "http://ATTRIBUTE" - } - } - , ns: {"a": "http://ATTRIBUTE"} - , isSelfClosing: true - } - ] - , ["closetag", "parent"] - , ["closenamespace", { prefix: "a", uri: "http://ATTRIBUTE" }] - ] - - // swap the order of elements 2 and 1 - , ex2 = [ex1[0], ex1[2], ex1[1]].concat(ex1.slice(3)) - , expected = [ex1, ex2] - -xmls.forEach(function (x, i) { - t.test({ xml: x - , expect: expected[i] - , strict: true - , opt: { xmlns: true } - }) -}) diff --git a/build/node_modules/sax/test/xmlns-rebinding.js b/build/node_modules/sax/test/xmlns-rebinding.js deleted file mode 100644 index 07e04255390..00000000000 --- a/build/node_modules/sax/test/xmlns-rebinding.js +++ /dev/null @@ -1,63 +0,0 @@ - -require(__dirname).test - ( { xml : - ""+ - ""+ - ""+ - ""+ - ""+ - "" - - , expect : - [ [ "opennamespace", { prefix: "x", uri: "x1" } ] - , [ "opennamespace", { prefix: "y", uri: "y1" } ] - , [ "attribute", { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] - , [ "attribute", { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } ] - , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] - , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] - , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", - attributes: { "xmlns:x": { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } - , "xmlns:y": { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } - , "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } - , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, - ns: { x: 'x1', y: 'y1' }, - isSelfClosing: false } ] - - , [ "opennamespace", { prefix: "x", uri: "x2" } ] - , [ "attribute", { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] - , [ "opentag", { name: "rebind", uri: "", prefix: "", local: "rebind", - attributes: { "xmlns:x": { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } }, - ns: { x: 'x2' }, - isSelfClosing: false } ] - - , [ "attribute", { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } ] - , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] - , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", - attributes: { "x:a": { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } - , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, - ns: { x: 'x2' }, - isSelfClosing: true } ] - - , [ "closetag", "check" ] - - , [ "closetag", "rebind" ] - , [ "closenamespace", { prefix: "x", uri: "x2" } ] - - , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] - , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] - , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", - attributes: { "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } - , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, - ns: { x: 'x1', y: 'y1' }, - isSelfClosing: true } ] - , [ "closetag", "check" ] - - , [ "closetag", "root" ] - , [ "closenamespace", { prefix: "x", uri: "x1" } ] - , [ "closenamespace", { prefix: "y", uri: "y1" } ] - ] - , strict : true - , opt : { xmlns: true } - } - ) - diff --git a/build/node_modules/sax/test/xmlns-strict.js b/build/node_modules/sax/test/xmlns-strict.js deleted file mode 100644 index b5e3e518868..00000000000 --- a/build/node_modules/sax/test/xmlns-strict.js +++ /dev/null @@ -1,74 +0,0 @@ - -require(__dirname).test - ( { xml : - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - "" - - , expect : - [ [ "opentag", { name: "root", prefix: "", local: "root", uri: "", - attributes: {}, ns: {}, isSelfClosing: false } ] - - , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] - , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", - attributes: { "attr": { name: "attr", value: "normal", uri: "", prefix: "", local: "attr", uri: "" } }, - ns: {}, isSelfClosing: true } ] - , [ "closetag", "plain" ] - - , [ "opennamespace", { prefix: "", uri: "uri:default" } ] - - , [ "attribute", { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } ] - , [ "opentag", { name: "ns1", prefix: "", local: "ns1", uri: "uri:default", - attributes: { "xmlns": { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } }, - ns: { "": "uri:default" }, isSelfClosing: false } ] - - , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] - , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "uri:default", ns: { '': 'uri:default' }, - attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } }, - isSelfClosing: true } ] - , [ "closetag", "plain" ] - - , [ "closetag", "ns1" ] - - , [ "closenamespace", { prefix: "", uri: "uri:default" } ] - - , [ "opennamespace", { prefix: "a", uri: "uri:nsa" } ] - - , [ "attribute", { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } ] - - , [ "opentag", { name: "ns2", prefix: "", local: "ns2", uri: "", - attributes: { "xmlns:a": { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } }, - ns: { a: "uri:nsa" }, isSelfClosing: false } ] - - , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] - , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", - attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } }, - ns: { a: 'uri:nsa' }, - isSelfClosing: true } ] - , [ "closetag", "plain" ] - - , [ "attribute", { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } ] - , [ "opentag", { name: "a:ns", prefix: "a", local: "ns", uri: "uri:nsa", - attributes: { "a:attr": { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } }, - ns: { a: 'uri:nsa' }, - isSelfClosing: true } ] - , [ "closetag", "a:ns" ] - - , [ "closetag", "ns2" ] - - , [ "closenamespace", { prefix: "a", uri: "uri:nsa" } ] - - , [ "closetag", "root" ] - ] - , strict : true - , opt : { xmlns: true } - } - ) - diff --git a/build/node_modules/sax/test/xmlns-unbound-element.js b/build/node_modules/sax/test/xmlns-unbound-element.js deleted file mode 100644 index 9d031a2bdad..00000000000 --- a/build/node_modules/sax/test/xmlns-unbound-element.js +++ /dev/null @@ -1,33 +0,0 @@ -require(__dirname).test( - { strict : true - , opt : { xmlns: true } - , expect : - [ [ "error", "Unbound namespace prefix: \"unbound:root\"\nLine: 0\nColumn: 15\nChar: >"] - , [ "opentag", { name: "unbound:root", uri: "unbound", prefix: "unbound", local: "root" - , attributes: {}, ns: {}, isSelfClosing: true } ] - , [ "closetag", "unbound:root" ] - ] - } -).write(""); - -require(__dirname).test( - { strict : true - , opt : { xmlns: true } - , expect : - [ [ "opennamespace", { prefix: "unbound", uri: "someuri" } ] - , [ "attribute", { name: 'xmlns:unbound', value: 'someuri' - , prefix: 'xmlns', local: 'unbound' - , uri: 'http://www.w3.org/2000/xmlns/' } ] - , [ "opentag", { name: "unbound:root", uri: "someuri", prefix: "unbound", local: "root" - , attributes: { 'xmlns:unbound': { - name: 'xmlns:unbound' - , value: 'someuri' - , prefix: 'xmlns' - , local: 'unbound' - , uri: 'http://www.w3.org/2000/xmlns/' } } - , ns: { "unbound": "someuri" }, isSelfClosing: true } ] - , [ "closetag", "unbound:root" ] - , [ "closenamespace", { prefix: 'unbound', uri: 'someuri' }] - ] - } -).write(""); diff --git a/build/node_modules/sax/test/xmlns-unbound.js b/build/node_modules/sax/test/xmlns-unbound.js deleted file mode 100644 index b740e26124d..00000000000 --- a/build/node_modules/sax/test/xmlns-unbound.js +++ /dev/null @@ -1,15 +0,0 @@ - -require(__dirname).test( - { strict : true - , opt : { xmlns: true } - , expect : - [ ["error", "Unbound namespace prefix: \"unbound\"\nLine: 0\nColumn: 28\nChar: >"] - - , [ "attribute", { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } ] - , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", - attributes: { "unbound:attr": { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } }, - ns: {}, isSelfClosing: true } ] - , [ "closetag", "root" ] - ] - } -).write("") diff --git a/build/node_modules/sax/test/xmlns-xml-default-ns.js b/build/node_modules/sax/test/xmlns-xml-default-ns.js deleted file mode 100644 index b1984d25509..00000000000 --- a/build/node_modules/sax/test/xmlns-xml-default-ns.js +++ /dev/null @@ -1,31 +0,0 @@ -var xmlns_attr = -{ - name: "xmlns", value: "http://foo", prefix: "xmlns", - local: "", uri : "http://www.w3.org/2000/xmlns/" -}; - -var attr_attr = -{ - name: "attr", value: "bar", prefix: "", - local : "attr", uri : "" -}; - - -require(__dirname).test - ( { xml : - "" - , expect : - [ [ "opennamespace", { prefix: "", uri: "http://foo" } ] - , [ "attribute", xmlns_attr ] - , [ "attribute", attr_attr ] - , [ "opentag", { name: "elm", prefix: "", local: "elm", uri : "http://foo", - ns : { "" : "http://foo" }, - attributes: { xmlns: xmlns_attr, attr: attr_attr }, - isSelfClosing: true } ] - , [ "closetag", "elm" ] - , [ "closenamespace", { prefix: "", uri: "http://foo"} ] - ] - , strict : true - , opt : {xmlns: true} - } - ) diff --git a/build/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js b/build/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js deleted file mode 100644 index e41f21875e4..00000000000 --- a/build/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js +++ /dev/null @@ -1,36 +0,0 @@ -require(__dirname).test( - { xml : "" - , expect : - [ [ "attribute" - , { name: "xml:lang" - , local: "lang" - , prefix: "xml" - , uri: "http://www.w3.org/XML/1998/namespace" - , value: "en" - } - ] - , [ "opentag" - , { name: "root" - , uri: "" - , prefix: "" - , local: "root" - , attributes: - { "xml:lang": - { name: "xml:lang" - , local: "lang" - , prefix: "xml" - , uri: "http://www.w3.org/XML/1998/namespace" - , value: "en" - } - } - , ns: {} - , isSelfClosing: true - } - ] - , ["closetag", "root"] - ] - , strict : true - , opt : { xmlns: true } - } -) - diff --git a/build/node_modules/sax/test/xmlns-xml-default-prefix.js b/build/node_modules/sax/test/xmlns-xml-default-prefix.js deleted file mode 100644 index a85b4787f21..00000000000 --- a/build/node_modules/sax/test/xmlns-xml-default-prefix.js +++ /dev/null @@ -1,21 +0,0 @@ -require(__dirname).test( - { xml : "" - , expect : - [ - [ "opentag" - , { name: "xml:root" - , uri: "http://www.w3.org/XML/1998/namespace" - , prefix: "xml" - , local: "root" - , attributes: {} - , ns: {} - , isSelfClosing: true - } - ] - , ["closetag", "xml:root"] - ] - , strict : true - , opt : { xmlns: true } - } -) - diff --git a/build/node_modules/sax/test/xmlns-xml-default-redefine.js b/build/node_modules/sax/test/xmlns-xml-default-redefine.js deleted file mode 100644 index d35d5a0cbe2..00000000000 --- a/build/node_modules/sax/test/xmlns-xml-default-redefine.js +++ /dev/null @@ -1,41 +0,0 @@ -require(__dirname).test( - { xml : "" - , expect : - [ ["error" - , "xml: prefix must be bound to http://www.w3.org/XML/1998/namespace\n" - + "Actual: ERROR\n" - + "Line: 0\nColumn: 27\nChar: '" - ] - , [ "attribute" - , { name: "xmlns:xml" - , local: "xml" - , prefix: "xmlns" - , uri: "http://www.w3.org/2000/xmlns/" - , value: "ERROR" - } - ] - , [ "opentag" - , { name: "xml:root" - , uri: "http://www.w3.org/XML/1998/namespace" - , prefix: "xml" - , local: "root" - , attributes: - { "xmlns:xml": - { name: "xmlns:xml" - , local: "xml" - , prefix: "xmlns" - , uri: "http://www.w3.org/2000/xmlns/" - , value: "ERROR" - } - } - , ns: {} - , isSelfClosing: true - } - ] - , ["closetag", "xml:root"] - ] - , strict : true - , opt : { xmlns: true } - } -) - diff --git a/build/vswhere.exe b/build/vswhere.exe new file mode 100644 index 00000000000..1731aa6ed27 Binary files /dev/null and b/build/vswhere.exe differ diff --git a/docs/2014/release-notes.md b/docs/2014/release-notes.md deleted file mode 100644 index ce1b02ef3a5..00000000000 --- a/docs/2014/release-notes.md +++ /dev/null @@ -1,5670 +0,0 @@ -## [2015 Release Notes](https://github.com/ServiceStack/ServiceStack/blob/master/docs/2015/release-notes.md) - ---- - -# v4.0.35 Release Notes - -We're ending 2014 with a short release cycle primarily focused on a polished and fixes Release, ready for before everyone gets back at work - re-energized for a Happy New 2015 work year :) - -## New [TechStacks](http://techstacks.io) LiveDemo! - -We've been gradually refining our modern [AngularJS](https://github.com/ServiceStack/ServiceStackVS/blob/master/angular-spa.md) and [React](https://github.com/ServiceStackApps/Chat-React) Single Page App VS.NET templates which represents what we believe to be the optimal formula for developing future .NET-based JS Apps - utilizing a best-of-breed node.js, npm, bower, grunt/gulp build system. - -To this end we're developing new Single Page Apps alongside to further refine these VS.NET templates and demonstrate their potential in using the pre-configured Grunt tasks to manage the full iterative client/server building, optimization and deployment dev workflows. - -We're happy to be able to preview the latest Live Demo built on the **AngularJS App** VS.NET template in: http://techstacks.io - -[![TechStacks](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/livedemos/techstacks/screenshots/techstacks.png)](http://techstacks.io) - -TechStacks is a modern [AngularJS](https://angularjs.org/) CRUD App that lets you Browse and Add Technology Stacks of popular StartUps. After Signing in you can add your own TechStacks and favorite technologies to create a personalized custom 'feed' to view Websites and Apps built with your favorite programming languages and technologies. - -TechStacks is based on a [Bootstrap template](http://getbootstrap.com) with client-side features: - - - HTML5 Routing to enable pretty urls, also supports full page reloads and back button support - - Same Services supporting both human-readable Slugs or int primary keys - - Responsive design supporting iPad Landscape and Portrait modes - - Preloading and background data fetching to reduce flicker and maximize responsiveness - - [Disqus](https://disqus.com/) commenting system - - [Chosen](http://harvesthq.github.io/chosen/) for UX-friendly multi combo boxes - -and some of TechStacks back-end features include: - - - [Twitter and GitHub OAuth Providers](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization) - - Substitutable [OrmLite](https://github.com/ServiceStack/ServiceStack.OrmLite) RDBMS [PostgreSQL and Sqlite](https://github.com/ServiceStackApps/TechStacks/blob/875e78910e43d2230f0925b71d5990497216511e/src/TechStacks/TechStacks/AppHost.cs#L49-L56) back-ends - - [Auto Query](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query) for automatic services of RDBMS tables - - [RDBMS Sessions and In Memory Caching](https://github.com/ServiceStack/ServiceStack/wiki/Caching) - - [Smart Razor Views](http://razor.servicestack.net) - - [Fluent Validation](https://github.com/ServiceStack/ServiceStack/wiki/Validation) - -TechStacks is a good example of the experience you can get running a packaged ServiceStack/AngularJS App on modest hardware - [techstacks.io](http://techstacks.io) is currently running on a single **m1.small** AWS EC2 instance and **db.t1.micro** RDS PostgreSQL instance that hosts all [Live Demos](https://github.com/ServiceStackApps/LiveDemos). - - - -### [View the Source](https://github.com/ServiceStackApps/TechStacks) - -Checkout the [Source Code for TechStacks](https://github.com/ServiceStackApps/TechStacks) for the full details to see how it's built. The project also includes an [example client layout](https://github.com/ServiceStackApps/TechStacks/tree/master/src/TechStacks/TechStacks/js) for structuring larger AngularJS projects in an extensible layout files and folder structure: - -### HTML5 Routing and Full-page reloads - -One of the disadvantages of Single Page Apps is having to resort to hash-style `#!` url suffix hacks to prevent JavaScript apps from making full-page reloads. By utilizing [AngularJS's HTML5 mode](https://docs.angularjs.org/guide/$location#html5-mode) we can take advantage of modern browsers support for HTML5 History API to retain the optimal pretty urls (we'd have if this were a server generated website) whilst still retaining the responsiveness of JS Apps which are able to load just the minimum content required, i.e. instead of waiting for the full page rendering of Server generated pages and their resource dependencies to be loaded again. - -ServiceStack has great support for these modern-style SPA's which lets you specify a fallback handler for **HTML page requests** with un-matched routes to return the same `/default.cshtml` home page so AngularJS is able to handle the request and perform the same client-side routing it would've had the url been navigated from within the App - using the [AppHost configuration below](https://github.com/ServiceStackApps/TechStacks/blob/41efa5d8add1c4b0bdd449d6507878f2c8387bbc/src/TechStacks/TechStacks/AppHost.cs#L41): - -```csharp -base.CustomErrorHttpHandlers[HttpStatusCode.NotFound] = new RazorHandler("/default.cshtml"); -``` - -This lets you re-use pretty client-side routes like: - - - http://techstacks.io/tech/servicestack - -And allow deep-link support for full round-trip requests (i.e. outside of AngularJS) - where since `/tech/servicestack` doesn't match any custom Server routes, ServiceStack instead responds with the above `/default.cshtml` Razor View. At which point AngularJS takes over and navigates to the internal route mapping that matches `/tech/servicestack`. - -> To get the latest AngularJS and React.js App templates download the latest [ServiceStackVS VS.NET Extension](https://visualstudiogallery.msdn.microsoft.com/5bd40817-0986-444d-a77d-482e43a48da7) - -## ServerEvents now supports Multiple Channels per subscription - -To ensure each Client only ever needs 1 ServerEvents subscription, subscriptions now support subscribing to multiple channels. Multi Channel Support is fully implemented in all [JavaScript ServerEvents](https://github.com/ServiceStack/ServiceStack/wiki/JavaScript-Server-Events-Client) and [C#/.NET ServerEvents](https://github.com/ServiceStack/ServiceStack/wiki/C%23-Server-Events-Client) Clients as well as both [back-end InMemory](https://github.com/ServiceStack/ServiceStack/wiki/Server-Events) and [Redis ServerEvents](https://github.com/ServiceStack/ServiceStack/wiki/Redis-Server-Events) providers. - -The API remains similar to the previous Single Channel Routes where in addition to subscribing to a single channel: - - /event-stream?channel=Home - -Clients can also subscribe to multiple channels: - - /event-stream?channel=Home,Work,Play - -> If preferred, clients can also use the more readable **?channels=** plural variable name - -And the above example again using the [C#/.NET ServerEvents Client](https://github.com/ServiceStack/ServiceStack/wiki/C%23-Server-Events-Client): - -```csharp -var client = new ServerEventsClient(BaseUri, "Home"); - -var client = new ServerEventsClient(BaseUri, "Home", "Work", "Play"); -``` - -Multi-Channel subscriptions works conceptually similar to having multiple "single channel" subscriptions where multiple Join/Leave/Message events are fired for events occurring in each channel. For more details on this checkout the [multi-channel ServerEvents tests](https://github.com/ServiceStack/ServiceStack/blob/42d08dee1f4945f1a7be29ac234ce1250e04de9b/tests/ServiceStack.WebHost.Endpoints.Tests/ServerEventTests.cs#L781). - -### Chat Apps now support multiple Chat Rooms - -With this feature, we can now create Chat Apps that support multiple Chat Rooms using only a single ServerEvents subscription: - -[![React Multi-Channel Chat](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/livedemos/chat-react-multichannels.png)](http://react-chat.servicestack.net/?channels=home,work,play) - -> Multi-Channel React Chat preview - -Surprisingly it only took a small amount of code to add support for multiple chat rooms in all the different Chat Apps which now all support Multiple Chat rooms: - - - Upgrade [jQuery Chat Client/Server](https://github.com/ServiceStackApps/Chat/commit/f23bb912791425abcba1bc724cd86cb4ab8cac82) to support multiple Chat Rooms - - Upgrade [React Chat Client](https://github.com/ServiceStackApps/Chat-React/commit/8969ce9c291d88f63d84500b3bb281c3b1f451c7) to support multiple Chat Rooms - - Upgrade [React Chat Server](https://github.com/ServiceStackApps/Chat-React/commit/cae43b6923771b02c28726dcfa4927d8490275ee) to support multiple Chat Rooms - - Upgrade [ServiceStack.Gap Chat Client/Server](https://github.com/ServiceStack/ServiceStack.Gap/commit/6ee72d81fcf7cd73573b686400500d7516f312b9) to support multiple Chat Rooms - -Should you want to run the previous "Single Room" Chat Apps, they're available in the **single-channel** branches: - - - [jQuery Chat](https://github.com/ServiceStackApps/Chat/tree/single-channel) - - [React Chat](https://github.com/ServiceStackApps/Chat-React/tree/singe-channel) - -> Multi-Channel support is mostly backwards compatible where all Chat Apps can be run as-is when upgraded to use the latest ServiceStack v4.0.35+ - but it does require upgrading both v4.0.35 Client and Server libraries together. - -## Minor Changes and Fixes - -Rest of this release was focused on minor features, changes and fixes: - -### Framework Changes - - - Custom HTTP Handlers now execute Global Request Filters [709fb73](https://github.com/ServiceStack/ServiceStack/commit/709fb73c1450f13ba6449eed9101e588775c3d9d) - - Static Default html pages (e.g. default.html) are served directly from root instead of being redirected to static file - Behavior is now in-line with `default.cshtml` in Razor Support [5b5d7fa](https://github.com/ServiceStack/ServiceStack/commit/5b5d7fa66bbd3d4237ede8a5bc9054354dfa7b2c) - - StaticFileHandler HTTP Handler is now re-usable `VirtualNode` for returning Static Files [8571ecd](https://github.com/ServiceStack/ServiceStack/commit/8571ecd6f7e244ee152e959e6759f6a1ee82fe4d) - - Original C#/.NET Exception is now accessible as `InnerException` in wrapped `HttpError` [42d5976](https://github.com/ServiceStack/ServiceStack/commit/42d59767fd8ea9414470cbedbac8b2bae308e9e8) - - Added overridable `IDbConnectionFactory` and `IRedisClientsManager` properties in `Service` base class [c18215b](https://github.com/ServiceStack/ServiceStack/commit/c18215b58a7a71f9537f8614ce42acf91beaee3b) - - Add `.woff2` to `Config.AllowFileExtensions` white-list [aa1e93a](https://github.com/ServiceStack/ServiceStack/commit/aa1e93adcea85216aac807cad4bdbe8f71ff2f52) - - Changed all methods in MVC ServiceStackController base class to protected to prevent MVC Controller Factories from assuming their MVC Actions [eff11c](https://github.com/ServiceStack/ServiceStack/commit/eff11c8992df78b18b07cc0137d27ea1e2d7eb47) - - Added Remove Plugin and Debug Link API's [9002d48](https://github.com/ServiceStack/ServiceStack/commit/9002d4827c43dd91e02b298a3b5a56e6e376963a) - - Added Retry logic on Concurrent Update collisions in `OrmLiteCacheClient` [aa6d62c](https://github.com/ServiceStack/ServiceStack/commit/aa6d62ca23ebef30eb3727f3894d214d320843b0) - - Added Runtime Attribute Filter example [355365b](https://github.com/ServiceStack/ServiceStack/commit/355365bbfc45e1309fa2d91fcbc1856e874a9676) - - Add support for implicit querying of enums in AutoQuery [b5d2477](https://github.com/ServiceStack/ServiceStack/commit/b5d2477c581152168f43017a355cbcae9dccbefb) - - Handle Retry Exceptions during on `ServerEventsClient` reconnections [7833cd8](https://github.com/ServiceStack/ServiceStack/commit/7833cd8c25e0eb4dc10cd0e0033d2d156393625a) - - Added `AppHost.GetCurrentRequest()` to allow different AppHosts to return the current HttpContext [7cbadda](https://github.com/ServiceStack/ServiceStack/commit/7cbadda18f5666a4c24a0e49fa1af740afd0fec4) - - Fixed NRE during max pool-size overflow handling in `RedisManagerPool` [c94eedd](https://github.com/ServiceStack/ServiceStack.Redis/commit/c94eedd2e3467a418b290209fdf52b01c0516855) - -### Auth Changes - - - `IAuthRepository.CreateOrMergeAuthSession()` now returns the merged `IUserAuthDetails` [f2383ff](https://github.com/ServiceStack/ServiceStack/commit/f2383fffd390d58d2da55dd47eb2b68110066c51) - - `OnRegistered()` callback now fired for successful first-time OAuth requests (in addition to `/register` Service) - - Added `AppHost.OnSaveSession()` to allow custom logic whenever a User Session is saved to the Cache [002a4eb](https://github.com/ServiceStack/ServiceStack/commit/002a4ebf9ea75e922554148ffa2581be05e2c359) - - New `Dictionary Meta` added to allow custom Auth params on `Authenticate` during Authentication [4d339c1](https://github.com/ServiceStack/ServiceStack/commit/4d339c190bf086e2639c3373792b9f4547e0851b) - - New `Config.AddRedirectParamsToQueryString` option added to change redirect params to be added to QueryString instead of hash `#` params [fea60fa](https://github.com/ServiceStack/ServiceStack/commit/fea60fa37000ff7603dc15a31b53150d72bae131) - - `NHibernateUserAuthRepository.GetCurrentSession()` is now overridable to customize NH Session Initialization [7249c9a](https://github.com/ServiceStack/ServiceStack/commit/7249c9af8191ec1bdf7b95db0bba607fe5015dc8) - -### MQ Changes - - - Added `QueueNames.IsTempQueue()` API to determine if a MQ name is a Temp Queue even when custom naming conventions are used [c3ee3d0](https://github.com/ServiceStack/ServiceStack/commit/c3ee3d037ec5676a05e0852ea90d0d75f0d25787) - - Pass `IMessageHandler` in custom MQ Error Handlers so Nak's can be sent from same client that received the message [3be2e3f](https://github.com/ServiceStack/ServiceStack/commit/3be2e3f9d3e9340c4993f8eabc8805c2b1325b18) - -### OrmLite Changes - - - `SqlProc` no longer disposes `IDbCommand` before returning it [9e71480](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/9e714808079aa08f8b7b90766ba308279532c08f) - - Fixed `SingleAsync` API to call correct internal API [b23410](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/b234105065b38df5eb18449e2fb8d5173458c269) - - Added support new Multi-Column OrderBy Descending API's [33292ef](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/33292ef67ec09cbe005afc2cba1f7c417da4434c) - - Add support for `ConvertToList` to handle Scalars as well [4290229](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/4290229cd50ae6475a3edffc198bbdc87cc54539) - -### ServiceStack.Text Changes - - - Add support for Dates in `yyyyMMdd` format [a752f2a](https://github.com/ServiceStack/ServiceStack.Text/commit/a752f2af70f165398899e92b2775daa0d870ff57) - - Add New `DateTimeSerializer.OnParseErrorFn` fallback can be used to handle unknown Date Formats - - Added convenient `Task.Success()` and `Task.Error()` extension methods for non-generic `Task` [b17866a](https://github.com/ServiceStack/ServiceStack.Text/commit/b17866a3b46e3e6c699c20b7f33ef3738fdffd46) - - PCL version of `GetPublicProperties()` now only return instance (non-static) properties [dbe1f83](https://github.com/ServiceStack/ServiceStack.Text/commit/dbe1f8349600ba47e2c4aaaa49c4759198a6ac1f) - -### Dependencies Updated - - - FacebookAuthProvider upgraded to use v2.0 of Facebook's API - - Swagger UI updated latest version - - Memcached updated to 0.57 - - FluentNHibernate to 2.0.1.0 - -# v4.0.34 Release Notes - -## [Add TypeScript Reference!](https://github.com/ServiceStack/ServiceStack/wiki/TypeScript-Add-ServiceStack-Reference) - -The next typed client supported in [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) is [TypeScript](http://www.typescriptlang.org/)! - -![Add TypeScript Reference](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackvs/add-typescript-reference.png) - -[TypeScript](http://www.typescriptlang.org/) is a superset of JavaScript that enhances it with an optional type system for annotating JavaScript source code - bringing many of the code-analysis, insights and tooling benefits that we get to enjoy developing in a typed language like C#/VS.NET. We're excited to also be able to bring these benefits to TypeScript Client Apps consuming ServiceStack Services! - -### TypeScript DTO Interface Declarations - -The TypeScript Native Types feature takes a non-invasive approach in that they're made available in the form of a `.d.ts` [TypeScript declaration file](http://www.typescriptlang.org/Handbook#writing-dts-files). TypeScript declarations are pure static type annotations, i.e. they don't generate any code or otherwise have any effect on runtime behavior. This makes them useful as a non-invasive drop-in into existing JavaScript code where it's used to provide type annotations and intelli-sense on existing JavaScript objects, letting you continue using your existing data types and Ajax libraries. - -### TypeScript Reference Example - -Lets walk through a simple example to see how we can use ServiceStack's TypeScript DTO annotations in our JavaScript clients. Firstly we'll need to add a **TypeScript Reference** to the remote ServiceStack Service by **right-clicking** on your project and clicking on `Add > TypeScript Reference...` (as seen in the above screenshot). - -This will import the remote Services dtos into your local project which ends up looking similar to: - -```typescript -/* Options: -Date: 2014-12-08 17:24:02 -Version: 1 -BaseUrl: http://api.example.com - -GlobalNamespace: dtos -//MakePropertiesOptional: True -//AddServiceStackTypes: True -//AddResponseStatus: False -*/ - -declare module dtos -{ - // @Route("/hello") - // @Route("/hello/{Name}") - interface Hello extends IReturn - { - // @Required() - name:string; - title?:string; - } - - interface HelloResponse - { - result?:string; - } - - interface IReturn {} - ... -} -``` - -Initially the single TypeScript module that contains all the DTO definitions will default to the C#/.NET `ServiceModel` namespace, but this can be made more readable in client apps by uncommenting in the header properties: - -`GlobalNamespace: dtos` - -Looking at the types we'll notice the DTO's are just interface type definitions with any .NET attributes added in comments using AtScript's proposed [meta-data annotations format](https://docs.google.com/document/d/11YUzC-1d0V1-Q3V0fQ7KSit97HnZoKVygDxpWzEYW0U/mobilebasic?viewopt=127). This lets you view helpful documentation about your DTO's like the different custom routes available for each Request DTO. - -By default DTO properties are optional but can be made a required field by annotating the .NET property with the `[Required]` attribute or by uncommenting `MakePropertiesOptional: False` in the header comments which instead defaults all properties as required. - -Property names always reflect to match the remote servers JSON Serialization configuration, i.e. will use **camelCase** properties when the `AppHost` is configured with: - -```csharp -JsConfig.EmitCamelCaseNames = true; -``` - -### Referencing TypeScript DTO's - - -Once added to your project, use VS.NET's JavaScript Doc Comments to reference the TypeScript definitions in your `.ts` scripts. The example below shows how to use the above TypeScript definitions to create a typed Request/Response utilizing jQuery's Ajax API to fire off a new Ajax request on every keystroke: - -```html -/// -... - - -
      - - -``` - -Here we're just using a simple inline `createUrl()` function to show how we're creating the url for the **GET** HTTP Request by appending all Request DTO properties to the QueryString, resulting in a HTTP GET Request that looks like: - - /hello?title=Dr&name=World - -There's also a new `$.ss.createUrl()` API in [ss-utils.js](https://github.com/ServiceStack/ServiceStack/wiki/ss-utils.js-JavaScript-Client-Library) which also handles .NET Route definitions where it will populate any variables in the `/path/{info}` instead of adding them to the `?QueryString`, e.g: - -```typescript -$(document).bindHandlers({ - sayHello: function () { - var request: dtos.Hello = {}; - request.title = "Dr"; - request.name = this.value; - - $.getJSON($.ss.createUrl("/hello/{Name}", request), request, - function (r: dtos.HelloResponse) { - $("#result").html(r.result); - }); - } -}); -``` - -Which results in a HTTP GET request with the expected Url: - - /hello/World?title=Dr - -### [ss-utils.d.ts](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/js/ss-utils.d.ts) - -To coincide with the new TypeScript Reference support, we've also included a TypeScript declaration file for [ss-utils.js](https://github.com/ServiceStack/ServiceStack/wiki/ss-utils.js-JavaScript-Client-Library). that's also available as an embedded resource in `ServiceStack.dll` at [/js/ss-utils.d.ts](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/js/ss-utils.d.ts). - -### [Upgrade ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) - -To take advantage of **Add TypeScript Reference** feature, [Upgrade or Install ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) VS.NET Extension: - -[![VS.NET Gallery Download](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackvs/vsgallery-download.png)](http://visualstudiogallery.msdn.microsoft.com/5bd40817-0986-444d-a77d-482e43a48da7) - -> If you already have ServiceStackVS installed, uninstall it first from **Tools -> Extensions and Updates...** then in the Extensions dialog find **ServiceStackVS -> Uninstall**. - -## Auto Batched Requests - -One of the best ways to improve performance, efficiency and reduce latency is to minimize the number of network requests required, which is one of the reasons we've always encouraged [Coarse-grained API designs](https://github.com/ServiceStack/ServiceStack/wiki/Why-Servicestack#servicestack-encourages-development-of-message-style-re-usable-and-batch-full-web-services) - which also lend themselves to better encapsulation and re-use. - -Another common use-case that can be improved are clients making multiple requests to the same API, but due to the lack of a better alternative batched API or control over the server implementation, will default to making multiple N+1 web service requests - thanks to ServiceStack's [message-based design](https://github.com/ServiceStack/ServiceStack/wiki/Advantages-of-message-based-web-services), that better alternative now exists :) - -### All Services now support Batching! - -With the introduction of **Auto Batched Requests** in this release, all ServiceStack Services now include implicit support for batching, automatically, without any additional effort - where multiple requests of the same type can be sent together in a single HTTP Request. - -This is now enabled in all [.NET Service Clients](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client) via the new `SendAll()` and `SendAllOneWay()` API's, e.g: - -```csharp -var client = new JsonServiceClient(BaseUrl); -var requests = new[] -{ - new Request { Id = 1, Name = "Foo" }, - new Request { Id = 2, Name = "Bar" }, - new Request { Id = 3, Name = "Baz" }, -}; - -List responses = client.SendAll(requests); -``` - -The API works as you would expect where multiple requests can be sent together and the Service Client will return a list of all responses in the same order as the requests were sent. - -And on the back-end, your Services are none the wiser, remaining focused on handling a single Request DTO. In the case below the Service does some work then stores the response in Redis before returning it: - -```csharp -public class MyServices : Service -{ - public object Any(Request request) - { - var response = DoWork(request); - Redis.Store(response); - return response; - } -} -``` - -### Request Execution Flow - -From the Service's point of view nothing changes. Request DTO's still get executed one at a time, through all existing filters just as if they we're sent on their own. They're just delivered together within a single HTTP Request, in this case POST'ed as JSON to the `/json/reply/Request[]` [pre-defined route](https://github.com/ServiceStack/ServiceStack/wiki/Routing#pre-defined-routes): - -![Auto Batched Requests](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/auto-batched-requests.png) - -### Custom Batched Requests Implementations - -If a client was previously calling the same API 100 times, the existing overhead of 100 HTTP Requests would be reduced to just **1 HTTP Request** when batched. Although the above Service would still be calling Redis 100 times to store each Response. - -If later this API has become really hot and you want to improve it even further, you can later add a custom implementation that accepts a `Request[]` and it will only get called once, with access to all the Request DTO's together. In this case we can use a custom implementation and take advantage of Redis's own batched API's and reduce this further to 1 Redis operation: - -```csharp -public class MyServices : Service -{ - public object Any(Request request) - { - var response = DoWork(request); - Redis.Store(response); - return response; - } - - public object Any(Request[] requests) - { - var responses = requests.Map(DoWork); - Redis.StoreAll(responses); - return responses; - } -} -``` - -So with this custom implementation we've gone from **100 HTTP Requests + 100 Redis Operations** to **1 HTTP Request + 1 Redis Operation**. - -Another scenario where you may consider using a **Custom Batched Implementation** is if you wanted to execute all requests within a single RDBMS transaction, which with [OrmLite](https://github.com/ServiceStack/ServiceStack.OrmLite) would look something like: - -```csharp -public class MyServices : Service -{ - public object Any(Request request) - { - var response = DoWork(request); - Db.Insert(request); - return response; - } - - public object Any(Request[] requests) - { - using (var trans = Db.OpenTransaction()) - { - var responses = requests.Map(x => Any(x)); - - trans.Commit(); - return responses; - } - } -} -``` - -Just like with normal Batched Requests, Custom Batched implementations are still executed one at a time through all request/response filters, taking advantage of any existing logic/validation. If you instead only wanted multiple Requests to be treated as a single Request through the entire pipeline you can create a new Request DTO that inherits from `List` which then gets treated as a normal Request DTO e, g: - -```csharp -public class Requests : List {} - -public class MyServices : Service -{ - ... - public object Any(Requests requests) - { - var responses = requests.Map(DoWork); - Redis.StoreAll(responses); - return responses; - } -} -``` - -More examples of Auto Batched Requests and its behavior can be found in the [ReplyAllTests suite](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/ReplyAllTests.cs). - -## New [ReactJS App Template](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project)! - -The new ServiceStackVS **ReactJS App** template shares the same approach for developing modern Single Page Apps in VS.NET as the existing [AngularJS App](https://github.com/ServiceStack/ServiceStackVS/blob/master/angular-spa.md) template by leveraging the **node.js** ecosystem for managing all aspects of Client App development utilizing the best-in-class libraries: - - - [npm](https://www.npmjs.org/) to manage node.js dependencies (bower, grunt, gulp) - - [Bower](http://bower.io/) for managing client dependencies (angular, jquery, bootstrap, etc) - - [Grunt](http://gruntjs.com/) as the primary task runner for server, client packaging and deployments - - [Gulp](http://gulpjs.com/) used by Grunt to do the heavy-lifting bundling and minification - -The templates conveniently pre-configures the above libraries into a working out-of-the-box solution, including high-level grunt tasks to take care of the full-dev-cycle of **building**, **packaging** and **deploying** your app: - - - **[01-run-tests](https://github.com/ServiceStack/ServiceStackVS/blob/angular-spa-template/angular-spa.md#01-run-tests)** - Runs Karma JavaScript Unit Tests - - **[02-package-server](https://github.com/ServiceStack/ServiceStackVS/blob/angular-spa-template/angular-spa.md#02-package-server)** - Uses msbuild to build the application and copies server artefacts to `/wwwroot` - - **[03-package-client](https://github.com/ServiceStack/ServiceStackVS/blob/angular-spa-template/angular-spa.md#03-package-client)** - Optimizes and packages the client artefacts for deployment in `/wwwroot` - - **[04-deploy-app](https://github.com/ServiceStack/ServiceStackVS/blob/angular-spa-template/angular-spa.md#04-deploy-app)** - Uses MS WebDeploy and `/wwwroot_buld/publish/config.json` to deploy app to specified server - -## [React Chat](https://github.com/ServiceStackApps/Chat-React) - -To help to get started with the **ReactJS App** VS.NET template and learn React, we've rewritten [ServiceStack Chat](https://github.com/ServiceStackApps/Chat) ServerEvents demo using [React](http://facebook.github.io/react/): - -[![React Chat](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/livedemos/chat-react.png)](http://react-chat.servicestack.net) - -> Live Demo: http://react-chat.servicestack.net - -### [Intro to developing apps with React and Reflux](https://github.com/ServiceStackApps/Chat-React) - -The [React Chat GitHub Repository](https://github.com/ServiceStackApps/Chat-React) also includes a guide of Facebook's [React](http://facebook.github.io/react/) library and [Flux pattern](http://facebook.github.io/react/docs/flux-overview.html) and walks through how to use them to put together a React-based App - making use of the scripts in the ServiceStackVS template along the way to optimize, package and deploy React Chat. - -## [Redis](https://github.com/ServiceStack/ServiceStack.Redis) - -### Heartbeats enabled on [RedisPubSubServer](https://github.com/ServiceStack/ServiceStack.Redis#new-managed-pubsub-server) - -`RedisPubServer` now maintains periodic heartbeats with Redis and will auto-reconnect when it detects a connection has dropped. Heartbeats can be disabled by setting `HeartbeatInterval=null`. - -The new heartbeat support should also improve resiliency in components powered by RedisPubServer, including `RedisMqServer` and `RedisServerEvents`. - -### Updated [RedisManagerPool](https://github.com/ServiceStack/ServiceStack.Redis#redismanagerpool) Pooling Behavior - -`RedisManagerPool` is our new streamlined version of `PooledRedisClientManager` with a simplified API courtesy of the configuration moving into the [Redis Connection String](https://github.com/ServiceStack/ServiceStack.Redis#redis-connection-strings). As an new and alternative Pooled Client Manager we've taken the opportunity to tweak the pooling behavior so that any connections required after the maximum Pool size has been reached will be created and disposed outside of the Pool. - -This is different to `PooledRedisClientManager` which imposes a maximum connection limit and when its maximum pool size has been reached will instead block on any new connection requests until the next RedisClient is released back into the pool. If no client became available within `PoolTimeout`, a Pool Timeout exception will be thrown. - -By not being restricted to a maximum pool size, the new pooling behavior in `RedisManagerPool` lets it maintain a smaller connection pool size at the cost of potentially having a higher opened/closed connection count. - -### Redis HTTP [Request Logger](https://github.com/ServiceStack/ServiceStack/wiki/Request-logger) - -A new `RedisRequestLogger` is available in the **ServiceStack.Server** NuGet package to provide an alternative back-end for the [Request Logs Feature](https://github.com/ServiceStack/ServiceStack/wiki/Request-logger) to log HTTP Requests with Redis so they remain available after AppDomain restarts. - -`RequestLogsFeature` can be configured to use the new `RedisRequestLogger` with: - -```csharp -Plugins.Add(new RequestLogsFeature { - RequestLogger = new RedisRequestLogger( - container.Resolve(), capacity:1000) -}); -``` - -## [OrmLite](https://github.com/ServiceStack/ServiceStack.OrmLite) - -### [Multiple Self References](https://github.com/ServiceStack/ServiceStack.OrmLite#multiple-self-references) - -Supports for multiple Self References of the same type has been added where if there are multiple fields containing `[References]` to the same type, OrmLite will fallback to matching properties based on `{PropertyName}Id` property naming convention, e.g: - -```csharp -public class Customer -{ - [AutoIncrement] - public int Id { get; set; } - public string Name { get; set; } - - [References(typeof(CustomerAddress))] - public int? HomeAddressId { get; set; } - - [References(typeof(CustomerAddress))] - public int? WorkAddressId { get; set; } - - [Reference] - public CustomerAddress HomeAddress { get; set; } - - [Reference] - public CustomerAddress WorkAddress { get; set; } -} -``` - -> Self References now also support mixing and matching of property names and DB Alias naming conventions - -### Support for CROSS JOIN's - -New `CrossJoin` API's were added to `SqlExpression` that works similarly to other JOIN's, e.g: - -```csharp -var q = db.From() - .CrossJoin() - .OrderBy(x => x.Id); - -var results = db.Select(q); -``` - -### OpenDbConnectionString() - -A new `OpenDbConnectionString` API was added to open adhoc connection strings using the same `OrmLiteConnectionFactory` and `DialectProvider` instance. This makes creating Multi Tenant DB Factories a little easier, e.g: - -```csharp -public class MultiTenantDbFactory : IDbConnectionFactory -{ - private readonly IDbConnectionFactory dbFactory; - - public MultiTenantDbFactory(IDbConnectionFactory dbFactory) - { - this.dbFactory = dbFactory; - } - - public IDbConnection OpenDbConnection() - { - var tenantId = RequestContext.Instance.Items["TenantId"] as string; - return tenantId != null - ? dbFactory.OpenDbConnectionString(GetConnectionString(tenantId)) - : dbFactory.OpenDbConnection(); - } - - public IDbConnection CreateDbConnection() - { - return dbFactory.CreateDbConnection(); - } -} -``` - -A complete Multi Tenant OrmLite example can be found in [MultiTennantAppHostTests.cs](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/MultiTennantAppHostTests.cs) - -### Oracle Provider returns to form - -Thanks to [@TroyDycavinu-AI](https://github.com/TroyDycavinu-AI) efforts, the [Oracle OrmLite Provider](http://nuget.org/packages/ServiceStack.OrmLite.Oracle) test suite is back in the green - -## [Razor](http://razor.servicestack.net/) - -### RenderToAction() - -The new `RenderToAction()` method lets you execute a Service in a Razor View and include it's rendered partial view using just a relative Url: - -```csharp -@Html.RenderAction("/products/1") -``` -It also takes an optional view name if you want a different view than the default: - -```csharp -@Html.RenderAction("/products/1", "CustomProductView") -``` - -An alternative approach to include another Services View is with `Html.Partial()` specifying which view and model you want to render: - -```csharp -@Html.Partial("GetProduct", - base.ExecuteService(s => s.Any(new GetProduct { Id = 1 }))) -``` - -Where `ExecuteService` is a shorthand wrapper around using `ResolveService` in a `using` block: - -```csharp -@{ - Response response = null; - using (var service = base.ResolveService()) - { - response = service.Any(new GetProduct { Id = 1 }); - } -} -@Html.Partial("GetProduct", response) -``` - -### Relative Content Partials - -In addition to Shared Razor Views in `/Views` you can now include Partials relative to the containing Razor Content Page: - -```csharp -@Html.Partial("LocalPartial", model) -@Html.Partial("SubDir/NestedPartial", model) -``` - -## [AutoQuery](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query) - -### Unlimited Custom Table Joins - -AutoQuery now supports joining any number of tables together by annotating the Request DTO with multiple `IJoin<>` interface markers e.g: - -```csharp -public class MyQuery : QueryBase, - IJoin, - IJoin, - IJoin, - //... -{ -} -``` - -## [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) - - - DTO Interfaces are now included in all C#, F#, VB.NET and TypeScript Native Type providers. - - F# developers can specify `GlobalNamespace` in their generated `.dtos.fs` - - -## [Authentication](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization) - -The `RavenDbUserAuthRepository` now supports specialization so it can be used to persist extended custom `UserAuth` and `UserAuthDetails` types, e.g: - -```csharp -public class CustomRavenDbAuthRepository - : RavenDbUserAuthRepository -{ - //... -} -``` - -### [Sessions](https://github.com/ServiceStack/ServiceStack/wiki/Sessions) - -If needed, Sessions can be injected or modified in ASP.NET hosts with: - -```csharp -HttpContext.Current.Items[ServiceExtensions.RequestItemsSessionKey] = - new AuthUserSession { ... }; -``` - -New Session API's added: - - - `IRequest.RemoveSession(sessionId)` - Remove the Session - - `IRequest.GetSessionTimeToLive()` - Time remaining before current Session expires - - `ICacheClient.GetSessionTimeToLive(id)` - Time remaining before specified Session expires - - - -## Other Features - - - SOAP no longer emits the UTF8 BOM by default, overridable in `Config.XmlWriterSettings` - - CORS Support added in Server Events raw HTTP Handlers - - C# Server Events Client auto restarts when Heartbeat has elapsed the Servers `IdleTimeoutMs` - - Added [workaround for supporting Mono with Redis SSL](https://github.com/mono/mono/pull/1399) - - -## Breaking Changes - -### PCL NuGet Packages Merged - -The **ServiceStack.Client.Pcl** and **ServiceStack.Stripe.Pcl** NuGet packages have been merged into the main **ServiceStack.Client** and **ServiceStack.Stripe** NuGet packages and as a result will no longer receive future updates. If you're using them please update your NuGet references. - -### Refactored Redis Client API's - -`IRedisClient.GetTimeToLive()` now returns a `TimeSpan?` will will return: - - `null` if no key exists - - `TimeSpan.MaxValue` if there is no expiry set on the key - - or a `TimeSpan` value with the time remaining before the key is set to expire - - `KeepAliveRetryAfterMs` has been renamed to `WaitBeforeNextRestart` in `RedisPubSubServer` and the classes that use it: `RedisServerEvents` and `RedisMqServer`. - -# v4.0.33 Release Notes - -## OrmLite now supports Async! - -Another [major feature request](http://servicestack.uservoice.com/forums/176786-feature-requests/suggestions/6217167-provider-async-support-for-ormlite) -is ticked off in this release with the new **Async support available in OrmLite!** - -A quick overview of the new Async API's added can be seen in the class diagram below: - -![OrmLite Async APIs](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/ormlite/OrmLiteApiAsync.png) - -Basically most of OrmLite public API's now have async equivalents of the same name and an additional conventional `*Async` suffix. -The Async API's also take an optional `CancellationToken` making converting sync code trivial, where you just need to -add the `Async` suffix and **await** keyword, as can be seen in the -[Customer Orders UseCase upgrade to Async diff](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/c1ce6f0eac99133fc232b263c26c42379d4c5f48) -, e.g: - -Sync: - -```csharp -db.Insert(new Employee { Id = 1, Name = "Employee 1" }); -db.Save(product1, product2); -var customer = db.Single(new { customer.Email }); -``` - -Async: - -```csharp -await db.InsertAsync(new Employee { Id = 1, Name = "Employee 1" }); -await db.SaveAsync(product1, product2); -var customer = await db.SingleAsync(new { customer.Email }); -``` - -> Effectively the only Data Access API's that doesn't have async equivalents are `*Lazy` APIs yielding a lazy -> sequence (incompatible with async) as well as **Schema** DDL API's which are typically not used at runtime. - -For a quick preview of many of the new Async API's in action, checkout -[ApiSqlServerTestsAsync.cs](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLiteV45.Tests/ApiSqlServerTestsAsync.cs). - -### Async RDBMS Providers - -Currently only a limited number of RDBMS providers offer async API's which are only available in their **.NET 4.5** builds, which at this time are only: - - - [SQL Server .NET 4.5+](https://www.nuget.org/packages/ServiceStack.OrmLite.SqlServer) - - [MySQL .NET 4.5+](https://www.nuget.org/packages/ServiceStack.OrmLite.MySql) - -We've also added a -[.NET 4.5 build for Sqlite](https://www.nuget.org/packages/ServiceStack.OrmLite.Sqlite.Mono) -as it's a common use-case to swapout to use Sqlite's in-memory provider for faster tests. -But as Sqlite doesn't provide async API's under-the-hood we fallback to *pseudo async* support where we just wrap its synchronous responses in `Task` results. - -Regardless of whether the RDBMS provider offers Async API's, you still can use the same OrmLite async API's with all providers, -where the same Async OrmLite API's can also be used in DB Providers that doesn't natively support Async (i.e. Sqlite): - - - [ApiSqlServerTestsAsync.cs](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLiteV45.Tests/ApiSqlServerTestsAsync.cs) - - [ApiMySqlTestsAsync.cs](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLiteV45.Tests/ApiMySqlTestsAsync.cs) - - [ApiSqliteTestsAsync.cs](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLiteV45.Tests/ApiSqliteTestsAsync.cs) - -Only when these Async API's are run on an RDBMS provider with native async support (i.e. .NET 4.5 SqlServer or MySql) will you benefit from true -non-blocking Async I/O, otherwise it fallsback to *pseudo async* support, i.e. synchronous I/O datasets wrapped in `Task` Results. - -### Multiple Self References - -OrmLite's [POCO Reference conventions](https://github.com/ServiceStack/ServiceStack.OrmLite#reference-conventions) -has been expanded to include support for multiple Self References. - -The example below shows a customer with multiple `CustomerAddress` references which are able to be matched with -the `{PropertyReference}Id` naming convention, e.g: - -```csharp -public class Customer -{ - [AutoIncrement] - public int Id { get; set; } - public string Name { get; set; } - - [References(typeof(CustomerAddress))] - public int? HomeAddressId { get; set; } - - [References(typeof(CustomerAddress))] - public int? WorkAddressId { get; set; } - - [Reference] - public CustomerAddress HomeAddress { get; set; } - - [Reference] - public CustomerAddress WorkAddress { get; set; } -} -``` - -Once defined, it can be saved and loaded via OrmLite's normal Reference and Select API's, e.g: - -```csharp -var customer = new Customer -{ - Name = "Z Customer", - HomeAddress = new CustomerAddress { - Address = "1 Home Street", - Country = "US" - }, - WorkAddress = new CustomerAddress { - Address = "2 Work Road", - Country = "UK" - }, -}; - -db.Save(customer, references:true); - -var c = db.LoadSelect(q => q.Name == "Z Customer"); -c.WorkAddress.Address.Print(); // 2 Work Road - -var ukAddress = db.Single(q => q.Country == "UK"); -ukAddress.Address.Print(); // 2 Work Road -``` - -## [ServiceStack.Redis SSL Support](https://github.com/ServiceStack/ServiceStack/wiki/Secure-SSL-Redis-connections-to-Azure-Redis) - -The [most requested feature for ServiceStack.Redis](http://servicestack.uservoice.com/forums/176786-feature-requests/suggestions/6093693-support-ssl-connection-to-redis-instances-hosted-a) -has also been realized in this release with **ServiceStack.Redis** now supporting **SSL connections** making it suitable for accessing -remote Redis server instances over a **secure SSL connection**. - -![Azure Redis Cache](https://github.com/ServiceStack/Assets/raw/master/img/wikis/redis/azure-redis-instance.png) - -### Redis Use Cases - -Redis is normally used as a back-end datastore whose access is typically limited to Internal networks or authorized networks protected via firewalls. -The new SSL Support in the Redis Client also enables secure access to a redis-server instance over the Internet and public networks as well, -a scenario that's been recently popularized by Cloud hosting environments like Azure Redis Cache. - -### [Connecting to Azure Redis](https://github.com/ServiceStack/ServiceStack/wiki/Secure-SSL-Redis-connections-to-Azure-Redis) - -As connecting to [Azure Redis Cache](http://azure.microsoft.com/en-us/services/cache/) via SSL was the primary use-case for this feature, -we've added a new -[Getting connected to Azure Redis via SSL](https://github.com/ServiceStack/ServiceStack/wiki/Secure-SSL-Redis-connections-to-Azure-Redis) -to help you get started. - -### Redis Connection Strings - -Redis Connection strings have been expanded to support the more versatile URI format which is now able to capture most of Redis Client settings in a -single connection string (akin to DB Connection strings). - -Redis Connection Strings supports multiple URI-like formats, from a simple **hostname** or **IP Address and port** pair to a fully-qualified **URL** -with multiple options specified on the QueryString. - -Some examples of supported formats: - - localhost - 127.0.0.1:6379 - redis://localhost:6379 - password@localhost:6379 - clientid:password@localhost:6379 - redis://clientid:password@localhost:6380?ssl=true&db=1 - -> More examples can be seen in -[ConfigTests.cs](https://github.com/ServiceStack/ServiceStack.Redis/blob/master/tests/ServiceStack.Redis.Tests/ConfigTests.cs) - -Any additional configuration can be specified as QueryString parameters. The full list of options that can be specified include: - -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      SslboolIf this is an SSL connection
      DbintThe Redis DB this connection should be set to
      ClientstringA text alias to specify for this connection for analytic purposes
      PasswordstringUrlEncoded version of the Password for this connection
      ConnectTimeoutintTimeout in ms for making a TCP Socket connection
      SendTimeoutintTimeout in ms for making a synchronous TCP Socket Send
      ReceiveTimeoutintTimeout in ms for waiting for a synchronous TCP Socket Receive
      IdleTimeOutSecsintTimeout in Seconds for an Idle connection to be considered active
      NamespacePrefixstringUse a custom prefix for ServiceStack.Redis internal index colletions
      - -### New `RedisManagerPool` Client Manager - -With the introduction of Redis URI Connection Strings we've been able to simplify and streamline the existing `PooledRedisClientManager` -implementation that's been extracted out into clients manager called `RedisManagerPool`. -In addition to removing all above options on the Client Manager itself, we've also removed readonly connection strings so the configuration is -much simpler and more aligned with the common use-case. - -In most cases, `PooledRedisClientManager` is substitutable with `RedisManagerPool` e.g: - -```csharp -container.Register(c => - new RedisManagerPool(redisConnectionString)); -``` - -### New Generic API's for calling Custom Redis commands - -Most of the time when waiting to use a new [Redis Command](http://redis.io/commands) you'll need to wait for an updated version of -**ServiceStack.Redis** to add support for the new commands likewise there are times when the Redis Client doesn't offer every permutation -that redis-server supports. - -With the new `Custom` and `RawCommand` API's on `IRedisClient` and `IRedisNativeClient` you can now use the RedisClient to send your own -custom commands that can call adhoc Redis commands: - -```csharp -public interface IRedisClient -{ - ... - RedisText Custom(params object[] cmdWithArgs); -} - -public interface IRedisNativeClient -{ - ... - RedisData RawCommand(params object[] cmdWithArgs); - RedisData RawCommand(params byte[][] cmdWithBinaryArgs); -} -``` - -These API's return Custom Results in the generic data structures below: - -```csharp -public class RedisText -{ - public string Text { get; set; } - public List Children { get; set; } -} - -public class RedisData -{ - public byte[] Data { get; set; } - public List Children { get; set; } -} -``` - -These Custom API's take a flexible `object[]` arguments which accepts any serializable value e.g. -`byte[]`, `string`, `int` as well as any user-defined Complex Types which are transparently serialized -as JSON and send across the wire as UTF-8 bytes. - -```csharp -var ret = Redis.Custom("SET", "foo", 1); // ret.Text = "OK" - -byte[] cmdSet = Commands.Set; -ret = Redis.Custom(cmdSet, "bar", "b"); // ret.Text = "OK" - -ret = Redis.Custom("GET", "foo"); // ret.Text = "1" -``` - -There are also -[convenient extension methods](https://github.com/ServiceStack/ServiceStack.Redis/blob/master/src/ServiceStack.Redis/RedisDataExtensions.cs) -on `RedisData` and `RedisText` that make it easy to access structured data, e.g: - -```csharp -var ret = Redis.Custom(Commands.Keys, "*"); -var keys = ret.GetResults(); // keys = ["foo", "bar"] - -ret = Redis.Custom(Commands.MGet, "foo", "bar"); -var values = ret.GetResults(); // values = ["1", "b"] - -Enum.GetNames(typeof(DayOfWeek)).ToList() - .ForEach(x => Redis.Custom(Commands.RPush, "DaysOfWeek", x)); -ret = Redis.Custom(Commands.LRange, "DaysOfWeek", 1, -2); -var weekDays = ret.GetResults(); - -weekDays.PrintDump(); // ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] -``` - -and some more examples using Complex Types with the Custom API's: - -```csharp -var ret = Redis.Custom(Commands.Set, "foo", new Poco { Name = "Bar" }); // ret.Text = "OK" - -ret = Redis.Custom(Commands.Get, "foo"); // ret.Text = {"Name":"Bar"} -Poco dto = ret.GetResult(); - -dto.Name.Print(); // Bar -``` - -### New Config, Role and Client commands - -A number of New API's added in this can be seen below: - -```csharp -public interface IRedisClient -{ - ... - RedisText GetServerRoleInfo(); - string GetConfig(string item); - void SetConfig(string item, string value); - void SaveConfig(); - void ResetInfoStats(); - - string GetClient(); - void SetClient(string name); - void KillClient(string address); - long KillClients(string fromAddress = null, - string withId = null, RedisClientType? ofType = null, bool? skipMe = null); - List> GetClientsInfo(); - void PauseAllClients(TimeSpan duration); -} - -public interface IRedisNativeClient -{ - ... - void ConfigRewrite(); - RedisText Role(); - string ClientGetName(); - void ClientSetName(string client); - void ClientKill(string host); - long ClientKill(string addr = null, string id = null, string type = null, string skipMe = null); - byte[] ClientList(); - void ClientPause(int timeOutMs); -} -``` - -## [New VB.NET Add ServiceStack Reference!](https://github.com/ServiceStack/ServiceStack/wiki/VB.Net-Add-ServiceStack-Reference) - -This release also adds [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) -support for the last remaining major .NET language with the new first-class support for -[VB.NET Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/VB.Net-Add-ServiceStack-Reference)! - -This now allows any C#, F# or VB.NET client project to be able generate and end-to-end typed API for your services just by providing the -url of your remote ServiceStack instance, directly from within VS.NET! - -![Add ServiceStack Reference](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/add-service-ref-flow.png) - -After clicking OK, the servers DTO's and **ServiceStack.Client** NuGet package are added to the project, providing an instant typed API: - -![Calling a ServiceStack Service from VB.NET](https://github.com/ServiceStack/Assets/raw/master/img/apps/StackApis/call-service-vb.png) - -Thanks to the close semantics between the C# and VB.NET languages, we're able to add support for all C# -[customization options in VB.NET](https://github.com/ServiceStack/ServiceStack/wiki/VB.Net-Add-ServiceStack-Reference#dto-customization-options) as well. - -Much of the new VB.NET NativeTypes provider is thanks to the efforts of [@KevinHoward](https://github.com/KevinHoward). - -### [Upgrade ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) - -To take advantage of VB.NET Add ServiceStack Reference feature, -[Upgrade or Install ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) VS.NET Extension. -If you already have **ServiceStackVS** installed, uninstall it first from `Tools -> Extensions and Updates... -> ServiceStackVS -> Uninstall`. - -## Simplified UX for all languages - -Our first iteration of **Add ServiceStack Reference** for C# used a **T4 Template** to make it easy for clients to view and modify all -Customization options available and to be able to auto-generate the Server DTO's by modifying and saving (or re-running) the T4 template. - -As F# projects didn't support T4 Templates, when we added support for -[F# Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/FSharp-Add-ServiceStack-Reference) -we had to skip the T4 template and add the server-generated DTO's source file directly to the project. - -By skipping the T4 Template we pleasantly discovered we ended up with a nicer, simplified and more user-friendly UX, with less moving parts for -the default use case of generating client DTO's based on the -[Default Server Configuration](https://github.com/ServiceStack/ServiceStack/wiki/CSharp-Add-ServiceStack-Reference#change-default-server-configuration). - -### Improving Single Generated Source File Story - -We've since decided to embrace and provide a better development experience around a single source file approach and use it consistently in all -C#, F# and VB.NET projects - now resulting simpler **Add ServiceStack Reference** UX for all client projects. - -### Update ServiceStack Reference Context Menu Item - -With the latest **ServiceStackVS** you can now update the Server DTO's in all projects by clicking on `Update ServiceStack Reference` -on the context-menu, e.g: - -![Update ServiceStack Reference](https://github.com/ServiceStack/Assets/raw/master/img/servicestackvs/servicestack%20reference/updateref-vbnet.gif) - -### Updating and Customizing Generated Types - -To [customize the generated DTO's](https://github.com/ServiceStack/ServiceStack/wiki/CSharp-Add-ServiceStack-Reference#dto-customization-options) -on the client you can just uncomment the option you want to change directly in the **header comments** and hit save. -**ServiceStackVS** automatically watches for any changes to the generated dto source files (i.e. ending with `.dtos.cs`) and will automatically -send the uncommented options to the remote server referenced by the `BaseUrl` and replace the existing file with the updated DTOs instantly! - -Taking the example below, once we uncomment the `MakePartial` option and save the file, **ServiceStackVS** automatically sends a new request -to the remote ServiceStack instance, passing in the `?MakePartial=False` option when requesting updated DTO's: - -```csharp -/* Options: -Date: 2014-10-21 00:44:24 -Version: 1 -BaseUrl: http://stackapis.servicestack.net - -MakePartial: False -//MakeVirtual: True -//MakeDataContractsExtensible: False -//AddReturnMarker: True -//AddDescriptionAsComments: True -//AddDataContractAttributes: False -//AddIndexesToDataMembers: False -//AddResponseStatus: False -//AddImplicitVersion: -//InitializeCollections: True -//AddDefaultXmlNamespace: http://schemas.servicestack.net/types -*/ -``` - -After saving you'll be able to notice the DTO's are updated instantly with the `Date: *` changing to reflect the current time and the new -generated DTO's no longer containing `partial` classes. - -### ServiceStack.Text - -New `JsConfig.OnDeserializing` and dynamic `ShouldSerialize(string field)` customization options were added to ServiceStack's JSON and JSV -Text serializers by [@pavelsavara](https://twitter.com/pavelsavara). An example of these new customization options in action is visible below: - -```csharp -[DataContract] -public class CustomSerializedPoco -{ - [IgnoreDataMember] - public HashSet hasAttribute; - - [DataMember(EmitDefaultValue = false, IsRequired = false)] - public int A { get; set; } - - [DataMember(EmitDefaultValue = false, IsRequired = false)] - public int? B { get; set; } - - public bool? ShouldSerialize(string fieldName) - { - return hasAttribute == null - ? null - : hasAttribute.Contains(fieldName); - } - - public object OnDeserializing(string fieldName, object value) - { - if (hasAttribute == null) - hasAttribute = new HashSet(); - hasAttribute.Add(fieldName); - return value; - } -} -``` - -This change makes it possible to create dynamic POCO's that behave in a similar way that dynamic languages can, -e.g. After deserialization you can detect which fields were deserialized by inspecting the `hasAttribute` collection. - -The `ShouldSerialize` API, closely follows the existing `ShouldSerialize{X}` convention but instead allows for a single API -to handle all serializable properties. - -The API returns a `bool?` which has the following meaning: - - `true` - Should be emitted - - `false` - Should not be emitted - - `null` - Use default behavior - -This allows us to implement a custom type that can support full round-trip when the field on the original JSON payload allowing use to -implement a custom type with similar functionality to `IExtensibleDataObject` which allows survival and forwarding of unknown properties, but for JSON. - -## [RabbitMQ](https://github.com/ServiceStack/ServiceStack/wiki/Rabbit-MQ) - -RabbitMQ Server and Client now have optional `PublishMessageFilter` and `GetMessageFilter` callbacks which can be used to intercept -outgoing and incoming messages, the `IBasicProperties.Type` is also pre-populated with the Type name of the message body that was published, e.g: - -```csharp -var mqServer = new RabbitMqServer("localhost") -{ - PublishMessageFilter = (queueName, properties, msg) => { - properties.AppId = "app:{0}".Fmt(queueName); - }, - GetMessageFilter = (queueName, basicMsg) => { - var props = basicMsg.BasicProperties; - receivedMsgType = props.Type; //automatically added by RabbitMqProducer - receivedMsgApp = props.AppId; - } -}; - -using (var mqClient = mqServer.CreateMessageQueueClient()) -{ - mqClient.Publish(new Hello { Name = "Bugs Bunny" }); -} - -receivedMsgApp.Print(); // app:mq:Hello.In -receivedMsgType.Print(); // Hello -``` - -## Other Minor Changes - - - ServerEvents Server now echoes heartbeat messages back through to the listening connection, - `ServerEventsClient` only fires the `OnHeartbeat` callback when it's receives the echoed `cmd.Heartbeat` command message - - Request binding for `Path` and `QueryString` variables are added to DTO's with Request DTO's providing their own [custom body deserialization](https://github.com/ServiceStack/ServiceStack/wiki/Serialization-deserialization) by implementing `IRequiresRequestStream` - - New `IAppHost.OnDisposeCallbacks` available allowing **Plugins** to register callbacks when `AppHost` is disposed - - `Config.UseHttpsLinks` now modifies generated BaseUrl of all links to use `https` - - The `ResponseStatus` on Custom DTO's are now preserved when thrown inside a custom `HttpError` response - - Equality members added to `[Route]`, `[Authenticate]`, `[RequiredRole]` and `[RequiredPermission]` attributes - - `ToOptimizedResultUsingCache` no longer double-encodes raw `string` responses - - `MvcHtmlString` was moved to `ServiceStack.Html` namespace - - New `StaticFileHandler.ResponseFilter` added to be able to modify custom headers returned on static files - - Many of OrmLite's static Extension method classes were renamed into a more logical grouping. - These changes are source compatible for typical usage of OrmLite API's, i.e. referenced as extension methods - -## Breaking changes - -### Added new .NET 4.5 Builds - -In preparation for introducing Async API's we've added new **.NET 4.5 builds** for the following packages: - - - ServiceStack.OrmLite - - ServiceStack.OrmLite.Sqlite.Mono - - ServiceStack.OrmLite.SqlServer - - ServiceStack.OrmLite.MySql - - ServiceStack.Server - -When adding ServiceStack NuGet Packages to a **.NET 4.5** project you will now get these newer .NET 4.5 builds instead. -The additional builds means you could potentially run into issues if mixing .NET v4.0 and v4.5 builds as all dependencies -need to reference the same build version. - -Should you need to, the easiest way to fix any versioning issues is to make sure all projects use the same .NET Framework version -(e.g. .NET 4.5) and then just uninstall and re-install the ServiceStack NuGet packages. - -### Removed ThreadStatic OrmLite Configuration - -We've also removed our existing ThreadStatic config variables (used to temporarily override global configuration). -Most per-connection state is now stored on the connection e.g. `CommandTimeout` was previously overridden with: - -```csharp -var hold = OrmLiteConfig.TSCommandTimeout; -try { - OrmLiteConfig.TSCommandTimeout = 60; - db.Select(...); -} finally { - OrmLiteConfig.TSCommandTimeout = hold; -} -``` - -Is now set directly on the connection (and only applies to that connection), e.g: - -```csharp -using (var db = DbFactory.Open()) -{ - db.SetCommandTimeout(60); - db.Select(...); -} -``` - -Likewise if you ever need to access the current `OrmLiteConfig.DialectProvider`, it should now be retrieved from the `IDbConnection`, i.e: - -```csharp -db.GetDialectProvider(); -``` - -and if you ever need to access the underlying ADO.NET `IDbConnection` or `IDbCommand` you can access them via the following APIs: - -```csharp -IDbConnection adoDb = db.ToDbConnection(); -IDbCommand adoDbCmd = dmCmd.ToDbCommand(); -``` - -### IReturnVoid now returns void - -All `IReturnVoid` API's on Service Clients have been changed to return `void` instead of -`HttpWebResponse` which needed to be explicitly disposed by the callee. - -To access the `HttpWebResponse`, Request DTO's can be changed to `IReturn` - -```csharp -public class EmptyResponse : IReturn { ... } -``` - -Alternatively the Response can be specified on the call-site with: - -```csharp -HttpWebResponse response = client.Get(new EmptyResponse()); -``` - -# v4.0.32 Release Notes - -## FSharp Add ServiceStack Reference! - -We're happy to announce that the next language supported by [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) is F#! - -For a quick overview, [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) is a simple solution to WCF's Add Service Reference that provides a flexible alternative to sharing your compiled server DTO's assembly with clients. Now F# clients can easily add a reference to a remote ServiceStack instance and update typed DTO's directly from within VS.NET - reducing the burden and effort required to consume ServiceStack Services. - -### Example Usage - -The easiest way to Add a ServiceStack reference to your project is to right-click on your project to bring up [ServiceStackVS's](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) **Add ServiceStack Reference** context-menu item. This opens a dialog where you can add the url of the ServiceStack instance you want to typed DTO's for, as well as the name of the T4 template that's added to your project. - -[![Add ServiceStack Reference](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/add-service-ref-flow.png)](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/add-service-ref-flow.png) - -After clicking OK, the servers DTO's and [ServiceStack.Client](https://www.nuget.org/packages/ServiceStack.Client) NuGet package are added to the project, providing an instant typed API: - -[![Calling ServiceStack Service with FSharp](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/fsharp-add-servicestack-reference.png)](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/fsharp-add-servicestack-reference.png) - -### Updating a ServiceStack Reference - -Updating a ServiceStack reference works intuitively where you can right-click on the DTO's you want to update and click **Update ServiceStack Reference** on the context menu: - -[![Calling ServiceStack Service with FSharp](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/fsharp-update-servicestack-reference.png)](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/fsharp-update-servicestack-reference.png) - -### F# Client Example - -Just like with C#, F# Native Types can be used in ServiceStack's [Generic Service Clients](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client) providing and end-to-end Typed API whose PCL support also allows F# to be used in [mobile clients apps](https://github.com/ServiceStackApps/HelloMobile) as well. The basic [stackapis.servicestack.net](http://stackapis.servicestack.net/) Services example in F# looks like: - -```fsharp -let client = new JsonServiceClient("http://stackapis.servicestack.net") -let response = client.Get(new SearchQuestions( - Tags = new List([ "redis"; "ormlite" ]))) - -TypeSerializer.PrintDump(response) -``` - -## FSharp Native Types Notes - -Add ServiceStack Reference in FSharp projects works a little different to C# projects which [utilizes VS.NET's built-in T4 support](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference#add-servicestack-reference) to provide customization of DTO's on the client that auto-runs the T4 template implicitly on **Save** or explicitly with the **Run Custom Tool** context menu item. - -Since there's no support for T4 templates in F# Projects, clicking **Add ServiceStack Reference** skips the T4 template and just adds the generated F# Types using the server defaults. This ends up providing a simpler experience for F# clients in the default case. Customization of default behavior can still be done on the Server: - -### Change Default Server Configuration - -The above defaults are also overridable on the ServiceStack Server by modifying the default config on the `NativeTypesFeature` Plugin, e.g: - -```csharp -var typesConfig = this.GetPlugin().MetadataTypesConfig; -typesConfig.AddDataContractAttributes = false; -... -``` - -## F# Native Types Constraints - -As the ordering constraint in F# conflicted with the ordering of types by C# namespaces, the cleanest approach was to add all DTO's under a single namespace. By default the namespace used will be the base **ServiceModel** namespace which is overridable with the `GlobalNamespace` Config: - -```csharp -typesConfig.GlobalNamespace = "Client.Namespace"; -``` - -This does mean that each DTO type name needs to be unique which is a best-practice that's now a requirement in order to make use of F# native types. Another semantic difference is that any C# partial classes are converted into top-level classes in F#. - -For more documentation about F# Native Types including info on each of the config options supported checkout the [F# Add ServiceStack Reference wiki](https://github.com/ServiceStack/ServiceStack/wiki/FSharp-Add-ServiceStack-Reference). - -### [Upgrade ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) - -To take advantage of this F# Add ServiceStack Reference [Upgrade or Install ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) VS.NET Extension. If you already have **ServiceStackVS** installed, uninstall it first from `Tools -> Extensions and Updates... -> ServiceStackVS -> Uninstall`. - -### Nested classes and Enums - -Support for Enums and Nested classes are now supported on both C# and F# Native Types. - -## Improved integration with MVC and ASP.NET - -We've improved integration for making use of ServiceStack components in existing ASP.NET MVC and WebForms Web Applications. The internals of `ServiceStackController` have been rewritten to share a common code-base with the new WebForms `ServiceStackPage` WebForms base page, both provide easy access to the same clean, high-performance components found in ServiceStack's `Service` base class, directly from within your MVC Controllers and WebForm pages. - -This is an outline of the API's found in MVC's `ServiceStackController` and WebForms `ServiceStackPage`: - -```csharp -public class ServiceStackController : Controller -{ - //... - IServiceStackProvider ServiceStackProvider { get; set; } - IAppSettings AppSettings { get; set; } - IHttpRequest ServiceStackRequest { get; set; } - IHttpResponse ServiceStackResponse { get; set; } - ICacheClient Cache { get; set; } - IDbConnection Db { get; set; } - IRedisClient Redis { get; set; } - IMessageFactory MessageFactory { get; set; } - IMessageProducer MessageProducer { get; set; } - ISessionFactory SessionFactory { get; set; } - ISession SessionBag { get; set; } - bool IsAuthenticated { get; set; } - - T TryResolve(); - T ResolveService(); - object Execute(object requestDto); - object ForwardRequestToServiceStack(IRequest request=null); - IAuthSession GetSession(bool reload = true); - TUserSession SessionAs(); - void ClearSession(); - void PublishMessage(T message); -} -``` - -### Use ServiceStack Authentication - -One benefit of integration with ServiceStack is to be able to make use of ServiceStack's simple and flexible [Authentication Providers](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization) which require minimal configuration and supports a number of different [Session Providers](https://github.com/ServiceStack/ServiceStack/wiki/Caching) and persistent [Data Store back-ends](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization#userauth-persistence---the-iuserauthrepository) to make it easy to integrate with an existing environment. - -### New MVC and WebForms Examples - -To illustrate the seamless integration with ServiceStack, we've created 2 new authentication-enabled example websites: - - - **ASP.NET MVC** Live Demo: [mvc.servicestack.net](http://mvc.servicestack.net/) and [source code](https://github.com/ServiceStack/Test/tree/master/src/Mvc) - - **ASP.NET WebForms** Live Demo: [webforms.servicestack.net](http://webforms.servicestack.net/) and [source code](https://github.com/ServiceStack/Test/tree/master/src/WebForms) - -![MVC with ServiceStack Authentication](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/mvc-integration.png) - -### Integrating with ServiceStack from MVC or WebForms - -We'll go through the MVC example to showcase the different ways you can integrate with ServiceStack from an external Web Framework. - -#### Using ResolveService to call Services directly - -The `Login` Action is a standard MVC Action handling HTML Form input accepting 3 parameters, a `userName`, `password` as well as a relative `redirect` url to redirect to when authentication is successful. Login uses the `ResolveService` API which just resolves an auto-wired instance of the ServiceStack `AuthenticateService` from the IOC and injects the current HTTP Request context, which we then use to call a method on the Service directly: - -```csharp -public ActionResult Login(string userName, string password, string redirect=null) -{ - if (ModelState.IsValid) - { - try - { - using (var authService = ResolveService()) - { - var response = authService.Authenticate(new Authenticate { - provider = CredentialsAuthProvider.Name, - UserName = userName, - Password = password, - RememberMe = true, - }); - - // add ASP.NET auth cookie - FormsAuthentication.SetAuthCookie(userName, true); - - return Redirect(string.IsNullOrEmpty(redirect) ? "/" : redirect); - } - } - catch (Exception ex) - { - ModelState.AddModelError(string.Empty, ex.Message); - } - } - - return View("Index", GetViewModel()); -} -``` - -> Since the above example calls the Service method directly any exceptions raised by the Service implementation are thrown and caught as normal. - -#### Using Execute to process Request DTO's - -The `Logout()` MVC Action uses ServiceStack's `Execute()` API which can call the desired ServiceStack Service with just a populated Request DTO: - -```csharp -public ActionResult Logout() -{ - Execute(new Authenticate { provider = "logout" }); - FormsAuthentication.SignOut(); - - return Redirect("/"); -} -``` - -#### Using ForwardRequestToServiceStack to proxy HTTP Requests - -The `ForwardingController` handles OAuth callbacks that have been configured to callback to `/auth/*` route which is handled by MVC as ServiceStack is mounted at and only configured to handle `/api` requests. - -Instead of creating new OAuth Applications with each provider to use the new `/api/auth/*` callback url so ServiceStack can handle the OAuth callback, we can use just use the new `ForwardRequestToServiceStack()` which just forwards the incoming HTTP Request from MVC to ServiceStack to process, effectively acting as a proxy: - -```csharp -routes.MapRoute("Forwarding", "auth/{*pathinfo}", - new { controller = "Forwarding", action = "Index" }); -... - -public class ForwardingController : ServiceStackController -{ - public ActionResult Index() - { - var response = ForwardRequestToServiceStack(); - if (ServiceStackResponse.IsClosed) return new EmptyResult(); - - string redirectUrl; - var httpResult = response as IHttpResult; - if (httpResult != null && httpResult.Headers.TryGetValue(HttpHeaders.Location, out redirectUrl)) - return Redirect(redirectUrl); - - return Redirect("/"); - } -} -``` - -The `Execute()` and `ForwardRequestToServiceStack()` are high-level API's that call into ServiceStack's internal Request pipeline, executing any Action Filters and also converts any exceptions into a populated serializable Response DTO with a populated `ResponseStatus` as would be returned to Service Clients. - -### Authentication Attributes - -Since we're using ServiceStack for Authentication, we're also able to re-use ServiceStack's Authentication Attribute Filters directly on MVC Controllers and WebForm Pages just as if they were ServiceStack Services, e.g: - -```csharp -[Authenticate] -public class AuthOnlyController : ServiceStackController -{ - public ActionResult Index() - { - return View(SessionAs()); - } -} -``` - -The above controller hanldes the [mvc.servicestack.net/AuthOnly](http://mvc.servicestack.net/AuthOnly) route which only allows access to Authorized users. If a user is not authenticated they're automatically redirected to [/?redirect=/AuthOnly#f=Unauthorized](http://mvc.servicestack.net/?redirect=%2fAuthOnly#f=Unauthorized) to prompt the user to login, after successfully logging in it will redirect back to the original `/AuthOnly` url. - -### Required Role or Permission - -The `[RequiredRole]` and `[RequiredPermission]` attributes work similar to the `[Authentication]` attribute except they also assert that the user is a member of the specified role: - -```csharp -[RequiredRole("TheRole")] -public class RequiresRoleController : ServiceStackController -{ - public ActionResult Index() - { - return View(SessionAs()); - } -} -``` - -The above Controller handles the [/RequiresRole](http://mvc.servicestack.net/RequiresRole) Route and will only grant access if the Authenticated User is also a member of the **TheRole**. - -### Calling ServiceStack Services Directly - -The simplest way to consume ServiceStack Services requiring the least effort and moving parts is to call them directly: - -#### Using ServiceStack OAuth in MVC - -Integrating with ServiceStack's OAuth providers requires the least effort as they're linkable directly in the format `/api/auth/{provider}` which is handled by ServiceStack's OAuth Service who initiates the Authentication process by redirecting to the selected OAuth provider: - -![MVC OAuth with HTML](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/mvc-auth.png) - -#### Calling ServiceStack with Ajax in MVC - -Posting HTML Forms directly to ServiceStack Services isn't that much more effort, Start with a plain HTML Form with field names that match with the Services property names: - -![MVC Register with HTML](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/mvc-register.png) - -We can then use ServiceStack's built-in [ss-utils.js JavaScript Libraray](https://github.com/ServiceStack/ServiceStack/wiki/ss-utils.js-JavaScript-Client-Library) to take care of Ajaxifying, auto-binding and submitting the form via Ajax. It also has built-in support for [Bootstrap Forms Field Validation conventions](https://github.com/ServiceStack/ServiceStack/wiki/ss-utils.js-JavaScript-Client-Library#bootstrap-forms) to automatically bind errors to the appropriate fields. The only custom code required is to bind the form is then: - -```javascript -$("#form-register").bindForm({ - success: function (r) { location.href = '/'; } -}); -``` - -In this case we've added a success callback to redirect to the home page if the registration was successful which will either be authenticated with the newly registered user if **Auto Login** was checked, otherwise you can use the login form to Sign in as the newly registered user. - -## [Server Events](https://github.com/ServiceStack/ServiceStack/wiki/Server-Events) - -There are new custom hooks on `ServerEventsFeature` to allow for further customization and deeper introspection of ServiceStack's Server Events: - - - `OnInit` - Invoked when clients first connect to the `event-stream`, can be used to add additional HTTP Headers back to the client - - `OnPublish` - Fired after each message is published with the active Response and the raw message that was published - -### Add Authentication support to .NET ServerEvents Client - -There are new explicit `Authenticate` and `AuthenticateAsync` API's which can be used to authenticate the ServerEvents ServiceClient which now **shares cookies** with the WebRequest that connects to the `/event-stream` so authenticating with the Server Events ServiceClient will also authenticate the `/event-stream` HTTP Connection: - -```csharp -client.Authenticate(new Authenticate { - provider = CredentialsAuthProvider.Name, - UserName = "user", - Password = "pass", - RememberMe = true, -}); - -client.Start(); -``` - -Which is also equivalent to: - -```csharp -client.ServiceClient.Post(new Authenticate { - provider = CredentialsAuthProvider.Name, - UserName = "user", - Password = "pass", - RememberMe = true, -}); -``` - -### Limiting Server Events to Authenticated Clients Only - -There's a new `LimitToAuthenticatedUsers` option in `ServerEventsFeature` to limit access to authenticated clients only: - -```csharp -Plugins.Add(new ServerEventsFeature { - LimitToAuthenticatedUsers = true, -}); -``` - -When enabled it will return a `401 Unauthorized` for non-authenticated clients. - -### JavaScript ServerEvents Client - -The [Server Events JavaScript Client](https://github.com/ServiceStack/ServiceStack/wiki/JavaScript-Server-Events-Client) now auto-reconnects when a heartbeat request fails by calling the new `$.ss.reconnectServerEvents()` API. - -## Funq IOC - -Funq now supports Lazy dependencies where you can `Func` factories to delay the resolution of dependencies to only when the Service is needed. The factories also support Multiple lazy arguments (up to 3 args): - -```csharp -container.RegisterAutoWiredAs(); -container.RegisterAutoWiredAs(); -container.RegisterAutoWiredAs(); - -container.RegisterAutoWired(); - -public class Dependency -{ - Func ctorFoo; - public Dependency(Func ctorFoo) - { - this.ctorFoo = ctorFoo; - } - - public Func Foo { get; set; } - - public Func FooBar { get; set; } - - public Func FooBarBaz { get; set; } - - public object Execute() - { - int total = 0; - var foo = ctorFoo(); - var bar = FooBar(foo); - var baz = FooBarBaz(foo, bar); - return bax.Execute(); - } -} -``` - -An alternative approach to resolving lazy dependency is to use a Lazy Property which is our preferred approach since allows the call-site to be transparent and retain a clean API, e.g: - -```csharp -public virtual IDbConnectionFactory DbFactory { get; set; } - -IDbConnection db; -public virtual IDbConnection Db -{ - get { return db ?? (db = DbFactory.OpenDbConnection()); } -} -``` - -This technique is used in the built-in [Repository Base](https://github.com/ServiceStack/ServiceStack/blob/8dcbbdb7dbe20fd3201cde100370564e8577a019/src/ServiceStack/ILogic.cs#L38) and [Logic Base](https://github.com/ServiceStack/ServiceStack/blob/8dcbbdb7dbe20fd3201cde100370564e8577a019/src/ServiceStack/ILogic.cs#L55) base classes which your dependencies can inherit from to enable lazy access to common ServiceStack providers. - -## App Settings - -### New Providers - -There's a new `EnvironmentVariableSettings` AppSettings provider to source configuration from Environment variables as well as a new `MultiAppSettings` AppSettings provider that enables reading configuration from multiple configuration sources. - -With these new providers we can setup a cascading configuration that first checks Environment variables, then looks in a local `~/appsettings.txt` plain-text file before falling back to `Web.config`: - -```csharp -AppSettings = new MultiAppSettings( - new EnvironmentVariableSettings(), - new TextFileSettings("~/appsettings.txt".MapHostAbsolutePath()), - new AppSettings()); -``` - -### New Apis - -New `GetAllKeys()` and `Exists()` were added to all `IAppSettings` providers: - -```csharp -public interface IAppSettings -{ - List GetAllKeys(); - bool Exists(string key); - //... -} -``` - -This makes it easy to scan and retrieve all related keys, e.g: - -```csharp -var devKeys = appSettings.GetAllKeys().Where(x => x.Matches("Dev.*")); -``` - -## [Session](https://github.com/ServiceStack/ServiceStack/wiki/Sessions) - -### Use HTTP Headers to Send Session Cookies - -You can now make a Session-enabled request with HTTP Headers instead of Cookies. The Session HTTP Headers have a `X-` prefix before the Session Id, i.e: `X-ss-id`, `X-ss-pid` and `X-ss-opts` - -### New API's for Session Bag - -New API's for storing and retrieving POCO's in a session bag without specifying a key (key defaults to Type Name): - -```csharp -SessionBag.Set(unAuthInfo); -var unAuthInfo = SessionBag.Get(); -``` - -New `GetSessionBag()` extension methods on `IRequest` and `IServiceBase` make it easier to access the users dynamic Session Bag from outside of a Service. E.g the example below shows how to copy any Anonymous User Session info into the Users typed Session when they Sign In: - -```csharp -public class CustomUserSession : AuthUserSession -{ - [DataMember] - public string UnAuthInfo { get; set; } - - public override void OnAuthenticated(IServiceBase authService, IAuthSession session, - IAuthTokens tokens, Dictionary authInfo) - { - UnAuthInfo = authService.GetSessionBag().Get(); - } -} -``` - -## OrmLite - -### New OrderBy API's for Joined Tables - -You can now Order By fields from Joined Tables in an SqlExpression: - -```csharp -var q = db.From() - .Join() - .OrderBy(x => x.Name); -``` - -### Count Queries - - - New `RowCount()` API added to return the number of rows in a query - - Aggregate `Count()` queries that return more than a single row are summed together - -### SelectInto Mapping - - - You no longer need to repeat `[Alias]` attributes when projecting results into different types with `db.SelectInto` API's as fields are now mapped by POCO Property names - -## ServiceStack.Text - - - Default delimiter of `ParseKeyValueText` changed from `:` to ` ` (space) - - New `string.Matches()` extension method to perform Glob-style matches - - `GetGenericType()` extension has been renamed to the more appropriate `FirstGenericType()` - - The `__type` info for late-bound types is no longer affected by white-space - -## Other - - - Metadata detail pages now include any types referenced in the Request and Response DTOs - - Rabbit MQ Clients no longer auto-declare Server Named Queues `amq.*` - -## Community - -### New [ServiceStack Succinctly](http://www.agile-code.com/blog/servicestack-succinctly-free-e-book/) Free e-book! - -[ServiceStack Succinctly](http://www.agile-code.com/blog/servicestack-succinctly-free-e-book/) is a new free e-book by [Zoran Maksimovic](https://twitter.com/zoranmax) which runs through the basics of creating and implementing a simple order management system with ServiceStack: - -Free ServiceStack Succinctly e-book - -### Table of Contents - - 1. ServiceStack Overview - 2. ServiceStack Basics - 3. Order Management System - 4. Solution Configuration - 5. Service Implementation - 6. Pagination - 7. Authentication - 8. Caching - 9. Logging - 10. Profiling - 11. Extending ServiceStack - 12. Documenting Web Services - -# v4.0.31 Release Notes - -The most requested feature since our last release was to expand our last releases support for [Server Sent Events](https://github.com/ServiceStackApps/Chat#server-sent-events) with both a scale-out **Redis ServerEvents back-end** for use in load-balanced App Servers scenarios as well as a **typed C# ServerEvents Client** - we're happy to announce we've been able to deliver both features in this release! - -#### Major features in this release - - - Server Events - - [Redis ServerEvents](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#redis-serverevents) - - [C# ServerEvents Client](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#c-serverevents-client) - - Redis - - [Redis Pub/Sub Server](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#redis-pubsub-server) - - AppSettings - - [First-class AppSettings](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#first-class-appsettings) - - [Writable AppSettings API](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#appsettings-are-now-writable) - - [Metadata Pages](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#metadata-pages) - - Authentication - - [WebSudo](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#web-sudo) - - [Auth Events](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#auth-events) - - [OrmLite](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#ormlite) - - [Text](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#text) - - Community - - [ServiceStack MiniProfiler Toolkit](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#servicestack-miniprofiler-toolkit) - -## Redis ServerEvents - -One limitation the default `MemoryServerEvents` implementation has is being limited for use within a single App Server where all client connections are maintained. This is no longer a limitation with the new **Redis ServerEvents back-end** which utilizes a distributed redis-server back-end to provide a scale-out option capable of serving fan-out/load-balanced App Servers. If you're familiar with SignalR, this is akin to [SignalR's scaleout with Redis back-end](http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-with-redis). - -`RedisServerEvents` is a drop-in replacement for the built-in `MemoryServerEvents` that's effectively a transparent implementation detail, invisible to Server or Client API's where both implementations even [share the same integration Tests](https://github.com/ServiceStack/ServiceStack/blob/b9eb34eb80ff64fa1171d2f7f29ef359c3580eed/tests/ServiceStack.WebHost.Endpoints.Tests/ServerEventTests.cs#L169-L189). - -![Redis ServerEvents Scale Out](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/gap/Chat/redis-scaleout.png) - -### Enabling RedisServer Events - -As a drop-in replacement it can easily be configured with just a few lines of code, as seen in the updated Chat App which can run on either [Memory or Redis ServerEvents providers](https://github.com/ServiceStackApps/Chat/blob/326617e88272d7cc0a8b7513272cf055378957e2/src/Chat/Global.asax.cs#L46-L54): - -```csharp -var redisHost = AppSettings.GetString("RedisHost"); -if (redisHost != null) -{ - container.Register(new PooledRedisClientManager(redisHost)); - - container.Register(c => - new RedisServerEvents(c.Resolve())); - - container.Resolve().Start(); -} -``` - -The above configuration will use Redis ServerEvents if there's a `RedisHost` **appSetting** in Chat's [Web.config](https://github.com/ServiceStackApps/Chat/blob/326617e88272d7cc0a8b7513272cf055378957e2/src/Chat/Web.config#L21): - -```xml - -``` - -### Cross-platform Memory and Redis ServerEvent Enabled Chat.exe - -To showcase Redis ServerEvents in action, we've prepared a stand-alone [ServiceStack.Gap](https://github.com/ServiceStack/ServiceStack.Gap) version of [Chat](http://chat.servicestack.net) compiled down into a single **Chat.exe** that can run on either Windows and OSX with Mono which can be downloaded from: - -### [Chat.zip](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/Chat.zip) (1.2MB) - -[![Redis ServerEvents Preview](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/redis-server-events.gif)](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/Chat.zip) - -> As Chat only runs on **2 back-end Services**, it fits well within [ServiceStack's Free Quota's](https://servicestack.net/download#free-quotas) which can be further customized and enhanced without a commercial license. - -Running **Chat.exe** without any arguments will run Chat using the default **Memory ServerEvents**. This can be changed to use **Redis ServerEvents** by [un-commenting this line in appsettings.txt](https://github.com/ServiceStack/ServiceStack.Gap/blob/master/src/Chat/Chat/appsettings.txt#L5): - -``` -#redis localhost -``` - -This will require a **redis-server** running on `localhost`. If you don't have redis yet, [download redis-server for Windows](https://github.com/ServiceStack/redis-windows). - -Alternatively you can specify which **port** to run Chat on and change it to use Redis ServerEvents by specifying the **redis** instance it should connect to on the command-line with: - -``` -Chat.exe /port=1337 /redis=localhost -``` - -Also included in `Chat.zip` are [test-fanout-redis-events.bat](https://github.com/ServiceStack/ServiceStack.Gap/blob/master/src/Chat/build/test-fanout-redis-events.bat) and equivalent [test-fanout-redis-events.sh](https://github.com/ServiceStack/ServiceStack.Gap/blob/master/src/Chat/build/test-fanout-redis-events.sh) helper scripts for **spawning multiple versions of Chat.exe** on different ports (and backgrounds) for **Windows or OSX**, showing how multiple clients are able to send messages to each other via Redis whilst being subscribed to different HTTP Servers: - -``` -START Chat.exe /port=1337 /redis=localhost -START Chat.exe /port=2337 /redis=localhost /background=http://bit.ly/1oQqhtm -START Chat.exe /port=3337 /redis=localhost /background=http://bit.ly/1yIJOBH -``` - -This script was used to create the animated gif above to launch **3 self-hosting instances of Chat.exe** running on **different ports**, all connected to each other via Redis. This enables some interesting peer-to-peer scenarios where users are able to run a network of (CPU/resource isolated) decentralized stand-alone HTTP Servers on their local machines, but can still communicate with each other via redis. - -## C# ServerEvents Client - -Like ServiceStack's other [C# Service Clients](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client), the new `ServerEventsClient` is a [portable library](https://github.com/ServiceStackApps/HelloMobile) contained in the `ServiceStack.Client` NuGet package: - -``` -PM> Install-Package ServiceStack.Client -``` - -And like the Service Clients it requires the `BaseUri` of your ServiceStack instance as well as an optional `channel` for the client to subscribe to: - -```csharp -var client = new ServerEventsClient("http://chat.servicestack.net", channel:"home"); -``` - -### Managed Connection - -The **C# ServerEvent Client** is a managed .NET client with feature parity with the [ServiceStack's JavaScript client](https://github.com/ServiceStackApps/Chat#client-bindings---ss-utilsjs) that **auto-reconnects** when a connection is lost, **sends periodic heartbeats** to maintain an active subscription as well as **auto-unregistering** once the client stops listening for messages, or gets disposed. - -### Handling Server Events - -Unlike other C# clients, the ServerEvents Client is mainly reactive in that it's primarily waiting for Server Events to be initiated from a remote server instead of the typical scenario in which requests are initiated by clients. To maximize utility, there are a number of different API's to receive and process messages: - -### Assigning Callback Handlers - -One way to receive messages (useful in long-running clients) is to assign handlers for each of the different events that are fired. This example shows how to capture all the different events a Client can receive: - -```csharp -ServerEventConnect connectMsg = null; -var msgs = new List(); -var commands = new List(); -var errors = new List(); - -var client = new ServerEventsClient(baseUri) { - OnConnect = e => connectMsg = e, - OnCommand = commands.Add, - OnMessage = msgs.Add, - OnException = errors.Add, -}.Start(); -``` - -Once the Client is configured, calling `Start()` will start listening for messages and calling `Stop()` or `Dispose()` will cancel the background HTTP connection and stop it listening for server events. - -### Customizing Metadata sent to clients - -As ServerEvents have deep integration with the rest of ServiceStack we're able to offer [Typed Messages](https://github.com/ServiceStack/ServiceStack/blob/71b51d231d1ddb2ba7da39613e216ab75fd181c0/src/ServiceStack.Client/ServerEventsClient.cs#L14-L44) containing the users `UserAuthId`, `DisplayName` and `ProfileUrl` of the users avatar when it's available. The typed messages also offer an extensible `Dictionary Meta` collection for maintaining custom metadata that can be sent to clients by appending to them in the ServerEventsFeature hooks, which can be defined when registering `ServerEventsFeature`: - -```csharp -Plugins.Add(new ServerEventsFeature { - // private Connect args - OnConnect = (subscription,httpReq) => AppendTo(subscription.Meta), - - // public Join/Leave args - OnCreated = (subscription,httpReq) => AppendTo(subscription.Meta), -}) -``` - -### Using C# Async/Await friendly API's - -Depending on your use-case, if you only want to use the ServerEvent Client for a short-time to listen for predictable responses (i.e. waiting for a Server callback on a pending request) you can alternatively use the Task-based API's letting you to participate in C# async/await workflows: - -```csharp -var client = new ServerEventsClient(baseUri, channel="Home"); - -// Wait to receive onConnect event -ServerEventConnect connectMsg = await client.Connect(); - -// Wait to receive onJoin command event -ServerEventCommand joinMsg = await client.WaitForNextCommand(); - -// Hold a future task to get notified once a msg has been received -Task msgTask = client1.WaitForNextMessage(); - -// Send a Web Service Request using the built-in JsonServiceClient -client.ServiceClient.Post(new PostChatToChannel { - Channel = client.Channel, // The channel we're listening on - From = client.SubscriptionId, // SubscriptionId Populated after Connect() - Message = "Hello, World!", -}); - -// Wait till we receive the chat Msg event we sent earlier -ServerEventMessage msg = await msgTask; -``` - -The above example showcases the **3 Task-based API's** available: - - 1. `Connect()` wait till receiving confirmation of a successful event subscription - 2. `WaitForNextCommand()` wait for the next `onJoin` or `onLeave` subscription events - 3. `WaitForNextMessage()` wait for the next message published to the channel - -The `ServiceClient` property lets you access a `JsonServiceClient` that's pre-configured with the clients `BaseUri` so that is primed for Sending Web Service Requests with. - -After the ServerEvent Client has connected, the `ConnectionInfo` property is populated with the typed `ServerEventConnect` response. - -### Message Event Handlers - -The above examples show generic API's for receiving any type of message, but just like in the JavaScript client, more fine-grained API's are available for handling specific message types. - -The `Handlers` dictionary is akin to the JavaScript Client's [Global Event Handlers](https://github.com/ServiceStackApps/Chat#global-event-handlers) which specify lambda's to be executed when messages are sent with the `cmd.*` selector: - -```csharp -client.Handlers["chat"] = (client, msg) => { - var chatMsg = msg.Json.FromJson(); //Deserialize JSON string to typed DTO - "Received '{0}' from '{1}'".Print(chatMsg.Message, chatMsg.FromName); -}; -``` - -Roughly translates to the equivalent JavaScript below: - -```javascript -$(source).handleServerEvents({ - handlers: { - chat: function (msg, event) { - console.log("Received " + msg.message + " from " + msg.fromName); - } - } -}); -``` - -Where both methods handle the `ChatMessage` sent with the `cmd.chat` selector. - -### Named Receivers - -Whilst handlers provide a light way to handle loose-typed messages, there's a more structured and typed option that works similar to ServiceStack's `IService` classes but are used to instead handle typed Server Event Messages. - -To be able to handle messages with your own classes, get them to implement the `IReceiver` empty marker interface: - -```csharp -public interface IReceiver -{ - void NoSuchMethod(string selector, object message); -} -``` - -Whilst primarily a marker interface, `IReceiver` does include a `NoSuchMethod` API to be able to handle messages sent with a unknown selector **target** that doesn't match any defined method or property. - -**Named Receivers** are equivalent to [Receivers](https://github.com/ServiceStackApps/Chat#receivers) in the JavaScript client which can be assigned to handle all messages sent to a receiver with the selector format: - -``` -{receiver}.{target} -``` - -A Named Receiver can be registered with the API below: - -```csharp -client.RegisterNamedReceiver("test"); -``` - -Which will forward all messages with a `test.*` selector to an instance of the `TestNamedReceiver` Type - -```csharp -public class TestNamedReceiver : ServerEventReceiver -{ - public void FooMethod(CustomType request) {} // void return type - - public CustomType BarMethod(CustomType request) - { - return request; // works with any return type, which are ignored - } - - public CustomType BazSetter { get; set; } // Auto populate properties - - public override void NoSuchMethod(string selector, object message) - { - var msg = (ServerEventMessage)message; - var nonExistentMethodCustomType = msg.Json.FromJson(); - } -} -``` - -This is roughly equivalent to the following JavaScript code: - -```javascript -$(source).handleServerEvents({ - receivers: { - test: { - FooMethod: function (msg, event) { ... }, - BarMethod: function (msg, event) { ... }, - BazSetter: null, - } - } -}); -``` - -> The [ServerEventReceiver](https://github.com/ServiceStack/ServiceStack/blob/68c7159037e7cf2a519d482b7dae524ca073da20/src/ServiceStack.Client/ServerEventsClient.Receiver.cs#L16-L28) is a convenient base class that in addition to implementing `IReceiver` interface, gets injected with the `Client` as well as additional context about the raw message available in `base.Request`. - -#### Unknown Message Handling - -One difference in the JavaScript client is that messages with **unknown** targets are assigned as properties on the `test` receiver, e.g `test.QuxTarget = {..}`. - -### Sending messages to Named Receivers - -Once registered, an instance of `TestNamedReceiver` will process messages sent with a `test.*` selector. The example below shows how to send a DTO to each of `TestNamedReceiver` defined methods and properties: - -```csharp -public class MyEventServices : Service -{ - public IServerEvents ServerEvents { get; set; } - - public void Any(CustomType request) - { - ServerEvents.NotifyChannel("home", "test.FooMethod", request); - ServerEvents.NotifyChannel("home", "test.BarMethod", request); - ServerEvents.NotifyChannel("home", "test.BazSetter", request); - - ServerEvents.NotifyChannel("home", "test.QuxTarget", request); - } -} -``` - -### Life-cycle of Receivers - -Similar to **Services** in ServiceStack, each message is processed with an instance of the Receiver that's resolved from `ServerEventsClient.Resolver` which by default uses the [NewInstanceResolver](https://github.com/ServiceStack/ServiceStack/blob/ec0226b97227048c3bd7c24667a71e7af7e1ff31/src/ServiceStack.Client/ServerEventsClient.Receiver.cs#L30-L36) to execute messages using a new instance of the Receiver Type: - -```csharp -public class NewInstanceResolver : IResolver -{ - public T TryResolve() - { - return typeof(T).CreateInstance(); - } -} -``` - -This can be changed to re-use the same instance by assigning a [SingletonInstanceResolver](https://github.com/ServiceStack/ServiceStack/blob/ec0226b97227048c3bd7c24667a71e7af7e1ff31/src/ServiceStack.Client/ServerEventsClient.Receiver.cs#L38-L46) instead: - -```csharp -public class SingletonInstanceResolver : IResolver -{ - ConcurrentDictionary Cache = new ConcurrentDictionary(); - - public T TryResolve() - { - return (T)Cache.GetOrAdd(typeof(T), type => type.CreateInstance()); - } -} - -client.Resolver = new SingletonInstanceResolver(); -``` - -We can also have it resolve instances from your preferred IOC. Here's an example showing how to register all Receiver Types, auto-wire them with any custom dependencies, and instruct the client to resolve instances from our IOC: - -```csharp -// Register all Receivers: -client.RegisterNamedReceiver("test"); -... - -// Register all dependencies used in a new Funq.Container: -var container = new Container(); -container.RegisterAs(); - -// Go through an auto-wire all Registered Receiver Types with Funq: -container.RegisterAutoWiredTypes(client.ReceiverTypes); - -// Change the client to resolve receivers from the new Funq Container: -client.Resolver = container; -``` - -We can assign `Funq.Container` directly as it already implements the [IResolver](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Interfaces/Configuration/IResolver.cs) interface, whilst you can re-use the existing IOC **Container Adapters** to [enable support for other IOCs](https://github.com/ServiceStack/ServiceStack/wiki/The-IoC-container#use-another-ioc-container). - -### The Global Receiver - -Whilst Named Receivers are used to handle messages sent to a specific namespaced selector, the client also supports registering a **Global Receiver** for handling messages sent with the special `cmd.*` selector. - -#### Handling Messages with the Default Selector - -All `IServerEvents` Notify API's inlcudes [overloads for sending messages without a selector](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/ServerEventsFeature.cs#L743-L771) that by convention will take the format `cmd.{TypeName}`. - -These events can be handled with a Global Receiver **based on Message type**, e.g: - -```csharp -public class GlobalReceiver : ServerEventReceiver -{ - public SetterType AnyNamedProperty { get; set; } - - public void AnyNamedMethod(CustomType request) - { - ... - } -} - -client.RegisterReceiver(); -``` - -Which will be called when messages are sent without a selector, e.g: - -```csharp -public class MyServices : Service -{ - public IServerEvents ServerEvents { get; set; } - - public void Any(Request request) - { - ServerEvents.NotifyChannel("home", new CustomType { ... }); - ServerEvents.NotifyChannel("home", new SetterType { ... }); - } -} -``` - -As Global Receivers handle other messages sent with the `cmd.*` selector and can be re-used as a named receiver, we can define a single class to handle all the different custom messages sent in [chat.servicestack.net](http://chat.servicestack.net) App, E.g: - -``` -cmd.chat Hi -cmd.announce This is your captain speaking... -cmd.toggle#channels -css.background-image url(https://servicestack.net/img/bg.jpg) -... -``` - -The above messages can all be handled with the Receiver below: - -```csharp -public class JavaScriptReceiver : ServerEventReceiver -{ - public void Chat(ChatMessage message) { ... } - public void Announce(string message) { ... } - public void Toggle(string message) { ... } - public void BackgroundImage(string cssRule) { ... } -} - -client.RegisterNamedReceiver(); -client.RegisterNamedReceiver("css"); -``` - -As seen above the **target** names are **case-insensitive** and `-` are collapsed to cater for JavaScript/CSS naming conventions. - -## ServiceStack.Redis - -### Redis Pub/Sub Server - -To power RedisServerEvents we've extracted the managed Pub/Sub long-running message-loop originally built for [Redis MQ](https://github.com/ServiceStack/ServiceStack/wiki/Messaging-and-Redis) and encapsulated it into a re-usable class that can be used independently for handling messages published to specific [Redis Pub/Sub](http://redis.io/commands#pubsub) channels. - -`RedisPubSubServer` processes messages in a managed background thread that **automatically reconnects** when the redis-server connection fails and works like an independent background Service that can be stopped and started on command. - -The public API is captured in the [IRedisPubSubServer](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Interfaces/Redis/IRedisPubSubServer.cs) interface: - -```csharp -public interface IRedisPubSubServer : IDisposable -{ - IRedisClientsManager ClientsManager { get; } - // What Channels it's subscribed to - string[] Channels { get; } - - // Run once on initial StartUp - Action OnInit { get; set; } - // Called each time a new Connection is Started - Action OnStart { get; set; } - // Invoked when Connection is broken or Stopped - Action OnStop { get; set; } - // Invoked after Dispose() - Action OnDispose { get; set; } - - // Fired when each message is received - Action OnMessage { get; set; } - // Fired after successfully subscribing to the specified channels - Action OnUnSubscribe { get; set; } - // Called when an exception occurs - Action OnError { get; set; } - // Called before attempting to Failover to a new redis master - Action OnFailover { get; set; } - - int? KeepAliveRetryAfterMs { get; set; } - // The Current Time for RedisServer - DateTime CurrentServerTime { get; } - - // Current Status: Starting, Started, Stopping, Stopped, Disposed - string GetStatus(); - // Different life-cycle stats - string GetStatsDescription(); - - // Subscribe to specified Channels and listening for new messages - IRedisPubSubServer Start(); - // Close active Connection and stop running background thread - void Stop(); - // Stop than Start - void Restart(); -} -``` - -To use `RedisPubSubServer`, initialize it with the channels you want to subscribe to and assign handlers for each of the events you want to handle. At a minimum you'll want to handle `OnMessage`: - -```csharp -var clientsManager = new PooledRedisClientManager(); -var redisPubSub = new RedisPubSubServer(clientsManager, "channel-1", "channel-2") { - OnMessage = (channel, msg) => "Received '{0}' from '{1}'".Print(msg, channel) - }.Start(); -``` - -Calling `Start()` after it's initialized will get it to start listening and processing any messages published to the subscribed channels. - -## [App Settings](https://github.com/ServiceStack/ServiceStack/wiki/AppSettings) - -For many years our solution against using .NET's complex XML configuration for App configuration is to store structured configuration in the **Web.config** appSettings which thanks to the [JSV Format](https://github.com/ServiceStack/ServiceStack.Text/wiki/JSV-Format) makes it easy to read and write structured data from a single string value, e.g: - -```xml - - - - - - - -``` - -This can be easily parsed into C# types with the [IAppSettings](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Interfaces/Configuration/IAppSettings.cs) API: - -```csharp -IAppSettings settings = new AppSettings(); - -string value = settings.Get("String"); -int value = settings.Get("Int", defaultValue:1); -List values = settings.GetList("List"); -Dictionary valuesMap = settings.GetDictionary("Dict"); -MyConfig config = settings.Get("Poco", new MyConfig { Foo = "Baz" }); -``` - -Like other ServiceStack providers, `IAppSettings` is a clean interface with multiple providers letting you easily change or override where you want to source your App configuration from: - - - **DictionarySettings** - Maintain settings in an in-memory Dictionary - - **TextFileSettings** - Maintain settings in a plain-text file - - **OrmLiteAppSettings** - Maintain settings in any RDBMS `Config` table - -We take advantage of this in our [public OSS projects](https://github.com/ServiceStackApps/Chat) when we want to override [public appSettings with production settings](https://github.com/ServiceStackApps/HttpBenchmarks/blob/master/src/BenchmarksAnalyzer/Global.asax.cs#L29-L32) or in our [stand-alone Applications](https://github.com/ServiceStack/ServiceStack.Gap) by allowing us to ship our applications with more end-user friendly **plain-text config file** whose defaults are embedded in the stand-alone **.exe**, exporting it if it doesn't exist - letting us achieve a single, portable **.exe** that can be xcopy'ed and run as-is. - -### First class AppSettings - -After proving its value over the years we've decided to make it a first-class property on `IAppHost.AppSettings` which defaults to looking at .NET's App/Web.config's. - -The new [Chat.zip](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/Chat.zip) App explores different ways AppSettings can be used: - -If there's an existing `appsettings.txt` file where the **.exe** is run it will use that, otherwise it falls back to **Web.config** appSettings: - -```csharp -public AppHost() : base("Chat", typeof (ServerEventsServices).Assembly) -{ - var customSettings = new FileInfo("appsettings.txt"); - AppSettings = customSettings.Exists - ? (IAppSettings)new TextFileSettings(customSettings.FullName) - : new AppSettings(); -} -``` - -As a normal property in your AppHost, AppSettings can be accessed directly in `AppHost.Configure()`: - -```csharp -public void Configure(Container container) -{ - ... - var redisHost = AppSettings.GetString("RedisHost"); - if (redisHost != null) - { - container.Register(c => - new RedisServerEvents(new PooledRedisClientManager(redisHost))); - - container.Resolve().Start(); - } -} -``` - -Inside your services or IOC dependencies, like any other auto-wired dependency: - -```csharp -public class ServerEventsServices : Service -{ - public IAppSettings AppSettings { get; set; } - - public void Any(PostRawToChannel request) - { - if (!IsAuthenticated && AppSettings.Get("LimitRemoteControlToAuthenticatedUsers", false)) - throw new HttpError(HttpStatusCode.Forbidden, "You must be authenticated to use remote control."); - ... - } -} -``` - -Directly within Razor views: - -```html - -``` - -As well as outside ServiceStack, via the `HostContext` static class: - -```csharp -var redisHost = HostContext.AppSettings.GetString("redis"); -``` - -### AppSettings are now writable - -A new `Set()` API was added to [IAppSettings](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Interfaces/Configuration/IAppSettings.cs) letting you save any serializable property that works for all providers: - -```csharp -public interface IAppSettings -{ - void Set(string key, T value); - ... -} - -AppSettings.Set("Poco", new MyConfig { Foo = "Baz" }); -``` - -In providers that support writable configuration natively like `OrmLiteAppSettings` and `DictionarySettings`, the settings get written through to the underlying provider. For read-only providers like Web.config's `AppSettings` or `TextFileSettings` a **shadowed** cache is kept that works similar to prototypal shadowing in JavaScript where if a property doesn't exist, setting a property will be stored on the top-level object instance which also takes precedence on subsequent property access. - -## [Metadata Pages](https://github.com/ServiceStack/ServiceStack/wiki/Metadata-Page) - -The metadata pages have been expanded to include some of [Swagger API Attribute annotations](https://github.com/ServiceStack/ServiceStack/wiki/Swagger-API#swagger-attributes) which now shows the parameters for the Request and Response DTO's as well as any other DTO's used in each metadata operation page: - -![Metadata Type Info](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/metadata-swagger-api.png) - -When annotated the Description also shows any **allowable Enum values** or **range limits** when provided. - -#### HtmlFormat - -The humanize feature in [Auto HtmlFormat](https://github.com/ServiceStack/ServiceStack/wiki/HTML5ReportFormat) for splitting JoinedCase words with spaces can be disabled for all pages with: - -```csharp -HtmlFormat.Humanize = false; -``` - -Or on adhoc pages by adding `#dehumanize` hash param. - -## [Authentication](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization) - -### Web Sudo - -A common UX in some websites is to add an extra layer of protection for **super protected** functionality by getting users to re-confirm their password verifying it's still them using the website, common in places like confirming a financial transaction. - -**WebSudo** (by [@tvjames](https://github.com/tvjames)) is a new feature similar in spirit requiring users to re-authenticate when accessing Services annotated with the `[WebSudoRequired]` attribute. To make use of WebSudo, first register the plugin: - -```csharp -Plugins.Add(new WebSudoFeature()); -``` - -You can then apply WebSudo behavior to existing services by annotating them with `[WebSudoRequired]`: - -```csharp -[WebSudoRequired] -public class RequiresWebSudoService : Service -{ - public object Any(RequiresWebSudo request) - { - return request; - } -} -``` - -Once enabled this will throw a **402 Web Sudo Required** HTTP Error the first time the service is called: - -```csharp -var requiresWebSudo = new RequiresWebSudo { Name = "test" }; -try -{ - client.Send(requiresWebSudo); //throws -} -catch (WebServiceException) -{ - client.Send(authRequest); //re-authenticate - var response = client.Send(requiresWebSudo); //success! -} -``` - -Re-authenticating afterwards will allow access to the WebSudo service. - -### Auth Events - -In order to enable functionality like **WebSudo** we've added additional hooks into the Authentication process with `IAuthEvents`: - -```csharp -public interface IAuthEvents -{ - void OnRegistered(IRequest httpReq, IAuthSession session, IServiceBase registrationService); - - void OnAuthenticated(IRequest httpReq, IAuthSession session, IServiceBase authService, - IAuthTokens tokens, Dictionary authInfo); - - void OnLogout(IRequest httpReq, IAuthSession session, IServiceBase authService); - - void OnCreated(IRequest httpReq, IAuthSession session); -} -``` - -These are the same authentication hooks that were previously only available when creating a **Custom UserSession** by inheriting [AuthUserSession](https://github.com/ServiceStack/ServiceStack/wiki/Sessions#session-events). The new AuthEvents API provide a loose-typed way where plugins can tap into the same hooks by registering it with `AuthFeature.AuthEvents`, e.g: - -```csharp -public class WebSudoFeature : IPlugin, IAuthEvents -{ - public void Register(IAppHost appHost) - { - ... - var authFeature = appHost.GetPlugin(); - authFeature.AuthEvents.Add(this); - } - - // Add implementations on `IAuthEvents` handlers - public void OnCreated(IRequest httpReq, IAuthSession session) - { - ... - } - ... -} -``` - -An alternative way for accessing `IAuthEvents` is to register it like a normal dependency, e.g: - -```csharp -container.RegisterAs(); -``` - -To simplify custom implementations you can inherit from the empty concrete [AuthEvents](https://github.com/ServiceStack/ServiceStack/blob/7eb3a34a2e545a54c2591665328c16c5d398d37a/src/ServiceStack/Auth/AuthEvents.cs#L18-L25) and choose to only implement the callbacks you're interested in, e.g: - -```csharp -public class LogAuthEvents : AuthEvents -{ - public static ILog Log = LogManager.GetLogger(typeof(LogAuthEvents)); - - public override void OnLogout(IRequest httpReq, IAuthSession session, IServiceBase authService) - { - Log.DebugFormat("User #{0} {1} has logged out", session.UserAuthId, session.UserName); - } -} -``` - -## OrmLite - - - Added new `db.ColumnLazy` API for lazily fetching a column of data - - Added `db.TableExists` for a typed API to detect whether a table exists - - Added `INamingStrategy.GetSequenceName()` to [override how sequence names in Oracle are generated](http://stackoverflow.com/a/25611452/85785) - - Upgraded PostgreSql Provider to **Npgsql 2.2.0** and Sqlite to **Sqlite.Core 1.0.93.0** - -## Text - - - Added `JsConfig.ParsePrimitiveIntegerTypes` and `JsConfig.ParsePrimitiveFloatingPointTypes` to [change preferences on what primitive numeric types should be converted to](https://github.com/ServiceStack/ServiceStack.Text/pull/428). - - Added `JsConfig.IgnoreAttributesNamed` to [change what attributes are used to ignore properties](https://github.com/ServiceStack/ServiceStack.Text/commit/3b9972fbd61ce000f9af72d74d79b30eb0d2f45b) - - Added [string.CountOccurancesOf() extension method](https://github.com/ServiceStack/ServiceStack.Text/commit/d41d7fb879d68e5a4ccb529e3cc6ed7d3ce937a2) - - Added [Image MimeTypes](https://github.com/ServiceStack/ServiceStack.Text/commit/b07cf033d7b4735b0249850769b119be0c857b9d) - -## Community - -## [ServiceStack MiniProfiler Toolkit](https://bitbucket.org/migajek/miniprofilingtoolkit) - -From the wider ServiceStack Community, [Michał Gajek](https://plus.google.com/u/0/+Micha%C5%82Gajek/auto) has developed an alternative analyzer of ServiceStack's MiniProfiler results in a comprehensive UI that allows deep introspection of your running Services. From the Project's description: - -### Description - -This project intends to provide tools for collecting & analyzing profiling results of ServiceStack-based apps. -Not only this makes profiling possible in the scenario when no built-in web-frontend is available (like Single Page Applications), but also has several advantages over it: - - - collects & persists the results - - allows the "background" profiling (example: production environment) - - it's better to analyze large amounts of collected profiling results, not just focusing on single execution timings - - helps finding time-consuming queries - -### Screenshots - -![](http://i.imgur.com/Ybpx4xg.png) - -![](http://i.imgur.com/BA4Mc68.png) - -![](http://i.imgur.com/US4Gk6s.png) - -![](http://i.imgur.com/bILdbQc.png) - - -### Install - -``` -PM> Install-Package Migajek.MiniProfiling.ServiceStack.RemoteStorage -``` - -### Register the Plugin: - -```csharp -Plugins.Add(new Migajek.Profiling.ServiceStackProfiler.MiniProfilingToolkit("http://url/", "ProjectName")); -``` - -# v4.0.30 Release Notes - -## [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) - -We have an exciting feature in this release showcasing our initial support for generating Native Types from client VS.NET projects using [ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project#step-1-download-and-install-servicestackvs) new **Add ServiceStack Reference** feature. It provides a simpler, cleaner and more versatile alternative to WCF's **Add Service Reference** in VS.NET. - -Our goal with Native Types is to provide an alternative for sharing DTO dlls, that can enable a better dev workflow for external clients who are now able to generate (and update) Typed APIs for your Services from a remote url - reducing the burden and effort required to consume ServiceStack Services whilst benefiting from clients native language strong-typing feedback. - -This is just the beginning, whilst C# is the first language supported it lays the groundwork and signals our approach on adding support for typed API's in other languages in future. Add a [feature request for your favorite language](http://servicestack.uservoice.com/forums/176786-feature-requests) to prioritize support for it sooner! - -### Example Usage - -The easiest way to Add a ServiceStack reference to your project is to right-click on your project to bring up [ServiceStackVS's](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) `Add ServiceStack Reference` context-menu item. This opens a dialog where you can add the url of the ServiceStack instance you want to typed DTO's for, as well as the name of the T4 template that's added to your project. - -![Add ServiceStack Reference](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/add-service-ref-flow.png) - -After clicking OK, the servers DTO's and [ServiceStack.Client](https://www.nuget.org/packages/ServiceStack.Client) NuGet package are added to the project, providing an instant typed API: - -![Calling ServiceStack Service](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/call-service.png) - -### Consuming Services from Mobile Clients now Easier than Ever! - -In addition with our improved PCL Support in this release, it's never been easier to create an instant Typed API for a remote Service consumable from any Xamarin.Android, Xamarin.iOS, Silverlgiht 5, Windows Store or .full NET4.0+ platforms - Here's a quick demo of it working in Android: - -![Android Add ServiceStack Reference](https://raw.githubusercontent.com/ServiceStack/ServiceStackVS/master/Images/android-add-ref-demo.gif) - -### Advantages over WCF - - - **Simple** Uses a small T4 template to save generated POCO Types. Updating as easy as re-running T4 template - - **Versatile** Clean DTOs works in all JSON, XML, JSV, MsgPack and ProtoBuf [generic service clients](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client#built-in-clients) - - **Reusable** Generated DTO's are not coupled to any endpoint or format. Defaults are both partial and virtual for maximum re-use - - **Resilient** Messaging-based services offer a number of [advantages over RPC Services](https://github.com/ServiceStack/ServiceStack/wiki/Advantages-of-message-based-web-services) - - **Flexible** DTO generation is customizable, Server and Clients can override built-in defaults - - **Integrated** Rich Service metadata annotated on DTO's, [Internal Services](https://github.com/ServiceStack/ServiceStack/wiki/Restricting-Services) are excluded when accessed externally - -### Available from v4.0.30+ ServiceStack Projects - -Native Types is now available by default on all **v4.0.30+** ServiceStack projects. It can be disabled by removing the `NativeTypesFeature` plugin with: - -```csharp -Plugins.RemoveAll(x => x is NativeTypesFeature); -``` - -For detailed info on how NativeTypesFeature works, its different customization options and improvements over WCF, checkout the [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) docs. - -### [Upgrade ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) - -To take advantage of this feature [Upgrade or Install ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) VS.NET Extension. If you already have **ServiceStackVS** installed, uninstall it first from `Tools -> Extensions and Updates... -> ServiceStackVS -> Uninstall`. - -## Improved PCL Story - -Our [PCL Story](https://github.com/ServiceStackApps/HelloMobile) has been greatly improved in this release now that `ServiceStack.Interfaces` has been converted into a pure PCL dll. This now lets you maintain your server DTO's in a pure PCL DLL that can be shared as-is on most supported platforms (Profile136): - - - Xamarin.iOS - - Xamarin.Android - - Windows Store - - WPF app using .NET 4.0 PCL support - - Silverlight 5 - -Whilst our impl-free `ServiceStack.Interfaces.dll` was able to be converted into a pure PCL dll, our Client libraries have instead resorted to using [PCL's Bait and Switch technique](http://log.paulbetts.org/the-bait-and-switch-pcl-trick/) to provide platform-specific extensions and optimizations. The one outlier is Silverlight5 which remains a custom (non-PCL) SL5 build, that whilst can now share DTO's, still can't support projects with dependencies on the PCL-compatible version of **ServiceStack.Client**. - -As of this release all PCL, platform and Silverlight dlls are now merged into the main [ServiceStack.Client](https://www.nuget.org/packages/ServiceStack.Client) NuGet packages so now any clients need only reference the main Client NuGet package: - -``` -Install-Package ServiceStack.Client -``` - -The [Hello PCL](https://github.com/ServiceStackApps/HelloMobile) project now contains examples of reusing a Server DTO project with all supported client platforms as well as showing re-use of a high-level `SharedGateway` which referenes `ServiceStack.Client` that's shared between all PCL-compatible platforms. - -### New ServiceStack + AngularJS Example - [StackApis](http://stackapis.servicestack.net) - -[![StackApis Home](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/stackapis-home.png)](http://stackapis.servicestack.net/) - -[StackApis](http://stackapis.servicestack.net/) is a simple new ServiceStack + AngularJS example project created with [ServiceStackVS AngularJS Template](https://github.com/ServiceStack/ServiceStackVS#servicestackvs) showcasing how quick and easy it is to create responsive feature-rich Single Page Apps with AngularJS and [AutoQuery](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query). StackApis is powered by a Sqlite database containing [snapshot of ServiceStack questions from StackOverflow APIs](https://github.com/ServiceStackApps/StackApis/blob/master/src/StackApis.Tests/UnitTests.cs#L67) that's [persisted in an sqlite database](https://github.com/ServiceStackApps/StackApis/blob/master/src/StackApis.Tests/UnitTests.cs#L119-L124) using [OrmLite](https://github.com/ServiceStack/ServiceStack.OrmLite/). - -### StackApis AutoQuery Service - -The [Home Page](https://github.com/ServiceStackApps/StackApis/blob/master/src/StackApis/default.cshtml) is built with less than **<50 Lines** of JavaScript which thanks to [AutoQuery](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query) routes all requests to the single AutoQuery Service below: - -```csharp -[Route("/questions")] -public class StackOverflowQuery : QueryBase -{ - public int? ScoreGreaterThan { get; set; } -} -``` - -> Not even `ScoreGreaterThan` is a required property, it's just an example of a [formalized convention](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query#advantages-of-well-defined-service-contracts) enabling queries from Typed Service Clients. - -Feel free to play around with a deployed version of StackApis at [stackapis.servicestack.net](http://stackapis.servicestack.net/). - -You can also use the public `http://stackapis.servicestack.net/` url to test out ServiceStack's new **Add ServiceStack Reference** feature :) - -## [Swagger Support](https://github.com/ServiceStack/ServiceStack/wiki/Swagger-API) - -### All static resources are now embedded - -ServiceStack's [Swagger Support](https://github.com/ServiceStack/ServiceStack/wiki/Swagger-API) received some welcomed enhancements thanks to [@tvjames](https://github.com/tvjames) and [@tyst](https://github.com/tyst)'s efforts which now sees all of Swagger's static resources embedded into a single `ServiceStack.Api.Swagger.dll`, taking advantage of the Virtual File Systems [transparent support for Embedded Resources](https://github.com/ServiceStack/ServiceStack.Gap#creating-an-embedded-servicestack-app), making it easier to manage and upgrade Swagger as a self-contained unit. - -### New Bootstrap theme for Swagger - -A new attractive Bootstrap Theme was also added to Swagger, available from [/swagger-ui-bootstrap/](http://stackapis.servicestack.net/swagger-ui-bootstrap/): - -[![Swagger Bootstrap](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/stackapis-swagger-bootstrap.png)](http://stackapis.servicestack.net/swagger-ui-bootstrap/) - -You can change the [metadata page plugin link](https://github.com/ServiceStack/ServiceStack/wiki/Metadata-page#adding-links-to-metadata-page) to point to this new theme with: - -```csharp -Plugins.Add(new SwaggerFeature { - UseBootstrapTheme = true, - LogoUrl = "your-logo.png" //optional use your own logo -}); -``` - -Swagger was also been updated to the latest version. - -## Authentication - -### Unique Emails - -ServiceStack now verifies emails returned by OAuth providers are now unique where if there's already another UserAuth with an existing email, authentication will fail and redirect (for HTML/Web Browser requests) with the Error token: - - /#f=EmailAlreadyExists - -This behavior is in-line with ServiceStack's other AuthProviders. If this change causes any issues, it can be disabled with: - -```csharp -AuthProvider.ValidateUniqueEmails = false; -``` - -> This doesn't apply to Users who login with multiple OAuth Providers as there accounts automatically get merged into a single UserAuth entity. - -### CustomValidationFilter - -A new `CustomValidationFilter` was added to all AuthProviders which can be used to return a `IHttpResult` to control what error response is returned, e.g: - -```csharp -Plugins.Add(new AuthFeature( - () => new CustomUserSession(), - new IAuthProvider[] { - new FacebookAuthProvider(appSettings) { - CustomValidationFilter = authCtx => - CustomIsValid(authCtx) - ? authCtx.Service.Redirect(authCtx.Session.ReferrerUrl - .AddHashParam("f","CustomErrorCode")) - : null, - }, - })); -``` - -## Breaking Changes - -### Upgrade all ServiceStack NuGet packages - -The primary breaking change was converting ServiceStack's core `ServiceStack.Interfaces.dll` into a pure portable class library which as it's incompatible with the previous non-PCL ServiceStack.Interfaces.dll requires that all NuGet dependenices (inc. transitive dependencies) be upgraded to **v4.0.30**. The version number was bumped to **v4.0.30** specifically to stress that it's incompatible with any ** - -Chat is another ServiceStack Single Page App Special showing how you can get a lot done with minimal effort and dependencies which delivers all these features in a tiny footprint built with vanilla jQuery and weighing just: - - - [1 default.cshtml page](https://github.com/ServiceStackApps/Chat/blob/master/src/Chat/default.cshtml) with under **170 lines of JavaScript** and **70 lines** of HTML - - [2 ServiceStack Services](https://github.com/ServiceStackApps/Chat/blob/master/src/Chat/Global.asax.cs) entire backend in 1 `.cs` file - - 1 ASP.NET Web Application project requiring only a sane **9 .NET dll** references - -### Remote control - -Chat features the ability to remotely control other users chat window with the client bindings in `/js/ss-utils.js`, providing a number of different ways to interact and modify a live webapp by either: - - - Invoking Global Event Handlers - - Modifying CSS via jQuery - - Sending messages to Receivers - - Raising jQuery Events - -All options above are designed to integrate with an apps existing functionality by providing the ability to invoke predefined handlers and exported object instances as well as modify jQuery CSS and raising DOM events. - -The [complete documentation](https://github.com/ServiceStackApps/Chat) in Chat is the recommended way to learn more about Server Events which goes through and explains how to use its Server and Client features. - -## [ServiceStackVS](https://github.com/ServiceStack/ServiceStackVS) - ServiceStack's VS.NET Extension - -Another exciting announcement is the initial release of [ServiceStackVS](https://github.com/ServiceStack/ServiceStackVS) - our VS.NET ServiceStack Extension containing the most popular starting templates for ServiceStack powered solutions: - -![Visual Studio Templates](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackvs/vs-templates.png) - -Each project template supports our [recommended multi-project structure](https://github.com/ServiceStack/ServiceStack/wiki/Physical-project-structure) promoting a clean architecture and Web Services best-practices, previously [documented in Email Contacts](https://github.com/ServiceStack/EmailContacts/#creating-emailcontacts-solution-from-scratch). - -This is now the fastest way to get up and running with ServiceStack. With these new templates you can now create a new ServiceStack Razor, AngularJS and Bootstrap enabled WebApp, pre-wired end-to-end in seconds: - -![AngularJS WalkThrough](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackvs/angularjs-overview.gif) - - - -### Get the [Learning AngularJS for .NET Developers](http://www.packtpub.com/learning-angularjs-for-net-developers/book) Book! - -On ServiceStack and AngularJS front, we also have great content coming from the ServiceStack community as -**[Learning AngularJS for .NET Developers](http://www.packtpub.com/learning-angularjs-for-net-developers/book)**, -a new book by [Alex Pop](https://twitter.com/AlexandruVPop) has just been made available. - -More details about the book as well as downloadable code-samples is available on -[Alex's announcement blog post](http://alexvpop.blogspot.co.uk/2014/06/announcing-learning-angularjs-dotnet.html). - -### Download ServiceStackVS - -ServiceStackVS supports both VS.NET 2013 and 2012 and can be [downloaded from the Visual Studio Gallery](http://visualstudiogallery.msdn.microsoft.com/5bd40817-0986-444d-a77d-482e43a48da7) - -[![VS.NET Gallery Download](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackvs/vsgallery-download.png)](http://visualstudiogallery.msdn.microsoft.com/5bd40817-0986-444d-a77d-482e43a48da7) - -### VS.NET 2012 Prerequisites - - - VS.NET 2012 Users must install the [Microsoft Visual Studio Shell Redistributable](http://www.microsoft.com/en-au/download/details.aspx?id=40764) - - It's also highly recommended to [Update to the latest NuGet](http://docs.nuget.org/docs/start-here/installing-nuget). - -> Alternatively if continuing to use an older version of the **NuGet Package Manager** you will need to click on **Enable NuGet Package Restore** after creating a new project to ensure its NuGet dependencies are installed. - -### Feedback - -We hope **ServiceStackVS** helps make ServiceStack developers more productive than ever and we'll look at continue improving it with new features in future. [Suggestions and feedback are welcome](http://servicestack.uservoice.com/forums/176786-feature-requests). - -## [Authentication](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization) - -### Saving User Profile Images - -To make it easier to build Social Apps like [Chat](https://github.com/ServiceStackApps/Chat) with ServiceStack we've started saving profile image urls (aka avatars) for the following popular OAuth providers: - - - Twitter - - Facebook - - GitHub - - Google OAuth2 - - LinkedIn OAuth2 - -The users profile url can be accessed in your services using the `IAuthSession.GetProfileUrl()` extension method which goes through the new `IAuthMetadataProvider` which by default looks in `UserAuthDetails.Items["profileUrl"]`. - -### New IAuthMetadataProvider - -A new [IAuthMetadataProvider](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/Auth/AuthMetadataProvider.cs) has been added that provides a way to customize the `authInfo` in all AuthProviders. It also allows overriding of how extended Auth metadata like `profileUrl` is returned. - -```csharp -public interface IAuthMetadataProvider -{ - void AddMetadata(IAuthTokens tokens, Dictionary authInfo); - - string GetProfileUrl(IAuthSession authSession, string defaultUrl = null); -} -``` - -> To override with a custom implementation, register `IAuthMetadataProvider` in the IOC - -### Saving OAuth Metadata - - -The new `SaveExtendedUserInfo` property (enabled by default) on all OAuth providers let you control whether to save the extended OAuth metadata available (into `UserAuthDetails.Items`) when logging in via OAuth. - -## [OrmLite](https://github.com/ServiceStack/ServiceStack.OrmLite/) - -### Loading of References in Multi-Select Queries - -Previous support of pre-loading of references were limited to a single entity using `LoadSingleById` to automatically fetch all child references, e.g: - -```csharp -public class Customer -{ - [AutoIncrement] - public int Id { get; set; } - public string Name { get; set; } - - [Reference] // Save in CustomerAddress table - public CustomerAddress PrimaryAddress { get; set; } - - [Reference] // Save in Order table - public List Orders { get; set; } -} - -var customer = db.LoadSingleById(request.Id); -customer.PrimaryAddress // Loads 1:1 CustomerAddress record -customer.Orders // Loads 1:M Order records -``` - -We've now also added support for pre-loading of references for multiple resultsets as well with `LoadSelect` which loads references for all results, e.g: - -```csharp -var customers = db.LoadSelect(q => q.Name.StartsWith("A")); -``` - -This is implemented efficiently behind the scenes where only 1 additional SQL Query is performed for each defined reference. - -> As a design goal none of OrmLite Query API's perform N+1 queries. - -### Self References - -We've extended OrmLite [References support](https://github.com/ServiceStack/ServiceStack.OrmLite/#reference-support-poco-style) to support Self References for **1:1** relations where the foreign key property can be on the parent table, e.g: - -```csharp -public class Customer -{ - ... - public int CustomerAddressId { get; set; } - - [Reference] - public CustomerAddress PrimaryAddress { get; set; } -} -``` - -Which maintains the same relationship as having the Foreign Key column on the child table instead, i,e: - -```csharp -public class CustomerAddress -{ - public int CustomerId { get; set; } -} -``` - -### Support Foreign Key Attributes to specify Reference Fields - -Previously definitions of references relied on [Reference Conventions](https://github.com/ServiceStack/ServiceStack.OrmLite/#reference-conventions) using either the C# Property Name or Property Aliases. You can now also use the [References and ForeignKey attributes](https://github.com/ServiceStack/ServiceStack.OrmLite/#new-foreign-key-attribute-for-referential-actions-on-updatedeletes) to specify Reference Properties, e.g: - -```csharp -public class Customer -{ - [Reference(typeof(CustomerAddress))] - public int PrimaryAddressId { get; set; } - - [Reference] - public CustomerAddress PrimaryAddress { get; set; } -} -``` - -> Reference Attributes take precedence over naming conventions - -### Support for Stored Procedures with out params - -A new `SqlProc` API was added returning an `IDbCommand` which can be used to customize the Stored Procedure call letting you add custom out parameters. The example below shows - -```csharp -string spSql = @"DROP PROCEDURE IF EXISTS spSearchLetters; - CREATE PROCEDURE spSearchLetters (IN pLetter varchar(10), OUT pTotal int) - BEGIN - SELECT COUNT(*) FROM LetterFrequency WHERE Letter = pLetter INTO pTotal; - SELECT * FROM LetterFrequency WHERE Letter = pLetter; - END"; - -db.ExecuteSql(spSql); - -var cmd = db.SqlProc("spSearchLetters", new { pLetter = "C" }); -var pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output); - -var results = cmd.ConvertToList(); -var total = pTotal.Value; -``` - -An alternative approach is to use the new overload added to the raw SQL API `SqlList` that lets you customize the Stored Procedure using a filter, e.g: - -```csharp -IDbDataParameter pTotal = null; -var results = db.SqlList("spSearchLetters", cmd => { - cmd.CommandType = CommandType.StoredProcedure; - cmd.AddParam("pLetter", "C"); - pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output); - }); -var total = pTotal.Value; -``` - -### Minor OrmLite Features - - - Use `OrmLiteConfig.DisableColumnGuessFallback=false` to disable fallback matching heuristics - - Added [GenericTableExpressions](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/Expression/GenericTableExpressions.cs) example showing how to extend OrmLite to support different runtime table names on a single schema type. - -## [AutoQuery](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query) - -### Support for loading References - -AutoQuery now takes advantage of OrmLite's new support for loading child references where marking your Query DTO with `[Reference]` will automatically load its related data, e.g: - -```csharp -public class Rockstar -{ - public int Id { get; set; } - public string FirstName { get; set; } - public string LastName { get; set; } - public int? Age { get; set; } - - [Reference] - public List Albums { get; set; } -} -``` - -### Improved OrderBy - -Add support for inverting sort direction of individual orderBy fields using '-' prefix e.g: - -```csharp -// ?orderBy=Rating,-ImdbId -var movies = client.Get(new SearchMovies { OrderBy = "Rating,-ImdbId" }); - -// ?orderByDesc=-Rating,ImdbId -var movies = client.Get(new SearchMovies { OrderByDesc = "-Rating,ImdbId" }); -``` - -## ServiceStack.Text - - - Added support for `OrderedDictionary` and other uncommon `IDictionary` types - - WCF-style `JsConfig.OnSerializedFn` custom hook has been added - - `JsConfig.ReuseStringBuffer` is enabled by default for faster JSON/JSV text serialization - - Properties can also be ignored with `[JsonIgnore]` attribute - -## Other Features - - - New `[Exclude(Feature.Soap)]` attribute can be used to exclude types from XSD/WSDL's - - XSD/WSDL's no longer including open generic types - - Added `$.ss.getSelection()`, `$.ss.queryString()`, `$.ss.splitOnFirst()`, `$.ss.splitOnLast()` to /ss-utils.js - - `TwitterAuthProvider` now makes authenticated v1.1 API requests to fetch user metadata - - -# v4.0.23 Release Notes - -## [AutoQuery](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query) - -The big ticket feature in this release is the new [AutoQuery](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query) feature - with our approach of enabling Queryable Data Services, that's designed to avoid [OData's anti-patterns and pitfalls](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query#why-not-odata). - - - Simple, intuitive and easy to use! - - Works with all OrmLite's [supported RDBMS providers](https://github.com/ServiceStack/ServiceStack.OrmLite/#download) - - Supports multiple table JOINs and custom responses - - Code-first, declarative programming model - - Promotes clean, intent-based self-describing API's - - Highly extensible, implementations are completely overridable - - Configurable Adhoc, Explicit and Implicit conventions - - Allows preemptive client queries - - New `GetLazy()` API in Service Clients allow transparently streaming of paged queries - - Raw SqlFilters available if required - -#### AutoQuery Services are normal ServiceStack Services - -AutoQuery also benefits from just being normal ServiceStack Services where you can re-use existing knowledge in implementing, customizing, introspecting and consuming ServiceStack services, i.e: - - - Utilizes the same customizable [Request Pipeline](https://github.com/ServiceStack/ServiceStack/wiki/Order-of-Operations) - - AutoQuery services can be mapped to any [user-defined route](https://github.com/ServiceStack/ServiceStack/wiki/Routing) - - Is available in all [registered formats](https://github.com/ServiceStack/ServiceStack/wiki/Formats) - - The [CSV Format](https://github.com/ServiceStack/ServiceStack/wiki/ServiceStack-CSV-Format) especially shines in AutoQuery who's tabular result-set are perfect for CSV - - Can be [consumed from typed Service Clients](https://github.com/ServiceStack/ServiceStack/wiki/Clients-overview) allowing an end-to-end API without code-gen in [PCL client platforms as well](https://github.com/ServiceStackApps/HelloMobile) - -### Getting Started - -AutoQuery uses your Services existing OrmLite DB registration, the example below registers an InMemory Sqlite Provider: - -```csharp -container.Register( - new OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider)); -``` - -There are no additional dependencies, enabling AutoQuery is as easy as registering the AutoQueryFeature Plugin: - -```csharp -Plugins.Add(new AutoQueryFeature { MaxLimit = 100 }); -``` - -The configuration above limits all queries to a maximum of **100** results. - -The minimum code to expose a Query Service for the `Rockstar` table under a user-defined Route is just: - -```csharp -[Route("/rockstars")] -public class FindRockstars : QueryBase {} -``` - -With no additional code, this allows you to use any of the registered built-in conventions, e.g: - - /rockstars?Ids=1,2,3 - /rockstars?AgeOlderThan=42 - /rockstars?AgeGreaterThanOrEqualTo=42 - /rockstars?FirstNameIn=Jim,Kurt - /rockstars?FirstNameBetween=A,F - /rockstars?FirstNameStartsWith=Jim - /rockstars?LastNameEndsWith=son - /rockstars?IdAbove=1000 - -You're also able to formalize your API by adding concrete properties to your Request DTO: - -```csharp -public class QueryRockstars : QueryBase -{ - public int? AgeOlderThan { get; set; } -} -``` - -Which now lets you access AutoQuery Services from the ServiceStack's [Typed Service Clients](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client): - -```csharp -client.Get(new QueryRockstars { AgeOlderThan = 42 }); -``` - -You can also take advantage of the new `GetLazy()` API to transparently stream large result-sets in managable-sized chunks: - -```csharp -var results = client.GetLazy(new QueryMovies { Ratings = new[]{"G","PG-13"}}).ToList(); -``` - -As GetLazy returns a lazy `IEnumerable` sequence it can be used within LINQ expressions: - -```csharp -var top250 = client.GetLazy(new QueryMovies { Ratings = new[]{ "G", "PG-13" } }) - .Take(250) - .ConvertTo(x => x.Title); -``` - -This is just a sampler, for a more complete guide to AutoQuery checkout the [AutoQuery wiki](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query). - -## New VistaDB OrmLite Provider! - -Also in this release is a preview release of OrmLite's new support for [VistaDB](http://www.gibraltarsoftware.com/) thanks to the efforts of [Ilya Lukyanov](https://github.com/ilyalukyanov). - -[VistaDB](http://www.gibraltarsoftware.com/) is a commercial easy-to-deploy SQL Server-compatible embedded database for .NET that provides a good alternative to Sqlite for embedded scenarios. - -To use first download and install [VistaDB](http://www.gibraltarsoftware.com/) itself, then grab OrmLite's VistaDB provider from NuGet: - - PM> Install-Package ServiceStack.OrmLite.VistaDb - -Then register the VistaDB Provider and the filename of what embedded database to use with: - -```csharp -VistaDbDialect.Provider.UseLibraryFromGac = true; - -container.Register( - new OrmLiteConnectionFactory("Data Source=db.vb5;", VistaDbDialect.Provider)); -``` - -The VistaDB provider is almost a complete OrmLite provider, the one major missing feature is OrmLite's new support for [Optimistic Concurrency](https://github.com/ServiceStack/ServiceStack.OrmLite/#optimistic-concurrency) which is missing in VistaDB which doesn't support normal Database triggers but we're still researching the most optimal way to implement this in VistaDB. - -## Improved AspNetWindowsAuthProvider - -A new `LoadUserAuthFilter` was added to allow `AspNetWindowsAuthProvider` to retrieve more detailed information about Windows Authenticated users by using the .NET's ActiveDirectory services, e.g: - -```csharp -public void LoadUserAuthInfo(AuthUserSession userSession, - IAuthTokens tokens, Dictionary authInfo) -{ - if (userSession == null) return; - using (PrincipalContext pc = new PrincipalContext(ContextType.Domain)) - { - var user = UserPrincipal.FindByIdentity(pc, userSession.UserAuthName); - tokens.DisplayName = user.DisplayName; - tokens.Email = user.EmailAddress; - tokens.FirstName = user.GivenName; - tokens.LastName = user.Surname; - tokens.FullName = (String.IsNullOrWhiteSpace(user.MiddleName)) - ? "{0} {1}".Fmt(user.GivenName, user.Surname) - : "{0} {1} {2}".Fmt(user.GivenName, user.MiddleName, user.Surname); - tokens.PhoneNumber = user.VoiceTelephoneNumber; - } -} -``` - -Then to use the above custom filter register it in AspNetWindowsAuthProvider with: - -```csharp -Plugins.Add(new AuthFeature( - () => new CustomUserSession(), - new IAuthProvider[] { - new AspNetWindowsAuthProvider(this) { - LoadUserAuthFilter = LoadUserAuthInfo - } - )); -``` - -Above example kindly provided by [Kevin Howard](https://github.com/KevinHoward). - -## Other features - - - [OrmLite's T4 Templates](https://github.com/ServiceStack/ServiceStack.OrmLite/#t4-template-support) were improved by [Darren Reid](https://github.com/Layoric) - - ApiVersion added to Swaggers ResourcesResponse DTO - - `Uri` in RedisClient allows passwords - -# v4.0.22 Release Notes - -## OrmLite - -This was primarily an OrmLite-focused release with the introduction of major new features: - -### Typed SQL Expressions now support Joins! - -Another [highly requested feature](http://servicestack.uservoice.com/forums/176786-feature-requests/suggestions/4459040-enhance-ormlite-with-common-data-usage-patterns) has been realized in this release with OrmLite's typed SqlExpressions extended to add support for Joins. - -The new JOIN support follows OrmLite's traditional approach of a providing a DRY, typed RDBMS-agnostic wrapper that retains a high affinity with SQL, providing an intuitive API that generates predictable SQL and a light-weight mapping to clean POCO's. - -### Basic Example - -Starting with the most basic example you can simply specify the table you want to join with: - -```csharp -var dbCustomers = db.Select(q => q.Join()); -``` - -This query rougly maps to the following SQL: - -```sql -SELECT Customer.* - FROM Customer - INNER JOIN - CustomerAddress ON (Customer.Id == CustomerAddress.Id) -``` - -Just like before `q` is an instance of `SqlExpression` which is bounded to the base `Customer` type (and what any subsequent implicit API's apply to). - -To better illustrate the above query, lets expand it to the equivalent explicit query: - -```csharp -SqlExpression q = db.From(); -q.Join(); - -List dbCustomers = db.Select(q); -``` - -### Reference Conventions - -The above query joins together the `Customer` and `CustomerAddress` POCO's using the same relationship convention used in [OrmLite's support for References](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/LoadReferencesTests.cs), i.e. using the referenced table `{ParentType}Id` property convention. - -An example of what this looks like can be seen the POCO's below: - -```csharp -class Customer { - public Id { get; set; } - ... -} -class CustomerAddress { - public Id { get; set; } - public CustomerId { get; set; } // Reference based on Property name convention -} -``` - -References based on matching alias names is also supported, e.g: - -```csharp -[Alias("LegacyCustomer")] -class Customer { - public Id { get; set; } - ... -} -class CustomerAddress { - public Id { get; set; } - - [Alias("LegacyCustomerId")] // Matches `LegacyCustomer` Alias - public RenamedCustomerId { get; set; } // Reference based on Alias Convention -} -``` - -Either convention lets you save a POCO and all its entity references with `db.Save()`, e.g: - -```csharp -var customer = new Customer { - Name = "Customer 1", - PrimaryAddress = new CustomerAddress { - AddressLine1 = "1 Australia Street", - Country = "Australia" - }, -}; -db.Save(customer, references:true); -``` - -Going back to the above example: - -```csharp -q.Join(); -``` - -Uses the implicit join in the above reference convention to expand into the equivalent explicit API: - -```csharp -q.Join((customer,address) => customer.Id == address.CustomerId); -``` - -### Selecting multiple columns across joined tables - -Another behaviour implicit when selecting from a typed SqlExpression is that results are mapped to the `Customer` POCO. To change this default we just need to explicitly specify what POCO it should map to instead: - -```csharp -List customers = db.Select( - db.From().Join()); -``` - -Where `FullCustomerInfo` is any POCO that contains a combination of properties matching any of the joined tables in the query. - -The above example is also equivalent to the shorthand `db.Select()` API: - -```csharp -var customers = db.Select(q => q.Join()); -``` - -Rules for how results are mapped is simply each property on `FullCustomerInfo` is mapped to the first matching property in any of the tables in the order they were added to the SqlExpression. - -As most OrmLite tables have a primary key property named `Id`, the auto-mapping includes a fallback for mapping to a full namespaced Id property in the same `{Type}Id` format. This allows you to auto-populate `CustomerId`, `CustomerAddressId` and `OrderId` columns even though they aren't a match to any of the fields in any of the joined tables. - -### Advanced Example - -Seeing how the SqlExpression is constructed, joined and mapped, we can take a look at a more advanced example to showcase more of the new API's available: - -```csharp -List rows = db.Select( // Map results to FullCustomerInfo POCO - db.From() // Create typed Customer SqlExpression - .LeftJoin() // Implict left join with base table - .Join((c,o) => c.Id == o.CustomerId) // Explicit join and condition - .Where(c => c.Name == "Customer 1") // Implicit condition on base table - .And(o => o.Cost < 2) // Explicit condition on joined Table - .Or((c,o) => c.Name == o.LineItem)); // Explicit condition with joined Tables -``` - -The comments next to each line document each Type of API used. Some of the new API's introduced in this example include: - - - Usage of `LeftJoin` for LEFT JOIN'S, `RightJoin` and `FullJoin` also available - - Usage of `And()`, to specify a condition on a Joined table - - Usage of `Or`, to specify a condition against 2 joined tables - -More code examples of References and Joined tables are available in: - - - [LoadReferencesTests.cs](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/LoadReferencesTests.cs) - - [LoadReferencesJoinTests.cs](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/LoadReferencesJoinTests.cs) - -## Optimistic Concurrency - -Another major feature added to OrmLite is support for optimistic concurrency which can be added to any table by adding a `ulong RowVersion { get; set; }` property, e.g: - -```csharp -public class Poco -{ - ... - public ulong RowVersion { get; set; } -} -``` - -RowVersion is implemented efficiently in all major RDBMS's, i.e: - - - Uses `rowversion` datatype in SqlServer - - Uses PostgreSql's `xmin` system column (no column on table required) - - Uses UPDATE triggers on MySql, Sqlite and Oracle whose lifetime is attached to Create/Drop tables APIs - -Despite their differing implementations each provider works the same way where the `RowVersion` property is populated when the record is selected and only updates the record if the RowVersion matches with what's in the database, e.g: - -```csharp -var rowId = db.Insert(new Poco { Text = "Text" }, selectIdentity:true); - -var row = db.SingleById(rowId); -row.Text += " Updated"; -db.Update(row); //success! - -row.Text += "Attempting to update stale record"; - -//Can't update stale record -Assert.Throws(() => - db.Update(row)); - -//Can update latest version -var updatedRow = db.SingleById(rowId); // fresh version -updatedRow.Text += "Update Success!"; -db.Update(updatedRow); - -updatedRow = db.SingleById(rowId); -db.Delete(updatedRow); // can delete fresh version -``` - -Optimistic concurrency is only verified on API's that update or delete an entire entity, i.e. it's not enforced in partial updates. There's also an Alternative API available for DELETE's: - -```csharp -db.DeleteById(id:updatedRow.Id, rowversion:updatedRow.RowVersion) -``` - -### Other OrmLite features - - - New [Limit API's added to JoinSqlBuilder](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/Expression/SqlExpressionTests.cs#L126-L168) - - SqlExpression's are now tied to the dialect provider at time of creation - -## ServiceStack.Text - -A new `JsConfig.ReuseStringBuffer` performance config option is available to JSON and JSV Text Serializers which lets you re-use ThreadStatic StringBuilder when serializing to a string. In initial benchmarks (both synchronous and parallel) it shows around a **~%30 increase in performance** for small POCO's. It can be enabled with: - -```csharp -JsConfig.ReuseStringBuffer = true; -``` - -Default enum values can be excluded from being serialized with: - -```csharp -JsConfig.IncludeDefaultEnums = false; -``` - -## ServiceStack - -### [Messaging](https://github.com/ServiceStack/ServiceStack/wiki/Messaging) - -Improved support for the MQ Request/Reply pattern with the new `GetTempQueueName()` API now available in all MQ Clients which returns a temporary queue (prefixed with `mq:tmp:`) suitable for use as the ReplyTo queue in Request/Reply scenarios: - -```csharp -mqServer.RegisterHandler(m => - new HelloResponse { Result = "Hello, {0}!".Fmt(m.GetBody().Name) }); -mqServer.Start(); - -using (var mqClient = mqServer.CreateMessageQueueClient()) -{ - var replyToMq = mqClient.GetTempQueueName(); - mqClient.Publish(new Message(new Hello { Name = "World" }) { - ReplyTo = replyToMq - }); - - IMessage responseMsg = mqClient.Get(replyToMq); - mqClient.Ack(responseMsg); - var responseDto = responseMsg.GetBody(); -} -``` - -On [Rabbit MQ](https://github.com/ServiceStack/ServiceStack/wiki/Rabbit-MQ) it creates an exclusive non-durable queue. - -In [Redis MQ](https://github.com/ServiceStack/ServiceStack/wiki/Messaging-and-Redis) there's a new `RedisMqServer.ExpireTemporaryQueues()` API which can be used on StartUp to expire temporary queues after a given period. - -Synchronous and Parallel tests for this feature is available in [MqRequestReplyTests.cs](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.Server.Tests/Messaging/MqRequestReplyTests.cs). - -## New NuGet packages - - - [ServiceStack.Authentication.LightSpeed](https://www.nuget.org/packages/ServiceStack.Authentication.LightSpeed/) is a new User Auth Repository created by [Herdy Handoko](https://plus.google.com/u/0/+HerdyHandoko/posts) providing a new persistence option for User Authentication backed by [Mindscape's LightSpeed ORM](http://www.mindscapehq.com/products/lightspeed). Checkout the [GitHub Project](https://github.com/hhandoko/ServiceStack.Authentication.LightSpeed) for more info. - -### Other Framework Features - - - Added support for locking users in all AuthProviders by populating `UserAuth.LockedDate`, effective from next login attempt - - Reduced dependencies on all Logging providers, now only depends on `ServiceStack.Interfaces` - - ContentLength is written where possible allowing [Async Progress callbacks on new payloads](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/AsyncProgressTests.cs) - - Non authenticated requests to `/auth` throw a 401 (otherwise returns basic session info) - - Metadata filter now supports IE8/IE9 - - `CopyTo` and `WriteTo` Stream extensions now return bytes transferred - -# v4.0.21 Release Notes - -## Authentication - -### Windows Auth Provider for ASP.NET - -An ASP.NET WindowsAuth Provider preview is available. This essentially wraps the existing Windows Auth support baked into ASP.NET and adds an adapter for [ServiceStack's Multi-Provider Authentication model](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization). - -It can be registered just like any other Auth Provider, i.e. in the AuthFeature plugin: - -```csharp -Plugins.Add(new AuthFeature( - () => new CustomUserSession(), - new IAuthProvider[] { - new AspNetWindowsAuthProvider(this) { AllowAllWindowsAuthUsers = true }, - } -)); -``` - -By default it only allows access to users in `AspNetWindowsAuthProvider.LimitAccessToRoles`, but can be overridden with `AllowAllWindowsAuthUsers=true` to allow access to all Windows Auth users as seen in the example above. - -Credentials can be attached to ServiceStack's Service Clients the same way [as .NET WebRequest's](http://stackoverflow.com/a/3563033/85785) by assingning the `Credentials` property, e.g: - -```csharp -var client = new JsonServiceClient(BaseUri) { - Credentials = CredentialCache.DefaultCredentials, -}; - -var response = client.Get(new RequiresAuth { Name = "Haz Access!" }); -``` - -To help with debugging, [?debug=requestinfo](https://github.com/ServiceStack/ServiceStack/wiki/Debugging#request-info) has been extended to include the Request's current Logon User info: - -![WindowsAuth DebugInfo](https://github.com/ServiceStack/Assets/raw/master/img/release-notes/debuginfo-windowsauth.png) - -> We're interested in hearing future use-cases this can support, feedback on this and future integration with Windows Auth are welcomed on [the Active Directory Integration feature request](http://servicestack.uservoice.com/forums/176786-feature-requests/suggestions/4725924-built-in-active-directory-authentication-suport). - -### New GitHub and other OAuth Providers available - -Thanks to [Rouslan Grabar](https://github.com/iamruss) we now have a number of new OAuth providers built into ServiceStack, including authentication with GitHub, Russia's most popular search engine [Yandex](http://www.yandex.ru/) and Europe's largest Social Networks after Facebook, [VK](http://vk.com) and [Odnoklassniki](http://odnoklassniki.ru/): - -```csharp -Plugins.Add(new AuthFeature( - () => new CustomUserSession(), - new IAuthProvider[] { - new GithubAuthProvider(appSettings), - new YandexAuthProvider(appSettings), - new VkAuthProvider(appSettings), - new OdnoklassnikiAuthProvider(appSettings), - } -)); -``` - -### Extended Auth DTO's - -You can now test whether a user is authenticated by calling the Auth Service without any parameters, e.g. `/auth` which will return summary auth info of the currently authenticated user or a `401` if the user is not authenticated. A `DisplayName` property was added to `AuthenticateResponse` to return a friendly name of the currently authenticated user. - -## [Portable ServiceStack](https://github.com/ServiceStack/ServiceStack.Gap) - -A new [ServiceStack.Gap](https://github.com/ServiceStack/ServiceStack.Gap) Repository and NuGet package was added to help with creating ServiceStack-powered Desktop applications. - -ServiceStack has a number of features that's particularly well-suited for these kind of apps: - - - It allows your services to be self-hosted using .NET's HTTP Listener - - It supports pre-compiled Razor Views - - It supports Embedded resources - - It supports an embedded database in Sqlite and OrmLite - - It can be ILMerged into a single .exe - -Combined together this allows you to encapsulate your ServiceStack application into a single cross-platform .exe that can run on Windows or OSX. - -To illustrate the potential of embedded ServiceStack solutions, a portable version [httpbenchmarks.servicestack.net](https://httpbenchmarks.servicestack.net) was created targetting a number of platforms below: - -> **[BenchmarksAnalyzer.zip](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/BenchmarksAnalyzer.zip)** - Single .exe that opens the BenchmarksAnalyzer app in the users browser - -[![Partial Console Screenshot](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/gap/partial-exe.png)](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/BenchmarksAnalyzer.zip) - -> **[BenchmarksAnalyzer.Mac.zip](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/BenchmarksAnalyzer.Mac.zip)** - Self-hosted app running inside a OSX Cocoa App Web Browser - -[![Partial OSX Screenshot](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/gap/partial-osx.png)](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/BenchmarksAnalyzer.Mac.zip) - -> **[BenchmarksAnalyzer.Windows.zip](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/BenchmarksAnalyzer.Windows.zip)** - Self-hosted app running inside a Native WinForms app inside [CEF](https://code.google.com/p/chromiumembedded/) - -[![Partial Windows Screenshot](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/gap/partial-win.png)](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/BenchmarksAnalyzer.Windows.zip) - -### Usage - -By default `BenchmarksAnalyzer.exe` will scan the directory where it's run from, it also supports being called with the path to `.txt` or `.zip` files to view or even a directory where output files are located. Given this there are a few popular ways to use Benchmarks Analyzer: - - - Drop `BenchmarksAnalyzer.exe` into a directory of benchmark outputs before running it - - Drop a `.zip` or folder onto the `BenchmarksAnalyzer.exe` to view those results - -> Note: It can also be specified as a command-line argument, e.g: "BenchmarksAnalyzer.exe path\to\outputs" - -![Benchmarks Analyzer Usage](https://github.com/ServiceStack/Assets/raw/master/img/gap/benchmarksanalyzer-usage.gif) - -### ServiceStack.Gap Developer Guide - -The guides on how each application was created is on [ServiceStack.Gap](https://github.com/ServiceStack/ServiceStack.Gap) site, i.e: - - - [Self-Hosting Console App](https://github.com/ServiceStack/ServiceStack.Gap#self-hosting-console-app) - - [Windows Forms App with Chromium Embedded Framework and CefSharp](https://github.com/ServiceStack/ServiceStack.Gap#winforms-with-chromium-embedded-framework) - - [Mac OSX Cocoa App with Xmarain.Mac](https://github.com/ServiceStack/ServiceStack.Gap#mac-osx-cocoa-app-with-xmarainmac) - -## Other Framework Features - -### Filtering support added to Metadata pages - -You can now filter services on ServiceStack's `/metadata` page: - -![Metadata Filter](https://github.com/ServiceStack/Assets/raw/master/img/release-notes/metadata-filter.png) - -### Typed Request Filters - -A more typed API to register Global Request and Response filters per Request DTO Type are available under the `RegisterTyped*` API's in AppHost. These can be used to provide more flexibility in multi-tenant solutions by attaching custom data on incoming requests, e.g: - -```csharp -public override void Configure(Container container) -{ - RegisterTypedRequestFilter((req, res, dto) => - { - var route = req.GetRoute(); - if (route != null && route.Path == "/tenant/{TenantName}/resource") - { - dto.SubResourceName = "CustomResource"; - } - }); -} -``` - -Typed Filters can also be used to apply custom behavior on Request DTO's sharing a common interface, e.g: - -```csharp -public override void Configure(Container container) -{ - RegisterTypedRequestFilter((req, res, dtoInterface) => { - dtoInterface.SharedProperty = "Is Shared"; - }); -} -``` - -### Buffered Stream option has now added to Response - -Response streams can be buffered in the same way as you can buffer Request streams by setting `UseBufferedStream=true`, e.g: - -```csharp -appHost.PreRequestFilters.Add((httpReq, httpRes) => { - httpReq.UseBufferedStream = true; - httpRes.UseBufferedStream = true; -}); - -``` - -### AfterInitCallbacks added to AppHost - -You can register callbacks to add custom logic straight after the AppHost has finished initializing. E.g. you can find all Roles specified in `[RequiredRole]` attributes with: - -```csharp -appHost.AfterInitCallbacks.Add(host => -{ - var allRoleNames = host.Metadata.OperationsMap - .SelectMany(x => x.Key.AllAttributes() - .Concat(x.Value.ServiceType.AllAttributes())) - .SelectMany(x => x.RequiredRoles); -}); -``` - -### Request Scopes can be configured to use ThreadStatic - -Request Scoped dependencies are stored in `HttpRequest.Items` for ASP.NET hosts and uses Remoting's `CallContext.LogicalData` API's in self-hosts. Using the Remoting API's can be problematic in old versions of Mono or when executed in test runners. - -If this is an issue the RequestContext can be configured to use ThreadStatic with: - -```csharp -RequestContext.UseThreadStatic = true; -``` - -### Logging - -Updated Logging providers to allow `debugEnabled` in their LogFactory constructor, e.g: - -```csharp -LogFactory.LogManager = new NullLogFactory(debugEnabled:false); -LogFactory.LogManager = new ConsoleLogFactory(debugEnabled:true); -LogFactory.LogManager = new DebugLogFactory(debugEnabled:true); -``` - -Detailed command logging is now enabled in OrmLite and Redis when `debugEnabled=true`. The external Logging provider NuGet packages have also been updated to use their latest version. - -### Razor - - - Enabled support for Razor `@helpers` and `@functions` in Razor Views - - Direct access to Razor Views in `/Views` is now denied by default - -### Service Clients - - - Change Silverlight to auto emulate HTTP Verbs for non GET or POST requests - - Shorter aliases added on `PostFileWithRequest` which uses the Request DTO's auto-generated url - - The [PCL version of ServiceStack.Interfaces](https://github.com/ServiceStackApps/HelloMobile) now supports a min version of .NET 4.0 - -## OrmLite - -### Exec and Result Filters - -A new `CaptureSqlFilter` Results Filter has been added which shows some of the power of OrmLite's Result filters by being able to capture SQL Statements without running them, e.g: - -```csharp -public class CaptureSqlFilter : OrmLiteResultsFilter -{ - public CaptureSqlFilter() - { - SqlFilter = CaptureSql; - SqlStatements = new List(); - } - - private void CaptureSql(string sql) - { - SqlStatements.Add(sql); - } - - public List SqlStatements { get; set; } -} -``` - -This can then be wrapped around existing database calls to capture and print the generated SQL, e.g: - -```csharp -using (var captured = new CaptureSqlFilter()) -using (var db = OpenDbConnection()) -{ - db.CreateTable(); - db.Count(x => x.Age < 50); - db.Insert(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix" }); - db.Delete(new { FirstName = "Jimi", Age = 27 }); - - var sql = string.Join(";\n", captured.SqlStatements.ToArray()); - sql.Print(); -} -``` - -#### Exec filters can be limited to specific Dialect Providers - -```csharp -OrmLiteConfig.DialectProvider.ExecFilter = execFilter; -``` - -### OrmLite's custom SqlBuilders now implement ISqlExpression - -OrmLite provides good support in integrating with external or custom SQL builders that implement OrmLite's simple `ISqlExpression` interface which can be passed directly to `db.Select()` API. This has now been added to OrmLite's other built-in SQL Builders, e.g: - -#### Using JoinSqlBuilder - -```csharp -var joinQuery = new JoinSqlBuilder() - .LeftJoin(x => x.Id, x => x.UserId, - sourceWhere: x => x.Age > 18, - destinationWhere: x => x.Country == "Italy"); - -var results = db.Select(joinQuery); -``` - -#### Using SqlBuilder - -```csharp -var tmpl = sb.AddTemplate( - "SELECT * FROM User u INNER JOIN Address a on a.UserId = u.Id /**where**/"); -sb.Where("Age > @age", new { age = 18 }); -sb.Where("Countryalias = @country", new { country = "Italy" }); - -var results = db.Select(tmpl, tmpl.Parameters); -``` - -### Other Changes - - - OrmLite can create tables with any numeric type in all providers. Fallbacks were added on ADO.NET providers that don't support the numeric type natively - - Load/Save Reference property conventions can be [inferred on either aliases or C# property names](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/LoadReferencesTests.cs#L207) - - OrmLite can create tables from types with Indexers - - Can use `OrmLiteConfig.StripUpperInLike=true` to [remove use of upper() in Sql Expressions](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/Expression/SelectExpressionTests.cs#L205) - -## Redis - -A new `TrackingRedisClientsManager` client manager has been added by [Thomas James](https://github.com/tvjames) to help diagnose Apps that are leaking redis connections. - -# v4.0.19 Release Notes - -## Embedded ServiceStack - -This release has put all the final touches together to open up interesting new use-cases for deploying ServiceStack solutions into a single self-contained, cross-platform, xcopy-able executable. - -By leveraging ServiceStack's support for [self-hosting](https://github.com/ServiceStack/ServiceStack/wiki/Self-hosting), the [Virtual File System](https://github.com/ServiceStack/ServiceStack/wiki/Virtual-file-system) support for Embedded Resources and the new support for [Compiled Razor Views](#compiled-razor-views), we can embed all images/js/css Razor views and Markdown Razor assets into a single dll that can be ILMerged with the preferred ServiceStack dependencies (inc. OrmLite.Sqlite) into a single cross-platform .NET exe: - -### Razor Rockstars - Embedded Edition - -To showcase its potential we've compiled the entire [Razor Rockstars](http://razor.servicestack.net/) website into a [single dll](https://github.com/ServiceStack/RazorRockstars/tree/master/src/RazorRockstars.CompiledViews) that's referenced them in the multiple use-case scenarios below: - -> Note: all demo apps are unsigned so will require ignoring security warnings to run. - -### As a Single Self-Hosted .exe - -The examples below merges Razor Rockstars and ServiceStack into a Single, cross-platform, self-hosting Console App, that opens up Razor Rockstars homepage in the users default web browser when launched: - -> [RazorRockstars.exe](https://github.com/ServiceStack/RazorRockstars/raw/master/build/RazorRockstars.exe) - Self-Host running in a Console App - -> [WindowlessRockstars.exe](https://github.com/ServiceStack/RazorRockstars/raw/master/build/WindowlessRockstars.exe) - Headless Self-Hosted Console App running in the background - -[![SelfHost](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/self-host.png)](https://github.com/ServiceStack/RazorRockstars/raw/master/build/RazorRockstars.exe) - -> The total size for the entire uncompressed **RazorRockstars.exe** ServiceStack website comes down to just **4.8MB** (lighter than the 5MB footprint of EntityFramework.dll) that includes **1.5MB** for RazorRockstars html/img/js/css website assets and **630kb** for native Windows sqlite3.dll. - -### Running inside Windows and OSX Native Desktop Apps - -You can also achieve a [PhoneGap-like experience](http://phonegap.com/) by hosting ServiceStack inside native .NET Desktop App shells for OSX and Windows: - -> [RazorRockstars.MacHost.app](https://github.com/ServiceStack/RazorRockstars/raw/master/build/RazorRockstars.MacHost.app.zip) - Running inside a Desktop Cocoa OSX app using [Xamarin.Mac](https://xamarin.com/mac) - -[![OSX Cocoa App](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/osx-host.png)](https://github.com/ServiceStack/RazorRockstars/raw/master/build/RazorRockstars.MacHost.app.zip) - -> [WpfHost.zip](https://github.com/ServiceStack/RazorRockstars/raw/master/build/WpfHost.zip) - Running inside a WPF Desktop app - -[![WPF App](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/wpf-host.png)](https://github.com/ServiceStack/RazorRockstars/raw/master/build/WpfHost.zip) - -Surprisingly .NET Desktop apps built with [Xamarin.Mac on OSX](https://xamarin.com/mac) using Cocoa's WebKit-based WebView widget provides a superior experience over WPF's built-in WebBrowser widget which renders in an old behind-the-times version of IE. To improve the experience on Windows we're exploring better experiences on Windows by researching options around the [Chromium Embedded Framework](https://code.google.com/p/chromiumembedded/) and the existing managed .NET wrappers: [CefGlue](http://xilium.bitbucket.org/cefglue/) and [CefSharp](https://github.com/cefsharp/CefSharp). - -**Xamarin.Mac** can deliver an even better end-user experience by bundling the Mono runtime with the app avoiding the need for users to have Mono runtime installed. Incidentally this is the same approach used to deploy .NET OSX apps to the [Mac AppStore](http://www.apple.com/osx/apps/app-store.html). - -### Standard Web Hosts - -As the only differences when using the embedded .dll is that it embeds all img/js/css/etc assets as embedded resources and makes use of compiled razor views, it can also be used in standard web hosts configurations which are effectively just lightweight wrappers containing the App configuration and references to external dependencies: - - - [CompiledViews in SelfHost](https://github.com/ServiceStack/RazorRockstars/tree/master/src/RazorRockstars.CompiledViews.SelfHost) - - [CompiledViews in ASP.NET Web Host](https://github.com/ServiceStack/RazorRockstars/tree/master/src/RazorRockstars.CompiledViews.WebHost) - -Benefits of Web Hosts referencing embedded dlls include easier updates by being able to update a websites core functionality by copying over a single **.dll** as well as improved performance for Razor views by eliminating Razor compile times. - -### ILMerging - -Creating the single **RazorRockstars.exe** is simply a matter of [ILMerging all the self-host project dlls](https://github.com/ServiceStack/RazorRockstars/blob/master/build/ilmerge.bat) into a single executable. - -There are only a couple of issues that need to be addressed when running in a single ILMerged .exe: - -Assembly names are merged together so all registration of assemblies in `Config.EmbeddedResourceSources` end up referencing the same assembly which results in only serving embedded resources in the host assembly namespace. To workaround this behavior we've added a more specific way to reference assemblies in `Config.EmbeddedResourceBaseTypes`, e.g: - - ```csharp - SetConfig(new HostConfig { - DebugMode = true, - EmbeddedResourceBaseTypes = { GetType(), typeof(BaseTypeMarker) }, -}); -``` - -Where `BaseTypeMarker` is just a dummy class that sits on the base namespace of the class library that's used to preserve the Assembly namespace. - -The other limitation is not being able to merge unmanaged .dll's, which is what's needed for RazorRockstars as it makes use of the native `sqlite3.dll`. An easy workaround for this is to make `sqlite3.dll` an embedded resource then simply write it out to the current directory where OrmLite.Sqlite can find it when it first makes an sqlite connection, e.g: - - ```csharp -public static void ExportWindowsSqliteDll() -{ - if (Env.IsMono) - return; //Uses system sqlite3.so or sqlite3.dylib on Linux/OSX - - var resPath = "{0}.sqlite3.dll".Fmt(typeof(AppHost).Namespace); - - var resInfo = typeof(AppHost).Assembly.GetManifestResourceInfo(resPath); - if (resInfo == null) - throw new Exception("Couldn't load sqlite3.dll"); - - var dllBytes = typeof(AppHost).Assembly.GetManifestResourceStream(resPath).ReadFully(); - var dirPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - - var filePath = Path.Combine(dirPath, "sqlite3.dll"); - - File.WriteAllBytes(filePath, dllBytes); -} -``` - -This isn't required for Mono as it's able to make use of the preinstalled version of sqlite on OSX and Linux platforms. - -### Compiled Razor Views - -Support for Compiled Razor Views has landed in ServiceStack thanks to the efforts of [Carl Healy](https://github.com/Tyst). - -The primary benefits of compiled views is improved performance by eliminating compile times of Razor views. They also provide static compilation benefits by highlighting compile errors during development and also save you from deploying multiple `*.cshtml` files with your app since they all end up pre-compiled in your Assembly. - -Enabling compiled views is fairly transparent where you only need to install the new [Razor.BuildTask NuGet Package](https://www.nuget.org/packages/ServiceStack.Razor.BuildTask/) to the project containing your `.cshtml` Razor Views you want to compile: - - PM> Install-Package ServiceStack.Razor.BuildTask - -This doesn't add any additional dlls to your project, instead it just sets the **BuildAction** to all `*.cshtml` pages to `Content` and adds an MSBuild task to your project file to pre-compile razor views on every build. - -Then to register assemblies containing compiled razor views with Razor Format you just need to add it to `RazorFormat.LoadFromAssemblies`, e.g: - -```csharp -Plugins.Add(new RazorFormat { - LoadFromAssemblies = { typeof(RockstarsService).Assembly } -}); -``` - -The Compiled Views support continues to keep a great development experience in [DebugMode](https://github.com/ServiceStack/ServiceStack/wiki/Debugging#debugmode) where all Razor Views are initially loaded from the Assembly but then continues to monitor the file system for modified views, automatically compiling and loading them on the fly. - -## [Postman Support](http://www.getpostman.com/) - -We've added great support for the very popular [Postman Rest Client](http://www.getpostman.com/) in this release which is easily enabled by just registering the plugins below: - -```csharp -Plugins.Add(new PostmanFeature()); -Plugins.Add(new CorsFeature()); -``` - -> As it makes cross-site requests, Postman also requires CORS support. - -Once enabled, a link with appear in your metadata page: - -![Postman Metadata link](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/postman-metadata.png) - -Which by default is a link to `/postman` route that returns a JSON postman collection that can be imported into postman by clicking on **import collections** icon at the top: - -![Postman Screenshot](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/postman.png) - -Once imported it will populate a list of available routes which you can select and easily call from the Postman UI. Just like the [Swagger Support](https://github.com/ServiceStack/ServiceStack/wiki/Swagger-API) the list of operations returned respects the [Restriction Attributes](https://github.com/ServiceStack/ServiceStack/wiki/Restricting-Services) and only shows the operations each user is allowed to see. - -The above screenshot shows how to call the `SearchRockstars` Route `/rockstars/{Id}` which returns the rockstar with the matching id. - -The screenshot above also illustrates some of the customization that's available with the [Email Contacts](https://github.com/ServiceStack/EmailContacts/) metadata imported with the default settings and the Razor Rockstars metadata imported with a customized label: - - /postman?label=type,+,route - -The `label` param accepts a collection of string tokens that controls how the label is formatted.The `type` and `route` are special tokens that get replaced by the **Request DTO name** and **Route** respectively. Everything else are just added string literals including the `+` character which is just a url-encoded version of ` ` space character. - -Here are some examples using the example definition below: - -```csharp -[Route("/contacts/{Id}")] -public class GetContact { ... } -``` - -
      - - - - - - - - - - - - - - - - -
      /postman?label=typeGetContact
      /postman?label=route/contacts/{Id}
      /postman?label=type:englishGet contact
      /postman?label=type:english,+(,route,)Get contact (/contacts/{Id})
      - -The default label format can also be configured when registering the Postman plugin, e.g: - -```csharp -Plugins.Add(new PostmanFeature { - DefaultLabelFmt = new List { "type:english", " ", "route" } -}); -``` - -### Support for authenticated requests - -We've also made it easy to call authentication-only services with the `/postman?exportSession=true` parameter which will redirect to a url that captures your session cookies into a deep-linkable url like `/postman?ssopt=temp&ssid={key}&sspid={key}` that can be copied into Postman. - -This lets you replace your session cookies with the session ids on the url, effectively allowing you to take over someone elses session, in this case telling Postman to make requests on your behalf using your authenticated session cookies. - -As this functionality is potentially dangerous it's only enabled by default in **DebugMode** but can be overridden with: - -```csharp -Plugins.Add(new PostmanFeature { - EnableSessionExport = true -}); -``` - -### Other Customizations - -Other options include hosting postman on an alternate path, adding custom HTTP Headers for each Postman request and providing friendly aliases for Request DTO Property Types that you want to appear to external users, in this case we can show `DateTime` types as `Date` in Postmans UI: - -```csharp -Plugins.Add(new PostmanFeature { - AtRestPath = "/alt-postman-link", - Headers = "X-Custom-Header: Value\nXCustom2: Value2", - FriendlyTypeNames = { {"DateTime", "Date"} }, -}); -``` - -## [Cascading layout templates](http://razor.servicestack.net/#no-ceremony) - -Support for [Cascading layout templates](http://razor.servicestack.net/#no-ceremony) for Razor ViewPages inside `/Views` were added in this release by [@Its-Tyson](https://github.com/Its-Tyson). - -This works the same intuitive way it does for external Razor Content pages where the `_Layout.cshtml` nearest to the selected View will be used by default, e.g: - - /Views/_Layout.cshtml - /Views/Public.cshtml - /Views/Admin/_Layout.cshtml - /Views/Admin/Dashboard.cshtml - -Where `/Views/Admin/Dashboard.cshtml` by default uses the `/Views/Admin/_Layout.cshtml` template. - -## Async APIs added to HTTP Utils - -The following Async versions of [HTTP Utils](https://github.com/ServiceStack/ServiceStack/wiki/Http-Utils) have been added to ServiceStack.Text by [Kyle Gobel](https://github.com/KyleGobel): - -```csharp -Task GetStringFromUrlAsync(...) -Task PostStringToUrlAsync(...) -Task PostToUrlAsync(...) -Task PostJsonToUrlAsync(...) -Task PostXmlToUrlAsync(...) -Task PutStringToUrlAsync(...) -Task PutToUrlAsync(...) -Task PutJsonToUrlAsync(...) -Task PutXmlToUrlAsync(...) -Task DeleteFromUrlAsync(...) -Task OptionsFromUrlAsync(...) -Task HeadFromUrlAsync(...) -Task SendStringToUrlAsync(...) -``` - -## Redis - -The latest [stable release of redis-server](http://download.redis.io/redis-stable/00-RELEASENOTES) includes support for the new [ZRANGEBYLEX](http://redis.io/commands/zrangebylex) sorted set operations allowing you to query a sorted set lexically. A good showcase for this is available on [autocomplete.redis.io](http://autocomplete.redis.io/) that shows a demo querying all 8 millions of unique lines of the Linux kernel source code in a fraction of a second. - -These new operations are available as a 1:1 mapping with redis-server on IRedisNativeClient: - -```csharp -public interface IRedisNativeClient -{ - ... - byte[][] ZRangeByLex(string setId, string min, string max, int? skip = null, int? take = null); - long ZLexCount(string setId, string min, string max); - long ZRemRangeByLex(string setId, string min, string max); -} -``` - -As well as under more user-friendly APIs under IRedisClient: - -```csharp -public interface IRedisClient -{ - ... - List SearchSortedSet(string setId, string start=null, string end=null, int? skip=null, int? take=null); - long SearchSortedSetCount(string setId, string start=null, string end=null); - long RemoveRangeFromSortedSetBySearch(string setId, string start=null, string end=null); -} -``` - -Just like NuGet version matchers, Redis uses `[` char to express inclusiveness and `(` char for exclusiveness. -Since the `IRedisClient` APIs defaults to inclusive searches, these two APIs are the same: - -```csharp -Redis.SearchSortedSetCount("zset", "a", "c") -Redis.SearchSortedSetCount("zset", "[a", "[c") -``` - -Alternatively you can specify one or both bounds to be exclusive by using the `(` prefix, e.g: - -```csharp -Redis.SearchSortedSetCount("zset", "a", "(c") -Redis.SearchSortedSetCount("zset", "(a", "(c") -``` - -More API examples are available in [LexTests.cs](https://github.com/ServiceStack/ServiceStack.Redis/blob/master/tests/ServiceStack.Redis.Tests/LexTests.cs). - -### Twemproxy support - -This release also includes better support for [twemproxy](https://github.com/twitter/twemproxy), working around missing server commands sent upon connection. - -## OrmLite - -New support for StringFilter allowing you apply custom filter on string values, e.g [remove trailing whitespace](http://stackoverflow.com/a/23261868/85785): - -```csharp -OrmLiteConfig.StringFilter = s => s.TrimEnd(); - -db.Insert(new Poco { Name = "Value with trailing " }); -Assert.That(db.Select().First().Name, Is.EqualTo("Value with trailing")); -``` - -Added implicit support for [escaping wildcards in typed expressions](http://stackoverflow.com/a/23435975/85785) that make use of LIKE, namely `StartsWith`, `EndsWith` and `Contains`, e.g: - -```csharp -db.Insert(new Poco { Name = "ab" }); -db.Insert(new Poco { Name = "a%" }); -db.Insert(new Poco { Name = "a%b" }); - -db.Count(q => q.Name.StartsWith("a_")); //0 -db.Count(q => q.Name.StartsWith("a%")); //2 -``` - -OrmLite also underwent some internal refactoring to remove duplicate code and re-use existing code-paths. - -### Other Features - - - Allow overriding of `HttpListenerBase.CreateRequest()` for controlling creation of Self-Hosting requests allowing you to force a [Character encoding to override the built-in heuristics](http://stackoverflow.com/a/23381383/85785) for detecting non UTF-8 character encodings - - Support for retrieving untyped `base.UserSession` when inheriting from an untyped MVC `ServiceStackController` - - Added `@Html.RenderErrorIfAny()` to render a pretty bootstrap-styled exception response in a razor view - - The generated WSDL output now replaces all occurances of `http://schemas.servicestack.net/types` with `Config.WsdlServiceNamespace` - - Initialize the CompressedResult Status code with the current HTTP ResponseStatus code - - Plugins implementing `IPreInitPlugin` are now configured immediately after `AppHost.Configure()` - - HttpListeners now unwrap async Aggregate exceptions containing only a Single Exception for better error reporting - - HttpListeners now shares the same behavior as IIS for [redirecting requests for directories without a trailing slash](https://github.com/ServiceStack/ServiceStack/commit/a0a2857721656c7161fcd83eb07609ae4239ea2a) - - [Debug Request Info](https://github.com/ServiceStack/ServiceStack/wiki/Debugging#request-info) now shows file listing of the configured VirtualPathProvider - - Resource Virtual Directories are no longer case-sensitive - - Added new `Config.ExcludeAutoRegisteringServiceTypes` option to exclude services from being implicitly auto registered from assembly scanning. All built-in services in ServiceStack.dll now excluded by default which removes unintentional registration of services from ILMerging. - -# New HTTP Benchmarks example project - -[![HTTP Benchmarks](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/benchmarks-admin-ui.png)](https://httpbenchmarks.servicestack.net/) - -Following the release of the [Email Contacts](https://github.com/ServiceStack/EmailContacts/) solution, a new documented ServiceStack example project allowing you to uploaded Apache HTTP Benchmarks to visualize and analyze their results has been released at: [github.com/ServiceStack/HttpBenchmarks](https://github.com/ServiceStack/HttpBenchmarks) and is hosted at [httpbenchmarks.servicestack.net](https://httpbenchmarks.servicestack.net/). - -### Example Results - - - [Performance of different RDBMS in an ASP.NET Host](https://httpbenchmarks.servicestack.net/databases-in-asp-net) - - [Performance of different ServiceStack Hosts](https://httpbenchmarks.servicestack.net/servicestack-hosts) - -The documentation includes a development guide that walks through the projects different features: - - - Integration with `Glimpse` with support for `DotNetOpenAuth` - - Allow authentication with Twitter, Facebook, Google and LinkedIn OAuth providers - - Enables registration of new user accounts - - Use of `[FallbackRoute]` attribute to allow users to create top-level routes (e.g. twitter.com/name) - - Explains why you want to aim for minimal JS dependencies - - Introduction of **Really Simple MV Pattern** using plain JavaScript - - Integration with multi-file Uploader `FineUploader` - - Processes multiple file uploads including files in **.zip** packages using `DotNetZip` - - Integration with `Highcharts.js` - - Hosting differences of ASP.NET with AWS - - Deploying to AWS and creating customized deployment packages with MSDeploy - - Configuring SSL - - Forcing SSL Redirects - -The repository also includes benchmark scripts and host projects of [all ServiceStack HTTP Hosts](https://github.com/ServiceStack/HttpBenchmarks/tree/master/servers -), which all support runtime configuration of different RDBMS's: - -# v4.0.18 Release Notes - -## New, much faster Self-Host! - -Prior to this release ServiceStack had 2 self-hosting options with different [Concurrency Models](https://github.com/ServiceStack/ServiceStack/wiki/Concurrency-model): - -- `AppHostHttpListenerBase` - Executes requests on the IO callback thread -- `AppHostHttpListenerPoolBase` - Executes requests on .NET's built-in ThreadPool - -Where in typical scenarios (i.e. CPU intensive or blocking IO), executing on .NET's Thread Pool provides better performance. - -This [Self-hosting performance analysis](http://en.rdebug.com/2013/05/06/servicestack-selfhosted-performance-boost/) from the ServiceStack community shows we're able to achieve even better performance by utilizing the excellent [Smart Thread Pool](http://www.codeproject.com/Articles/7933/Smart-Thread-Pool) instead, which is now available in the `AppHostHttpListenerSmartPoolBase` base class. - -The new Smart Pool self-host routinely outperforms all other self hosting options, and does especially well in heavy IO scenarios as seen in the benchmarks below: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Self HostASP.NET/IIS ExpressHttpListener PoolHttpListener
      Database updates1x1.9x2x4.1x
      Single database query1x1.2x1.5x2.6x
      Multiple database queries1x1.2x1.4x2.6x
      Plaintext1x2.3x2.4x1.6x
      Fortunes Razor View1x1.2x1.5x1.8x
      JSON serialization1x1.2x1.4x1x
      - -### Using different Self Host options - -You can easily switch between the different self-hosting options by simply changing your AppHost's base class, e.g: - -```csharp -public class AppHost : AppHostHttpListenerBase { ... } -public class AppHost : AppHostHttpListenerPoolBase { ... } -public class AppHost : AppHostHttpListenerSmartPoolBase { ... } -``` - -Both the HttpListener Pool and SmartPool hosts have configurable pool sizes that can be tweaked to perform better under different scenarios. - -### Optimal Self Hosted option - -As the number of self-hosts grow, we've added a new `AppSelfHostBase` base class that represents an alias for the highest performing self-hosting option with an optimal configuration that we'll continue to tune for performance against typical scenarios. Unless you've identified specific configurations that performs better for your use-case, the recommendation is for new self-hosts to inherit this configuration: - -```csharp -public class AppHost : AppSelfHostBase { ... } -``` - -## OrmLite - -OrmLite received a lot more attention this release with a number of value-added additions: - -### Improved Oracle RDBMS provider - -The OrmLite Oracle Provider has been significantly improved thanks to [Bruce Cowen](https://github.com/BruceCowan-AI) efforts who's brought the quality in-line with other RDBMS providers which now passes OrmLite's test suite. As part of this change, the Oracle Provider now depends on [Oracle's Data Provider for .NET](http://www.oracle.com/technetwork/topics/dotnet/index-085163.html) and can be installed with: - - PM> Install-Package ServiceStack.OrmLite.Oracle - PM> Install-Package ServiceStack.OrmLite.Oracle.Signed - -More notes about the Oracle provider are maintained in the [OrmLite Release Notes](https://github.com/ServiceStack/ServiceStack.OrmLite/#oracle-provider-notes). - -### Improved Typed SqlExpressions - -The existing `db.SqlExpression()` API has a more readable alias in: - -```csharp -db.From(); -``` - -Which now supports an optional SQL **FROM** fragment that can be used to specify table joins, e.g: - - var results = db.Select(db.From("Person INNER JOIN Band ON Person.Id = Band.PersonId")); - -#### New ISqlExpression API - -OrmLite API's have overloads to execute any SQL builders that implement the simple `ISqlExpression` API, i.e: - -```csharp -public interface ISqlExpression -{ - string ToSelectStatement(); -} -``` - -This allows for more readable code when using a decoupled Sql Builder, e.g: - -```csharp -int over40s = db.Scalar(db.From().Select(Sql.Count("*")).Where(q => q.Age > 40)); - -List lastNames = db.Column(db.From().Select(x => x.LastName).Where(q => q.Age == 27)); - -HashSet uniqueAges = db.ColumnDistinct(db.From().Select(x => x.Age).Where(q => q.Age < 50)); - -Dictionary map = db.Dictionary(db.From().Select(x => new {x.Id, x.LastName})); -``` - -#### Partial Selects - -This also improves the APIs for partial SELECT queries, which originally required the use of custom SQL: - -```csharp -var partialColumns = db.SelectFmt(typeof(Shipper), "ShipperTypeId = {0}", 2); -``` - -But can now be expressed in any of the more typed examples below: - -```csharp -var partialColumns = db.Select(db.From().Where(q => q.ShipperTypeId == 2)); -``` - -Or partially populating the same POCO with only the columns specified: - -```csharp -var partialColumns = db.Select(q => q.Select(x => new { x.Phone, x.CompanyName }) - .Where(x => x.ShipperTypeId == 2)); - -var partialColumns = db.Select(q => q.Select("Phone, CompanyName") - .Where(x => x.ShipperTypeId == 2)); -``` - -#### Nullable Limit APIs - -The Limit API's now accept `int?` making it easier to apply paging in your ServiceStack services, e.g: - -```csharp -public Request -{ - public int? Skip { get; set; } - public int? Take { get; set; } -} - -public List
      Any(Request request) -{ - return Db.Select(db.From
      .Limit(request.Skip, request.Take)); -} -``` - -Which will only filter the results for the values provided. Aliases for `Skip()` and `Take()` are also available if LINQ naming is preferred. - -#### New AliasNamingStrategy - -A new alias naming strategy was added (in addition to `[Alias]` attribute) that lets you specify a dictionary of Table and Column aliases OrmLite should used instead, e.g: - -```csharp -OrmLiteConfig.DialectProvider.NamingStrategy = new AliasNamingStrategy { - TableAliases = { { "MyTable", "TableAlias" } }, - ColumnAliases = { { "MyField", "ColumnAlias" } }, -}; -``` - -Which OrmLite will use instead, e.g when creating a table: - -```csharp -db.CreateTable(); -``` - -Aliases can also be referenced when creating custom SQL using the `SqlTable()` and `SqlColumn()` extension methods, e.g: - -```csharp -var result = db.SqlList( - "SELECT * FROM {0} WHERE {1} = {2}".Fmt( - "MyTable".SqlTable(), - "MyField".SqlColumn(), "foo".SqlValue())); -``` - -#### New Exists APIs - -Nicer if you just need to check for existence, instead of retrieving a full result-set e.g: - -```csharp -bool hasUnder50s = db.Exists(x => x.Age < 50); -bool hasUnder50s = db.Exists(db.From().Where(x => x.Age < 50)); -``` - -## Redis - -### New Scan APIs Added - -Redis v2.8 introduced a beautiful new [SCAN](http://redis.io/commands/scan) operation that provides an optimal strategy for traversing a redis instance entire keyset in managable-size chunks utilizing only a client-side cursor and without introducing any server state. It's a higher performance alternative and should be used instead of [KEYS](http://redis.io/commands/keys) in application code. SCAN and its related operations for traversing members of Sets, Sorted Sets and Hashes are now available in the Redis Client in the following API's: - -```csharp -public interface IRedisClient -{ - ... - IEnumerable ScanAllKeys(string pattern = null, int pageSize = 1000); - IEnumerable ScanAllSetItems(string setId, string pattern = null, int pageSize = 1000); - IEnumerable> ScanAllSortedSetItems(string setId, string pattern = null, int pageSize = 1000); - IEnumerable> ScanAllHashEntries(string hashId, string pattern = null, int pageSize = 1000); -} - -//Low-level API -public interface IRedisNativeClient -{ - ... - ScanResult Scan(ulong cursor, int count = 10, string match = null); - ScanResult SScan(string setId, ulong cursor, int count = 10, string match = null); - ScanResult ZScan(string setId, ulong cursor, int count = 10, string match = null); - ScanResult HScan(string hashId, ulong cursor, int count = 10, string match = null); -} -``` - -The `IRedisClient` provides a higher-level API that abstracts away the client cursor to expose a lazy Enumerable sequence to provide an optimal way to stream scanned results that integrates nicely with LINQ, e.g: - -```csharp -var scanUsers = Redis.ScanAllKeys("urn:User:*"); -var sampleUsers = scanUsers.Take(10000).ToList(); //Stop after retrieving 10000 user keys -``` - -### New HyperLog API - -The development branch of Redis server (available when v3.0 is released) includes an ingenious algorithm to approximate the unique elements in a set with maximum space and time efficiency. For details about how it works see Redis's creator Salvatore's blog who [explains it in great detail](http://antirez.com/news/75). Essentially it lets you maintain an efficient way to count and merge unique elements in a set without having to store its elements. -A Simple example of it in action: - -```csharp -redis.AddToHyperLog("set1", "a", "b", "c"); -redis.AddToHyperLog("set1", "c", "d"); -var count = redis.CountHyperLog("set1"); //4 - -redis.AddToHyperLog("set2", "c", "d", "e", "f"); - -redis.MergeHyperLogs("mergedset", "set1", "set2"); - -var mergeCount = redis.CountHyperLog("mergedset"); //6 -``` - -## HTTP and MQ Service Clients - -### Substitutable OneWay MQ and HTTP Service Clients - -Service Clients and MQ Clients have become a lot more interoperable where all MQ Clients now implement the Service Clients `IOneWayClient` API which enables writing code that works with both HTTP and MQ Clients: - -```csharp -IOneWayClient client = GetClient(); -client.SendOneWay(new RequestDto { ... }); -``` - -Likewise the HTTP Service Clients implement the Messaging API `IMessageProducer`: - -```csharp -void Publish(T requestDto); -void Publish(IMessage message); -``` - -When publishing a `IMessage` the message metadata are sent as HTTP Headers with an `X-` prefix. - -### UploadProgress added on Service Clients - -Which works similar to [OnDownloadProgress](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/AsyncProgressTests.cs) where you can specify a callback to provide UX Progress updates, e.g: - -```csharp -client.OnUploadProgress = (bytesWritten, total) => "Written {0}/{1} bytes...".Print(bytesWritten, total); - -client.PostFileWithRequest(url, new FileInfo(path), new Upload { CreatedBy = "Me" }); -``` - -## Razor Support - -Our support for [No Ceremony Razor pages](https://github.com/ServiceStack/EmailContacts/#the-no-ceremony-option---dynamic-pages-without-controllers) has been very well received which has all but alleviated the need of requiring services / controllers for dynamic html pages. One of the areas where a Service may be required is for execution any custom request filters, which we've now added support for by letting you choose to execute all request filters for a specific Request with: - -```csharp -@{ - ApplyRequestFilters(new RequestDto()); -} -``` - -This will execute all the Request Filters applied to the specified Request DTO. Any one of the filters ends the request (e.g. with a redirect) and the rest of the Razor page will stop execution. - -Likewise it's possible to redirect from within Razor with: - -```csharp -@{ - if (!IsAuthenticated) { - Response.RedirectToUrl("/login"); - throw new StopExecutionException(); - } -} -``` -An alternative to `StopExecutionException` is to have an explicit `return;`, the difference being that it will continue to execute the remainder of the page, although neither approach will emit any Razor output to the response. - -As redirecting non-authenticated users is a common use-case it's also available as a one-liner: - -```csharp -@{ - RedirectIfNotAuthenticated(); -} -``` - -Which if no url is specified it will redirect to the path configured on `AuthFeature.HtmlRedirect`. - -### ss-utils.js - -A few enhancements were added to ServiceStack's **/js/ss-utils.js** is ServiceStack's built-in JS library, first demonstrated in [Email Contacts solution](https://github.com/ServiceStack/EmailContacts/#servicestack-javascript-utils---jsss-utilsjs): - -Declarative event handlers can send multiple arguments: - -```html -
        -
      • Foo
      • -
      • Bar
      • -
      -``` - -```javascript -$(document).bindHandlers({ - single: function(){ - var li = this; - }, - multiple: function(arg1, arg2) { - var li = this; - } -}); -``` - -Trigger client-side validation errors with `setFieldError()`: - -```javascript -$("form").bindForm({ - validate: function(){ - var params = $(this).serializeMap(); - if (params.Password != params.Confirm){ - $(this).setFieldError('Password', 'Passwords to not match'); - return false; - } - } -}); -``` - -Model binding now also populates `data-href` and `data-src` attributes e.g: - -```html - -``` - -```javascript -$("form").applyValues({ FieldName: imgUrl }); -``` -## Other Changes - -### Restriction attributes allowed on Services - -Restriction attributes can be added on Service classes in addition to Request DTOs (which still take precedence). - -```csharp -[Restrict(LocalhostOnly = true)] -public class LocalHostOnlyServices : Service { ... } -``` - -## AppSettings - -### New OrmLiteAppSettings - -Added new read/write AppSettings config option utilizing OrmLite as the back-end. -This now lets you maintain your applications configuration in any [RDBMS back-end OrmLite supports](https://github.com/ServiceStack/ServiceStack.OrmLite/#download). It basically works like a mini Key/Value database in which can store any serializable value against any key which is maintained into the simple Id/Value `ConfigSettings` table. - -#### Usage - -Registration just uses an OrmLite DB Factory, e.g: - -```csharp -container.Register(c => new OrmLiteAppSettings(c.Resolve())); -var appSettings = container.Resolve(); -appSettings.InitSchema(); //Create the ConfigSettings table if it doesn't exist -``` - -It then can be accessed like any [AppSetting APIs](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.Common.Tests/Configuration/AppSettingsTests.cs): - -```csharp -//Read the `MyConfig` POCO stored at `config` otherwise use default value if it doesn't exist -MyConfig config = appSettings.Get("config", new MyConfig { Key = "DefaultValue" }); -``` - -It also supports writing config values in addition to the AppSettings read-only API's, e.g: - -```csharp -var latestStats = appSettings.GetOrCreate("stats", () => statsProvider.GetLatest()); -``` - -### Extract key / value settings from text file - -The new ParseKeyValueText extension method lets you extract key / value data from text, e.g: - -```csharp -var configText = @" -StringKey string value -IntKey 42 -ListKey A,B,C,D,E -DictionaryKey A:1,B:2,C:3,D:4,E:5 -PocoKey {Foo:Bar,Key:Value}"; - -Dictionary configMap = configText.ParseKeyValueText(delimiter:" "); -``` - -When combined with the existing `DictionarySettings`, enables a rich, simple and clean alternative to .NET's App.config config section for reading structured configuration into clean data structures, e.g: - -```csharp -IAppSettings appSettings = new DictionarySettings(configMap); - -string value = appSettings.Get("StringKey"); - -int value = appSettings.Get("IntKey", defaultValue:1); - -List values = appSettings.GetList("ListKey"); - -Dictionary valuesMap = appSettings.GetList("DictionaryKey"); - -MyConfig config = appSettings.Get("PocoKey", new MyConfig { Key = "DefaultValue"}); -``` - -As we expect this to be a popular combination we've combined them into a single class that accepts a filePath, providing a simple alternative to custom Web.config configurations: - -```csharp -var appSettings = new TextFileSettings("~/app.settings".MapHostAbsolutePath()); -``` - -### PerfUtils - -We've included the [C# Benchmark Utils](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Common/PerfUtils.cs) previously used in [Sudoku Benchmarks](https://github.com/dartist/sudoku_solver#benchmarks) originally inspired from [Dart's benchmark_harness](https://github.com/dart-lang/benchmark_harness). Unlike other benchmark utils, it runs for a specified period of time (2000ms by default) then returns the avg iteration time in microseconds. Here's an example usage comparing performance of maintaining a unique int collection between HashSet vs List: - -```csharp -var rand = new Random(); -var set = new HashSet(); -var avgMicroSecs = PerfUtils.Measure( - () => set.Add(rand.Next(0, 1000)), runForMs:2000); - -"HashSet: {0}us".Print(avgMicroSecs); - -var list = new List(); -avgMicroSecs = PerfUtils.Measure(() => { - int i = rand.Next(0, 1000); - if (!list.Contains(i)) - list.Add(i); - }, runForMs: 2000); - -"List: {0}us".Print(avgMicroSecs); -``` - -### Minor Changes - -- Numeric type mismatches between POCOs used in OrmLite and underlying RDBMS Tables are transparently coerced -- `Vary: Accept` is included in Global HTTP Headers to resolve browsers caching different Content-Type for the same url -- Razor configuration removes references to a specific version of ASP.NET Web Pages and adds `System` to default namespaces -- Swagger API emits an ApiVersion, configurable with `Config.ApiVersion` that defaults to "1.0" -- Partials now render inside user-defined Razor sections -- Added `email.ToGravatarUrl()` extension method to retrieve avatar url from an email -- Replaced self-hosts use of ThreadStatics with CallContext to preserve Request scope in async requests -- Avoid runtime razor exceptions in Mono by not registering duplicate assemblies (i.e. from GAC) in RazorHost -- AppHostHttpListenerPoolBase self-host has a default pool size of `16 x Environment.ProcessorCount` -- ServiceStack's `IAppHost.CustomErrorHttpHandlers` can now override built-in HTTP Error handlers and fallback to generic error responses - -### New Signed Projects - -- [ServiceStack.ProtoBuf.Signed](https://www.nuget.org/packages/ServiceStack.ProtoBuf.Signed) - -### Breaking Changes - -- Moved `Config.GlobalHtmlErrorHttpHandler` to `IAppHost.GlobalHtmlErrorHttpHandler` - - -# v4.0.15 Release Notes - -### Individual Products now available - -In this release we've added the most requested "non-technical feature" by creating new licenses for [individual ServiceStack products](https://servicestack.net/#products) which provide -much better value when only using one of ServiceStack's stand-alone libraries on their own. - -New products available: - - - [servicestack.net/text](https://servicestack.net/text) - - [servicestack.net/redis](https://servicestack.net/redis) - - [servicestack.net/ormlite](https://servicestack.net/ormlite) - -> Both OrmLite and Redis includes an implicit license for ServiceStack.Text - -### ServiceStack - - - Upgraded ServiceStack's external dependencies to use latest version on NuGet - - Modified [ServiceStack.RabbitMq](http://www.nuget.org/packages/ServiceStack.RabbitMq) to only depend on **ServiceStack** instead of **ServiceStack.Server** - - Added optional `fieldName` property to ServiceClient [PostFileWithRequest](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Interfaces/IRestClient.cs#L52-L55) - - Changed exceptions in FileSystem scanning to be logged as warnings, fixes issues with NTFS symbolic links - - Pass through Thread CurrentCulture when executing a sync request in a new Task - - Added Evaluator.NamespaceAssemblies to specify alternate default namespace for Assemblies - - Changed to use OrdinalIgnoreCase instead of InvariantCultureIgnoreCase when possible - -### OrmLite - -#### OrmLite's core Exec functions are now overridable as a Filter - -Continuing in efforts to make OrmLite more introspectable and configurable, OrmLite's core Exec functions -[have been re-factored out into a substitutable Exec Filter](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/fa55404200f4a319eae3a298b648462dadafce5e). - -This now makes it possible to inject a custom managed exec function where you can inject your own behavior, tracing, profiling, etc. - -It comes in useful for situations when you want to use SqlServer in production but use an `in-memory` Sqlite database in tests and you want to emulate any missing SQL Server Stored Procedures in code: - -```csharp -public class MockStoredProcExecFilter : OrmLiteExecFilter -{ - public override T Exec(IDbConnection dbConn, Func filter) - { - try - { - return base.Exec(dbConn, filter); - } - catch (Exception ex) - { - if (dbConn.GetLastSql() == "exec sp_name @firstName, @age") - return (T)(object)new Person { FirstName = "Mocked" }; - throw; - } - } -} - -OrmLiteConfig.ExecFilter = new MockStoredProcExecFilter(); - -using (var db = OpenDbConnection()) -{ - var person = db.SqlScalar("exec sp_name @firstName, @age", - new { firstName = "aName", age = 1 }); - - person.FirstName.Print(); //Mocked -} -``` -Or if you want to do things like executing each operation multiple times, e.g: - -```csharp -public class ReplayOrmLiteExecFilter : OrmLiteExecFilter -{ - public int ReplayTimes { get; set; } - - public override T Exec(IDbConnection dbConn, Func filter) - { - var holdProvider = OrmLiteConfig.DialectProvider; - var dbCmd = CreateCommand(dbConn); - try - { - var ret = default(T); - for (var i = 0; i < ReplayTimes; i++) - { - ret = filter(dbCmd); - } - return ret; - } - finally - { - DisposeCommand(dbCmd); - OrmLiteConfig.DialectProvider = holdProvider; - } - } -} - -OrmLiteConfig.ExecFilter = new ReplayOrmLiteExecFilter { ReplayTimes = 3 }; - -using (var db = OpenDbConnection()) -{ - db.DropAndCreateTable(); - db.Insert(new PocoTable { Name = "Multiplicity" }); - - var rowsInserted = db.Count(q => q.Name == "Multiplicity"); //3 -} -``` - -#### Other improvements - - - Added [SqlVerifyFragment string extension](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/7f0711aa3368087037d8b7b84cf9f70f1ea2b191) to verify sql fragments where free-text is allowed in SqlExpression APIs - - Change MySql to create TimeSpan's column as INT to store ticks - -### Redis - - - Add new Increment by double and long methods to Redis Client - -### Text - - - Added [T.PopulateFromPropertiesWithoutAttribute](https://github.com/ServiceStack/ServiceStack.Text/commit/9bd0cc35c0a4e3ddcb7e6b6b88e760f45496145b) Auto Mapping method - -### New Signed NuGet Packages - - - [ServiceStack.OrmLite.Sqlite.Windows.Signed](http://www.nuget.org/packages/ServiceStack.OrmLite.Sqlite.Windows.Signed) - -# v4.0.12 Release Notes - -## New [Email Contact Services](https://github.com/ServiceStack/EmailContacts/) - -A new ServiceStack guidance is available detailing the recommended setup and physical layout structure of typical medium-sized ServiceStack projects. -It includes the complete documentation going through how to create the solution from scratch, and explains all the ServiceStack hidden features it makes use of along the way. - -[![EmailContacts Screenshot](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/email-contacts.png)](https://github.com/ServiceStack/EmailContacts/) - -[EmailContacts](https://github.com/ServiceStack/EmailContacts/) is a Single Page App built using just ServiceStack, -jQuery and Bootstrap that showcases some of ServiceStack's built-in features, useful in the reducing the effort for -developing medium-sized Web Applications. - -The purpose of EmailContacts is to manage contacts (in [any RDBMS](https://github.com/ServiceStack/ServiceStack.OrmLite/#download)), -provide a form to be able to send them messages and maintain a rolling history of any emails sent. -The application also provides an option to have emails instead sent and processed via [Rabbit MQ](https://github.com/ServiceStack/ServiceStack/wiki/Rabbit-MQ). - -#### Functional Single Page App in under 130 Lines of HTML and 70 Lines JS - -The entire EmailContacts UI is maintained in a single -[default.cshtml](https://github.com/ServiceStack/EmailContacts/blob/master/src/EmailContacts/default.cshtml) -requiring just 70 lines of JavaScript to render the dynamic UI, -bind server validation errors and provide real-time UX feedback. -The Application also follows an API-First development style where the Ajax UI calls only published APIs allowing -all services to be immediately available, naturally, via an end-to-end typed API to Mobile and Desktop .NET clients. - -### Example Projects - -During this release all Example projects, Demos, Starter Templates, etc in the -[ServiceStack.Example](https://github.com/ServiceStack/ServiceStack.Examples) and -[ServiceStack.UseCases](https://github.com/ServiceStack/ServiceStack.UseCases/) -master repositories were upgraded to ServiceStack v4. A new [ServiceStack + MVC5 project](https://github.com/ServiceStack/ServiceStack.UseCases/tree/master/Mvc5) -was also added to UseCases, it just follows the instructions at [MVC Integration](https://github.com/ServiceStack/ServiceStack/wiki/Mvc-integration) wiki, but starts with an empty MVC5 project. - -### Added new OrmLiteCacheClient - -A new `OrmLiteCacheClient` [Caching Provider](https://github.com/ServiceStack/ServiceStack/wiki/Caching) -was added to the **ServiceStack.Server** NuGet pacakge. -This provides a lot of utility by supporting -[OrmLite's RDBMS providers](https://github.com/ServiceStack/ServiceStack.OrmLite/#download) -allowing utilization of existing RDBMS's as a distributed cache, potentially saving an infrastructure dependency. - -Registration is simply: - -```csharp -//Register OrmLite Db Factory if not already -container.Register(c => - new OrmLiteConnectionFactory(connString, SqlServerDialect.Provider)); - -container.RegisterAs(); - -//Create 'CacheEntry' RDBMS table if it doesn't exist already -container.Resolve().InitSchema(); -``` - -### Service Clients - - - Added `CaptureSynchronizationContext` option to get Async Service Clients to execute responses on the same SynchronizationContext as their call-site - - Added `UserAgent` option, now defaults with the ServiceStack .NET client version - -### Minor features - - - Allow unrestricted access for Redis MQ and Rabbit MQ clients within free-quotas - - SessionIds are no longer created with Url Unfriendly chars `+`, `/` - - Add typed `ToOneWayUrl()` and `ToReplyUrl()` extension method for generating predefined urls - - Add Test showing how to use `ExecAllAndWait` extension method to [easily run synch operations in parallel](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.Common.Tests/ActionExecTests.cs) - - Added configurable BufferSize in StaticFileHandler - - All CacheClients can now store AuthUserSessions when `JsConfig.ExcludeTypeInfo=true` - - Allow RegistrationService to be used for PUT requests to updates User Registration info - - Elmah Logger now takes in a `HttpApplication` so it can use `ErrorSignal.Get(application).Raise()` allowing modules such as ErrorMail and ErrorPost (ElmahR) to be notified - -## OrmLite - - - Add support for [cloning SqlExpressions](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/Expression/ExpressionChainingUseCase.cs#L192-L207) - - Add example of [migrating SqlServer TIME column to BigInteger](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/AdoNetDataAccessTests.cs) - - Add example of [calling Stored Procedures with OrmLite vs ADO.NET](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/TypeWithByteArrayFieldTests.cs#L55-L147) - - Add support for [MaxText in all DB providers](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/TypeDescriptorMetadataTests.cs#L57-L96) with `[StringLength(StringLengthAttribute.MaxText)]` - - Capture the LastSql Run even for queries with exceptions - -## Redis - - - Use enhanced functionality for when newer versions of redis-server exists - - i.e. Use more precise EXPIRE operations when server supports it - - Add `GetServerTime()` - -## ServiceStack.Text - - - Moved `JsConfig.RegisterForAot()` to `PclExport.RegisterForAot()` - - Fine-grained AOT hints available on `IosPclExport` static methods in PCL builds - -## Breaking Changes - -The [ServiceStack.Stripe](https://www.nuget.org/packages/ServiceStack.Stripe/) NuGet package is now a normal .NET 4.0 release. A new portable NuGet package was created for PCL clients at [ServiceStack.Stripe.Pcl](https://www.nuget.org/packages/ServiceStack.Stripe.Pcl/). - -# v4.0.11 Release Notes - -## OrmLite - -This release saw a lot of effort towards adding new features to OrmLite: - -### Pluggable Complex Type Serializers - -One of the [most requested features](http://servicestack.uservoice.com/forums/176786-feature-requests/suggestions/4738945-allow-ormlite-to-store-complex-blobs-as-json) -to enable pluggable serialization for complex types in OrmLite is now supported. This can be used to specify different serialization strategies for each -available RDBMS provider, e.g: - -```csharp -//ServiceStack's JSON and JSV Format -SqliteDialect.Provider.StringSerializer = new JsvStringSerializer(); -PostgreSqlDialect.Provider.StringSerializer = new JsonStringSerializer(); -//.NET's XML and JSON DataContract serializers -SqlServerDialect.Provider.StringSerializer = new DataContractSerializer(); -MySqlDialect.Provider.StringSerializer = new JsonDataContractSerializer(); -//.NET XmlSerializer -OracleDialect.Provider.StringSerializer = new XmlSerializableSerializer(); -``` -You can also provide a custom serialization strategy by implementing -[IStringSerializer](https://github.com/ServiceStack/ServiceStack.Text/blob/master/src/ServiceStack.Text/IStringSerializer.cs). - -By default all dialects use the existing JsvStringSerializer, except for PostgreSQL which due to its built-in support for JSON, now uses the JSON format by default. - -#### Breaking Change - -Using JSON as a default for PostgreSQL may cause issues if you already have complex types blobbed with the previous JSV Format. -You can revert back to the old behavior by resetting it back to the JSV format with: - -```csharp -PostgreSqlDialect.Provider.StringSerializer = new JsvStringSerializer(); -``` - -### New Global Insert / Update Filters - -Similar to interceptors in some heavy ORM's, new Insert and Update filters were added which get fired just before any **insert** or **update** operation using OrmLite's typed API's (i.e. not dynamic SQL or partial updates using anon types). -This functionality can be used for easily auto-maintaining Audit information for your POCO data models, e.g: - -```csharp -public interface IAudit -{ - DateTime CreatedDate { get; set; } - DateTime ModifiedDate { get; set; } - string ModifiedBy { get; set; } -} - -OrmLiteConfig.InsertFilter = (dbCmd, row) => { - var auditRow = row as IAudit; - if (auditRow != null) - auditRow.CreatedDate = auditRow.ModifiedDate = DateTime.UtcNow; -}; - -OrmLiteConfig.UpdateFilter = (dbCmd, row) => { - var auditRow = row as IAudit; - if (auditRow != null) - auditRow.ModifiedDate = DateTime.UtcNow; -}; -``` - -Which will ensure that the `CreatedDate` and `ModifiedDate` fields are populated on every insert and update. - -### Validation - -The filters can also be used for validation where throwing an exception will prevent the operation and bubble the exception, e.g: - -```csharp -OrmLiteConfig.InsertFilter = OrmLiteConfig.UpdateFilter = (dbCmd, row) => { - var auditRow = row as IAudit; - if (auditRow != null && auditRow.ModifiedBy == null) - throw new ArgumentNullException("ModifiedBy"); -}; - -try -{ - db.Insert(new AuditTable()); -} -catch (ArgumentNullException) { - //throws ArgumentNullException -} - -db.Insert(new AuditTable { ModifiedBy = "Me!" }); //succeeds -``` - -### Custom SQL Customizations - -A number of new hooks were added to provide more flexibility when creating and dropping your RDBMS tables. - -#### Custom Field Declarations - -The new `[CustomField]` can be used for specifying custom field declarations in the generated Create table DDL statements, e.g: - -```csharp -public class PocoTable -{ - public int Id { get; set; } - - [CustomField("CHAR(20)")] - public string CharColumn { get; set; } - - [CustomField("DECIMAL(18,4)")] - public decimal? DecimalColumn { get; set; } -} - -db.CreateTable(); -``` - -Generates and executes the following SQL: - -```sql -CREATE TABLE "PocoTable" -( - "Id" INTEGER PRIMARY KEY, - "CharColumn" CHAR(20) NULL, - "DecimalColumn" DECIMAL(18,4) NULL -); -``` - -#### Pre / Post Custom SQL Hooks when Creating and Dropping tables - -A number of custom SQL hooks were added that allow you to inject custom SQL before and after tables are created or dropped, e.g: - -```csharp -[PostCreateTable("INSERT INTO TableWithSeedData (Name) VALUES ('Foo');" + - "INSERT INTO TableWithSeedData (Name) VALUES ('Bar');")] -public class TableWithSeedData -{ - [AutoIncrement] - public int Id { get; set; } - public string Name { get; set; } -} -``` - -And just like other ServiceStack attributes, they can also be added dynamically, e.g: - -```csharp -typeof(TableWithSeedData) - .AddAttributes(new PostCreateTableAttribute( - "INSERT INTO TableWithSeedData (Name) VALUES ('Foo');" + - "INSERT INTO TableWithSeedData (Name) VALUES ('Bar');")); -``` - -Custom SQL Hooks are now available to execute custom SQL before and after a table has been created or dropped, i.e: - -```csharp -[PreCreateTable(runSqlBeforeTableCreated)] -[PostCreateTable(runSqlAfterTableCreated)] -[PreDropTable(runSqlBeforeTableDropped)] -[PostDropTable(runSqlAfterTableDropped)] -public class Table {} -``` - -### Re-factoring OrmLite's SQLite NuGet Packages - -In their latest release, the SQLite dev team maintaining the [core SQLite NuGet packages](https://www.nuget.org/profiles/mistachkin/) -have added a dependency to Entity Framework on their existing Sqlite NuGet packages forcing the installation of Entity Framework for users of OrmLite Sqlite. -This change also caused some users to see invalid web.config sections after applying the new web.config.transforms. -After speaking to the maintainers they've created a new -[System.Data.SQLite.Core](http://www.nuget.org/packages/System.Data.SQLite.Core) -NuGet package without the entity framework dependency and the problematic web.config.transforms. - -Unfortunately this was only added for their bundled x86/x64 NuGet package and not their other -[System.Data.SQLite.x86](http://www.nuget.org/packages/System.Data.SQLite.x86/) and -[System.Data.SQLite.x64](http://www.nuget.org/packages/System.Data.SQLite.x64/) which the team have indicated should be deprecated -in favor of the x86/x64 bundled **System.Data.SQLite.Core** package. - -As a result of this we're removing the dependency to the Sqlite NuGet packages in both architecture specific -[ServiceStack.OrmLite.Sqlite32](http://www.nuget.org/packages/ServiceStack.OrmLite.Sqlite32/) and -[ServiceStack.OrmLite.Sqlite64](http://www.nuget.org/packages/ServiceStack.OrmLite.Sqlite64/) packages and have -instead embedded the Sqlite binaries directly, which will solve the current issues and shield them from any future changes/updates -from the upstream Sqlite packages. - -#### New ServiceStack.OrmLite.Sqlite.Windows NuGet package - -Both these arch-specific packages should now be deprecated in favour of a new Sqlite NuGet package supporting both x86/x64 architectures on Windows: - - PM> Install-Package ServiceStack.OrmLite.Sqlite.Windows - -Which should now be used for future (or existing) projects previously using the old -[OrmLite.Sqlite32](http://www.nuget.org/packages/ServiceStack.OrmLite.Sqlite32/) and -[OrmLite.Sqlite64](http://www.nuget.org/packages/ServiceStack.OrmLite.Sqlite64/) packages. - -The Windows-specific package was added in addition to our existing Mono and Windows compatible release: - - PM> Install-Package ServiceStack.OrmLite.Sqlite.Mono - -Which works cross-platform on Windows and Linux/OSX with Mono should you need cross-platform support. - -## .NET Service Clients - -New async API's were added for requests marked with returning `IReturnVoid`. -This provides a typed API for executing services with no response that was previously missing, e.g: - -```csharp -public class Request : IReturnVoid {} - -await client.PostAsync(new Request()); -``` - -The API's for all sync and async REST operations have been changed to return `HttpWebResponse` which now lets you query the returned HTTP Response, e.g: -```csharp -HttpWebResponse response = await client.PostAsync(new Request()); -var api = response.Headers["X-Api"]; -``` - -## Authentication - -### New IManageRoles API - -A new [IManageRoles API](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/Auth/IAuthRepository.cs#L26) -was added that IAuthRepository's can implement in order to provide an alternative strategy for querying and managing Users' -Roles and permissions. - -This new API is being used in the `OrmLiteAuthRepository` to provide an alternative way to store -Roles and Permission in their own distinct table rather than being blobbed with the rest of the User Auth data. -You can enable this new behavior by specifying `UseDistinctRoleTables=true` when registering the OrmLiteAuthRepository, e.g: - -```csharp -container.Register(c => -new OrmLiteAuthRepository(c.Resolve()) { - UseDistinctRoleTables = true, -}); -``` - -When enabled, roles and permissions are persisted in the distinct **UserAuthRole** table. -This behavior is integrated with the rest of ServiceStack including the Users Session, RequiredRole/RequiredPermission attributes and the AssignRoles/UnAssignRoles authentication services. -Examples of this can be seen in [ManageRolesTests.cs](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.Common.Tests/ManageRolesTests.cs). - -## [Messaging](https://github.com/ServiceStack/ServiceStack/wiki/Messaging) - -### Flexible Queue Name strategies - -There are now more flexible options for specifying the Queue Names used in [ServiceStack's MQ Servers](https://github.com/ServiceStack/ServiceStack/wiki/Messaging). -You can categorize queue names or avoid conflicts with other MQ services by specifying a global prefix to be used for all Queue Names, e.g: - -```csharp -QueueNames.SetQueuePrefix("site1."); - -QueueNames.In //= site1.mq:Hello.inq -``` - -Or to gain complete control of each queue name used, provide a custom QueueName strategy, e.g: - -```csharp -QueueNames.ResolveQueueNameFn = (typeName, suffix) => - "SITE.{0}{1}".Fmt(typeName.ToLower(), suffix.ToUpper()); - -QueueNames.In //= SITE.hello.INQ -``` - -> Note: Custom QueueNames need to be declared on both MQ Client in addition to ServiceStack Hosts. - -# v4.10 Release Notes - -## Debug Links - -To provide better visibility to the hidden functionality in ServiceStack we've added **Debug Info** links section to the `/metadata` page which add links to any Plugins with Web UI's, e.g: - -![Debug Info Links](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/debug-links.png) - -The Debug Links section is only available in **DebugMode** (recap: set by default in Debug builds or explicitly with `Config.DebugMode = true`). In addition, users with the **Admin** role (or if `Config.AdminAuthSecret` is enabled) can also view the debug Plugins UI's in production. - -You can add links to your own [Plugins](https://github.com/ServiceStack/ServiceStack/wiki/Plugins) in the metadata pages with: - -```csharp -appHost.GetPlugin().AddPluginLink("swagger-ui/", "Swagger UI"); -appHost.GetPlugin().AddDebugLink("?debug=requestinfo", "Request Info"); -``` - -`AddPluginLink` adds links under the **Plugin Links** section and should be used if your plugin is publicly visible, otherwise use `AddDebugLink` for plugins only available during debugging or development. - -## [Auto Mapping](https://github.com/ServiceStack/ServiceStack/wiki/Auto-mapping) - -#### Improved Support for non-POCO types -Previously you could only map between top-level POCO models, now you can map between scalars and collections directly, e.g: - -```csharp -var intVal = 2L.ConvertTo(); -var decimalVal = 4.4d.ConvertTo(); -var usersSet = new[] { new User(1), new User(2) }.ConvertTo>(); -``` - -#### Improved Auto-Mapping Performance - -A better caching strategy is used for conversions paths and now mapping fields utilize cached Delegate expressions so POCO's with fields Map much faster. - -## Async Support - -#### Consistent handling of Async Responses - -Previously Response Filters were called with the Task response returned from async services for the Response DTO, e.g. `Task`. The response filters are now chained to the task so Response filters see the same native `TResponse` DTO that are passed in from Sync services. - -#### Async services can now be used in MQ Servers - -Async responses now block for results which is in-line with sync Services behavior where Message Queue Handlers only process one message at a time for each worker thread assigned to the Request type. - -## NuGet packages specify min versions - -To ensure NuGet pulls the latest dependencies when installing any ServiceStack package, a minimum version is now specified for all NuGet package dependencies. This [should alleviate dependency issues](http://stackoverflow.com/a/21670294/85785) people are seeing from NuGet's default behavior of pulling down old packages. - -# v4.09 Release Notes - -## Rabbit MQ Support - -The biggest feature in this release is ServiceStack's new support for -[hosting Services via a Rabbit MQ Server](https://github.com/ServiceStack/ServiceStack/wiki/Rabbit-MQ), -expanding on our existing [Redis MQ and In Memory messaging](https://github.com/ServiceStack/ServiceStack/wiki/Messaging) options -with a new durable MQ option in the robust and popular [Rabbit MQ](http://www.rabbitmq.com). -ServiceStack's Rabbit MQ support is available on NuGet with: - - PM> Install-Package ServiceStack.RabbitMq - -A new [Rabbit MQ on Windows installation and setup guide](https://github.com/mythz/rabbitmq-windows) was published containing -code samples for working with Rabbit MQ from C#/.NET. - -### Configurable Metadata Pages - -New customizable filters were added to the `MetadataFeature` plugin to allow customization of the Master and detail metadata pages before they're rendered. -E.g. you can reverse the order of operation names with: - -```csharp -var metadata = (MetadataFeature)Plugins.First(x => x is MetadataFeature); -metadata.IndexPageFilter = page => { - page.OperationNames.Sort((x,y) => y.CompareTo(x)); -}; -``` - -### OrmLite new runtime typed API - -The [IUntypedApi](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/src/ServiceStack.OrmLite/IUntypedApi.cs) interface is useful for when you only have access to a late-bound object runtime type which is accessible via `db.CreateTypedApi`, e.g: - -```csharp -public class BaseClass -{ - public int Id { get; set; } -} - -public class Target : BaseClass -{ - public string Name { get; set; } -} - -var row = (BaseClass)new Target { Id = 1, Name = "Foo" }; - -var useType = row.GetType(); -var typedApi = db.CreateTypedApi(useType); - -db.DropAndCreateTables(useType); - -typedApi.Save(row); - -var typedRow = db.SingleById(1); -typedRow.Name //= Foo - -var updateRow = (BaseClass)new Target { Id = 1, Name = "Bar" }; - -typedApi.Update(updateRow); - -typedRow = db.SingleById(1); -typedRow.Name //= Bar - -typedApi.Delete(typedRow, new { Id = 1 }); - -typedRow = db.SingleById(1); //= null -``` - -#### OrmLite Create Table Support - - - Added NonClustered and Clustered options to `[Index]` attribute - -## Breaking changes - -### Messaging - -In order to support Rabbit MQ Server some changes were made to -[ServiceStack's Messaging API](https://github.com/ServiceStack/ServiceStack/wiki/Messaging) to support all MQ options, namely: - - - `IMessageQueueClient` now exposes high-level `IMessage` API's instead of raw `byte[]` - - The `IMessage.Error` property is now a `ResponseStatus` type (same used in Web Services) - - **Ack** / **Nak** APIs were also added to `IMessageQueueClient` - - All MQ Brokers now have a default `RetryCount=1` - -### ServiceStack.Text - - - UrlEncode extension method now encodes spaces with `+` instead of `%20` to match default `HttpUtility.UrlEncode` behavior - -### OrmLite - - - MySql and Sqlite providers now treat GUID's as `char(36)` - -# v4.08 Release Notes - -Added new [ServiceStack/Stripe](https://github.com/ServiceStack/Stripe) GitHub repository containing a PCL typed, message-based API client gateway for [Stripe's REST API](https://stripe.com/docs/api/). Install from NuGet with: - - Install-Package ServiceStack.Stripe - -New in this release: - - - .NET 4.0 build of **ServiceStack.Razor** now available (in addition to .NET 4.5) - - New **Signed** NuGet packages published for - - [ServiceStack.Api.Swagger.Signed](https://www.nuget.org/packages/ServiceStack.Api.Swagger.Signed/) - - [ServiceStack.OrmLite.Oracle.Signed](https://www.nuget.org/packages/ServiceStack.OrmLite.Oracle.Signed/) - - Updated Swagger UI content files - - Added MiniProfiler SqlServerStorage adapter to **ServiceStack.Server** - - The [Razor Rockstars](https://github.com/ServiceStack/RazorRockstars/) and [Social Bootstrap Api](https://github.com/ServiceStack/SocialBootstrapApi/) projects have both been upgraded to v4 - -### OrmLite - - - Enums with `[Flag]` attribute (aka Enum flags) now stored as ints - - `TimeSpan` now stores ticks as longs for all DB providers (Breaking change for Sqlite) - -# v4.06 Release Notes - -## Portable Class Library Clients! - -The biggest feature of this release is the release of the new Portable Client NuGet packages: - -[![Portable Class Library Support](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/hello-pcl.png)](https://github.com/ServiceStackApps/HelloMobile) - - - ServiceStack.Interfaces.Pcl - - PCL Profiles: iOS, Android, Windows8, .NET 4.5, Silverlight5, WP8 - - ServiceStack.Client.Pcl - - PCL Profiles: iOS, Android, Windows8, .NET 4.5 - - Custom builds: Silverlight 5 - - ServiceStack.Text.Pcl - - PCL Profiles: iOS, Android, Windows8, .NET 4.5 - - Custom builds: Silverlight 5 - -This now allows sharing binaries between the above platforms. To illustrate this a new [Hello Repository](https://github.com/ServiceStackApps/HelloMobile) was created to show how to use the same portable class libraries and DTO's across the different client platforms above. - -#### Breaking Changes - -Adding PCL support to the client libraries involved a lot of internal re-factoring which caused a few external user-facing changes: - - - The `IDbConnectionFactory` and `IHasDbConnection` interfaces referencing System.Data was moved to ServiceStack.Common - - Properties exposing the concrete `NameValueCollection` are now behind an `INameValueCollection` interface - - Dynamic classes like `DynamicJson` have been moved under the `ServiceStack` namespace - -### Improved SOAP Support - -For maximum compatibility with different SOAP clients, SOAP Exceptions are now treated as "Soft HTTP Errors" where exceptions -are automatically converted to a **200 OK** but returns the original Status Code in the `X-Status` HTTP Response header or `X-Status` SOAP Header. - -Errors can be detected by looking at the X-Status headers or by checking the **ResponseStatus.ErrorCode** property on the Response DTO. -This is transparently handled in ServiceStack's built-in SoapClients which automatically converts Response Errors into populated -C# WebServiceExceptions, retaining the same behavior of ServiceStack's other typed clients, as seen in -[WebServicesTests](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/AlwaysThrowsService.cs#L162). - -IHttpRequest.OperationName now reports the Request DTO name for SOAP requests as well, which it gets from the SOAPAction HTTP Header in SOAP 1.1 requests or the **Action** SOAP Header for SOAP 1.2 Requests. - -# ServiceStack V4 Release Notes - -We're happy to announce that after months of intense development, v4-beta of ServiceStack has finally been released to NuGet! - -As [announced in August](https://plus.google.com/+DemisBellot/posts/g8TcZaE7bv9) to ensure it's continued development, ServiceStack has moved to a self-sustaining commercial model for commercial usage of ServiceStack from **v4+ onwards**. It's the first time we've been able to commit full-time resources to the project and is what has ensured continued investment and enabled v4 to be possible, with even more exciting features in the pipeline and roadmap for 2014. - -## [Introductory Offer](https://servicestack.net/pricing) - -For our early supporters we're launching the new [servicestack.net](https://servicestack.net) website with [attractive introductory pricing](https://servicestack.net/pricing) available during the beta between **33-40% off** royalty-free/per-developer perpetual licensing and **20% off** our unlimited-developers/per-core subscriptions. There's also an additional **60 days free** maintenance and updates covering the beta period, available in 2013. These discounts are intended to be grandfathered-in and carried over for any future renewals, making the v4-beta the best time to get ServiceStack. For US Customers we also have free ServiceStack T-Shirts and stickers whilst stocks last - If you'd like them, add your preferred T-Shirt sizes in the Order notes. - -#### Free Usage for Small and OSS Projects - -We're also happy to announce that v4 includes [free quotas](https://servicestack.net/download#free-quotas) allowing the free usage of all of ServiceStack for small projects and evaluation purposes. Whilst OSS projects are able to use the source code on GitHub under the [AGPL/FOSS License Exception](https://github.com/ServiceStack/ServiceStack/blob/master/license.txt), and the older [v3 of ServiceStack](https://github.com/ServiceStackV3/ServiceStackV3) continues to be available under the [BSD license](https://github.com/ServiceStack/ServiceStack/blob/v3/LICENSE). - -#### Upgrading from v3 - -Whilst we recommend starting with **v4** for greenfield projects, v4 has seen significant changes since v3 that will require some development effort to upgrade. During the upgrade we recommend using a tool like [ReSharper](http://www.jetbrains.com/resharper/) to be able to easily find and update reference of any types that have moved. - -# What's new in v4 - -The major version upgrade of ServiceStack to v4 has provided us a long sought **breaking window** opportunity allowing us to re-factor, simplify, clean-up and fix all the warts and cruft that has been lingering in the ServiceStack code-base since its beginning - that due to backwards compatibility we were reluctant to remove. Whilst v4 has seen significant changes to the code-base, all existing tests are passing again with additional tests added for new functionality. - -We managed to retain a lot of the user-facing API's (E.g New API, AppHost, Config) which were already considered ideal so ideally upgrading shouldn't be too disruptive in the normal use-cases. - -v4 provides us a great foundation to build on that will be further improved during the beta by focusing on stability and fixing any reported issues as well as updating existing documentation to match v4's implementation and publish new examples showcasing v4's new features. - -## The big refactor of v4 - -This was the biggest re-factor in ServiceStack's history which at the end resulted in a much leaner, simplified, consistent and internal logically-structured code-base that's much easier to reason about, where even before adding any features the main ServiceStack repository saw: - - 1,192 changed files with 18,325 additions and 29,505 deletions. - -The number of deletions is indicative of how much legacy code was able to be removed, with much of the internals having been heavily restructured. Some of the highlights during the re-factor include: - - - All projects have been upgraded to .NET 4.0, except ServiceStack.Razor which is .NET 4.5 to use the latest version of Razor - - All obsolete/unused/shims/duplicate functionality and built-up cruft has now been removed (inc. the Old Api). - - State and configuration are now cohesively organized where now all AppHost's share the same `ServiceStackHost` base class which now maintains all state in ServiceStack, inc. the empty `BasicAppHost` that's used for unit testing which now shares much of the same state/context as Integration tests. - - Many namespaces and some concepts have been collapsed (e.g 'Endpoint'), resulting in ServiceStack projects requiring fewer namespaces - - All DTO's and extension methods and common user-facing classes have been moved to the base `ServiceStack` namespace - allowing them to be much easier to find. - - Re-organization of projects, **NuGet packages now map 1:1 with ServiceStack projects** for finer-grained control of dependencies: - + **ServiceStack.Interfaces** NuGet project created and ServiceInterface has been merged into **ServiceStack** - + **ServiceStack** NuGet package now only depends **ServiceStack.Common** and **ServiceStack.Client** - + A new **ServiceStack.Server** project exists for functionality requiring dependencies on OrmLite or Redis, inc. RedisMqServer and OrmLiteAuthRepository. - + **ServiceStack.Client** contains all the HTTP, SOAP and MQ Service Clients that have been split from **ServiceStack.Common** and only depends on ServiceStack.Interfaces and ServiceStack.Text (making it easier to maintain custom builds in future). - - EndpointHostConfig is now `HostConfig` and is limited to just Configuration, e.g. handlers like `CustomErrorHttpHandlers`, `RawHttpHandlers`, `GlobalHtmlErrorHttpHandler` have been moved to ServiceStackHost. - - EndpointHost is gone and replaced by the static `HostContext` class which doesn't contain any state itself, it's just a static convenience wrapper around `ServiceStackHost.Instance` (where all state is maintained). - - Removed all 'where T:' constraints where possible - - Removed `ConfigurationResourceManager`, use `AppSettings` instead - - The `ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory` used in Web.config's handler mapping has been renamed to just `ServiceStack.HttpHandlerFactory` - - `Config.ServiceStackHandlerFactoryPath` has been renamed to `Config.HandlerFactoryPath`. - - Predefined routes have been renamed from `/syncreply`, `/asynconeway` to just `/reply`, `/oneway` - - ServiceManager has been merged into `ServiceController`. - - The **ServiceStack.Logging** and **ServiceStack.Contrib** v4 projects have been merged into the major ServiceStack repo. - - The dynamic session `base.Session` has been renamed to `base.SessionBag` to better reflect its semantics. - - The [Auto Mapping](https://github.com/ServiceStack/ServiceStack/wiki/Auto-mapping) Utils extension methods were renamed from `TFrom.TranslateTo()` to `TFrom.ConvertTo()`. - - The `RequestFilters` and `ResponseFilters` were renamed to `GlobalRequestFilters` and `GlobalResponseFilters` which matches naming in the client `ServiceClientBase.GlobalRequestFilter`. - - New `GlobalMessageRequestFilters` and `GlobalMessageResponseFilters` have been added which are instead used by non-HTTP endpoints use, e.g. MQ. - - `CustomHttpHandlers` has been renamed to `CustomErrorHttpHandlers` - - The **LocalHttpWebRequestFilter** and **LocalHttpWebResponseFilter** in the Service Clients were renamed to just `RequestFilter` and `ResponseFilter` - - The Global **HttpWebRequestFilter** and **HttpWebResponseFilter** filters were also renamed to `GlobalRequestFilter` and `GlobalResponseFilter` respectively. - -### RequestContext now merged into new IRequest / IResponse classes: - -An annoyance remaining in the ServiceStack code-base was RequestContext and its relationship with its IHttpRequest and IHttpResponse classes. This was originally modeled after ASP.NET's relationship with HttpContext and its child HttpRequest/HttpResponse classes. Pragmatically speaking this model isn't ideal, as there was functionality spread across all 3 classes, many times duplicated. It was also not obvious how to retrieve IHttpRequest/IHttpResponse classes from a RequestContext and creating a RequestContext from outside of ServiceStack required more knowledge and effort than it should have. - -The new model adopts a flattened structure similar to Dart's server HttpRequest (http://bit.ly/19WUxLJ) which sees the `IRequestContext` eliminated in favour of a single `IRequest` class that also makes available direct access to the Response. - -This now becomes much easier to create a Request from outside of ServiceStack with an ASP.NET or HttpListener HttpContext e.g: - -```csharp -var service = new MyService { - Request = HttpContext.Current.ToRequest() -} - -var service = new MyService { - Request = httpListenerContext.ToRequest() -} -``` - -There's also direct access to the Response from a Request with: - -```csharp -IResponse response = Request.Response; -``` - -#### ASP.NET wrappers now only depends on HttpContextBase - -Also the ASP.NET `IHttpRequest` wrappers bind to the newer and mockable HttpContextBase / HttpRequestBase / HttpResponseBase classes which now makes it easier to call services from newer web frameworks like MVC with: - -```csharp -var service = new MyService { - Request = base.HttpContext.ToRequest() -} -``` - -The biggest user-facing change was renaming the IHttpRequest/IHttpResponse classes to IRequest/IResponse which is more indicative to what they represent, i.e. the Request and Response classes for all endpoints including MQ and future TCP endpoints. Now only HTTP Requests implement IHttpRequest/IHttpResponse which lets you add logic targeting only HTTP Services with a simple type check: - -```csharp -var httpReq = request as IHttpRequest; -if (httpReq != null) { - //Add logic for HTTP Requests... -} -``` - -Accessing the IHttpResponse works the same way, e.g: - -```csharp -var httpRes = Request.Response as IHttpResponse; -if (httpRes != null) { - //... -} -``` - -We're still going to add extension methods on IRequest/IResponse to make it easier to discover new functionality, but for HTTP functionality on non-HTTP requests these would just be a NO-OP rather than throw an exception. - -### Community v4 migration notes - - - [Upgrading Servicestack to 4.0 – Notes](http://www.binoot.com/2014/02/23/upgrading-servicestack-to-4-0-notes/) by [@binu_thayamkery](https://twitter.com/binu_thayamkery) - - [Upgrading OrmLite and ServiceStack to v4](http://camtucker.blogspot.ca/2014/01/updating-to-servicestack-v40.html?view=classic) by [@camtucker](http://camtucker.blogspot.ca/) - ----- - -# New Features in v4 - - -## Server-side Async Support - -The [most requested feature](http://bit.ly/16qCiy1), Server-side async support has now been implemented! This was surprisingly easy to do where now all HttpHandlers in ServiceStack inherit from a common `HttpAsyncTaskHandler` base class that now implements `IHttpAsyncHandler`. This lets you return an async Task from your Service in any number of ways as shown in http://bit.ly/1cOJ3hR - -E.g. Services can now have either an object, Task or async Task return types that can return a started or non-started task (which we'll start ourselves). This transition went as smooth as it could where all existing services continuing to work as before and all tests passing. - -## [ServiceStack Client](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client) Task-based Async - -In matching the new server-side async story and now that all projects have been upgraded to .NET 4.0, all Service Clients have been changed to return .NET 4.0 Task's for all async operations so they can be used in C#'s async/await methods. Some examples of Async in action: http://bit.ly/17ps94C - -The Async API's also provide a **OnDownloadProgress** callback which you can tap into to provide a progress indicator in your UI, E.g: http://bit.ly/19ALXUW - -#### Use any Request DTO in Client API's - -ServiceClient API's that used to only accept Request DTO's with a `IReturn` marker, now have `object` overloads so they can be used for unmarked Request DTO's as well. - -### Custom Silverlight and Android builds - -We've added custom **Silverlight** and **Android** automated builds for ServiceStack.Client allowing the client libraries to be available in even more environments - with more to follow. - -## Signed NuGet Packages - -The following Signed NuGet packages are available for core ServiceStack projects in separate NuGet packages using the .Signed suffix: - - - ServiceStack.Client.Signed - - ServiceStack.Text.Signed - - ServiceStack.Redis.Signed - - ServiceStack.OrmLite.Signed - - ServiceStack.OrmLite.SqlServer.Signed - - ServiceStack.ServiceStack.Signed - - ServiceStack.ServiceStack.Razor.Signed - - ServiceStack.ServiceStack.Server.Signed - - ServiceStack.Common.Signed - -### ServiceStack.Interfaces is now strong-named - -In order to be able to have signed clients sharing types with non-signed ServiceStack instances, the DTO models and ServiceStack.Interfaces need to be signed. It was added in the most defensive way possible where **ServiceStack.Interfaces.dll** is the only dll that's strong-named by default. This should cause minimal friction as it is an impl-free assembly that rarely sees any changes. We're also keeping the AssemblyVersion which makes up the strong-name at a constant `4.0` whilst the benign AssemblyFileVersion will report the true version number. - -### Add Code-first Attributes at runtime, de-coupled from POCO's - -Inspection of all Metadata attributes in ServiceStack now uses ServiceStack.Text's attribute reflection API's which support adding of type and property metadata attributes dynamically. This now lets you add the same behavior normally only available via attributes, dynamically at StartUp. Some benefits of this include: being able to keep [unattributed data model POCOs in OrmLite](http://bit.ly/1e5IQqS) or to [extend built-in and external Request DTOs and Services](https://github.com/ServiceStack/ServiceStack/blob/d93ad805c8c8ffce8e32365e4217c65c19069cf0/tests/ServiceStack.WebHost.Endpoints.Tests/RuntimeAttributeTests.cs) with enhanced functionality that was previously only available using attributes. - -#### Fluent route configuration available in [Reverse Routing](https://github.com/ServiceStack/ServiceStack/wiki/Routing#reverse-routing) - -Leveraging the dynamic attribute support, we now include fluent Route definitions when retrieving relative or absolute urls in [Reverse Routing](https://github.com/ServiceStack/ServiceStack/wiki/Routing#reverse-routing), which can be used in Services when returning urls in responses and is also used in Service Clients to determine which routes to use. Note: as Fluent Routes are defined in the AppHost, they aren't registered and therefore not available in disconnected .NET client applications - so using `[Route]` attributes on Request DTO's remains the best way to share route definitions on both client and server. - -Priority was added to `[Route]` attributes so auto-generated routes are given less precedence than explicit user-defined custom routes when selecting the best matching route to use. - -### The Virtual FileSystem - -The Virtual FileSystem is now fully integrated into the rest of ServiceStack, this enables a few interesting things: - - - The `Config.WebHostPhysicalPath` sets where you want physical files in ServiceStack to be served from - - You can now access static files when ServiceStack is mounted at a custom path, e.g. /api/default.html will serve the static file at ~/default.html - - By Default, ServiceStack falls back (i.e when no physical file exists) to looking for Embedded Resource Files inside dlls. - - You can specify the number and precedence of which Assemblies it looks at with `Config.EmbeddedResourceSources` which by default looks at: - - The assembly that contains your AppHost - - **ServiceStack.dll** - -The VFS now elegantly lets you replace built-in ServiceStack templates with your own by simply copying the metadata or [HtmlFormat Template files](http://bit.ly/164YbrQ) you want to customize and placing them in your folder at: - - /Templates/HtmlFormat.html // The auto HtmlFormat template - /Templates/IndexOperations.html // The /metadata template - /Templates/OperationControl.html // Individual operation template - -This works because the ServiceStack.dll is the last assembly in `Config.EmbeddedResourceSources`. - -## API-first development - -We're starting to optimize ServiceStack's HTML story around an **API-first** style of web development (particularly well suited to ServiceStack) in which services are developed so they naturally support both web and native clients from the start. Effectively this means that the HTML views are just another client that escapes C# earlier and leverages JS+Ajax to provide its dynamic functionality, and any HTML-specific functionality is encouraged to be kept in Razor views rather than using post backs to generate different server-side HTML representations. - -Having developed the new [servicestack.net website](https://servicestack.net) in this way, we've found it to be a lot more productive and responsive than standard server-side MVC development that we we're accustomed to in .NET as JavaScript ends up being more mallable and flexible language with a smaller and reflective surface type area making it better suited in string manipulation, generating HTML views, consuming ajax services, event handling, DOM binding and manipulation, etc. - -We've begun taking advantage of the Virtual FileSystem to ship embedded resources enhancing ServiceStack's JS integration with client-side libraries like [ss-utils.js](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/js/ss-utils.js) that we maintain and update alongside the rest of ServiceStack's dlls. Whilst we intend to create more examples in the near future showcasing this functionality, here's an overview of what's been added: - - - ss-utils.js available in your local ServiceStack webhost at `/js/ss-utils.js` - - Inspired by AngularJS we've added **declarative** support over jQuery, letting you declaratively register and trigger events, bind values to HTML elements, register document handlers, etc, saving a lot of boilerplate than normal jQuery (more on this soon) - - Enhanced HTML forms with integration with ServiceStack validation, adds responsive UX/behavior, follows soft redirects - - Server-side responses can be decorated with Soft redirects with `HttpResult.SoftRedirect` or client events with `HttpResult.TriggerEvent` - - Use `("a").setActiveLinks()` to automatically set the active link and containing menu items for the current page - - Use `$("input").change($.ss.clearAdjacentError)` to clear highlighted errors as users correct their inputs - - Use `T.AsRawJson()` extension method to serialize C# models into JSON literals that are natively accessible in JS - - Use `T.ToGetUrl()`, `T.ToPostUrl()` to resolve service urls from typed Request DTOs (no code-gen required) - -## Improved Razor Support - -#### Improved Server-side validation - -The server-side validation story has also been improved with MVC's HTML INPUT and Validation Helpers rewritten to look at ServiceStack error responses (earlier lost in the upgrade to Razor 2.0) and making use of the same bootstrap conventional classes that the client-side Ajax validation uses letting you maintain a single style of error feedback for both validation styles. It also now looks at state contained in the POST'ed data when rendering the HTML INPUT controls. - -#### Fallback Routes - -The default Razor views are now also processed by the `FallbackRoute` if one exists, enhancing the story for Single Page Apps who want requests to un-specified routes to be handled by client-side routing instead of returning 404's. - -#### Pre-Request filters - -Direct (i.e. No Controller) Razor views and static file handlers now have pre-request filters applied to them, so they can be used for adding global behavior across all ServiceStack service and page requests. - -#### Precompilation option for Razor Views - -New options have been added to RazorFormat `PrecompilePages` and `WaitForPrecompilationOnStartup` that allow you to precompile razor views on startup and specify whether or not you want to wait for compilation to complete are now options available when registering the `RazorFormat`. As these can slow down dev iteration times they are not done when `Config.DebugMode` (aka development mode), but are otherwise enabled by default for production. - -#### Other Razor Improvements - - - More functionality was added to Razor Views matching the same API's available in ServiceStack's base `Service` class - - RenderSection/IsSectionDefined now looks in all connected views. - - `GetAbsoluteUrl`, `IsPostBack`, `GetErrorStatus()`, `GetErrorMessage()` convience methods added - -### CORS Feature - -CorsFeature now by default automatically handles all HTTP `OPTIONS` requests so you no longer have to explicitly allow for OPTION requests in your routes: http://bit.ly/19HbMVf - -Can be disabled with: - -```csharp -Plugins.Add(new CorsFeature { AutoHandleOptionsRequests = false }) -``` - -## Authentication - -The Auth Tables are now called **UserAuth** and **UserAuthDetails** and implements the IUserAuth and IUserAuthDetails interfaces. For advanced customization, these tables can now be extended using custom models inheriting these interfaces by using the generic AuthRepository types, e.g: - - - OrmLiteAuthRepository - - RedisAuthRepository - -Where the common non-generic **OrmLiteAuthRepository** is just a concrete impl inheriting from `OrmLiteAuthRepository`. Use `InitSchema()` to ensure missing Auth Tables are created at registration. - -#### New optional UserAuthRole table added - -A new `UserAuthRole` class was created for users who would prefer roles to be managed in separate tables rather than blobbed with the UserAuth table and session. E.g. You can change your custom session to check the database for asserting required users and permissions with: - -```csharp -public class CustomUserSession : AuthUserSession -{ - public override bool HasRole(string role) - { - using (var db = HostContext.TryResolve().Open()) - { - return db.Count(q => - q.UserAuthId == int.Parse(UserAuthId) && q.Role == role) > 0; - } - } - - public override bool HasPermission(string permission) - { - using (var db = HostContext.TryResolve().Open()) - { - return db.Count(q => - q.UserAuthId == int.Parse(UserAuthId) && q.Permission == permission) > 0; - } - } -} -``` - -#### Support for Max Login Attempts - -The `OrmLiteAuthRepository` now supports automatically locking out user accounts after reaching the maximum number of Login attempts which can be specified at registration, e.g: - -```csharp -container.Register(c => - new OrmLiteAuthRepository(c.Resolve()) { - MaxLoginAttempts = appSettings.Get("MaxLoginAttempts", 5) - }); -``` - -To opt-in to use the new locking behavior provide a value for `MaxLoginAttempts` as shown above. The above registration first uses the value overridable in appSettings if it exists, otherwise it defaults to a Maximum of 5 login attempts. - -#### Adhoc locking of User Accounts - -The `CredentialsAuthProvider` also supports locking user accounts by populating the `UserAuth.LockedDate` column with a non-null value. Set it back to null to unlock the account. - -#### Initializing Auth Repository Schemas - -Some Auth Repositories like OrmLite require an existing schema before they can be used, this can be done in the AppHost with: - -```csharp -//Create missing Auth Tables in any Auth Repositories that need them -container.Resolve().InitSchema(); -``` -This was previously named `CreateMissingTables()` and is safe to always run as it's a NO-OP for Auth repositories that don't require a schema and only creates missing tables, so is idempotent/non-destructive on subsequent runs. - -#### New AuthWeb Test project - -A new test project testing all Authentication providers within the same ServiceStack ASP.NET Web Application is in [ServiceStack.AuthWeb.Tests](https://github.com/ServiceStack/ServiceStack/tree/master/tests/ServiceStack.AuthWeb.Tests). - -### AppSettings - -AppSettings can now be passed a tier in the constructor, e.g. `new AppSettings(tier: "Live")` which it uses as a prefix to reference Tier-specific appSettings first, e.g: - - - -Before falling back to the common key without the prefix, i.e: - - - -AppSettings now allows a Parsing Strategy, e.g. You can collapse new lines when reading a complex configuration object in Web.Config `` with: - -```csharp -var appSettings = new AppSettings { - ParsingStrategy = AppSettingsStrategy.CollapseNewLines -}; -``` - -### Nested Request DTOs - -Using [nested types as Request DTO's](https://github.com/ServiceStack/ServiceStack/commit/376ca38f604214f4d12e2f7803d8e7cfc271b725) are now supported. -Nested Request DTO types include the names of their containing class to form their unique name, allowing the use of multiple nested types with the same name, which is potentially interesting to be used as a versioning strategy. - -### Localized symbols - -I've added `IAppHost.ResolveLocalizedString` support in [this commit](http://bit.ly/181q0eP) which lets you override the built-in English symbols used in ServiceStack, e.g. this lets you change built-in ServiceStack routes, e.g: `/auth`, `/assignroles`, `?redirect=`, etc. into something more appropriate for your language. - -## Other New Web Framework Features - - - Added convenient [Repository and Logic base classes](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/ILogic.cs) to reduce boilerplate when extracting logic from services into custom classes - - Added `IAppHost.OnExceptionTypeFilter` to be able to customize ResponseStatus based on Exception types. Used to change the [default behavior of ArgumentExceptions](https://github.com/ServiceStack/ServiceStack/commit/17985239ed6f84b3126c651dbacd0c760a4d2951) so that they're converted to field errors - - Added `IAppHost.OnServiceException` so service exceptions can be intercepted and converted to different responses - - Add `ConvertHtmlCodes` extension method converting HTML entities to hex-encoded entities - - Add `Config.ScanSkipPaths` option to skip any plugins using the VFS to scan the filesystem (e.g. Razor/Markdown feature) from scanning specified directories, `/bin/` and `/obj/` are added by default. - - Added a pre-defined `/swagger-ui/` route that loads the Swagger UI and auto configures it to look at ServiceStack services. A link to this is on the metadata page under **Plugin Links** heading. - - Added `ModelFilter` and `ModelPropertyFilter` to allow fine-grained custom control on what's displayed in the Swagger API - - Wrappers around .NET's JSON and XML DataContract Serializers now share the same `IStringSerializer` interface - - Added ToMsgPack/FromMsgPack and ToProtoBuf/FromProtoBuf extension methods - - Improved support for stripping App Virtual Paths when Resolving Absolute Urls useful when applications are hosted with virtual app paths as done in Amazon Web Services. This behavior can be enabled with `Config.StripApplicationVirtualPath = true`. - - Support for explicitly referencing ignored DTO properties in Route PathInfo definitions, but not QueryStrings - - Add support for getting Id property from runtime object type - - Added support for registering a singleton instance as a runtime type - - Added new [IRestGateway](https://github.com/ServiceStack/ServiceStack/commit/29d60dfa22424fe20ba35c8603686c05f88a6c25) interface that typed 3rd Party gateways can use to retain a consistent and mockable interface. Specialized MockRestGateway added to stub or mock out gateways to 3rd Party services - - `__requestinfo` is now available on any request with `?debug=requestinfo` and is accessible to administrators or when in **DebugMode**, and provides in-depth diagnostics about the details of the current request and the configured AppHost including Startup errors (if any). - - Plugins can register startup exceptions with `IAppHost.NotifyStartupException` - - Added new HTTP Headers on IHttpRequest for `XForwardedPort` and `XForwardedProtocol` - - Added `[EnsureHttps]` Request Filter to automatically redirect request if service was not requested under a Secure Connection with options to **SkipIfDebugMode** or **SkipIfXForwardedFor** to allow local development and requests via proxies / load-balancers in HTTP. - - Users in the **Admin** role have super-user access giving them access to all protected resources. You can also use `Config.AdminAuthSecret` to specify a special string to give you admin access without having to login by adding `?authsecret=xxx` to the query string. - ------ - -## OrmLite - -### Improved Consistency - -As the API surface of OrmLite expands it became a lot more important to focus on better consistency which now sees all alternative aliases having been removed in favor of standardized naming around SQL equivalents (e.g Select,Insert,etc). Also the parameterized APIs and the C#-like string.Format API's have now been merged with the parameterized APIs now being the default and the string.Format API having a 'Fmt' suffix. - -Most of these APIs now have XML docs and Examples for a better Intelli-sense experience. We've also provided them in a list along side it's generated SQL in [these API tests](http://bit.ly/1gmrnwe) - -Some notes: - - - `Select` returns a List - - `Single` returns 1 row (or null) if it doesn't exist - - `Scalar` returns a single a scalar value (e.g. int, long) - - `Where` is a short-hand for 'Select' that takes a single filter - - `Count` is a convenience that performs an aggregate SQL Count - - `Exists` returns true if there were any results - - `Lazy` suffix indicates the results are lazily streamed - - `Column` returns the first column results in a List - - `ColumnDistinct` returns the first column unique results in a HashSet - - `Dictionary` returns a Dictionary made up from the first 2 columns - - `Lookup` returns a LINQ-like grouping in a Dictionary> - - `NonDefaults` suffix indicates only non-null values are used in qry - - `Only` suffix allows you to specify fields used on the call-site - - `Sql` prefix are helpers for reading and querying arbitrary raw SQL - - `Save` is a convenience that inserts or updates depending if it exists or not. It also now populates AutoIncrementing Id's on Inserts. - - All batch operations like `InsertAll`, `UpdateAll`, `DeleteAll`, `SaveAll` participate in an existing transaction if 1 exists, otherwise a new one - - Removed all 'where T:' constraints where possible - - `OrDefault` APIs removed, All APIs now return null instead of throwing - - autoDisposeConnection removed. false for ":memory:" otherwise true - - Now that all OrmLite's parameterized `Query*` APIs have been merged (above), any `Query` APIs are from Dapper's extension method, which is also included in OrmLite under ServiceStack.OrmLite.Dapper namespace. - - All remaining OrmLIte Attributes have been moved to ServiceStack.Interfaces, which in future will be the only dependency needed by your data models and DTOs. - -### OrmLite extension methods are now mockable - -OrmLite API's can now be mocked by injecting a ResultsFilter letting you mock the results return by OrmLite which it will use instead of hitting the database. You can also mock with a filter function and it also supports nesting, see examples at: http://bit.ly/1aldecK - -This will be useful in Unit Testing Services that access OrmLite directly instead of using a repository. - -### Support for references, POCO style - -We've added a cool new feature to Store and Load related entities that works great on POCO which are enabled when you use the `[Reference]` attribute, e.g: http://bit.ly/1gmvtV6 - -Unlike normal complex properties in OrmLite: - - - Doesn't persist as complex type blob - - Doesn't impact normal querying - - Saves and loads references independently from itself - - Populated references get serialized in Text serializers (only populated are visible). - - Data is only loaded 1-reference-level deep - - Reference Fields require consistent `(T)Id` naming - -Basically it provides a better story when dealing with referential data that doesn't impact the POCO's ability to be used as DTO's. At the moment it's limited to loading and saving on a Single instance. We'll look at optimizations for batches on this in future. - -We're going to be giving OrmLite a lot more attention from now on given that we're working full-time on ServiceStack and are using it exclusively for our .NET RDBMS peristence. We also intend on adding specialized support to take advantage of PostgreSQL's new features like their HStore and native JSON support. PostgreSQL has been offering the best features of both RDBMS and NoSQL worlds lately and has recently become a particularly attractive option now that AWS is offering first-class support for PostgreSQL in both their RDS and Redshift services. - ------ -## ServiceStack.Text - - - Allow adding metadata attributes to types or attributes at runtime - - Add JsConfig.ExcludeTypes option to skip serialization of non-serializable properties like Streams - - Change QueryString's to also adopt the configured `JsConfig.PropertyConvention` and `JsConfig.EmitLowercaseUnderscoreNames` behavior - - Added an injectable ComplexTypeStrategy to the QueryStringSerializer that allows customizing the generation of complex types, e.g. can use a hash literal notation strategy with `QueryStringStrategy.FormUrlEncoded`. - - Added `typeof(T).New()` extension method providing a fast way of creating new instances of static or runtime types that will use factory functions registered in the centralized `JsConfig.ModelFactory` (if configured). - - The string "on" (i.e. the default value for HTML checkbox) is considered a **true** value for booleans (same with '1') - - The JSON serializers can be configured to support UnixTime and UnixTimeMs for DateTime's - - Renamed JsonDateHandler to `DateHandler` and JsonPropertyConvention to `PropertyConvention` - -### HTTP Utils are now mockable - -Following in the steps of now being able to Mock OrmLite, the [HTTP Utils](https://github.com/ServiceStack/ServiceStack/wiki/Http-Utils) extension methods (http://bit.ly/WyV2tn) are now mockable, e.g: - - using (new HttpResultsFilter { - StringResult = "mocked" - }) - { - //All return "mocked" - "http://google.com".GetJsonFromUrl(); - "http://google.com".GetXmlFromUrl(); - "http://google.com".GetStringFromUrl(accept: "text/csv"); - "http://google.com".PostJsonToUrl(json: "{\"postdata\":1}"); - } - -More examples showing how all HTTP Apis can be mocked are at: http://bit.ly/HdWmgm - ------ - -## New pre-release MyGet Feeds - -Instead of publishing pre-release packages on NuGet, we're instead going to release our interim packages to [MyGet](https://www.myget.org/) first which provides greater control and allows better management of packages. - -The Instructions to add ServiceStack's MyGet feed to VS.NET are: - - 1. Go to Tools -> Options -> Package Manager -> Package Sources - 2. Add the Source **https://www.myget.org/F/servicestack** with the name of your choice, e.g. _ServiceStack MyGet feed_ - ------ - -## [Older v3 Release Notes](https://github.com/ServiceStack/ServiceStack/wiki/Release-Notes-v3) diff --git a/docs/2015/release-notes.md b/docs/2015/release-notes.md deleted file mode 100644 index 152a92af5d2..00000000000 --- a/docs/2015/release-notes.md +++ /dev/null @@ -1,326 +0,0 @@ -# v4.0.36 Release Notes - -## Xamarin Unified API Support - -We have a short release cycle this release to be able to release the [ServiceStack PCL ServiceClients](https://github.com/ServiceStackApps/HelloMobile) support for -[Xamarin's Unified API](http://developer.xamarin.com/guides/cross-platform/macios/unified/) to everyone as quickly as possible. As [announced on their blog](http://blog.xamarin.com/xamarin.ios-unified-api-with-64-bit-support/), Xamarin has released the stable build of Xamarin.iOS Unified API with 64-bit support. As per [Apple's deadlines](https://developer.apple.com/news/?id=12172014b) **new iOS Apps** published after **February 1st** must include 64-bit support, this deadline extends to updates of **existing Apps** on **June 1st**. One of the benefits of upgrading is being able to share code between iOS and OSX Apps with Xamarin.Mac. - -Support for Unified API was added in addition to the existing 32bit monotouch.dll which used the **MonoTouch** NuGet profile. Xamarin Unified API instead uses the new **Xamarin.iOS10** NuGet profile. For new Apps this works transparently where you can add a NuGet package reference and it will automatically reference the appropriate build. - - PM> Install-Package ServiceStack.Client - -Existing iOS proejcts should follow Xamarin's [Updating Existing iOS Apps](http://developer.xamarin.com/guides/cross-platform/macios/updating_ios_apps/) docs, whilst the HelloMobile project has docs on using [ServiceStack's ServiceClients with iOS](https://github.com/ServiceStackApps/HelloMobile#xamarinios-client). - -## Add ServiceStack Reference meets Xamarin Studio! - -Our enhancements to [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) continue, this time extended to support [Xamarin Studio!](http://xamarin.com/studio) - -With the new [ServiceStackXS Add-In](http://addins.monodevelop.com/Project/Index/154) your Service Consumers can now generate typed DTO's of your remote ServiceStack services directly from within Xamarin Studio, which together with the **ServiceStack.Client** NuGet package provides an effortless way to enable an end-to-end Typed API from within Xamarin C# projects. - -### Installing ServiceStackXS - -Installation is straightforward if you've installed Xamarin Add-ins before, just go to `Xamarin Studio -> Add-In Manager...` from the Menu and then search for `ServiceStack` from the **Gallery**: - -![](https://github.com/ServiceStack/Assets/blob/master/img/servicestackvs/servicestack%20reference/ssxs-mac-install.gif) - -### Adding a ServiceStack Reference - -Once installed, adding a ServiceStack Reference is very similar to [ServiceStackVS in VS.NET](https://github.com/ServiceStack/ServiceStack/wiki/CSharp-Add-ServiceStack-Reference#add-servicestack-reference) where you can just click on `Add -> Add ServiceStack Reference...` on the projects context menu to bring up the familar Add Reference dialog. After adding the `BaseUrl` of the remote ServiceStack instance, click OK to add the generated DTO's to your project using the name specified: - -![](https://github.com/ServiceStack/Assets/blob/master/img/servicestackvs/servicestack%20reference/ssxs-mac-add-reference.gif) - -### Updating the ServiceStack Reference - -As file watching isn't supported yet, to refresh the generated DTO's you'll need to click on its **Update ServiceStack Reference** from the context menu. - -### Developing with pleasure on Linux! - -One of the nice benefits of creating an Xamarin Studio Add-in is that we're also able to bring the same experience to .NET Developers on Linux! Which works similar to OSX where you can install ServiceStackXS from the Add-in Gallery - Here's an example of running on Ubuntu: - -![](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackvs/servicestack%20reference/ssxs-ubuntu-install.gif) - -Then **Add ServiceStack Reference** is accessible in the same way: - -![](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackvs/servicestack%20reference/ssxs-ubuntu-add-ref.gif) - -## Sitemap Feature - -A good SEO technique for helping Search Engines index your website is to tell them where the can find all your content using [Sitemaps](https://support.google.com/webmasters/answer/156184?hl=en). Sitemaps are basic xml documents but they can be tedious to maintain manually, more so for database-driven dynamic websites. - -The `SitemapFeature` reduces the effort required by letting you add Site Urls to a .NET collection of `SitemapUrl` POCO's. -In its most basic usage you can populate a single Sitemap with urls of your Website Routes, e.g: - -```csharp -Plugins.Add(new SitemapFeature -{ - UrlSet = db.Select() - .ConvertAll(x => new SitemapUrl { - Location = new ClientTechnologyStack { Slug = x.Slug }.ToAbsoluteUri(), - LastModified = x.LastModified, - ChangeFrequency = SitemapFrequency.Weekly, - }) -}); -``` - -The above example uses [OrmLite](https://github.com/ServiceStack/ServiceStack.OrmLite) to generate a collection of `SitemapUrl` entries containing Absolute Urls for all [techstacks.io Technology Pages](http://techstacks.io/tech). This is another good showcase for the [Reverse Routing available on Request DTO's](https://github.com/ServiceStack/ServiceStack/wiki/Routing#reverse-routing) which provides a Typed API for generating Urls without any additional effort. - -Once populated your sitemap will be available at `/sitemap.xml` which looks like: - -```xml - - - - http://techstacks.io/the-guardian - 2015-01-14 - weekly - -... - -``` - -Which you can checkout in this [live Sitemap example](http://techstacks.io/sitemap-techstacks.xml). - -### Multiple Sitemap Indexes - -For larger websites Sitemaps also support multiple [Sitemap indexes](https://support.google.com/webmasters/answer/75712?hl=en) which lets you split sitemap urls across multiple files. To take advantage of this in `SitemapFeature` you would instead populate the `SitemapIndex` collection with multiple `Sitemap` entries. An example of this is in the full [Sitemap used by techstacks.io](https://github.com/ServiceStackApps/TechStacks/blob/a114348e905b4334e93a5408c2fb76c5fb589501/src/TechStacks/TechStacks/AppHost.cs#L90-L128): - -```csharp -Plugins.Add(new SitemapFeature -{ - SitemapIndex = { - new Sitemap { - AtPath = "/sitemap-techstacks.xml", - LastModified = DateTime.UtcNow, - UrlSet = db.Select(q => q.OrderByDescending(x => x.LastModified)) - .Map(x => new SitemapUrl - { - Location = new ClientTechnologyStack { Slug = x.Slug }.ToAbsoluteUri(), - LastModified = x.LastModified, - ChangeFrequency = SitemapFrequency.Weekly, - }), - }, - new Sitemap { - AtPath = "/sitemap-technologies.xml", - LastModified = DateTime.UtcNow, - UrlSet = db.Select(q => q.OrderByDescending(x => x.LastModified)) - .Map(x => new SitemapUrl - { - Location = new ClientTechnology { Slug = x.Slug }.ToAbsoluteUri(), - LastModified = x.LastModified, - ChangeFrequency = SitemapFrequency.Weekly, - }) - }, - new Sitemap - { - AtPath = "/sitemap-users.xml", - LastModified = DateTime.UtcNow, - UrlSet = db.Select(q => q.OrderByDescending(x => x.ModifiedDate)) - .Map(x => new SitemapUrl - { - Location = new ClientUser { UserName = x.UserName }.ToAbsoluteUri(), - LastModified = x.ModifiedDate, - ChangeFrequency = SitemapFrequency.Weekly, - }) - } - } -}); -``` - -Which now generates the following `` at [/sitemap.xml](http://techstacks.io/sitemap.xml): - -```xml - - - - http://techstacks.io/sitemap-techstacks.xml - 2015-01-15 - - - http://techstacks.io/sitemap-technologies.xml - 2015-01-15 - - - http://techstacks.io/sitemap-users.xml - 2015-01-15 - - -``` - -With each entry linking to the urlset for each Sitemap: - - - [techstacks.io/sitemap-techstacks.xml](http://techstacks.io/sitemap-techstacks.xml) - - [techstacks.io/sitemap-technologies.xml](http://techstacks.io/sitemap-technologies.xml) - - [techstacks.io/sitemap-users.xml](http://techstacks.io/sitemap-users.xml) - -## Razor - -Services can now specify to return Content Pages for HTML clients (i.e. browsers) by providing the `/path/info` to the Razor Page: - -```csharp -public object Any(Request request) -{ - ... - return new HttpResult(responseDto) { - View = "/content-page.cshtml" - } -} -``` - -`HttpResult.View` was previously limited to names of Razor Views in the `/Views` folder. - -## [Techstacks](http://techstacks.io) - -Whilst not specifically Framework features, we've added some features to [techstacks.io](http://techstacks.io) that may be interesting for ServiceStack Single Page App developers: - -### Server Generated HTML Pages - -Whilst we believe Single Page Apps offer the more responsive UI we also decided to add a server html version of techstacks.io which we could serve to WebCrawlers like **Googlebot** so they're better able to properly index the AngularJS SPA website. It also provides a good insight into the UX difference between a Single Page App vs Server HTML generated websites. Since techstacks.io is running on modest hardware (i.e. IIS on shared m1.small instance with a shared micro RDS PostgreSQL backend) the differences are more clearly visible with the AngularJS version still being able to yield a snappy App-like experience whilst the full-page reloads of the Server HTML version is clearly visible on each request. - -The code to enable this is in [ClientRoutesService.cs](https://github.com/ServiceStackApps/TechStacks/blob/master/src/TechStacks/TechStacks.ServiceInterface/ClientRoutesService.cs) which illustrates a simple technique to be able to show different versions of your website which by default is enabled implicitly by detecting `Googlebot` User Agents or can be toggled explicitly between by visiting these routes below: - - - [techstacks.io?html=client](http://techstacks.io?html=client) - - [techstacks.io?html=server](http://techstacks.io?html=server) - -These links determine whether you'll be shown the AngularJS version or the Server HTML Generated version of the Website. We can see how this works by exploring how the technology pages are implemented which handle the technology index: - - - http://techstacks.io/tech - -as well as individual technology pages, e.g: - - - http://techstacks.io/tech/redis - - http://techstacks.io/tech/servicestack - -First we need to create empty Request DTO's to capture the client routes (as they were only previously configured in AngularJS routes): - -```csharp -[Route("/tech")] -public class ClientAllTechnologies {} - -[Route("/tech/{Slug}")] -public class ClientTechnology -{ - public string Slug { get; set; } -} -``` - -We then create a ServiceStack Service that handles these routes. The `ShowServerHtml()` helper method is used to deterine whether to show the AngularJS or Server HTML version of the website which it does by setting a permanent cookie when `techstacks.io?html=server` is requested or if the UserAgent is `Googlebot`. Every subsequent request then contains the `html=server` Cookie and so will show the Server HTML version of the website. Users can then go to `techstacks.io?html=server` to delete the cookie and resume viewing the AngularJS version of the website: - -```csharp -public class ClientRoutesService : Service -{ - public bool ShowServerHtml() - { - if (Request.GetParam("html") == "client") - { - Response.DeleteCookie("html"); - return false; - } - - var serverHtml = Request.UserAgent.Contains("Googlebot") - || Request.GetParam("html") == "server"; - - if (serverHtml) - Response.SetPermanentCookie("html", "server"); - - return serverHtml; - } - - public object AngularJsApp() - { - return new HttpResult { - View = "/default.cshtml" - }; - } - - public object Any(ClientAllTechnologies request) - { - return !ShowServerHtml() - ? AngularJsApp() - : new HttpResult(base.ExecuteRequest(new GetAllTechnologies())) { - View = "AllTech" - }; - } - - public object Any(ClientTechnology request) - { - return !ShowServerHtml() - ? AngularJsApp() - : new HttpResult(base.ExecuteRequest(new GetTechnology { Reload = true, Slug = request.Slug })) { - View = "Tech" - }; - } -} -``` - -The difference between which Website to display boils down to which Razor page to render, where for AngularJS version we return the `/default.cshtml` Home Page where client routes are then hanlded by AngularJS and the Server HTML version just renders the appropriate Razor View for that request. - -The `base.ExecuteRequest(new GetAllTechnologies())` API lets you execute a ServiceStack Service internally by just passing the `new GetAllTechnologies()` Request DTO, the Resposne DTO of which is then passed as a view model to the `/Views/AllTech.cshtml` Razor View. - -AngularJS declarative HTML pages holds an advantage when hosting multiple websites as porting AngularJS views to Razor is relatively straight-forward which basically just involves converting Angular `ng-attributes` to `@Razor` statements as seen in the client vs server versions of [techstacks.io/tech](http://techstacks.io/tech) index page: - - - [/partials/tech/latest.html](https://github.com/ServiceStackApps/TechStacks/blob/master/src/TechStacks/TechStacks/partials/tech/latest.html) - - [/Views/Tech/AllTech.cshtml](https://github.com/ServiceStackApps/TechStacks/blob/master/src/TechStacks/TechStacks/Views/Tech/AllTech.cshtml) - -### Twitter Updates - -Another way to increase user engagement of your website is by posting Twitter Updates, techstacks.io does this whenever anyone adds a new Technology or Technology Stack by posting an update to [@webstacks](https://twitter.com/webstacks). The [code to make authorized Twitter API requests](https://github.com/ServiceStackApps/TechStacks/blob/master/src/TechStacks/TechStacks.ServiceInterface/TwitterUpdates.cs) ends up being fairly lightweight as it can take advantage of ServiceStack's built-in support for Twitter OAuth. - -## ServiceStack.Text - -CSV Serializer now supports serializing `List`: - -```csharp -int i = 0; -List rows = new[] { "Foo", "Bar" }.Map(x => (object) new { Id = i++, Name = x }); -rows.ToCsv().Print(); -``` - -Or `List`: - -```csharp -List rows = new[] { "Foo", "Bar" }.Map(x => (object) new { Id = i++, Name = x }); -rows.ToCsv().Print(); -``` - -Both will Print: - - Id,Name - 0,Foo - 1,Bar - -## ServiceStackVS Updated - -[ServiceStackVS](https://github.com/ServiceStack/ServiceStackVS) received another minor bump, the latest version can be [downloaded from the Visual Studio Gallery](https://visualstudiogallery.msdn.microsoft.com/5bd40817-0986-444d-a77d-482e43a48da7). - -## Breaking Changes - -### AuthProvider Validation moved to AuthFeature - -Like other Plugin options the configuration of validating unique Emails as been moved from `AuthProvider.ValidateUniqueEmails` to: - -```csharp -Plugins.Add(new AuthFeature(...) { - ValidateUniqueEmails = true, - ValidateUniqueUserNames = false -}); -``` - -This includes the new `ValidateUniqueUserNames` option to specify whether or not the UserNames from different OAuth Providers should be unique (validation is disabled by default). - -### PooledRedisClientsManager Db is not nullable - -In order to be able to specify what redis **DB** the `PooledRedisClientsManager` should use on the connection string (e.g: "localhost?db=1") we've made `PooledRedisClientsManager.Db` an optional `long?`. If your switching between multiple Redis DB's in your Redis Clients you should explicitly specify what Db should be the default so that Redis Clients retrieved from the pool are automatically reset to that DB, with either: - -```csharp -new PooledRedisClientsManager(initialDb:1); -``` - -or via the connection string: - -```csharp -new PooledRedisClientsManager("localhost?db=1"); -``` - ---- - -## [2014 Release Notes](https://github.com/ServiceStack/ServiceStack/blob/master/docs/2014/release-notes.md) \ No newline at end of file diff --git a/lib/Microsoft.Web.Infrastructure.dll b/lib/Microsoft.Web.Infrastructure.dll deleted file mode 100644 index 85f1138c57b..00000000000 Binary files a/lib/Microsoft.Web.Infrastructure.dll and /dev/null differ diff --git a/lib/Mono.Data.Sqlite.dll b/lib/Mono.Data.Sqlite.dll deleted file mode 100644 index dad79f065d7..00000000000 Binary files a/lib/Mono.Data.Sqlite.dll and /dev/null differ diff --git a/lib/Mono.Security.dll b/lib/Mono.Security.dll deleted file mode 100644 index 1371f5cb635..00000000000 Binary files a/lib/Mono.Security.dll and /dev/null differ diff --git a/lib/MsgPack.XML b/lib/MsgPack.XML deleted file mode 100644 index 41ad85b1f3c..00000000000 --- a/lib/MsgPack.XML +++ /dev/null @@ -1,8549 +0,0 @@ - - - - MsgPack - - - - - Build serializer for . - - Object to be serialized/deserialized. - - - - Initializes a new instance of the class. - - The . - - - - Creates serializer for . - - - . This value will not be null. - - - - - Creates serializer for . - - Serialization target members. This will not be null nor empty. - - . This value will not be null. - - - - - Creates serializer as is array type. - - - . - This value will not be null. - - - - - Creates serializer as is map type. - - - . - This value will not be null. - - - - - Creates serializer as is tuple type. - - - . - This value will not be null. - - - - - Gets the . - - - The . - - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Defines common exception factory methods. - - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that value type cannot be null on deserialization. - - The name of the member. - The type of the member. - The type that declares the member. - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that value type cannot be null on deserialization. - - The target type. - instance. It will not be null. - - - - of method. - - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that value type cannot serialize. - - The target type. - instance. It will not be null. - - - - of method. - - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that value type cannot deserialize. - - The target type. - instance. It will not be null. - - - - of method. - - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that item is not found on the unpacking stream. - - The index to be unpacking. - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that target type is not serializable because it does not have public default constructor. - - The target type. - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that target type is not serializable because it does not have both of public default constructor and public constructor with an Int32 parameter. - - The target type. - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that there are no serializable fields and properties on the target type. - - The target type. - instance. It will not be null. - - - - of method. - - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that required field is not found on the unpacking stream. - - The name of the property. - instance. It will not be null. - - - - of method. - - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that unpacking stream ends on unexpectedly position. - - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that target collection type does not declare appropriate Add(T) method. - - The target type. - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that unpacker is not in the array header, that is the state is invalid. - - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that unpacker is not in the array header, that is the state is invalid. - - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that operation is not supported because cannot be instanciated. - - Type. - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that the array length does not match to expected tuple cardinality. - - The expected cardinality of the tuple. - The actual serialized array length. - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that the underlying stream is not correct semantically because failed to unpack items count of array/map. - - The inner exception for the debug. The value is implementation specific. - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that the unpacking collection is too large to represents in the current runtime environment. - - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that the the unpacker does not contain any data because the underlying stream is empty or unpacker has not been started. - - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that the member cannot be null or the unpacking value cannot be nil because nil value is explicitly prohibitted. - - The name of the member. - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that the unpacking value cannot be nil because the target member is read only and its type is collection. - - The name of the member. - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that the unpacking collection value is not a collection. - - The name of the member. - instance. It will not be null. - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Returns new exception to notify that the unpacking array size is not expected length. - - Expected, required for deserialization array length. - Actual array length. - instance. It will not be null. - - - - Represents serializing member information. - - - - - Emits 'for' statement on current IL stream. - - IL generator to be emitted to. - 'count' local variable which is type and holds maximum loop count. - Delegate to emit for statement body. - - - - Emits 'foreach' statement on the IL stream. - - IL generator to be emitted to. - which contains traits of the iterating collection. - 'collection' argument index. - Delegate to emit body statement. - - - - Emits appropriate loading member instructions. - - IL generator to be emitted to. - to be loaded. - - - - Emits appropriate storing member instructions. - - IL generator to be emitted to. - to be stored. - - - - Emits gets with exception handling. - Note that final state is the value is pushed top of the evaluation stack. - - IL generator. - Argument index of the unpacker. - - - - Represents member's data contract. - - - - - Initializes a new instance of the struct. - - The target member. - - - - Initializes a new instance of the struct from . - - The target member. - The data contract member attribute. This value can be null. - - - - Initializes a new instance of the struct from . - - The target member. - The MessagePack member attribute. This value can be null. - - - - Gets the name of the member. - - - The name of the member. - - - - - - Gets the ID of the member. - - - The ID of the member. Default is -1. - - - - - Gets the nil implication. - - - The nil implication. - - - - - Represents generic unpacking error. - - - - - Initializes a new instance of the class with the default error message. - - - - - Initializes a new instance of the class with a specified error message. - - The message that describes the error. - - - - Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - - The exception that is the cause of the current exception, or a null if no inner exception is specified. - - - - - Initializes a new instance of the class with serialized data. - - - The that holds the serialized object data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - The parameter is null. - - - The class name is null or is zero (0). - - - - - Defines non-generic functions of . - - - - - Defines base contract for object serialization. - - Target type. - - - This class implements strongly typed serialization and deserialization. - - - When the underlying stream does not contain strongly typed or contains dynamically typed objects, - you should use directly and take advantage of . - - - - - - - - Defines non-generic message pack serializer interface. - - - - - Serialize specified object with specified . - - which packs values in . - Object to be serialized. - - is null. - - - is not compatible for this serializer. - - - The type of is not serializable etc. - - - - - Deserialize object with specified . - - which unpacks values of resulting object tree. - Deserialized object. - - is null. - - - Failed to deserialize object due to invalid unpacker state, stream content, or so. - - - Deserializing type is abstract type. - - - - - Deserialize collection items with specified and stores them to . - - which unpacks values of resulting object tree. - Collection that the items to be stored. - - is null. - Or is null. - - - is not compatible for this serializer. - - - Failed to deserialize object due to invalid unpacker state, stream content, or so. - - - The type of is not serializable etc. - - - - - Serialize specified object to the . - - Destination . - Object to be serialized. - - is null. - - - is not serializable etc. - - - - - Deserialize object from the . - - Source . - Deserialized object. - - is null. - - - is not serializable etc. - - - - - Serialize specified object with specified . - - which packs values in . - Object to be serialized. - - is null. - - - is not serializable etc. - - - - - Serialize specified object with specified . - - which packs values in . This value will not be null. - Object to be serialized. - - is not serializable etc. - - - - - Deserialize object with specified . - - which unpacks values of resulting object tree. - Deserialized object. - - is null. - - - Failed to deserialize object due to invalid unpacker state, stream content, or so. - - - is abstract type. - - - - - Deserialize object with specified . - - which unpacks values of resulting object tree. This value will not be null. - Deserialized object. - - Failed to deserialize object due to invalid unpacker state, stream content, or so. - - - is abstract type. - - - - - Deserialize collection items with specified and stores them to . - - which unpacks values of resulting object tree. - Collection that the items to be stored. - - is null. - Or is null. - - - Failed to deserialize object due to invalid unpacker state, stream content, or so. - - - is not collection. - - - - - Deserialize collection items with specified and stores them to . - - which unpacks values of resulting object tree. This value will not be null. - Collection that the items to be stored. This value will not be null. - - Failed to deserialize object due to invalid unpacker state, stream content, or so. - - - is not collection. - - - - - based on reflection, opt-out based. - - - - - - Initializes a new instance of the class. - - - - - Serialize specified object with specified . - - which packs values in . This value will not be null. - Object to be serialized. - - - - Deserialize object with specified . - - which unpacks values of resulting object tree. This value will not be null. - Deserialized object. - - - - Deserialize collection items with specified and stores them to . - - which unpacks values of resulting object tree. This value will not be null. - Collection that the items to be stored. This value will not be null. - - Failed to deserialize object due to invalid unpacker state, stream content, or so. - - - is not collection. - - - - - for a sequential collection using expression tree. - - The type of element. - - - - for array format stream. - - The type of target type. - - - - Implements expression tree based serializer for general object. - - The type of target object. - - - - Defines extension method to pack or unpack various objects. - - - - - Packs specified value with the default context. - - The type of the value. - The . - The value to be serialized. - - is null. - - - Cannot serialize . - - - - - Packs specified value with the specified context. - - The type of the value. - The . - The value to be serialized. - The holds shared serializers. - - is null. - Or is null. - - - Cannot serialize . - - - - - Packs specified value with the default context. - - The . - The value to be serialized. - - is null. - - - Cannot serialize . - - - - - Packs specified value with the specified context. - - The . - The value to be serialized. - The holds shared serializers. - - is null. - Or is null. - - - Cannot serialize . - - - - - Unpacks specified type value with the default context. - - The type of the value. - The . - The deserialized value. - - is null. - - - Cannot deserialize value. - - - - - Unpacks specified type value with the specified context. - - The type of the value. - The . - The holds shared serializers. - The deserialized value. - - is null. - Or is null. - - - Cannot deserialize value. - - - - - Define common convert rountines specific to MessagePack. - - - - - Encode specified string by default encoding. - - String value. - Encoded . - - is null. - - - - - Decode specified byte[] by default encoding. - - Byte[] value. - Decoded . - - is null. - - - contains non-UTF-8 bits. - - - - - Convert specified to . - - - value which is unpacked from packed message and may represent date-time value. - - - . Offset of this value always 0. - - - - - Convert specified to . - - - value which is unpacked from packed message and may represent date-time value. - - - . This value is always UTC. - - - - - Convert specified to as MessagePack defacto-standard. - - . - - UTC epoc time from 1970/1/1 0:00:00, in milliseconds. - - - - - Convert specified to as MessagePack defacto-standard. - - . - - UTC epoc time from 1970/1/1 0:00:00, in milliseconds. - - - - - Implements for . - - - This dictionary handles type semantics for the key. - Additionally, this dictionary implements 'freezing' feature. - For details, see , , and . - - - - - Initializes an empty new instance of the class with default capacity. - - - This operation is an O(1) operation. - - - - - Initializes an empty new instance of the class with specified initial capacity. - - The initial capacity. - - is negative. - - - This operation is an O(1) operation. - - - - - Initializes a new instance of the class. - - The dictionary to be copied from. - - is null. - - - Failed to copy from . - - - This constructor takes O(N) time, N is of . - Initial capacity will be of . - - - - - Determines whether the contains an element with the specified key. - - The key to locate in the . - - is . - - - true if the contains an element with the key; otherwise, false. - - - This method approaches an O(1) operation. - - - - - Determines whether the contains an element with the specified value. - - The value to locate in the . - - true if the contains an element with the value; otherwise, false. - - - This method approaches an O(N) operation where N is . - - - - - Gets the value associated with the specified key. - - - The key whose value to get. - - - When this method returns, the value associated with the specified key, if the key is found; - otherwise, the default value for the type of the parameter. - This parameter is passed uninitialized. - - - true if this dictionary contains an element with the specified key; otherwise, false. - - - is . - - - - Note that tiny integers are considered equal regardless of its CLI , - and UTF-8 encoded bytes are considered equals to . - - - This method approaches an O(1) operation. - - - - - - Adds the specified key and value to the dictionary. - - - The key of the element to add. - - - The value of the element to add. The value can be null for reference types. - - - An element with the same key already does not exist in the dictionary and sucess to add then newly added node; - otherwise null. - - - already exists in this dictionary. - Note that tiny integers are considered equal regardless of its CLI , - and UTF-8 encoded bytes are considered equals to . - - - is . - - - If is less than the capacity, this method approaches an O(1) operation. - If the capacity must be increased to accommodate the new element, - this method becomes an O(N) operation, where N is . - - - - - Removes the element with the specified key from the . - - The key of the element to remove. - - true if the element is successfully removed; otherwise, false. - This method also returns false if was not found in the original . - - - is . - - - This method approaches an O(1) operation. - - - - - Removes all items from the . - - - This method approaches an O(N) operation, where N is . - - - - - Returns an enumerator that iterates through the . - - - Returns an enumerator that iterates through the . - - - This method is an O(1) operation. - - - - - Freezes this instance. - - - This instance itself. - This value will not be null and its is true. - - - This method freezes this instance itself. - This operation is an O(1) operation. - - - - - Gets a copy of this instance as frozen instance. - - - New instance which contains same items as this instance. - This value will not be null and its is true. - - - This method does not freeze this instance itself. - This operation is an O(N) operation where O(N) of items. - - - - - Gets a value indicating whether this instance is frozen. - - - true if this instance is frozen; otherwise, false. - - - This operation is an O(1) operation. - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - This operation is an O(1) operation. - - - - - Gets or sets the element with the specified key. - - - The element with the specified key. - - Key for geting or seting value. - - is . - - - The property is retrieved and is not found. - - - The property is set and this instance is frozen. - - - - Note that tiny integers are considered equal regardless of its CLI , - and UTF-8 encoded bytes are considered equals to . - - - This method approaches an O(1) operation. - - - - - - Gets an containing the keys of the . - - - An containing the keys of the object. - This value will not be null. - - - This operation is an O(1) operation. - - - - - Gets an containing the values of the . - - - An containing the values of the object. - This value will not be null. - - - This operation is an O(1) operation. - - - - - Represents the set of keys. - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the beginning of the target array. - - - The one-dimensional that is the destination of the elements copied from this dictionary. - The must have zero-based indexing. - - - - - Copies the entire collection to a compatible one-dimensional array, - starting at the specified index of the target array. - - - The one-dimensional that is the destination of the elements copied from this dictionary. - The must have zero-based indexing. - - - The zero-based index in at which copying begins. - - - - - Copies a range of elements from this collection to a compatible one-dimensional array, - starting at the specified index of the target array. - - - The zero-based index in the source dictionary at which copying begins. - - - The one-dimensional that is the destination of the elements copied from this dictionary. - The must have zero-based indexing. - - - The zero-based index in at which copying begins. - - - The number of elements to copy. - - - - - Determines whether this collection contains a specific value. - - - The object to locate in this collection. - - true if is found in this collection; otherwise, false. - - - - - Determines whether this set is proper subset of the specified collection. - - - The collection to compare to the current set. - - - true if this set is proper subset of the specified collection; otherwise, false. - - - is Nothing. - - - - - Determines whether this set is proper superset of the specified collection. - - - The collection to compare to the current set. - - - true if this set is proper superset of the specified collection; otherwise, false. - - - is Nothing. - - - - - Determines whether this set is subset of the specified collection. - - - The collection to compare to the current set. - - - true if this set is subset of the specified collection; otherwise, false. - - - is Nothing. - - - - - Determines whether this set is superset of the specified collection. - - - The collection to compare to the current set. - - - true if this set is superset of the specified collection; otherwise, false. - - - is Nothing. - - - - - Determines whether the current set and a specified collection share common elements. - - - The collection to compare to the current set. - - - true if this set and share at least one common element; otherwise, false. - - - is Nothing. - - - - - Determines whether this set and the specified collection contain the same elements. - - - The collection to compare to the current set. - - - true if this set is equal to ; otherwise, false. - - - is Nothing. - - - - - Returns an enumerator that iterates through this collction. - - - Returns an enumerator that iterates through this collction. - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - - Enumerates the elements of a . - - - - - Releases all resources used by the this instance. - - - - - Advances the enumerator to the next element of the underlying collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, which is before the first element in the collection. - - - The collection was modified after the enumerator was created. - - - - - Gets the element at the current position of the enumerator. - - - The element in the underlying collection at the current position of the enumerator. - - - - - Gets the element at the current position of the enumerator. - - - The element in the collection at the current position of the enumerator, as an . - - - The enumerator is positioned before the first element of the collection or after the last element. - - - - - Represents the collection of values in a . - - - - - Copies the entire collection to a compatible one-dimensional array, starting at the beginning of the target array. - - - The one-dimensional that is the destination of the elements copied from this dictionary. - The must have zero-based indexing. - - - - - Copies the entire collection to a compatible one-dimensional array, - starting at the specified index of the target array. - - - The one-dimensional that is the destination of the elements copied from this dictionary. - The must have zero-based indexing. - - - The zero-based index in at which copying begins. - - - - - Copies a range of elements from this collection to a compatible one-dimensional array, - starting at the specified index of the target array. - - - The zero-based index in the source dictionary at which copying begins. - - - The one-dimensional that is the destination of the elements copied from this dictionary. - The must have zero-based indexing. - - - The zero-based index in at which copying begins. - - - The number of elements to copy. - - - - - Determines whether this collection contains a specific value. - - - The object to locate in this collection. - - true if is found in this collection; otherwise, false. - - - - - Returns an enumerator that iterates through this collction. - - - Returns an enumerator that iterates through this collction. - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - - Enumerates the elements of a . - - - - - Releases all resources used by the this instance. - - - - - Advances the enumerator to the next element of the underlying collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, which is before the first element in the collection. - - - The collection was modified after the enumerator was created. - - - - - Gets the element at the current position of the enumerator. - - - The element in the underlying collection at the current position of the enumerator. - - - - - Gets the element at the current position of the enumerator. - - - The element in the collection at the current position of the enumerator, as an . - - - The enumerator is positioned before the first element of the collection or after the last element. - - - - - Enumerates the elements of a in order. - - - - - Releases all resources used by the this instance. - - - - - Advances the enumerator to the next element of the underlying collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, which is before the first element in the collection. - - - The collection was modified after the enumerator was created. - - - - - Gets the element at the current position of the enumerator. - - - The element in the underlying collection at the current position of the enumerator. - - - - - Gets the element at the current position of the enumerator. - - - The element in the collection at the current position of the enumerator, as an . - - - The enumerator is positioned before the first element of the collection or after the last element. - - - - - Enumerates the elements of a in order. - - - - - Advances the enumerator to the next element of the underlying collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, which is before the first element in the collection. - - - The collection was modified after the enumerator was created. - - - - - Gets the element at the current position of the enumerator. - - - The element in the collection at the current position of the enumerator, as an . - - - The enumerator is positioned before the first element of the collection or after the last element. - - - - - Gets the element at the current position of the enumerator. - - - The element in the dictionary at the current position of the enumerator, as a B - - - The enumerator is positioned before the first element of the collection or after the last element. - - - - - Gets the key of the element at the current position of the enumerator. - - - The key of the element in the dictionary at the current position of the enumerator. - - - The enumerator is positioned before the first element of the collection or after the last element. - - - - - Gets the value of the element at the current position of the enumerator. - - - The value of the element in the dictionary at the current position of the enumerator. - - - The enumerator is positioned before the first element of the collection or after the last element. - - - - - Implements deserializing feature of MsgPack. - - - implements three mode, that is 'Streaming', 'Enumerating', 'Skipping', and 'Subtree'. - - - - Streaming - - - When the is called, unpacker go into 'Streaming' mode. - In this mode, unpacker unpacks individual entries as via property. - If the underlying stream is ended unexpectedly, then returns false, and will be null. - Note that if the underlying stream is feeded, that is the is expanded and its is not forwarded, - subsequent invocation will success, and is set as complete entry which reflects feeded binary. - - - If the reading of the entry is completed, that is the is not null, unpacker can transit other mode. - - - - - Enumerating - - - When the is called and the enumeration is started, unpacker go into 'Enumerating' mode. - In this mode, unpacker unpacks individual entries as via property. - If the underlying stream is ended unexpectedly, enumeration is interrupted. - The interrupted unpacker cannot be resume. - - - Once the enumeration is completed gracefully, unpacker can transit other mode. - - - - - Skipping - - - When the is called, unpacker go into 'Skipping' mode. - In this mode, unpacker scans the subtree where the root is current item, then returns skipped byte length. - If the underlying stream is ended unexpectedly, it returns null. - Note that if the underlying stream is feeded, that is the is expanded and its is not forwarded, - subsequent invocation will success, and returns length as complete entry which reflects feeded binary. - - If the underlying is cannot be seeked (that is, is false), - DO NOT use this method. - You can buffering the content via instead, for example. - - - - If the skipping of the subtree is completed, that is the return value is not null, unpacker can transit other mode. - - - - - Subtree - - - When the is called, unpacker go into 'Subtree' mode. - In this mode, any operation for this unpacker instance is invalid. - Instead of use this instance itself, you can use subtree unpacker returned from . - The subtree unpacker is the instance which scope is limited to the subtree where the root is the current entry when is called. - The subtree unpacker also have its own mode and state. - - of the subtree unpacker must be called to indicate subtree unpacking is gracefully completed. - When the extra entries are remained in the subtree, these will be skipped on the disposal process. - - - - Once the subtree unpacking is completed gracefully, that is, on the subtree unpacker called, the parant unpacker can transit other mode. - - - - - - - - - Verifies the mode. - - The mode to be. - - Already disposed. - - - Is in incompatible mode. - - - - - Verifies this instance is not disposed. - - - - - Returns new exception instance to notify invalid mode transition. - - New exception instance to notify invalid mode transition. - - - - Creates the new with internal buffer which has default size. - - instance. - - - - Creates the new from specified stream. - - The stream to be unpacked. This stream will be closed when is called. - instance. - - - - Creates the new from specified stream. - - The stream to be unpacked. - - true to close when this instance is disposed; - false, otherwise. - - instance. - - - - Initializes a new instance of the class. - - - - - Releases all managed resources. - - - - - Releases unmanaged and optionally managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Starts unpacking of current subtree. - - - to unpack current subtree. - This will not be null. - - - This unpacker is not positioned on the header of array nor map. - - - While subtree unpacker is used, this instance will be 'locked' (called 'subtree' mode) and be unavailable. - When you finish to unpack subtree, you must invoke , - or you faces when you use the parent instance. - Subtree unpacker can only unpack subtree, so you can handle collection deserialization easily. - - - - - Starts unpacking of current subtree. - - - to unpack current subtree. - This will not be null. - - - - - Ends the read subtree. - - - This method only be called from subtree unpacker. - Custom subtree unpacker implementation must call this method from its method. - - - - - Reads next Message Pack entry. - - - true, if position is sucessfully move to next entry; - false, if position reaches the tail of the Message Pack stream. - - - This instance is in 'subtree' mode. - - - - - Reads next Message Pack entry. - - - true, if position is sucessfully move to next entry; - false, if position reaches the tail of the Message Pack stream. - - - - - Gets to enumerate from source stream. - - to enumerate from source stream. - - - - Skips the subtree where the root is the current entry, and returns skipped byte length. - - - Skipped byte length. - If the subtree is not completed, then null. - - - - - Skips the subtree where the root is the current entry, and returns skipped byte length. - - - Skipped byte length. - If the subtree is not completed, then null. - - - - - Gets current item or collection as single from the stream. - - - A read item or collection from the stream. - Or null when stream is ended. - - - - - Unpacks current subtree and returns subtree root as array or map. - - - An unpacked array or map when current position is array or map header. - null when current position is not array nor map header. - - - - - Get last unpacked data. - - Last unpacked data or null. - - If you use any of directory APIs (methods which return non-), - then this property to be invalidated. - - - - - Gets a value indicating whether this instance is positioned to array header. - - - true if this instance is positioned to array header; otherwise, false. - - - - - Gets a value indicating whether this instance is positioned to map header. - - - true if this instance is positioned to map header; otherwise, false. - - - - - Gets the items count for current array or map. - - - The items count for current array or map. - - - Both of the and are false. - - - - - Gets the underlying stream to handle direct API. - - - This instance does not supoort direct API. - - - - - Defines subtree unpacking unpacker. - - - - - Implements basic (maybe naive) implementation for common operation. - - - - - Represents serialization method for complex types. - - - - - The object will be serialized as array which is ordered by member ID. - This is default and more interoperable option. - - - - - The object will be serialized as map which is ordered by member ID. - This is a bit slower than array, but more stable for forward/backward compatibility. - - - - - like IL stream builder with tracing. - - - - - Emit 'call' or 'callvirt' appropriately. - - to be called. - - - - Emit property getter invocation. - Pre condition is there is target instance on the top of evaluation stack when is instance property. - Post condition are that target instance will be removed from the stack for instance property, and property value will be placed on there. - - for target property. - - - - Emit invocation. - - - - - Emit invocation. - - - - - Emit invocation. - Pre condition is that target instance is placed on the top of evaluation stack. - Post condition is that target instance will be replaced with of it. - - - - - Emit invocation with . - - - Index of temporary local variable index to store param array for . - Note that the type of local variable must be Object[]. - - Forat string literal. - - List of delegates to emittion of loading formatting parameter loading instruction. - Index of this array corresponds to index of formatting parameter. - 1st argument is this instance. - Post condition is that exactly one storing element will be added on the top of evaluation stack. - - - - - Emit invocation with . - - - Index of temporary local variable index to store param array for . - Note that the type of local variable must be Object[]. - - - Type of resource accessor. - - - Key of rethis. Note that this method assumes that key equals to accessor property name. - - - List of delegates to emittion of loading formatting parameter loading instruction. - Index of this array corresponds to index of formatting parameter. - 1st argument is this instance. - Post condition is that exactly one storing element will be added on the top of evaluation stack. - - - - - Emit invocation with . - - - Index of temporary local variable index to store param array for . - Note that the type of local variable must be Object[]. - - Forat string literal. - - List of delegates to emittion of loading formatting parameter loading instruction. - Index of this array corresponds to index of formatting parameter. - 1st argument is this instance. - Post condition is that exactly one storing element will be added on the top of evaluation stack. - - - - - Emit invocation with . - - - Index of temporary local variable index to store param array for . - Note that the type of local variable must be Object[]. - - - Type of resource accessor. - - - Key of rethis. Note that this method assumes that key equals to accessor property name. - - - List of delegates to emittion of loading formatting parameter loading instruction. - Index of this array corresponds to index of formatting parameter. - 1st argument is this instance. - Post condition is that exactly one storing element will be added on the top of evaluation stack. - - - - - Emit load 'this' pointer instruction (namely 'ldarg.0'). - Post condition is that the loaded value will be added on the evaluation stack. - - - - - Emit apprpriate 'ldarg.*' instruction. - Post condition is that the loaded value will be added on the evaluation stack. - - - Index of argument to be fetched. - - - - - Emit apprpriate 'ldloc.*' instruction. - Post condition is that the loaded value will be added on the evaluation stack. - - - Index of local variable to be fetched. - - - - - Emit array initialization code with initializer. - Pre condition is that the storing value is placed on the top of evaluation stack and its type is valid. - Post condition is that the stored value will be removed from the evaluation stack. - - - Index of local variable which stores the array. - - - - - Emit array initialization code without initializer. - Post condition is evaluation stack will no be modified as previous state. - Note that initialized array is not placed on the top of evaluation stack. - - of array element. This can be generaic parameter. - Size of array. - - - - Emit array initialization code with initializer. - Post condition is evaluation stack will no be modified as previous state. - Note that initialized array is not placed on the top of evaluation stack. - - - Index of local variable which stores the array. - - of array element. This can be generaic parameter. - - List of delegates to emittion of storing element loading instruction. - Index of this array corresponds to index of initializing array. - 1st argument is this instance. - Post condition is that exactly one storing element will be added on the top of stack and its type is compatible. - - - - - Emit array initialization code with initializer. - Post condition is evaluation stack will no be modified as previous state. - Note that initialized array is not placed on the top of evaluation stack. - - - Delegate to emittion of array loading instruction. - 1st argument is this instance. - Post condition is that exactly one target array will be added on the top of stack and element type is . - - - Delegate to emittion of array storing instruction. - 1st argument is this instance. - Pre condition is that the top of evaluation stack is array type and its element type is . - Post condition is that exactly one target array will be removed from the top of stack. - - of array element. This can be generaic parameter. - - List of delegates to emittion of storing element loading instruction. - Index of this array corresponds to index of initializing array. - 1st argument is this instance. - Post condition is that exactly one storing element will be added on the top of stack and its type is compatible. - - - - - Emit array element loading instructions. - Post condition is that exactly one loaded element will be placed on the top of stack and its element type is . - - of array element. This can be generaic parameter. - - Delegate to emittion of array loading instruction. - 1st argument is this instance. - Post condition is that exactly one target array will be added on the top of stack and its element type is . - - Index of array element. - - - - Emit array element storing instructions. - Post condition is evaluation stack will no be modified as previous state. - - of array element. This can be generaic parameter. - - Delegate to emittion of array loading instruction. - 1st argument is this instance. - Post condition is that exactly one target array will be added on the top of stack and its element type is . - - Index of array element. - - Delegate to emittion of storing element loading instruction. - 1st argument is this instance. - Post condition is that exactly one storing element will be added on the top of stack and its type is compatible. - - - - - Emit efficient integer constant loading. - Post condition is that exactly one integer will be added on the top of stack. - - Integer value. - - - - Emit 'typeof' expression. - Post condition is instance for will be placed on the top of evaluation stack. - - Target . - - - - Emit 'throw new ArgumentException(String,String,Exception)' statement. - Pre condition is that there are exactly three entries in the evaluation stack, - which are string, string, and Exception instance. - Post condition is that the evaluation statck will be empty. - - - - - Emit 'throw new TException(String,String,Exception)' statement. - Pre condition is that there are exactly two entries in the evaluation stack, - which are string and Exception instance. - Post condition is that the evaluation statck will be empty. - - of initializing and throwing . - - - - Emit 'nop' instruction with specified arguments. - - - - - Emit 'break' instruction with specified arguments. - - - - - Emit 'ldarg.0' instruction with specified arguments. - - - - - Emit 'ldarg.1' instruction with specified arguments. - - - - - Emit 'ldarg.2' instruction with specified arguments. - - - - - Emit 'ldarg.3' instruction with specified arguments. - - - - - Emit 'ldloc.0' instruction with specified arguments. - - - - - Emit 'ldloc.1' instruction with specified arguments. - - - - - Emit 'ldloc.2' instruction with specified arguments. - - - - - Emit 'ldloc.3' instruction with specified arguments. - - - - - Emit 'stloc.0' instruction with specified arguments. - - - - - Emit 'stloc.1' instruction with specified arguments. - - - - - Emit 'stloc.2' instruction with specified arguments. - - - - - Emit 'stloc.3' instruction with specified arguments. - - - - - Emit 'ldarg.s' instruction with specified arguments. - - as value. - - - - Emit 'ldarga.s' instruction with specified arguments. - - as value. - - - - Emit 'starg.s' instruction with specified arguments. - - as value. - - - - Emit 'ldloc.s' instruction with specified arguments. - - as value. - - - - Emit 'ldloca.s' instruction with specified arguments. - - as value. - - - - Emit 'stloc.s' instruction with specified arguments. - - as value. - - - - Emit 'ldnull' instruction with specified arguments. - - - - - Emit 'ldc.i4.m1' instruction with specified arguments. - - - - - Emit 'ldc.i4.0' instruction with specified arguments. - - - - - Emit 'ldc.i4.1' instruction with specified arguments. - - - - - Emit 'ldc.i4.2' instruction with specified arguments. - - - - - Emit 'ldc.i4.3' instruction with specified arguments. - - - - - Emit 'ldc.i4.4' instruction with specified arguments. - - - - - Emit 'ldc.i4.5' instruction with specified arguments. - - - - - Emit 'ldc.i4.6' instruction with specified arguments. - - - - - Emit 'ldc.i4.7' instruction with specified arguments. - - - - - Emit 'ldc.i4.8' instruction with specified arguments. - - - - - Emit 'ldc.i4.s' instruction with specified arguments. - - as value. - - - - Emit 'ldc.i4' instruction with specified arguments. - - as value. - - - - Emit 'ldc.i8' instruction with specified arguments. - - as value. - - - - Emit 'ldc.r4' instruction with specified arguments. - - as value. - - - - Emit 'ldc.r8' instruction with specified arguments. - - as value. - - - - Emit 'dup' instruction with specified arguments. - - - - - Emit 'pop' instruction with specified arguments. - - - - - Emit 'jmp' instruction with specified arguments. - - as target. - - - - Emit 'call' instruction with specified arguments. - - as target. - - - - Emit 'br.s' instruction with specified arguments. - - as target. - - - - Emit 'brfalse.s' instruction with specified arguments. - - as target. - - - - Emit 'brtrue.s' instruction with specified arguments. - - as target. - - - - Emit 'beq.s' instruction with specified arguments. - - as target. - - - - Emit 'bge.s' instruction with specified arguments. - - as target. - - - - Emit 'bgt.s' instruction with specified arguments. - - as target. - - - - Emit 'ble.s' instruction with specified arguments. - - as target. - - - - Emit 'blt.s' instruction with specified arguments. - - as target. - - - - Emit 'bne.un.s' instruction with specified arguments. - - as target. - - - - Emit 'bge.un.s' instruction with specified arguments. - - as target. - - - - Emit 'bgt.un.s' instruction with specified arguments. - - as target. - - - - Emit 'ble.un.s' instruction with specified arguments. - - as target. - - - - Emit 'blt.un.s' instruction with specified arguments. - - as target. - - - - Emit 'br' instruction with specified arguments. - - as target. - - - - Emit 'brfalse' instruction with specified arguments. - - as target. - - - - Emit 'brtrue' instruction with specified arguments. - - as target. - - - - Emit 'beq' instruction with specified arguments. - - as target. - - - - Emit 'bge' instruction with specified arguments. - - as target. - - - - Emit 'bgt' instruction with specified arguments. - - as target. - - - - Emit 'ble' instruction with specified arguments. - - as target. - - - - Emit 'blt' instruction with specified arguments. - - as target. - - - - Emit 'bne.un' instruction with specified arguments. - - as target. - - - - Emit 'bge.un' instruction with specified arguments. - - as target. - - - - Emit 'bgt.un' instruction with specified arguments. - - as target. - - - - Emit 'ble.un' instruction with specified arguments. - - as target. - - - - Emit 'blt.un' instruction with specified arguments. - - as target. - - - - Emit 'switch' instruction with specified arguments. - - [] as targets. - - - - Emit 'ldind.i1' instruction with specified arguments. - - - - - Emit 'ldind.u1' instruction with specified arguments. - - - - - Emit 'ldind.i2' instruction with specified arguments. - - - - - Emit 'ldind.u2' instruction with specified arguments. - - - - - Emit 'ldind.i4' instruction with specified arguments. - - - - - Emit 'ldind.u4' instruction with specified arguments. - - - - - Emit 'ldind.i8' instruction with specified arguments. - - - - - Emit 'ldind.i' instruction with specified arguments. - - - - - Emit 'ldind.r4' instruction with specified arguments. - - - - - Emit 'ldind.r8' instruction with specified arguments. - - - - - Emit 'ldind.ref' instruction with specified arguments. - - - - - Emit 'stind.ref' instruction with specified arguments. - - - - - Emit 'stind.i1' instruction with specified arguments. - - - - - Emit 'stind.i2' instruction with specified arguments. - - - - - Emit 'stind.i4' instruction with specified arguments. - - - - - Emit 'stind.i8' instruction with specified arguments. - - - - - Emit 'stind.r4' instruction with specified arguments. - - - - - Emit 'stind.r8' instruction with specified arguments. - - - - - Emit 'add' instruction with specified arguments. - - - - - Emit 'sub' instruction with specified arguments. - - - - - Emit 'mul' instruction with specified arguments. - - - - - Emit 'div' instruction with specified arguments. - - - - - Emit 'div.un' instruction with specified arguments. - - - - - Emit 'rem' instruction with specified arguments. - - - - - Emit 'rem.un' instruction with specified arguments. - - - - - Emit 'and' instruction with specified arguments. - - - - - Emit 'or' instruction with specified arguments. - - - - - Emit 'xor' instruction with specified arguments. - - - - - Emit 'shl' instruction with specified arguments. - - - - - Emit 'shr' instruction with specified arguments. - - - - - Emit 'shr.un' instruction with specified arguments. - - - - - Emit 'neg' instruction with specified arguments. - - - - - Emit 'not' instruction with specified arguments. - - - - - Emit 'conv.i1' instruction with specified arguments. - - - - - Emit 'conv.i2' instruction with specified arguments. - - - - - Emit 'conv.i4' instruction with specified arguments. - - - - - Emit 'conv.i8' instruction with specified arguments. - - - - - Emit 'conv.r4' instruction with specified arguments. - - - - - Emit 'conv.r8' instruction with specified arguments. - - - - - Emit 'conv.u4' instruction with specified arguments. - - - - - Emit 'conv.u8' instruction with specified arguments. - - - - - Emit 'callvirt' instruction with specified arguments. - - as target. - - - - Emit 'cpobj' instruction with specified arguments. - - as type. - - - - Emit 'ldobj' instruction with specified arguments. - - as type. - - - - Emit 'ldstr' instruction with specified arguments. - - as value. - - - - Emit 'newobj' instruction with specified arguments. - - as constructor. - - - - Emit 'castclass' instruction with specified arguments. - - as type. - - - - Emit 'isinst' instruction with specified arguments. - - as type. - - - - Emit 'conv.r.un' instruction with specified arguments. - - - - - Emit 'unbox' instruction with specified arguments. - - as type. - - - - Emit 'throw' instruction with specified arguments. - - - - - Emit 'ldfld' instruction with specified arguments. - - as field. - - - - Emit 'ldflda' instruction with specified arguments. - - as field. - - - - Emit 'stfld' instruction with specified arguments. - - as field. - - - - Emit 'ldsfld' instruction with specified arguments. - - as field. - - - - Emit 'ldsflda' instruction with specified arguments. - - as field. - - - - Emit 'stsfld' instruction with specified arguments. - - as field. - - - - Emit 'stobj' instruction with specified arguments. - - as type. - - - - Emit 'conv.ovf.i1.un' instruction with specified arguments. - - - - - Emit 'conv.ovf.i2.un' instruction with specified arguments. - - - - - Emit 'conv.ovf.i4.un' instruction with specified arguments. - - - - - Emit 'conv.ovf.i8.un' instruction with specified arguments. - - - - - Emit 'conv.ovf.u1.un' instruction with specified arguments. - - - - - Emit 'conv.ovf.u2.un' instruction with specified arguments. - - - - - Emit 'conv.ovf.u4.un' instruction with specified arguments. - - - - - Emit 'conv.ovf.u8.un' instruction with specified arguments. - - - - - Emit 'conv.ovf.i.un' instruction with specified arguments. - - - - - Emit 'conv.ovf.u.un' instruction with specified arguments. - - - - - Emit 'box' instruction with specified arguments. - - as type. - - - - Emit 'newarr' instruction with specified arguments. - - as type. - - - - Emit 'ldlen' instruction with specified arguments. - - - - - Emit 'ldelema' instruction with specified arguments. - - as type. - - - - Emit 'ldelem.i1' instruction with specified arguments. - - - - - Emit 'ldelem.u1' instruction with specified arguments. - - - - - Emit 'ldelem.i2' instruction with specified arguments. - - - - - Emit 'ldelem.u2' instruction with specified arguments. - - - - - Emit 'ldelem.i4' instruction with specified arguments. - - - - - Emit 'ldelem.u4' instruction with specified arguments. - - - - - Emit 'ldelem.i8' instruction with specified arguments. - - - - - Emit 'ldelem.i' instruction with specified arguments. - - - - - Emit 'ldelem.r4' instruction with specified arguments. - - - - - Emit 'ldelem.r8' instruction with specified arguments. - - - - - Emit 'ldelem.ref' instruction with specified arguments. - - - - - Emit 'stelem.i' instruction with specified arguments. - - - - - Emit 'stelem.i1' instruction with specified arguments. - - - - - Emit 'stelem.i2' instruction with specified arguments. - - - - - Emit 'stelem.i4' instruction with specified arguments. - - - - - Emit 'stelem.i8' instruction with specified arguments. - - - - - Emit 'stelem.r4' instruction with specified arguments. - - - - - Emit 'stelem.r8' instruction with specified arguments. - - - - - Emit 'stelem.ref' instruction with specified arguments. - - - - - Emit 'ldelem' instruction with specified arguments. - - as type. - - - - Emit 'stelem' instruction with specified arguments. - - as type. - - - - Emit 'unbox.any' instruction with specified arguments. - - as type. - - - - Emit 'conv.ovf.i1' instruction with specified arguments. - - - - - Emit 'conv.ovf.u1' instruction with specified arguments. - - - - - Emit 'conv.ovf.i2' instruction with specified arguments. - - - - - Emit 'conv.ovf.u2' instruction with specified arguments. - - - - - Emit 'conv.ovf.i4' instruction with specified arguments. - - - - - Emit 'conv.ovf.u4' instruction with specified arguments. - - - - - Emit 'conv.ovf.i8' instruction with specified arguments. - - - - - Emit 'conv.ovf.u8' instruction with specified arguments. - - - - - Emit 'refanyval' instruction with specified arguments. - - as type. - - - - Emit 'ckfinite' instruction with specified arguments. - - - - - Emit 'mkrefany' instruction with specified arguments. - - as type. - - - - Emit 'ldtoken' instruction with specified arguments. - - as target. - - - - Emit 'ldtoken' instruction with specified arguments. - - as target. - - - - Emit 'ldtoken' instruction with specified arguments. - - as target. - - - - Emit 'conv.u2' instruction with specified arguments. - - - - - Emit 'conv.u1' instruction with specified arguments. - - - - - Emit 'conv.i' instruction with specified arguments. - - - - - Emit 'conv.ovf.i' instruction with specified arguments. - - - - - Emit 'conv.ovf.u' instruction with specified arguments. - - - - - Emit 'add.ovf' instruction with specified arguments. - - - - - Emit 'add.ovf.un' instruction with specified arguments. - - - - - Emit 'mul.ovf' instruction with specified arguments. - - - - - Emit 'mul.ovf.un' instruction with specified arguments. - - - - - Emit 'sub.ovf' instruction with specified arguments. - - - - - Emit 'sub.ovf.un' instruction with specified arguments. - - - - - Emit 'endfinally' instruction with specified arguments. - - - - - Emit 'leave' instruction with specified arguments. - - as target. - - - - Emit 'leave.s' instruction with specified arguments. - - as target. - - - - Emit 'stind.i' instruction with specified arguments. - - - - - Emit 'conv.u' instruction with specified arguments. - - - - - Emit 'arglist' instruction with specified arguments. - - - - - Emit 'ceq' instruction with specified arguments. - - - - - Emit 'cgt' instruction with specified arguments. - - - - - Emit 'cgt.un' instruction with specified arguments. - - - - - Emit 'clt' instruction with specified arguments. - - - - - Emit 'clt.un' instruction with specified arguments. - - - - - Emit 'ldftn' instruction with specified arguments. - - as method. - - - - Emit 'ldvirtftn' instruction with specified arguments. - - as method. - - - - Emit 'ldarg' instruction with specified arguments. - - as index. - - - - Emit 'ldarga' instruction with specified arguments. - - as index. - - - - Emit 'starg' instruction with specified arguments. - - as index. - - - - Emit 'ldloc' instruction with specified arguments. - - as index. - - - - Emit 'ldloca' instruction with specified arguments. - - as index. - - - - Emit 'stloc' instruction with specified arguments. - - as index. - - - - Emit 'localloc' instruction with specified arguments. - - - - - Emit 'endfilter' instruction with specified arguments. - - - - - Emit 'initobj' instruction with specified arguments. - - as type. - - - - Emit 'cpblk' instruction with specified arguments. - - - - - Emit 'initblk' instruction with specified arguments. - - - - - Emit 'rethrow' instruction with specified arguments. - - - - - Emit 'sizeof' instruction with specified arguments. - - as type. - - - - Emit 'refanytype' instruction with specified arguments. - - - - - Initializes a new instance of the class. - - The method builder. - The trace writer. - - - - Initializes a new instance of the class. - - The dynamic method. - The trace writer. - - - - Initializes a new instance of the class. - - The method builder. - The trace writer. - true if the underlying builders are debuggable; othersie false. - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Emit 'ret' instruction with specified arguments. - - - - - Declare local without pinning and name for debugging. - - of local variable. - to refer declared local variable. - - - - Declare local without name for debugging. - - of local variable. - If true, the local variable will be pinned. - to refer declared local variable. - - - - Declare local with name for debugging and without pinning. - Note that this method is not enabled for dynamic method. - - of local variable. - Name of the local variable. - to refer declared local variable. - - - - Declare local with name for debugging. - Note that this method is not enabled for dynamic method. - - of local variable. - Name of the local variable. - If true, the local variable will be pinned. - to refer declared local variable. - - - - Emit exception block with catch blocks. - - - which emits exception block (try in C#) body. - A 1st argument is this , - and a 2nd argument is will to be end of emitting exception block. - The delegate do not have to emit leave or leave.s instrauction at tail of the body. - - - for catch block body emittion. - A 1st item of the tuple is which indicates catching exception type. - A 2nd item of the tuple is which emits catch block body. - A 1st argument of the delegate is this , - a 2nd argument of the delegate is will to be end of emitting exception block, - and 3rd argument of the delegate is the 1st item of the tuple. - The delegate do not have to emit leave or leave.s instrauction at tail of the body. - - - for catch block body emittion. - A 1st item of the tuple is which indicates catching exception type. - A 2nd item of the tuple is which emits catch block body. - A 1st argument of the delegate is this , - a 2nd argument of the delegate is will to be end of emitting exception block, - and 3rd argument of the delegate is the 1st item of the tuple. - The delegate do not have to emit leave or leave.s instrauction at tail of the body. - - - - - Emit exception block with catch blocks and a finally block. - - - which emits exception block (try in C#) body. - A 1st argument is this , - and a 2nd argument is will to be end of emitting exception block. - The delegate do not have to emit leave or leave.s instrauction at tail of the body. - - - which emits finally block body. - A 1st argument is this , - and a 2nd argument is will to be end of emitting exception block. - The delegate do not have to emit endfinally instrauction at tail of the body. - - - for catch block body emittion. - A 1st item of the tuple is which indicates catching exception type. - A 2nd item of the tuple is which emits catch block body. - A 1st argument of the delegate is this , - a 2nd argument of the delegate is will to be end of emitting exception block, - and 3rd argument of the delegate is the 1st item of the tuple. - The delegate do not have to emit leave or leave.s instrauction at tail of the body. - - - - - Begin exception block (try in C#) here. - Note that you do not have to emit leave or laeve.s instrauction at tail of the body. - - will to be end of begun exception block. - - - - Begin catch block with specified exception. - Note that you do not have to emit leave or laeve.s instrauction at tail of the body. - - for catch. - - - - Begin filter block. - Note that you do not have to emit leave or laeve.s instrauction at tail of the body. - - - - - Begin fault block. - Note that you do not have to emit endfinally instrauction at tail of the body. - - - - - Begin finally block. - Note that you do not have to emit endfinally instrauction at tail of the body. - - - - - End current exception block and its last clause. - - - - - Define new without name for tracing. - - which will be target of branch instructions. - - - - Define new with name for tracing. - - Name of label. Note that debugging information will not have this name. - which will be target of branch instructions. - - - - Mark current position using specifieid . - - . - - - - Emit 'calli' instruction for indirect unmanaged function call. - - of unmanaged function. - Return of the function. - Parameter s of the function. - - - - Emit 'calli' instruction for indirect managed method call. - - of managed method. - Return of the method. - Required parameter s of the method. - Optional varargs parameter s of the method. - - - - Emit constrained 'callvirt' instruction. - - to be constrained to. - Target which must be virtual method. - - - - Emit readonly 'ldelema' instruction. - - of array element. - - - - Emit 'call' instruction with specified arguments as tail call. - - as target. - - Subsequent 'ret' instruction will be emitted together. - - - - - Emit 'callvirt' instruction with specified arguments as tail call. - - as target. - - Subsequent 'ret' instruction will be emitted together. - - - - - Emit 'calli' instruction for indirect unmanaged function call as tail call. - - of unmanaged function. - Return of the function. - Parameter s of the function. - - Subsequent 'ret' instruction will be emitted together. - - - - - Emit 'calli' instruction for indirect managed method call as tail call. - - of managed method. - Return of the method. - Required parameter s of the method. - Optional varargs parameter s of the method. - - Subsequent 'ret' instruction will be emitted together. - - - - - Emit 'unaligned.' prefix. - - Alignment. - - - - Write trace message. - - The string. - - - - Write trace message. - - The format string. - Format argument. - - - - Write trace message. - - The format string. - Format arguments. - - - - Write trace line break. - - - - - Write trace message followed by line break. - - The string. - - - - Write trace message followed by line break. - - The format string. - Format argument. - - - - Write trace message followed by line break. - - The format string. - Format arguments. - - - - Get for end of method. - - - for end of method. - - - - - Get for end of current exception blocks. - - - for end of current exception blocks. - When there are no exception blocks, then null. - - - - - Get whether there are any exception blocks in current positon. - - - If there are any exception blocks in current positon then true; otherwise, false. - - - - - Get the value whether this instance used for dynamic method. - - If this instance used for dynamic method then true; otherwise false. - - Dynamic method does not support debugging information like local variable name. - - - - - Get level of indentation. - - - - - Get or set indent characters. - - - to be used to indent. - To reset default, specify null. - - - - - Get current line number. - - Current line number. - - - - Get whether this IL stream is ended with 'ret'. - - - When this IL stream is ended with 'ret' then true; otherwise, false. - - - - - Define utility extension method for generic type. - - - - - Determine whether the source type implements specified generic type or its built type. - - Target type. - Generic interface type. - - true if implements , - or built closed generic interface type; - otherwise false. - - - - - Get name of type without namespace and assembly name of itself and its generic arguments. - - Target type. - Simple name of type. - - - - Get full name of type including namespace and excluding assembly name of itself and its generic arguments. - - Target type. - Full name of type. - - - - Lazy initialized serializer which delegates actual work for the other serializer implementation. - - - The type of target type. - - - This serializer is intended to support self-composit structure like directories or XML nodes. - - - - - Initializes a new instance of the class. - - - The serialization context to support lazy retrieval. - - - - - using to hold serializers for target members. - - - - - Genereates serialization methods which can be save to file. - - - - - Flushes the trace. - - - - - Initializes a new instance of the class. - - - - - Releases all managed resources. - - - - - Releases unmanaged and optionally managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Gets the IL generator to implement overrides. - - - The IL generator to implement overrides. - This value will not be null. - - - - - Gets the IL generator to implement overrides. - - - The IL generator to implement overrides. - This value will not be null. - - - - - Gets the IL generator to implement overrides. - - - The IL generator to implement overrides. - - - When this method is called, will be overridden. - This value will not be null. - - - - - Creates the serializer type built now and returns its new instance. - - Target type to be serialized/deserialized. - The to holds serializers. - - Newly built instance. - This value will not be null. - - - - - Regisgter using target type to the current emitting session. - - Type to be serialized/deserialized. - - to emit serializer retrieval instructions. - The 1st argument should be to emit instructions. - The 2nd argument should be argument index of the serializer holder. - This value will not be null. - - - - - Gets a value indicating whether this instance is trace enabled. - - - true if the trace enabled; otherwise, false. - - - - - Gets the for tracing. - - - The for tracing. - This value will not be null. - - - - - Initializes a new instance of the class. - - Type of the target. - - - - Gets the IL generator to implement overrides. - - - The IL generator to implement overrides. - This value will not be null. - - - - - Gets the IL generator to implement overrides. - - - The IL generator to implement overrides. - This value will not be null. - - - - - Gets the IL generator to implement overrides. - - - The IL generator to implement overrides. - - - - - Creates the serializer type built now and returns its new instance. - - Target type to be serialized/deserialized. - The to holds serializers. - - Newly built instance. - This value will not be null. - - - - - Regisgter using target type to the current emitting session. - - Type to be serialized/deserialized. - - to emit serializer retrieval instructions. - The 1st argument should be to emit instructions. - The 2nd argument should be argument index of the serializer holder. - This value will not be null. - - - - - Callback based to implement context-based serialization. - - The type of target type. - - - - Provides bit access for . - - - - - Value as . - - - - - Most significant byte of current endian. - - - - - 2nd bit from most significant byte of current endian. - - - - - 3rd byte from most significant byte of current endian. - - - - - Least byte of current endian. - - - - - Initializes a new instance of the type from specified . - - Value of . - - - - Initializes a new instance of the type from specified [] which is big endian. - - Array of which contains bytes in big endian. - Offset to read. - - - - Implements which reads raw binary with specific . - - - - - Gets the length of the underlying raw binary length. - - - The length of the underlying raw binary length. - This value will not be negative. - - - - - Utilities related to member/type ID. - - - - - Builds the name of the generating method. - - The operation. - Type of the target. - Name of the target member. - Name of the method. - - - - for a map collection using expression tree. - - The type of element. - - - - Implements common features code generation based serializer builders. - - The type of the serialization target. - - - - Initializes a new instance of the class. - - The . - - - - Creates serializer for . - - Serialization target members. This will not be null nor empty. - - . This value will not be null. - - - - - Emits the ILs to pack the members of the current type. - - holding emittion context information. - to emit IL. - The array of s where each represents the member to be (de)serialized. - - - - Creates serializer as is array type. - - - . - This value will not be null. - - - - - Creates serializer as is map type. - - - . - This value will not be null. - - - - - Creates serializer as is tuple type. - - - . - This value will not be null. - - - - - Provides bit access for . - - - - - Value as . - - - - - Most significant byte of current endian. - - - - - 2nd bit from most significant byte of current endian. - - - - - 3rd byte from most significant byte of current endian. - - - - - 4th byte from most significant byte of current endian. - - - - - 5th byte from most significant byte of current endian. - - - - - 6th byte from most significant byte of current endian. - - - - - 7th byte from most significant byte of current endian. - - - - - Least significant byte of current endian. - - - - - Initializes a new instance of the type from specified . - - Value of . - - - - Initializes a new instance of the type from specified [] which is big endian. - - Array of which contains bytes in big endian. - Offset to read. - - - - Debugger type proxy for . - - The key type of the dictionary. - The value type of the dictionary. - - - - Defines direct conversion value from/to Message Pack binary stream without intermediate . - - - This class provides convinient way to unpack objects from wellknown seekable stream. - This class does not support stream feeding. - - - - - - Unpacks value from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - When the type of packed value is not known, use instead. - - - - - Unpacks value from the specified . - - The which contains Message Pack binary stream. - - The unpacked value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - When the type of packed value is not known, use instead. - - - - - Unpacks value from the specified . - - The which contains Message Pack binary stream. - - The unpacked value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - When the type of packed value is not known, use instead. - - - - - Unpacks value from the specified . - - The which contains Message Pack binary stream. - - The unpacked value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - When the type of packed value is not known, use instead. - - - - - Unpacks value from the specified . - - The which contains Message Pack binary stream. - - The unpacked value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - When the type of packed value is not known, use instead. - - - - - Unpacks value from the specified . - - The which contains Message Pack binary stream. - - The unpacked value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - When the type of packed value is not known, use instead. - - - - - Unpacks value from the specified . - - The which contains Message Pack binary stream. - - The unpacked value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - When the type of packed value is not known, use instead. - - - - - Unpacks value from the specified . - - The which contains Message Pack binary stream. - - The unpacked value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - When the type of packed value is not known, use instead. - - - - - Unpacks value from the specified . - - The which contains Message Pack binary stream. - - The unpacked value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - When the type of packed value is not known, use instead. - - - - - Unpacks value from the specified . - - The which contains Message Pack binary stream. - - The unpacked value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - When the type of packed value is not known, use instead. - - - - - Unpacks value from the specified . - - The which contains Message Pack binary stream. - - The unpacked value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the head of specified byte array with UTF-8 encoding. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - Or, the unpacked result in the is invalid as UTF-8 encoded byte stream. - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the head of specified byte array with specified encoding. - - The byte array which contains Message Pack binary stream. - The to decode binary stream. - - The of which contains unpacked value and processed bytes count. - - - is null. - Or, is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - Or, the unpacked result in the is invalid as UTF-8 encoded byte stream. - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from specified offsetted byte array with UTF-8 encoding. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked value and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not greater than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - Or, the unpacked result in the is invalid as specified encoding byte stream. - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from specified offsetted byte array with specified encoding. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - The to decode binary stream. - - The of which contains unpacked value and processed bytes count. - - - is null. - Or, is null. - - - is empty. - Or, the length of is not greater than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - Or, the unpacked result in the is invalid as specified encoding byte stream. - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the specified with UTF-8 encoding. - - The which contains Message Pack binary stream. - - The unpacked value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not raw binary. - Or, the unpacked result in the is invalid as UTF-8 encoded byte stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks value from the specified with specified encoding. - - The which contains Message Pack binary stream. - The to decode binary stream. - - The unpacked value. - - - is null. - Or is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not raw binary. - Or, the unpacked result in the is invalid as specified encoding byte stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks raw value from the specified as . - - The which contains Message Pack binary stream. - - The which represents raw value stream. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not raw binary. - Note that the state of will be unpredictable espicially it is not seekable. - - - - does not own , so still should be closed. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks raw value from the specified as with UTF-8 encoding. - - The which contains Message Pack binary stream. - - The which represents raw value stream as UTF-8 string. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not raw binary. - Note that the state of will be unpredictable espicially it is not seekable. - - - - if contains invalid sequence as UTF-8 encoding string, - the may occurs on read char. - - - does not own , so still should be closed. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks raw value from the specified as with specified encoding. - - The which contains Message Pack binary stream. - The to decode binary stream. - - The which represents raw value stream as UTF-8 string. - - - is null. - Or, is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not raw binary. - Note that the state of will be unpredictable espicially it is not seekable. - - - - if contains invalid sequence as specified encoding string, - the may occurs on read char. - - - does not own , so still should be closed. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks the array from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked the array and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - The items count of the underlying collection body is over . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks the array from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked the array and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - The items count of the underlying collection body is over . - - - When the type of packed value is not known, use instead. - - - - - Unpacks the array value from the specified . - - The which contains Message Pack binary stream. - - The unpacked the array value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - The items count of the underlying collection body is over . - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks length of the array from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of nullable which contains unpacked length of the array and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to nullable . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks length of the array from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of nullable which contains unpacked length of the array and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to nullable . - - - When the type of packed value is not known, use instead. - - - - - Unpacks length of the array value from the specified . - - The which contains Message Pack binary stream. - - The unpacked length of the array value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to nullable . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks the dictionary from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked the dictionary and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - The items count of the underlying collection body is over . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks the dictionary from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked the dictionary and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - The items count of the underlying collection body is over . - - - When the type of packed value is not known, use instead. - - - - - Unpacks the dictionary value from the specified . - - The which contains Message Pack binary stream. - - The unpacked the dictionary value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - The items count of the underlying collection body is over . - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks count of the dictionary entries from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of nullable which contains unpacked count of the dictionary entries and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to nullable . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks count of the dictionary entries from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of nullable which contains unpacked count of the dictionary entries and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to nullable . - - - When the type of packed value is not known, use instead. - - - - - Unpacks count of the dictionary entries value from the specified . - - The which contains Message Pack binary stream. - - The unpacked count of the dictionary entries value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to nullable . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks the raw binary from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of [] which contains unpacked the raw binary and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to []. - - - The items count of the underlying collection body is over . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks the raw binary from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of [] which contains unpacked the raw binary and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to []. - - - The items count of the underlying collection body is over . - - - When the type of packed value is not known, use instead. - - - - - Unpacks the raw binary value from the specified . - - The which contains Message Pack binary stream. - - The unpacked the raw binary value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to []. - Note that the state of will be unpredictable espicially it is not seekable. - - - The items count of the underlying collection body is over . - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks the boolean from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked the boolean and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks the boolean from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked the boolean and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - When the type of packed value is not known, use instead. - - - - - Unpacks the boolean value from the specified . - - The which contains Message Pack binary stream. - - The unpacked the boolean value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks the nil from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked the nil and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks the nil from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked the nil and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - When the type of packed value is not known, use instead. - - - - - Unpacks the nil value from the specified . - - The which contains Message Pack binary stream. - - The unpacked the nil value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks the which represents the value which has MessagePack type semantics. from the head of specified byte array. - - The byte array which contains Message Pack binary stream. - - The of which contains unpacked the which represents the value which has MessagePack type semantics. and processed bytes count. - - - is null. - - - is empty. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - - Invocation of this method is equivalant to call with offset is 0. - - - When the type of packed value is not known, use instead. - - - - - - Unpacks the which represents the value which has MessagePack type semantics. from the specified byte array. - - The byte array which contains Message Pack binary stream. - The offset to be unpacking start with. - - The of which contains unpacked the which represents the value which has MessagePack type semantics. and processed bytes count. - - - is null. - - - is empty. - Or, the length of is not grator than . - - - is negative value. - - - is not valid MessagePack stream. - - - The unpacked result in the is not compatible to . - - - When the type of packed value is not known, use instead. - - - - - Unpacks the which represents the value which has MessagePack type semantics. value from the specified . - - The which contains Message Pack binary stream. - - The unpacked the which represents the value which has MessagePack type semantics. value. - - - is null. - - - The of is false. - - - is not valid MessagePack stream. - Note that the state of will be unpredictable espicially it is not seekable. - - - The unpacked result in the is not compatible to . - Note that the state of will be unpredictable espicially it is not seekable. - - - - The processed bytes count can be calculated via of when the is true. - - - When the type of packed value is not known, use instead. - - - - - - Represents raw binary as read only . - - - - This object behaves as wrapper of the underlying which contains message pack encoded byte array. - But, this object does not own the stream, so that stream is not closed when this stream is closed. - - - The value of , timeout, and async API depends on the underlying stream. - - - - - - Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. - - - An array of bytes. When this method returns, - the buffer contains the specified byte array with the values between and ( + - 1) - replaced by the bytes read from the current source. - - - The zero-based byte offset in at which to begin storing the data read from the current stream. - - - The maximum number of bytes to be read from the current stream. - - - The total number of bytes read into the buffer. - This can be less than the number of bytes requested if that many bytes are not currently available, - or zero (0) if the end of the stream has been reached. - - - The sum of and is larger than the buffer length. - - - is null. - - - or is negative. - - - An I/O error occurs. - - - Methods were called after the stream was closed. - - - - Arguments might be passed to the underlying without any validation. - - - - - - Overrides so that no action is performed. - - - - - Throws . - - Never used. - - Always thrown. - - - - - Throws . - - Never used. - Never used. - Never used. - - Always thrown. - - - - - Gets a value indicating whether the current stream supports reading. - - Always true. - - - - Gets a value indicating whether the current stream supports writing. - - Always false. - - - - Gets the length in bytes of the stream. - - - A long value representing the length of the raw binary length. - This value must be between 0 and . - - - Methods were called after the stream was closed. - - - This property never throws even if is false. - - - - - Gets a value that determines whether the current stream can time out. - - - A value that determines whether the current stream can time out. - - - Methods were called after the stream was closed. - - - - - Basic implementation using managed . - - - - - Implements serialization feature of MsgPack. - - - - - Initializes a new instance of the class. - - - - - Create standard Safe instancde wrapping specified . - - object. This stream will be closed when is called. - Safe . This will not be null. - is null. - - You can specify any derived class like , , - NetworkStream, , or so. - - - - - Create standard Safe instancde wrapping specified . - - object. - - true to close when this instance is disposed; - false, otherwise. - - Safe . This will not be null. - is null. - - You can specify any derived class like , , - NetworkStream, , or so. - - - - - Clean up internal resources. - - - - - When overridden by derived class, release all unmanaged resources, optionally release managed resources. - - If true, release managed resources too. - - - - When overridden by derived class, change current position to specified offset. - - Offset. You shoud not specify the value which causes underflow or overflow. - - A class of this instance does not support seek. - - - - - When overridden by derived class, writes specified byte to stream using implementation specific manner. - - A byte to be written. - - - - Writes specified bytes to stream using implementation specific most efficient manner. - - Collection of bytes to be written. - - - - Writes specified bytes to stream using implementation specific most efficient manner. - - Bytes to be written. - If the can be treat as immutable (that is, can be used safely without copying) then true. - - - - Pack value to current stream. - - value. - This instance. - This instance has been disposed. - - - - Try pack value to current stream strictly. - - Maybe value. - If has be packed successfully then true, otherwise false (normally, larger type required). - - - - Pack value to current stream. - - value. - This instance. - This instance has been disposed. - - - - Try pack value to current stream strictly. - - Maybe value. - If has be packed successfully then true, otherwise false (normally, larger type required). - - - - Pack value to current stream. - - value. - This instance. - This instance has been disposed. - - - - Try pack value to current stream strictly. - - Maybe value. - If has be packed successfully then true, otherwise false (normally, larger type required). - - - - Pack value to current stream. - - value. - This instance. - This instance has been disposed. - - - - Try pack value to current stream strictly. - - Maybe value. - If has be packed successfully then true, otherwise false (normally, larger type required). - - - - Pack value to current stream. - - value. - This instance. - This instance has been disposed. - - - - Try pack value to current stream strictly. - - Maybe value. - If has be packed successfully then true, otherwise false (normally, larger type required). - - - - Pack value to current stream. - - value. - This instance. - This instance has been disposed. - - - - Try pack value to current stream strictly. - - Maybe value. - If has be packed successfully then true, otherwise false (normally, larger type required). - - - - Pack value to current stream. - - value. - This instance. - This instance has been disposed. - - - - Try pack value to current stream strictly. - - Maybe value. - If has be packed successfully then true, otherwise false (normally, larger type required). - - - - Pack value to current stream. - - value. - This instance. - This instance has been disposed. - - - - Try pack value to current stream strictly. - - Maybe value. - If has be packed successfully then true, otherwise false (normally, larger type required). - - - - Pack value to current stream. - - value. - This instance. - - - - Pack value to current stream. - - value. - This instance. - - - - Pack value to current stream. - - value. - This instance. - - - - Bookkeep array length to be packed on current stream. - - Array length. - This instance. - This instance has been disposed. - - - - Bookkeep array length to be packed on current stream. - - Array length. - This instance. - - - - Bookkeep dictionary items count to be packed on current stream. - - Dictionary items count. - This instance. - This instance has been disposed. - - - - Bookkeep dictionary items count to be packed on current stream. - - Dictionary items count. - This instance. - - - - Bookkeep byte length to be packed on current stream. - - Byte length. - This instance. - This instance has been disposed. - - - - Bookkeep byte length to be packed on current stream. - - Byte length. - This instance. - - - - Pack specified byte stream to current stream. - - Source bytes its size is not known. - This instance. - This instance has been disposed. - - - - Pack specified byte stream to current stream. - - Source bytes its size is known. - This instance. - This instance has been disposed. - - - - Pack specified byte array to current stream. - - Source byte array. - This instance. - This instance has been disposed. - - - - Pack specified byte array to current stream without any header. - - Source byte array. - This instance. - This instance has been disposed. - - If you forget to write header first, then resulting stream will be corrupsed. - - - - - Packs specified byte sequence to current stream without any header. - - Source byte array. - This instance. - This instance has been disposed. - - If you forget to write header first, then resulting stream will be corrupsed. - - - - - Pack specified char stream to current stream with UTF-8 . - - Source chars its size is not known. - This instance. - This instance has been disposed. - - - - Pack specified string to current stream with UTF-8 . - - Source string. - This instance. - This instance has been disposed. - - - - Pack specified char stream to current stream with specified . - - Source chars its size is not known. - to be used. - This instance. - This instance has been disposed. - - - - Pack specified string to current stream with specified . - - Source string. - to be used. - This instance. - This instance has been disposed. - - - - Pack specified char stream to current stream with specified . - - Source chars its size is not known. - to be used. - - - - Pack specified string to current stream with specified . - - Source string. - to be used. - - - - Bookkeep collection count to be packed on current stream. - - Collection count to be written. - This instance. - This instance has been disposed. - - - - Bookkeep dictionary count to be packed on current stream. - - Dictionary count to be written. - This instance. - This instance has been disposed. - - - - Try pack value to current stream as tiny fix num. - - Maybe tiny value. - If has be packed successfully then true, otherwise false (normally, larger type required). - - - - Try pack value to current stream as tiny fix num. - - Maybe tiny value. - If has be packed successfully then true, otherwise false (normally, larger type required). - - - - Pack a null value to current stream. - - This instance. - This instance has been disposed. - - - - Pack nullable value. - - Value to serialize. - This packer instance. - - - - Pack nullable value. - - Value to serialize. - This packer instance. - - - - Pack nullable value. - - Value to serialize. - This packer instance. - - - - Pack nullable value. - - Value to serialize. - This packer instance. - - - - Pack nullable value. - - Value to serialize. - This packer instance. - - - - Pack nullable value. - - Value to serialize. - This packer instance. - - - - Pack nullable value. - - Value to serialize. - This packer instance. - - - - Pack nullable value. - - Value to serialize. - This packer instance. - - - - Pack nullable value. - - Value to serialize. - This packer instance. - - - - Pack nullable value. - - Value to serialize. - This packer instance. - - - - Pack nullable value. - - Value to serialize. - This packer instance. - - - - Get whether this class supports seek operation and quering property. - - If this class supports seek operation and quering property then true. - - - - Get current position of underlying stream. - - Opaque position value of underlying stream. - - A class of this instance does not support seek. - - - - - Provides pre-compiled serialier assembly generation. - - - Currently, generated assembly has some restrictions: - - - The type name cannot be customize. It always to be MsgPack.Serialization.EmittingSerializers.Generated.<ESCAPED_TARGET_NAME>Serializer. - Note that the ESCAPED_TARGET_NAME is the string generated by replacing type delimiters with undersecore ('_'). - - - The assembly cannot be used on WinRT because - - - - You should NOT assume at all like class hierarchy of generated type, its implementing interfaces, custom attributes, or dependencies. - They subject to be changed in the future. - If you want to get such fine grained control for them, you should implement own hand made serializers. - - - - - - Initializes a new instance of the class. - - Type of the root object which will be serialized/deserialized. - Name of the assembly to be generated. - - is null. - Or is null. - - - - - Generates the serializer assembly and save it to current directory. - - - - - Gets the type of the root object which will be serialized/deserialized. - - - The type of the root object which will be serialized/deserialized. - This value will not be null. - - - - - Gets the name of the assembly to be generated. - - - The name of the assembly to be generated. - - - - - Gets or sets the which indicates serialization method to be used. - - - The which indicates serialization method to be used. - - - - - Defines non-generic interface of actual generic serializer builder. - - - - - Generates the assembly and saves it to current directory. - - The dedicated . - The dedicated . - - - - Actual generic serializer builder. - - The type of root type. - - - - Generates the assembly and saves it to current directory. - - The dedicated . - The dedicated . - - - - Speifies nil implication in serialization/deserialization. - - - - - A nil is interpreted as default value of the member. - - - - This value affects only deserialization. - - - If the unpacking value is nil, the serializer will not set any value to the member. - - - This value corresponds to optional on the IDL. - - - This is default option because the most safe option. - - - - - - A nil is interpreted as null. - - - - This value affects only deserialization. - - - If the unpacking value is nil, the serializer will set null to the member. - If the member is non-nullable value type and the packed value is nil, then will be thrown. - - - This value corresponds to nullable required on the IDL. - - - If the destination end point sends nil for the value type member like type, - you can avoid the exception with change the type of the member to nullable value type. - - - - - - A nil is prohibitted. - - - - This value affects both of serialization and deserialization. - - - If the packing value is null or the unpacking value is nil, - the serializer will throw exception. - - - This value corresponds to required on the IDL. - - - When you specify this value to newly added member, - it means that you BREAK backword compatibility. - - - - - - Represents unpacking error when message type is unknown or unavailable. - - - - - Initializes a new instance of the class with the default error message. - - - - - Initializes a new instance of the class with a specified error message. - - The message that describes the error. - - - - Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - - The exception that is the cause of the current exception, or a null if no inner exception is specified. - - - - - Initializes a new instance of the class with serialized data. - - - The that holds the serialized object data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - The parameter is null. - - - The class name is null or is zero (0). - - - - - Exception occurs when serialized stream contains structures or features which will never be supported by MsgPack/CLI implementation. - - - - - Initializes a new instance of the class with the default error message. - - - - - Initializes a new instance of the class with a specified error message. - - The message that describes the error. - - - - Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - - The exception that is the cause of the current exception, or a null if no inner exception is specified. - - - - - Initializes a new instance of the class with serialized data. - - - The that holds the serialized object data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - The parameter is null. - - - The class name is null or is zero (0). - - - - - Implements of . - - - - - Initializes a new instance of the class. - - - - - Determines whether two objects of type are equal. - - The first object to compare. - The second object to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified . - - The . - - A hash code for , suitable for use in hashing algorithms and data structures like a hash table. - - - - - Represents deserialized object of MsgPack. - - - - - Represents objects which knows how to pack ifself using specified . - - - - - Pack this instance itself using specified . - - . - Packing options. This value can be null. - is null. - - - - Instance represents nil. This is equal to default value. - - - - - Initializes a new instance wraps . - - - The collection to be copied. - - - - - Initializes a new instance wraps . - - - The collection to be copied or used. - - - true if the is immutable collection; - othereise, false. - - - When the collection is truely immutable or dedicated, you can specify true to the . - When is true, this constructor does not copy its contents, - or copies its contents otherwise. - - Note that both of IReadOnlyList and is NOT immutable - because the modification to the underlying collection will be reflected to the read-only collection. - - - - - - Initializes a new instance wraps . - - - The dictitonary to be copied. - - - - - Initializes a new instance wraps . - - - The dictitonary to be copied or used. - - - true if the is immutable collection; - othereise, false. - - - When the collection is truely immutable or dedicated, you can specify true to the . - When is true, this constructor does not copy its contents, - or copies its contents otherwise. - - Note that both of IReadOnlyDictionary and ReadOnlyDictionary is NOT immutable - because the modification to the underlying collection will be reflected to the read-only collection. - - - - - - Initializes a new instance wraps . - - which represents byte array or UTF-8 encoded string. - - - - Compare two instances are equal. - - instance. - - If is and its value is equal to this instance, then true. - Otherwise false. - - - - - Compare two instances are equal. - - instance. - - Whether value of is equal to this instance or not. - - - - - Get hash code of this instance. - - Hash code of this instance. - - - - Returns a string that represents the current object. - - - A string that represents the current object. - - - - DO NOT use this value programmically. - The purpose of this method is informational, so format of this value subject to change. - - - - - - Determine whether the underlying value of this instance is specified type or not. - - Target type. - If the underlying value of this instance is then true, otherwise false. - - - - Determine whether the underlying value of this instance is specified type or not. - - Target type. - If the underlying value of this instance is then true, otherwise false. - is null. - - - - Pack this instance itself using specified . - - . - Packing options. This value can be null. - is null. - - - - Gets the underlying value as string encoded with specified . - - - The string. - Note that some returns null if the binary is not valid encoded string. - - - - - Get underlying value as UTF8 string. - - Underlying raw binary. - - - - Get underlying value as UTF-16 string. - - Underlying string. - - This method detects BOM. If BOM is not exist, them bytes should be Big-Endian UTF-16. - - - - - Get underlying value as UTF-16 charcter array. - - Underlying string. - - - - Get underlying value as . - - Underlying . - - - - Get underlying value as . - - Underlying . - - - - Get underlying value as . - - Underlying . - - - - Wraps specified object as recursively. - - Object to be wrapped. - wrapps . - - is not primitive value type, list of , - dictionary of , , [], or null. - - - - - Get boxed underlying value for this object. - - Boxed underlying value for this object. - - - - Compare two instances are equal. - - instance. - instance. - - Whether value of and are equal each other or not. - - - - - Compare two instances are not equal. - - instance. - instance. - - Whether value of and are not equal each other or are equal. - - - - - Convert [] instance to instance. - - [] instance. - instance corresponds to . - - - - Initializes a new instance of the type which wraps instance. - - - - - Initializes a new instance of the type which wraps instance. - - - - - Initializes a new instance of the type which wraps instance. - - - - - Initializes a new instance of the type which wraps instance. - - - - - Initializes a new instance of the type which wraps instance. - - - - - Initializes a new instance of the type which wraps instance. - - - - - Initializes a new instance of the type which wraps instance. - - - - - Initializes a new instance of the type which wraps instance. - - - - - Initializes a new instance of the type which wraps instance. - - - - - Initializes a new instance of the type which wraps instance. - - - - - Initializes a new instance of the type which wraps instance. - - - - - Initializes a new instance of the type which wraps instance. - - - - - Initializes a new instance of the type which wraps [] instance. - - - - - Convert this instance to instance. - - instance corresponds to this instance. - - - - Convert this instance to instance. - - instance corresponds to this instance. - - - - Convert this instance to instance. - - instance corresponds to this instance. - - - - Convert this instance to instance. - - instance corresponds to this instance. - - - - Convert this instance to instance. - - instance corresponds to this instance. - - - - Convert this instance to instance. - - instance corresponds to this instance. - - - - Convert this instance to instance. - - instance corresponds to this instance. - - - - Convert this instance to instance. - - instance corresponds to this instance. - - - - Convert this instance to instance. - - instance corresponds to this instance. - - - - Convert this instance to instance. - - instance corresponds to this instance. - - - - Convert this instance to instance. - - instance corresponds to this instance. - - - - Convert this instance to instance. - - instance corresponds to this instance. - - - - Convert this instance to [] instance. - - [] instance corresponds to this instance. - - - - Convert instance to instance. - - instance. - instance corresponds to . - - - - Convert instance to instance. - - instance. - instance corresponds to . - - - - Convert instance to instance. - - instance. - instance corresponds to . - - - - Convert instance to instance. - - instance. - instance corresponds to . - - - - Convert instance to instance. - - instance. - instance corresponds to . - - - - Convert instance to instance. - - instance. - instance corresponds to . - - - - Convert instance to instance. - - instance. - instance corresponds to . - - - - Convert instance to instance. - - instance. - instance corresponds to . - - - - Convert instance to instance. - - instance. - instance corresponds to . - - - - Convert instance to instance. - - instance. - instance corresponds to . - - - - Convert instance to instance. - - instance. - instance corresponds to . - - - - Convert instance to instance. - - instance. - instance corresponds to . - - - - Convert []instance to instance. - - [] instance. - instance corresponds to . - - - - Convert this instance to instance. - - instance. - instance corresponds to . - - - - Convert this instance to instance. - - instance. - instance corresponds to . - - - - Convert this instance to instance. - - instance. - instance corresponds to . - - - - Convert this instance to instance. - - instance. - instance corresponds to . - - - - Convert this instance to instance. - - instance. - instance corresponds to . - - - - Convert this instance to instance. - - instance. - instance corresponds to . - - - - Convert this instance to instance. - - instance. - instance corresponds to . - - - - Convert this instance to instance. - - instance. - instance corresponds to . - - - - Convert this instance to instance. - - instance. - instance corresponds to . - - - - Convert this instance to instance. - - instance. - instance corresponds to . - - - - Convert this instance to instance. - - instance. - instance corresponds to . - - - - Convert this instance to instance. - - instance. - instance corresponds to . - - - - Convert this instance to [] instance. - - instance. - [] instance corresponds to . - - - - Get whether this instance represents nil. - - If this instance represents nil object, then true. - - - - Get the value indicates whether this instance wraps raw binary (or string) or not. - - This instance wraps raw binary (or string) then true. - - - - Get the value indicates whether this instance wraps list (array) or not. - - This instance wraps list (array) then true. - - - - Get the value indicates whether this instance wraps list (array) or not. - - This instance wraps list (array) then true. - - - - Get the value indicates whether this instance wraps dictionary (map) or not. - - This instance wraps dictionary (map) then true. - - - - Get the value indicates whether this instance wraps dictionary (map) or not. - - This instance wraps dictionary (map) then true. - - - - Get underlying type of this instance. - - Underlying . - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Defines serialization helper APIs. - - - - - Unpacks the array to the specified array. - - The type of the array element. - The unpacker to unpack the underlying stream. - The serializer to deserialize array. - The array instance to be filled. - - is null. - Or is null. - Or is null. - - - is not in the array header. - Or failed to deserialization. - - - - - Unpacks the collection with the specified method as colletion of . - - The unpacker to unpack the underlying stream. - The non-generic collection instance to be added unpacked elements. - The delegate which contains the instance method of the . The parameter is unpacked object. - - is null. - Or is null. - Or is null. - - - is not in the array header. - Or failed to deserialization. - - - - - Unpacks the dictionary with the specified method as colletion of . - - The type of elements. - The unpacker to unpack the underlying stream. - The serializer to deserialize elements. - The generic collection instance to be added unpacked elements. - The delegate which contains the instance method of the . The parameter is unpacked object. - - is null. - Or is null. - Or is null. - Or is null. - - - is not in the array header. - Or failed to deserialization. - - - - - Unpacks the collection with the specified method as colletion of . - - The return type of Add method. - The unpacker to unpack the underlying stream. - The non-generic collection instance to be added unpacked elements. - The delegate which contains the instance method of the . The parameter is unpacked object. - - is null. - Or is null. - Or is null. - - - is not in the array header. - Or failed to deserialization. - - - - - Unpacks the dictionary with the specified method as colletion of . - - The type of elements. - The return type of Add method. - The unpacker to unpack the underlying stream. - The serializer to deserialize elements. - The generic collection instance to be added unpacked elements. - The delegate which contains the instance method of the . The parameter is unpacked object. - - is null. - Or is null. - Or is null. - Or is null. - - - is not in the array header. - Or failed to deserialization. - - - - - Unpacks the dictionary with the specified method as colletion of . - - The type of keys. - The type of values. - The unpacker to unpack the underlying stream. - The serializer to deserialize key elements. - The serializer to deserialize value elements. - The generic dictionary instance to be added unpacked elements. - - is null. - Or is null. - Or is null. - Or is null. - - - is not in the map header. - Or failed to deserialization. - - - - - Unpacks the dictionary with the specified method as colletion of . - - The unpacker to unpack the underlying stream. - The non-generic dictionary instance to be added unpacked elements. - - is null. - Or is null. - - - is not in the map header. - Or failed to deserialization. - - - - - Repository of known s. - - - - - Initializes a new empty instance of the class. - - - - - Initializes a new instance of the class which has copied serializers. - - The repository which will be copied its contents. - - is null. - - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Gets the registered from this repository. - - Type of the object to be marshaled/unmarshaled. - - . If no appropriate mashalers has benn registered, then null. - - - - - Register . - - The type of serialization target. - instance. - - true if success to register; otherwise, false. - - - is null. - - - - - Gets the system default repository. - - - The system default repository. - This value will not be null. - Note that the repository is frozen. - - - - - implementation which emits as map. - - The type of the target object. - - - - using instance fields to hold serializers for target members. - - - - - Initializes a new instance of the class. - - The host . - The sequence number to name new type. - Type of the serialization target. - Set to true when is debuggable. - - - - Gets the IL generator to implement overrides. - - - The IL generator to implement overrides. - This value will not be null. - - - - - Gets the IL generator to implement overrides. - - - The IL generator to implement overrides. - This value will not be null. - - - - - Gets the IL generator to implement overrides. - - - The IL generator to implement overrides. - - - - - Creates the serializer type built now and returns its new instance. - - Target type to be serialized/deserialized. - The to holds serializers. - - Newly built instance. - This value will not be null. - - - - - Creates the serializer type built now and returns its constructor. - - - Newly built type constructor. - This value will not be null. - - - - - Regisgter using target type to the current emitting session. - - Type to be serialized/deserialized. - - to emit serializer retrieval instructions. - The 1st argument should be to emit instructions. - The 2nd argument should be argument index of the serializer holder. - This value will not be null. - - - - - for a collection which has Add method. - - The type of element. - - - - Creates a delegate which returns collection count. - - The type of collection element. - The traits of the collection. - A delegate which returns collection count. - - - - Creates an which returns collection count. - - The type of collection element. - The traits of the collection. - The parameter which represents the target collection. - An which returns collection count. - - - - Creates an which represents using statement block. - - The type of variable. It must be assignable to . - The type of entire expression. This can be null. - The right of using declaration . - The body creator. The argument is left of using declaration. - An which represents using statement block. - - - - Creates an which represents index based for block. - - The count which limits iteration. - The body creator. The argument is i index variable of for loop. - An which represents index based for block. - - - - Creates an which represents foreach block. - - The collection to be enumerated. - The traits of the collection. - The body creator. The argument is Current property of the enumerator. - An which represents foreach block. - - - - Returns an appropriate of collection. - - The type of the collection. - An appropriate of collection. - - If the collection has .ctor(int capacity), then it will be returned. - Otherwise, default constructor will be returned. - Note that this method cannot determine whether a single parameter truely represents 'capacity' or not. - - - - - Creates an which unpack an item. - - The parameter which holds the unpacker. - The target UnpackFrom method of the serializer for item type. - The parameter which has UnpackFrom will be invoked. - The type of the item serializer. - An which unpack an item. - - - - Debugger type proxy for . - - The element type of the collection. - - - - Common validtion utility. - - - - - Determine specified category is printiable. - - Unicode cateory. - - If all charactors in specified category are printable then true. - Other wise false. - - - This method is conservative, but application cannot print the charactor - because appropriate font is not installed the machine. - - - - - This is intened to MsgPack for CLI internal use. Do not use this type from application directly. - Represents serialization context information for internal serialization logic. - - - - - Initializes a new instance of the class with copy of . - - - - - Gets the with this instance. - - Type of serialization/deserialization target. - - . - If there is exiting one, returns it. - Else the new instance will be created. - - - This method automatically register new instance via . - - - - - Gets the serializer for the specified . - - Type of the serialization target. - - . - If there is exiting one, returns it. - Else the new instance will be created. - - - is null. - - - Although is preferred, - this method can be used from non-generic type or methods. - - - - - Gets or sets the default instance. - - - The default instance. - - The setting value is null. - - - - Gets the current . - - - The current . - - - - - Gets or sets the . - - - The - - - For testing purposes. - - - - - Gets the compatibility options. - - - The which stores compatibility options. This value will not be null. - - - - - Gets or sets the to determine serialization strategy. - - - The to determine serialization strategy. - - - - - Gets or sets the to control code generation. - - - The . - - - - - Represents compatibility options of serialization runtime. - - - - - Gets or sets a value indicating whether should be started with 1 instead of 0. - - - true if should be started with 1 instead of 0; otherwise, false. - Default is false. - - - Using this value, you can switch between MessagePack for CLI and ProtoBuf.NET seamlessly. - - - - - Implements common features expression tree based serializer builders. - - The type of the serialization target. - - - - Represents options of packing. - - - - - Initializes a new instance of the class. - - - - - Get encoding for string. - - - for string. Default is UTF-8 encoding without BOM. - - - - - Defines helper method for items of tuple type. - - - - - Creates type list for nested tuples. - - The type list of tuple items, in order. - - The type list for nested tuples. - The order is from outer to inner. - - - - - for map format stream. - - The type of target type. - - - - Manages serializer generators. - - - - - Defines common features and interfaces for . - - - - - Get the appropriate for the current configuration. - - - The appropriate for the current configuration. - This value will not be null. - - - - - Get the appropriate for specified options. - - . - - The appropriate for specified options. - This value will not be null. - - - - - Get the dumpable with specified brandnew assembly builder. - - An assembly builder which will store all generated types. - - The appropriate to generate pre-cimplied serializers. - This value will not be null. - - - - - Creates new which corresponds to the specified . - - The type of the serialization target. - . - New which corresponds to the specified . - - - - Creates new which corresponds to the specified . - - The type of the serialization target. - . - New which corresponds to the specified . - - - - Save ILs as modules to specified directory. - - - The file path generated is too long on the current platform. - - - Current user does not have required permission to save file on the current directory. - - - The output device does not have enough free space. - Or the target file already exists and is locked by other thread. - Or the low level I/O error is occurred. - - - - - Create a new dumpable with specified brandnew assembly builder. - - An assembly builder which will store all generated types. - - The appropriate to generate pre-cimplied serializers. - This value will not be null. - - - - - Creates new which corresponds to the specified . - - The type of the serialization target. - . - - New which corresponds to the specified . - - - - - Get the singleton instance for can-collect mode. - - - - - Get the singleton instance for can-dump mode. - - - - - Get the singleton instance for fast mode. - - - - - for an array. - - The type of element. - - - - Represents result of direct conversion from the byte array. - - Type of value. - - - - Compare two instances are equal. - - instance. - - If is and its value is equal to this instance, then true. - Otherwise false. - - - - - Compare two instances are equal. - - instance. - - Whether value of is equal to this instance or not. - - - - - Get hash code of this instance. - - Hash code of this instance. - - - - Get string representation of this object. - - String representation of this object. - - - DO NOT use this value programmically. - The purpose of this method is informational, so format of this value subject to change. - - - - - - Compare two instances are equal. - - instance. - instance. - - Whether value of and are equal each other or not. - - - - - Compare two instances are not equal. - - instance. - instance. - - Whether value of and are not equal each other or are equal. - - - - - Get read bytes count from input byte array. - - - Read bytes count from input byte array. - If this value equals to old offset, then a value of property is not undifined. - - - - - Get retrieved value from the byte array. - - - Retrieved value from the byte array. - If equals to old offset, then a value of this property is not undefined. - - - - - Define options of serializer generation. - - - - - The generated method IL can be dumped to the current directory. - It is intended for the runtime, you cannot use this option. - - - - - The entire generated method can be collected by GC when it is no longer used. - - - - - Prefer performance. This options is default. - - - - - Marks a field or a property to be serialized with MessagePack Serializer and defines some required informations to serialize. - - - - - Initializes a new instance of the class. - - - The ID of the member. This value cannot be negative and must be unique in the type. - - - - - Gets the ID of the member. - - - The ID of the member. - - - - - Gets or sets the implication of the nil value. - - - The implication of the nil value. - Default value is . - - - - - Takes text dump for expression tree supporting block expression etc. - - - - - Defines binary related utilities. - - - - - Singleton empty []. - - - - - implementation which emits as array (default). - - The type of the target object. - - - - Encapselates and its serialized UTF-8 bytes. - - - - - Exception occured when inbound stream is invalid as serialized Message Pack stream. - - - - - Initializes a new instance of the class with the default error message. - - - - - Initializes a new instance of the class with a specified error message. - - The message that describes the error. - - - - Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - - The exception that is the cause of the current exception, or a null if no inner exception is specified. - - - - - Initializes a new instance of the class with serialized data. - - - The that holds the serialized object data about the exception being thrown. - - - The that contains contextual information about the source or destination. - - The parameter is null. - - - The class name is null or is zero (0). - - - - - Defines utility extension method for reflection API. - - - - - Determines whether specified can be assigned to source . - - The source type. - The type to compare with the source type. - - true if and represent the same type, - or if is in the inheritance hierarchy of , - or if is an interface that implements, - or if is a generic type parameter and represents one of the constraints of . - false if none of these conditions are true, or if is false. - - - - - Stream based unpacker. - - - - - Default buffer size. - - - This value is subject to change. - - - - - Actual unpackaging strategy. - - - - - If current position MAY be in tail of source then true, otherwise false. - - - This value should be refered via . - - - - - Queue of successors of data source. - - - - - Current data source. - - - - - Initializes a new instance with default sized on memory buffer. - - - - - Initializes a new instance using specified as source. - - Source . - If you want to dispose stream when this instance is disposed, then true. - is null. - - - - Clean up internal resources. - - - - - Starts unpacking of current subtree. - - - to unpack current subtree. - This will not be null. - - - - - Reads next Message Pack entry. - - - true, if position is sucessfully move to next entry; - false, if position reaches the tail of the Message Pack stream. - - - - - Read subtree item from current stream. - - - true, if position is sucessfully move to next entry; - false, if position reaches the tail of the Message Pack stream. - - - This method only be called from . - - - - - Determins this instance is in tail of all data sources. - This method deque successors when needed. - - If this instance is in tail of all data sources then true, otherwise false. - - - - Get last unpacked data. - - - Last unpacked data or null. - - - - - Gets a value indicating whether this instance is positioned to array header. - - - true if this instance is positioned to array header; otherwise, false. - - - - - Gets a value indicating whether this instance is positioned to map header. - - - true if this instance is positioned to map header; otherwise, false. - - - - - Gets the items count for current array or map. - - - The items count for current array or map. - - - Both of the and are false. - - - - - Gets the underlying stream to handle direct API. - - - - - Encapselates Stream and ownership information. - - - - - Indicates whether this unpacker should . - - - - - Underlying stream of this source. This value could be null. - - - - - Defines entry points for usage. - - - - - Creates new instance with . - - Target type. - - New instance to serialize/deserialize the object tree which the top is . - - - - - Creates new instance with specified . - - Target type. - - to store known/created serializers. - - - New instance to serialize/deserialize the object tree which the top is . - - - is null. - - - - - Creates new instance with . - - Target type. - - New instance to serialize/deserialize the object tree which the top is . - - - is null. - - - To avoid boxing and strongly typed API is prefered, use instead when possible. - - - - - Creates new instance with specified . - - Target type. - - to store known/created serializers. - - - New instance to serialize/deserialize the object tree which the top is . - - - is null. - Or, is null. - - - To avoid boxing and strongly typed API is prefered, use instead when possible. - - - - - Determines emitter strategy. - - - - - Uses in each case of the members (de)serialization. - It may cause more contentions but is available in WP7. - - - - - Caches serializers for the members (de)serialization. - It is default. - - - - - Uses expression tree to (de)serialization. - It may have more overhead but is available in WinRT. - - - - - Invokes in deserializaton manner. - - . - A deserialized value. - is not expected type. - - - - Defines interface for object which can be deserialzed from MessagePack object. - - - - - Restore object state from specified . - - . - is null. - Cannot restore state from the stream. - - - - Define bit operations which enforce big endian. - - - - diff --git a/lib/MsgPack.dll b/lib/MsgPack.dll deleted file mode 100644 index 5bb0eb6b1b3..00000000000 Binary files a/lib/MsgPack.dll and /dev/null differ diff --git a/lib/MsgPack.pdb b/lib/MsgPack.pdb deleted file mode 100644 index df725c7a1a8..00000000000 Binary files a/lib/MsgPack.pdb and /dev/null differ diff --git a/lib/MySql.Data.dll b/lib/MySql.Data.dll deleted file mode 100644 index d7dc2ab89a6..00000000000 Binary files a/lib/MySql.Data.dll and /dev/null differ diff --git a/lib/Npgsql.dll b/lib/Npgsql.dll deleted file mode 100644 index 53d9860aef1..00000000000 Binary files a/lib/Npgsql.dll and /dev/null differ diff --git a/lib/Npgsql.xml b/lib/Npgsql.xml deleted file mode 100644 index 332e24dd444..00000000000 --- a/lib/Npgsql.xml +++ /dev/null @@ -1,6502 +0,0 @@ - - - - Npgsql - - - - - Handles serialisation of .NET array or IEnumeration to pg format. - Arrays of arrays, enumerations of enumerations, arrays of enumerations etc. - are treated as multi-dimensional arrays (in much the same manner as an array of arrays - is used to emulate multi-dimensional arrays in languages that lack native support for them). - If such an enumeration of enumerations is "jagged" (as opposed to rectangular, cuboid, - hypercuboid, hyperhypercuboid, etc) then this class will "correctly" serialise it, but pg - will raise an error as it doesn't allow jagged arrays. - - - - - Create an ArrayNativeToBackendTypeConverter with the element converter passed - - The that would be used to serialise the element type. - - - - Serialise the enumeration or array. - - - - - Convert a System.Array to PG binary format. - Write the array header and prepare to write array data to the stream. - - - - - Append all array data to the binary stream. - - - - - Handles parsing of pg arrays into .NET arrays. - - - - - Takes a string representation of a pg 1-dimensional array - (or a 1-dimensional row within an n-dimensional array) - and allows enumeration of the string represenations of each items. - - - - - Takes a string representation of a pg n-dimensional array - and allows enumeration of the string represenations of the next - lower level of rows (which in turn can be taken as (n-1)-dimensional arrays. - - - - - Takes an ArrayList which may be an ArrayList of ArrayLists, an ArrayList of ArrayLists of ArrayLists - and so on and enumerates the items that aren't ArrayLists (the leaf nodes if we think of the ArrayList - passed as a tree). Simply uses the ArrayLists' own IEnumerators to get that of the next, - pushing them onto a stack until we hit something that isn't an ArrayList. - ArrayList to enumerate - IEnumerable - - - - - Create a new ArrayBackendToNativeTypeConverter - - for the element type. - - - - Creates an array from pg text representation. - - - - - Creates an array list from pg represenation of an array. - Multidimensional arrays are treated as ArrayLists of ArrayLists - - - - - Creates an n-dimensional array from an ArrayList of ArrayLists or - a 1-dimensional array from something else. - - to convert - Type of the elements in the list - produced. - - - - Creates an n-dimensional System.Array from PG binary representation. - This function reads the array header and sets up an n-dimensional System.Array object to hold its data. - PopulateArrayFromBinaryArray() is then called to carry out array population. - - - - - Recursively populates an array from PB binary data representation. - - - - - Takes an array of ints and treats them like the limits of a set of counters. - Retains a matching set of ints that is set to all zeros on the first ++ - On a ++ it increments the "right-most" int. If that int reaches it's - limit it is set to zero and the one before it is incremented, and so on. - - Making this a more general purpose class is pretty straight-forward, but we'll just put what we need here. - - - - - Implements a bit string; a collection of zero or more bits which can each be 1 or 0. - BitString's behave as a list of bools, though like most strings and unlike most collections the position - tends to be of as much significance as the value. - BitStrings are often used as masks, and are commonly cast to and from other values. - - - - - Represents the empty string. - - - - - Create a BitString from an enumeration of boolean values. The BitString will contain - those booleans in the order they came in. - - The boolean values. - - - - Creates a BitString filled with a given number of true or false values. - - The value to fill the string with. - The number of bits to fill. - - - - Creats a bitstring from a string. - The string to copy from. - - - - - - Creates a single-bit element from a boolean value. - - The bool value which determines whether - the bit is 1 or 0. - - - - Creates a bitstring from an unsigned integer value. The string will be the shortest required to - contain the integer (e.g. 1 bit for 0 or 1, 2 for 2 or 3, 3 for 4-7, and so on). - - The integer. - This method is not CLS Compliant, and may not be available to some languages. - - - - Creates a bitstring from an integer value. The string will be the shortest required to - contain the integer (e.g. 1 bit for 0 or 1, 2 for 2 or 3, 3 for 4-7, and so on). - - The integer. - - - - Finds the first instance of a given value - - The value - whether true or false - to search for. - The index of the value found, or -1 if none are present. - - - - True if there is at least one bit with the value looked for. - - The value - true or false - to detect. - True if at least one bit was the same as item, false otherwise. - - - - Copies the bitstring to an array of bools. - - The boolean array to copy to. - The index in the array to start copying from. - - - - Returns an enumerator that enumerates through the string. - - The enumerator. - - - - Creats a bitstring by concatenating another onto this one. - - The string to append to this one. - The combined strings. - - - - Returns a substring of this string. - - The position to start from, must be between 0 and the length of the string. - The length of the string to return, must be greater than zero, and may not be - so large that the start + length exceeds the bounds of this instance. - The Bitstring identified - - - - Returns a substring of this string. - - The position to start from, must be between 0 and the length of the string, - the rest of the string is returned. - The Bitstring identified - - - - A logical and between this string and another. The two strings must be the same length. - - Another BitString to AND with this one. - A bitstring with 1 where both BitStrings had 1 and 0 otherwise. - - - - A logical or between this string and another. The two strings must be the same length. - - Another BitString to OR with this one. - A bitstring with 1 where either BitString had 1 and 0 otherwise. - - - - A logical xor between this string and another. The two strings must be the same length. - - Another BitString to XOR with this one. - A bitstring with 1 where one BitStrings and the other had 0, - and 0 where they both had 1 or both had 0. - - - - A bitstring that is the logical inverse of this one. - - A bitstring of the same length as this with 1 where this has 0 and vice-versa. - - - - Shifts the string operand bits to the left, filling with zeros to produce a - string of the same length. - - The number of bits to shift to the left. - A left-shifted bitstring. - The behaviour of LShift is closer to what one would expect from dealing - with PostgreSQL bit-strings than in using the same operations on integers in .NET - In particular, negative operands result in a right-shift, and operands greater than - the length of the string will shift it entirely, resulting in a zero-filled string. - - - - - Shifts the string operand bits to the right, filling with zeros to produce a - string of the same length. - - The number of bits to shift to the right. - A right-shifted bitstring. - The behaviour of RShift is closer to what one would expect from dealing - with PostgreSQL bit-strings than in using the same operations on integers in .NET - In particular, negative operands result in a left-shift, and operands greater than - the length of the string will shift it entirely, resulting in a zero-filled string. It also performs - a logical shift, rather than an arithmetic shift, so it always sets the vacated bit positions to zero - (like PostgreSQL and like .NET for unsigned integers but not for signed integers). - - - - - Returns true if the this string is identical to the argument passed. - - - - - Compares two strings. Strings are compared as strings, so while 0 being less than 1 will - mean a comparison between two strings of the same size is the same as treating them as numbers, - in the case of two strings of differing lengths the comparison starts at the right-most (most significant) - bit, and if all bits of the shorter string are exhausted without finding a comparison, then the larger - string is deemed to be greater than the shorter (0010 is greater than 0001 but less than 00100). - - Another string to compare with this one. - A value if the two strings are identical, an integer less - than zero if this is less than the argument, and an integer greater - than zero otherwise. - - - - Compares the string with another object. - - The object to compare with. - If the object is null then this string is considered greater. If the object is another BitString - then they are compared as in the explicit comparison for BitStrings - in any other case a is thrown. - - - - Compares this BitString with an object for equality. - - - - - Returns a code for use in hashing operations. - - - - - Returns a string representation of the BitString. - - - A string which can contain a letter and optionally a number which sets a minimum size for the string - returned. In each case using the lower-case form of the letter will result in a lower-case string - being returned. - - - B - A string of 1s and 0s. - - - X - An hexadecimal string (will result in an error unless the string's length is divisible by 4). - - - G - A string of 1s and 0s in single-quotes preceded by 'B' (Postgres bit string literal syntax). - - Y - An hexadecimal string in single-quotes preceded by 'X' (Postgres bit literal syntax, will result in an error unless the string's length is divisible by 4. - - C - The format produced by format-string "Y" if legal, otherwise that produced by format-string "G". - E - The most compact safe representation for Postgres. If single bit will be either a 0 or a 1. Otherwise if it - can be that produce by format string "Y" it will, otherwise if there are less than 9bits in length it will be that - produced by format-string "G". For longer strings that cannot be represented in hexadecimal it will be a string - representing the first part of the string in format "Y" followed by the PostgreSQL concatenation operator, followed - by the final bits in the format "G". E.g. "X'13DCE'||B'110'" - If format is empty or null, it is treated as if "B" had been passed (the default repreesentation, and that - generally used by PostgreSQL for display). - - The formatted string. - - - - Returns a string representation for the Bitstring - - A string containing '0' and '1' characters. - - - - Returns the same string as . formatProvider is ignored. - - - - - Parses a string to produce a BitString. Most formats that can be produced by - can be accepted, but hexadecimal - can be interpreted with the preceding X' to mark the following characters as - being hexadecimal rather than binary. - - - - - Performs a logical AND on the two operands. - - - - - Performs a logcial OR on the two operands. - - - - - Perofrms a logical EXCLUSIVE-OR on the two operands - - - - - Performs a logical NOT on the operand. - - - - - Concatenates the operands. - - - - - Left-shifts the string BitString. - - - - - Right-shifts the string BitString. - - - - - Compares the two operands. - - - - - Compares the two operands. - - - - - Compares the two operands. - - - - - Compares the two operands. - - - - - Compares the two operands. - - - - - Compares the two operands. - - - - - Interprets the bitstring as a series of bits in an encoded character string, - encoded according to the Encoding passed, and returns that string. - The bitstring must contain a whole number of octets(bytes) and also be - valid according to the Encoding passed. - - The to use in producing the string. - The string that was encoded in the BitString. - - - - Interprets the bitstring as a series of octets (bytes) and returns those octets. Fails - if the Bitstring does not contain a whole number of octets (its length is not evenly - divisible by 8). - - - - - Interprets the bitstring as a series of signed octets (bytes) and returns those octets. Fails - if the Bitstring does not contain a whole number of octets (its length is not evenly - divisible by 8). - This method is not CLS-Compliant and may not be available to languages that cannot - handle signed bytes. - - - - - Interprets the bitstring as a series of unsigned 16-bit integers and returns those integers. - Fails if the Bitstring's length is not evenly divisible by 16. - This method is not CLS-Compliant and may not be available to languages that cannot - handle unsigned integers. - - - - - Interprets the bitstring as a series of 16-bit integers and returns those integers. - Fails if the Bitstring's length is not evenly divisible by 16. - - - - - Interprets the bitstring as a series of unsigned 32-bit integers and returns those integers. - Fails if the Bitstring's length is not evenly divisible by 32. - This method is not CLS-Compliant and may not be available to languages that cannot - handle unsigned integers. - - - - - Interprets the bitstring as a series of signed 32-bit integers and returns those integers. - Fails if the Bitstring's length is not evenly divisible by 32. - - - - - Interprets the bitstring as a series of unsigned 64-bit integers and returns those integers. - Fails if the Bitstring's length is not evenly divisible by 64. - This method is not CLS-Compliant and may not be available to languages that cannot - handle unsigned integers. - - - - - Interprets the bitstring as a series of signed 64-bit integers and returns those integers. - Fails if the Bitstring's length is not evenly divisible by 64. - - - - - The length of the string. - - - - - Retrieves the value of the bit at the given index. - - - - - Represents the PostgreSQL interval datatype. - PostgreSQL differs from .NET in how it's interval type doesn't assume 24 hours in a day - (to deal with 23- and 25-hour days caused by daylight savings adjustments) and has a concept - of months that doesn't exist in .NET's class. (Neither datatype - has any concessions for leap-seconds). - For most uses just casting to and from TimeSpan will work correctly — in particular, - the results of subtracting one or the PostgreSQL date, time and - timestamp types from another should be the same whether you do so in .NET or PostgreSQL — - but if the handling of days and months in PostgreSQL is important to your application then you - should use this class instead of . - If you don't know whether these differences are important to your application, they - probably arent! Just use and do not use this class directly ☺ - To avoid forcing unnecessary provider-specific concerns on users who need not be concerned - with them a call to on a field containing an - value will return a rather than an - . If you need the extra functionality of - then use . - - - - - - - - - - Represents the number of ticks (100ns periods) in one microsecond. This field is constant. - - - - - Represents the number of ticks (100ns periods) in one millisecond. This field is constant. - - - - - Represents the number of ticks (100ns periods) in one second. This field is constant. - - - - - Represents the number of ticks (100ns periods) in one minute. This field is constant. - - - - - Represents the number of ticks (100ns periods) in one hour. This field is constant. - - - - - Represents the number of ticks (100ns periods) in one day. This field is constant. - - - - - Represents the number of hours in one day (assuming no daylight savings adjustments). This field is constant. - - - - - Represents the number of days assumed in one month if month justification or unjustifcation is performed. - This is set to 30 for consistency with PostgreSQL. Note that this is means that month adjustments cause - a year to be taken as 30 × 12 = 360 rather than 356/366 days. - - - - - Represents the number of ticks (100ns periods) in one day, assuming 30 days per month. - - - - - Represents the number of months in a year. This field is constant. - - - - - Represents the maximum . This field is read-only. - - - - - Represents the minimum . This field is read-only. - - - - - Represents the zero . This field is read-only. - - - - - Initializes a new to the specified number of ticks. - - A time period expressed in 100ns units. - - - - Initializes a new to hold the same time as a - - A time period expressed in a - - - - Initializes a new to the specified number of months, days - & ticks. - - Number of months. - Number of days. - Number of 100ns units. - - - - Initializes a new to the specified number of - days, hours, minutes & seconds. - - Number of days. - Number of hours. - Number of minutes. - Number of seconds. - - - - Initializes a new to the specified number of - days, hours, minutes, seconds & milliseconds. - - Number of days. - Number of hours. - Number of minutes. - Number of seconds. - Number of milliseconds. - - - - Initializes a new to the specified number of - months, days, hours, minutes, seconds & milliseconds. - - Number of months. - Number of days. - Number of hours. - Number of minutes. - Number of seconds. - Number of milliseconds. - - - - Initializes a new to the specified number of - years, months, days, hours, minutes, seconds & milliseconds. - Years are calculated exactly equivalent to 12 months. - - Number of years. - Number of months. - Number of days. - Number of hours. - Number of minutes. - Number of seconds. - Number of milliseconds. - - - - Creates an from a number of ticks. - - The number of ticks (100ns units) in the interval. - A d with the given number of ticks. - - - - Creates an from a number of microseconds. - - The number of microseconds in the interval. - A d with the given number of microseconds. - - - - Creates an from a number of milliseconds. - - The number of milliseconds in the interval. - A d with the given number of milliseconds. - - - - Creates an from a number of seconds. - - The number of seconds in the interval. - A d with the given number of seconds. - - - - Creates an from a number of minutes. - - The number of minutes in the interval. - A d with the given number of minutes. - - - - Creates an from a number of hours. - - The number of hours in the interval. - A d with the given number of hours. - - - - Creates an from a number of days. - - The number of days in the interval. - A d with the given number of days. - - - - Creates an from a number of months. - - The number of months in the interval. - A d with the given number of months. - - - - Adds another interval to this instance and returns the result. - - An to add to this instance. - An whose values are the sums of the two instances. - - - - Subtracts another interval from this instance and returns the result. - - An to subtract from this instance. - An whose values are the differences of the two instances. - - - - Returns an whose value is the negated value of this instance. - - An whose value is the negated value of this instance. - - - - This absolute value of this instance. In the case of some, but not all, components being negative, - the rules used for justification are used to determine if the instance is positive or negative. - - An whose value is the absolute value of this instance. - - - - Equivalent to PostgreSQL's justify_days function. - - An based on this one, but with any hours outside of the range [-23, 23] - converted into days. - - - - Opposite to PostgreSQL's justify_days function. - - An based on this one, but with any days converted to multiples of ±24hours. - - - - Equivalent to PostgreSQL's justify_months function. - - An based on this one, but with any days outside of the range [-30, 30] - converted into months. - - - - Opposite to PostgreSQL's justify_months function. - - An based on this one, but with any months converted to multiples of ±30days. - - - - Equivalent to PostgreSQL's justify_interval function. - - An based on this one, - but with any months converted to multiples of ±30days - and then with any days converted to multiples of ±24hours - - - - Opposite to PostgreSQL's justify_interval function. - - An based on this one, but with any months converted to multiples of ±30days and then any days converted to multiples of ±24hours; - - - - Produces a canonical NpgslInterval with 0 months and hours in the range of [-23, 23]. - - - While the fact that for many purposes, two different instances could be considered - equivalent (e.g. one with 2days, 3hours and one with 1day 27hours) there are different possible canonical forms. - - E.g. we could move all excess hours into days and all excess days into months and have the most readable form, - or we could move everything into the ticks and have the form that allows for the easiest arithmetic) the form - chosen has two important properties that make it the best choice. - First, it is closest two how - objects are most often represented. Second, it is compatible with results of many - PostgreSQL functions, particularly with age() and the results of subtracting one date, time or timestamp from - another. - - Note that the results of casting a to is - canonicalised. - - - An based on this one, but with months converted to multiples of ±30days and with any hours outside of the range [-23, 23] - converted into days. - - - - Implicit cast of a to an - - A - An eqivalent, canonical, . - - - - Implicit cast of an to a . - - A . - An equivalent . - - - - Returns true if another is exactly the same as this instance. - - An for comparison. - true if the two instances are exactly the same, - false otherwise. - - - - Returns true if another object is an , that is exactly the same as - this instance - - An for comparison. - true if the argument is an and is exactly the same - as this one, false otherwise. - - - - Compares two instances. - - The first . - The second . - 0 if the two are equal or equivalent. A value greater than zero if x is greater than y, - a value less than zero if x is less than y. - - - - A hash code suitable for uses with hashing algorithms. - - An signed integer. - - - - Compares this instance with another/ - - An to compare this with. - 0 if the instances are equal or equivalent. A value less than zero if - this instance is less than the argument. A value greater than zero if this instance - is greater than the instance. - - - - Compares this instance with another/ - - An object to compare this with. - 0 if the argument is an and the instances are equal or equivalent. - A value less than zero if the argument is an and - this instance is less than the argument. - A value greater than zero if the argument is an and this instance - is greater than the instance. - A value greater than zero if the argument is null. - The argument is not an . - - - - Parses a and returns a instance. - Designed to use the formats generally returned by PostgreSQL. - - The to parse. - An represented by the argument. - The string was null. - A value obtained from parsing the string exceeded the values allowed for the relevant component. - The string was not in a format that could be parsed to produce an . - - - - Attempt to parse a to produce an . - - The to parse. - (out) The produced, or if the parsing failed. - true if the parsing succeeded, false otherwise. - - - - Create a representation of the instance. - The format returned is of the form: - [M mon[s]] [d day[s]] [HH:mm:ss[.f[f[f[f[f[f[f[f[f]]]]]]]]]] - A zero is represented as 00:00:00 - - Ticks are 100ns, Postgress resolution is only to 1µs at most. Hence we lose 1 or more decimal - precision in storing values in the database. Despite this, this method will output that extra - digit of precision. It's forward-compatible with any future increases in resolution up to 100ns, - and also makes this ToString() more applicable to any other use-case. - - - The representation. - - - - Adds two together. - - The first to add. - The second to add. - An whose values are the sum of the arguments. - - - - Subtracts one from another. - - The to subtract the other from. - The to subtract from the other. - An whose values are the difference of the arguments - - - - Returns true if two are exactly the same. - - The first to compare. - The second to compare. - true if the two arguments are exactly the same, false otherwise. - - - - Returns false if two are exactly the same. - - The first to compare. - The second to compare. - false if the two arguments are exactly the same, true otherwise. - - - - Compares two instances to see if the first is less than the second - - The first to compare. - The second to compare. - true if the first is less than second, false otherwise. - - - - Compares two instances to see if the first is less than or equivalent to the second - - The first to compare. - The second to compare. - true if the first is less than or equivalent to second, false otherwise. - - - - Compares two instances to see if the first is greater than the second - - The first to compare. - The second to compare. - true if the first is greater than second, false otherwise. - - - - Compares two instances to see if the first is greater than or equivalent the second - - The first to compare. - The second to compare. - true if the first is greater than or equivalent to the second, false otherwise. - - - - Returns the instance. - - An . - The argument. - - - - Negates an instance. - - An . - The negation of the argument. - - - - The total number of ticks(100ns units) contained. This is the resolution of the - type. This ignores the number of days and - months held. If you want them included use first. - The resolution of the PostgreSQL - interval type is by default 1µs = 1,000 ns. It may be smaller as follows: - - - interval(0) - resolution of 1s (1 second) - - - interval(1) - resolution of 100ms = 0.1s (100 milliseconds) - - - interval(2) - resolution of 10ms = 0.01s (10 milliseconds) - - - interval(3) - resolution of 1ms = 0.001s (1 millisecond) - - - interval(4) - resolution of 100µs = 0.0001s (100 microseconds) - - - interval(5) - resolution of 10µs = 0.00001s (10 microseconds) - - - interval(6) or interval - resolution of 1µs = 0.000001s (1 microsecond) - - - As such, if the 100-nanosecond resolution is significant to an application, a PostgreSQL interval will - not suffice for those purposes. - In more frequent cases though, the resolution of the interval suffices. - will always suffice to handle the resolution of any interval value, and upon - writing to the database, will be rounded to the resolution used. - - The number of ticks in the instance. - - - - - Gets the number of whole microseconds held in the instance. - An in the range [-999999, 999999]. - - - - - Gets the number of whole milliseconds held in the instance. - An in the range [-999, 999]. - - - - - Gets the number of whole seconds held in the instance. - An in the range [-59, 59]. - - - - - Gets the number of whole minutes held in the instance. - An in the range [-59, 59]. - - - - - Gets the number of whole hours held in the instance. - Note that this can be less than -23 or greater than 23 unless - has been used to produce this instance. - - - - - Gets the number of days held in the instance. - Note that this does not pay attention to a time component with -24 or less hours or - 24 or more hours, unless has been called to produce this instance. - - - - - Gets the number of months held in the instance. - Note that this does not pay attention to a day component with -30 or less days or - 30 or more days, unless has been called to produce this instance. - - - - - Returns a representing the time component of the instance. - Note that this may have a value beyond the range ±23:59:59.9999999 unless - has been called to produce this instance. - - - - - The total number of ticks (100ns units) in the instance, assuming 24 hours in each day and - 30 days in a month. - - - - - The total number of microseconds in the instance, assuming 24 hours in each day and - 30 days in a month. - - - - - The total number of milliseconds in the instance, assuming 24 hours in each day and - 30 days in a month. - - - - - The total number of seconds in the instance, assuming 24 hours in each day and - 30 days in a month. - - - - - The total number of minutes in the instance, assuming 24 hours in each day and - 30 days in a month. - - - - - The total number of hours in the instance, assuming 24 hours in each day and - 30 days in a month. - - - - - The total number of days in the instance, assuming 24 hours in each day and - 30 days in a month. - - - - - The total number of months in the instance, assuming 24 hours in each day and - 30 days in a month. - - - - - Normalise this time; if it is 24:00:00, convert it to 00:00:00 - - This time, normalised - - - - The total number of ticks(100ns units) contained. This is the resolution of the - type. - The resolution of the PostgreSQL - interval type is by default 1µs = 1,000 ns. It may be smaller as follows: - - - time(0) - resolution of 1s (1 second) - - - time(1) - resolution of 100ms = 0.1s (100 milliseconds) - - - time(2) - resolution of 10ms = 0.01s (10 milliseconds) - - - time(3) - resolution of 1ms = 0.001s (1 millisecond) - - - time(4) - resolution of 100µs = 0.0001s (100 microseconds) - - - time(5) - resolution of 10µs = 0.00001s (10 microseconds) - - - time(6) or interval - resolution of 1µs = 0.000001s (1 microsecond) - - - As such, if the 100-nanosecond resolution is significant to an application, a PostgreSQL time will - not suffice for those purposes. - In more frequent cases though, the resolution of time suffices. - will always suffice to handle the resolution of any time value, and upon - writing to the database, will be rounded to the resolution used. - - The number of ticks in the instance. - - - - - Gets the number of whole microseconds held in the instance. - An integer in the range [0, 999999]. - - - - - Gets the number of whole milliseconds held in the instance. - An integer in the range [0, 999]. - - - - - Gets the number of whole seconds held in the instance. - An interger in the range [0, 59]. - - - - - Gets the number of whole minutes held in the instance. - An integer in the range [0, 59]. - - - - - Gets the number of whole hours held in the instance. - Note that the time 24:00:00 can be stored for roundtrip compatibility. Any calculations on such a - value will normalised it to 00:00:00. - - - - - Normalise this time; if it is 24:00:00, convert it to 00:00:00 - - This time, normalised - - - - Compares this with another . As per postgres' rules, - first the times are compared as if they were both in the same timezone. If they are equal then - then timezones are compared (+01:00 being "smaller" than -01:00). - - the to compare with. - An integer which is 0 if they are equal, < 0 if this is the smaller and > 0 if this is the larger. - - - - Gets the number of whole microseconds held in the instance. - An integer in the range [0, 999999]. - - - - - Gets the number of whole milliseconds held in the instance. - An integer in the range [0, 999]. - - - - - Gets the number of whole seconds held in the instance. - An interger in the range [0, 59]. - - - - - Gets the number of whole minutes held in the instance. - An integer in the range [0, 59]. - - - - - Gets the number of whole hours held in the instance. - Note that the time 24:00:00 can be stored for roundtrip compatibility. Any calculations on such a - value will normalised it to 00:00:00. - - - - - This class implements the Fastpath api. - - - - - This maps the functions names to their id's (possible unique just - to a connection). - - - - - Our connection. - - - - - The network stream. - - - - - Initialises the fastpath system. - - BaseConnection to attach to. - The network stream to the backend. - - - - Initialises the fastpath system. - - BaseConnection to attach to. - - - - Send a function call to the PostgreSQL backend. - - Function id. - True if the result is an integer, false for other results. - FastpathArguments to pass to fastpath. - null if no data, Integer if an integer result, or byte[] otherwise. - - - - Send a function call to the PostgreSQL backend by name. - Note: the mapping for the procedure name to function id needs to exist, - usually to an earlier call to addfunction(). - This is the prefered method to call, as function id's can/may change - between versions of the backend. - For an example of how this works, refer to NpgsqlTypes.LargeObject - - Function name. - True if the result is an integer, false for other results. - FastpathArguments to pass to fastpath. - null if no data, Integer if an integer result, or byte[] otherwise. - - - - This convenience method assumes that the return value is an Integer. - - Function name. - Function arguments. - Integer result. - - - - This convenience method assumes that the return value is an Integer. - - Function name. - Function arguments. - Array containing result - - - - This adds a function to our lookup table. - User code should use the addFunctions method, which is based upon a - query, rather than hard coding the oid. The oid for a function is not - guaranteed to remain static, even on different servers of the same - version. - - Function name. - Function id. - - - - This takes a ResultSet containing two columns. Column 1 contains the - function name, Column 2 the oid. - It reads the entire ResultSet, loading the values into the function - table. - REMEMBER to close() the resultset after calling this!! - Implementation note about function name lookups: - PostgreSQL stores the function id's and their corresponding names in - the pg_proc table. To speed things up locally, instead of querying each - function from that table when required, a Dictionary is used. Also, only - the function's required are entered into this table, keeping connection - times as fast as possible. - The org.postgresql.largeobject.LargeObject class performs a query upon it's startup, - and passes the returned ResultSet to the addFunctions() method here. - Once this has been done, the LargeObject api refers to the functions by - name. - Dont think that manually converting them to the oid's will work. Ok, - they will for now, but they can change during development (there was some - discussion about this for V7.0), so this is implemented to prevent any - unwarranted headaches in the future. - - ResultSet - - - - This returns the function id associated by its name - If addFunction() or addFunctions() have not been called for this name, - then an NpgsqlException is thrown. - - Function name to lookup. - Function ID for fastpath call. - - - - Fast Path Arg. - - - - - Type of argument, true=integer, false=byte[]. - - - - - Integer value if type=true. - - - - - Byte value if type=false; - - - - - Constructs an argument that consists of an integer value. - - Int value to set. - - - - Constructs an argument that consists of an array of bytes. - - Array to store. - - - - Constructs an argument that consists of part of a byte array. - - Source array. - offset within array. - length of data to include. - - - - Constructs an argument that consists of a String. - - String to store. - - - - This sends this argument down the network stream. - The stream sent consists of the length.int4 then the contents. - Note: This is called from Fastpath, and cannot be called from - client code. - - - - - - Report send size. - - Send size. - - - - Large Object. - - - - - Indicates a seek from the begining of a file. - - - - - Indicates a seek from the current position. - - - - - Indicates a seek from the end of a file. - - - - - This opens a large object. - If the object does not exist, then an NpgsqlException is thrown. - - FastPath API for the connection to use. - OID of the Large Object to open. - Mode of opening the large object - - - - OID getter. - - The OID of this LargeObject. - - - - This method closes the object. You must not call methods in this - object after this is called. - - - - - Reads some data from the object, and return as a byte[] array. - - Number of bytes to read. - Array containing data read. - - - - Reads some data from the object into an existing array. - - Destination array. - Offset within array. - Maximum number of bytes to read. - The number of bytes actually read. - - - - Writes an array to the object. - - Array to write. - - - - Writes some data from an array to the object. - - Destination array. - Offset within array. - Number of bytes to write. - - - - Sets the current position within the object. - This is similar to the fseek() call in the standard C library. It - allows you to have random access to the large object. - - Position within object. - Either SEEK_SET, SEEK_CUR or SEEK_END. - - - - Sets the current position within the object. - This is similar to the fseek() call in the standard C library. It - allows you to have random access to the large object. - - Position within object from begining. - - - - Report the current position within the object. - - The current position within the object. - - - - This method is inefficient, as the only way to find out the size of - the object is to seek to the end, record the current position, then - return to the original position. - A better method will be found in the future. - - The size of the large object. - - - - OID. - - - - - Large Object Manager. - - - - - This mode indicates we want to write to an object - - - - - This mode indicates we want to read an object - - - - - This mode is the default. It indicates we want read and write access to - - - - - Constructs the LargeObject API. - There should only be one LargeObjectManager per Connection. The - org.postgresql.Connection class keeps track of the various extension API's - and it's advised you use those to gain access, and not going direct. - - - - - - This opens an existing large object, based on its OID. This method - assumes that READ and WRITE access is required (the default). - - OID of large object. - LargeObject instance providing access to the object - - - - This opens an existing large object, based on its OID. - - OID of large object. - Mode of open. - - - - - This creates a large object, returning its OID. - - OID of new object. - - - - This creates a large object, returning its OID. - - Bitmask describing different attributes of the new object. - OID of new object. - - - - This deletes a large object. - - OID describing object to delete. - - - - This deletes a large object. - It is identical to the Delete() method, and is supplied as the C API uses unlink. - - OID describing object to delete. - - - - Options that control certain aspects of native to backend conversions that depend - on backend version and status. - - - - - Clone the current object. - - A new NativeToBackendTypeConverterOptions object. - - - - Clone the current object with a different OID/Name mapping. - - OID/Name mapping object to use in the new instance. - A new NativeToBackendTypeConverterOptions object. - - - - Provide event handlers to convert all native supported basic data types from their backend - text representation to a .NET object. - - - - - Convert UTF8 encoded text a string. - - - - - Byte array from bytea encoded as ASCII text, escaped or hex format. - - - - - Byte array from bytea encoded as binary. - - - - - Convert a postgresql boolean to a System.Boolean. - - - - - Convert a postgresql boolean to a System.Boolean. - - - - - Convert a postgresql bit to a System.Boolean. - - - - - Convert a postgresql datetime to a System.DateTime. - - - - - Convert a postgresql date to a System.DateTime. - - - - - Convert a postgresql time to a System.DateTime. - - - - - Convert a postgresql money to a System.Decimal. - - - - - Convert a postgresql float4 or float8 to a System.Float or System.Double respectively. - - - - - Provide event handlers to convert extended native supported data types from their backend - text representation to a .NET object. - - - - - Convert a postgresql point to a System.NpgsqlPoint. - - - - - Convert a postgresql point to a System.RectangleF. - - - - - LDeg. - - - - - Path. - - - - - Polygon. - - - - - Circle. - - - - - Inet. - - - - - MAC Address. - - - - - interval - - - - - Provide event handlers to convert the basic native supported data types from - native form to backend representation. - - - - - Convert a string to UTF8 encoded text, escaped and quoted as required. - - - - - Convert a string to UTF8 encoded text. - - - - - Binary data, escaped and quoted as required. - - - - - Binary data with possible older style octal escapes, quoted. - - - - - Binary data in the new hex format (>= 9.0), quoted. - - - - - Binary data, raw. - - - - - Convert to a postgresql boolean text format. - - - - - Convert to a postgresql boolean binary format. - - - - - Convert to a postgresql binary int2. - - - - - Convert to a postgresql binary int4. - - - - - Convert to a postgresql binary int8. - - - - - Convert to a postgresql bit. - - - - - Convert to a postgresql timestamp. - - - - - Convert to a postgresql date. - - - - - Convert to a postgresql time. - - - - - Convert to a postgres money. - - - - - Convert to a postgres double with maximum precision. - - - - - Convert a System.Float to a postgres float4. - - - - - Convert a System.Double to a postgres float8. - - - - - Provide event handlers to convert extended native supported data types from - native form to backend representation. - - - - - Point. - - - - - Box. - - - - - LSeg. - - - - - Open path. - - - - - Polygon. - - - - - Convert to a postgres MAC Address. - - - - - Circle. - - - - - Convert to a postgres inet. - - - - - Convert to a postgres interval - - - - - Delegate called to convert the given backend text data to its native representation. - - - - - Delegate called to convert the given backend binary data to its native representation. - - - - - Represents a backend data type. - This class can be called upon to convert a backend field representation to a native object. - - - - - Construct a new NpgsqlTypeInfo with the given attributes and conversion handlers. - - Type OID provided by the backend server. - Type name provided by the backend server. - NpgsqlDbType - DbType - System type to convert fields of this type to. - Data conversion handler for text encoding. - Data conversion handler for binary data. - - - - Perform a data conversion from a backend representation to - a native object. - - Data sent from the backend. - fieldValueSize - Type modifier field sent from the backend. - - - - Perform a data conversion from a backend representation to - a native object. - - Data sent from the backend. - TypeSize - Type modifier field sent from the backend. - - - - Type OID provided by the backend server. - - - - - Type name provided by the backend server. - - - - - NpgsqlDbType. - - - - - NpgsqlDbType. - - - - - Provider type to convert fields of this type to. - - - - - System type to convert fields of this type to. - - - - - Reports whether a backend binary to native decoder is available for this type. - - - - - Delegate called to convert the given native data to its backand representation. - - - - - Represents a backend data type. - This class can be called upon to convert a native object to its backend field representation, - - - - - Returns an NpgsqlNativeTypeInfo for an array where the elements are of the type - described by the NpgsqlNativeTypeInfo supplied. - - - - - Construct a new NpgsqlTypeInfo with the given attributes and conversion handlers. - - Type name provided by the backend server. - DbType - Quote - NpgsqlDbType - Data conversion handler for text backend encoding. - Data conversion handler for binary backend encoding (for extended queries). - - - - Perform a data conversion from a native object to - a backend representation. - DBNull and null values are handled differently depending if a plain query is used - When - - Native .NET object to be converted. - Specifies that the value should be formatted for the extended query syntax. - Options to guide serialization. If null, a default options set is used. - Specifies that the value should be formatted as an extended query array element. - - - - Type name provided by the backend server. - - - - - NpgsqlDbType. - - - - - DbType. - - - - - Apply quoting. - - - - - Use parameter size information. - - - - - Reports whether a native to backend binary encoder is available for this type. - - - - - Provide mapping between type OID, type name, and a NpgsqlBackendTypeInfo object that represents it. - - - - - Construct an empty mapping. - - - - - Copy constuctor. - - - - - Add the given NpgsqlBackendTypeInfo to this mapping. - - - - - Add a new NpgsqlBackendTypeInfo with the given attributes and conversion handlers to this mapping. - - Type OID provided by the backend server. - Type name provided by the backend server. - NpgsqlDbType - DbType - System type to convert fields of this type to. - Data conversion handler for text encoding. - Data conversion handler for binary data. - - - - Make a shallow copy of this type mapping. - - - - - Determine if a NpgsqlBackendTypeInfo with the given backend type OID exists in this mapping. - - - - - Determine if a NpgsqlBackendTypeInfo with the given backend type name exists in this mapping. - - - - - Get the number of type infos held. - - - - - Retrieve the NpgsqlBackendTypeInfo with the given backend type OID, or null if none found. - - - - - Retrieve the NpgsqlBackendTypeInfo with the given backend type name, or null if none found. - - - - - Provide mapping between type Type, NpgsqlDbType and a NpgsqlNativeTypeInfo object that represents it. - - - - - Add the given NpgsqlNativeTypeInfo to this mapping. - - - - - Add a new NpgsqlNativeTypeInfo with the given attributes and conversion handlers to this mapping. - - Type name provided by the backend server. - NpgsqlDbType - DbType - Quote - Data conversion handler for text backend encoding. - Data conversion handler for binary backend encoding (for extended query). - - - - Retrieve the NpgsqlNativeTypeInfo with the given NpgsqlDbType. - - - - - Retrieve the NpgsqlNativeTypeInfo with the given DbType. - - - - - Retrieve the NpgsqlNativeTypeInfo with the given Type. - - - - - Determine if a NpgsqlNativeTypeInfo with the given backend type name exists in this mapping. - - - - - Determine if a NpgsqlNativeTypeInfo with the given NpgsqlDbType exists in this mapping. - - - - - Determine if a NpgsqlNativeTypeInfo with the given Type name exists in this mapping. - - - - - Get the number of type infos held. - - - - - Represents a PostgreSQL Point type - - - - - Represents a PostgreSQL Line Segment type. - - - - - Represents a PostgreSQL Path type. - - - - - Represents a PostgreSQL Polygon type. - - - - - Represents a PostgreSQL Circle type. - - - - - Represents a PostgreSQL inet type. - - - - - Represents a PostgreSQL MacAddress type. - - - - - - - The macAddr parameter must contain a string that can only consist of numbers - and upper-case letters as hexadecimal digits. (See PhysicalAddress.Parse method on MSDN) - - - - This class contains helper methods for type conversion between - the .Net type system and postgresql. - - - - - A cache of basic datatype mappings keyed by server version. This way we don't - have to load the basic type mappings for every connection. - - - - - Find a NpgsqlNativeTypeInfo in the default types map that can handle objects - of the given NpgsqlDbType. - - - - - Find a NpgsqlNativeTypeInfo in the default types map that can handle objects - of the given NpgsqlDbType. - - - - - Find a NpgsqlNativeTypeInfo in the default types map that can handle objects - of the given DbType. - - - - - Find a NpgsqlNativeTypeInfo in the default types map that can handle objects - of the given System.Type. - - - - - This method is responsible to convert the byte[] received from the backend - to the corresponding NpgsqlType. - The given TypeInfo is called upon to do the conversion. - If no TypeInfo object is provided, no conversion is performed. - - - - - This method is responsible to convert the string received from the backend - to the corresponding NpgsqlType. - The given TypeInfo is called upon to do the conversion. - If no TypeInfo object is provided, no conversion is performed. - - - - - Create the one and only native to backend type map. - This map is used when formatting native data - types to backend representations. - - - - - This method creates (or retrieves from cache) a mapping between type and OID - of all natively supported postgresql data types. - This is needed as from one version to another, this mapping can be changed and - so we avoid hardcoding them. - - NpgsqlTypeMapping containing all known data types. The mapping must be - cloned before it is modified because it is cached; changes made by one connection may - effect another connection. - - - - - Attempt to map types by issuing a query against pg_type. - This function takes a list of NpgsqlTypeInfo and attempts to resolve the OID field - of each by querying pg_type. If the mapping is found, the type info object is - updated (OID) and added to the provided NpgsqlTypeMapping object. - - NpgsqlConnector to send query through. - Mapping object to add types too. - List of types that need to have OID's mapped. - - - - Summary description for NpgsqlQuery - - - - - For classes representing messages sent from the client to the server. - - - - - Set Cache Size. The default value is 20. - - - - - Lookup cached entity. null will returned if not match. - For both get{} and set{} apply LRU rule. - - key - - - - - The globally available text encoding used for frontend/backend communication. - - - - This class represents the base class for the state pattern design pattern - implementation. - - - This class represents the base class for the state pattern design pattern - implementation. - - - - - - This method is used by the states to change the state of the context. - - - - - Call ProcessBackendResponsesEnum(), and scan and discard all results. - - - - - This method is responsible to handle all protocol messages sent from the backend. - It holds all the logic to do it. - To exchange data, it uses a Mediator object from which it reads/writes information - to handle backend requests. - - - - - - Checks for context socket availability. - Socket.Poll supports integer as microseconds parameter. - This limits the usable command timeout value - to 2,147 seconds: (2,147 x 1,000,000 less than max_int). - In order to bypass this limit, the availability of - the socket is checked in 2,147 seconds cycles - - true, if for context socket availability was checked, false otherwise. - Context. - Select mode. - - - - Called from constructor of derived class. - - - - - Finalizer for HashAlgorithm - - - - - Computes the entire hash of all the bytes in the byte array. - - - - - When overridden in a derived class, drives the hashing function. - - - - - - - - When overridden in a derived class, this pads and hashes whatever data might be left in the buffers and then returns the hash created. - - - - - When overridden in a derived class, initializes the object to prepare for hashing. - - - - - Used for stream chaining. Computes hash as data passes through it. - - The buffer from which to grab the data to be copied. - The offset into the input buffer to start reading at. - The number of bytes to be copied. - The buffer to write the copied data to. - At what point in the outputBuffer to write the data at. - - - - Used for stream chaining. Computes hash as data passes through it. Finishes off the hash. - - The buffer from which to grab the data to be copied. - The offset into the input buffer to start reading at. - The number of bytes to be copied. - - - - Get whether or not the hash can transform multiple blocks at a time. - Note: MUST be overriden if descendant can transform multiple block - on a single call! - - - - - Gets the previously computed hash. - - - - - Returns the size in bits of the hash. - - - - - Must be overriden if not 1 - - - - - Must be overriden if not 1 - - - - - Common base class for all derived MD5 implementations. - - - - - Called from constructor of derived class. - - - - - Creates the default derived class. - - - - - C# implementation of the MD5 cryptographic hash function. - - - - - Creates a new MD5CryptoServiceProvider. - - - - - Drives the hashing function. - - Byte array containing the data to hash. - Where in the input buffer to start. - Size in bytes of the data in the buffer to hash. - - - - This finalizes the hash. Takes the data from the chaining variables and returns it. - - - - - Resets the class after use. Called automatically after hashing is done. - - - - - This is the meat of the hash function. It is what processes each block one at a time. - - Byte array to process data from. - Where in the byte array to start processing. - - - - Pads and then processes the final block. - - Buffer to grab data from. - Position in buffer in bytes to get data from. - How much data in bytes in the buffer to use. - - - - Implements for version 3 of the protocol. - - - - - Reads a row, field by field, allowing a DataRow to be built appropriately. - - - - - Marker interface which identifies a class which may take possession of a stream for the duration of - it's lifetime (possibly temporarily giving that possession to another class for part of that time. - - It inherits from IDisposable, since any such class must make sure it leaves the stream in a valid state. - - The most important such class is that compiler-generated from ProcessBackendResponsesEnum. Of course - we can't make that inherit from this interface, alas. - - - - - Marker interface which identifies a class which represents part of - a response from the server. - - - - - Reads part of a field, as needed (for - and - - - - - Adds further functionality to stream that is dependant upon the type of data read. - - - - - Completes the implementation of Streamer for char data. - - - - - Completes the implementation of Streamer for byte data. - - - - - This class represents a BackEndKeyData message received - from PostgreSQL - - - - - This class represents the Bind message sent to PostgreSQL - server. - - - - - - This class represents the CancelRequest message sent to PostgreSQL - server. - - - - - - Represents a SQL statement or function (stored procedure) to execute - against a PostgreSQL database. This class cannot be inherited. - - - Represents a SQL statement or function (stored procedure) to execute - against a PostgreSQL database. This class cannot be inherited. - - - Represents a SQL statement or function (stored procedure) to execute - against a PostgreSQL database. This class cannot be inherited. - - - - - Initializes a new instance of the NpgsqlCommand class. - - - - - Initializes a new instance of the NpgsqlCommand class with the text of the query. - - The text of the query. - - - - Initializes a new instance of the NpgsqlCommand class with the text of the query and a NpgsqlConnection. - - The text of the query. - A NpgsqlConnection that represents the connection to a PostgreSQL server. - - - - Initializes a new instance of the NpgsqlCommand class with the text of the query, a NpgsqlConnection, and the NpgsqlTransaction. - - The text of the query. - A NpgsqlConnection that represents the connection to a PostgreSQL server. - The NpgsqlTransaction in which the NpgsqlCommand executes. - - - - Used to execute internal commands. - - - - - Attempts to cancel the execution of a NpgsqlCommand. - - This Method isn't implemented yet. - - - - Create a new command based on this one. - - A new NpgsqlCommand object. - - - - Create a new command based on this one. - - A new NpgsqlCommand object. - - - - Creates a new instance of an DbParameter object. - - An DbParameter object. - - - - Creates a new instance of a NpgsqlParameter object. - - A NpgsqlParameter object. - - - - Releases the resources used by the NpgsqlCommand. - - - - - Internal query shortcut for use in cases where the number - of affected rows is of no interest. - - - - - Special adaptation of ExecuteBlind() that sets statement_timeout. - This exists to prevent Connector.SetBackendCommandTimeout() from calling Command.ExecuteBlind(), - which will cause an endless recursive loop. - - - Timeout in seconds. - - - - Executes a SQL statement against the connection and returns the number of rows affected. - - The number of rows affected if known; -1 otherwise. - - - - Sends the CommandText to - the Connection and builds a - NpgsqlDataReader - using one of the CommandBehavior values. - - One of the CommandBehavior values. - A NpgsqlDataReader object. - - - - Sends the CommandText to - the Connection and builds a - NpgsqlDataReader. - - A NpgsqlDataReader object. - - - - Sends the CommandText to - the Connection and builds a - NpgsqlDataReader - using one of the CommandBehavior values. - - One of the CommandBehavior values. - A NpgsqlDataReader object. - Currently the CommandBehavior parameter is ignored. - - - - This method binds the parameters from parameters collection to the bind - message. - - - - - Executes the query, and returns the first column of the first row - in the result set returned by the query. Extra columns or rows are ignored. - - The first column of the first row in the result set, - or a null reference if the result set is empty. - - - - Creates a prepared version of the command on a PostgreSQL server. - - - - - This method checks the connection state to see if the connection - is set or it is open. If one of this conditions is not met, throws - an InvalidOperationException - - - - - This method substitutes the Parameters, if exist, in the command - to their actual values. - The parameter name format is :ParameterName. - - A version of CommandText with the Parameters inserted. - - - - Process this.commandText, trimming each distinct command and substituting paramater - tokens. - - - UTF8 encoded command ready to be sent to the backend. - - - - Append a region of a source command text to an output command, performing parameter token - substitutions. - - Stream to which to append output. - Command text. - - - false if the query has multiple statements which are not allowed - - - - Gets or sets the SQL statement or function (stored procedure) to execute at the data source. - - The Transact-SQL statement or stored procedure to execute. The default is an empty string. - - - - Gets or sets the wait time before terminating the attempt - to execute a command and generating an error. - - The time (in seconds) to wait for the command to execute. - The default is 20 seconds. - - - - Gets or sets a value indicating how the - CommandText property is to be interpreted. - - One of the CommandType values. The default is CommandType.Text. - - - - DB connection. - - - - - Gets or sets the NpgsqlConnection - used by this instance of the NpgsqlCommand. - - The connection to a data source. The default value is a null reference. - - - - DB parameter collection. - - - - - Gets the NpgsqlParameterCollection. - - The parameters of the SQL statement or function (stored procedure). The default is an empty collection. - - - - DB transaction. - - - - - Gets or sets the NpgsqlTransaction - within which the NpgsqlCommand executes. - - The NpgsqlTransaction. - The default value is a null reference. - - - - Gets or sets how command results are applied to the DataRow - when used by the Update - method of the DbDataAdapter. - - One of the UpdateRowSource values. - - - - Returns oid of inserted row. This is only updated when using executenonQuery and when command inserts just a single row. If table is created without oids, this will always be 0. - - - - - Returns whether this query will execute as a prepared (compiled) query. - - - - - Design time visible. - - - - - This class is responsible to create database commands for automatic insert, update and delete operations. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The adapter. - - - - - This method is reponsible to derive the command parameter list with values obtained from function definition. - It clears the Parameters collection of command. Also, if there is any parameter type which is not supported by Npgsql, an InvalidOperationException will be thrown. - Parameters name will be parameter1, parameter2, ... - - NpgsqlCommand whose function parameters will be obtained. - - - - Gets the automatically generated object required - to perform insertions at the data source. - - - The automatically generated object required to perform insertions. - - - - - Gets the automatically generated object required to perform insertions - at the data source, optionally using columns for parameter names. - - - If true, generate parameter names matching column names, if possible. - If false, generate @p1, @p2, and so on. - - - The automatically generated object required to perform insertions. - - - - - Gets the automatically generated System.Data.Common.DbCommand object required - to perform updates at the data source. - - - The automatically generated System.Data.Common.DbCommand object required to perform updates. - - - - - Gets the automatically generated object required to perform updates - at the data source, optionally using columns for parameter names. - - - If true, generate parameter names matching column names, if possible. - If false, generate @p1, @p2, and so on. - - - The automatically generated object required to perform updates. - - - - - Gets the automatically generated System.Data.Common.DbCommand object required - to perform deletions at the data source. - - - The automatically generated System.Data.Common.DbCommand object required to perform deletions. - - - - - Gets the automatically generated object required to perform deletions - at the data source, optionally using columns for parameter names. - - - If true, generate parameter names matching column names, if possible. - If false, generate @p1, @p2, and so on. - - - The automatically generated object required to perform deletions. - - - - - Applies the parameter information. - - The parameter. - The row. - Type of the statement. - if set to true [where clause]. - - - - Returns the name of the specified parameter in the format of @p#. - - The number to be included as part of the parameter's name.. - - The name of the parameter with the specified number appended as part of the parameter name. - - - - - Returns the full parameter name, given the partial parameter name. - - The partial name of the parameter. - - The full parameter name corresponding to the partial parameter name requested. - - - - - Returns the placeholder for the parameter in the associated SQL statement. - - The number to be included as part of the parameter's name. - - The name of the parameter with the specified number appended. - - - - - Registers the to handle the event for a . - - The to be used for the update. - - - - Adds an event handler for the event. - - The sender - A instance containing information about the event. - - - - Given an unquoted identifier in the correct catalog case, returns the correct quoted form of that identifier, including properly escaping any embedded quotes in the identifier. - - The original unquoted identifier. - - The quoted version of the identifier. Embedded quotes within the identifier are properly escaped. - - - - - Unquoted identifier parameter cannot be null - - - - Given a quoted identifier, returns the correct unquoted form of that identifier, including properly un-escaping any embedded quotes in the identifier. - - The identifier that will have its embedded quotes removed. - - The unquoted identifier, with embedded quotes properly un-escaped. - - - - - Quoted identifier parameter cannot be null - - - - Gets or sets the beginning character or characters to use when specifying database objects (for example, tables or columns) whose names contain characters such as spaces or reserved tokens. - - - The beginning character or characters to use. The default is an empty string. - - - - - - - - Gets or sets the ending character or characters to use when specifying database objects (for example, tables or columns) whose names contain characters such as spaces or reserved tokens. - - - The ending character or characters to use. The default is an empty string. - - - - - - - - Represents the method that handles the Notice events. - - The source of the event. - A NpgsqlNoticeEventArgs that contains the event data. - - - - Represents the method that handles the Notification events. - - The source of the event. - A NpgsqlNotificationEventArgs that contains the event data. - - - - This class represents a connection to a - PostgreSQL server. - - - - - Initializes a new instance of the - NpgsqlConnection class. - - - - - Initializes a new instance of the - NpgsqlConnection class - and sets the ConnectionString. - - The connection used to open the PostgreSQL database. - - - - Initializes a new instance of the - NpgsqlConnection class - and sets the ConnectionString. - - The connection used to open the PostgreSQL database. - - - - Begins a database transaction with the specified isolation level. - - The isolation level under which the transaction should run. - An DbTransaction - object representing the new transaction. - - Currently the IsolationLevel ReadCommitted and Serializable are supported by the PostgreSQL backend. - There's no support for nested transactions. - - - - - Begins a database transaction. - - A NpgsqlTransaction - object representing the new transaction. - - Currently there's no support for nested transactions. - - - - - Begins a database transaction with the specified isolation level. - - The isolation level under which the transaction should run. - A NpgsqlTransaction - object representing the new transaction. - - Currently the IsolationLevel ReadCommitted and Serializable are supported by the PostgreSQL backend. - There's no support for nested transactions. - - - - - Opens a database connection with the property settings specified by the - ConnectionString. - - - - - This method changes the current database by disconnecting from the actual - database and connecting to the specified. - - The name of the database to use in place of the current database. - - - - Releases the connection to the database. If the connection is pooled, it will be - made available for re-use. If it is non-pooled, the actual connection will be shutdown. - - - - - When a connection is closed within an enclosing TransactionScope and the transaction - hasn't been promoted, we defer the actual closing until the scope ends. - - - - - Creates and returns a DbCommand - object associated with the IDbConnection. - - A DbCommand object. - - - - Creates and returns a NpgsqlCommand - object associated with the NpgsqlConnection. - - A NpgsqlCommand object. - - - - Releases all resources used by the - NpgsqlConnection. - - true when called from Dispose(); - false when being called from the finalizer. - - - - Create a new connection based on this one. - - A new NpgsqlConnection object. - - - - Create a new connection based on this one. - - A new NpgsqlConnection object. - - - - Returns a copy of the NpgsqlConnectionStringBuilder that contains the parsed connection string values. - - - - - Default SSL CertificateSelectionCallback implementation. - - - - - Default SSL CertificateValidationCallback implementation. - - - - - Default SSL PrivateKeySelectionCallback implementation. - - - - - Default SSL ProvideClientCertificatesCallback implementation. - - - - - Default SSL ValidateRemoteCertificateCallback implementation. - - - - - Write each key/value pair in the connection string to the log. - - - - - Sets the `settings` ConnectionStringBuilder based on the given `connectionString` - - The connection string to load the builder from - - - - Sets the `settings` ConnectionStringBuilder based on the given `connectionString` - - The connection string to load the builder from - - - - Refresh the cached _connectionString whenever the builder settings change - - - - - Returns the supported collections - - - - - Returns the schema collection specified by the collection name. - - The collection name. - The collection specified. - - - - Returns the schema collection specified by the collection name filtered by the restrictions. - - The collection name. - - The restriction values to filter the results. A description of the restrictions is contained - in the Restrictions collection. - - The collection specified. - - - - Clear connection pool. - - - - - Clear all connection pools. - - - - - Enlist transation. - - - - - - Occurs on NoticeResponses from the PostgreSQL backend. - - - - - Occurs on NotificationResponses from the PostgreSQL backend. - - - - - Called to provide client certificates for SSL handshake. - - - - - Mono.Security.Protocol.Tls.CertificateSelectionCallback delegate. - - - - - Mono.Security.Protocol.Tls.CertificateValidationCallback delegate. - - - - - Mono.Security.Protocol.Tls.PrivateKeySelectionCallback delegate. - - - - - Called to validate server's certificate during SSL handshake - - - - - Gets or sets the string used to connect to a PostgreSQL database. - Valid values are: -
        -
      • - Server: Address/Name of Postgresql Server; -
      • -
      • - Port: Port to connect to; -
      • -
      • - Protocol: Protocol version to use, instead of automatic; Integer 2 or 3; -
      • -
      • - Database: Database name. Defaults to user name if not specified; -
      • -
      • - User Id: User name; -
      • -
      • - Password: Password for clear text authentication; -
      • -
      • - SSL: True or False. Controls whether to attempt a secure connection. Default = False; -
      • -
      • - Pooling: True or False. Controls whether connection pooling is used. Default = True; -
      • -
      • - MinPoolSize: Min size of connection pool; -
      • -
      • - MaxPoolSize: Max size of connection pool; -
      • -
      • - Timeout: Time to wait for connection open in seconds. Default is 15. -
      • -
      • - CommandTimeout: Time to wait for command to finish execution before throw an exception. In seconds. Default is 20. -
      • -
      • - Sslmode: Mode for ssl connection control. Can be Prefer, Require, Allow or Disable. Default is Disable. Check user manual for explanation of values. -
      • -
      • - ConnectionLifeTime: Time to wait before closing unused connections in the pool in seconds. Default is 15. -
      • -
      • - SyncNotification: Specifies if Npgsql should use synchronous notifications. -
      • -
      • - SearchPath: Changes search path to specified and public schemas. -
      • -
      -
      - The connection string that includes the server name, - the database name, and other parameters needed to establish - the initial connection. The default value is an empty string. - -
      - - - Backend server host name. - - - - - Backend server port. - - - - - If true, the connection will attempt to use SSL. - - - - - Gets the time to wait while trying to establish a connection - before terminating the attempt and generating an error. - - The time (in seconds) to wait for a connection to open. The default value is 15 seconds. - - - - Gets the time to wait while trying to execute a command - before terminating the attempt and generating an error. - - The time (in seconds) to wait for a command to complete. The default value is 20 seconds. - - - - Gets the time to wait before closing unused connections in the pool if the count - of all connections exeeds MinPoolSize. - - - If connection pool contains unused connections for ConnectionLifeTime seconds, - the half of them will be closed. If there will be unused connections in a second - later then again the half of them will be closed and so on. - This strategy provide smooth change of connection count in the pool. - - The time (in seconds) to wait. The default value is 15 seconds. - - - - Gets the name of the current database or the database to be used after a connection is opened. - - The name of the current database or the name of the database to be - used after a connection is opened. The default value is the empty string. - - - - Whether datareaders are loaded in their entirety (for compatibility with earlier code). - - - - - Gets the database server name. - - - - - Gets flag indicating if we are using Synchronous notification or not. - The default value is false. - - - - - Gets the current state of the connection. - - A bitwise combination of the ConnectionState values. The default is Closed. - - - - Gets whether the current state of the connection is Open or Closed - - ConnectionState.Open or ConnectionState.Closed - - - - Compatibility version. - - - - - Version of the PostgreSQL backend. - This can only be called when there is an active connection. - - - - - PostgreSQL server version. - - - - - Protocol version in use. - This can only be called when there is an active connection. - Always retuna Version3 - - - - - Process id of backend server. - This can only be called when there is an active connection. - - - - - Report whether the backend is expecting standard conformant strings. - In version 8.1, Postgres began reporting this value (false), but did not actually support standard conformant strings. - In version 8.2, Postgres began supporting standard conformant strings, but defaulted this flag to false. - As of version 9.1, this flag defaults to true. - - - - - Report whether the backend understands the string literal E prefix (>= 8.1). - - - - - Report whether the backend understands the hex byte format (>= 9.0). - - - - - The connector object connected to the backend. - - - - - Gets the NpgsqlConnectionStringBuilder containing the parsed connection string values. - - - - - User name. - - - - - Use extended types. - - - - - Password. - - - - - Determine if connection pooling will be used for this connection. - - - - - DB provider factory. - - - - - Return an exact copy of this NpgsqlConnectionString. - - - - - No integrated security if we're on mono and .NET 4.5 because of ClaimsIdentity, - see https://github.com/npgsql/Npgsql/issues/133 - - - - - This function will set value for known key, both private member and base[key]. - - - - - value, coerced as needed to the stored type. - - - - The function will modify private member only, not base[key]. - - - - value, coerced as needed to the stored type. - - - - The function will access private member only, not base[key]. - - - value. - - - - Clear the member and assign them to the default value. - - - - - Gets or sets the backend server host name. - - - - - Gets or sets the backend server port. - - - - - Gets or sets the name of the database to be used after a connection is opened. - - The name of the database to be - used after a connection is opened. - - - - Gets or sets the login user name. - - - - - Gets or sets the login password as a UTF8 encoded byte array. - - - - - Sets the login password as a string. - - - - - Gets or sets a value indicating whether to attempt to use SSL. - - - - - Gets or sets a value indicating whether to attempt to use SSL. - - - - - Gets or sets the time to wait while trying to establish a connection - before terminating the attempt and generating an error. - - The time (in seconds) to wait for a connection to open. The default value is 15 seconds. - - - - Gets or sets the schema search path. - - - - - Gets or sets a value indicating whether connection pooling should be used. - - - - - Gets or sets the time to wait before closing unused connections in the pool if the count - of all connections exeeds MinPoolSize. - - - If connection pool contains unused connections for ConnectionLifeTime seconds, - the half of them will be closed. If there will be unused connections in a second - later then again the half of them will be closed and so on. - This strategy provide smooth change of connection count in the pool. - - The time (in seconds) to wait. The default value is 15 seconds. - - - - Gets or sets the minimum connection pool size. - - - - - Gets or sets the maximum connection pool size. - - - - - Gets or sets a value indicating whether to listen for notifications and report them between command activity. - - - - - Gets the time to wait while trying to execute a command - before terminating the attempt and generating an error. - - The time (in seconds) to wait for a command to complete. The default value is 20 seconds. - - - - Gets or sets a value indicating whether datareaders are loaded in their entirety (for compatibility with earlier code). - - - - - Compatibilty version. When possible, behaviour caused by breaking changes will be preserved - if this version is less than that where the breaking change was introduced. - - - - - Gets or sets the ootional application name parameter to be sent to the backend during connection initiation. - - - - - Gets or sets a value indicating whether to silently Prepare() all commands before execution. - - - - - Gets or sets the specified backend communication protocol version. - - - - - Gets the backend encoding. Always returns "UTF8". - - - - - Case insensative accessor for indivual connection string values. - - - - - Set both ImplicitDefault and ExplicitDefault to the 's default value. - - - - - - - - Set ImplicitDefault to the default value of 's type, - and ExplicitDefault to . - - - - - - - - Represents the method that allows the application to provide a certificate collection to be used for SSL clien authentication - - A X509CertificateCollection to be filled with one or more client certificates. - - - - Represents the method that is called to validate the certificate provided by the server during an SSL handshake - - The server's certificate - The certificate chain containing the certificate's CA and any intermediate authorities - Any errors that were detected - - - - !!! Helper class, for compilation only. - Connector implements the logic for the Connection Objects to - access the physical connection to the database, and isolate - the application developer from connection pooling internals. - - - - - Constructor. - - Connection string. - Pooled - Controls whether the connector can be shared. - - - - This method checks if the connector is still ok. - We try to send a simple query text, select 1 as ConnectionTest; - - - - - This method is responsible for releasing all resources associated with this Connector. - - - - - This method is responsible to release all portals used by this Connector. - - - - - Modify the backend statement_timeout value if needed. - - New timeout - - - - Default SSL CertificateSelectionCallback implementation. - - - - - Default SSL CertificateValidationCallback implementation. - - - - - Default SSL PrivateKeySelectionCallback implementation. - - - - - Default SSL ProvideClientCertificatesCallback implementation. - - - - - Default SSL ValidateRemoteCertificateCallback implementation. - - - - - This method is required to set all the version dependent features flags. - SupportsPrepare means the server can use prepared query plans (7.3+) - - - - - Opens the physical connection to the server. - - Usually called by the RequestConnector - Method of the connection pool manager. - - - - Closes the physical connection to the server. - - - - - Returns next portal index. - - - - - Returns next plan index. - - - - - Occurs on NoticeResponses from the PostgreSQL backend. - - - - - Occurs on NotificationResponses from the PostgreSQL backend. - - - - - Called to provide client certificates for SSL handshake. - - - - - Mono.Security.Protocol.Tls.CertificateSelectionCallback delegate. - - - - - Mono.Security.Protocol.Tls.CertificateValidationCallback delegate. - - - - - Mono.Security.Protocol.Tls.PrivateKeySelectionCallback delegate. - - - - - Called to validate server's certificate during SSL handshake - - - - - Gets the current state of the connection. - - - - - Return Connection String. - - - - - Version of backend server this connector is connected to. - - - - - The physical connection socket to the backend. - - - - - The physical connection stream to the backend. - - - - - The top level stream to the backend. - - - - - Reports if this connector is fully connected. - - - - - The connection mediator. - - - - - Report if the connection is in a transaction. - - - - - Options that control certain aspects of native to backend conversions that depend - on backend version and status. - - - - - This class manages all connector objects, pooled AND non-pooled. - - - - Unique static instance of the connector pool - mamager. - - - Map of index to unused pooled connectors, avaliable to the - next RequestConnector() call. - This hashmap will be indexed by connection string. - This key will hold a list of queues of pooled connectors available to be used. - - - Timer for tracking unused connections in pools. - - - - Searches the shared and pooled connector lists for a - matching connector object or creates a new one. - - The NpgsqlConnection that is requesting - the connector. Its ConnectionString will be used to search the - pool for available connectors. - A connector object. - - - - Find a pooled connector. Handle shared/non-shared here. - - - - - Releases a connector, possibly back to the pool for future use. - - - Pooled connectors will be put back into the pool if there is room. - Shared connectors should just have their use count decremented - since they always stay in the shared pool. - - Connection to which the connector is leased. - The connector to release. - - - - Release a pooled connector. Handle shared/non-shared here. - - - - - Find an available pooled connector in the non-shared pool, or create - a new one if none found. - - - - - Put a pooled connector into the pool queue. - - Connection is leased to. - Connector to pool - - - - A queue with an extra Int32 for keeping track of busy connections. - - - - - Connections available to the end user - - - - - Connections currently in use - - - - - Represents information about COPY operation data transfer format as returned by server. - - - - - Only created when a CopyInResponse or CopyOutResponse is received by NpgsqlState.ProcessBackendResponses() - - - - - Returns true if this operation is currently active and field at given location is in binary format. - - - - - Returns true if this operation is currently active and in binary format. - - - - - Returns number of fields if this operation is currently active, otherwise -1 - - - - - Represents a PostgreSQL COPY FROM STDIN operation with a corresponding SQL statement - to execute against a PostgreSQL database - and an associated stream used to read data from (if provided by user) - or for writing it (when generated by driver). - Eg. new NpgsqlCopyIn("COPY mytable FROM STDIN", connection, streamToRead).Start(); - - - - - Creates NpgsqlCommand to run given query upon Start(). Data for the requested COPY IN operation can then be written to CopyData stream followed by a call to End() or Cancel(). - - - - - Given command is run upon Start(). Data for the requested COPY IN operation can then be written to CopyData stream followed by a call to End() or Cancel(). - - - - - Given command is executed upon Start() and all data from fromStream is passed to it as copy data. - - - - - Returns true if this operation is currently active and field at given location is in binary format. - - - - - Command specified upon creation is executed as a non-query. - If CopyStream is set upon creation, it will be flushed to server as copy data, and operation will be finished immediately. - Otherwise the CopyStream member can be used for writing copy data to server and operation finished with a call to End() or Cancel(). - - - - - Called after writing all data to CopyStream to successfully complete this copy operation. - - - - - Withdraws an already started copy operation. The operation will fail with given error message. - Will do nothing if current operation is not active. - - - - - Returns true if the connection is currently reserved for this operation. - - - - - The stream provided by user or generated upon Start(). - User may provide a stream to constructor; it is used to pass to server all data read from it. - Otherwise, call to Start() sets this to a writable NpgsqlCopyInStream that passes all data written to it to server. - In latter case this is only available while the copy operation is active and null otherwise. - - - - - Returns true if this operation is currently active and in binary format. - - - - - Returns number of fields expected on each input row if this operation is currently active, otherwise -1 - - - - - The Command used to execute this copy operation. - - - - - Set before a COPY IN query to define size of internal buffer for reading from given CopyStream. - - - - - Represents an ongoing COPY FROM STDIN operation. - Provides methods to push data to server and end or cancel the operation. - - - - - Called from NpgsqlState.ProcessBackendResponses upon CopyInResponse. - If CopyStream is already set, it is used to read data to push to server, after which the copy is completed. - Otherwise CopyStream is set to a writable NpgsqlCopyInStream that calls SendCopyData each time it is written to. - - - - - Sends given packet to server as a CopyData message. - Does not check for notifications! Use another thread for that. - - - - - Sends CopyDone message to server. Handles responses, ie. may throw an exception. - - - - - Sends CopyFail message to server. Handles responses, ie. should always throw an exception: - in CopyIn state the server responds to CopyFail with an error response; - outside of a CopyIn state the server responds to CopyFail with an error response; - without network connection or whatever, there's going to eventually be a failure, timeout or user intervention. - - - - - Copy format information returned from server. - - - - - Stream for writing data to a table on a PostgreSQL version 7.4 or newer database during an active COPY FROM STDIN operation. - Passes data exactly as is and when given, so see to it that you use server encoding, correct format and reasonably sized writes! - - - - - Created only by NpgsqlCopyInState.StartCopy() - - - - - Successfully completes copying data to server. Returns after operation is finished. - Does nothing if this stream is not the active copy operation writer. - - - - - Withdraws an already started copy operation. The operation will fail with given error message. - Does nothing if this stream is not the active copy operation writer. - - - - - Writes given bytes to server. - Fails if this stream is not the active copy operation writer. - - - - - Flushes stream contents to server. - Fails if this stream is not the active copy operation writer. - - - - - Not readable - - - - - Not seekable - - - - - Not supported - - - - - True while this stream can be used to write copy data to server - - - - - False - - - - - True - - - - - False - - - - - Number of bytes written so far - - - - - Number of bytes written so far; not settable - - - - - Represents a PostgreSQL COPY TO STDOUT operation with a corresponding SQL statement - to execute against a PostgreSQL database - and an associated stream used to write results to (if provided by user) - or for reading the results (when generated by driver). - Eg. new NpgsqlCopyOut("COPY (SELECT * FROM mytable) TO STDOUT", connection, streamToWrite).Start(); - - - - - Creates NpgsqlCommand to run given query upon Start(), after which CopyStream provides data from database as requested in the query. - - - - - Given command is run upon Start(), after which CopyStream provides data from database as requested in the query. - - - - - Given command is executed upon Start() and all requested copy data is written to toStream immediately. - - - - - Returns true if this operation is currently active and field at given location is in binary format. - - - - - Command specified upon creation is executed as a non-query. - If CopyStream is set upon creation, all copy data from server will be written to it, and operation will be finished immediately. - Otherwise the CopyStream member can be used for reading copy data from server until no more data is available. - - - - - Flush generated CopyStream at once. Effectively reads and discard all the rest of copy data from server. - - - - - Returns true if the connection is currently reserved for this operation. - - - - - The stream provided by user or generated upon Start() - - - - - The Command used to execute this copy operation. - - - - - Returns true if this operation is currently active and in binary format. - - - - - Returns number of fields if this operation is currently active, otherwise -1 - - - - - Faster alternative to using the generated CopyStream. - - - - - Represents an ongoing COPY TO STDOUT operation. - Provides methods to read data from server or end the operation. - - - - - Called from NpgsqlState.ProcessBackendResponses upon CopyOutResponse. - If CopyStream is already set, it is used to write data received from server, after which the copy ends. - Otherwise CopyStream is set to a readable NpgsqlCopyOutStream that receives data from server. - - - - - Called from NpgsqlOutStream.Read to read copy data from server. - - - - - Copy format information returned from server. - - - - - Stream for reading data from a table or select on a PostgreSQL version 7.4 or newer database during an active COPY TO STDOUT operation. - Passes data exactly as provided by the server. - - - - - Created only by NpgsqlCopyOutState.StartCopy() - - - - - Discards copy data as long as server pushes it. Returns after operation is finished. - Does nothing if this stream is not the active copy operation reader. - - - - - Not writable. - - - - - Not flushable. - - - - - Copies data read from server to given byte buffer. - Since server returns data row by row, length will differ each time, but it is only zero once the operation ends. - Can be mixed with calls to the more efficient NpgsqlCopyOutStream.Read() : byte[] though that would not make much sense. - - - - - Not seekable - - - - - Not supported - - - - - Returns a whole row of data from server without extra work. - If standard Stream.Read(...) has been called before, it's internal buffers remains are returned. - - - - - True while this stream can be used to read copy data from server - - - - - True - - - - - False - - - - - False - - - - - Number of bytes read so far - - - - - Number of bytes read so far; can not be set. - - - - - Writes given objects into a stream for PostgreSQL COPY in default copy format (not CSV or BINARY). - - - - - Default delimiter. - - - - - Default separator. - - - - - Default null. - - - - - Default escape. - - - - - Default quote. - - - - - Default buffer size. - - - - - Constructor. - - - - - - Flush buffers. - - - - - Flush rows. - - - - - Flush fields. - - - - - Close the serializer. - - - - - Escape sequence for the given character. - - - - - - - Make room for bytes. - - - - - - Add bytes. - - - - - - End row. - - - - - Prefix field. - - - - - Field added. - - - - - Add null. - - - - - Add string. - - - - - - add Int32. - - - - - - Add Int64. - - - - - - Add number. - - - - - - Add bool - - - - - - Add DateTime. - - - - - - Report whether the serializer is active. - - - - - To Stream. - - - - - Delimiter. - - - - - Separator. - - - - - Escape. - - - - - Null. - - - - - Buffer size. - - - - - Report whether space remains in the buffer. - - - - - Strings to escape. - - - - - Escape sequence bytes. - - - - - Represents the method that handles the RowUpdated events. - - The source of the event. - A NpgsqlRowUpdatedEventArgs that contains the event data. - - - - Represents the method that handles the RowUpdating events. - - The source of the event. - A NpgsqlRowUpdatingEventArgs that contains the event data. - - - - This class represents an adapter from many commands: select, update, insert and delete to fill Datasets. - - - - - Default constructor. - - - - - Constructor. - - - - - - Constructor. - - - - - - - Constructor. - - - - - - - Create row updated event. - - - - - - - - - - Create row updating event. - - - - - - - - - - Raise the RowUpdated event. - - - - - - Raise the RowUpdating event. - - - - - - Row updated event. - - - - - Row updating event. - - - - - Delete command. - - - - - Select command. - - - - - Update command. - - - - - Insert command. - - - - - Provides a means of reading a forward-only stream of rows from a PostgreSQL backend. This class cannot be inherited. - - - - - Return the data type name of the column at index . - - - - - Return the data type of the column at index . - - - - - Return the Npgsql specific data type of the column at requested ordinal. - - column position - Appropriate Npgsql type for column. - - - - Return the column name of the column at index . - - - - - Return the data type OID of the column at index . - - FIXME: Why this method returns String? - - - - Has ordinal. - - - - - - - Return the column name of the column named . - - - - - Return the data DbType of the column at index . - - - - - Return the data NpgsqlDbType of the column at index . - - - - - Get specified field value. - /// - - - - - - Get the value of a column as a . - If the differences between and - in handling of days and months is not important to your application, use - instead. - - Index of the field to find. - value of the field. - - - - Get specified field value. - /// - - - - - - Get specified field value. - /// - - - - - - Get specified field value. - /// - - - - - - Get specified field value. - /// - - - - - - Get specified field value. - /// - - - - - - Send closed event. - - - - - Gets the value of a column converted to a Guid. - - - - - Gets the value of a column as Int16. - - - - - Gets the value of a column as Int32. - - - - - Gets the value of a column as Int64. - - - - - Gets the value of a column as Single. - - - - - Gets the value of a column as Double. - - - - - Gets the value of a column as String. - - - - - Gets the value of a column as Decimal. - - - - - Gets the value of a column as TimeSpan. - - - - - Copy values from each column in the current row into . - - Destination for column values. - The number of column values copied. - - - - Copy values from each column in the current row into . - - An array appropriately sized to store values from all columns. - The number of column values copied. - - - - Gets the value of a column as Boolean. - - - - - Gets the value of a column as Byte. - - - - - Gets the value of a column as Char. - - - - - Gets the value of a column as DateTime. - - - - - Returns a System.Data.DataTable that describes the column metadata of the DataReader. - - - - - This methods parses the command text and tries to get the tablename - from it. - - - - - Get enumerator. - - - - - - Is raised whenever Close() is called. - - - - - Gets the number of columns in the current row. - - - - - Gets the value of a column in its native format. - - - - - Gets the value of a column in its native format. - - - - - Gets a value indicating the depth of nesting for the current row. Always returns zero. - - - - - Gets a value indicating whether the data reader is closed. - - - - - Contains the column names as the keys - - - - - Contains all unique columns - - - - - This is the primary implementation of NpgsqlDataReader. It is the one used in normal cases (where the - preload-reader option is not set in the connection string to resolve some potential backwards-compatibility - issues), the only implementation used internally, and in cases where CachingDataReader is used, it is still - used to do the actual "leg-work" of turning a response stream from the server into a datareader-style - object - with CachingDataReader then filling it's cache from here. - - - - - Iterate through the objects returned through from the server. - If it's a CompletedResponse the rowsaffected count is updated appropriately, - and we iterate again, otherwise we return it (perhaps updating our cache of pending - rows if appropriate). - - The next we will deal with. - - - - Advances the data reader to the next result, when multiple result sets were returned by the PostgreSQL backend. - - True if the reader was advanced, otherwise false. - - - - Releases the resources used by the NpgsqlCommand. - - - - - Closes the data reader object. - - - - - Advances the data reader to the next result, when multiple result sets were returned by the PostgreSQL backend. - - True if the reader was advanced, otherwise false. - - - - Advances the data reader to the next row. - - True if the reader was advanced, otherwise false. - - - - Return the value of the column at index . - - - - - Gets raw data from a column. - - - - - Gets raw data from a column. - - - - - Report whether the value in a column is DBNull. - - - - - Gets the number of rows changed, inserted, or deleted by execution of the SQL statement. - - - - - Indicates if NpgsqlDatareader has rows to be read. - - - - - Provides an implementation of NpgsqlDataReader in which all data is pre-loaded into memory. - This operates by first creating a ForwardsOnlyDataReader as usual, and then loading all of it's - Rows into memory. There is a general principle that when there is a trade-off between a class design that - is more efficient and/or scalable on the one hand and one that is less efficient but has more functionality - (in this case the internal-only functionality of caching results) that one can build the less efficent class - from the most efficient without significant extra loss in efficiency, but not the other way around. The relationship - between ForwardsOnlyDataReader and CachingDataReader is an example of this). - Since the interface presented to the user is still forwards-only, queues are used to - store this information, so that dequeueing as we go we give the garbage collector the best opportunity - possible to reclaim any memory that is no longer in use. - ForwardsOnlyDataReader being used to actually - obtain the information from the server means that the "leg-work" is still only done (and need only be - maintained) in one place. - This class exists to allow for certain potential backwards-compatibility issues to be resolved - with little effort on the part of affected users. It is considerably less efficient than ForwardsOnlyDataReader - and hence never used internally. - - - - - This is the base class for NpgsqlDescribeStatement and NpgsqlDescribePortal. - - - - - - This class represents the Statement Describe message sent to PostgreSQL - server. - - - - - - This class represents the Portal Describe message sent to PostgreSQL - server. - - - - - - EventArgs class to send Notice parameters, which are just NpgsqlError's in a lighter context. - - - - - Notice information. - - - - - This class represents the ErrorResponse and NoticeResponse - message sent from PostgreSQL server. - - - - - Return a string representation of this error object. - - - - - Severity code. All versions. - - - - - Error code. PostgreSQL 7.4 and up. - - - - - Terse error message. All versions. - - - - - Detailed error message. PostgreSQL 7.4 and up. - - - - - Suggestion to help resolve the error. PostgreSQL 7.4 and up. - - - - - Position (one based) within the query string where the error was encounterd. PostgreSQL 7.4 and up. - - - - - Position (one based) within the query string where the error was encounterd. This position refers to an internal command executed for example inside a PL/pgSQL function. PostgreSQL 7.4 and up. - - - - - Internal query string where the error was encounterd. This position refers to an internal command executed for example inside a PL/pgSQL function. PostgreSQL 7.4 and up. - - - - - Trace back information. PostgreSQL 7.4 and up. - - - - - Source file (in backend) reporting the error. PostgreSQL 7.4 and up. - - - - - Source file line number (in backend) reporting the error. PostgreSQL 7.4 and up. - - - - - Source routine (in backend) reporting the error. PostgreSQL 7.4 and up. - - - - - Schema name which relates to the error. PostgreSQL 9.3 and up. - - - - - Table name which relates to the error. PostgreSQL 9.3 and up. - - - - - Column name which relates to the error. PostgreSQL 9.3 and up. - - - - - Data type of column which relates to the error. PostgreSQL 9.3 and up. - - - - - Constraint name which relates to the error. PostgreSQL 9.3 and up. - - - - - String containing the sql sent which produced this error. - - - - - Backend protocol version in use. - - - - - Error and notice message field codes - - - - - Severity: the field contents are ERROR, FATAL, or PANIC (in an error message), - or WARNING, NOTICE, DEBUG, INFO, or LOG (in a notice message), or a localized - translation of one of these. Always present. - - - - - Code: the SQLSTATE code for the error (see Appendix A). Not localizable. Always present. - - - - - Message: the primary human-readable error message. This should be accurate - but terse (typically one line). Always present. - - - - - Detail: an optional secondary error message carrying more detail about the problem. - Might run to multiple lines. - - - - - Hint: an optional suggestion what to do about the problem. This is intended to differ - from Detail in that it offers advice (potentially inappropriate) rather than hard facts. - Might run to multiple lines. - - - - - Position: the field value is a decimal ASCII integer, indicating an error cursor - position as an index into the original query string. The first character has index 1, - and positions are measured in characters not bytes. - - - - - Internal position: this is defined the same as the P field, but it is used when the - cursor position refers to an internally generated command rather than the one submitted - by the client. - The q field will always appear when this field appears. - - - - - Internal query: the text of a failed internally-generated command. - This could be, for example, a SQL query issued by a PL/pgSQL function. - - - - - Where: an indication of the context in which the error occurred. - Presently this includes a call stack traceback of active procedural language functions - and internally-generated queries. The trace is one entry per line, most recent first. - - - - - Schema name: if the error was associated with a specific database object, - the name of the schema containing that object, if any. - - - - - Table name: if the error was associated with a specific table, the name of the table. - (Refer to the schema name field for the name of the table's schema.) - - - - - Column name: if the error was associated with a specific table column, the name of the column. - (Refer to the schema and table name fields to identify the table.) - - - - - Data type name: if the error was associated with a specific data type, the name of the data type. - (Refer to the schema name field for the name of the data type's schema.) - - - - - Constraint name: if the error was associated with a specific constraint, the name of the constraint. - Refer to fields listed above for the associated table or domain. - (For this purpose, indexes are treated as constraints, even if they weren't created with constraint syntax.) - - - - - File: the file name of the source-code location where the error was reported. - - - - - Line: the line number of the source-code location where the error was reported. - - - - - Routine: the name of the source-code routine reporting the error. - - - - - The level of verbosity of the NpgsqlEventLog - - - - - Don't log at all - - - - - Only log the most common issues - - - - - Log everything - - - - - This class handles all the Npgsql event and debug logging - - - - - Writes a string to the Npgsql event log if msglevel is bigger then NpgsqlEventLog.Level - - - This method is obsolete and should no longer be used. - It is likely to be removed in future versions of Npgsql - - The message to write to the event log - The minimum LogLevel for which this message should be logged. - - - - Writes a string to the Npgsql event log if msglevel is bigger then NpgsqlEventLog.Level - - The ResourceManager to get the localized resources - The name of the resource that should be fetched by the ResourceManager - The minimum LogLevel for which this message should be logged. - The additional parameters that shall be included into the log-message (must be compatible with the string in the resource): - - - - Writes the default log-message for the action of calling the Get-part of an Indexer to the log file. - - The minimum LogLevel for which this message should be logged. - The name of the class that contains the Indexer - The parameter given to the Indexer - - - - Writes the default log-message for the action of calling the Set-part of an Indexer to the logfile. - - The minimum LogLevel for which this message should be logged. - The name of the class that contains the Indexer - The parameter given to the Indexer - The value the Indexer is set to - - - - Writes the default log-message for the action of calling the Get-part of a Property to the logfile. - - The minimum LogLevel for which this message should be logged. - The name of the class that contains the Property - The name of the Property - - - - Writes the default log-message for the action of calling the Set-part of a Property to the logfile. - - The minimum LogLevel for which this message should be logged. - The name of the class that contains the Property - The name of the Property - The value the Property is set to - - - - Writes the default log-message for the action of calling a Method without Arguments to the logfile. - - The minimum LogLevel for which this message should be logged. - The name of the class that contains the Method - The name of the Method - - - - Writes the default log-message for the action of calling a Method with one Argument to the logfile. - - The minimum LogLevel for which this message should be logged. - The name of the class that contains the Method - The name of the Method - The value of the Argument of the Method - - - - Writes the default log-message for the action of calling a Method with two Arguments to the logfile. - - The minimum LogLevel for which this message should be logged. - The name of the class that contains the Method - The name of the Method - The value of the first Argument of the Method - The value of the second Argument of the Method - - - - Writes the default log-message for the action of calling a Method with three Arguments to the logfile. - - The minimum LogLevel for which this message should be logged. - The name of the class that contains the Method - The name of the Method - The value of the first Argument of the Method - The value of the second Argument of the Method - The value of the third Argument of the Method - - - - Writes the default log-message for the action of calling a Method with more than three Arguments to the logfile. - - The minimum LogLevel for which this message should be logged. - The name of the class that contains the Method - The name of the Method - A Object-Array with zero or more Ojects that are Arguments of the Method. - - - - Sets/Returns the filename to use for logging. - - The filename of the current Log file. - - - - Sets/Returns whether Log messages should be echoed to the console - - true if Log messages are echoed to the console, otherwise false - - - - The exception that is thrown when the PostgreSQL backend reports errors. - - - - - Construct a backend error exception based on a list of one or more - backend errors. The basic Exception.Message will be built from the - first (usually the only) error in the list. - - - - - Get object data. - - - - - - - Format a .NET style exception string. - Include all errors in the list, including any hints. - - - - - Append a line to the given Stream, first checking for zero-length. - - - - - Provide access to the entire list of errors provided by the PostgreSQL backend. - - - - - Severity code. All versions. - - - - - Error code. PostgreSQL 7.4 and up. - - - - - Basic error message. All versions. - - - - - Detailed error message. PostgreSQL 7.4 and up. - - - - - Suggestion to help resolve the error. PostgreSQL 7.4 and up. - - - - - Position (one based) within the query string where the error was encounterd. PostgreSQL 7.4 and up. - - - - - Trace back information. PostgreSQL 7.4 and up. - - - - - Source file (in backend) reporting the error. PostgreSQL 7.4 and up. - - - - - Source file line number (in backend) reporting the error. PostgreSQL 7.4 and up. - - - - - Source routine (in backend) reporting the error. PostgreSQL 7.4 and up. - - - - - Schema name which relates to the error. PostgreSQL 9.3 and up. - - - - - Table name which relates to the error. PostgreSQL 9.3 and up. - - - - - Column name which relates to the error. PostgreSQL 9.3 and up. - - - - - Data type of column which relates to the error. PostgreSQL 9.3 and up. - - - - - Constraint name which relates to the error. PostgreSQL 9.3 and up. - - - - - String containing the sql sent which produced this error. - - - - - Returns the entire list of errors provided by the PostgreSQL backend. - - - - - This class represents the Execute message sent to PostgreSQL - server. - - - - - - A factory to create instances of various Npgsql objects. - - - - - Creates an NpgsqlCommand object. - - - - - This class represents the Flush message sent to PostgreSQL - server. - - - - - - For classes representing simple messages, - consisting only of a message code and length identifier, - sent from the client to the server. - - - - - This class is responsible for serving as bridge between the backend - protocol handling and the core classes. It is used as the mediator for - exchanging data generated/sent from/to backend. - - - - - - The current command timeout on the backend. This is set via "SET statement_timeout = (milliseconds)". - A value of -1 means the backend's timeout value is unknown because it has not yet been set. - - - - - EventArgs class to send Notification parameters. - - - - - Process ID of the PostgreSQL backend that sent this notification. - - - - - Condition that triggered that notification. - - - - - Additional Information From Notifiying Process (for future use, currently postgres always sets this to an empty string) - - - - - This class represents a parameter to a command that will be sent to server - - - - - Initializes a new instance of the NpgsqlParameter class. - - - - - Initializes a new instance of the NpgsqlParameter - class with the parameter m_Name and a value of the new NpgsqlParameter. - - The m_Name of the parameter to map. - An Object that is the value of the NpgsqlParameter. - -

      When you specify an Object - in the value parameter, the DbType is - inferred from the .NET Framework type of the Object.

      -

      When using this constructor, you must be aware of a possible misuse of the constructor which takes a DbType parameter. - This happens when calling this constructor passing an int 0 and the compiler thinks you are passing a value of DbType. - Use Convert.ToInt32(value) for example to have compiler calling the correct constructor.

      -
      -
      - - - Initializes a new instance of the NpgsqlParameter - class with the parameter m_Name and the data type. - - The m_Name of the parameter to map. - One of the DbType values. - - - - Initializes a new instance of the NpgsqlParameter. - - The m_Name of the parameter to map. - One of the DbType values. - - - - Initializes a new instance of the NpgsqlParameter. - - The m_Name of the parameter to map. - One of the NpgsqlDbType values. - The length of the parameter. - - - - Initializes a new instance of the NpgsqlParameter. - - The m_Name of the parameter to map. - One of the DbType values. - The length of the parameter. - - - - Initializes a new instance of the NpgsqlParameter - - The m_Name of the parameter to map. - One of the NpgsqlDbType values. - The length of the parameter. - The m_Name of the source column. - - - - Initializes a new instance of the NpgsqlParameter. - - The m_Name of the parameter to map. - One of the DbType values. - The length of the parameter. - The m_Name of the source column. - - - - Initializes a new instance of the NpgsqlParameter. - - The m_Name of the parameter to map. - One of the NpgsqlDbType values. - The length of the parameter. - The m_Name of the source column. - One of the ParameterDirection values. - true if the value of the field can be null, otherwise false. - The total number of digits to the left and right of the decimal point to which - Value is resolved. - The total number of decimal places to which - Value is resolved. - One of the DataRowVersion values. - An Object that is the value - of the NpgsqlParameter. - - - - Initializes a new instance of the NpgsqlParameter. - - The m_Name of the parameter to map. - One of the DbType values. - The length of the parameter. - The m_Name of the source column. - One of the ParameterDirection values. - true if the value of the field can be null, otherwise false. - The total number of digits to the left and right of the decimal point to which - Value is resolved. - The total number of decimal places to which - Value is resolved. - One of the DataRowVersion values. - An Object that is the value - of the NpgsqlParameter. - - - - Reset DBType. - - - - - Creates a new NpgsqlParameter that - is a copy of the current instance. - - A new NpgsqlParameter that is a copy of this instance. - - - - The collection to which this parameter belongs, if any. - - - - - Gets or sets the maximum number of digits used to represent the - Value property. - - The maximum number of digits used to represent the - Value property. - The default value is 0, which indicates that the data provider - sets the precision for Value. - - - - Whether to use an explicit cast when included in a query. - - - - - Gets or sets the number of decimal places to which - Value is resolved. - - The number of decimal places to which - Value is resolved. The default is 0. - - - - Gets or sets the maximum size, in bytes, of the data within the column. - - The maximum size, in bytes, of the data within the column. - The default value is inferred from the parameter value. - - - - Gets or sets the DbType of the parameter. - - One of the DbType values. The default is String. - - - - Gets or sets the DbType of the parameter. - - One of the DbType values. The default is String. - - - - Gets or sets a value indicating whether the parameter is input-only, - output-only, bidirectional, or a stored procedure return value parameter. - - One of the ParameterDirection - values. The default is Input. - - - - Gets or sets a value indicating whether the parameter accepts null values. - - true if null values are accepted; otherwise, false. The default is false. - - - - Gets or sets the m_Name of the NpgsqlParameter. - - The m_Name of the NpgsqlParameter. - The default is an empty string. - - - - The m_Name scrubbed of any optional marker - - - - - Gets or sets the m_Name of the source column that is mapped to the - DataSet and used for loading or - returning the Value. - - The m_Name of the source column that is mapped to the - DataSet. The default is an empty string. - - - - Gets or sets the DataRowVersion - to use when loading Value. - - One of the DataRowVersion values. - The default is Current. - - - - Gets or sets the value of the parameter. - - An Object that is the value of the parameter. - The default value is null. - - - - Gets or sets the value of the parameter. - - An Object that is the value of the parameter. - The default value is null. - - - - Source column mapping. - - - - - Represents a collection of parameters relevant to a NpgsqlCommand - as well as their respective mappings to columns in a DataSet. - This class cannot be inherited. - - - - - Initializes a new instance of the NpgsqlParameterCollection class. - - - - - Invalidate the hash lookup tables. This should be done any time a change - may throw the lookups out of sync with the list. - - - - - Adds the specified NpgsqlParameter object to the NpgsqlParameterCollection. - - The NpgsqlParameter to add to the collection. - The index of the new NpgsqlParameter object. - - - - Obsolete. Use AddWithValue instead. - - - Use caution when using this overload of the - Add method to specify integer parameter values. - Because this overload takes a value of type Object, - you must convert the integral value to an Object - type when the value is zero, as the following C# example demonstrates. - parameters.Add(":pname", Convert.ToInt32(0)); - If you do not perform this conversion, the compiler will assume you - are attempting to call the NpgsqlParameterCollection.Add(string, DbType) overload. - - - - - Adds a NpgsqlParameter to the NpgsqlParameterCollection given the specified parameter name and value. - - The name of the NpgsqlParameter. - The Value of the NpgsqlParameter to add to the collection. - The paramater that was added. - - - - Adds a NpgsqlParameter to the NpgsqlParameterCollection given the specified parameter name and value. - - The name of the NpgsqlParameter. - The Value of the NpgsqlParameter to add to the collection. - One of the NpgsqlDbType values. - The paramater that was added. - - - - Adds a NpgsqlParameter to the NpgsqlParameterCollection given the specified parameter name and value. - - The name of the NpgsqlParameter. - The Value of the NpgsqlParameter to add to the collection. - One of the NpgsqlDbType values. - The length of the column. - The paramater that was added. - - - - Adds a NpgsqlParameter to the NpgsqlParameterCollection given the specified parameter name and value. - - The name of the NpgsqlParameter. - The Value of the NpgsqlParameter to add to the collection. - One of the NpgsqlDbType values. - The length of the column. - The name of the source column. - The paramater that was added. - - - - Adds a NpgsqlParameter to the NpgsqlParameterCollection given the parameter name and the data type. - - The name of the parameter. - One of the DbType values. - The index of the new NpgsqlParameter object. - - - - Adds a NpgsqlParameter to the NpgsqlParameterCollection with the parameter name, the data type, and the column length. - - The name of the parameter. - One of the DbType values. - The length of the column. - The index of the new NpgsqlParameter object. - - - - Adds a NpgsqlParameter to the NpgsqlParameterCollection with the parameter name, the data type, the column length, and the source column name. - - The name of the parameter. - One of the DbType values. - The length of the column. - The name of the source column. - The index of the new NpgsqlParameter object. - - - - Removes the specified NpgsqlParameter from the collection using the parameter name. - - The name of the NpgsqlParameter object to retrieve. - - - - Gets a value indicating whether a NpgsqlParameter with the specified parameter name exists in the collection. - - The name of the NpgsqlParameter object to find. - true if the collection contains the parameter; otherwise, false. - - - - Gets the location of the NpgsqlParameter in the collection with a specific parameter name. - - The name of the NpgsqlParameter object to find. - The zero-based location of the NpgsqlParameter in the collection. - - - - Removes the specified NpgsqlParameter from the collection using a specific index. - - The zero-based index of the parameter. - - - - Inserts a NpgsqlParameter into the collection at the specified index. - - The zero-based index where the parameter is to be inserted within the collection. - The NpgsqlParameter to add to the collection. - - - - Removes the specified NpgsqlParameter from the collection. - - The name of the NpgsqlParameter to remove from the collection. - - - - Removes the specified NpgsqlParameter from the collection. - - The NpgsqlParameter to remove from the collection. - - - - Gets a value indicating whether a NpgsqlParameter exists in the collection. - - The value of the NpgsqlParameter object to find. - true if the collection contains the NpgsqlParameter object; otherwise, false. - - - - Gets a value indicating whether a NpgsqlParameter with the specified parameter name exists in the collection. - - The name of the NpgsqlParameter object to find. - A reference to the requested parameter is returned in this out param if it is found in the list. This value is null if the parameter is not found. - true if the collection contains the parameter and param will contain the parameter; otherwise, false. - - - - Removes all items from the collection. - - - - - Gets the location of a NpgsqlParameter in the collection. - - The value of the NpgsqlParameter object to find. - The zero-based index of the NpgsqlParameter object in the collection. - - - - Adds the specified NpgsqlParameter object to the NpgsqlParameterCollection. - - The NpgsqlParameter to add to the collection. - The zero-based index of the new NpgsqlParameter object. - - - - Copies NpgsqlParameter objects from the NpgsqlParameterCollection to the specified array. - - An Array to which to copy the NpgsqlParameter objects in the collection. - The starting index of the array. - - - - Returns an enumerator that can iterate through the collection. - - An IEnumerator that can be used to iterate through the collection. - - - - Add an Array of parameters to the collection. - - Parameters to add. - - - - Get parameter. - - - - - - - Get parameter. - - - - - - - Set parameter. - - - - - - - Set parameter. - - - - - - - In methods taking an object as argument this method is used to verify - that the argument has the type NpgsqlParameter - - The object to verify - - - - Report the offset within the collection of the given parameter. - - Parameter to find. - Index of the parameter, or -1 if the parameter is not present. - - - - Insert the specified parameter into the collection. - - Index of the existing parameter before which to insert the new one. - Parameter to insert. - - - - Report whether the specified parameter is present in the collection. - - Parameter to find. - True if the parameter was found, otherwise false. - - - - Remove the specified parameter from the collection. - - Parameter to remove. - True if the parameter was found and removed, otherwise false. - - - - Convert collection to a System.Array. - - Destination array. - Starting index in destination array. - - - - Convert collection to a System.Array. - - NpgsqlParameter[] - - - - Gets the NpgsqlParameter with the specified name. - - The name of the NpgsqlParameter to retrieve. - The NpgsqlParameter with the specified name, or a null reference if the parameter is not found. - - - - Gets the NpgsqlParameter at the specified index. - - The zero-based index of the NpgsqlParameter to retrieve. - The NpgsqlParameter at the specified index. - - - - Report whether the collection is read only. Always false. - - - - - Report whether the collection is fixed size. Always false. - - - - - Report whether the collection is synchronized. - - - - - Gets the number of NpgsqlParameter objects in the collection. - - The number of NpgsqlParameter objects in the collection. - - - - Sync root. - - - - - This class represents the ParameterStatus message sent from PostgreSQL - server. - - - - - - This class represents the Parse message sent to PostgreSQL - server. - - - - - - This class represents a PasswordPacket message sent to backend - PostgreSQL. - - - - - Used when a connection is closed - - - - - This is the abstract base class for NpgsqlAsciiRow and NpgsqlBinaryRow. - - - - - The index of the current field in the stream, i.e. the one that hasn't - been read yet - - - - - This class represents a RowDescription message sent from - the PostgreSQL. - - - - - - This struct represents the internal data of the RowDescription message. - - - - - Provides the underlying mechanism for reading schema information. - - - - - Returns the MetaDataCollections that lists all possible collections. - - The MetaDataCollections - - - - Returns the Restrictions that contains the meaning and position of the values in the restrictions array. - - The Restrictions - - - - Returns the Databases that contains a list of all accessable databases. - - The database connection on which to run the metadataquery. - The restrictions to filter the collection. - The Databases - - - - Returns the Tables that contains table and view names and the database and schema they come from. - - The database connection on which to run the metadataquery. - The restrictions to filter the collection. - The Tables - - - - Returns the Columns that contains information about columns in tables. - - The database connection on which to run the metadataquery. - The restrictions to filter the collection. - The Columns. - - - - Returns the Views that contains view names and the database and schema they come from. - - The database connection on which to run the metadataquery. - The restrictions to filter the collection. - The Views - - - - Returns the Users containing user names and the sysid of those users. - - The database connection on which to run the metadataquery. - The restrictions to filter the collection. - The Users. - - - - This class represents a StartupPacket message of PostgreSQL - protocol. - - - - - - Represents a completed response message. - - - - - This class represents the Sync message sent to PostgreSQL - server. - - - - - - Represents a transaction to be made in a PostgreSQL database. This class cannot be inherited. - - - - - Dispose. - - - - - - Commits the database transaction. - - - - - Rolls back a transaction from a pending state. - - - - - Rolls back a transaction from a pending savepoint state. - - - - - Creates a transaction save point. - - - - - Cancel the transaction without telling the backend about it. This is - used to make the transaction go away when closing a connection. - - - - - Gets the NpgsqlConnection - object associated with the transaction, or a null reference if the - transaction is no longer valid. - - The NpgsqlConnection - object associated with the transaction. - - - - DB connection. - - - - - Specifies the IsolationLevel for this transaction. - - The IsolationLevel for this transaction. - The default is ReadCommitted. - - - - This class provides many util methods to handle - reading and writing of PostgreSQL protocol messages. - - - - - This method takes a ProtocolVersion and returns an integer - version number that the Postgres backend will recognize in a - startup packet. - - - - - This method takes a version string as returned by SELECT VERSION() and returns - a valid version string ("7.2.2" for example). - This is only needed when running protocol version 2. - This does not do any validity checks. - - - - - This method gets a C NULL terminated string from the network stream. - It keeps reading a byte in each time until a NULL byte is returned. - It returns the resultant string of bytes read. - This string is sent from backend. - - - - - Reads requested number of bytes from stream with retries until Stream.Read returns 0 or count is reached. - - Stream to read - byte buffer to fill - starting position to fill the buffer - number of bytes to read - The number of bytes read. May be less than count if no more bytes are available. - - - - Reads requested number of bytes from . If output matches exactly, and == false, is returned directly. - - Source array. - Starting position to read from - Number of bytes to read - Force a copy, even if the output is an exact copy of . - byte[] containing data requested. - - - - This method writes a string to the network stream. - - - - - This method writes a string to the network stream. - - - - - This method writes a C NULL terminated string to the network stream. - It appends a NULL terminator to the end of the String. - - - - - This method writes a C NULL terminated string to the network stream. - It appends a NULL terminator to the end of the String. - - - - - This method writes a byte to the stream. It also enables logging of them. - - - - - This method writes a byte to the stream. It also enables logging of them. - - - - - This method writes a set of bytes to the stream. It also enables logging of them. - - - - - This method writes a set of bytes to the stream. It also enables logging of them. - - - - - This method writes a C NULL terminated string limited in length to the - backend server. - It pads the string with null bytes to the size specified. - - - - - This method writes a C NULL terminated byte[] limited in length to the - backend server. - It pads the string with null bytes to the size specified. - - - - - Write a 32-bit integer to the given stream in the correct byte order. - - - - - Read a 32-bit integer from the given stream in the correct byte order. - - - - - Read a 32-bit integer from the given array in the correct byte order. - - - - - Write a 16-bit integer to the given stream in the correct byte order. - - - - - Read a 16-bit integer from the given stream in the correct byte order. - - - - - Read a 16-bit integer from the given array in the correct byte order. - - - - - Copy and possibly reverse a byte array, depending on host architecture endienness. - - Source byte array. - Force a copy even if no swap is performed. - , reversed if on a little-endian architecture, copied if required. - - - - Copy and possibly reverse a byte array, depending on host architecture endienness. - - Source byte array. - Starting offset in source array. - Number of bytes to copy. - Force a copy even if no swap is performed. - , reversed if on a little-endian architecture, copied if required. - - - - Represent the frontend/backend protocol version. - - - - - Represent the backend server version. - As this class offers no functionality beyond that offered by it has been - deprecated in favour of that class. - - - - - - Returns the string representation of this version in three place dot notation (Major.Minor.Patch). - - - - - Server version major number. - - - - - Server version minor number. - - - - - Server version patch level number. - - - - - A class to handle everything associated with SSPI authentication - - - - - Simplified SecBufferDesc struct with only one SecBuffer - - -
      -
      diff --git a/lib/ServiceStack.Client.dll b/lib/ServiceStack.Client.dll deleted file mode 100644 index bf0ab95a4c6..00000000000 Binary files a/lib/ServiceStack.Client.dll and /dev/null differ diff --git a/lib/ServiceStack.Client.dll.CodeAnalysisLog.xml b/lib/ServiceStack.Client.dll.CodeAnalysisLog.xml deleted file mode 100644 index 7e8e26acc45..00000000000 --- a/lib/ServiceStack.Client.dll.CodeAnalysisLog.xml +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - Object 'reader' can be disposed more than once in method 'AsyncServiceClient.ReadCallBack<T>(Task<int>, AsyncState<T>)'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 360 - - - - - - - - - Provide an overridable implementation of Dispose(bool) on 'AsyncState<TResponse>' or mark the type as sealed. A call to Dispose(false) should only clean up native resources. A call to Dispose(true) should clean up both managed and native resources. - - - - - - - Modify 'AsyncState<TResponse>.Dispose()' so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance ('this' or 'Me' in Visual Basic), and then returns. - - - - - - - - - Provide an overridable implementation of Dispose(bool) on 'AsyncTimer' or mark the type as sealed. A call to Dispose(false) should only clean up native resources. A call to Dispose(true) should clean up both managed and native resources. - - - - - - - Modify 'AsyncTimer.Dispose()' so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance ('this' or 'Me' in Visual Basic), and then returns. - - - - - - - - - Add [Serializable] to 'AuthenticationException' as this type implements ISerializable. - - - - - - - Provide an overridable implementation of Dispose(bool) on 'ServerEventsClient' or mark the type as sealed. A call to Dispose(false) should only clean up native resources. A call to Dispose(true) should clean up both managed and native resources. - - - - - - - 'ServerEventsClient' contains field 'ServerEventsClient.cancel' that is of IDisposable type: 'CancellationTokenSource'. Change the Dispose method on 'ServerEventsClient' to call Dispose or Close on this field. - - - Modify 'ServerEventsClient.Dispose()' so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance ('this' or 'Me' in Visual Basic), and then returns. - - - - - - - - - - - 'ServiceClientBase.ServiceClientBase()' contains a call chain that results in a call to a virtual method defined by the class. Review the following call stack for unintended consequences: ServiceClientBase..ctor() ServiceClientBase.get_ContentType():String - - - - - - - Modify 'ServiceClientBase.Dispose()' so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance ('this' or 'Me' in Visual Basic), and then returns. - - - - - - - Object 'responseStream' can be disposed more than once in method 'ServiceClientBase.HandleResponse<TResponse>(WebResponse)'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 1355 - - - - - - - 'ServiceClientBase.PrepareWebRequest(string, string, object, Action<HttpWebRequest>)' rethrows a caught exception and specifies it explicitly as an argument. Use 'throw' without an argument instead, in order to preserve the stack location where the exception was initially raised. - - - - - - - - - - - Modify 'WcfServiceClient.Dispose()' so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance ('this' or 'Me' in Visual Basic), and then returns. - - - - - - - - - Add an implementation of GetObjectData to type 'WebServiceException'. - - - - - - - - - - - Provide an overridable implementation of Dispose(bool) on 'InMemoryMessageQueueClient' or mark the type as sealed. A call to Dispose(false) should only clean up native resources. A call to Dispose(true) should clean up both managed and native resources. - - - - - - - Modify 'InMemoryMessageQueueClient.Dispose()' so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance ('this' or 'Me' in Visual Basic), and then returns. - - - - - - - - - Provide an overridable implementation of Dispose(bool) on 'MessageQueueClientFactory' or mark the type as sealed. A call to Dispose(false) should only clean up native resources. A call to Dispose(true) should clean up both managed and native resources. - - - - - - - Modify 'MessageQueueClientFactory.Dispose()' so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance ('this' or 'Me' in Visual Basic), and then returns. - - - - - - - - - Provide an overridable implementation of Dispose(bool) on 'RedisMessageFactory' or mark the type as sealed. A call to Dispose(false) should only clean up native resources. A call to Dispose(true) should clean up both managed and native resources. - - - - - - - Modify 'RedisMessageFactory.Dispose()' so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance ('this' or 'Me' in Visual Basic), and then returns. - - - - - - - - - Provide an overridable implementation of Dispose(bool) on 'RedisMessageProducer' or mark the type as sealed. A call to Dispose(false) should only clean up native resources. A call to Dispose(true) should clean up both managed and native resources. - - - - - - - Modify 'RedisMessageProducer.Dispose()' so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance ('this' or 'Me' in Visual Basic), and then returns. - - - - - - - - - Provide an overridable implementation of Dispose(bool) on 'RedisMessageQueueClient' or mark the type as sealed. A call to Dispose(false) should only clean up native resources. A call to Dispose(true) should clean up both managed and native resources. - - - - - - - Modify 'RedisMessageQueueClient.Dispose()' so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance ('this' or 'Me' in Visual Basic), and then returns. - - - - - - - - - Provide an overridable implementation of Dispose(bool) on 'RedisMessageQueueClientFactory' or mark the type as sealed. A call to Dispose(false) should only clean up native resources. A call to Dispose(true) should clean up both managed and native resources. - - - - - - - Modify 'RedisMessageQueueClientFactory.Dispose()' so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance ('this' or 'Me' in Visual Basic), and then returns. - - - - - - - - - - - - - - - Object 'deflateStream' can be disposed more than once in method 'DataContractSerializer.CompressToStream<XmlDto>(XmlDto, Stream)'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 106 - Object 'stream' can be disposed more than once in method 'DataContractSerializer.CompressToStream<XmlDto>(XmlDto, Stream)'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 106 - - - - - - - Object 'ms' can be disposed more than once in method 'DataContractSerializer.Parse<XmlDto>(XmlDto, bool)'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 64 - - - - - - - - - - - Object 'ms' can be disposed more than once in method 'JsonDataContractSerializer.SerializeToString<T>(T)'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 43 - - - - - - - - - - - Object 'ms' can be disposed more than once in method 'XmlSerializableSerializer.SerializeToString<XmlDto>(XmlDto)'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 29 - - - - - - - - - - - - - - - Object 'ms' can be disposed more than once in method 'NetDeflateProvider.Deflate(string)'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 21 - Object 'zipStream' can be disposed more than once in method 'NetDeflateProvider.Deflate(string)'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 21 - - - - - - - Object 'compressedStream' can be disposed more than once in method 'NetDeflateProvider.Inflate(byte[])'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 31 - - - - - - - - - - - Object 'compressedStream' can be disposed more than once in method 'NetGZipProvider.GUnzip(byte[])'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 30 - - - - - - - Object 'ms' can be disposed more than once in method 'NetGZipProvider.GZip(string)'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 20 - Object 'zipStream' can be disposed more than once in method 'NetGZipProvider.GZip(string)'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 20 - - - - - - - - - - - - - Add [Serializable] to 'ValidationError' as this type implements ISerializable. - - - - - - - - - - - - - Disposable fields should be disposed - If a type that implements IDisposable owns fields that also implement IDisposable, the encapsulating type's Dispose() implementation should call Dispose() on each disposable field. - {0} contains field {1} that is of IDisposable type: {2}. Change the Dispose method on {0} to call Dispose or Close on this field. - - http://msdn.microsoft.com/library/ms182328(VS.100).aspx - [none] - Warning - - - - Do not dispose objects multiple times - A correctly implemented Dispose method can be called multiple times without throwing an exception. However, this is not guaranteed and to avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object. - Object {0} can be disposed more than once in method {1}. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 30 - RuleOwner - http://msdn.microsoft.com/library/ms182334(VS.100).aspx - - Warning - - - - Do not call overridable methods in constructors - Virtual methods defined on the class should not be called from constructors. If a derived class has overridden the method, the derived class version will be called (before the derived class constructor is called). - {0} contains a call chain that results in a call to a virtual method defined by the class. Review the following call stack for unintended consequences: {1} - - http://msdn.microsoft.com/library/ms182331(VS.100).aspx - [none] - CriticalWarning - - - - Implement IDisposable correctly - All IDisposable types should implement the Dispose pattern correctly. - Modify {0} so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance ('this' or 'Me' in Visual Basic), and then returns. - Provide an overridable implementation of Dispose(bool) on {0} or mark the type as sealed. A call to Dispose(false) should only clean up native resources. A call to Dispose(true) should clean up both managed and native resources. - - http://msdn.microsoft.com/library/ms244737(VS.100).aspx - [none] - Error - - - - Implement ISerializable correctly - If a type is assignable to ISerializable, it should implement GetObjectData. For unsealed types, the GetObjectData method should be callable and overridable by derived types. - Add an implementation of GetObjectData to type {0}. - - http://msdn.microsoft.com/library/ms182342(VS.100).aspx - [none] - Error - - - - Mark ISerializable types with SerializableAttribute - The System.Runtime.Serialization.ISerializable interface allows the type to customize its serialization, while the Serializable attribute enables the runtime to recognize the type as being serializable. - Add [Serializable] to {0} as this type implements ISerializable. - - http://msdn.microsoft.com/library/ms182350(VS.100).aspx - [none] - Warning - - - - Rethrow to preserve stack details - Use the IL rethrow instruction to preserve original stack details when re-raising a caught exception. - {0} rethrows a caught exception and specifies it explicitly as an argument. Use 'throw' without an argument instead, in order to preserve the stack location where the exception was initially raised. - - http://msdn.microsoft.com/library/ms182363(VS.100).aspx - [none] - Error - - - - - Category - Certainty - Collapse All - Check Id - Error - error(s) - Expand All - Help - Line - message(s) - [Location not stored in Pdb] - Project - Resolution - Rule - Rule File - Rule Description - Source - Status - Target - Warning - warning(s) - Code Analysis Report - - diff --git a/lib/ServiceStack.Client.xml b/lib/ServiceStack.Client.xml deleted file mode 100644 index 10ce7eee9e6..00000000000 --- a/lib/ServiceStack.Client.xml +++ /dev/null @@ -1,374 +0,0 @@ - - - - ServiceStack.Client - - - - Need to provide async request options - http://msdn.microsoft.com/en-us/library/86wf6409(VS.71).aspx - - - - The request filter is called before any request. - This request filter is executed globally. - - - - - The response action is called once the server response is available. - It will allow you to access raw response information. - This response action is executed globally. - Note that you should NOT consume the response stream as this is handled by ServiceStack - - - - - Called before request resend, when the initial request required authentication - - - - - The request filter is called before any request. - This request filter only works with the instance where it was set (not global). - - - - - The response action is called once the server response is available. - It will allow you to access raw response information. - Note that you should NOT consume the response stream as this is handled by ServiceStack - - - - - Returns the next message from queueName or null if no message - - - - - - - Generic Proxy for service calls. - - The service Contract - - - - Returns the transparent proxy for the service call - - - - Need to provide async request options - http://msdn.microsoft.com/en-us/library/86wf6409(VS.71).aspx - - - - The request filter is called before any request. - This request filter is executed globally. - - - - - The response action is called once the server response is available. - It will allow you to access raw response information. - This response action is executed globally. - Note that you should NOT consume the response stream as this is handled by ServiceStack - - - - - Sets all baseUri properties, using the Format property for the SyncReplyBaseUri and AsyncOneWayBaseUri - - Base URI of the service - - - - Whether to Accept Gzip,Deflate Content-Encoding and to auto decompress responses - - - - - The user name for basic authentication - - - - - The password for basic authentication - - - - - Sets the username and the password for basic authentication. - - - - - Determines if the basic auth header should be sent with every request. - By default, the basic auth header is only sent when "401 Unauthorized" is returned. - - - - - Specifies if cookies should be stored - - - - - Called by Send method if an exception occurs, for instance a System.Net.WebException because the server - returned an HTTP error code. Override if you want to handle specific exceptions or always want to parse the - response to a custom ErrorResponse DTO type instead of ServiceStack's ErrorResponse class. In case ex is a - System.Net.WebException, do not use - createWebRequest/getResponse/HandleResponse<TResponse> to parse the response - because that will result in the same exception again. Use - ThrowWebServiceException<YourErrorResponseType> to parse the response and to throw a - WebServiceException containing the parsed DTO. Then override Send to handle that exception. - - - - - Gets the collection of headers to be added to outgoing requests. - - - - - Whether to execute async callbacks on the same Synchronization Context it was called from. - - - - - Gets or sets authentication information for the request. - Warning: It's recommened to use and for basic auth. - This property is only used for IIS level authentication. - - - - - Called before request resend, when the initial request required authentication - - - - - The request filter is called before any request. - This request filter only works with the instance where it was set (not global). - - - - - The response action is called once the server response is available. - It will allow you to access raw response information. - Note that you should NOT consume the response stream as this is handled by ServiceStack - - - - - Creates the error response from the values provided. - - If the errorCode is empty it will use the first validation error code, - if there is none it will throw an error. - - The error code. - The error message. - The validation errors. - - - - - Default MaxStringContentLength is 8k, and throws an exception when reached - - - - - Serializer cache of delegates required to create a type from a string map (e.g. for REST urls) - - - - - Gets the namespace from an attribute marked on the type's definition - - - Namespace of type - - - - Specifies if cookies should be stored - - - - - Compresses the specified text using the default compression method: Deflate - - The text. - Type of the compression. - - - - - Decompresses the specified gz buffer using the default compression method: Inflate - - The gz buffer. - Type of the compression. - - - - - Donated by Ivan Korneliuk from his post: - http://korneliuk.blogspot.com/2012/08/servicestack-reusing-dtos.html - - Modified to only allow using routes matching the supplied HTTP Verb - - - - - Generate a url from a Request DTO. Pretty URL generation require Routes to be defined using `[Route]` on the Request DTO - - - - - The exception which is thrown when a validation error occurred. - This validation is serialized in a extra clean and human-readable way by ServiceStack. - - - - - Used if we need to serialize this exception to XML - - - - - - Returns the first error code - - The error code. - - - - Encapsulates a validation result. - - - - - Constructs a new ValidationResult - - - - - Constructs a new ValidationResult - - A list of validation results - - - - Initializes a new instance of the class. - - The errors. - The success code. - The error code. - - - - Merge errors from another - - - - - - Gets or sets the success code. - - The success code. - - - - Gets or sets the error code. - - The error code. - - - - Gets or sets the success message. - - The success message. - - - - Gets or sets the error message. - - The error message. - - - - The errors generated by the validation. - - - - - Returns True if the validation was successful (errors list is empty). - - - - - Adds the singleton instance of to an endpoint on the client. - - - Based on http://megakemp.wordpress.com/2009/02/06/managing-shared-cookies-in-wcf/ - - - - - Adds the singleton of the class to the client endpoint's message inspectors. - - The endpoint that is to be customized. - The client runtime to be customized. - - - - Maintains a copy of the cookies contained in the incoming HTTP response received from any service - and appends it to all outgoing HTTP requests. - - - This class effectively allows to send any received HTTP cookies to different services, - reproducing the same functionality available in ASMX Web Services proxies with the class. - Based on http://megakemp.wordpress.com/2009/02/06/managing-shared-cookies-in-wcf/ - - - - - Initializes a new instance of the class. - - - - - Inspects a message after a reply message is received but prior to passing it back to the client application. - - The message to be transformed into types and handed back to the client application. - Correlation state data. - - - - Inspects a message before a request message is sent to a service. - - The message to be sent to the service. - The client object channel. - - Null since no message correlation is used. - - - - - Gets the singleton instance. - - - - - Naming convention for the request's Response DTO - - - - - Shortcut to get the ResponseStatus whether it's bare or inside a IHttpResult - - - - - - diff --git a/lib/ServiceStack.Common.dll b/lib/ServiceStack.Common.dll deleted file mode 100755 index f8eaaca679c..00000000000 Binary files a/lib/ServiceStack.Common.dll and /dev/null differ diff --git a/lib/ServiceStack.Common.dll.CodeAnalysisLog.xml b/lib/ServiceStack.Common.dll.CodeAnalysisLog.xml deleted file mode 100644 index ad91043c52e..00000000000 --- a/lib/ServiceStack.Common.dll.CodeAnalysisLog.xml +++ /dev/null @@ -1,2769 +0,0 @@ - - - - - - - - Consider merging the types defined in 'ServiceStack.Data' with another namespace. - - - - - - - Consider merging the types defined in 'ServiceStack.Logging' with another namespace. - - - - - - - Consider merging the types defined in 'ServiceStack.Reflection' with another namespace. - - - - - - - - - - - Sign 'ServiceStack.Common.dll' with a strong name key. - - - Mark 'ServiceStack.Common.dll' with CLSCompliant(true) because it exposes externally visible types. - - - - - - - - - 'DictionaryExtensions' should be declared inside a namespace. - - - - - - - Change 'List<T>' in 'DictionaryExtensions.ConvertAll<T, K, V>(IDictionary<K, V>, Func<K, V, T>)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - In member 'DictionaryExtensions.ConvertAll<T, K, V>(IDictionary<K, V>, Func<K, V, T>)', correct the casing of 'Fn' in parameter name 'createFn' by changing it to 'FN'. - - - In method 'DictionaryExtensions.ConvertAll<T, K, V>(IDictionary<K, V>, Func<K, V, T>)', correct the spelling of 'Fn' in parameter name 'createFn' or remove it entirely if it represents any sort of Hungarian notation. - - - On method 'DictionaryExtensions.ConvertAll<T, K, V>(IDictionary<K, V>, Func<K, V, T>)', consider providing a more meaningful name than generic type parameter name 'K'. - - - On method 'DictionaryExtensions.ConvertAll<T, K, V>(IDictionary<K, V>, Func<K, V, T>)', consider providing a more meaningful name than generic type parameter name 'V'. - - - On method 'DictionaryExtensions.ConvertAll<T, K, V>(IDictionary<K, V>, Func<K, V, T>)', prefix generic type parameter name 'K' with 'T'. - On method 'DictionaryExtensions.ConvertAll<T, K, V>(IDictionary<K, V>, Func<K, V, T>)', prefix generic type parameter name 'V' with 'T'. - - - - - - - In member 'DictionaryExtensions.ForEach<TKey, TValue>(this Dictionary<TKey, TValue>, Action<TKey, TValue>)', correct the casing of 'Fn' in parameter name 'onEachFn' by changing it to 'FN'. - - - In method 'DictionaryExtensions.ForEach<TKey, TValue>(this Dictionary<TKey, TValue>, Action<TKey, TValue>)', correct the spelling of 'Fn' in parameter name 'onEachFn' or remove it entirely if it represents any sort of Hungarian notation. - - - In externally visible method 'DictionaryExtensions.ForEach<TKey, TValue>(this Dictionary<TKey, TValue>, Action<TKey, TValue>)', validate parameter 'dictionary' before using it. - - - In externally visible method 'DictionaryExtensions.ForEach<TKey, TValue>(this Dictionary<TKey, TValue>, Action<TKey, TValue>)', validate parameter 'onEachFn' before using it. - - - - - - - In member 'DictionaryExtensions.GetOrAdd<K, V>(this Dictionary<K, V>, K, Func<K, V>)', correct the casing of 'Fn' in parameter name 'createFn' by changing it to 'FN'. - - - In method 'DictionaryExtensions.GetOrAdd<K, V>(this Dictionary<K, V>, K, Func<K, V>)', correct the spelling of 'Fn' in parameter name 'createFn' or remove it entirely if it represents any sort of Hungarian notation. - - - On method 'DictionaryExtensions.GetOrAdd<K, V>(this Dictionary<K, V>, K, Func<K, V>)', consider providing a more meaningful name than generic type parameter name 'K'. - - - On method 'DictionaryExtensions.GetOrAdd<K, V>(this Dictionary<K, V>, K, Func<K, V>)', consider providing a more meaningful name than generic type parameter name 'V'. - - - On method 'DictionaryExtensions.GetOrAdd<K, V>(this Dictionary<K, V>, K, Func<K, V>)', prefix generic type parameter name 'K' with 'T'. - On method 'DictionaryExtensions.GetOrAdd<K, V>(this Dictionary<K, V>, K, Func<K, V>)', prefix generic type parameter name 'V' with 'T'. - - - In externally visible method 'DictionaryExtensions.GetOrAdd<K, V>(this Dictionary<K, V>, K, Func<K, V>)', validate parameter 'map' before using it. - - - In externally visible method 'DictionaryExtensions.GetOrAdd<K, V>(this Dictionary<K, V>, K, Func<K, V>)', validate parameter 'createFn' before using it. - - - - - - - In externally visible method 'DictionaryExtensions.GetValueOrDefault<TValue, TKey>(this Dictionary<TKey, TValue>, TKey)', validate parameter 'dictionary' before using it. - - - - - - - On method 'DictionaryExtensions.UnorderedEquivalentTo<K, V>(this IDictionary<K, V>, IDictionary<K, V>)', consider providing a more meaningful name than generic type parameter name 'K'. - - - On method 'DictionaryExtensions.UnorderedEquivalentTo<K, V>(this IDictionary<K, V>, IDictionary<K, V>)', consider providing a more meaningful name than generic type parameter name 'V'. - - - On method 'DictionaryExtensions.UnorderedEquivalentTo<K, V>(this IDictionary<K, V>, IDictionary<K, V>)', prefix generic type parameter name 'K' with 'T'. - On method 'DictionaryExtensions.UnorderedEquivalentTo<K, V>(this IDictionary<K, V>, IDictionary<K, V>)', prefix generic type parameter name 'V' with 'T'. - - - - - - - - - - - - - - - In externally visible method 'ActionExecExtensions.ExecAllAndWait(this ICollection<Action>, TimeSpan)', validate parameter 'actions' before using it. - - - - - - - Change 'List<WaitHandle>' in 'ActionExecExtensions.ExecAsync(this IEnumerable<Action>)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - In externally visible method 'ActionExecExtensions.ExecAsync(this IEnumerable<Action>)', validate parameter 'actions' before using it. - - - - - - - In member 'ActionExecExtensions.WaitAll(this ICollection<WaitHandle>, int)', correct the casing of 'Ms' in parameter name 'timeoutMs' by changing it to 'MS'. - - - In method 'ActionExecExtensions.WaitAll(this ICollection<WaitHandle>, int)', correct the spelling of 'Ms' in parameter name 'timeoutMs' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Change 'List<IAsyncResult>' in 'ActionExecExtensions.WaitAll(this List<IAsyncResult>, TimeSpan)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - In externally visible method 'ActionExecExtensions.WaitAll(this List<IAsyncResult>, TimeSpan)', validate parameter 'asyncResults' before using it. - - - - - - - Change 'List<WaitHandle>' in 'ActionExecExtensions.WaitAll(this List<WaitHandle>, int)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - In member 'ActionExecExtensions.WaitAll(this List<WaitHandle>, int)', correct the casing of 'Ms' in parameter name 'timeoutMs' by changing it to 'MS'. - - - In method 'ActionExecExtensions.WaitAll(this List<WaitHandle>, int)', correct the spelling of 'Ms' in parameter name 'timeoutMs' or remove it entirely if it represents any sort of Hungarian notation. - - - In externally visible method 'ActionExecExtensions.WaitAll(this List<WaitHandle>, int)', validate parameter 'waitHandles' before using it. - - - - - - - In member 'ActionExecExtensions.WaitAll(WaitHandle[], int)', the compound word 'timeOut' in parameter name 'timeOutMs' exists as a discrete term. If your usage is intended to be single word, case it as 'timeout' or strip the first token entirely if it represents any sort of Hungarian notation. - - - In member 'ActionExecExtensions.WaitAll(WaitHandle[], int)', correct the casing of 'Ms' in parameter name 'timeOutMs' by changing it to 'MS'. - - - In method 'ActionExecExtensions.WaitAll(WaitHandle[], int)', correct the spelling of 'Ms' in parameter name 'timeOutMs' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - - - - - In member 'AssertExtensions.ThrowIfNull(this object)', consider replacing the data type identifier 'obj' in parameter name 'obj' with a more generic term, such as 'value'. - - - - - - - In member 'AssertExtensions.ThrowIfNull(this object, string)', consider replacing the data type identifier 'obj' in parameter name 'obj' with a more generic term, such as 'value'. - - - - - - - In method 'AssertExtensions.ThrowIfNullOrEmpty(this string)', correct the spelling of 'str' in parameter name 'strValue' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - In method 'AssertExtensions.ThrowIfNullOrEmpty(this string, string)', correct the spelling of 'str' in parameter name 'strValue' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - In method 'AssertExtensions.ThrowOnFirstNull(params object[])', correct the spelling of 'objs' in parameter name 'objs' or remove it entirely if it represents any sort of Hungarian notation. - - - In member 'AssertExtensions.ThrowOnFirstNull(params object[])', consider replacing the data type identifier 'objs' in parameter name 'objs' with a more generic term, such as 'value'. - - - In externally visible method 'AssertExtensions.ThrowOnFirstNull(params object[])', validate parameter 'objs' before using it. - - - - - - - - - Correct the spelling of 'Utils' in type name 'AssertUtils'. - - - - - - - In externally visible method 'AssertUtils.AreNotNull(IDictionary<string, object>)', validate parameter 'fieldMap' before using it. - - - - - - - - - - - In method 'ByteArrayExtensions.AreEqual(this byte[], byte[])', correct the spelling of 'b' in parameter name 'b1' or remove it entirely if it represents any sort of Hungarian notation. - In method 'ByteArrayExtensions.AreEqual(this byte[], byte[])', correct the spelling of 'b' in parameter name 'b2' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - - - Correct the spelling of 'Utils' in type name 'CommandsUtils'. - - - Because type 'CommandsUtils' contains only 'static' members, mark it as 'static' to prevent the compiler from adding a default public constructor. - - - - - - - Change 'List<WaitHandle>' in 'CommandsUtils.ExecuteAsyncCommandExec(IEnumerable<ICommandExec>)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - In externally visible method 'CommandsUtils.ExecuteAsyncCommandExec(IEnumerable<ICommandExec>)', validate parameter 'commands' before using it. - - - - - - - Parameter 'timeout' of 'CommandsUtils.ExecuteAsyncCommandExec(TimeSpan, IEnumerable<ICommandExec>)' is never used. Remove the parameter or use it in the method body. - - - In externally visible method 'CommandsUtils.ExecuteAsyncCommandExec(TimeSpan, IEnumerable<ICommandExec>)', validate parameter 'commands' before using it. - - - - - - - Change 'List<T>' in 'CommandsUtils.ExecuteAsyncCommandList<T>(TimeSpan, params ICommandList<T>[])' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'List<T>' in 'CommandsUtils.ExecuteAsyncCommandList<T>(TimeSpan, IEnumerable<ICommandList<T>>)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - Consider a design where 'CommandsUtils.ExecuteAsyncCommandList<T>(TimeSpan, IEnumerable<ICommandList<T>>)' doesn't nest generic type 'IEnumerable<ICommandList<T>>'. - - - In externally visible method 'CommandsUtils.ExecuteAsyncCommandList<T>(TimeSpan, IEnumerable<ICommandList<T>>)', validate parameter 'commands' before using it. - - - - - - - - - Correct the spelling of 'Utils' in type name 'CryptUtils'. - - - - - - - In method 'CryptUtils.CreatePublicAndPrivateKeyPair()', call System.IDisposable.Dispose on object 'rsaProvider' before all references to it are out of scope. - - - - - - - Replace method 'CryptUtils.CreatePublicAndPrivateKeyPair(RsaKeyLengths)' with an overload that supplies all default arguments. - - - In method 'CryptUtils.CreatePublicAndPrivateKeyPair(RsaKeyLengths)', call System.IDisposable.Dispose on object 'rsaProvider' before all references to it are out of scope. - - - - - - - Method 'CryptUtils.Decrypt(this string)' passes 'No KeyPair given for encryption in CryptUtils' as the 'paramName' argument to a 'ArgumentNullException' constructor. Replace this argument with one of the method's parameter names. Note that the provided parameter name should have the exact casing as declared on the method. - - - - - - - Replace method 'CryptUtils.Decrypt(string, string, RsaKeyLengths)' with an overload that supplies all default arguments. - - - In method 'CryptUtils.Decrypt(string, string, RsaKeyLengths)', call System.IDisposable.Dispose on object 'rsaCryptoServiceProvider' before all references to it are out of scope. - - - In externally visible method 'CryptUtils.Decrypt(string, string, RsaKeyLengths)', validate parameter 'data' before using it. - - - - - - - Method 'CryptUtils.Encrypt(this string)' passes 'No KeyPair given for encryption in CryptUtils' as the 'paramName' argument to a 'ArgumentNullException' constructor. Replace this argument with one of the method's parameter names. Note that the provided parameter name should have the exact casing as declared on the method. - - - - - - - Replace method 'CryptUtils.Encrypt(string, string, RsaKeyLengths)' with an overload that supplies all default arguments. - - - In method 'CryptUtils.Encrypt(string, string, RsaKeyLengths)', call System.IDisposable.Dispose on object 'SHA1.Create()' before all references to it are out of scope. - In method 'CryptUtils.Encrypt(string, string, RsaKeyLengths)', call System.IDisposable.Dispose on object 'rsaCryptoServiceProvider' before all references to it are out of scope. - - - - - - - Consider making 'CryptUtils.KeyPair' non-public or a constant. - - - - - - - Consider making 'CryptUtils.Length' non-public or a constant. - - - - - - - - - - - Consider changing the type of parameter 'rootDirPath' in 'DirectoryInfoExtensions.GetMatchingFiles(this DirectoryInfo, string)' from 'DirectoryInfo' to its base type 'FileSystemInfo'. This method appears to only require base class members in its implementation. Suppress this violation if there is a compelling reason to require the more derived type in the method signature. - - - In method 'DirectoryInfoExtensions.GetMatchingFiles(this DirectoryInfo, string)', correct the spelling of 'Dir' in parameter name 'rootDirPath' or remove it entirely if it represents any sort of Hungarian notation. - - - In externally visible method 'DirectoryInfoExtensions.GetMatchingFiles(this DirectoryInfo, string)', validate parameter 'rootDirPath' before using it. - - - - - - - In method 'DirectoryInfoExtensions.GetMatchingFiles(string, string)', correct the spelling of 'Dir' in parameter name 'rootDirPath' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - - - - - Modify 'DisposableExtensions.Dispose(this IEnumerable<IDisposable>, ILog)' to catch a more specific exception than 'Exception' or rethrow the exception. - - - Because the behavior of 'string.Format(string, object)' could vary based on the current user's locale settings, replace this call in 'DisposableExtensions.Dispose(this IEnumerable<IDisposable>, ILog)' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - In externally visible method 'DisposableExtensions.Dispose(this IEnumerable<IDisposable>, ILog)', validate parameter 'resources' before using it. - - - - - - - In externally visible method 'DisposableExtensions.Run<T>(this T, Action<T>)', validate parameter 'runActionThenDispose' before using it. - - - - - - - - - - - In externally visible method 'EnumerableExtensions.Each<T>(this IEnumerable<T>, Action<T>)', validate parameter 'action' before using it. - - - - - - - In externally visible method 'EnumerableExtensions.Each<T>(this IEnumerable<T>, Action<int, T>)', validate parameter 'action' before using it. - - - - - - - In externally visible method 'EnumerableExtensions.FirstNonDefault<T>(this IEnumerable<T>)', validate parameter 'values' before using it. - - - - - - - In externally visible method 'EnumerableExtensions.FirstNonDefaultOrEmpty(this IEnumerable<string>)', validate parameter 'values' before using it. - - - - - - - Change 'List<To>' in 'EnumerableExtensions.Map<To>(this IEnumerable, Func<object, To>)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - On method 'EnumerableExtensions.Map<To>(this IEnumerable, Func<object, To>)', prefix generic type parameter name 'To' with 'T'. - - - In externally visible method 'EnumerableExtensions.Map<To>(this IEnumerable, Func<object, To>)', validate parameter 'converter' before using it. - - - - - - - Change 'List<To>' in 'EnumerableExtensions.Map<To, From>(this IEnumerable<From>, Func<From, To>)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - On method 'EnumerableExtensions.Map<To, From>(this IEnumerable<From>, Func<From, To>)', prefix generic type parameter name 'From' with 'T'. - On method 'EnumerableExtensions.Map<To, From>(this IEnumerable<From>, Func<From, To>)', prefix generic type parameter name 'To' with 'T'. - - - In externally visible method 'EnumerableExtensions.Map<To, From>(this IEnumerable<From>, Func<From, To>)', validate parameter 'converter' before using it. - - - - - - - Consider a design where 'EnumerableExtensions.ToDictionary<T, TKey, TValue>(this IEnumerable<T>, Func<T, KeyValuePair<TKey, TValue>>)' doesn't nest generic type 'Func<T, KeyValuePair<TKey, TValue>>'. - - - In externally visible method 'EnumerableExtensions.ToDictionary<T, TKey, TValue>(this IEnumerable<T>, Func<T, KeyValuePair<TKey, TValue>>)', validate parameter 'list' before using it. - - - In externally visible method 'EnumerableExtensions.ToDictionary<T, TKey, TValue>(this IEnumerable<T>, Func<T, KeyValuePair<TKey, TValue>>)', validate parameter 'map' before using it. - - - - - - - Change 'List<object>' in 'EnumerableExtensions.ToObjects<T>(this IEnumerable<T>)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - In externally visible method 'EnumerableExtensions.ToObjects<T>(this IEnumerable<T>)', validate parameter 'items' before using it. - - - - - - - In method 'EnumerableExtensions.ToSafeDictionary<T, TKey>(this IEnumerable<T>, Func<T, TKey>)', correct the spelling of 'expr' in parameter name 'expr' or remove it entirely if it represents any sort of Hungarian notation. - - - In externally visible method 'EnumerableExtensions.ToSafeDictionary<T, TKey>(this IEnumerable<T>, Func<T, TKey>)', validate parameter 'expr' before using it. - - - - - - - - - - - Method 'EnumExtensions.Add<T>(this Enum, T)' passes a literal string as parameter 'text' of a call to 'StringExtensions.Fmt(this string, params object[])'. Retrieve the following string(s) from a resource table instead: "Enums of type {0}". - - - In externally visible method 'EnumExtensions.Add<T>(this Enum, T)', validate parameter 'enum' before using it. - - - - - - - In externally visible method 'EnumExtensions.GetTypeCode(this Enum)', validate parameter 'enum' before using it. - - - - - - - Method 'EnumExtensions.Has<T>(this Enum, T)' passes a literal string as parameter 'text' of a call to 'StringExtensions.Fmt(this string, params object[])'. Retrieve the following string(s) from a resource table instead: "Enums of type {0}". - - - In externally visible method 'EnumExtensions.Has<T>(this Enum, T)', validate parameter 'enum' before using it. - - - - - - - Method 'EnumExtensions.Is<T>(this Enum, T)' passes a literal string as parameter 'text' of a call to 'StringExtensions.Fmt(this string, params object[])'. Retrieve the following string(s) from a resource table instead: "Enums of type {0}". - - - In externally visible method 'EnumExtensions.Is<T>(this Enum, T)', validate parameter 'enum' before using it. - - - - - - - Method 'EnumExtensions.Remove<T>(this Enum, T)' passes a literal string as parameter 'text' of a call to 'StringExtensions.Fmt(this string, params object[])'. Retrieve the following string(s) from a resource table instead: "Enums of type {0}". - - - In externally visible method 'EnumExtensions.Remove<T>(this Enum, T)', validate parameter 'enum' before using it. - - - - - - - In externally visible method 'EnumExtensions.ToDescription(this Enum)', validate parameter 'enum' before using it. - - - - - - - Change 'List<string>' in 'EnumExtensions.ToList(this Enum)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - In externally visible method 'EnumExtensions.ToList(this Enum)', validate parameter 'enum' before using it. - - - - - - - - - - - Modify 'ExecExtensions.ExecAll<T>(this IEnumerable<T>, Action<T>)' to catch a more specific exception than 'Exception' or rethrow the exception. - - - In externally visible method 'ExecExtensions.ExecAll<T>(this IEnumerable<T>, Action<T>)', validate parameter 'instances' before using it. - - - In externally visible method 'ExecExtensions.ExecAll<T>(this IEnumerable<T>, Action<T>)', validate parameter 'action' before using it. - - - - - - - Modify 'ExecExtensions.ExecAllWithFirstOut<T, TReturn>(this IEnumerable<T>, Func<T, TReturn>, ref TReturn)' to catch a more specific exception than 'Exception' or rethrow the exception. - - - Consider a design that does not require that 'firstResult' be a reference parameter. - - - In externally visible method 'ExecExtensions.ExecAllWithFirstOut<T, TReturn>(this IEnumerable<T>, Func<T, TReturn>, ref TReturn)', validate parameter 'instances' before using it. - - - In externally visible method 'ExecExtensions.ExecAllWithFirstOut<T, TReturn>(this IEnumerable<T>, Func<T, TReturn>, ref TReturn)', validate parameter 'action' before using it. - - - - - - - Modify 'ExecExtensions.ExecReturnFirstWithResult<T, TReturn>(this IEnumerable<T>, Func<T, TReturn>)' to catch a more specific exception than 'Exception' or rethrow the exception. - - - In externally visible method 'ExecExtensions.ExecReturnFirstWithResult<T, TReturn>(this IEnumerable<T>, Func<T, TReturn>)', validate parameter 'instances' before using it. - - - In externally visible method 'ExecExtensions.ExecReturnFirstWithResult<T, TReturn>(this IEnumerable<T>, Func<T, TReturn>)', validate parameter 'action' before using it. - - - - - - - Because the behavior of 'string.Format(string, object, object, object)' could vary based on the current user's locale settings, replace this call in 'ExecExtensions.LogError(Type, string, Exception)' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - In externally visible method 'ExecExtensions.LogError(Type, string, Exception)', validate parameter 'declaringType' before using it. - - - In externally visible method 'ExecExtensions.LogError(Type, string, Exception)', validate parameter 'ex' before using it. - - - - - - - In externally visible method 'ExecExtensions.RetryOnException(Action, int)', validate parameter 'action' before using it. - - - - - - - In member 'ExecExtensions.RetryOnException(Action, TimeSpan?)', the compound word 'timeOut' in parameter name 'timeOut' exists as a discrete term. If your usage is intended to be single word, case it as 'timeout' or strip the first token entirely if it represents any sort of Hungarian notation. - - - Modify 'ExecExtensions.RetryOnException(Action, TimeSpan?)' to catch a more specific exception than 'Exception' or rethrow the exception. - - - Because the behavior of 'string.Format(string, object)' could vary based on the current user's locale settings, replace this call in 'ExecExtensions.RetryOnException(Action, TimeSpan?)' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - In externally visible method 'ExecExtensions.RetryOnException(Action, TimeSpan?)', validate parameter 'action' before using it. - - - - - - - In member 'ExecExtensions.RetryUntilTrue(Func<bool>, TimeSpan?)', the compound word 'timeOut' in parameter name 'timeOut' exists as a discrete term. If your usage is intended to be single word, case it as 'timeout' or strip the first token entirely if it represents any sort of Hungarian notation. - - - Because the behavior of 'string.Format(string, object)' could vary based on the current user's locale settings, replace this call in 'ExecExtensions.RetryUntilTrue(Func<bool>, TimeSpan?)' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - In externally visible method 'ExecExtensions.RetryUntilTrue(Func<bool>, TimeSpan?)', validate parameter 'action' before using it. - - - - - - - - - Correct the spelling of 'Utils' in type name 'FuncUtils'. - - - - - - - Modify 'FuncUtils.TryExec(Action)' to catch a more specific exception than 'Exception' or rethrow the exception. - - - In externally visible method 'FuncUtils.TryExec(Action)', validate parameter 'action' before using it. - - - - - - - Modify 'FuncUtils.TryExec<T>(Func<T>, T)' to catch a more specific exception than 'Exception' or rethrow the exception. - - - Parameter 'defaultValue' of 'FuncUtils.TryExec<T>(Func<T>, T)' is never used. Remove the parameter or use it in the method body. - - - In externally visible method 'FuncUtils.TryExec<T>(Func<T>, T)', validate parameter 'func' before using it. - - - - - - - Replace method 'FuncUtils.WaitWhile(Func<bool>, int, int)' with an overload that supplies all default arguments. - - - In method 'FuncUtils.WaitWhile(Func<bool>, int, int)', correct the spelling of 'millsecond' in parameter name 'millsecondPollPeriod' or remove it entirely if it represents any sort of Hungarian notation. - - - In externally visible method 'FuncUtils.WaitWhile(Func<bool>, int, int)', validate parameter 'condition' before using it. - - - - - - - - - - - Initialize all static fields in 'HasId<TEntity>' when those fields are declared and remove the explicit static constructor. - - - - - - - - - - - Initialize all static fields in 'HasPropertyId<TEntity>' when those fields are declared and remove the explicit static constructor. - - - - - - - - - Correct the spelling of 'Utils' in type name 'IdUtils'. - - - - - - - Consider a design where 'IdUtils.CreateCacheKeyPath<T>(string)' doesn't require explicit type parameter 'T' in any call to it. - - - Because the behavior of 'string.Format(string, params object[])' could vary based on the current user's locale settings, replace this call in 'IdUtils.CreateCacheKeyPath<T>(string)' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - In externally visible method 'IdUtils.CreateCacheKeyPath<T>(string)', validate parameter 'idValue' before using it. - - - - - - - Consider changing the type of parameter 'type' in 'IdUtils.CreateUrn(Type, object)' from 'Type' to its base type 'MemberInfo'. This method appears to only require base class members in its implementation. Suppress this violation if there is a compelling reason to require the more derived type in the method signature. - - - In method 'IdUtils.CreateUrn(Type, object)', replace the call to 'string.ToLowerInvariant()' with String.ToUpperInvariant(). - - - Because the behavior of 'string.Format(string, object, object)' could vary based on the current user's locale settings, replace this call in 'IdUtils.CreateUrn(Type, object)' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - Change the return type of 'IdUtils.CreateUrn(Type, object)' from string to System.Uri. - - - In externally visible method 'IdUtils.CreateUrn(Type, object)', validate parameter 'type' before using it. - - - - - - - In method 'IdUtils.CreateUrn<T>(this T)', replace the call to 'string.ToLowerInvariant()' with String.ToUpperInvariant(). - - - Because the behavior of 'string.Format(string, object, object)' could vary based on the current user's locale settings, replace this call in 'IdUtils.CreateUrn<T>(this T)' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - Change the return type of 'IdUtils.CreateUrn<T>(this T)' from string to System.Uri. - - - - - - - Consider a design where 'IdUtils.CreateUrn<T>(object)' doesn't require explicit type parameter 'T' in any call to it. - - - In method 'IdUtils.CreateUrn<T>(object)', replace the call to 'string.ToLowerInvariant()' with String.ToUpperInvariant(). - - - Because the behavior of 'string.Format(string, object, object)' could vary based on the current user's locale settings, replace this call in 'IdUtils.CreateUrn<T>(object)' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - Change the return type of 'IdUtils.CreateUrn<T>(object)' from string to System.Uri. - - - - - - - In externally visible method 'IdUtils.GetObjectId(this object)', validate parameter 'entity' before using it. - - - - - - - Consider a design where 'IdUtils.ToSafePathCacheKey<T>(this string)' doesn't require explicit type parameter 'T' in any call to it. - - - - - - - Change the return type of 'IdUtils.ToUrn<T>(this T)' from string to System.Uri. - - - - - - - Consider a design where 'IdUtils.ToUrn<T>(this object)' doesn't require explicit type parameter 'T' in any call to it. - - - Change the return type of 'IdUtils.ToUrn<T>(this object)' from string to System.Uri. - - - - - - - - - Correct the spelling of 'Utils' in type name 'IdUtils<T>'. - - - - - - - Initialize all static fields in 'IdUtils<T>' when those fields are declared and remove the explicit static constructor. - - - - - - - Remove 'IdUtils<T>.GetId(T)' from 'IdUtils<T>' or make it an instance member. - - - - - - - - - - - Change either member or parameter name 'times' so that one differs from the other. - - - - - - - In member 'IntExtensions.Times(this int, Action)', correct the casing of 'Fn' in parameter name 'actionFn' by changing it to 'FN'. - - - In method 'IntExtensions.Times(this int, Action)', correct the spelling of 'Fn' in parameter name 'actionFn' or remove it entirely if it represents any sort of Hungarian notation. - - - Change either member or parameter name 'times' so that one differs from the other. - - - In externally visible method 'IntExtensions.Times(this int, Action)', validate parameter 'actionFn' before using it. - - - - - - - In member 'IntExtensions.Times(this int, Action<int>)', correct the casing of 'Fn' in parameter name 'actionFn' by changing it to 'FN'. - - - In method 'IntExtensions.Times(this int, Action<int>)', correct the spelling of 'Fn' in parameter name 'actionFn' or remove it entirely if it represents any sort of Hungarian notation. - - - Change either member or parameter name 'times' so that one differs from the other. - - - In externally visible method 'IntExtensions.Times(this int, Action<int>)', validate parameter 'actionFn' before using it. - - - - - - - Change 'List<T>' in 'IntExtensions.Times<T>(this int, Func<T>)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - In member 'IntExtensions.Times<T>(this int, Func<T>)', correct the casing of 'Fn' in parameter name 'actionFn' by changing it to 'FN'. - - - In method 'IntExtensions.Times<T>(this int, Func<T>)', correct the spelling of 'Fn' in parameter name 'actionFn' or remove it entirely if it represents any sort of Hungarian notation. - - - Change either member or parameter name 'times' so that one differs from the other. - - - In externally visible method 'IntExtensions.Times<T>(this int, Func<T>)', validate parameter 'actionFn' before using it. - - - - - - - Change 'List<T>' in 'IntExtensions.Times<T>(this int, Func<int, T>)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - In member 'IntExtensions.Times<T>(this int, Func<int, T>)', correct the casing of 'Fn' in parameter name 'actionFn' by changing it to 'FN'. - - - In method 'IntExtensions.Times<T>(this int, Func<int, T>)', correct the spelling of 'Fn' in parameter name 'actionFn' or remove it entirely if it represents any sort of Hungarian notation. - - - Change either member or parameter name 'times' so that one differs from the other. - - - In externally visible method 'IntExtensions.Times<T>(this int, Func<int, T>)', validate parameter 'actionFn' before using it. - - - - - - - Change 'List<IAsyncResult>' in 'IntExtensions.TimesAsync(this int, Action)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - In member 'IntExtensions.TimesAsync(this int, Action)', correct the casing of 'Fn' in parameter name 'actionFn' by changing it to 'FN'. - - - In method 'IntExtensions.TimesAsync(this int, Action)', correct the spelling of 'Fn' in parameter name 'actionFn' or remove it entirely if it represents any sort of Hungarian notation. - - - In externally visible method 'IntExtensions.TimesAsync(this int, Action)', validate parameter 'actionFn' before using it. - - - - - - - Change 'List<IAsyncResult>' in 'IntExtensions.TimesAsync(this int, Action<int>)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - In member 'IntExtensions.TimesAsync(this int, Action<int>)', correct the casing of 'Fn' in parameter name 'actionFn' by changing it to 'FN'. - - - In method 'IntExtensions.TimesAsync(this int, Action<int>)', correct the spelling of 'Fn' in parameter name 'actionFn' or remove it entirely if it represents any sort of Hungarian notation. - - - In externally visible method 'IntExtensions.TimesAsync(this int, Action<int>)', validate parameter 'actionFn' before using it. - - - - - - - - - - - Modify 'IPAddressExtensions.GetAllNetworkInterfaceIpv4Addresses()' to catch a more specific exception than 'object' or rethrow the exception. - - - Change 'IPAddressExtensions.GetAllNetworkInterfaceIpv4Addresses()' to a property if appropriate. - - - - - - - Modify 'IPAddressExtensions.GetAllNetworkInterfaceIpv6Addresses()' to catch a more specific exception than 'object' or rethrow the exception. - - - Change 'List<IPAddress>' in 'IPAddressExtensions.GetAllNetworkInterfaceIpv6Addresses()' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - Change 'IPAddressExtensions.GetAllNetworkInterfaceIpv6Addresses()' to a property if appropriate. - - - - - - - In externally visible method 'IPAddressExtensions.GetBroadcastAddress(this IPAddress, IPAddress)', validate parameter 'address' before using it. - - - In externally visible method 'IPAddressExtensions.GetBroadcastAddress(this IPAddress, IPAddress)', validate parameter 'subnetMask' before using it. - - - - - - - In externally visible method 'IPAddressExtensions.GetNetworkAddress(this IPAddress, IPAddress)', validate parameter 'address' before using it. - - - In externally visible method 'IPAddressExtensions.GetNetworkAddress(this IPAddress, IPAddress)', validate parameter 'subnetMask' before using it. - - - - - - - In method 'IPAddressExtensions.GetNetworkAddressBytes(byte[], byte[])', correct the spelling of 'Adress' in parameter name 'ipAdressBytes' or remove it entirely if it represents any sort of Hungarian notation. - - - In method 'IPAddressExtensions.GetNetworkAddressBytes(byte[], byte[])', correct the spelling of 'ip' in parameter name 'ipAdressBytes' or remove it entirely if it represents any sort of Hungarian notation. - - - In member 'IPAddressExtensions.GetNetworkAddressBytes(byte[], byte[])', consider replacing the data type identifier 'Bytes' in parameter name 'ipAdressBytes' with a more generic term, such as 'value'. - In member 'IPAddressExtensions.GetNetworkAddressBytes(byte[], byte[])', consider replacing the data type identifier 'Bytes' in parameter name 'subnetMaskBytes' with a more generic term, such as 'value'. - - - In externally visible method 'IPAddressExtensions.GetNetworkAddressBytes(byte[], byte[])', validate parameter 'ipAdressBytes' before using it. - - - In externally visible method 'IPAddressExtensions.GetNetworkAddressBytes(byte[], byte[])', validate parameter 'subnetMaskBytes' before using it. - - - - - - - In member 'IPAddressExtensions.IsInSameIpv4Subnet(this byte[], byte[], byte[])', consider replacing the data type identifier 'Bytes' in parameter name 'address1Bytes' with a more generic term, such as 'value'. - In member 'IPAddressExtensions.IsInSameIpv4Subnet(this byte[], byte[], byte[])', consider replacing the data type identifier 'Bytes' in parameter name 'address2Bytes' with a more generic term, such as 'value'. - In member 'IPAddressExtensions.IsInSameIpv4Subnet(this byte[], byte[], byte[])', consider replacing the data type identifier 'Bytes' in parameter name 'subnetMaskBytes' with a more generic term, such as 'value'. - - - In externally visible method 'IPAddressExtensions.IsInSameIpv4Subnet(this byte[], byte[], byte[])', validate parameter 'address1Bytes' before using it. - - - In externally visible method 'IPAddressExtensions.IsInSameIpv4Subnet(this byte[], byte[], byte[])', validate parameter 'address2Bytes' before using it. - - - - - - - In externally visible method 'IPAddressExtensions.IsInSameIpv4Subnet(this IPAddress, IPAddress, IPAddress)', validate parameter 'address2' before using it. - - - In externally visible method 'IPAddressExtensions.IsInSameIpv4Subnet(this IPAddress, IPAddress, IPAddress)', validate parameter 'address' before using it. - - - - - - - In member 'IPAddressExtensions.IsInSameIpv6Subnet(this byte[], byte[])', consider replacing the data type identifier 'Bytes' in parameter name 'address1Bytes' with a more generic term, such as 'value'. - In member 'IPAddressExtensions.IsInSameIpv6Subnet(this byte[], byte[])', consider replacing the data type identifier 'Bytes' in parameter name 'address2Bytes' with a more generic term, such as 'value'. - - - In externally visible method 'IPAddressExtensions.IsInSameIpv6Subnet(this byte[], byte[])', validate parameter 'address1Bytes' before using it. - - - In externally visible method 'IPAddressExtensions.IsInSameIpv6Subnet(this byte[], byte[])', validate parameter 'address2Bytes' before using it. - - - - - - - In externally visible method 'IPAddressExtensions.IsInSameIpv6Subnet(this IPAddress, IPAddress)', validate parameter 'address2' before using it. - - - In externally visible method 'IPAddressExtensions.IsInSameIpv6Subnet(this IPAddress, IPAddress)', validate parameter 'address' before using it. - - - - - - - - - Rename type name 'MetadataAttribute' so that it does not end in 'Attribute'. - - - - - - - Change 'MetadataAttribute.Args' to be read-only by removing the property setter. - - - Change 'List<MetadataPropertyType>' in 'MetadataAttribute.Args' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'MetadataAttribute.ConstructorArgs' to be read-only by removing the property setter. - - - Change 'List<MetadataPropertyType>' in 'MetadataAttribute.ConstructorArgs' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - - - - - Change 'MetadataOperationType.Actions' to be read-only by removing the property setter. - - - Change 'List<string>' in 'MetadataOperationType.Actions' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - - - - - Change 'MetadataPropertyType.AllowableValues' to return a collection or make it a method. - - - - - - - Change 'MetadataPropertyType.Attributes' to be read-only by removing the property setter. - - - Change 'List<MetadataAttribute>' in 'MetadataPropertyType.Attributes' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'MetadataPropertyType.GenericArgs' to return a collection or make it a method. - - - - - - - Correct the spelling of 'Param' in member name 'MetadataPropertyType.ParamType' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - The property name 'MetadataPropertyType.Type' is confusing given the existence of inherited method 'object.GetType()'. Rename or remove this property. - - - - - - - - - - - Change 'MetadataType.Attributes' to be read-only by removing the property setter. - - - Change 'List<MetadataAttribute>' in 'MetadataType.Attributes' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'MetadataType.EnumNames' to be read-only by removing the property setter. - - - Change 'List<string>' in 'MetadataType.EnumNames' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'MetadataType.EnumValues' to be read-only by removing the property setter. - - - Change 'List<string>' in 'MetadataType.EnumValues' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'MetadataType.GenericArgs' to return a collection or make it a method. - - - - - - - Change 'MetadataType.GetFullName()' to a property if appropriate. - - - - - - - Change 'MetadataType.InnerTypes' to be read-only by removing the property setter. - - - Change 'List<MetadataTypeName>' in 'MetadataType.InnerTypes' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'MetadataType.Properties' to be read-only by removing the property setter. - - - Change 'List<MetadataPropertyType>' in 'MetadataType.Properties' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'MetadataType.Routes' to be read-only by removing the property setter. - - - Change 'List<MetadataRoute>' in 'MetadataType.Routes' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - - - - - Change 'MetadataTypeName.GenericArgs' to return a collection or make it a method. - - - - - - - - - - - Change 'MetadataTypes.Operations' to be read-only by removing the property setter. - - - Change 'List<MetadataOperationType>' in 'MetadataTypes.Operations' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'MetadataTypes.Types' to be read-only by removing the property setter. - - - Change 'List<MetadataType>' in 'MetadataTypes.Types' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - - - - - Replace method 'MetadataTypesConfig.MetadataTypesConfig(string, bool, bool, bool, bool, bool, bool, string, bool, bool, bool, int?)' with an overload that supplies all default arguments. - - - Change the type of parameter 'baseUrl' of method 'MetadataTypesConfig.MetadataTypesConfig(string, bool, bool, bool, bool, bool, bool, string, bool, bool, bool, int?)' from string to System.Uri, or provide an overload of 'MetadataTypesConfig.MetadataTypesConfig(string, bool, bool, bool, bool, bool, bool, string, bool, bool, bool, int?)', that allows 'baseUrl' to be passed as a System.Uri object. - - - - - - - Change the type of property 'MetadataTypesConfig.BaseUrl' from string to System.Uri. - - - - - - - Change 'MetadataTypesConfig.CSharpTypeAlias' to be read-only by removing the property setter. - - - - - - - Change 'MetadataTypesConfig.DefaultNamespaces' to be read-only by removing the property setter. - - - Change 'List<string>' in 'MetadataTypesConfig.DefaultNamespaces' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'MetadataTypesConfig.ExportAttributes' to be read-only by removing the property setter. - - - - - - - Change 'MetadataTypesConfig.FSharpTypeAlias' to be read-only by removing the property setter. - - - - - - - Change 'MetadataTypesConfig.IgnoreTypes' to be read-only by removing the property setter. - - - - - - - Change 'MetadataTypesConfig.IgnoreTypesInNamespaces' to be read-only by removing the property setter. - - - Change 'List<string>' in 'MetadataTypesConfig.IgnoreTypesInNamespaces' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'MetadataTypesConfig.VbNetKeyWords' to be read-only by removing the property setter. - - - The compound word 'KeyWords' in member name 'MetadataTypesConfig.VbNetKeyWords' exists as a discrete term. If your usage is intended to be single word, case it as 'Keywords' or strip the first token entirely if it represents any sort of Hungarian notation. - - - Correct the casing of 'Vb' in member name 'MetadataTypesConfig.VbNetKeyWords' by changing it to 'VB'. - - - Correct the spelling of 'Vb' in member name 'MetadataTypesConfig.VbNetKeyWords' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Change 'MetadataTypesConfig.VbNetTypeAlias' to be read-only by removing the property setter. - - - Correct the casing of 'Vb' in member name 'MetadataTypesConfig.VbNetTypeAlias' by changing it to 'VB'. - - - Correct the spelling of 'Vb' in member name 'MetadataTypesConfig.VbNetTypeAlias' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - - - Because type 'ModelConfig<T>' contains only 'static' members, mark it as 'static' to prevent the compiler from adding a default public constructor. - - - - - - - Remove 'ModelConfig<T>.Id(Func<T, object>)' from 'ModelConfig<T>' or make it an instance member. - - - In member 'ModelConfig<T>.Id(Func<T, object>)', correct the casing of 'Fn' in parameter name 'getIdFn' by changing it to 'FN'. - - - In method 'ModelConfig<T>.Id(Func<T, object>)', correct the spelling of 'Fn' in parameter name 'getIdFn' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - - - Correct the spelling of 'Perf' in type name 'PerfUtils'. - - - Correct the spelling of 'Utils' in type name 'PerfUtils'. - - - - - - - Remove the call to GC.Collect from 'PerfUtils.Measure(Action, int, int, Action, Action, Action)'. It is usually unnecessary to force garbage collection, and doing so can severely degrade performance. - - - In member 'PerfUtils.Measure(Action, int, int, Action, Action, Action)', the compound word 'ForMs' in parameter name 'runForMs' exists as a discrete term. If your usage is intended to be single word, case it as 'Forms' or strip the first token entirely if it represents any sort of Hungarian notation. - - - Replace method 'PerfUtils.Measure(Action, int, int, Action, Action, Action)' with an overload that supplies all default arguments. - - - In member 'PerfUtils.Measure(Action, int, int, Action, Action, Action)', correct the casing of 'Ms' in parameter name 'runForMs' by changing it to 'MS'. - - - In method 'PerfUtils.Measure(Action, int, int, Action, Action, Action)', correct the spelling of 'Ms' in parameter name 'runForMs' or remove it entirely if it represents any sort of Hungarian notation. - - - In method 'PerfUtils.Measure(Action, int, int, Action, Action, Action)', correct the spelling of 'fn' in parameter name 'fn' or remove it entirely if it represents any sort of Hungarian notation. - - - In method 'PerfUtils.Measure(Action, int, int, Action, Action, Action)', correct the spelling of 'warmup' in parameter name 'warmup' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - In member 'PerfUtils.MeasureFor(Action, int)', the compound word 'ForMs' in parameter name 'runForMs' exists as a discrete term. If your usage is intended to be single word, case it as 'Forms' or strip the first token entirely if it represents any sort of Hungarian notation. - - - In member 'PerfUtils.MeasureFor(Action, int)', correct the casing of 'Ms' in parameter name 'runForMs' by changing it to 'MS'. - - - In method 'PerfUtils.MeasureFor(Action, int)', correct the spelling of 'Ms' in parameter name 'runForMs' or remove it entirely if it represents any sort of Hungarian notation. - - - In method 'PerfUtils.MeasureFor(Action, int)', correct the spelling of 'fn' in parameter name 'fn' or remove it entirely if it represents any sort of Hungarian notation. - - - In externally visible method 'PerfUtils.MeasureFor(Action, int)', validate parameter 'fn' before using it. - - - - - - - - - Add a member to 'RsaKeyLengths' that has a value of zero with a suggested name of 'None'. - - - The constituent members of 'RsaKeyLengths' appear to represent flags that can be combined rather than discrete values. If this is correct, mark the enumeration with FlagsAttribute. - - - If the name 'RsaKeyLengths' is plural, change it to its singular form. - - - - - - - Correct the spelling of 'Utils' in type name 'StringUtils'. - - - - - - - Remove the read-only designation from 'StringUtils.HtmlCharacterCodes' or change the field to one that is an immutable reference type. If the reference type 'IDictionary<string, string>' is, in fact, immutable, exclude this message. - - - - - - - - - - - Because the behavior of 'string.Format(string, object, object)' could vary based on the current user's locale settings, replace this call in 'UrnId.Create(string, string)' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - In externally visible method 'UrnId.Create(string, string)', validate parameter 'objectTypeName' before using it. - - - In externally visible method 'UrnId.Create(string, string)', validate parameter 'idFieldValue' before using it. - - - - - - - Consider changing the type of parameter 'objectType' in 'UrnId.Create(Type, string)' from 'Type' to its base type 'MemberInfo'. This method appears to only require base class members in its implementation. Suppress this violation if there is a compelling reason to require the more derived type in the method signature. - - - Because the behavior of 'string.Format(string, object, object)' could vary based on the current user's locale settings, replace this call in 'UrnId.Create(Type, string)' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - In externally visible method 'UrnId.Create(Type, string)', validate parameter 'objectType' before using it. - - - In externally visible method 'UrnId.Create(Type, string)', validate parameter 'idFieldValue' before using it. - - - - - - - Consider changing the type of parameter 'objectType' in 'UrnId.Create(Type, string, string)' from 'Type' to its base type 'MemberInfo'. This method appears to only require base class members in its implementation. Suppress this violation if there is a compelling reason to require the more derived type in the method signature. - - - Because the behavior of 'string.Format(string, object, object, object)' could vary based on the current user's locale settings, replace this call in 'UrnId.Create(Type, string, string)' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - In externally visible method 'UrnId.Create(Type, string, string)', validate parameter 'objectType' before using it. - - - In externally visible method 'UrnId.Create(Type, string, string)', validate parameter 'idFieldName' before using it. - - - In externally visible method 'UrnId.Create(Type, string, string)', validate parameter 'idFieldValue' before using it. - - - - - - - Consider a design where 'UrnId.Create<T>(object)' doesn't require explicit type parameter 'T' in any call to it. - - - In externally visible method 'UrnId.Create<T>(object)', validate parameter 'idFieldValue' before using it. - - - - - - - Consider a design where 'UrnId.Create<T>(string)' doesn't require explicit type parameter 'T' in any call to it. - - - - - - - Consider a design where 'UrnId.Create<T>(string, string)' doesn't require explicit type parameter 'T' in any call to it. - - - - - - - Because the behavior of 'string.Format(string, object, object)' could vary based on the current user's locale settings, replace this call in 'UrnId.CreateWithParts(string, params string[])' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - In externally visible method 'UrnId.CreateWithParts(string, params string[])', validate parameter 'objectTypeName' before using it. - - - In externally visible method 'UrnId.CreateWithParts(string, params string[])', validate parameter 'keyParts' before using it. - - - - - - - Consider a design where 'UrnId.CreateWithParts<T>(params string[])' doesn't require explicit type parameter 'T' in any call to it. - - - - - - - Change the type of parameter 'urn' of method 'UrnId.GetGuidId(string)' from string to System.Uri, or provide an overload of 'UrnId.GetGuidId(string)', that allows 'urn' to be passed as a System.Uri object. - - - - - - - Consider replacing the language-specific data type identifier 'Long' in member name 'UrnId.GetLongId(string)' with either a language-independent equivalent or a more generic term, such as 'value'. - - - Because the behavior of 'long.Parse(string)' could vary based on the current user's locale settings, replace this call in 'UrnId.GetLongId(string)' with a call to 'long.Parse(string, IFormatProvider)'. If the result of 'long.Parse(string, IFormatProvider)' will be based on input from the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will based on input stored and accessed by software, such as when it is loaded from disk or from a database, specify 'CultureInfo.InvariantCulture'. - - - Change the type of parameter 'urn' of method 'UrnId.GetLongId(string)' from string to System.Uri, or provide an overload of 'UrnId.GetLongId(string)', that allows 'urn' to be passed as a System.Uri object. - - - - - - - Change the type of parameter 'urn' of method 'UrnId.GetStringId(string)' from string to System.Uri, or provide an overload of 'UrnId.GetStringId(string)', that allows 'urn' to be passed as a System.Uri object. - - - - - - - Change the type of parameter 'urnId' of method 'UrnId.Parse(string)' from string to System.Uri, or provide an overload of 'UrnId.Parse(string)', that allows 'urnId' to be passed as a System.Uri object. - - - In externally visible method 'UrnId.Parse(string)', validate parameter 'urnId' before using it. - - - - - - - - - - - In externally visible method 'XLinqExtensions.AllElements(this IEnumerable<XElement>, string)', validate parameter 'elements' before using it. - - - - - - - Consider changing the type of parameter 'element' in 'XLinqExtensions.AllElements(this XElement, string)' from 'XElement' to its base type 'XContainer'. This method appears to only require base class members in its implementation. Suppress this violation if there is a compelling reason to require the more derived type in the method signature. - - - - - - - In externally visible method 'XLinqExtensions.AnyElement(this IEnumerable<XElement>, string)', validate parameter 'elements' before using it. - - - - - - - Consider changing the type of parameter 'element' in 'XLinqExtensions.AnyElement(this XElement, string)' from 'XElement' to its base type 'XContainer'. This method appears to only require base class members in its implementation. Suppress this violation if there is a compelling reason to require the more derived type in the method signature. - - - - - - - Because the behavior of 'string.Format(string, object)' could vary based on the current user's locale settings, replace this call in 'XLinqExtensions.AssertElementHasValue(this XElement, string)' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - - - - - Consider changing the type of parameter 'element' in 'XLinqExtensions.FirstElement(this XElement)' from 'XElement' to its base type 'XContainer'. This method appears to only require base class members in its implementation. Suppress this violation if there is a compelling reason to require the more derived type in the method signature. - - - In externally visible method 'XLinqExtensions.FirstElement(this XElement)', validate parameter 'element' before using it. - - - - - - - In method 'XLinqExtensions.GetAttributeValueOrDefault<T>(this XAttribute, string, Func<XAttribute, T>)', correct the spelling of 'attr' in parameter name 'attr' or remove it entirely if it represents any sort of Hungarian notation. - - - Parameter 'name' of 'XLinqExtensions.GetAttributeValueOrDefault<T>(this XAttribute, string, Func<XAttribute, T>)' is never used. Remove the parameter or use it in the method body. - - - - - - - Consider replacing the language-specific data type identifier 'Bool' in member name 'XLinqExtensions.GetBool(this XElement, string)' with either a language-independent equivalent or a more generic term, such as 'value'. - - - - - - - Consider replacing the language-specific data type identifier 'Bool' in member name 'XLinqExtensions.GetBoolOrDefault(this XElement, string)' with either a language-independent equivalent or a more generic term, such as 'value'. - - - - - - - Consider replacing the language-specific data type identifier 'Int' in member name 'XLinqExtensions.GetInt(this XElement, string)' with either a language-independent equivalent or a more generic term, such as 'value'. - - - - - - - Consider replacing the language-specific data type identifier 'Int' in member name 'XLinqExtensions.GetIntOrDefault(this XElement, string)' with either a language-independent equivalent or a more generic term, such as 'value'. - - - - - - - Consider replacing the language-specific data type identifier 'Long' in member name 'XLinqExtensions.GetLong(this XElement, string)' with either a language-independent equivalent or a more generic term, such as 'value'. - - - - - - - Consider replacing the language-specific data type identifier 'Long' in member name 'XLinqExtensions.GetLongOrDefault(this XElement, string)' with either a language-independent equivalent or a more generic term, such as 'value'. - - - - - - - Change 'List<string>' in 'XLinqExtensions.GetValues(this IEnumerable<XElement>)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - In method 'XLinqExtensions.GetValues(this IEnumerable<XElement>)', correct the spelling of 'els' in parameter name 'els' or remove it entirely if it represents any sort of Hungarian notation. - - - In externally visible method 'XLinqExtensions.GetValues(this IEnumerable<XElement>)', validate parameter 'els' before using it. - - - - - - - - - - - - - - - In member 'DbConnectionFactory.DbConnectionFactory(Func<IDbConnection>)', correct the casing of 'Fn' in parameter name 'connectionFactoryFn' by changing it to 'FN'. - - - In method 'DbConnectionFactory.DbConnectionFactory(Func<IDbConnection>)', correct the spelling of 'Fn' in parameter name 'connectionFactoryFn' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - - - - - - - - - Replace method 'ConsoleLogFactory.ConsoleLogFactory(bool)' with an overload that supplies all default arguments. - - - - - - - - - - - Parameter 'type' of 'ConsoleLogger.ConsoleLogger(string)' is never used. Remove the parameter or use it in the method body. - - - - - - - Parameter 'type' of 'ConsoleLogger.ConsoleLogger(Type)' is never used. Remove the parameter or use it in the method body. - - - - - - - Method 'ConsoleLogger.Log(object, Exception)' passes a literal string as parameter 'value' of a call to 'Console.WriteLine(string)'. Retrieve the following string(s) from a resource table instead: ", Exception: ". - - - - - - - - - - - - - - - In externally visible method 'DelegateFactory.Create(MethodInfo)', validate parameter 'method' before using it. - - - - - - - In externally visible method 'DelegateFactory.CreateVoid(MethodInfo)', validate parameter 'method' before using it. - - - - - - - - - Do not nest type 'DelegateFactory.LateBoundMethod'. Alternatively, change its accessibility so that it is not externally visible. - - - - - - - Do not nest type 'DelegateFactory.LateBoundVoid'. Alternatively, change its accessibility so that it is not externally visible. - - - - - - - - - Correct the casing of 'Fn' in member name 'PropertyAccessor.GetPropertyFn<TEntity>(string)' by changing it to 'FN'. - - - Correct the spelling of 'Fn' in member name 'PropertyAccessor.GetPropertyFn<TEntity>(string)' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Correct the casing of 'Fn' in member name 'PropertyAccessor.SetPropertyFn<TEntity>(string)' by changing it to 'FN'. - - - Correct the spelling of 'Fn' in member name 'PropertyAccessor.SetPropertyFn<TEntity>(string)' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - - - - - Correct the casing of 'Fn' in member name 'PropertyAccessor<TEntity>.GetPropertyFn()' by changing it to 'FN'. - - - Correct the spelling of 'Fn' in member name 'PropertyAccessor<TEntity>.GetPropertyFn()' or remove it entirely if it represents any sort of Hungarian notation. - - - Change 'PropertyAccessor<TEntity>.GetPropertyFn()' to a property if appropriate. - - - - - - - Correct the casing of 'Fn' in member name 'PropertyAccessor<TEntity>.SetPropertyFn()' by changing it to 'FN'. - - - Correct the spelling of 'Fn' in member name 'PropertyAccessor<TEntity>.SetPropertyFn()' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Correct the casing of 'Fn' in member name 'PropertyAccessor<TEntity>.TypedGetPropertyFn<TId>()' by changing it to 'FN'. - - - Correct the spelling of 'Fn' in member name 'PropertyAccessor<TEntity>.TypedGetPropertyFn<TId>()' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Correct the casing of 'Fn' in member name 'PropertyAccessor<TEntity>.TypedSetPropertyFn<TId>()' by changing it to 'FN'. - - - Correct the spelling of 'Fn' in member name 'PropertyAccessor<TEntity>.TypedSetPropertyFn<TId>()' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Consider a design where 'PropertyAccessor<TEntity>.UnTypedGetPropertyFn<TId>()' doesn't require explicit type parameter 'TId' in any call to it. - - - Correct the casing of 'Fn' in member name 'PropertyAccessor<TEntity>.UnTypedGetPropertyFn<TId>()' by changing it to 'FN'. - - - Correct the casing of 'Un' in member name 'PropertyAccessor<TEntity>.UnTypedGetPropertyFn<TId>()' by changing it to 'UN'. - - - Correct the spelling of 'Fn' in member name 'PropertyAccessor<TEntity>.UnTypedGetPropertyFn<TId>()' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Consider a design where 'PropertyAccessor<TEntity>.UnTypedSetPropertyFn<TId>()' doesn't require explicit type parameter 'TId' in any call to it. - - - Correct the casing of 'Fn' in member name 'PropertyAccessor<TEntity>.UnTypedSetPropertyFn<TId>()' by changing it to 'FN'. - - - Correct the casing of 'Un' in member name 'PropertyAccessor<TEntity>.UnTypedSetPropertyFn<TId>()' by changing it to 'UN'. - - - Correct the spelling of 'Fn' in member name 'PropertyAccessor<TEntity>.UnTypedSetPropertyFn<TId>()' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Consider a design where 'PropertyAccessor<TEntity>.ValueTypedGetPropertyFn<TId>()' doesn't require explicit type parameter 'TId' in any call to it. - - - Correct the casing of 'Fn' in member name 'PropertyAccessor<TEntity>.ValueTypedGetPropertyFn<TId>()' by changing it to 'FN'. - - - Correct the spelling of 'Fn' in member name 'PropertyAccessor<TEntity>.ValueTypedGetPropertyFn<TId>()' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Consider a design where 'PropertyAccessor<TEntity>.ValueTypesSetPropertyFn<TId>()' doesn't require explicit type parameter 'TId' in any call to it. - - - Correct the casing of 'Fn' in member name 'PropertyAccessor<TEntity>.ValueTypesSetPropertyFn<TId>()' by changing it to 'FN'. - - - Correct the spelling of 'Fn' in member name 'PropertyAccessor<TEntity>.ValueTypesSetPropertyFn<TId>()' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - - - - - Remove 'StaticAccessors<TEntity>.TypedGetPropertyFn<TId>(PropertyInfo)' from 'StaticAccessors<TEntity>' or make it an instance member. - - - Correct the casing of 'Fn' in member name 'StaticAccessors<TEntity>.TypedGetPropertyFn<TId>(PropertyInfo)' by changing it to 'FN'. - - - Correct the spelling of 'Fn' in member name 'StaticAccessors<TEntity>.TypedGetPropertyFn<TId>(PropertyInfo)' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Remove 'StaticAccessors<TEntity>.TypedSetPropertyFn<TId>(PropertyInfo)' from 'StaticAccessors<TEntity>' or make it an instance member. - - - Correct the casing of 'Fn' in member name 'StaticAccessors<TEntity>.TypedSetPropertyFn<TId>(PropertyInfo)' by changing it to 'FN'. - - - Correct the spelling of 'Fn' in member name 'StaticAccessors<TEntity>.TypedSetPropertyFn<TId>(PropertyInfo)' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Remove 'StaticAccessors<TEntity>.UnTypedGetPropertyFn<TId>(PropertyInfo)' from 'StaticAccessors<TEntity>' or make it an instance member. - - - Consider a design where 'StaticAccessors<TEntity>.UnTypedGetPropertyFn<TId>(PropertyInfo)' doesn't require explicit type parameter 'TId' in any call to it. - - - Correct the casing of 'Fn' in member name 'StaticAccessors<TEntity>.UnTypedGetPropertyFn<TId>(PropertyInfo)' by changing it to 'FN'. - - - Correct the casing of 'Un' in member name 'StaticAccessors<TEntity>.UnTypedGetPropertyFn<TId>(PropertyInfo)' by changing it to 'UN'. - - - Correct the spelling of 'Fn' in member name 'StaticAccessors<TEntity>.UnTypedGetPropertyFn<TId>(PropertyInfo)' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Remove 'StaticAccessors<TEntity>.UnTypedSetPropertyFn<TId>(PropertyInfo)' from 'StaticAccessors<TEntity>' or make it an instance member. - - - Consider a design where 'StaticAccessors<TEntity>.UnTypedSetPropertyFn<TId>(PropertyInfo)' doesn't require explicit type parameter 'TId' in any call to it. - - - Correct the casing of 'Fn' in member name 'StaticAccessors<TEntity>.UnTypedSetPropertyFn<TId>(PropertyInfo)' by changing it to 'FN'. - - - Correct the casing of 'Un' in member name 'StaticAccessors<TEntity>.UnTypedSetPropertyFn<TId>(PropertyInfo)' by changing it to 'UN'. - - - Correct the spelling of 'Fn' in member name 'StaticAccessors<TEntity>.UnTypedSetPropertyFn<TId>(PropertyInfo)' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Remove 'StaticAccessors<TEntity>.ValueUnTypedGetPropertyFn<TId>(PropertyInfo)' from 'StaticAccessors<TEntity>' or make it an instance member. - - - Consider a design where 'StaticAccessors<TEntity>.ValueUnTypedGetPropertyFn<TId>(PropertyInfo)' doesn't require explicit type parameter 'TId' in any call to it. - - - Correct the casing of 'Fn' in member name 'StaticAccessors<TEntity>.ValueUnTypedGetPropertyFn<TId>(PropertyInfo)' by changing it to 'FN'. - - - Correct the casing of 'Un' in member name 'StaticAccessors<TEntity>.ValueUnTypedGetPropertyFn<TId>(PropertyInfo)' by changing it to 'UN'. - - - Correct the spelling of 'Fn' in member name 'StaticAccessors<TEntity>.ValueUnTypedGetPropertyFn<TId>(PropertyInfo)' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Remove 'StaticAccessors<TEntity>.ValueUnTypedGetPropertyTypeFn(PropertyInfo)' from 'StaticAccessors<TEntity>' or make it an instance member. - - - Correct the casing of 'Fn' in member name 'StaticAccessors<TEntity>.ValueUnTypedGetPropertyTypeFn(PropertyInfo)' by changing it to 'FN'. - - - Correct the casing of 'Un' in member name 'StaticAccessors<TEntity>.ValueUnTypedGetPropertyTypeFn(PropertyInfo)' by changing it to 'UN'. - - - Correct the spelling of 'Fn' in member name 'StaticAccessors<TEntity>.ValueUnTypedGetPropertyTypeFn(PropertyInfo)' or remove it entirely if it represents any sort of Hungarian notation. - - - In externally visible method 'StaticAccessors<TEntity>.ValueUnTypedGetPropertyTypeFn(PropertyInfo)', validate parameter 'pi' before using it. - - - - - - - Remove 'StaticAccessors<TEntity>.ValueUnTypedSetPropertyFn<TId>(PropertyInfo)' from 'StaticAccessors<TEntity>' or make it an instance member. - - - Consider a design where 'StaticAccessors<TEntity>.ValueUnTypedSetPropertyFn<TId>(PropertyInfo)' doesn't require explicit type parameter 'TId' in any call to it. - - - Correct the casing of 'Fn' in member name 'StaticAccessors<TEntity>.ValueUnTypedSetPropertyFn<TId>(PropertyInfo)' by changing it to 'FN'. - - - Correct the casing of 'Un' in member name 'StaticAccessors<TEntity>.ValueUnTypedSetPropertyFn<TId>(PropertyInfo)' by changing it to 'UN'. - - - Correct the spelling of 'Fn' in member name 'StaticAccessors<TEntity>.ValueUnTypedSetPropertyFn<TId>(PropertyInfo)' or remove it entirely if it represents any sort of Hungarian notation. - - - - - - - Remove 'StaticAccessors<TEntity>.ValueUnTypedSetPropertyTypeFn(PropertyInfo)' from 'StaticAccessors<TEntity>' or make it an instance member. - - - Correct the casing of 'Fn' in member name 'StaticAccessors<TEntity>.ValueUnTypedSetPropertyTypeFn(PropertyInfo)' by changing it to 'FN'. - - - Correct the casing of 'Un' in member name 'StaticAccessors<TEntity>.ValueUnTypedSetPropertyTypeFn(PropertyInfo)' by changing it to 'UN'. - - - Correct the spelling of 'Fn' in member name 'StaticAccessors<TEntity>.ValueUnTypedSetPropertyTypeFn(PropertyInfo)' or remove it entirely if it represents any sort of Hungarian notation. - - - In externally visible method 'StaticAccessors<TEntity>.ValueUnTypedSetPropertyTypeFn(PropertyInfo)', validate parameter 'pi' before using it. - - - - - - - - - - - - - - - In externally visible method 'AdapterBase.Execute(Action)', validate parameter 'action' before using it. - - - - - - - In externally visible method 'AdapterBase.Execute<T>(Func<T>)', validate parameter 'action' before using it. - - - - - - - - - - - Change 'List<T>' in 'CommandResultsHandler<T>.CommandResultsHandler(List<T>, ICommandList<T>, AutoResetEvent)' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - - - - - Because the behavior of 'string.Format(string, params object[])' could vary based on the current user's locale settings, replace this call in 'InMemoryLog.AppendToLog(ICollection<string>, string, params object[])' with a call to 'string.Format(IFormatProvider, string, params object[])'. If the result of 'string.Format(IFormatProvider, string, params object[])' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. - - - - - - - Change 'InMemoryLog.DebugEntries' to be read-only by removing the property setter. - - - Change 'List<string>' in 'InMemoryLog.DebugEntries' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'InMemoryLog.DebugExceptions' to be read-only by removing the property setter. - - - Change 'List<Exception>' in 'InMemoryLog.DebugExceptions' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'InMemoryLog.ErrorEntries' to be read-only by removing the property setter. - - - Change 'List<string>' in 'InMemoryLog.ErrorEntries' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'InMemoryLog.ErrorExceptions' to be read-only by removing the property setter. - - - Change 'List<Exception>' in 'InMemoryLog.ErrorExceptions' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'InMemoryLog.FatalEntries' to be read-only by removing the property setter. - - - Change 'List<string>' in 'InMemoryLog.FatalEntries' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'InMemoryLog.FatalExceptions' to be read-only by removing the property setter. - - - Change 'List<Exception>' in 'InMemoryLog.FatalExceptions' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'InMemoryLog.InfoEntries' to be read-only by removing the property setter. - - - Change 'List<string>' in 'InMemoryLog.InfoEntries' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'InMemoryLog.InfoExceptions' to be read-only by removing the property setter. - - - Change 'List<Exception>' in 'InMemoryLog.InfoExceptions' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'InMemoryLog.WarnEntries' to be read-only by removing the property setter. - - - Change 'List<string>' in 'InMemoryLog.WarnEntries' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - Change 'InMemoryLog.WarnExceptions' to be read-only by removing the property setter. - - - Change 'List<Exception>' in 'InMemoryLog.WarnExceptions' to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - - - - - - - - - - In externally visible method 'InMemoryLogFactory.GetLogger(Type)', validate parameter 'type' before using it. - - - - - - - - - - - - - - - Assemblies should have valid strong names - Either the assembly has no strong name, an invalid one, or the strong name is valid only because of the computer configuration. The assembly should not be deployed in this state. The most common causes of this are: 1) The assembly's contents were modified after it was signed. 2) The signing process failed. 3) The assembly was delay-signed. 4) A registry key existed that allowed the check to pass (where it would not have otherwise). - Sign {0} with a strong name key. - - http://msdn.microsoft.com/library/ms182127(VS.100).aspx - [none] - CriticalError - - - - Avoid calling problematic methods - Avoid making unnecessary and potentially dangerous method calls. - Remove the call to GC.Collect from {0}. It is usually unnecessary to force garbage collection, and doing so can severely degrade performance. - - http://msdn.microsoft.com/library/bb385973(VS.100).aspx - [none] - Error - - - - Avoid namespaces with few types - A namespace should generally have more than five types. - Consider merging the types defined in '{0}' with another namespace. - - http://msdn.microsoft.com/library/ms182130(VS.100).aspx - [none] - Warning - - - - Collection properties should be read only - Properties that return collections should be read-only so that users cannot entirely replace the backing store. Users can still modify the contents of the collection by calling relevant methods on the collection. Note that the XmlSerializer class has special support for deserializing read-only collections. See the XmlSerializer overview for more information. - Change {0} to be read-only by removing the property setter. - - http://msdn.microsoft.com/library/ms182327(VS.100).aspx - [none] - Warning - - - - Compound words should be cased correctly - Avoid creating compound words from terms which exist in the dictionary as discrete terms. Do not create a compound word such as 'StopWatch' or 'PopUp'. These terms are recognized in the dictionary and should be cased as 'Stopwatch' and 'Popup'. - In member {0}, the compound word '{1}' in parameter name {2} exists as a discrete term. If your usage is intended to be single word, case it as '{3}' or strip the first token entirely if it represents any sort of Hungarian notation. - The compound word '{0}' in member name {1} exists as a discrete term. If your usage is intended to be single word, case it as '{2}' or strip the first token entirely if it represents any sort of Hungarian notation. - - http://msdn.microsoft.com/library/bb264474(VS.100).aspx - [none] - Error - - - - Consider passing base types as parameters - Using base types as parameters to methods improves re-use of these methods if you only use methods & properties from the parameter's base class. E.g. use Stream instead of FileStream as a parameter when only calling Stream.Read(), this makes the method work on all kind of streams instead of just File streams. - Consider changing the type of parameter {0} in {1} from {2} to its base type {3}. This method appears to only require base class members in its implementation. Suppress this violation if there is a compelling reason to require the more derived type in the method signature. - - http://msdn.microsoft.com/library/3hk32yyz(VS.100).aspx - [none] - Error - - - - Declare types in namespaces - A type should be defined inside a namespace to avoid duplication. - {0} should be declared inside a namespace. - - http://msdn.microsoft.com/library/ms182134(VS.100).aspx - [none] - Error - - - - Default parameters should not be used - Some programming languages do not support default parameters. Replace default parameters with method overloads that supply the default argument. - Replace method {0} with an overload that supplies all default arguments. - - http://msdn.microsoft.com/library/ms182135(VS.100).aspx - [none] - Error - - - - Dispose objects before losing scope - If a disposable object is not explicitly disposed before all references to it are out of scope, the object will be disposed at some indeterminate time when the garbage collector runs the finalizer of the object. Because an exceptional event might occur that will prevent the finalizer of the object from running, the object should be explicitly disposed instead. - In method {0}, call System.IDisposable.Dispose on object {1} before all references to it are out of scope. - RuleOwner - http://msdn.microsoft.com/library/ms182289(VS.100).aspx - - Warning - - - - Do not pass literals as localized parameters - Literal strings that are embedded in source code are difficult to localize. Avoid passing literal strings as arguments in circumstances where a localized string is generally expected. - Method {0} passes a literal string as parameter '{1}' of a call to {2}. Retrieve the following string(s) from a resource table instead: {3}. - RuleOwner - http://msdn.microsoft.com/library/ms182187(VS.100).aspx - - Warning - - - - Do not catch general exception types - You should not catch Exception or SystemException. Catching generic exception types can hide run-time problems from the library user, and can complicate debugging. You should catch only those exceptions that you can handle gracefully. - Modify {0} to catch a more specific exception than {1} or rethrow the exception. - - http://msdn.microsoft.com/library/ms182137(VS.100).aspx - [none] - CriticalError - - - - Do not declare read only mutable reference types - A read-only declaration for a mutable reference type does not prevent the field's instance data from being modified. For example, a read-only StringBuilder field declaration does not make sense, since the data encapsulated by the StringBuilder can be modified using the read-only reference. - Remove the read-only designation from {0} or change the field to one that is an immutable reference type. If the reference type {1} is, in fact, immutable, exclude this message. - - http://msdn.microsoft.com/library/ms182302(VS.100).aspx - [none] - Error - - - - Do not declare static members on generic types - The syntax for calling static members on generic types is complex as the type parameter has to be specified for each call. - Remove {0} from {1} or make it an instance member. - - http://msdn.microsoft.com/library/ms182139(VS.100).aspx - [none] - Error - - - - Do not expose generic lists - Do not expose List<T> in object models. Use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> instead. List<T> is meant to be used from implementation, not in object model API. List<T> is optimized for performance at the cost of long term versioning. For example, if you return List<T> to the client code, you will not ever be able to receive notifications when client code modifies the collection. - Change {0} in {1} to use Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V> - - http://msdn.microsoft.com/library/ms182142(VS.100).aspx - [none] - Error - - - - Do not nest generic types in member signatures - Avoid API that require users to instantiate a generic type with another generic type as type argument. The syntax gets too complex. - Consider a design where {0} doesn't nest generic type {1}. - - http://msdn.microsoft.com/library/ms182144(VS.100).aspx - [none] - CriticalError - - - - Do not pass types by reference - Although there are legitimate times to use reference parameters, such use frequently indicates a design that does not conform to the design guidelines for managed code. - Consider a design that does not require that {0} be a reference parameter. - - http://msdn.microsoft.com/library/ms182146(VS.100).aspx - [none] - Warning - - - - Enums should have zero value - An enum should generally have a zero value. If the enum is not decorated with the Flags attribute, it should have a member with a value of zero that represents the empty state. Optionally, this value is named 'None'. For a Flags-attributed enum, a zero-valued member is optional and, if it exists, should always be named 'None'. This value should indicate that no values have been set in the enum. Using a zero-valued member for other purposes is contrary to the use of the Flags attribute in that the bitwise AND and OR operators are useless with the member. - Add a member to {0} that has a value of zero with a suggested name of 'None'. - - http://msdn.microsoft.com/library/ms182149(VS.100).aspx - [none] - CriticalError - - - - Generic methods should provide type parameter - Methods where the type parameter cannot be inferred from the parameters and therefore has to be defined in the method call are too difficult to understand. Methods with a formal parameter typed as the generic method type parameter support inference. Methods with no formal parameter typed as the generic method type parameter don't support inference. - Consider a design where {0} doesn't require explicit type parameter {1} in any call to it. - - http://msdn.microsoft.com/library/ms182150(VS.100).aspx - [none] - Warning - - - - Identifiers should be cased correctly - Type, namespace, and member identifiers are Pascal-cased. Parameter identifiers are camel-cased. Two letter acronyms within these identifiers should be upper-cased, for example, use System.IO instead of System.Io. Acronyms of three or more letters should be Pascal-cased, for example, use System.Xml instead of System.XML. The pascal-casing convention capitalizes the first letter of each word, as in BackColor. The camel-casing convention formats the first letter of the first word in lowercase and capitalizes the first letter of all subsequent words, as in backgroundColor. Although it may be common practice for some two letter acronyms to not be fully capitalized, violations of this rule should not be excluded for this reason. For example, 'DbConnection', is common but incorrect; use DBConnection. A violation of this rule might be required for compatibility with existing, non-managed symbol schemes. In general, however, these symbols should not be visible outside the assembly that uses them. - Correct the casing of '{0}' in member name {1} by changing it to '{2}'. - In member {0}, correct the casing of '{1}' in parameter name {2} by changing it to '{3}'. - - http://msdn.microsoft.com/library/ms182240(VS.100).aspx - [none] - Error - - - - Identifiers should be spelled correctly - The individual words that make up an identifier should not be abbreviated and should be spelled correctly. If this rule generates a false positive on a term that should be recognized, add the word to the FxCop custom dictionary. - Correct the spelling of '{0}' in member name {1} or remove it entirely if it represents any sort of Hungarian notation. - In method {0}, correct the spelling of '{1}' in parameter name {2} or remove it entirely if it represents any sort of Hungarian notation. - On method {0}, consider providing a more meaningful name than generic type parameter name {1}. - Correct the spelling of '{0}' in type name {1}. - - http://msdn.microsoft.com/library/bb264492(VS.100).aspx - [none] - CriticalWarning - - - - Identifiers should have correct prefix - Prefix interface names with the letter 'I' to indicate that the type is an interface, as in IFormattable. Prefix generic type parameter names with the letter 'T' and provide them with descriptive names, as in Dictionary<TKey, TValue>, unless a single 'T' is completely self-explanatory, as in Collection<T>. Use Pascal casing for both interface and type parameter names. Use abbreviations sparingly. Do not use the underscore character. Do use similar names when defining a class/interface pair where the class is a standard implementation of the interface. The names should differ only by the letter I prefixed on the interface name, as with Component and IComponent. - On method {0}, prefix generic type parameter name {1} with 'T'. - - http://msdn.microsoft.com/library/ms182243(VS.100).aspx - [none] - Error - - - - Identifiers should not contain type names - Avoid using language-specific types name in parameters and members and data type identifiers in parameters. Types names might not be intuitive for all developers. It is recommended that you select a generic name, such as 'value', instead. If this is not sufficient, be sure to use the type name as it is defined in the .NET Framework Library and avoid language-specific type names completely. Some examples of C#-specific type names are 'float' (use 'Single' if a generic name is not sufficient), and 'ulong' (use 'UInt64' if a generic name is not sufficient). - In member {0}, consider replacing the data type identifier '{1}' in parameter name {2} with a more generic term, such as 'value'. - Consider replacing the language-specific data type identifier '{0}' in member name {1} with either a language-independent equivalent or a more generic term, such as 'value'. - - http://msdn.microsoft.com/library/bb531486(VS.100).aspx - [none] - Error - - - - Identifiers should not have incorrect suffix - Types that do not extend certain base types should not use reserved name suffixes. Types and members should not use 'Ex' or 'New' to distinguish them from an earlier version of the same API, instead, use a numeric suffix such as '2' or provide a more meaningful suffix. Concrete type implementations and members should not end 'Impl'. Members instead, should either consider using the suggested alternate 'Core' in replacement of 'Impl' or avoid any suffix at all. - Rename type name {0} so that it does not end in '{1}'. - - http://msdn.microsoft.com/library/ms182247(VS.100).aspx - [none] - CriticalError - - - - Initialize reference type static fields inline - Static fields should be initialized when declared. Initializing static data in explicit static constructors results in less performant code. - Initialize all static fields in {0} when those fields are declared and remove the explicit static constructor. - - http://msdn.microsoft.com/library/ms182275(VS.100).aspx - [none] - CriticalWarning - - - - Instantiate argument exceptions correctly - String arguments passed to constructors of ArgumentException and its derived types should be correct. Types derived from ArgumentException have inconsistent constructor overloads with respect to the message and paramName parameters as compared to ArgumentException. - Method {0} passes '{1}' as the {2} argument to a {3} constructor. Replace this argument with one of the method's parameter names. Note that the provided parameter name should have the exact casing as declared on the method. - - http://msdn.microsoft.com/library/ms182347(VS.100).aspx - [none] - CriticalError - - - - Mark assemblies with CLSCompliantAttribute - Assemblies should explicitly state their CLS compliance using the CLSCompliant attribute. An assembly without this attribute is not CLS-compliant. Assemblies, modules, and types can be CLS-compliant even if some parts of the assembly, module, or type are not CLS-compliant. The following rules apply: 1) If the element is marked CLSCompliant, any noncompliant members must have the CLSCompliant attribute present with its argument set to false. 2) A comparable CLS-compliant alternative member must be supplied for each member that is not CLS-compliant. - Mark {0} with CLSCompliant(true) because it exposes externally visible types. - - http://msdn.microsoft.com/library/ms182156(VS.100).aspx - [none] - Error - - - - Mark enums with FlagsAttribute - The enumeration appears to be made up of combinable flags. If this true, apply the Flags attribute to the enumeration. - The constituent members of {0} appear to represent flags that can be combined rather than discrete values. If this is correct, mark the enumeration with FlagsAttribute. - - http://msdn.microsoft.com/library/ms182159(VS.100).aspx - [none] - Warning - - - - Nested types should not be visible - Do not use public, protected or protected internal (Protected Friend) nested types as a way of grouping types. Use namespaces for this purpose. There are very limited scenarios where nested types are the best design. Also, nested type member accessibility is not clearly understood by all audiences. Enumerators are exempt from this rule. - Do not nest type {0}. Alternatively, change its accessibility so that it is not externally visible. - - http://msdn.microsoft.com/library/ms182162(VS.100).aspx - [none] - Error - - - - Non-constant fields should not be visible - Static fields should be constant unless you carefully manage access to the field using locks. Using static variables without making them thread safe can compromise execution state. This rule applies to managed code libraries. If the analyzed assembly is an application, it is usually safe to exclude violations of this rule. - Consider making {0} non-public or a constant. - - http://msdn.microsoft.com/library/ms182353(VS.100).aspx - [none] - Warning - - - - Normalize strings to uppercase - Strings should be normalized to upper-case. - In method {0}, replace the call to {1} with String.ToUpperInvariant(). - - http://msdn.microsoft.com/library/bb386042(VS.100).aspx - [none] - Error - - - - Only FlagsAttribute enums should have plural names - Plural names indicate that the values of the enumeration can be combined. For example, an enumeration named 'Day' indicates a single day, and an enumeration named 'Days' indicates multiple days. Enumeration values should be combined using the bit-wise OR operator only if the Flags attribute is present on the enumeration. - If the name {0} is plural, change it to its singular form. - - http://msdn.microsoft.com/library/bb264487(VS.100).aspx - [none] - Error - - - - Parameter names should not match member names - Parameter names should be distinct from member names. - Change either member or parameter name {0} so that one differs from the other. - - http://msdn.microsoft.com/library/ms182252(VS.100).aspx - [none] - Error - - - - Properties should not return arrays - Properties that return arrays are prone to code inefficiencies. Consider using a collection or making this a method. See the design guidelines for more information. - Change {0} to return a collection or make it a method. - - http://msdn.microsoft.com/library/0fss9skc(VS.100).aspx - [none] - Warning - - - - Property names should not match get methods - A Get method was found with the same name as a property. Get methods and properties should have names that clearly distinguish their function. See the design guidelines for information regarding choosing properties over methods. - The property name {0} is confusing given the existence of inherited method {1}. Rename or remove this property. - - http://msdn.microsoft.com/library/ms182253(VS.100).aspx - [none] - Error - - - - Review unused parameters - Review parameters in non-virtual methods that are not used in the method body to ensure no correctness exists around failure to access them. Unused parameters incur maintenance and performance costs. Sometimes a violation of this rule can point to an implementation bug in the method (i.e. the parameter should actually have been used in the method body). Exclude warnings of this rule if the parameter has to exist because of backward compatibility. - Parameter {0} of {1} is never used. Remove the parameter or use it in the method body. - - http://msdn.microsoft.com/library/ms182268(VS.100).aspx - [none] - Warning - - - - Specify IFormatProvider - If an overload exists that takes an IFormatProvider argument, it should always be called in favor of an overload that does not. Some methods in the runtime convert a value to or from a string representation and take a string parameter that contains one or more characters, called format specifiers, which indicate how the value is to be converted. If the meaning of the format specifier varies by culture, a formatting object supplies the actual characters used in the string representation. In scenarios where sorting and comparison behavior should never change between cultures, specify CultureInfo.InvariantCulture, otherwise, specify CultureInfo.CurrentCulture. - Because the behavior of {0} could vary based on the current user's locale settings, replace this call in {1} with a call to {2}. If the result of {2} will be based on input from the user, specify {3} as the 'IFormatProvider' parameter. Otherwise, if the result will based on input stored and accessed by software, such as when it is loaded from disk or from a database, specify {4}. - Because the behavior of {0} could vary based on the current user's locale settings, replace this call in {1} with a call to {2}. If the result of {2} will be displayed to the user, specify {3} as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify {4}. - - http://msdn.microsoft.com/library/ms182190(VS.100).aspx - [none] - Error - - - - Static holder types should not have constructors - Instances of types that define only static members do not need to be created. Many compilers will automatically add a public default constructor if no constructor is specified. To prevent this, adding an empty private constructor may be required. - Because type {0} contains only 'static' members, mark it as 'static' to prevent the compiler from adding a default public constructor. - - http://msdn.microsoft.com/library/ms182169(VS.100).aspx - [none] - Error - - - - URI parameters should not be strings - If a parameter name contains "uri" or "url" or "urn", and it's typed as string, the parameter type should be changed to System.Uri, unless there is an overload method where the same parameter is typed as System.Uri. - Change the type of parameter {0} of method {1} from string to System.Uri, or provide an overload of {1}, that allows {0} to be passed as a System.Uri object. - - http://msdn.microsoft.com/library/ms182174(VS.100).aspx - [none] - Error - - - - URI properties should not be strings - If a property name contains "uri" or "url" or "urn" and it's typed as string, it should be changed to System.Uri. - Change the type of property {0} from string to System.Uri. - - http://msdn.microsoft.com/library/ms182175(VS.100).aspx - [none] - Error - - - - URI return values should not be strings - If a function name contains "uri" or "url" or "urn" and the return type is string, the return type should be changed to System.Uri. - Change the return type of {0} from string to System.Uri. - - http://msdn.microsoft.com/library/ms182176(VS.100).aspx - [none] - Error - - - - Use properties where appropriate - Properties should be used instead of Get/Set methods in most situations. Methods are preferable to properties in the following situations: the operation is a conversion, is expensive or has an observable side-effect; the order of execution is important; calling the member twice in succession creates different results; a member is static but returns a mutable value; or the member returns an array. - Change {0} to a property if appropriate. - - http://msdn.microsoft.com/library/ms182181(VS.100).aspx - [none] - Warning - - - - Validate arguments of public methods - All reference arguments passed to externally visible methods should be checked against null (Nothing in VB). If appropriate, throw a System.ArgumentNullException when the argument is null. - In externally visible method {0}, validate parameter '{1}' before using it. - RuleOwner - http://msdn.microsoft.com/library/ms182182(VS.100).aspx - - Warning - - - - - Category - Certainty - Collapse All - Check Id - Error - error(s) - Expand All - Help - Line - message(s) - [Location not stored in Pdb] - Project - Resolution - Rule - Rule File - Rule Description - Source - Status - Target - Warning - warning(s) - Code Analysis Report - - diff --git a/lib/ServiceStack.Common.xml b/lib/ServiceStack.Common.xml deleted file mode 100644 index eefa5dfbf09..00000000000 --- a/lib/ServiceStack.Common.xml +++ /dev/null @@ -1,231 +0,0 @@ - - - - ServiceStack.Common - - - - - Useful .NET Encryption Utils from: - http://andrewlocatelliwoodcock.com/2011/08/01/implementing-rsa-asymmetric-public-private-key-encryption-in-c-encrypting-under-the-public-key/ - - - - - Encrypt an arbitrary string of data under the supplied public key - - The public key to encrypt under - The data to encrypt - The bit length or strength of the public key: 1024, 2048 or 4096 bits. This must match the - value actually used to create the publicKey - - - - - Create Public and Private Key Pair based on settings already in static class. - - RsaKeyPair - - - - Return T[0] when enumerable is null, safe to use in enumerations like foreach - - - - - Gets the textual description of the enum if it has one. e.g. - - - enum UserColors - { - [Description("Bright Red")] - BrightRed - } - UserColors.BrightRed.ToDescription(); - - - - - - - - Creates a Console Logger, that logs all messages to: System.Console - - Made public so its testable - - - - - Default logger is to Console.WriteLine - - Made public so its testable - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - - - Logs the specified message. - - - - - Logs the format. - - - - - Logs the specified message. - - - - - Useful IPAddressExtensions from: - http://blogs.msdn.com/knom/archive/2008/12/31/ip-address-calculations-with-c-subnetmasks-networks.aspx - - - - - - Gets the ipv4 addresses from all Network Interfaces that have Subnet masks. - - - - - - Gets the ipv6 addresses from all Network Interfaces. - - - - - - Func to get the Strongly-typed field - - - - - Required to cast the return ValueType to an object for caching - - - - - Func to set the Strongly-typed field - - - - - Required to cast the ValueType to an object for caching - - - - - Required to cast the ValueType to an object for caching - - - - - Func to get the Strongly-typed field - - - - - Required to cast the return ValueType to an object for caching - - - - - Func to set the Strongly-typed field - - - - - Required to cast the ValueType to an object for caching - - - - - Required to cast the ValueType to an object for caching - - - - - Common functionality when creating adapters - - - - - Executes the specified expression. - - - The action. - - - - - Executes the specified action (for void methods). - - The action. - - - - Note: InMemoryLog keeps all logs in memory, so don't use it long running exceptions - - Returns a thread-safe InMemoryLog which you can use while *TESTING* - to provide a detailed analysis of your logs. - - - - - Creates a Unified Resource Name (URN) with the following formats: - - - urn:{TypeName}:{IdFieldValue} e.g. urn:UserSession:1 - - urn:{TypeName}:{IdFieldName}:{IdFieldValue} e.g. urn:UserSession:UserId:1 - - - - - - - Provide the an option for the callee to block until all commands are executed - - - - - - - Invokes the action provided and returns true if no excpetion was thrown. - Otherwise logs the exception and returns false if an exception was thrown. - - The action. - - - - - Runs an action for a minimum of runForMs - - What to run - Minimum ms to run for - time elapsed in micro seconds - - - - Returns average microseconds an action takes when run for the specified runForMs - - What to run - How many times to run for each iteration - Minimum ms to run for - - - - - - - diff --git a/lib/ServiceStack.Interfaces.dll b/lib/ServiceStack.Interfaces.dll deleted file mode 100644 index 6cb1ca37c07..00000000000 Binary files a/lib/ServiceStack.Interfaces.dll and /dev/null differ diff --git a/lib/ServiceStack.Interfaces.dll.CodeAnalysisLog.xml b/lib/ServiceStack.Interfaces.dll.CodeAnalysisLog.xml deleted file mode 100644 index d16d977efd1..00000000000 --- a/lib/ServiceStack.Interfaces.dll.CodeAnalysisLog.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - Category - Certainty - Collapse All - Check Id - Error - error(s) - Expand All - Help - Line - message(s) - [Location not stored in Pdb] - Project - Resolution - Rule - Rule File - Rule Description - Source - Status - Target - Warning - warning(s) - Code Analysis Report - - diff --git a/lib/ServiceStack.Interfaces.dll.mdb b/lib/ServiceStack.Interfaces.dll.mdb deleted file mode 100644 index 50e776e1d79..00000000000 Binary files a/lib/ServiceStack.Interfaces.dll.mdb and /dev/null differ diff --git a/lib/ServiceStack.Interfaces.xml b/lib/ServiceStack.Interfaces.xml deleted file mode 100644 index 8729e037bbd..00000000000 --- a/lib/ServiceStack.Interfaces.xml +++ /dev/null @@ -1,1722 +0,0 @@ - - - - ServiceStack.Interfaces - - - - - A common interface implementation that is implemented by most cache providers - - - - - Removes the specified item from the cache. - - The identifier for the item to delete. - - true if the item was successfully removed from the cache; false otherwise. - - - - - Removes the cache for all the keys provided. - - The keys. - - - - Retrieves the specified item from the cache. - - - The identifier for the item to retrieve. - - The retrieved item, or null if the key was not found. - - - - - Increments the value of the specified key by the given amount. - The operation is atomic and happens on the server. - A non existent value at key starts at 0 - - The identifier for the item to increment. - The amount by which the client wants to increase the item. - - The new value of the item or -1 if not found. - - The item must be inserted into the cache before it can be changed. The item must be inserted as a . The operation only works with values, so -1 always indicates that the item was not found. - - - - Increments the value of the specified key by the given amount. - The operation is atomic and happens on the server. - A non existent value at key starts at 0 - - The identifier for the item to increment. - The amount by which the client wants to decrease the item. - - The new value of the item or -1 if not found. - - The item must be inserted into the cache before it can be changed. The item must be inserted as a . The operation only works with values, so -1 always indicates that the item was not found. - - - - Adds a new item into the cache at the specified cache key only if the cache is empty. - - The key used to reference the item. - The object to be inserted into the cache. - - true if the item was successfully stored in the cache; false otherwise. - - The item does not expire unless it is removed due memory pressure. - - - - Sets an item into the cache at the cache key specified regardless if it already exists or not. - - - - - Replaces the item at the cachekey specified only if an items exists at the location already. - - - - - Invalidates all data on the cache. - - - - - Retrieves multiple items from the cache. - The default value of T is set for all keys that do not exist. - - The list of identifiers for the items to retrieve. - - a Dictionary holding all items indexed by their key. - - - - - Sets multiple items to the cache. - - - The values. - - - - Removes items from cache that have keys matching the specified wildcard pattern - - The wildcard, where "*" means any sequence of characters and "?" means any single character. - - - - Removes items from the cache based on the specified regular expression pattern - - Regular expression pattern to search cache keys - - - - A light interface over a cache client. - This interface was inspired by Enyim.Caching.MemcachedClient - - Only the methods that are intended to be used are required, if you require - extra functionality you can uncomment the unused methods below as they have been - implemented in DdnMemcachedClient - - - - - Removes the specified item from the cache. - - The identifier for the item to delete. - - true if the item was successfully removed from the cache; false otherwise. - - - - - Removes the cache for all the keys provided. - - The keys. - - - - Retrieves the specified item from the cache. - - The identifier for the item to retrieve. - - The retrieved item, or null if the key was not found. - - - - - Increments the value of the specified key by the given amount. The operation is atomic and happens on the server. - - The identifier for the item to increment. - The amount by which the client wants to increase the item. - - The new value of the item or -1 if not found. - - The item must be inserted into the cache before it can be changed. The item must be inserted as a . The operation only works with values, so -1 always indicates that the item was not found. - - - - Increments the value of the specified key by the given amount. The operation is atomic and happens on the server. - - The identifier for the item to increment. - The amount by which the client wants to decrease the item. - - The new value of the item or -1 if not found. - - The item must be inserted into the cache before it can be changed. The item must be inserted as a . The operation only works with values, so -1 always indicates that the item was not found. - - - - Inserts an item into the cache with a cache key to reference its location. - - The key used to reference the item. - The object to be inserted into the cache. - - true if the item was successfully stored in the cache; false otherwise. - - The item does not expire unless it is removed due memory pressure. - - - - Inserts an item into the cache with a cache key to reference its location. - - The key used to reference the item. - The object to be inserted into the cache. - The time when the item is invalidated in the cache. - true if the item was successfully stored in the cache; false otherwise. - - - - Removes all data from the cache. - - - - - Retrieves multiple items from the cache. - - The list of identifiers for the items to retrieve. - - a Dictionary holding all items indexed by their key. - - - - - A Users Session - - - - - Set a typed value at key - - - - - - - - Get a typed value at key - - - - - - - - Store any object at key - - - - - - - Retrieves a User Session - - - - - Gets the session for this request, creates one if it doesn't exist. - - - - - - - - Gets the session for this request, creates one if it doesn't exist. - Only for ASP.NET apps. Uses the HttpContext.Current singleton. - - - - - Allow delegation of dependencies to other IOC's - - - - - Resolve Property Dependency - - - - - - - Resolve Constructor Dependency - - - - - - - BelongToAttribute - Use to indicate that a join column belongs to another table. - - - - - Compute attribute. - Use to indicate that a property is a Calculated Field - - - - - Mark types that are to be excluded from specified features - - - - - Decimal length attribute. - - - - - Explicit foreign key name. If it's null, or empty, the FK name will be autogenerated as before. - - - - - IgnoreAttribute - Use to indicate that a property is not a field in the table - properties with this attribute are ignored when building sql sentences - - - - - Primary key attribute. - use to indicate that property is part of the pk - - - - - Used to indicate that property is a row version incremented automatically by the database - - - - - Used to annotate an Entity with its DB schema - - - - - - For providers that want a cleaner API with a little more perf - - - - - - Decorate any type or property with adhoc info - - - - - Contract indication that the Response DTO has a ResponseStatus - - - - - Creates a Debug Logger, that logs all messages to: System.Diagnostics.Debug - - Made public so its testable - - - - - Factory to create ILog instances - - - - - Gets the logger. - - - - - Gets the logger. - - - - - Default logger is to System.Diagnostics.Debug.WriteLine - - Made public so its testable - - - - - Logs a message in a running application - - - - - Logs a Debug message. - - The message. - - - - Logs a Debug message and exception. - - The message. - The exception. - - - - Logs a Debug format message. - - The format. - The args. - - - - Logs a Error message. - - The message. - - - - Logs a Error message and exception. - - The message. - The exception. - - - - Logs a Error format message. - - The format. - The args. - - - - Logs a Fatal message. - - The message. - - - - Logs a Fatal message and exception. - - The message. - The exception. - - - - Logs a Error format message. - - The format. - The args. - - - - Logs an Info message and exception. - - The message. - - - - Logs an Info message and exception. - - The message. - The exception. - - - - Logs an Info format message. - - The format. - The args. - - - - Logs a Warning message. - - The message. - - - - Logs a Warning message and exception. - - The message. - The exception. - - - - Logs a Warning format message. - - The format. - The args. - - - - Gets or sets a value indicating whether this instance is debug enabled. - - - true if this instance is debug enabled; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - - - Logs the specified message. - - - - - Logs the format. - - - - - Logs the specified message. - - - - - Default logger is to System.Diagnostics.Debug.Print - - Made public so its testable - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - - - Logs the specified message. - - - - - Logs the format. - - - - - Logs the specified message. - - - - - Creates a Debug Logger, that logs all messages to: System.Diagnostics.Debug - - Made public so its testable - - - - - StringBuilderLog writes to shared StringBuffer. - Made public so its testable - - - - - Logs the specified message. - - - - - Logs the format. - - - - - Logs the specified message. - - The message. - - - - Creates a test Logger, that stores all log messages in a member list - - - - - Tests logger which stores all log messages in a member list which can be examined later - - Made public so its testable - - - - - Initializes a new instance of the class. - - The type. - - - - Initializes a new instance of the class. - - The type. - - - - Logs the specified message. - - The message. - The exception. - - - - Logs the format. - - The message. - The args. - - - - Logs the specified message. - - The message. - - - - Logging API for this library. You can inject your own implementation otherwise - will use the DebugLogFactory to write to System.Diagnostics.Debug - - - - - Gets the logger. - - - - - Gets the logger. - - - - - Gets or sets the log factory. - Use this to override the factory that is used to create loggers - - - - - Publish the specified message into the durable queue @queueName - - - - - Publish the specified message into the transient queue @queueName - - - - - Synchronous blocking get. - - - - - Non blocking get message - - - - - Acknowledge the message has been successfully received or processed - - - - - Negative acknowledgement the message was not processed correctly - - - - - Create a typed message from a raw MQ Response artefact - - - - - Create a temporary Queue for Request / Reply - - - - - - Simple definition of an MQ Host - - - - - Register DTOs and hanlders the MQ Host will process - - - - - - - Register DTOs and hanlders the MQ Host will process - - - - - - - - Get Total Current Stats for all Message Handlers - - - - - - Get the status of the service. Potential Statuses: Disposed, Stopped, Stopping, Starting, Started - - - - - - Get a Stats dump - - - - - - Start the MQ Host if not already started. - - - - - Stop the MQ Host if not already stopped. - - - - - Factory to create consumers and producers that work with this service - - - - - Get a list of all message types registered on this MQ Host - - - - - Basic implementation of IMessage[T] - - - - - - Util static generic class to create unique queue names for types - - - - - - Util class to create unique queue names for runtime types - - - - - For messaging exceptions that should by-pass the messaging service's configured - retry attempts and store the message straight into the DLQ - - - - - Wrap the common redis list operations under a IList[string] interface. - - - - - Redis transaction for typed client - - - - - - interface to queueable operation using typed redis client - - - - - - Interface to redis typed pipeline - - - - - Pipeline interface shared by typed and non-typed pipelines - - - - - Interface to operations that allow queued commands to be completed - - - - - Returns a high-level typed client API - - - - - - Returns a Read/Write client (The default) using the hosts defined in ReadWriteHosts - - - - - - Returns a ReadOnly client using the hosts defined in ReadOnlyHosts. - - - - - - Returns a Read/Write ICacheClient (The default) using the hosts defined in ReadWriteHosts - - - - - - Returns a ReadOnly ICacheClient using the hosts defined in ReadOnlyHosts. - - - - - - Returns a Read/Write client (The default) using the hosts defined in ReadWriteHosts - - - - - - Returns a ReadOnly client using the hosts defined in ReadOnlyHosts. - - - - - - Returns a Read/Write ICacheClient (The default) using the hosts defined in ReadWriteHosts - - - - - - Returns a ReadOnly ICacheClient using the hosts defined in ReadOnlyHosts. - - - - - - Subscribe to channels by name - - - - - - Subscribe to channels matching the supplied patterns - - - - - - The number of active subscriptions this client has - - - - - Registered handler called after client *Subscribes* to each new channel - - - - - Registered handler called when each message is received - - - - - Registered handler called when each channel is unsubscribed - - - - - Interface to redis transaction - - - - - Base transaction interface, shared by typed and non-typed transactions - - - - - interface to operation that can queue commands - - - - - Interface to redis pipeline - - - - - Gets or sets parameter name with which allowable values will be associated. - - - - - The overall description of an API. Used by Swagger. - - - - - Gets or sets verb to which applies attribute. By default applies to all verbs. - - - - - Gets or sets parameter type: It can be only one of the following: path, query, body, model, or header. - - - - - Gets or sets unique name for the parameter. Each name must be unique, even if they are associated with different paramType values. - - - - Other notes on the name field: - If paramType is body, the name is used only for UI and codegeneration. - If paramType is path, the name field must correspond to the associated path segment from the path field in the api object. - If paramType is query, the name field corresponds to the query param name. - - - - - - Gets or sets the human-readable description for the parameter. - - - - - For path, query, and header paramTypes, this field must be a primitive. For body, this can be a complex or container datatype. - - - - - For path, this is always true. Otherwise, this field tells the client whether or not the field must be supplied. - - - - - For query params, this specifies that a comma-separated list of values can be passed to the API. For path and body types, this field cannot be true. - - - - - Gets or sets route to which applies attribute, matches using StartsWith. By default applies to all routes. - - - - - The status code of a response - - - - - The description of a response status code - - - - - Marker interfaces - - - - - Implement on Request DTOs that need access to the raw Request Stream - - - - - The raw Http Request Input Stream - - - - - Resolve a dependency from the AppHost's IOC - - - - - - - This interface can be implemented by an attribute - which adds an request filter for the specific request DTO the attribute marked. - - - - - The request filter is executed before the service. - - The http request wrapper - The http response wrapper - The request DTO - - - - A new shallow copy of this filter is used on every request. - - - - - - Order in which Request Filters are executed. - <0 Executed before global request filters - >0 Executed after global request filters - - - - - This interface can be implemented by an attribute - which adds an response filter for the specific response DTO the attribute marked. - - - - - The response filter is executed after the service - - The http request wrapper - The http response wrapper - - - - A new shallow copy of this filter is used on every request. - - - - - - Order in which Response Filters are executed. - <0 Executed before global response filters - >0 Executed after global response filters - - - - - The HTTP Response Status - - - - - The HTTP Response Status Code - - - - - The HTTP Status Description - - - - - The HTTP Response ContentType - - - - - Additional HTTP Headers - - - - - Response DTO - - - - - if not provided, get's injected by ServiceStack - - - - - Holds the request call context - - - - - The padding length written with the body, to be added to ContentLength of body - - - - - A thin wrapper around ASP.NET or HttpListener's HttpRequest - - - - - A thin wrapper around each host's Request e.g: ASP.NET, HttpListener, MQ, etc - - - - - The entire string contents of Request.InputStream - - - - - - The underlying ASP.NET or HttpListener HttpRequest - - - - - The name of the service being called (e.g. Request DTO Name) - - - - - The Verb / HttpMethod or Action for this request - - - - - Optional preferences for the processing of this Request - - - - - The Request DTO, after it has been deserialized. - - - - - The request ContentType - - - - - The expected Response ContentType for this request - - - - - Whether the ResponseContentType has been explicitly overrided or whether it was just the default - - - - - Attach any data to this request that all filters and services can access. - - - - - Buffer the Request InputStream so it can be re-read - - - - - The Remote Ip as reported by Request.UserHostAddress - - - - - The Remote Ip as reported by X-Forwarded-For, X-Real-IP or Request.UserHostAddress - - - - - e.g. is https or not - - - - - Access to the multi-part/formdata files posted on this request - - - - - The value of the Referrer, null if not available - - - - - The HttpResponse - - - - - The HTTP Verb - - - - - The IP Address of the X-Forwarded-For header, null if null or empty - - - - - The Port number of the X-Forwarded-Port header, null if null or empty - - - - - The http or https scheme of the X-Forwarded-Proto header, null if null or empty - - - - - The value of the X-Real-IP header, null if null or empty - - - - - A thin wrapper around ASP.NET or HttpListener's HttpResponse - - - - - A thin wrapper around each host's Response e.g: ASP.NET, HttpListener, MQ, etc - - - - - Write once to the Response Stream then close it. - - - - - - Signal that this response has been handled and no more processing should be done. - When used in a request or response filter, no more filters or processing is done on this request. - - - - - Calls Response.End() on ASP.NET HttpResponse otherwise is an alias for Close(). - Useful when you want to prevent ASP.NET to provide it's own custom error page. - - - - - Response.Flush() and OutputStream.Flush() seem to have different behaviour in ASP.NET - - - - - The underlying ASP.NET or HttpListener HttpResponse - - - - - The Response DTO - - - - - Buffer the Response OutputStream so it can be written in 1 batch - - - - - Gets a value indicating whether this instance is closed. - - - - - Log every service request - - - - - Log a request - - The RequestContext - Request DTO - Response DTO or Exception - How long did the Request take - - - - View the most recent logs - - - - - - - Turn On/Off Session Tracking - - - - - Turn On/Off Raw Request Body Tracking - - - - - Turn On/Off Tracking of Responses - - - - - Turn On/Off Tracking of Exceptions - - - - - Limit access to /requestlogs service to role - - - - - Don't log requests of these types. - - - - - Don't log request bodys for services with sensitive information. - By default Auth and Registration requests are hidden. - - - - - Implement on services that need access to the RequestContext - - - - - Responsible for executing the operation within the specified context. - - The operation types. - - - - Returns the first matching RestPath - - - - - Executes the MQ DTO request. - - - - - Executes the MQ DTO request with the supplied requestContext - - - - - Executes the DTO request under the supplied requestContext. - - - - - Executes the DTO request with an empty RequestContext. - - - - - Allow the registration of user-defined routes for services - - - - - Maps the specified REST path to the specified request DTO. - - The type of request DTO to map - the path to. - The path to map the request DTO to. - See RouteAttribute.Path - for details on the correct format. - The same instance; - never . - - - - Maps the specified REST path to the specified request DTO, and - specifies the HTTP verbs supported by the path. - - The type of request DTO to map - the path to. - The path to map the request DTO to. - See RouteAttribute.Path - for details on the correct format. - - The comma-delimited list of HTTP verbs supported by the path, - such as "GET,PUT,DELETE". Specify empty or - to indicate that all verbs are supported. - - The same instance; - never . - - - - Maps the specified REST path to the specified request DTO, - specifies the HTTP verbs supported by the path, and indicates - the default MIME type of the returned response. - - - The type of request DTO to map the path to. - - The path to map the request DTO to. - See RouteAttribute.Path - for details on the correct format. - - The comma-delimited list of HTTP verbs supported by the path, - such as "GET,PUT,DELETE". - - The same instance; - never . - - - - Maps the specified REST path to the specified request DTO, - specifies the HTTP verbs supported by the path, and indicates - the default MIME type of the returned response. - - - Used to rank the precedences of route definitions in reverse routing. - i.e. Priorities below 0 are auto-generated have less precedence. - - - - - Maps the specified REST path to the specified request DTO, - specifies the HTTP verbs supported by the path, and indicates - the default MIME type of the returned response. - - - The type of request DTO to map the path to. - - The path to map the request DTO to. - See RouteAttribute.Path - for details on the correct format. - - The comma-delimited list of HTTP verbs supported by the path, - such as "GET,PUT,DELETE". - - - The short summary of what the REST does. - - - The longer text to explain the behaviour of the REST. - - The same instance; - never . - - - - Used to decorate Request DTO's to associate a RESTful request - path mapping with a service. Multiple attributes can be applied to - each request DTO, to map multiple paths to the service. - - - - - Initializes an instance of the class. - - - The path template to map to the request. See - RouteAttribute.Path - for details on the correct format. - - - - - Initializes an instance of the class. - - - The path template to map to the request. See - RouteAttribute.Path - for details on the correct format. - - A comma-delimited list of HTTP verbs supported by the - service. If unspecified, all verbs are assumed to be supported. - - - - Gets or sets the path template to be mapped to the request. - - - A value providing the path mapped to - the request. Never . - - - Some examples of valid paths are: - - - "/Inventory" - "/Inventory/{Category}/{ItemId}" - "/Inventory/{ItemPath*}" - - - Variables are specified within "{}" - brackets. Each variable in the path is mapped to the same-named property - on the request DTO. At runtime, ServiceStack will parse the - request URL, extract the variable values, instantiate the request DTO, - and assign the variable values into the corresponding request properties, - prior to passing the request DTO to the service object for processing. - - It is not necessary to specify all request properties as - variables in the path. For unspecified properties, callers may provide - values in the query string. For example: the URL - "http://services/Inventory?Category=Books&ItemId=12345" causes the same - request DTO to be processed as "http://services/Inventory/Books/12345", - provided that the paths "/Inventory" (which supports the first URL) and - "/Inventory/{Category}/{ItemId}" (which supports the second URL) - are both mapped to the request DTO. - - Please note that while it is possible to specify property values - in the query string, it is generally considered to be less RESTful and - less desirable than to specify them as variables in the path. Using the - query string to specify property values may also interfere with HTTP - caching. - - The final variable in the path may contain a "*" suffix - to grab all remaining segments in the path portion of the request URL and assign - them to a single property on the request DTO. - For example, if the path "/Inventory/{ItemPath*}" is mapped to the request DTO, - then the request URL "http://services/Inventory/Books/12345" will result - in a request DTO whose ItemPath property contains "Books/12345". - You may only specify one such variable in the path, and it must be positioned at - the end of the path. - - - - - Gets or sets short summary of what the route does. - - - - - Gets or sets longer text to explain the behaviour of the route. - - - - - Gets or sets a comma-delimited list of HTTP verbs supported by the service, such as - "GET,PUT,POST,DELETE". - - - A providing a comma-delimited list of HTTP verbs supported - by the service, or empty if all verbs are supported. - - - - - Used to rank the precedences of route definitions in reverse routing. - i.e. Priorities below 0 are auto-generated have less precedence. - - - - - Fallback routes have the lowest precedence, i.e. after normal Routes, static files or any matching Catch All Handlers. - - - - - Generic ResponseStatus for when Response Type can't be inferred. - In schemaless formats like JSON, JSV it has the same shape as a typed Response DTO - - - - - A log entry added by the IRequestLogger - - - - - Decorate on Request DTO's to alter the accessibility of a service and its visibility on /metadata pages - - - - - Restrict access and metadata visibility to any of the specified access scenarios - - The restrict access to scenarios. - - - - Restrict access and metadata visibility to any of the specified access scenarios - - The restrict access to scenarios. - - - - Returns the allowed set of scenarios based on the user-specified restrictions - - - - - - - Allow access but hide from metadata to requests from Localhost only - - - - - Allow access but hide from metadata to requests from Localhost and Local Intranet only - - - - - Restrict access and hide from metadata to requests from Localhost only - - - - - Restrict access and hide from metadata to requests from Localhost and Local Intranet only - - - - - Restrict access and hide from metadata to requests from External only - - - - - Sets a single access restriction - - Restrict Access to. - - - - Restrict access to any of the specified access scenarios - - Access restrictions - - - - Sets a single metadata Visibility restriction - - Restrict metadata Visibility to. - - - - Restrict metadata visibility to any of the specified access scenarios - - Visibility restrictions - - - - Converts from a User intended restriction to a flag with all the allowed attribute flags set, e.g: - - If No Network restrictions were specified all Network access types are allowed, e.g: - restrict EndpointAttributes.None => ... 111 - - If a Network restriction was specified, only it will be allowed, e.g: - restrict EndpointAttributes.LocalSubnet => ... 010 - - The returned Enum will have a flag with all the allowed attributes set - - - - - - - Error information pertaining to a particular named field. - Used for returning multiple field validation errors.s - - - - - Common ResponseStatus class that should be present on all response DTO's - - - - - Initializes a new instance of the class. - - A response status without an errorcode == success - - - - - Initializes a new instance of the class. - - A response status with an errorcode == failure - - - - - Initializes a new instance of the class. - - A response status with an errorcode == failure - - - - - Holds the custom ErrorCode enum if provided in ValidationException - otherwise will hold the name of the Exception type, e.g. typeof(Exception).Name - - A value of non-null means the service encountered an error while processing the request. - - - - - A human friendly error message - - - - - - - - - - For multiple detailed validation errors. - Can hold a specific error message for each named field. - - - - - Write a partial content result - - - - - Whether this HttpResult allows Partial Response - - - - - Sends the specified request. - - The request. - - - - diff --git a/lib/ServiceStack.OrmLite.MySql.dll b/lib/ServiceStack.OrmLite.MySql.dll deleted file mode 100644 index bf49ecebbdb..00000000000 Binary files a/lib/ServiceStack.OrmLite.MySql.dll and /dev/null differ diff --git a/lib/ServiceStack.OrmLite.MySql.dll.config b/lib/ServiceStack.OrmLite.MySql.dll.config deleted file mode 100644 index f9b2ac342ff..00000000000 --- a/lib/ServiceStack.OrmLite.MySql.dll.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/lib/ServiceStack.OrmLite.PostgreSQL.dll b/lib/ServiceStack.OrmLite.PostgreSQL.dll deleted file mode 100644 index 6eaeb76e971..00000000000 Binary files a/lib/ServiceStack.OrmLite.PostgreSQL.dll and /dev/null differ diff --git a/lib/ServiceStack.OrmLite.SqlServer.dll b/lib/ServiceStack.OrmLite.SqlServer.dll deleted file mode 100644 index 5258c12e622..00000000000 Binary files a/lib/ServiceStack.OrmLite.SqlServer.dll and /dev/null differ diff --git a/lib/ServiceStack.OrmLite.Sqlite.Windows.dll b/lib/ServiceStack.OrmLite.Sqlite.Windows.dll deleted file mode 100644 index 613f4f2ac0d..00000000000 Binary files a/lib/ServiceStack.OrmLite.Sqlite.Windows.dll and /dev/null differ diff --git a/lib/ServiceStack.OrmLite.Sqlite.dll b/lib/ServiceStack.OrmLite.Sqlite.dll deleted file mode 100644 index e73db64ea3a..00000000000 Binary files a/lib/ServiceStack.OrmLite.Sqlite.dll and /dev/null differ diff --git a/lib/ServiceStack.OrmLite.dll b/lib/ServiceStack.OrmLite.dll deleted file mode 100644 index 3e57b18bfcb..00000000000 Binary files a/lib/ServiceStack.OrmLite.dll and /dev/null differ diff --git a/lib/ServiceStack.OrmLite.pdb b/lib/ServiceStack.OrmLite.pdb deleted file mode 100644 index 7c40f828585..00000000000 Binary files a/lib/ServiceStack.OrmLite.pdb and /dev/null differ diff --git a/lib/ServiceStack.OrmLite.xml b/lib/ServiceStack.OrmLite.xml deleted file mode 100644 index ce3527bf6f7..00000000000 --- a/lib/ServiceStack.OrmLite.xml +++ /dev/null @@ -1,2245 +0,0 @@ - - - - ServiceStack.OrmLite - - - - - Tell ServiceStack to use ThreadStatic Items Collection for Context Scoped items. - Warning: ThreadStatic Items aren't pinned to the same request in async services which callback on different threads. - - - - - Gets a list of items for this context. - - - - - Clear select expression. All properties will be selected. - - - - - set the specified selectExpression. - - - raw Select expression: "Select SomeField1, SomeField2 from SomeTable" - - - - - Fields to be selected. - - - x=> x.SomeProperty1 or x=> new{ x.SomeProperty1, x.SomeProperty2} - - - objectWithProperties - - - - - Offset of the first row to return. The offset of the initial row is 0 - - - - - Number of rows returned by a SELECT statement - - - - - Set the specified offset and rows for SQL Limit clause. - - - Offset of the first row to return. The offset of the initial row is 0 - - - Number of rows returned by a SELECT statement - - - - - Set the specified offset and rows for SQL Limit clause where they exist. - - - Offset of the first row to return. The offset of the initial row is 0 - - - Number of rows returned by a SELECT statement - - - - - Set the specified rows for Sql Limit clause. - - - Number of rows returned by a SELECT statement - - - - - Clear Sql Limit clause - - - - - Clear Offset and Limit clauses. Alias for Limit() - - - - - - - Fields to be updated. - - - x=> x.SomeProperty1 or x=> new{ x.SomeProperty1, x.SomeProperty2} - - - objectWithProperties - - - - - Clear UpdateFields list ( all fields will be updated) - - - - - Fields to be inserted. - - - x=> x.SomeProperty1 or x=> new{ x.SomeProperty1, x.SomeProperty2} - - - objectWithProperties - - - - - fields to be inserted. - - - IList<string> containing Names of properties to be inserted - - - - - Clear InsertFields list ( all fields will be inserted) - - - - - Enables the efficient, dynamic composition of query predicates. - - - - - Creates a predicate that evaluates to true. - - - - - Creates a predicate that evaluates to false. - - - - - Creates a predicate expression from the specified lambda expression. - - - - - Combines the first predicate with the second using the logical "and". - - - - - Combines the first predicate with the second using the logical "or". - - - - - Negates the predicate. - - - - - Combines the first expression with the second using the specified merge function. - - - - - Create a new SqlExpression builder allowing typed LINQ-like queries. - - - - - Creates a new SqlExpression builder allowing typed LINQ-like queries. - Alias for SqlExpression. - - - - - Creates a new SqlExpression builder for the specified type using a user-defined FROM sql expression. - - - - - Open a Transaction in OrmLite - - - - - Open a Transaction in OrmLite - - - - - Create a managed OrmLite IDbCommand - - - - - Returns results from using a LINQ Expression. E.g: - db.Select<Person>(x => x.Age > 40) - - - - - Returns results from using an SqlExpression lambda. E.g: - db.Select<Person>(q => q.Where(x => x.Age > 40)) - - - - - Returns results from using an SqlExpression lambda. E.g: - db.Select(db.From<Person>().Where(x => x.Age > 40)) - - - - - Project results from a number of joined tables into a different model - - - - - Project results from a number of joined tables into a different model - - - - - Returns results from using an SqlExpression lambda. E.g: - db.Select(db.From<Person>().Where(x => x.Age > 40)) - - - - - Returns a single result from using a LINQ Expression. E.g: - db.Single<Person>(x => x.Age == 42) - - - - - Returns a single result from using an SqlExpression lambda. E.g: - db.Single<Person>(q => q.Where(x => x.Age == 42)) - - - - - Returns results from using an SqlExpression lambda. E.g: - db.Select<Person>(x => x.Age > 40) - - - - - Returns a scalar result from using an SqlExpression lambda. E.g: - db.Scalar<Person, int>(x => Sql.Max(x.Age)) - - - - - Returns a scalar result from using an SqlExpression lambda. E.g: - db.Scalar<Person, int>(x => Sql.Max(x.Age), , x => x.Age < 50) - - - - - Returns the count of rows that match the LINQ expression, E.g: - db.Count<Person>(x => x.Age < 50) - - - - - Returns the count of rows that match the SqlExpression lambda, E.g: - db.Count<Person>(q => q.Where(x => x.Age < 50)) - - - - - Returns the count of rows that match the supplied SqlExpression, E.g: - db.Count(db.From<Person>().Where(x => x.Age < 50)) - - - - - Return the number of rows returned by the supplied expression - - - - - Return the number of rows returned by the supplied sql - - - - - Returns results with references from using a LINQ Expression. E.g: - db.LoadSelect<Person>(x => x.Age > 40) - - - - - Returns results with references from using an SqlExpression lambda. E.g: - db.LoadSelect<Person>(q => q.Where(x => x.Age > 40)) - - - - - Returns results with references from using an SqlExpression lambda. E.g: - db.LoadSelect(db.From<Person>().Where(x => x.Age > 40)) - - - - - Project results with references from a number of joined tables into a different model - - - - - Use an SqlExpression to select which fields to update and construct the where expression, E.g: - - db.UpdateOnly(new Person { FirstName = "JJ" }, ev => ev.Update(p => p.FirstName).Where(x => x.FirstName == "Jimi")); - UPDATE "Person" SET "FirstName" = 'JJ' WHERE ("FirstName" = 'Jimi') - - What's not in the update expression doesn't get updated. No where expression updates all rows. E.g: - - db.UpdateOnly(new Person { FirstName = "JJ", LastName = "Hendo" }, ev => ev.Update(p => p.FirstName)); - UPDATE "Person" SET "FirstName" = 'JJ' - - - - - Use an SqlExpression to select which fields to update and construct the where expression, E.g: - - var q = db.From>Person<()); - db.UpdateOnly(new Person { FirstName = "JJ" }, q.Update(p => p.FirstName).Where(x => x.FirstName == "Jimi")); - UPDATE "Person" SET "FirstName" = 'JJ' WHERE ("FirstName" = 'Jimi') - - What's not in the update expression doesn't get updated. No where expression updates all rows. E.g: - - db.UpdateOnly(new Person { FirstName = "JJ", LastName = "Hendo" }, ev.Update(p => p.FirstName)); - UPDATE "Person" SET "FirstName" = 'JJ' - - - - - Update record, updating only fields specified in updateOnly that matches the where condition (if any), E.g: - - db.UpdateOnly(new Person { FirstName = "JJ" }, p => p.FirstName, p => p.LastName == "Hendrix"); - UPDATE "Person" SET "FirstName" = 'JJ' WHERE ("LastName" = 'Hendrix') - - db.UpdateOnly(new Person { FirstName = "JJ" }, p => p.FirstName); - UPDATE "Person" SET "FirstName" = 'JJ' - - - - - Updates all non-default values set on item matching the where condition (if any). E.g - - db.UpdateNonDefaults(new Person { FirstName = "JJ" }, p => p.FirstName == "Jimi"); - UPDATE "Person" SET "FirstName" = 'JJ' WHERE ("FirstName" = 'Jimi') - - - - - Updates all values set on item matching the where condition (if any). E.g - - db.Update(new Person { Id = 1, FirstName = "JJ" }, p => p.LastName == "Hendrix"); - UPDATE "Person" SET "Id" = 1,"FirstName" = 'JJ',"LastName" = NULL,"Age" = 0 WHERE ("LastName" = 'Hendrix') - - - - - Updates all matching fields populated on anonymousType that matches where condition (if any). E.g: - - db.Update<Person>(new { FirstName = "JJ" }, p => p.LastName == "Hendrix"); - UPDATE "Person" SET "FirstName" = 'JJ' WHERE ("LastName" = 'Hendrix') - - - - - Flexible Update method to succinctly execute a free-text update statement using optional params. E.g: - - db.Update<Person>(set:"FirstName = {0}".Params("JJ"), where:"LastName = {0}".Params("Hendrix")); - UPDATE "Person" SET FirstName = 'JJ' WHERE LastName = 'Hendrix' - - - - - Flexible Update method to succinctly execute a free-text update statement using optional params. E.g. - - db.Update(table:"Person", set: "FirstName = {0}".Params("JJ"), where: "LastName = {0}".Params("Hendrix")); - UPDATE "Person" SET FirstName = 'JJ' WHERE LastName = 'Hendrix' - - - - - Insert only fields in POCO specified by the SqlExpression lambda. E.g: - db.InsertOnly(new Person { FirstName = "Amy", Age = 27 }, q => q.Insert(p => new { p.FirstName, p.Age })) - - - - - Using an SqlExpression to only Insert the fields specified, e.g: - - db.InsertOnly(new Person { FirstName = "Amy" }, q => q.Insert(p => new { p.FirstName })); - INSERT INTO "Person" ("FirstName") VALUES ('Amy'); - - - - - Delete the rows that matches the where expression, e.g: - - db.Delete<Person>(p => p.Age == 27); - DELETE FROM "Person" WHERE ("Age" = 27) - - - - - Delete the rows that matches the where expression, e.g: - - db.Delete<Person>(ev => ev.Where(p => p.Age == 27)); - DELETE FROM "Person" WHERE ("Age" = 27) - - - - - Delete the rows that matches the where expression, e.g: - - var q = db.From>Person<()); - db.Delete<Person>(q.Where(p => p.Age == 27)); - DELETE FROM "Person" WHERE ("Age" = 27) - - - - - Flexible Delete method to succinctly execute a delete statement using free-text where expression. E.g. - - db.Delete<Person>(where:"Age = {0}".Params(27)); - DELETE FROM "Person" WHERE Age = 27 - - - - - Flexible Delete method to succinctly execute a delete statement using free-text where expression. E.g. - - db.Delete(table:"Person", where: "Age = {0}".Params(27)); - DELETE FROM "Person" WHERE Age = 27 - - - - - Offset of the first row to return. The offset of the initial row is 0 - - - - - Number of rows returned by a SELECT statement - - - - - Set the specified offset and rows for SQL Limit clause. - - - Offset of the first row to return. The offset of the initial row is 0 - - - Number of rows returned by a SELECT statement - - - - - Set the specified offset and rows for SQL Limit clause where they exist. - - - Offset of the first row to return. The offset of the initial row is 0 - - - Number of rows returned by a SELECT statement - - - - - Set the specified rows for Sql Limit clause. - - - Number of rows returned by a SELECT statement - - - - - Clear Sql Limit clause - - - - - Returns results from the active connection. - - - - - Returns results from using sql. E.g: - db.Select<Person>("Age > 40") - db.Select<Person>("SELECT * FROM Person WHERE Age > 40") - - - - - Returns results from using a parameterized query. E.g: - db.Select<Person>("Age > @age", new { age = 40}) - db.Select<Person>("SELECT * FROM Person WHERE Age > @age", new { age = 40}) - - - - - Returns results from using a parameterized query. E.g: - db.Select<Person>("Age > @age", new Dictionary<string, object> { { "age", 40 } }) - db.Select<Person>("SELECT * FROM Person WHERE Age > @age", new Dictionary<string, object> { { "age", 40 } }) - - - - - Returns results from using an SqlFormat query. E.g: - db.SelectFmt<Person>("Age > {0}", 40) - db.SelectFmt<Person>("SELECT * FROM Person WHERE Age > {0}", 40) - - - - - Returns a partial subset of results from the specified tableType. E.g: - db.Select<EntityWithId>(typeof(Person)) - - - - - - Returns a partial subset of results from the specified tableType using a SqlFormat query. E.g: - db.SelectFmt<EntityWithId>(typeof(Person), "Age > {0}", 40) - - - - - Returns results from using a single name, value filter. E.g: - db.Where<Person>("Age", 27) - - - - - Returns results from using an anonymous type filter. E.g: - db.Where<Person>(new { Age = 27 }) - - - - - Returns results using the supplied primary key ids. E.g: - db.SelectByIds<Person>(new[] { 1, 2, 3 }) - - - - - Query results using the non-default values in the supplied partially populated POCO example. E.g: - db.SelectNonDefaults(new Person { Id = 1 }) - - - - - Query results using the non-default values in the supplied partially populated POCO example. E.g: - db.SelectNonDefaults("Age > @Age", new Person { Age = 42 }) - - - - - Returns a lazyily loaded stream of results. E.g: - db.SelectLazy<Person>() - - - - - Returns a lazyily loaded stream of results using a parameterized query. E.g: - db.SelectLazy<Person>("Age > @age", new { age = 40 }) - - - - - Returns a lazyily loaded stream of results using an SqlFilter query. E.g: - db.SelectLazyFmt<Person>("Age > {0}", 40) - - - - - Returns a stream of results that are lazily loaded using a parameterized query. E.g: - db.WhereLazy<Person>(new { Age = 27 }) - - - - - Returns the first result using a parameterized query. E.g: - db.Single<Person>(new { Age = 42 }) - - - - - Returns results from using a single name, value filter. E.g: - db.Single<Person>("Age = @age", new { age = 42 }) - - - - - Returns the first result using a SqlFormat query. E.g: - db.SingleFmt<Person>("Age = {0}", 42) - - - - - Returns the first result using a primary key id. E.g: - db.SingleById<Person>(1) - - - - - Returns the first result using a name, value filter. E.g: - db.SingleWhere<Person>("Age", 42) - - - - - Returns a single scalar value using an SqlExpression. E.g: - db.Column<int>(db.From<Persion>().Select(x => Sql.Count("*")).Where(q => q.Age > 40)) - - - - - Returns a single scalar value using a parameterized query. E.g: - db.Scalar<int>("SELECT COUNT(*) FROM Person WHERE Age > @age", new { age = 40 }) - - - - - Returns a single scalar value using an SqlFormat query. E.g: - db.ScalarFmt<int>("SELECT COUNT(*) FROM Person WHERE Age > {0}", 40) - - - - - Returns the distinct first column values in a HashSet using an SqlExpression. E.g: - db.Column<int>(db.From<Persion>().Select(x => x.LastName).Where(q => q.Age == 27)) - - - - - Returns the first column in a List using a SqlFormat query. E.g: - db.ColumnLazy<string>("SELECT LastName FROM Person WHERE Age = @age", new { age = 27 }) - - - - - Returns the distinct first column values in a HashSet using an SqlExpression. E.g: - db.ColumnLazy<int>(db.From<Persion>().Select(x => x.LastName).Where(q => q.Age == 27)) - - - - - Returns the first column in a List using a SqlFormat query. E.g: - db.Column<string>("SELECT LastName FROM Person WHERE Age = @age", new { age = 27 }) - - - - - Returns the first column in a List using a SqlFormat query. E.g: - db.ColumnFmt<string>("SELECT LastName FROM Person WHERE Age = {0}", 27) - - - - - - Returns the distinct first column values in a HashSet using an SqlFormat query. E.g: - db.ColumnDistinct<int>("SELECT Age FROM Person WHERE Age < @age", new { age = 50 }) - - - - - Returns the distinct first column values in a HashSet using an SqlFormat query. E.g: - db.ColumnDistinctFmt<int>("SELECT Age FROM Person WHERE Age < {0}", 50) - - - - - - Returns an Dictionary<K, List<V>> grouping made from the first two columns using an parameterized query. E.g: - db.Lookup<int, string>("SELECT Age, LastName FROM Person WHERE Age < @age", new { age = 50 }) - - - - - Returns an Dictionary<K, List<V>> grouping made from the first two columns using an SqlFormat query. E.g: - db.LookupFmt<int, string>("SELECT Age, LastName FROM Person WHERE Age < {0}", 50) - - - - - - Returns a Dictionary from the first 2 columns: Column 1 (Keys), Column 2 (Values) using sql. E.g: - db.Dictionary<int, string>("SELECT Id, LastName FROM Person WHERE Age < @age", new { age = 50 }) - - - - - Returns a Dictionary from the first 2 columns: Column 1 (Keys), Column 2 (Values) using an SqlFormat query. E.g: - db.DictionaryFmt<int, string>("SELECT Id, LastName FROM Person WHERE Age < {0}", 50) - - - - - Returns true if the Query returns any records that match the LINQ expression, E.g: - db.Exists<Person>(x => x.Age < 50) - - - - - Returns true if the Query returns any records that match the SqlExpression lambda, E.g: - db.Exists<Person>(q => q.Where(x => x.Age < 50)) - - - - - Returns true if the Query returns any records that match the supplied SqlExpression, E.g: - db.Exists(db.From<Person>().Where(x => x.Age < 50)) - - - - - Returns true if the Query returns any records, using an SqlFormat query. E.g: - db.Exists<Person>(new { Age = 42 }) - - - - - Returns true if the Query returns any records, using a parameterized query. E.g: - db.Exists<Person>("Age = @age", new { age = 42 }) - db.Exists<Person>("SELECT * FROM Person WHERE Age = @age", new { age = 42 }) - - - - - Returns true if the Query returns any records, using an SqlFormat query. E.g: - db.ExistsFmt<Person>("Age = {0}", 42) - db.ExistsFmt<Person>("SELECT * FROM Person WHERE Age = {0}", 50) - - - - - Returns results from an arbitrary SqlExpression. E.g: - db.SqlList<Person>(db.From<Person>().Select("*").Where(q => q.Age < 50)) - - - - - Returns results from an arbitrary parameterized raw sql query. E.g: - db.SqlList<Person>("EXEC GetRockstarsAged @age", new { age = 50 }) - - - - - Returns results from an arbitrary parameterized raw sql query. E.g: - db.SqlList<Person>("EXEC GetRockstarsAged @age", new Dictionary<string, object> { { "age", 42 } }) - - - - - Returns results from an arbitrary parameterized raw sql query with a dbCmd filter. E.g: - db.SqlList<Person>("EXEC GetRockstarsAged @age", dbCmd => ...) - - - - - Prepare Stored Procedure with Input parameters, optionally populated with Input Params. E.g: - var cmd = db.SqlProc("GetRockstarsAged", new { age = 42 }) - - - - - - Returns the first column in a List using a parameterized query. E.g: - db.SqlColumn<string>("SELECT LastName FROM Person WHERE Age < @age", new { age = 50 }) - - - - - Returns the first column in a List using a parameterized query. E.g: - db.SqlColumn<string>("SELECT LastName FROM Person WHERE Age < @age", new Dictionary<string, object> { { "age", 50 } }) - - - - - Returns a single Scalar value using an SqlExpression. E.g: - db.SqlScalar<int>(db.From<Person>().Select(Sql.Count("*")).Where(q => q.Age < 50)) - - - - - Returns a single Scalar value using a parameterized query. E.g: - db.SqlScalar<int>("SELECT COUNT(*) FROM Person WHERE Age < @age", new { age = 50 }) - - - - - Returns a single Scalar value using a parameterized query. E.g: - db.SqlScalar<int>("SELECT COUNT(*) FROM Person WHERE Age < @age", new Dictionary<string, object> { { "age", 50 } }) - - - - - Returns the last insert Id made from this connection. - - - - - Executes a raw sql non-query using sql. E.g: - var rowsAffected = db.ExecuteNonQuery("UPDATE Person SET LastName={0} WHERE Id={1}".SqlFormat("WaterHouse", 7)) - - number of rows affected - - - - Executes a raw sql non-query using a parameterized query. E.g: - var rowsAffected = db.ExecuteNonQuery("UPDATE Person SET LastName=@name WHERE Id=@id", new { name = "WaterHouse", id = 7 }) - - number of rows affected - - - - Executes a raw sql non-query using a parameterized query. - - number of rows affected - - - - Returns results from a Stored Procedure, using a parameterized query. - - - - - Returns results from a Stored Procedure using an SqlFormat query. E.g: - - - - - - Returns the scalar result as a long. - - - - - Returns the first result with all its references loaded, using a primary key id. E.g: - db.LoadSingleById<Person>(1) - - - - - Loads all the related references onto the instance. E.g: - db.LoadReferences(customer) - - - - - Checks whether a Table Exists. E.g: - db.TableExists("Person") - - - - - Checks whether a Table Exists. E.g: - db.TableExists<Person>() - - - - - Create DB Tables from the schemas of runtime types. E.g: - db.CreateTables(typeof(Table1), typeof(Table2)) - - - - - Create DB Table from the schema of the runtime type. Use overwrite to drop existing Table. E.g: - db.CreateTable(true, typeof(Table)) - - - - - Only Create new DB Tables from the schemas of runtime types if they don't already exist. E.g: - db.CreateTableIfNotExists(typeof(Table1), typeof(Table2)) - - - - - Drop existing DB Tables and re-create them from the schemas of runtime types. E.g: - db.DropAndCreateTables(typeof(Table1), typeof(Table2)) - - - - - Create a DB Table from the generic type. Use overwrite to drop the existing table or not. E.g: - db.CreateTable<Person>(overwrite=false) //default - db.CreateTable<Person>(overwrite=true) - - - - - Only create a DB Table from the generic type if it doesn't already exist. E.g: - db.CreateTableIfNotExists<Person>() - - - - - Only create a DB Table from the runtime type if it doesn't already exist. E.g: - db.CreateTableIfNotExists(typeof(Person)) - - - - - Drop existing table if exists and re-create a DB Table from the generic type. E.g: - db.DropAndCreateTable<Person>() - - - - - Drop existing table if exists and re-create a DB Table from the runtime type. E.g: - db.DropAndCreateTable(typeof(Person)) - - - - - Drop any existing tables from their runtime types. E.g: - db.DropTables(typeof(Table1),typeof(Table2)) - - - - - Drop any existing tables from the runtime type. E.g: - db.DropTable(typeof(Person)) - - - - - Drop any existing tables from the generic type. E.g: - db.DropTable<Person>() - - - - - Get the last SQL statement that was executed. - - - - - Execute any arbitrary raw SQL. - - number of rows affected - - - - Insert 1 POCO, use selectIdentity to retrieve the last insert AutoIncrement id (if any). E.g: - var id = db.Insert(new Person { Id = 1, FirstName = "Jimi }, selectIdentity:true) - - - - - Insert 1 or more POCOs in a transaction. E.g: - db.Insert(new Person { Id = 1, FirstName = "Tupac", LastName = "Shakur", Age = 25 }, - new Person { Id = 2, FirstName = "Biggie", LastName = "Smalls", Age = 24 }) - - - - - Insert a collection of POCOs in a transaction. E.g: - db.InsertAll(new[] { new Person { Id = 9, FirstName = "Biggie", LastName = "Smalls", Age = 24 } }) - - - - - Updates 1 POCO. All fields are updated except for the PrimaryKey which is used as the identity selector. E.g: - db.Update(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27 }) - - - - - Updates 1 or more POCOs in a transaction. E.g: - db.Update(new Person { Id = 1, FirstName = "Tupac", LastName = "Shakur", Age = 25 }, - new Person { Id = 2, FirstName = "Biggie", LastName = "Smalls", Age = 24 }) - - - - - Updates 1 or more POCOs in a transaction. E.g: - db.UpdateAll(new[] { new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27 } }) - - - - - Delete rows using an anonymous type filter. E.g: - db.Delete<Person>(new { FirstName = "Jimi", Age = 27 }) - - number of rows deleted - - - - Delete 1 or more rows in a transaction using an anonymous type filter. E.g: - db.Delete<Person>(new { FirstName = "Jimi", Age = 27 }, new { FirstName = "Janis", Age = 27 }) - - - - - Delete 1 row using all fields in the filter. E.g: - db.Delete(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27 }) - - number of rows deleted - - - - Delete 1 or more rows in a transaction using all fields in the filter. E.g: - db.Delete(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27 }) - - - - - Delete 1 or more rows using only field with non-default values in the filter. E.g: - db.DeleteNonDefaults(new Person { FirstName = "Jimi", Age = 27 }) - - number of rows deleted - - - - Delete 1 or more rows in a transaction using only field with non-default values in the filter. E.g: - db.DeleteNonDefaults(new Person { FirstName = "Jimi", Age = 27 }, - new Person { FirstName = "Janis", Age = 27 }) - - number of rows deleted - - - - Delete 1 row by the PrimaryKey. E.g: - db.DeleteById<Person>(1) - - number of rows deleted - - - - Delete 1 row by the PrimaryKey where the rowVersion matches the optimistic concurrency field. - Will throw RowModefiedExeption if the - row does not exist or has a different row version. - E.g: db.DeleteById<Person>(1) - - - - - Delete all rows identified by the PrimaryKeys. E.g: - db.DeleteById<Person>(new[] { 1, 2, 3 }) - - number of rows deleted - - - - Delete all rows in the generic table type. E.g: - db.DeleteAll<Person>() - - number of rows deleted - - - - Delete all rows in the runtime table type. E.g: - db.DeleteAll(typeof(Person)) - - number of rows deleted - - - - Delete rows using a SqlFormat filter. E.g: - - number of rows deleted - - - - Delete rows from the runtime table type using a SqlFormat filter. E.g: - - db.DeleteFmt(typeof(Person), "Age = {0}", 27) - number of rows deleted - - - - Insert a new row or update existing row. Returns true if a new row was inserted. - Optional references param decides whether to save all related references as well. E.g: - db.Save(customer, references:true) - - true if a row was inserted; false if it was updated - - - - Insert new rows or update existing rows. Return number of rows added E.g: - db.Save(new Person { Id = 10, FirstName = "Amy", LastName = "Winehouse", Age = 27 }) - - number of rows added - - - - Insert new rows or update existing rows. Return number of rows added E.g: - db.SaveAll(new [] { new Person { Id = 10, FirstName = "Amy", LastName = "Winehouse", Age = 27 } }) - - number of rows added - - - - Populates all related references on the instance with its primary key and saves them. Uses '(T)Id' naming convention. E.g: - db.SaveAllReferences(customer) - - - - - Populates the related references with the instance primary key and saves them. Uses '(T)Id' naming convention. E.g: - db.SaveReference(customer, customer.Orders) - - - - - Populates the related references with the instance primary key and saves them. Uses '(T)Id' naming convention. E.g: - db.SaveReference(customer, customer.Orders) - - - - - Populates the related references with the instance primary key and saves them. Uses '(T)Id' naming convention. E.g: - db.SaveReferences(customer, customer.Orders) - - - - - Wrapper IDbConnection class to allow for connection sharing, mocking, etc. - - - - - Allow for mocking and unit testing by providing non-disposing - connection factory with injectable IDbCommand and IDbTransaction proxies - - - - - Force the IDbConnection to always return this IDbCommand - - - - - Force the IDbConnection to always return this IDbTransaction - - - - - Alias for OpenDbConnection - - - - - Alias for OpenDbConnection - - - - - Allow for code-sharing between OrmLite, IPersistenceProvider and ICacheClient - - - - - Quote the string so that it can be used inside an SQL-expression - Escape quotes inside the string - - - - - - - Populates row fields during re-hydration of results. - - - - Fmt - - - - Nice SqlBuilder class by @samsaffron from Dapper.Contrib: - http://samsaffron.com/archive/2011/09/05/Digging+ourselves+out+of+the+mess+Linq-2-SQL+created - Modified to work in .NET 3.5 - - - - - Additional state flags that control command behaviour - - - - - No additonal flags - - - - - Should data be buffered before returning? - - - - - Can async queries be pipelined? - - - - - Should the plan cache be bypassed? - - - - - Represents the key aspects of a sql operation - - - - - Initialize the command definition - - - - - The command (sql or a stored-procedure name) to execute - - - - - The parameters associated with the command - - - - - The active transaction for the command - - - - - The effective timeout for the command - - - - - The type of command that the command-text represents - - - - - Should data be buffered before returning? - - - - - Should the plan for this query be cached? - - - - - Additional state flags against this command - - - - - Can async queries be pipelined? - - - - - Dapper, a light weight object mapper for ADO.NET - - - - - Key used to indicate the type name associated with a DataTable - - - - - Purge the query cache - - - - - Return a count of all the cached queries by dapper - - - - - - Return a list of all the queries cached by dapper - - - - - - - Deep diagnostics only: find any hash collisions in the cache - - - - - - Clear the registered type handlers - - - - - Configire the specified type to be mapped to a given db-type - - - - - Configire the specified type to be processed by a custom handler - - - - - Configire the specified type to be processed by a custom handler - - - - - Configire the specified type to be processed by a custom handler - - - - - Get the DbType that maps to a given value - - - - - Execute parameterized SQL - - Number of rows affected - - - - Execute parameterized SQL - - Number of rows affected - - - - Execute parameterized SQL that selects a single value - - The first cell selected - - - - Execute parameterized SQL that selects a single value - - The first cell selected - - - - Execute parameterized SQL that selects a single value - - The first cell selected - - - - Execute parameterized SQL that selects a single value - - The first cell selected - - - - Execute parameterized SQL and return an - - An that can be used to iterate over the results of the SQL query. - - This is typically used when the results of a query are not processed by Dapper, for example, used to fill a DataTable or DataSet. - - - - - - - - - - Execute parameterized SQL and return an - - An that can be used to iterate over the results of the SQL query. - - This is typically used when the results of a query are not processed by Dapper, for example, used to fill a DataTable or DataSet. - - - - - Execute parameterized SQL and return an - - An that can be used to iterate over the results of the SQL query. - - This is typically used when the results of a query are not processed by Dapper, for example, used to fill a DataTable or DataSet. - - - - - Return a list of dynamic objects, reader is closed after the call - - - - - Executes a query, returning the data typed as per T - - the dynamic param may seem a bit odd, but this works around a major usability issue in vs, if it is Object vs completion gets annoying. Eg type new [space] get new object - A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is - created per row, and a direct column-name===member-name mapping is assumed (case insensitive). - - - - - Executes a query, returning the data typed as per the Type suggested - - A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is - created per row, and a direct column-name===member-name mapping is assumed (case insensitive). - - - - - Executes a query, returning the data typed as per T - - the dynamic param may seem a bit odd, but this works around a major usability issue in vs, if it is Object vs completion gets annoying. Eg type new [space] get new object - A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is - created per row, and a direct column-name===member-name mapping is assumed (case insensitive). - - - - - Execute a command that returns multiple result sets, and access each in turn - - - - - Execute a command that returns multiple result sets, and access each in turn - - - - - Maps a query to objects - - The first type in the recordset - The second type in the recordset - The return type - - - - - - - The Field we should split and read the second object from (default: id) - Number of seconds before command execution timeout - Is it a stored proc or a batch? - - - - - Maps a query to objects - - - - - - - - - - - - The Field we should split and read the second object from (default: id) - Number of seconds before command execution timeout - - - - - - Perform a multi mapping query with 4 input parameters - - - - - - - - - - - - - - - - - - - - Perform a multi mapping query with 5 input parameters - - - - - - - - - - - - - - - - - - - - - Perform a multi mapping query with 6 input parameters - - - - - - - - - - - - - - - - - - - - - - Perform a multi mapping query with 7 input parameters - - - - - - - - - - - - - - - - - - - - - - - Perform a multi mapping query with arbitrary input parameters - - The return type - - - array of types in the recordset - - - - - The Field we should split and read the second object from (default: id) - Number of seconds before command execution timeout - Is it a stored proc or a batch? - - - - - Internal use only - - - - - - - Internal use only - - - - - Internal use only - - - - - Internal use only - - - - - Replace all literal tokens with their text form - - - - - Convert numeric values to their string form for SQL literal purposes - - - - - Internal use only - - - - - Gets type-map for the given type - - Type map implementation, DefaultTypeMap instance if no override present - - - - Set custom mapping for type deserializers - - Entity type to override - Mapping rules impementation, null to remove custom map - - - - Internal use only - - - - - - - - - - - Throws a data exception, only used internally - - - - - Called if the query cache is purged via PurgeQueryCache - - - - - How should connection strings be compared for equivalence? Defaults to StringComparer.Ordinal. - Providing a custom implementation can be useful for allowing multi-tenancy databases with identical - schema to share startegies. Note that usual equivalence rules apply: any equivalent connection strings - MUST yield the same hash-code. - - - - - Implement this interface to pass an arbitrary db specific set of parameters to Dapper - - - - - Add all the parameters needed to the command just before it executes - - The raw command prior to execution - Information about the query - - - - Extends IDynamicParameters providing by-name lookup of parameter values - - - - - Get the value of the specified parameter (return null if not found) - - - - - Extends IDynamicParameters with facitilies for executing callbacks after commands have completed - - - - - Invoked when the command has executed - - - - - Implement this interface to pass an arbitrary db specific parameter to Dapper - - - - - Add the parameter needed to the command before it executes - - The raw command prior to execution - Parameter name - - - - Implement this interface to perform custom type-based parameter handling and value parsing - - - - - Assign the value of a parameter before a command executes - - The parameter to configure - Parameter value - - - - Parse a database value back to a typed value - - The value from the database - The type to parse to - The typed value - - - - A type handler for data-types that are supported by the underlying provider, but which need - a well-known UdtTypeName to be specified - - - - - Creates a new instance of UdtTypeHandler with the specified UdtTypeName - - - - - Base-class for simple type-handlers - - - - - Assign the value of a parameter before a command executes - - The parameter to configure - Parameter value - - - - Parse a database value back to a typed value - - The value from the database - The typed value - - - - Implement this interface to change default mapping of reader columns to type memebers - - - - - Finds best constructor - - DataReader column names - DataReader column types - Matching constructor or default one - - - - Gets mapping for constructor parameter - - Constructor to resolve - DataReader column name - Mapping implementation - - - - Gets member mapping for column - - DataReader column name - Mapping implementation - - - - Implements this interface to provide custom member mapping - - - - - Source DataReader column name - - - - - Target member type - - - - - Target property - - - - - Target field - - - - - Target constructor parameter - - - - - This is a micro-cache; suitable when the number of terms is controllable (a few hundred, for example), - and strictly append-only; you cannot change existing values. All key matches are on **REFERENCE** - equality. The type is fully thread-safe. - - - - - Not intended for direct usage - - - - - Not intended for direct usage - - - - - Not intended for direct usage - - - - - Identity of a cached query in Dapper, used for extensability - - - - - Create an identity for use with DynamicParameters, internal use only - - - - - - - - - - - - - - The sql - - - - - The command type - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Compare 2 Identity objects - - - - - - - Represents a placeholder for a value that should be replaced as a literal value in the resulting sql - - - - - The text in the original command that should be replaced - - - - - The name of the member referred to by the token - - - - - The grid reader provides interfaces for reading multiple result sets from a Dapper query - - - - - Read the next grid of results, returned as a dynamic object - - - - - Read the next grid of results - - - - - Read the next grid of results - - - - - Read multiple objects from a single recordset on the grid - - - - - Read multiple objects from a single recordset on the grid - - - - - Read multiple objects from a single record set on the grid - - - - - Read multiple objects from a single record set on the grid - - - - - Read multiple objects from a single record set on the grid - - - - - Read multiple objects from a single record set on the grid - - - - - Dispose the grid, closing and disposing both the underlying reader and command. - - - - - Has the underlying reader been consumed? - - - - - A bag of parameters that can be passed to the Dapper Query and Execute methods - - - - - construct a dynamic parameter bag - - - - - construct a dynamic parameter bag - - can be an anonymous type or a DynamicParameters bag - - - - Append a whole object full of params to the dynamic - EG: AddDynamicParams(new {A = 1, B = 2}) // will add property A and B to the dynamic - - - - - - Add a parameter to this dynamic parameter list - - - - - - - - - - Add all the parameters needed to the command just before it executes - - The raw command prior to execution - Information about the query - - - - Get the value of a parameter - - - - The value, note DBNull.Value is not returned, instead the value is returned as null - - - - Allows you to automatically populate a target property/field from output parameters. It actually - creates an InputOutput parameter, so you can still pass data in. - - - The object whose property/field you wish to populate. - A MemberExpression targeting a property/field of the target (or descendant thereof.) - - The size to set on the parameter. Defaults to 0, or DbString.DefaultLength in case of strings. - The DynamicParameters instance - - - - If true, the command-text is inspected and only values that are clearly used are included on the connection - - - - - All the names of the param in the bag, use Get to yank them out - - - - - This class represents a SQL string, it can be used if you need to denote your parameter is a Char vs VarChar vs nVarChar vs nChar - - - - - A value to set the default value of strings - going through Dapper. Default is 4000, any value larger than this - field will not have the default value applied. - - - - - Create a new DbString - - - - - Add the parameter to the command... internal use only - - - - - - - Ansi vs Unicode - - - - - Fixed length - - - - - Length of the string -1 for max - - - - - The value of the string - - - - - Handles variances in features per DBMS - - - - - Gets the featureset based on the passed connection - - - - - True if the db supports array columns e.g. Postgresql - - - - - Represents simple memeber map for one of target parameter or property or field to source DataReader column - - - - - Creates instance for simple property mapping - - DataReader column name - Target property - - - - Creates instance for simple field mapping - - DataReader column name - Target property - - - - Creates instance for simple constructor parameter mapping - - DataReader column name - Target constructor parameter - - - - DataReader column name - - - - - Target member type - - - - - Target property - - - - - Target field - - - - - Target constructor parameter - - - - - Represents default type mapping strategy used by Dapper - - - - - Creates default type map - - Entity type - - - - Finds best constructor - - DataReader column names - DataReader column types - Matching constructor or default one - - - - Gets mapping for constructor parameter - - Constructor to resolve - DataReader column name - Mapping implementation - - - - Gets member mapping for column - - DataReader column name - Mapping implementation - - - - Should column names like User_Id be allowed to match properties/fields like UserId ? - - - - - Implements custom property mapping by user provided criteria (usually presence of some custom attribute with column to member mapping) - - - - - Creates custom property mapping - - Target entity type - Property selector based on target type and DataReader column name - - - - Always returns default constructor - - DataReader column names - DataReader column types - Default constructor - - - - Not impelmeneted as far as default constructor used for all cases - - - - - - - - Returns property based on selector strategy - - DataReader column name - Poperty member map - - - diff --git a/lib/ServiceStack.Pcl.Net45.dll b/lib/ServiceStack.Pcl.Net45.dll deleted file mode 100644 index 1d289b87225..00000000000 Binary files a/lib/ServiceStack.Pcl.Net45.dll and /dev/null differ diff --git a/lib/ServiceStack.Pcl.WinStore.dll b/lib/ServiceStack.Pcl.WinStore.dll deleted file mode 100644 index 51ebd33ce17..00000000000 Binary files a/lib/ServiceStack.Pcl.WinStore.dll and /dev/null differ diff --git a/lib/ServiceStack.Pcl.WinStore.pri b/lib/ServiceStack.Pcl.WinStore.pri deleted file mode 100644 index a3071fe88d3..00000000000 Binary files a/lib/ServiceStack.Pcl.WinStore.pri and /dev/null differ diff --git a/lib/ServiceStack.Razor.BuildTask.dll b/lib/ServiceStack.Razor.BuildTask.dll deleted file mode 100644 index 46f6c51c839..00000000000 Binary files a/lib/ServiceStack.Razor.BuildTask.dll and /dev/null differ diff --git a/lib/ServiceStack.Redis.XML b/lib/ServiceStack.Redis.XML deleted file mode 100644 index 1b460938ad0..00000000000 --- a/lib/ServiceStack.Redis.XML +++ /dev/null @@ -1,1382 +0,0 @@ - - - - ServiceStack.Redis - - - - - Provides thread-safe retrievel of redis clients since each client is a new one. - Allows the configuration of different ReadWrite and ReadOnly hosts - - - BasicRedisClientManager for ICacheClient - - For more interoperabilty I'm also implementing the ICacheClient on - this cache client manager which has the affect of calling - GetCacheClient() for all write operations and GetReadOnlyCacheClient() - for the read ones. - - This works well for master-slave replication scenarios where you have - 1 master that replicates to multiple read slaves. - - - - - Hosts can be an IP Address or Hostname in the format: host[:port] - e.g. 127.0.0.1:6379 - default is: localhost:6379 - - The write hosts. - The read hosts. - - - - Returns a Read/Write client (The default) using the hosts defined in ReadWriteHosts - - - - - - Returns a ReadOnly client using the hosts defined in ReadOnlyHosts. - - - - - - Gets or sets object key prefix. - - - - - Courtesy of @marcgravell - http://code.google.com/p/protobuf-net/source/browse/trunk/protobuf-net/BufferPool.cs - - - - - Provides thread-safe pooling of redis client connections. - - - - - Returns a Read/Write client (The default) using the hosts defined in ReadWriteHosts - - - - - - Called within a lock - - - - - - Disposes the write client. - - The client. - - - - The client wraps the native redis operations into a more readable c# API. - - Where possible these operations are also exposed in common c# interfaces, - e.g. RedisClient.Lists => IList[string] - RedisClient.Sets => ICollection[string] - - - - - This class contains all the common operations for the RedisClient. - The client contains a 1:1 mapping of c# methods to redis operations of the same name. - - Not threadsafe use a pooled manager - - - - - Requires custom result parsing - - Number of results - - - - Command to set multuple binary safe arguments - - - - - - - reset buffer index in send buffer - - - - - Used to manage connection pooling - - - - - Gets or sets object key prefix. - - - - - Creates a new instance of the Redis Client from NewFactoryFn. - - - - - Alias for GetValue - - - - - Returns key with automatic object id detection in provided value with generic type. - - - - - - - Returns key with explicit object id. - - - - - - - Returns key with explicit object type and id. - - - - - - - - A complete redis command, with method to send command, receive response, and run callback on success or failure - - - - - Allows you to get Redis value operations to operate against POCO types. - - - - - - Use this to share the same redis connection with another - - The client. - - - - Pipeline for redis typed client - - - - - - Queue of commands for redis typed client - - - - - - Redis operation (transaction/pipeline) that allows queued commands to be completed - - - - - For interoperabilty GetCacheClient() and GetReadOnlyCacheClient() - return an ICacheClient wrapper around the redis manager which has the affect of calling - GetClient() for all write operations and GetReadOnlyClient() for the read ones. - - This works well for master-slave replication scenarios where you have - 1 master that replicates to multiple read slaves. - - - - - Ignore dispose on RedisClientsManager, which should be registered as a singleton - - - - - Useful wrapper IRedisClientsManager to cut down the boiler plate of most IRedisClient access - - - - - Creates a PubSubServer that uses a background thread to listen and process for - Redis Pub/Sub messages published to the specified channel. - Use optional callbacks to listen for message, error and life-cycle events. - Callbacks can be assigned later, then call Start() for PubSubServer to start listening for messages - - - - - A complete redis command, with method to send command, receive response, and run callback on success or failure - - - - - Redis command that does not get queued - - - - - Initialize channel and register client manager - - - - - - Check if GetValidSentinel should try the next sentinel server - - - This will be true if the failures is less than either RedisSentinel.MaxFailures or the # of sentinels, whatever is greater - - - - Raised if there is an error from a sentinel worker - - - - - - - Event that is fired when the sentinel subscription raises an event - - - - - - - Does a sentinel check for masters and slaves and either sets up or fails over to the new config - - - - - Takes output from sentinel slaves command and converts into a list of servers - - - - - - - Takes output from sentinel master command and converts into a list of servers - - - - - - - Provides a redis connection pool that can be sharded - - - - - Provides thread-safe pooling of redis client connections. - Allows load-balancing of master-write and read-slave hosts, ideal for - 1 master and multiple replicated read slaves. - - - - - Hosts can be an IP Address or Hostname in the format: host[:port] - e.g. 127.0.0.1:6379 - default is: localhost:6379 - - The write hosts. - The read hosts. - The config. - - - - Returns a Read/Write client (The default) using the hosts defined in ReadWriteHosts - - - - - - Called within a lock - - - - - - Returns a ReadOnly client using the hosts defined in ReadOnlyHosts. - - - - - - Called within a lock - - - - - - Disposes the read only client. - - The client. - - - - Disposes the write client. - - The client. - - - - Gets or sets object key prefix. - - - - - Manage a client acquired from the PooledRedisClientManager - Dispose method will release the client back to the pool. - - - - - wrap the acquired client - - - - - - release the wrapped client back to the pool - - - - - access the wrapped client - - - - - logical name - - - - - An arbitrary weight relative to other nodes - - - - logical name - An arbitrary weight relative to other nodes - redis nodes - - - - Provides sharding of redis client connections. - uses consistent hashing to distribute keys across connection pools - - - - - maps a key to a redis connection pool - - key to map - a redis connection pool - - - - Adds a node and maps points across the circle - - node to add - An arbitrary number, specifies how often it occurs relative to other targets. - - - - A variation of Binary Search algorithm. Given a number, matches the next highest number from the sorted array. - If a higher number does not exist, then the first number in the array is returned. - - a sorted array to perform the search - number to find the next highest number against - next highest number - - - - Given a key, generates an unsigned 64 bit hash code using MD5 - - - - - - - Provides access to the method reflection data as part of the before/after event - - - - - Stores details about the context in which an IRedisClient is allocated. - - - - - - Tracks each IRedisClient instance allocated from the IRedisClientsManager logging when they are allocated and disposed. - Periodically writes the allocated instances to the log for diagnostic purposes. - - - - - Distributed lock interface - - - - - Optimized implementation. Primitive types are manually serialized, the rest are serialized using binary serializer />. - - - - - serialize/deserialize arbitrary objects - (objects must be serializable) - - - - - Serialize object to buffer - - serializable object - - - - - Deserialize buffer to object - - byte array to deserialize - - - - - - - - - - - - - - - - - - - serialize value and wrap with - - - - - - - Unwrap object wrapped in - - - - - - - pop numProcessed items from queue and unlock queue for work item id that dequeued - items are associated with - - - - - - A dequeued work item has been processed. When all of the dequeued items have been processed, - all items will be popped from the queue,and the queue unlocked for the work item id that - the dequeued items are associated with - - - - - Update first unprocessed item with new work item. - - - - - - - - - - - distributed work item queue. Each message must have an associated - work item id. For a given id, all work items are guaranteed to be processed - in the order in which they are received. - - - - - distributed work item queue. Each message must have an associated - work item id. For a given id, all work items are guaranteed to be processed - in the order in which they are received. - - - - - - - distributed work item queue - - - - - Enqueue item in priority queue corresponding to workItemId identifier - - - - - - - Preprare next work item id for dequeueing - - - - - Dequeue up to maxBatchSize items from queue corresponding to workItemId identifier. - Once this method is called, or will not - return any items for workItemId until the dequeue lock returned is unlocked. - - - - - - - - Replace existing work item in workItemId queue - - - - - - - - Queue incoming messages - - - - - - - Must call this periodically to move work items from priority queue to pending queue - - - - - Replace existing work item in workItemId queue - - - - - - - - Pop items from list - - - - - - - Force release of locks held by crashed servers - - - - - release lock held by crashed server - - - - true if lock is released, either by this method or by another client; false otherwise - - - - Unlock work item id, so other servers can process items for this id - - - - - - - - - - - - - - - - - - - - - - - - - - - pop remaining items that were returned by dequeue, and unlock queue - - - - - - indicate that an item has been processed by the caller - - - - - Update first unprocessed work item - - - - - - wraps a serialized representation of an object - - - - - - Initializes a new instance of . - - Custom item data. - The serialized item. - - - - The data representing the item being stored/retireved. - - - - - Flags set for this instance. - - - - - distributed lock class that follows the Resource Allocation Is Initialization pattern - - - - - Lock - - - - in seconds - in seconds - - - - unlock - - - - - Enqueue item - - - - - - Dequeue up to maxBatchSize items from queue - - - - - - - distributed work item queue. Messages are processed in chronological order - - - - - Enqueue incoming messages - - - - - - - - Dequeue next batch of work items - - - - - - - - - simple distributed work item queue - - - - - - - Queue incoming messages - - - - - - Dequeue next batch of work items for processing. After this method is called, - no other work items with same id will be available for - dequeuing until PostDequeue is called - - KeyValuePair: key is work item id, and value is list of dequeued items. - - - - - Serialize object to buffer - - serializable object - - - - - - - array of serializable objects - - - - - Deserialize buffer to object - - byte array to deserialize - - - - - - customize the client serializer - - - - - Factory to create SerializingRedisClient objects - - - - - - - - - General purpose pipeline - - - - - - Flush send buffer, and read responses - - - - - Wrap the common redis set operations under a ICollection[string] interface. - - - - - Adds support for Redis Transactions (i.e. MULTI/EXEC/DISCARD operations). - - - - - Put "QUEUED" messages at back of queue - - - - - - Issue exec command (not queued) - - - - - callback for after result count is read in - - - - - - Wrap the common redis set operations under a ICollection[string] interface. - - - - - Wrap the common redis set operations under a ICollection[string] interface. - - - - - Wrap the common redis set operations under a ICollection[string] interface. - - - - - Redis-specific exception. Thrown if unable to connect to Redis server due to socket exception, for example. - - - - - Adds support for Redis Transactions (i.e. MULTI/EXEC/DISCARD operations). - - - - - Put "QUEUED" messages at back of queue - - - - - - Issue exec command (not queued) - - - - - callback for after result count is read in - - - - - - Provide the default factory implementation for creating a RedisClient that - can be mocked and used by different 'Redis Client Managers' - - - - - Wrap the common redis set operations under a ICollection[string] interface. - - - - - Provide the factory implementation for creating a RedisCacheClient that - can be mocked and used by different 'Redis Client Managers' - - - - - Wrap the common redis set operations under a ICollection[string] interface. - - - - - Wrap the common redis list operations under a IList[string] interface. - - - - - Represents a generic collection of key/value pairs that are ordered independently of the key and value. - - The type of the keys in the dictionary - The type of the values in the dictionary - - - - Adds an entry with the specified key and value into the IOrderedDictionary<TKey,TValue> collection with the lowest available index. - - The key of the entry to add. - The value of the entry to add. - The index of the newly added entry - - You can also use the property to add new elements by setting the value of a key that does not exist in the IOrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the IOrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. - An element with the same key already exists in the IOrderedDictionary<TKey,TValue> - The IOrderedDictionary<TKey,TValue> is read-only.
      - -or-
      - The IOrderedDictionary<TKey,TValue> has a fized size.
      -
      - - - Inserts a new entry into the IOrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. - - The zero-based index at which the element should be inserted. - The key of the entry to add. - The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. - is less than 0.
      - -or-
      - is greater than .
      - An element with the same key already exists in the IOrderedDictionary<TKey,TValue>. - The IOrderedDictionary<TKey,TValue> is read-only.
      - -or-
      - The IOrderedDictionary<TKey,TValue> has a fized size.
      -
      - - - Gets or sets the value at the specified index. - - The zero-based index of the value to get or set. - The value of the item at the specified index. - is less than 0.
      - -or-
      - is equal to or greater than .
      -
      - - - Represents a generic collection of key/value pairs that are ordered independently of the key and value. - - The type of the keys in the dictionary - The type of the values in the dictionary - - - - Initializes a new instance of the OrderedDictionary<TKey,TValue> class. - - - - - Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified initial capacity. - - The initial number of elements that the OrderedDictionary<TKey,TValue> can contain. - is less than 0 - - - - Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified comparer. - - The IEqualityComparer<TKey> to use when comparing keys, or to use the default EqualityComparer<TKey> for the type of the key. - - - - Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified initial capacity and comparer. - - The initial number of elements that the OrderedDictionary<TKey,TValue> collection can contain. - The IEqualityComparer<TKey> to use when comparing keys, or to use the default EqualityComparer<TKey> for the type of the key. - is less than 0 - - - - Converts the object passed as a key to the key type of the dictionary - - The key object to check - The key object, cast as the key type of the dictionary - is . - The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . - - - - Converts the object passed as a value to the value type of the dictionary - - The object to convert to the value type of the dictionary - The value object, converted to the value type of the dictionary - is , and the value type of the OrderedDictionary<TKey,TValue> is a value type. - The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . - - - - Inserts a new entry into the OrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. - - The zero-based index at which the element should be inserted. - The key of the entry to add. - The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. - is less than 0.
      - -or-
      - is greater than .
      - is . - An element with the same key already exists in the OrderedDictionary<TKey,TValue>. -
      - - - Inserts a new entry into the OrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. - - The zero-based index at which the element should be inserted. - The key of the entry to add. - The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. - is less than 0.
      - -or-
      - is greater than .
      - is .
      - -or-
      - is , and the value type of the OrderedDictionary<TKey,TValue> is a value type.
      - The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
      - -or-
      - The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
      - -or-
      - An element with the same key already exists in the OrderedDictionary<TKey,TValue>.
      -
      - - - Removes the entry at the specified index from the OrderedDictionary<TKey,TValue> collection. - - The zero-based index of the entry to remove. - is less than 0.
      - -or-
      - index is equal to or greater than .
      -
      - - - Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. - - The key of the entry to add. - The value of the entry to add. This value can be . - A key cannot be , but a value can be. - You can also use the property to add new elements by setting the value of a key that does not exist in the OrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the OrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. - is - An element with the same key already exists in the OrderedDictionary<TKey,TValue> - - - - Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. - - The key of the entry to add. - The value of the entry to add. This value can be . - The index of the newly added entry - A key cannot be , but a value can be. - You can also use the property to add new elements by setting the value of a key that does not exist in the OrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the OrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. - is - An element with the same key already exists in the OrderedDictionary<TKey,TValue> - - - - Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. - - The key of the entry to add. - The value of the entry to add. This value can be . - is .
      - -or-
      - is , and the value type of the OrderedDictionary<TKey,TValue> is a value type.
      - The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
      - -or-
      - The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
      -
      - - - Removes all elements from the OrderedDictionary<TKey,TValue> collection. - - The capacity is not changed as a result of calling this method. - - - - Determines whether the OrderedDictionary<TKey,TValue> collection contains a specific key. - - The key to locate in the OrderedDictionary<TKey,TValue> collection. - if the OrderedDictionary<TKey,TValue> collection contains an element with the specified key; otherwise, . - is - - - - Determines whether the OrderedDictionary<TKey,TValue> collection contains a specific key. - - The key to locate in the OrderedDictionary<TKey,TValue> collection. - if the OrderedDictionary<TKey,TValue> collection contains an element with the specified key; otherwise, . - is - The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . - - - - Returns the zero-based index of the specified key in the OrderedDictionary<TKey,TValue> - - The key to locate in the OrderedDictionary<TKey,TValue> - The zero-based index of , if is found in the OrderedDictionary<TKey,TValue>; otherwise, -1 - This method performs a linear search; therefore it has a cost of O(n) at worst. - - - - Removes the entry with the specified key from the OrderedDictionary<TKey,TValue> collection. - - The key of the entry to remove - if the key was found and the corresponding element was removed; otherwise, - - - - Removes the entry with the specified key from the OrderedDictionary<TKey,TValue> collection. - - The key of the entry to remove - - - - Copies the elements of the OrderedDictionary<TKey,TValue> elements to a one-dimensional Array object at the specified index. - - The one-dimensional object that is the destination of the objects copied from the OrderedDictionary<TKey,TValue>. The must have zero-based indexing. - The zero-based index in at which copying begins. - The method preserves the order of the elements in the OrderedDictionary<TKey,TValue> - - - - Gets the value associated with the specified key. - - The key of the value to get. - When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of . This parameter can be passed uninitialized. - if the OrderedDictionary<TKey,TValue> contains an element with the specified key; otherwise, . - - - - Adds the specified value to the OrderedDictionary<TKey,TValue> with the specified key. - - The KeyValuePair<TKey,TValue> structure representing the key and value to add to the OrderedDictionary<TKey,TValue>. - - - - Determines whether the OrderedDictionary<TKey,TValue> contains a specific key and value. - - The KeyValuePair<TKey,TValue> structure to locate in the OrderedDictionary<TKey,TValue>. - if is found in the OrderedDictionary<TKey,TValue>; otherwise, . - - - - Copies the elements of the OrderedDictionary<TKey,TValue> to an array of type , starting at the specified index. - - The one-dimensional array of type KeyValuePair<TKey,TValue> that is the destination of the KeyValuePair<TKey,TValue> elements copied from the OrderedDictionary<TKey,TValue>. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Removes a key and value from the dictionary. - - The KeyValuePair<TKey,TValue> structure representing the key and value to remove from the OrderedDictionary<TKey,TValue>. - if the key and value represented by is successfully found and removed; otherwise, . This method returns if is not found in the OrderedDictionary<TKey,TValue>. - - - - Gets the dictionary object that stores the keys and values - - The dictionary object that stores the keys and values for the OrderedDictionary<TKey,TValue> - Accessing this property will create the dictionary object if necessary - - - - Gets the list object that stores the key/value pairs. - - The list object that stores the key/value pairs for the OrderedDictionary<TKey,TValue> - Accessing this property will create the list object if necessary. - - - - Gets or sets the value at the specified index. - - The zero-based index of the value to get or set. - The value of the item at the specified index. - is less than 0.
      - -or-
      - index is equal to or greater than .
      -
      - - - Gets or sets the value at the specified index. - - The zero-based index of the value to get or set. - The value of the item at the specified index. - is less than 0.
      - -or-
      - index is equal to or greater than .
      - is a null reference, and the value type of the OrderedDictionary<TKey,TValue> is a value type. - The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . -
      - - - Gets a value indicating whether the OrderedDictionary<TKey,TValue> has a fixed size. - - if the OrderedDictionary<TKey,TValue> has a fixed size; otherwise, . The default is . - - - - Gets a value indicating whether the OrderedDictionary<TKey,TValue> collection is read-only. - - if the OrderedDictionary<TKey,TValue> is read-only; otherwise, . The default is . - - A collection that is read-only does not allow the addition, removal, or modification of elements after the collection is created. - A collection that is read-only is simply a collection with a wrapper that prevents modification of the collection; therefore, if changes are made to the underlying collection, the read-only collection reflects those changes. - - - - - Gets an object containing the keys in the OrderedDictionary<TKey,TValue>. - - An object containing the keys in the OrderedDictionary<TKey,TValue>. - The returned object is not a static copy; instead, the collection refers back to the keys in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the key collection. - - - - Gets an object containing the values in the OrderedDictionary<TKey,TValue> collection. - - An object containing the values in the OrderedDictionary<TKey,TValue> collection. - The returned object is not a static copy; instead, the refers back to the values in the original OrderedDictionary<TKey,TValue> collection. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the . - - - - Gets or sets the value with the specified key. - - The key of the value to get or set. - The value associated with the specified key. If the specified key is not found, attempting to get it returns , and attempting to set it creates a new element using the specified key. - - - - Gets or sets the value with the specified key. - - The key of the value to get or set. - The value associated with the specified key. If the specified key is not found, attempting to get it returns , and attempting to set it creates a new element using the specified key. - - - - Gets the number of key/values pairs contained in the OrderedDictionary<TKey,TValue> collection. - - The number of key/value pairs contained in the OrderedDictionary<TKey,TValue> collection. - - - - Gets a value indicating whether access to the OrderedDictionary<TKey,TValue> object is synchronized (thread-safe). - - This method always returns false. - - - - Gets an object that can be used to synchronize access to the OrderedDictionary<TKey,TValue> object. - - An object that can be used to synchronize access to the OrderedDictionary<TKey,TValue> object. - - - - Gets an ICollection<TKey> object containing the keys in the OrderedDictionary<TKey,TValue>. - - An ICollection<TKey> object containing the keys in the OrderedDictionary<TKey,TValue>. - The returned ICollection<TKey> object is not a static copy; instead, the collection refers back to the keys in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the key collection. - - - - Gets an ICollection<TValue> object containing the values in the OrderedDictionary<TKey,TValue>. - - An ICollection<TValue> object containing the values in the OrderedDictionary<TKey,TValue>. - The returned ICollection<TKey> object is not a static copy; instead, the collection refers back to the values in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the value collection. - - - - acquire distributed, non-reentrant lock on key - - global key for this lock - timeout for acquiring lock - timeout for lock, in seconds (stored as value against lock key) - - - - - - unlock key - - - - - - - - - - - - - Locking strategy interface - - - - - This class manages a read lock for a local readers/writer lock, - using the Resource Acquisition Is Initialization pattern - - - - - RAII initialization - - - - - - RAII disposal - - - - - This class manages a write lock for a local readers/writer lock, - using the Resource Acquisition Is Initialization pattern - - - - - - RAII disposal - - - - - manages a "region" in the redis key space - namespace can be cleared by incrementing the generation - - - - - get current generation - - - - - - set new generation - - - - - - redis key for generation - - - - - - get redis key that holds all namespace keys - - - - - - get global cache key - - - - - - - get global key inside of this namespace - - - prefixes can be added for name deconfliction - - - - - replace UniqueCharacter with its double, to avoid name clash - - - - - - - - - - - - - - get locking strategy - - -
      -
      diff --git a/lib/ServiceStack.Redis.dll b/lib/ServiceStack.Redis.dll deleted file mode 100644 index 90b6a3bc3c4..00000000000 Binary files a/lib/ServiceStack.Redis.dll and /dev/null differ diff --git a/lib/ServiceStack.Text.XML b/lib/ServiceStack.Text.XML deleted file mode 100644 index 6cf831f51f8..00000000000 --- a/lib/ServiceStack.Text.XML +++ /dev/null @@ -1,714 +0,0 @@ - - - - ServiceStack.Text - - - - - Utils to load types - - - - - Find the type from the name supplied - - [typeName] or [typeName, assemblyName] - - - - - The top-most interface of the given type, if any. - - - - - Find type if it exists - - - - The type if it exists - - - - Populate an object with Example data. - - - - - - - Populates the object with example data. - - - Tracks how deeply nested we are - - - - - If AlwaysUseUtc is set to true then convert all DateTime to UTC. - - - - - - - Repairs an out-of-spec XML date/time string which incorrectly uses a space instead of a 'T' to separate the date from the time. - These string are occasionally generated by SQLite and can cause errors in OrmLite when reading these columns from the DB. - - The XML date/time string to repair - The repaired string. If no repairs were made, the original string is returned. - - - - WCF Json format: /Date(unixts+0000)/ - - - - - - - WCF Json format: /Date(unixts+0000)/ - - - - - - - Get the type(string) constructor if exists - - The type. - - - - - micro optimizations: using flags instead of value.IndexOfAny(EscapeChars) - - - - - - - Class to hold - - - - - - A fast, standards-based, serialization-issue free DateTime serailizer. - - - - - Determines whether this serializer can create the specified type from a string. - - The type. - - true if this instance [can create from string] the specified type; otherwise, false. - - - - - Parses the specified value. - - The value. - - - - - Deserializes from reader. - - The reader. - - - - - Serializes to string. - - The value. - - - - - Serializes to writer. - - The value. - The writer. - - - - Sets which format to use when serializing TimeSpans - - - - - if the is configured - to take advantage of specification, - to support user-friendly serialized formats, ie emitting camelCasing for JSON - and parsing member names and enum values in a case-insensitive manner. - - - - - if the is configured - to support web-friendly serialized formats, ie emitting lowercase_underscore_casing for JSON - - - - - Define how property names are mapped during deserialization - - - - - Gets or sets a value indicating if the framework should throw serialization exceptions - or continue regardless of deserialization errors. If the framework - will throw; otherwise, it will parse as many fields as possible. The default is . - - - - - Gets or sets a value indicating if the framework should always convert to UTC format instead of local time. - - - - - Gets or sets a value indicating if the framework should always assume is in UTC format if Kind is Unspecified. - - - - - Gets or sets whether we should append the Utc offset when we serialize Utc dates. Defaults to no. - Only supported for when the JsConfig.DateHandler == JsonDateHandler.TimestampOffset - - - - - Gets or sets a value indicating if unicode symbols should be serialized as "\uXXXX". - - - - - If set to true, Interface types will be prefered over concrete types when serializing. - - - - - For extra serialization performance you can re-use a ThreadStatic StringBuilder - when serializing to a JSON String. - - - - - Sets the maximum depth to avoid circular dependencies - - - - - Set this to enable your own type construction provider. - This is helpful for integration with IoC containers where you need to call the container constructor. - Return null if you don't know how to construct the type and the parameterless constructor will be used. - - - - - If set to true, Interface types will be prefered over concrete types when serializing. - - - - - Always emit type info for this type. Takes precedence over ExcludeTypeInfo - - - - - Never emit type info for this type - - - - - if the is configured - to take advantage of specification, - to support user-friendly serialized formats, ie emitting camelCasing for JSON - and parsing member names and enum values in a case-insensitive manner. - - - - - Define custom serialization fn for BCL Structs - - - - - Define custom raw serialization fn - - - - - Define custom serialization hook - - - - - Define custom after serialization hook - - - - - Define custom deserialization fn for BCL Structs - - - - - Define custom raw deserialization fn for objects - - - - - Exclude specific properties of this type from being serialized - - - - - Opt-in flag to set some Value Types to be treated as a Ref Type - - - - - Whether there is a fn (raw or otherwise) - - - - - The property names on target types must match property names in the JSON source - - - - - The property names on target types may not match the property names in the JSON source - - - - - Uses the xsd format like PT15H10M20S - - - - - Uses the standard .net ToString method of the TimeSpan class - - - - - Get JSON string value converted to T - - - - - Get JSON string value - - - - - Get unescaped string value - - - - - Get unescaped string value - - - - - Write JSON Array, Object, bool or number values as raw string - - - - - Get JSON string value - - - - - Creates an instance of a Type from a string value - - - - - Parses the specified value. - - The value. - - - - - Shortcut escape when we're sure value doesn't contain any escaped chars - - - - - - - Given a character as utf32, returns the equivalent string provided that the character - is legal json. - - - - - - - micro optimizations: using flags instead of value.IndexOfAny(EscapeChars) - - - - - - - Implement the serializer using a more static approach - - - - - - Implement the serializer using a more static approach - - - - - - Public Code API to register commercial license for ServiceStack. - - - - - Internal Utilities to verify licensing - - - - - Pretty Thread-Safe cache class from: - http://code.google.com/p/dapper-dot-net/source/browse/Dapper/SqlMapper.cs - - This is a micro-cache; suitable when the number of terms is controllable (a few hundred, for example), - and strictly append-only; you cannot change existing values. All key matches are on **REFERENCE** - equality. The type is fully thread-safe. - - - - - Represents an individual object, allowing access to members by-name - - - - - Use the target types definition of equality - - - - - Obtain the hash of the target object - - - - - Use the target's definition of a string representation - - - - - Wraps an individual object, allowing by-name access to that instance - - - - - Get or Set the value of a named member for the underlying object - - - - - The object represented by this instance - - - - - Provides by-name member-access to objects of a given type - - - - - Create a new instance of this type - - - - - Provides a type-specific accessor, allowing by-name access for all objects of that type - - The accessor is cached internally; a pre-existing accessor may be returned - - - - Does this type support new instances via a parameterless constructor? - - - - - Get or set the value of a named member on the target instance - - - - - Maps the path of a file in the context of a VS project - - the relative path - the absolute path - Assumes static content is two directories above the /bin/ directory, - eg. in a unit test scenario the assembly would be in /bin/Debug/. - - - - Maps the path of a file in a self-hosted scenario - - the relative path - the absolute path - Assumes static content is copied to /bin/ folder with the assemblies - - - - Maps the path of a file in an Asp.Net hosted scenario - - the relative path - the absolute path - Assumes static content is in the parent folder of the /bin/ directory - - - - Implement the serializer using a more static approach - - - - - - Creates a new instance of type. - First looks at JsConfig.ModelFactory before falling back to CreateInstance - - - - - Creates a new instance of type. - First looks at JsConfig.ModelFactory before falling back to CreateInstance - - - - - Creates a new instance from the default constructor of type - - - - - Add a Property attribute at runtime. - Not threadsafe, should only add attributes on Startup. - - - - - Add a Property attribute at runtime. - Not threadsafe, should only add attributes on Startup. - - - - - @jonskeet: Collection of utility methods which operate on streams. - r285, February 26th 2009: http://www.yoda.arachsys.com/csharp/miscutil/ - - - - - Reads the given stream up to the end, returning the data as a byte - array. - - - - - Reads the given stream up to the end, returning the data as a byte - array, using the given buffer size. - - - - - Reads the given stream up to the end, returning the data as a byte - array, using the given buffer for transferring data. Note that the - current contents of the buffer is ignored, so the buffer needn't - be cleared beforehand. - - - - - Copies all the data from one stream into another. - - - - - Copies all the data from one stream into another, using a buffer - of the given size. - - - - - Copies all the data from one stream into another, using the given - buffer for transferring data. Note that the current contents of - the buffer is ignored, so the buffer needn't be cleared beforehand. - - - - - Reads exactly the given number of bytes from the specified stream. - If the end of the stream is reached before the specified amount - of data is read, an exception is thrown. - - - - - Reads into a buffer, filling it completely. - - - - - Reads exactly the given number of bytes from the specified stream, - into the given buffer, starting at position 0 of the array. - - - - - Reads exactly the given number of bytes from the specified stream, - into the given buffer, starting at position 0 of the array. - - - - - Same as ReadExactly, but without the argument checks. - - - - - Converts from base: 0 - 62 - - The source. - From. - To. - - - - - Skip the encoding process for 'safe strings' - - - - - - - A class to allow the conversion of doubles to string representations of - their exact decimal values. The implementation aims for readability over - efficiency. - - Courtesy of @JonSkeet - http://www.yoda.arachsys.com/csharp/DoubleConverter.cs - - - - - - - - How many digits are *after* the decimal point - - - - - Constructs an arbitrary decimal expansion from the given long. - The long must not be negative. - - - - - Multiplies the current expansion by the given amount, which should - only be 2 or 5. - - - - - Shifts the decimal point; a negative value makes - the decimal expansion bigger (as fewer digits come after the - decimal place) and a positive value makes the decimal - expansion smaller. - - - - - Removes leading/trailing zeroes from the expansion. - - - - - Converts the value to a proper decimal string representation. - - - - - Creates an instance of a Type from a string value - - - - - Determines whether the specified type is convertible from string. - - The type. - - true if the specified type is convertible from string; otherwise, false. - - - - - Parses the specified value. - - The value. - - - - - Parses the specified type. - - The type. - The value. - - - - - Useful extension method to get the Dictionary[string,string] representation of any POCO type. - - - - - - Recursively prints the contents of any POCO object in a human-friendly, readable format - - - - - - Print Dump to Console.WriteLine - - - - - Print string.Format to Console.WriteLine - - - - - Parses the specified value. - - The value. - - - - diff --git a/lib/ServiceStack.Text.dll b/lib/ServiceStack.Text.dll deleted file mode 100644 index 6b82b53e6bd..00000000000 Binary files a/lib/ServiceStack.Text.dll and /dev/null differ diff --git a/lib/ServiceStack.dll b/lib/ServiceStack.dll deleted file mode 100644 index 9c9c5228463..00000000000 Binary files a/lib/ServiceStack.dll and /dev/null differ diff --git a/lib/ServiceStack.pdb b/lib/ServiceStack.pdb deleted file mode 100644 index 76a9a890aab..00000000000 Binary files a/lib/ServiceStack.pdb and /dev/null differ diff --git a/lib/System.Web.Mvc.dll b/lib/System.Web.Mvc.dll deleted file mode 100644 index eed0d994a05..00000000000 Binary files a/lib/System.Web.Mvc.dll and /dev/null differ diff --git a/lib/System.Web.Mvc.xml b/lib/System.Web.Mvc.xml deleted file mode 100644 index af648fcbf71..00000000000 --- a/lib/System.Web.Mvc.xml +++ /dev/null @@ -1,9395 +0,0 @@ - - - - System.Web.Mvc - - - - Represents an attribute that specifies which HTTP verbs an action method will respond to. - - - Initializes a new instance of the class by using a list of HTTP verbs that the action method will respond to. - The HTTP verbs that the action method will respond to. - The parameter is null or zero length. - - - Initializes a new instance of the class using the HTTP verbs that the action method will respond to. - The HTTP verbs that the action method will respond to. - - - Determines whether the specified method information is valid for the specified controller context. - true if the method information is valid; otherwise, false. - The controller context. - The method information. - The parameter is null. - - - Gets or sets the list of HTTP verbs that the action method will respond to. - The list of HTTP verbs that the action method will respond to. - - - Provides information about an action method, such as its name, controller, parameters, attributes, and filters. - - - Initializes a new instance of the class. - - - Gets the name of the action method. - The name of the action method. - - - Gets the controller descriptor. - The controller descriptor. - - - Executes the action method by using the specified parameters and controller context. - The result of executing the action method. - The controller context. - The parameters of the action method. - - - Returns an array of custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns an array of custom attributes that are defined for this member, identified by type. - An array of custom attributes, or an empty array if no custom attributes of the specified type exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - The parameter is null. - - - Returns the filters that are associated with this action method. - The filters that are associated with this action method. - - - Returns the parameters of the action method. - The parameters of the action method. - - - Returns the action-method selectors. - The action-method selectors. - - - Determines whether one or more instances of the specified attribute type are defined for this member. - true if is defined for this member; otherwise, false. - The type of the custom attribute. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The parameter is null. - - - Gets the unique ID for the action descriptor using lazy initialization. - The unique ID. - - - Provides the context for the ActionExecuted method of the class. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The controller context. - The action method descriptor. - true if the action is canceled. - The exception object. - The parameter is null. - - - Gets or sets the action descriptor. - The action descriptor. - - - Gets or sets a value that indicates that this object is canceled. - true if the context canceled; otherwise, false. - - - Gets or sets the exception that occurred during the execution of the action method, if any. - The exception that occurred during the execution of the action method. - - - Gets or sets a value that indicates whether the exception is handled. - true if the exception is handled; otherwise, false. - - - Gets or sets the result returned by the action method. - The result returned by the action method. - - - Provides the context for the ActionExecuting method of the class. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified controller context, action descriptor, and action-method parameters. - The controller context. - The action descriptor. - The action-method parameters. - The or parameter is null. - - - Gets or sets the action descriptor. - The action descriptor. - - - Gets or sets the action-method parameters. - The action-method parameters. - - - Gets or sets the result that is returned by the action method. - The result that is returned by the action method. - - - Represents the base class for filter attributes. - - - Initializes a new instance of the class. - - - Called by the ASP.NET MVC framework after the action method executes. - The filter context. - - - Called by the ASP.NET MVC framework before the action method executes. - The filter context. - - - Called by the ASP.NET MVC framework after the action result executes. - The filter context. - - - Called by the ASP.NET MVC framework before the action result executes. - The filter context. - - - Represents an attribute that is used to influence the selection of an action method. - - - Initializes a new instance of the class. - - - Determines whether the action method selection is valid for the specified controller context. - true if the action method selection is valid for the specified controller context; otherwise, false. - The controller context. - Information about the action method. - - - Represents an attribute that is used for the name of an action. - - - Initializes a new instance of the class. - Name of the action. - The parameter is null or empty. - - - Determines whether the action name is valid within the specified controller context. - true if the action name is valid within the specified controller context; otherwise, false. - The controller context. - The name of the action. - Information about the action method. - - - Gets or sets the name of the action. - The name of the action. - - - Represents an attribute that affects the selection of an action method. - - - Initializes a new instance of the class. - - - Determines whether the action name is valid in the specified controller context. - true if the action name is valid in the specified controller context; otherwise, false. - The controller context. - The name of the action. - Information about the action method. - - - Encapsulates the result of an action method and is used to perform a framework-level operation on behalf of the action method. - - - Initializes a new instance of the class. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context in which the result is executed. The context information includes the controller, HTTP content, request context, and route data. - - - Represents a delegate that contains the logic for selecting an action method. - true if an action method was successfully selected; otherwise, false. - The current HTTP request context. - - - Provides a class that implements the interface in order to support additional metadata. - - - Initializes a new instance of the class. - The name of the model metadata. - The value of the model metadata. - - - Gets the name of the additional metadata attribute. - The name of the of the additional metadata attribute. - - - Provides metadata to the model metadata creation process. - - - Gets the type of the of the additional metadata attribute. - The type of the of the additional metadata attribute. - - - Gets the value of the of the additional metadata attribute. - The value of the of the additional metadata attribute. - - - Represents support for rendering HTML in AJAX scenarios within a view. - - - Initializes a new instance of the class using the specified view context and view data container. - The view context. - The view data container. - One or both of the parameters is null. - - - Initializes a new instance of the class by using the specified view context, view data container, and route collection. - The view context. - The view data container. - The URL route collection. - One or more of the parameters is null. - - - Gets or sets the root path for the location to use for globalization script files. - The location of the folder where globalization script files are stored. The default location is "~/Scripts/Globalization". - - - Serializes the specified message and returns the resulting JSON-formatted string. - The serialized message as a JSON-formatted string. - The message to serialize. - - - Gets the collection of URL routes for the application. - The collection of routes for the application. - - - Gets the context information about the view. - The context of the view. - - - Gets the current view data dictionary. - The view data dictionary. - - - Gets the view data container. - The view data container. - - - Represents support for rendering HTML in AJAX scenarios within a strongly typed view. - The type of the model. - - - Initializes a new instance of the class by using the specified view context and view data container. - The view context. - The view data container. - - - Initializes a new instance of the class by using the specified view context, view data container, and URL route collection. - The view context. - The view data container. - The URL route collection. - - - Gets the strongly typed version of the view data dictionary. - The strongly typed data dictionary of the view. - - - Represents a class that extends the class by adding the ability to determine whether an HTTP request is an AJAX request. - - - - Allows a request to include HTML markup during model binding by skipping request validation for the property. (It is strongly recommended that your application explicitly check all models where you disable request validation in order to prevent script exploits.) - - - Initializes a new instance of the class. - - - This method supports the ASP.NET MVC validation infrastructure and is not intended to be used directly from your code. - The model metadata. - - - Provides a way to register one or more areas in an ASP.NET MVC application. - - - Initializes a new instance of the class. - - - Gets the name of the area to register. - The name of the area to register. - - - Registers all areas in an ASP.NET MVC application. - - - Registers all areas in an ASP.NET MVC application by using the specified user-defined information. - An object that contains user-defined information to pass to the area. - - - Registers an area in an ASP.NET MVC application using the specified area's context information. - Encapsulates the information that is required in order to register the area. - - - Encapsulates the information that is required in order to register an area within an ASP.NET MVC application. - - - Initializes a new instance of the class using the specified area name and routes collection. - The name of the area to register. - The collection of routes for the application. - - - Initializes a new instance of the class using the specified area name, routes collection, and user-defined data. - The name of the area to register. - The collection of routes for the application. - An object that contains user-defined information to pass to the area. - - - Gets the name of the area to register. - The name of the area to register. - - - Maps the specified URL route and associates it with the area that is specified by the property. - A reference to the mapped route. - The name of the route. - The URL pattern for the route. - The parameter is null. - - - Maps the specified URL route and associates it with the area that is specified by the property, using the specified route default values. - A reference to the mapped route. - The name of the route. - The URL pattern for the route. - An object that contains default route values. - The parameter is null. - - - Maps the specified URL route and associates it with the area that is specified by the property, using the specified route default values and constraint. - A reference to the mapped route. - The name of the route. - The URL pattern for the route. - An object that contains default route values. - A set of expressions that specify valid values for a URL parameter. - The parameter is null. - - - Maps the specified URL route and associates it with the area that is specified by the property, using the specified route default values, constraints, and namespaces. - A reference to the mapped route. - The name of the route. - The URL pattern for the route. - An object that contains default route values. - A set of expressions that specify valid values for a URL parameter. - An enumerable set of namespaces for the application. - The parameter is null. - - - Maps the specified URL route and associates it with the area that is specified by the property, using the specified route default values and namespaces. - A reference to the mapped route. - The name of the route. - The URL pattern for the route. - An object that contains default route values. - An enumerable set of namespaces for the application. - The parameter is null. - - - Maps the specified URL route and associates it with the area that is specified by the property, using the specified namespaces. - A reference to the mapped route. - The name of the route. - The URL pattern for the route. - An enumerable set of namespaces for the application. - The parameter is null. - - - Gets the namespaces for the application. - An enumerable set of namespaces for the application. - - - Gets a collection of defined routes for the application. - A collection of defined routes for the application. - - - Gets an object that contains user-defined information to pass to the area. - An object that contains user-defined information to pass to the area. - - - Provides an abstract class to implement a metadata provider. - - - Called from constructors in a derived class to initialize the class. - - - When overridden in a derived class, creates the model metadata for the property. - The model metadata for the property. - The set of attributes. - The type of the container. - The model accessor. - The type of the model. - The name of the property. - - - Gets a list of attributes. - A list of attributes. - The type of the container. - The property descriptor. - The attribute container. - - - Returns a list of properties for the model. - A list of properties for the model. - The model container. - The type of the container. - - - Returns the metadata for the specified property using the container type and property descriptor. - The metadata for the specified property using the container type and property descriptor. - The model accessor. - The type of the container. - The property descriptor - - - Returns the metadata for the specified property using the container type and property name. - The metadata for the specified property using the container type and property name. - The model accessor. - The type of the container. - The name of the property. - - - Returns the metadata for the specified property using the type of the model. - The metadata for the specified property using the type of the model. - The model accessor. - The type of the model. - - - Returns the type descriptor from the specified type. - The type descriptor. - The type. - - - Provides an abstract class for classes that implement a validation provider. - - - Called from constructors in derived classes to initialize the class. - - - Gets a type descriptor for the specified type. - A type descriptor for the specified type. - The type of the validation provider. - - - Gets the validators for the model using the metadata and controller context. - The validators for the model. - The metadata. - The controller context. - - - Gets the validators for the model using the metadata, the controller context, and a list of attributes. - The validators for the model. - The metadata. - The controller context. - The list of attributes. - - - Provides the base class for asynchronous controllers. - - - Initializes a new instance of the class. - - - Gets the asynchronous manager instance. - The asynchronous manager instance. - - - Called by ASP.NET to initialize asynchronous request processing. - The status of the asynchronous operation. - The request context. - The asynchronous callback method. - The state object. - - - Called by ASP.NET during initialization of asynchronous request processing. - The status of the asynchronous operation. - The asynchronous callback method. - The state object. - - - Creates an action invoker. - An action invoker. - - - Cancels the execution of an asynchronous action method. - The status of the asynchronous result. - - - Called by ASP.NET when the current asynchronous action has completed. - The status of the asynchronous result. - - - Called by ASP.NET to begin the execution of an asynchronous action method. - The status of the asynchronous operation. - The request context. - The asynchronous callback method. - An object that contains information to be used by the callback method. This parameter can be null. - - - Cancels the execution of an asynchronous action method by ASP.NET at the end of the execution of an asynchronous action method. - The status of the asynchronous result. - - - Represents an attribute that is used to set the timeout value, in milliseconds, for an asynchronous method. - - - Initializes a new instance of the class. - The timeout value, in milliseconds. - - - Gets the timeout duration, in milliseconds. - The timeout duration, in milliseconds. - - - Called by ASP.NET before the asynchronous action method executes. - The filter context. - - - Encapsulates the information that is required for using an attribute. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the specified controller context. - The context within which the result is executed. The context information includes the controller, HTTP content, request context, and route data. - - - Initializes a new instance of the class using the specified controller context and action descriptor. - The context in which the result is executed. The context information includes the controller, HTTP content, request context, and route data. - An object that provides information about an action method, such as its name, controller, parameters, attributes, and filters. - - - Provides information about the action method that is marked by the attribute, such as its name, controller, parameters, attributes, and filters. - The action descriptor for the action method that is marked by the attribute. - - - Gets or sets the result that is returned by an action method. - The result that is returned by an action method. - - - Represents an attribute that is used to restrict access by callers to an action method. - - - Initializes a new instance of the class. - - - When overridden, provides an entry point for custom authorization checks. - true if the user is authorized; otherwise, false. - The HTTP context, which encapsulates all HTTP-specific information about an individual HTTP request. - The parameter is null. - - - Processes HTTP requests that fail authorization. - Encapsulates the information for using . The object contains the controller, HTTP context, request context, action result, and route data. - - - Called when a process requests authorization. - The filter context, which encapsulates information for using . - The parameter is null. - - - Called when the caching module requests authorization. - A reference to the validation status. - The HTTP context, which encapsulates all HTTP-specific information about an individual HTTP request. - The parameter is null. - - - Gets or sets the user roles. - The user roles. - - - Gets the unique identifier for this attribute. - The unique identifier for this attribute. - - - Gets or sets the authorized users. - The authorized users. - - - Represents an attribute that is used to provide details about how model binding to a parameter should occur. - - - Initializes a new instance of the class. - - - Gets or sets a comma-delimited list of property names for which binding is not allowed. - The exclude list. - - - Gets or sets a comma-delimited list of property names for which binding is allowed. - The include list. - - - Determines whether the specified property is allowed. - true if the specified property is allowed; otherwise, false. - The name of the property. - - - Gets or sets the prefix to use when markup is rendered for binding to an action argument or to a model property. - The prefix to use. - - - Represents the base class for views that are compiled by the BuildManager class before being rendered by a view engine. - - - Initializes a new instance of the class using the specified controller context and view path. - The controller context. - The view path. - - - Initializes a new instance of the class using the specified controller context, view path, and view page activator. - Context information for the current controller. This information includes the HTTP context, request context, route data, parent action view context, and more. - The path to the view that will be rendered. - The object responsible for dynamically constructing the view page at run time. - The parameter is null. - The parameter is null or empty. - - - Renders the specified view context by using the specified the writer object. - Information related to rendering a view, such as view data, temporary data, and form context. - The writer object. - The parameter is null. - An instance of the view type could not be created. - - - When overridden in a derived class, renders the specified view context by using the specified writer object and object instance. - Information related to rendering a view, such as view data, temporary data, and form context. - The writer object. - An object that contains additional information that can be used in the view. - - - Gets or sets the view path. - The view path. - - - Provides a base class for view engines. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the specified view page activator. - The view page activator. - - - Gets a value that indicates whether a file exists in the specified virtual file system (path). - true if the file exists in the virtual file system; otherwise, false. - The controller context. - The virtual path. - - - Gets the view page activator. - The view page activator. - - - Maps a browser request to a byte array. - - - Initializes a new instance of the class. - - - Binds the model by using the specified controller context and binding context. - The bound data object. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - The parameter is null. - - - Represents an attribute that is used to indicate that an action method should be called only as a child action. - - - Initializes a new instance of the class. - - - Called when authorization is required. - An object that encapsulates the information that is required in order to authorize access to the child action. - - - Represents a value provider for values from child actions. - - - Initializes a new instance of the class. - The controller context. - - - Retrieves a value object using the specified key. - The value object for the specified key. - The key. - - - Represents a factory for creating value provider objects for child actions. - - - Initializes a new instance of the class. - - - Returns a object for the specified controller context. - A object. - The controller context. - - - Returns the client data-type model validators. - - - Initializes a new instance of the class. - - - Returns the client data-type model validators. - The client data-type model validators. - The metadata. - The context. - - - Provides an attribute that compares two properties of a model. - - - Initializes a new instance of the class. - The property to compare with the current property. - - - Applies formatting to an error message based on the data field where the compare error occurred. - The formatted error message. - The name of the field that caused the validation failure. - - - Formats the property for client validation by prepending an asterisk (*) and a dot. - The string "*." is prepended to the property. - The property. - - - Gets a list of compare-value client validation rules for the property using the specified model metadata and controller context. - A list of compare-value client validation rules. - The model metadata. - The controller context. - - - Determines whether the specified object is equal to the compared object. - null if the value of the compared property is equal to the value parameter; otherwise, a validation result that contains the error message that indicates that the comparison failed. - The value of the object to compare. - The validation context. - - - Gets the property to compare with the current property. - The property to compare with the current property. - - - Represents a user-defined content type that is the result of an action method. - - - Initializes a new instance of the class. - - - Gets or sets the content. - The content. - - - Gets or sets the content encoding. - The content encoding. - - - Gets or sets the type of the content. - The type of the content. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context within which the result is executed. - The parameter is null. - - - Provides methods that respond to HTTP requests that are made to an ASP.NET MVC Web site. - - - Initializes a new instance of the class. - - - Gets the action invoker for the controller. - The action invoker. - - - Gets or sets the binder. - The binder. - - - Creates a content result object by using a string. - The content result instance. - The content to write to the response. - - - Creates a content result object by using a string and the content type. - The content result instance. - The content to write to the response. - The content type (MIME type). - - - Creates a content result object by using a string, the content type, and content encoding. - The content result instance. - The content to write to the response. - The content type (MIME type). - The content encoding. - - - Creates an action invoker. - An action invoker. - - - Creates a temporary data provider. - A temporary data provider. - - - Releases all resources that are used by the current instance of the class. - - - Releases unmanaged resources and optionally releases managed resources. - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - Invokes the action in the current controller context. - - - Creates a object by using the file contents and file type. - The file-content result object. - The binary content to send to the response. - The content type (MIME type). - - - Creates a object by using the file contents, content type, and the destination file name. - The file-content result object. - The binary content to send to the response. - The content type (MIME type). - The file name to use in the file-download dialog box that is displayed in the browser. - - - Creates a object by using the object and content type. - The file-content result object. - The stream to send to the response. - The content type (MIME type). - - - Creates a object using the object, the content type, and the target file name. - The file-stream result object. - The stream to send to the response. - The content type (MIME type) - The file name to use in the file-download dialog box that is displayed in the browser. - - - Creates a object by using the file name and the content type. - The file-stream result object. - The path of the file to send to the response. - The content type (MIME type). - - - Creates a object by using the file name, the content type, and the file download name. - The file-stream result object. - The path of the file to send to the response. - The content type (MIME type). - The file name to use in the file-download dialog box that is displayed in the browser. - - - Called when a request matches this controller, but no method with the specified action name is found in the controller. - The name of the attempted action. - - - Gets HTTP-specific information about an individual HTTP request. - The HTTP context. - - - Returns an instance of the class. - An instance of the class. - - - Returns an instance of the class. - An instance of the class. - The status description. - - - Initializes data that might not be available when the constructor is called. - The HTTP context and route data. - - - Creates a object. - The object that writes the script to the response. - The JavaScript code to run on the client - - - Creates a object that serializes the specified object to JavaScript Object Notation (JSON). - The JSON result object that serializes the specified object to JSON format. The result object that is prepared by this method is written to the response by the ASP.NET MVC framework when the object is executed. - The JavaScript object graph to serialize. - - - Creates a object that serializes the specified object to JavaScript Object Notation (JSON) format. - The JSON result object that serializes the specified object to JSON format. - The JavaScript object graph to serialize. - The content type (MIME type). - - - Creates a object that serializes the specified object to JavaScript Object Notation (JSON) format. - The JSON result object that serializes the specified object to JSON format. - The JavaScript object graph to serialize. - The content type (MIME type). - The content encoding. - - - Creates a object that serializes the specified object to JavaScript Object Notation (JSON) format using the content type, content encoding, and the JSON request behavior. - The result object that serializes the specified object to JSON format. - The JavaScript object graph to serialize. - The content type (MIME type). - The content encoding. - The JSON request behavior - - - Creates a object that serializes the specified object to JavaScript Object Notation (JSON) format using the specified content type and JSON request behavior. - The result object that serializes the specified object to JSON format. - The JavaScript object graph to serialize. - The content type (MIME type). - The JSON request behavior - - - Creates a object that serializes the specified object to JavaScript Object Notation (JSON) format using the specified JSON request behavior. - The result object that serializes the specified object to JSON format. - The JavaScript object graph to serialize. - The content type (MIME type). - - - Gets the model state dictionary object that contains the state of the model and of model-binding validation. - The model state dictionary. - - - Called after the action method is invoked. - Information about the current request and action. - - - Called before the action method is invoked. - Information about the current request and action. - - - Called when authorization occurs. - Information about the current request and action. - - - Called when an unhandled exception occurs in the action. - Information about the current request and action. - - - Called after the action result that is returned by an action method is executed. - Information about the current request and action result - - - Called before the action result that is returned by an action method is executed. - Information about the current request and action result - - - Creates a object that renders a partial view. - A partial-view result object. - - - Creates a object that renders a partial view, by using the specified model. - A partial-view result object. - The model that is rendered by the partial view - - - Creates a object that renders a partial view, by using the specified view name. - A partial-view result object. - The name of the view that is rendered to the response. - - - Creates a object that renders a partial view, by using the specified view name and model. - A partial-view result object. - The name of the view that is rendered to the response. - The model that is rendered by the partial view - - - Creates a object that redirects to the specified URL. - The redirect result object. - The URL to redirect to. - - - Returns an instance of the class with the property set to true. - An instance of the class with the property set to true. - The URL to redirect to. - - - Redirects to the specified action using the action name. - The redirect result object. - The name of the action. - - - Redirects to the specified action using the action name and route values. - The redirect result object. - The name of the action. - The parameters for a route. - - - Redirects to the specified action using the action name and controller name. - The redirect result object. - The name of the action. - The name of the controller - - - Redirects to the specified action using the action name, controller name, and route values. - The redirect result object. - The name of the action. - The name of the controller - The parameters for a route. - - - Redirects to the specified action using the action name, controller name, and route dictionary. - The redirect result object. - The name of the action. - The name of the controller - The parameters for a route. - - - Redirects to the specified action using the action name and route dictionary. - The redirect result object. - The name of the action. - The parameters for a route. - - - Returns an instance of the class with the property set to true using the specified action name. - An instance of the class with the property set to true using the specified action name, controller name, and route values. - The action name. - - - Returns an instance of the class with the property set to true using the specified action name, and route values. - An instance of the class with the property set to true using the specified action name, and route values. - The action name. - The route values. - - - Returns an instance of the class with the property set to true using the specified action name, and controller name. - An instance of the class with the property set to true using the specified action name, and controller name. - The action name. - The controller name. - - - Returns an instance of the class with the property set to true using the specified action name, controller name, and route values. - An instance of the class with the property set to true. - The action name. - The controller name. - The route values. - - - Returns an instance of the class with the property set to true using the specified action name, controller name, and route values. - An instance of the class with the property set to true using the specified action name, controller name, and route values. - The action name. - The controller name. - The route values. - - - Returns an instance of the class with the property set to true using the specified action name, and route values. - An instance of the class with the property set to true using the specified action name, and route values. - - - Redirects to the specified route using the specified route values. - The redirect-to-route result object. - The parameters for a route. - - - Redirects to the specified route using the route name. - The redirect-to-route result object. - The name of the route - - - Redirects to the specified route using the route name and route values. - The redirect-to-route result object. - The name of the route - The parameters for a route. - - - Redirects to the specified route using the route name and route dictionary. - The redirect-to-route result object. - The name of the route - The parameters for a route. - - - Redirects to the specified route using the route dictionary. - The redirect-to-route result object. - The parameters for a route. - - - Returns an instance of the class with the property set to true using the specified route values. - Returns . - The route name. - - - Returns an instance of the class with the property set to true using the specified route name. - Returns an instance of the class with the property set to true using the specified route name. - The route name. - - - Returns an instance of the class with the property set to true using the specified route name and route values. - An instance of the class with the property set to true. - The route name. - The route values. - - - Returns an instance of the class with the property set to true using the specified route name and route values. - An instance of the class with the property set to true using the specified route name and route values. - The route name. - The route values. - - - Returns an instance of the class with the property set to true using the specified route values. - An instance of the class with the property set to true using the specified route values. - The route values. - - - Gets the object for the current HTTP request. - The request object. - - - Gets the object for the current HTTP response. - The response object. - - - Gets the route data for the current request. - The route data. - - - Gets the object that provides methods that are used during Web request processing. - The HTTP server object. - - - Gets the object for the current HTTP request. - The HTTP session-state object for the current HTTP request. - - - This API supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. This method calls the method. - The filter context. - - - This API supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. This method calls the method. - The filter context. - - - This API supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. This method calls the method. - The filter context. - - - This API supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. This method calls the method. - The filter context. - - - This API supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. This method calls the method. - The filter context. - - - This API supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. This method calls the method. - The filter context. - - - Gets the temporary-data provider object that is used to store data for the next request. - The temporary-data provider. - - - Updates the specified model instance using values from the controller's current value provider. - true if the update is successful; otherwise, false. - The model instance to update. - The type of the model object. - The parameter or the property is null. - - - Updates the specified model instance using values from the controller's current value provider and a prefix. - true if the update is successful; otherwise, false. - The model instance to update. - The prefix to use when looking up values in the value provider. - The type of the model object. - The parameter or the property is null. - - - Updates the specified model instance using values from the controller's current value provider, a prefix, and included properties. - true if the update is successful; otherwise, false. - The model instance to update. - The prefix to use when looking up values in the value provider. - A list of properties of the model to update. - The type of the model object. - The parameter or the property is null. - - - Updates the specified model instance using values from the controller's current value provider, a prefix, a list of properties to exclude, and a list of properties to include. - true if the update is successful; otherwise, false. - The model instance to update. - The prefix to use when looking up values in the value provider - A list of properties of the model to update. - A list of properties to explicitly exclude from the update. These are excluded even if they are listed in the parameter list. - The type of the model object. - The parameter or the property is null. - - - Updates the specified model instance using values from the value provider, a prefix, a list of properties to exclude , and a list of properties to include. - true if the update is successful; otherwise, false. - The model instance to update. - The prefix to use when looking up values in the value provider. - A list of properties of the model to update. - A list of properties to explicitly exclude from the update. These are excluded even if they are listed in the parameter list. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the value provider, a prefix, and included properties. - true if the update is successful; otherwise, false. - The model instance to update. - The prefix to use when looking up values in the value provider. - A list of properties of the model to update. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the value provider and a prefix. - true if the update is successful; otherwise, false. - The model instance to update. - The prefix to use when looking up values in the value provider. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the controller's current value provider and included properties. - true if the update is successful; otherwise, false. - The model instance to update. - A list of properties of the model to update. - The type of the model object. - The parameter or the property is null. - - - Updates the specified model instance using values from the value provider and a list of properties to include. - true if the update is successful; otherwise, false. - The model instance to update. - A list of properties of the model to update. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the value provider. - true if the update is successful; otherwise, false. - The model instance to update. - A dictionary of values that is used to update the model. - The type of the model object. - - - Validates the specified model instance. - true if the model validation is successful; otherwise, false. - The model instance to validate. - - - Validates the specified model instance using an HTML prefix. - true if the model validation is successful; otherwise, false. - The model to validate. - The prefix to use when looking up values in the model provider. - - - Updates the specified model instance using values from the controller's current value provider. - The model instance to update. - The type of the model object. - The model was not successfully updated. - - - Updates the specified model instance using values from the controller's current value provider and a prefix. - The model instance to update. - A prefix to use when looking up values in the value provider. - The type of the model object. - - - Updates the specified model instance using values from the controller's current value provider, a prefix, and included properties. - The model instance to update. - A prefix to use when looking up values in the value provider. - A list of properties of the model to update. - The type of the model object. - - - Updates the specified model instance using values from the controller's current value provider, a prefix, a list of properties to exclude, and a list of properties to include. - The model instance to update. - A prefix to use when looking up values in the value provider. - A list of properties of the model to update. - A list of properties to explicitly exclude from the update. These are excluded even if they are listed in the list. - The type of the model object. - - - Updates the specified model instance using values from the value provider, a prefix, a list of properties to exclude, and a list of properties to include. - The model instance to update. - The prefix to use when looking up values in the value provider. - A list of properties of the model to update. - A list of properties to explicitly exclude from the update. These are excluded even if they are listed in the parameter list. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the value provider, a prefix, and a list of properties to include. - The model instance to update. - The prefix to use when looking up values in the value provider. - A list of properties of the model to update. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the value provider and a prefix. - The model instance to update. - The prefix to use when looking up values in the value provider. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the controller object's current value provider. - The model instance to update. - A list of properties of the model to update. - The type of the model object. - - - Updates the specified model instance using values from the value provider, a prefix, and a list of properties to include. - The model instance to update. - A list of properties of the model to update. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the value provider. - The model instance to update. - A dictionary of values that is used to update the model. - The type of the model object. - - - Gets the URL helper object that is used to generate URLs by using routing. - The URL helper object. - - - Gets the user security information for the current HTTP request. - The user security information for the current HTTP request. - - - Validates the specified model instance. - The model to validate. - - - Validates the specified model instance using an HTML prefix. - The model to validate. - The prefix to use when looking up values in the model provider. - - - Creates a object that renders a view to the response. - The view result that renders a view to the response. - - - Creates a object by using the model that renders a view to the response. - The view result. - The model that is rendered by the view. - - - Creates a object by using the view name that renders a view. - The view result. - The name of the view that is rendered to the response. - - - Creates a object by using the view name and model that renders a view to the response. - The view result. - The name of the view that is rendered to the response. - The model that is rendered by the view. - - - Creates a object using the view name and master-page name that renders a view to the response. - The view result. - The name of the view that is rendered to the response. - The name of the master page or template to use when the view is rendered. - - - Creates a object using the view name, master-page name, and model that renders a view. - The view result. - The name of the view that is rendered to the response. - The name of the master page or template to use when the view is rendered. - The model that is rendered by the view. - - - Creates a object that renders the specified object. - The view result. - The view that is rendered to the response. - - - Creates a object that renders the specified object. - The view result. - The view that is rendered to the response. - The model that is rendered by the view. - - - Represents a class that is responsible for invoking the action methods of a controller. - - - Initializes a new instance of the class. - - - Gets or sets the model binders that are associated with the action. - The model binders that are associated with the action. - - - Creates the action result. - The action result object. - The controller context. - The action descriptor. - The action return value. - - - Finds the information about the action method. - Information about the action method. - The controller context. - The controller descriptor. - The name of the action. - - - Retrieves information about the controller by using the specified controller context. - Information about the controller. - The controller context. - - - Retrieves information about the action filters. - Information about the action filters. - The controller context. - The action descriptor. - - - Gets the value of the specified action-method parameter. - The value of the action-method parameter. - The controller context. - The parameter descriptor. - - - Gets the values of the action-method parameters. - The values of the action-method parameters. - The controller context. - The action descriptor. - - - Invokes the specified action by using the specified controller context. - The result of executing the action. - The controller context. - The name of the action to invoke. - The parameter is null. - The parameter is null or empty. - The thread was aborted during invocation of the action. - An unspecified error occurred during invocation of the action. - - - Invokes the specified action method by using the specified parameters and the controller context. - The result of executing the action method. - The controller context. - The action descriptor. - The parameters. - - - Invokes the specified action method by using the specified parameters, controller context, and action filters. - The context for the ActionExecuted method of the class. - The controller context. - The action filters. - The action descriptor. - The parameters. - - - Invokes the specified action result by using the specified controller context. - The controller context. - The action result. - - - Invokes the specified action result by using the specified action filters and the controller context. - The context for the ResultExecuted method of the class. - The controller context. - The action filters. - The action result. - - - Invokes the specified authorization filters by using the specified action descriptor and controller context. - The context for the object. - The controller context. - The authorization filters. - The action descriptor. - - - Invokes the specified exception filters by using the specified exception and controller context. - The context for the object. - The controller context. - The exception filters. - The exception. - - - Represents the base class for all MVC controllers. - - - Initializes a new instance of the class. - - - Gets or sets the controller context. - The controller context. - - - Executes the specified request context. - The request context. - The parameter is null. - - - Executes the request. - - - Initializes the specified request context. - The request context. - - - Executes the specified request context. - The request context. - - - Gets or sets the dictionary for temporary data. - The dictionary for temporary data. - - - Gets or sets a value that indicates whether request validation is enabled for this request. - true if request validation is enabled for this request; otherwise, false. The default is true. - - - Gets or sets the value provider for the controller. - The value provider for the controller. - - - Gets the dynamic view data dictionary. - The dynamic view data dictionary. - - - Gets or sets the dictionary for view data. - The dictionary for the view data. - - - Represents a class that is responsible for dynamically building a controller. - - - Initializes a new instance of the class. - - - Gets the current controller builder object. - The current controller builder. - - - Gets the default namespaces. - The default namespaces. - - - Gets the associated controller factory. - The controller factory. - - - Sets the controller factory by using the specified type. - The type of the controller factory. - The parameter is null. - The controller factory cannot be assigned from the type in the parameter. - An error occurred while the controller factory was being set. - - - Sets the specified controller factory. - The controller factory. - The parameter is null. - - - Encapsulates information about an HTTP request that matches specified and instances. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified HTTP context, URL route data, and controller. - The HTTP context. - The route data. - The controller. - - - Initializes a new instance of the class by using the specified controller context. - The controller context. - The parameter is null. - - - Initializes a new instance of the class by using the specified request context and controller. - The request context. - The controller. - One or both parameters are null. - - - Gets or sets the controller. - The controller. - - - Gets or sets the HTTP context. - The HTTP context. - - - Gets a value that indicates whether the associated action method is a child action. - true if the associated action method is a child action; otherwise, false. - - - Gets an object that contains the view context information for the parent action method. - An object that contains the view context information for the parent action method. - - - Gets or sets the request context. - The request context. - - - Gets or sets the URL route data. - The URL route data. - - - Encapsulates information that describes a controller, such as its name, type, and actions. - - - Initializes a new instance of the class. - - - Gets the name of the controller. - The name of the controller. - - - Gets the type of the controller. - The type of the controller. - - - Finds an action method by using the specified name and controller context. - The information about the action method. - The controller context. - The name of the action. - - - Retrieves a list of action-method descriptors in the controller. - A list of action-method descriptors in the controller. - - - Retrieves custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Retrieves custom attributes of a specified type that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - The parameter is null (Nothing in Visual Basic). - - - Retrieves a value that indicates whether one or more instance of the specified custom attribute are defined for this member. - true if the is defined for this member; otherwise, false. - The type of the custom attribute. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The parameter is null (Nothing in Visual Basic). - - - When implemented in a derived class, gets the unique ID for the controller descriptor using lazy initialization. - The unique ID. - - - Adds the controller to the instance. - - - Initializes a new instance of the class. - - - Returns the collection of controller instance filters. - The collection of controller instance filters. - The controller context. - The action descriptor. - - - Represents an attribute that invokes a custom model binder. - - - Initializes a new instance of the class. - - - Retrieves the associated model binder. - A reference to an object that implements the interface. - - - Provides a container for common metadata, for the class, and for the class for a data model. - - - Initializes a new instance of the class. - The data-annotations model metadata provider. - The type of the container. - The model accessor. - The type of the model. - The name of the property. - The display column attribute. - - - Returns simple text for the model data. - Simple text for the model data. - - - Implements the default model metadata provider for ASP.NET MVC. - - - Initializes a new instance of the class. - - - Gets the metadata for the specified property. - The metadata for the property. - The attributes. - The type of the container. - The model accessor. - The type of the model. - The name of the property. - - - Represents the method that creates a instance. - - - Provides a model validator. - - - Initializes a new instance of the class. - The metadata for the model. - The controller context for the model. - The validation attribute for the model. - - - Gets the validation attribute for the model validator. - The validation attribute for the model validator. - - - Gets the error message for the validation failure. - The error message for the validation failure. - - - Retrieves a collection of client validation rules. - A collection of client validation rules. - - - Gets a value that indicates whether model validation is required. - true if model validation is required; otherwise, false. - - - Returns a list of validation error messages for the model. - A list of validation error messages for the model, or an empty list if no errors have occurred. - The container for the model. - - - Provides a model validator for a specified validation type. - - - - Initializes a new instance of the class. - The metadata for the model. - The controller context for the model. - The validation attribute for the model. - - - Gets the validation attribute from the model validator. - The validation attribute from the model validator. - - - Implements the default validation provider for ASP.NET MVC. - - - Initializes a new instance of the class. - - - Gets or sets a value that indicates whether non-nullable value types are required. - true if non-nullable value types are required; otherwise, false. - - - Gets a list of validators. - A list of validators. - The metadata. - The context. - The list of validation attributes. - - - Registers an adapter to provide client-side validation. - The type of the validation attribute. - The type of the adapter. - - - Registers an adapter factory for the validation provider. - The type of the attribute. - The factory that will be used to create the object for the specified attribute. - - - Registers the default adapter. - The type of the adapter. - - - Registers the default adapter factory. - The factory that will be used to create the object for the default adapter. - - - Registers an adapter to provide default object validation. - The type of the adapter. - - - Registers an adapter factory for the default object validation provider. - The factory. - - - Registers an adapter to provide object validation. - The type of the model. - The type of the adapter. - - - Registers an adapter factory for the object validation provider. - The type of the model. - The factory. - - - Provides a factory for validators that are based on . - - - Provides a container for the error-information model validator. - - - Initializes a new instance of the class. - - - Gets a list of error-information model validators. - A list of error-information model validators. - The model metadata. - The controller context. - - - Represents the controller factory that is registered by default. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using a controller activator. - An object that implements the controller activator interface. - - - Creates the specified controller by using the specified request context. - The controller. - The context of the HTTP request, which includes the HTTP context and route data. - The name of the controller. - The parameter is null. - The parameter is null or empty. - - - Retrieves the controller instance for the specified request context and controller type. - The controller instance. - The context of the HTTP request, which includes the HTTP context and route data. - The type of the controller. - - is null. - - cannot be assigned. - An instance of cannot be created. - - - Returns the controller's session behavior. - The controller's session behavior. - The request context. - The type of the controller. - - - Retrieves the controller type for the specified name and request context. - The controller type. - The context of the HTTP request, which includes the HTTP context and route data. - The name of the controller. - - - Releases the specified controller. - The controller to release. - - - This API supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. This method calls the method. - The controller's session behavior. - The request context. - The controller name. - - - Maps a browser request to a data object. This class provides a concrete implementation of a model binder. - - - Initializes a new instance of the class. - - - Gets or sets the model binders for the application. - The model binders for the application. - - - Binds the model by using the specified controller context and binding context. - The bound object. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - The parameter is null. - - - Binds the specified property by using the specified controller context and binding context and the specified property descriptor. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - Describes a property to be bound. The descriptor provides information such as the component type, property type, and property value. It also provides methods to get or set the property value. - - - Creates the specified model type by using the specified controller context and binding context. - A data object of the specified type. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - The type of the model object to return. - - - Creates an index (a subindex) based on a category of components that make up a larger index, where the specified index value is an integer. - The name of the subindex. - The prefix for the subindex. - The index value. - - - Creates an index (a subindex) based on a category of components that make up a larger index, where the specified index value is a string. - The name of the subindex. - The prefix for the subindex. - The index value. - - - Creates the name of the subproperty by using the specified prefix and property name. - The name of the subproperty. - The prefix for the subproperty. - The name of the property. - - - Returns a set of properties that match the property filter restrictions that are established by the specified . - An enumerable set of property descriptors. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - - - Returns the properties of the model by using the specified controller context and binding context. - A collection of property descriptors. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - - - Returns the value of a property using the specified controller context, binding context, property descriptor, and property binder. - An object that represents the property value. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - The descriptor for the property to access. The descriptor provides information such as the component type, property type, and property value. It also provides methods to get or set the property value. - An object that provides a way to bind the property. - - - Returns the descriptor object for a type that is specified by its controller context and binding context. - A custom type descriptor object. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - - - Determines whether a data model is valid for the specified binding context. - true if the model is valid; otherwise, false. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - The parameter is null. - - - Called when the model is updated. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - - - Called when the model is updating. - true if the model is updating; otherwise, false. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - - - Called when the specified property is validated. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - Describes a property to be validated. The descriptor provides information such as the component type, property type, and property value. It also provides methods to get or set the property value. - The value to set for the property. - - - Called when the specified property is validating. - true if the property is validating; otherwise, false. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - Describes a property being validated. The descriptor provides information such as component type, property type, and property value. It also provides methods to get or set the property value. - The value to set for the property. - - - Gets or sets the name of the resource file (class key) that contains localized string values. - The name of the resource file (class key). - - - Sets the specified property by using the specified controller context, binding context, and property value. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - Describes a property to be set. The descriptor provides information such as the component type, property type, and property value. It also provides methods to get or set the property value. - The value to set for the property. - - - Represents a memory cache for view locations. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified cache time span. - The cache time span. - The Ticks attribute of the parameter is set to a negative number. - - - Retrieves the default view location by using the specified HTTP context and cache key. - The default view location. - The HTTP context. - The cache key - The parameter is null. - - - Inserts the view in the specified virtual path by using the specified HTTP context, cache key, and virtual path. - The HTTP context. - The cache key. - The virtual path - The parameter is null. - - - Creates an empty view location cache. - - - Gets or sets the cache time span. - The cache time span. - - - Provides a registration point for dependency resolvers that implement or the Common Service Locator IServiceLocator interface. - - - Initializes a new instance of the class. - - - Gets the implementation of the dependency resolver. - The implementation of the dependency resolver. - - - This API supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. - The implementation of the dependency resolver. - - - This API supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. - The function that provides the service. - The function that provides the services. - - - This API supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. - The common service locator. - - - This API supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. - The object that implements the dependency resolver. - - - Provides a registration point for dependency resolvers using the specified service delegate and specified service collection delegates. - The service delegate. - The services delegates. - - - Provides a registration point for dependency resolvers using the provided common service locator when using a service locator interface. - The common service locator. - - - Provides a registration point for dependency resolvers, using the specified dependency resolver interface. - The dependency resolver. - - - Provides a type-safe implementation of and . - - - Resolves singly registered services that support arbitrary object creation. - The requested service or object. - The dependency resolver instance that this method extends. - The type of the requested service or object. - - - Resolves multiply registered services. - The requested services. - The dependency resolver instance that this method extends. - The type of the requested services. - - - Represents the base class for value providers whose values come from a collection that implements the interface. - The type of the value. - - - Initializes a new instance of the class. - The name/value pairs that are used to initialize the value provider. - Information about a specific culture, such as the names of the culture, the writing system, and the calendar used. - The parameter is null. - - - Determines whether the collection contains the specified prefix. - true if the collection contains the specified prefix; otherwise, false. - The prefix to search for. - The parameter is null. - - - Returns a value object using the specified key and controller context. - The value object for the specified key. - The key of the value object to retrieve. - The parameter is null. - - - Provides an empty metadata provider for data models that do not require metadata. - - - Initializes a new instance of the class. - - - Creates a new instance of the class. - A new instance of the class. - The attributes. - The type of the container. - The model accessor. - The type of the model. - The name of the model. - - - Provides an empty validation provider for models that do not require a validator. - - - Initializes a new instance of the class. - - - Gets the empty model validator. - The empty model validator. - The metadata. - The context. - - - Represents a result that does nothing, such as a controller action method that returns nothing. - - - Initializes a new instance of the class. - - - Executes the specified result context. - The result context. - - - Provides the context for using the class. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class for the specified exception by using the specified controller context. - The controller context. - The exception. - The parameter is null. - - - Gets or sets the exception object. - The exception object. - - - Gets or sets a value that indicates whether the exception has been handled. - true if the exception has been handled; otherwise, false. - - - Gets or sets the action result. - The action result. - - - Provides a helper class to get the model name from an expression. - - - Gets the model name from a lambda expression. - The model name. - The expression. - - - Gets the model name from a string expression. - The model name. - The expression. - - - Provides a container for client-side field validation metadata. - - - Initializes a new instance of the class. - - - Gets or sets the name of the data field. - The name of the data field. - - - Gets or sets a value that indicates whether the validation message contents should be replaced with the client validation error. - true if the validation message contents should be replaced with the client validation error; otherwise, false. - - - Gets or sets the validator message ID. - The validator message ID. - - - Gets the client validation rules. - The client validation rules. - - - Sends the contents of a binary file to the response. - - - Initializes a new instance of the class by using the specified file contents and content type. - The byte array to send to the response. - The content type to use for the response. - The parameter is null. - - - The binary content to send to the response. - The file contents. - - - Writes the file content to the response. - The response. - - - Sends the contents of a file to the response. - - - Initializes a new instance of the class by using the specified file name and content type. - The name of the file to send to the response. - The content type of the response. - The parameter is null or empty. - - - Gets or sets the path of the file that is sent to the response. - The path of the file that is sent to the response. - - - Writes the file to the response. - The response. - - - Represents a base class that is used to send binary file content to the response. - - - Initializes a new instance of the class. - The type of the content. - The parameter is null or empty. - - - Gets the content type to use for the response. - The type of the content. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context within which the result is executed. - The parameter is null. - - - Gets or sets the content-disposition header so that a file-download dialog box is displayed in the browser with the specified file name. - The name of the file. - - - Writes the file to the response. - The response. - - - Sends binary content to the response by using a instance. - - - Initializes a new instance of the class. - The stream to send to the response. - The content type to use for the response. - The parameter is null. - - - Gets the stream that will be sent to the response. - The file stream. - - - Writes the file to the response. - The response. - - - Represents a metadata class that contains a reference to the implementation of one or more of the filter interfaces, the filter's order, and the filter's scope. - - - Initializes a new instance of the class. - The instance. - The scope. - The order. - - - Represents a constant that is used to specify the default ordering of filters. - - - Gets the instance of this class. - The instance of this class. - - - Gets the order in which the filter is applied. - The order in which the filter is applied. - - - Gets the scope ordering of the filter. - The scope ordering of the filter. - - - Represents the base class for action and result filter attributes. - - - Initializes a new instance of the class. - - - Gets or sets a value that indicates whether more than one instance of the filter attribute can be specified. - true if more than one instance of the filter attribute can be specified; otherwise, false. - - - Gets or sets the order in which the action filters are executed. - The order in which the action filters are executed. - - - Defines a filter provider for filter attributes. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class and optionally caches attribute instances. - true to cache attribute instances; otherwise, false. - - - Gets a collection of custom action attributes. - A collection of custom action attributes. - The controller context. - The action descriptor. - - - Gets a collection of controller attributes. - A collection of controller attributes. - The controller context. - The action descriptor. - - - Aggregates the filters from all of the filter providers into one collection. - The collection filters from all of the filter providers. - The controller context. - The action descriptor. - - - Encapsulates information about the available action filters. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the specified filters collection. - The filters collection. - - - Gets all the action filters in the application. - The action filters. - - - Gets all the authorization filters in the application. - The authorization filters. - - - Gets all the exception filters in the application. - The exception filters. - - - Gets all the result filters in the application. - The result filters. - - - Represents the collection of filter providers for the application. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the filter providers collection. - The filter providers collection. - - - Returns the collection of filter providers. - The collection of filter providers. - The controller context. - The action descriptor. - - - Provides a registration point for filters. - - - Provides a registration point for filters. - The collection of filters. - - - Defines values that specify the order in which ASP.NET MVC filters run within the same filter type and filter order. - - - Specifies first. - - - Specifies an order before and after . - - - Specifies an order before and after . - - - Specifies an order before and after . - - - Specifies last. - - - Contains the form value providers for the application. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The collection. - The parameter is null. - - - Gets the specified value provider. - The value provider. - The name of the value provider to get. - The parameter is null or empty. - - - Gets a value that indicates whether the value provider contains an entry that has the specified prefix. - true if the value provider contains an entry that has the specified prefix; otherwise, false. - The prefix to look for. - - - Gets a value from a value provider using the specified key. - A value from a value provider. - The key. - - - Returns a dictionary that contains the value providers. - A dictionary of value providers. - - - Encapsulates information that is required in order to validate and process the input data from an HTML form. - - - Initializes a new instance of the class. - - - Gets the field validators for the form. - A dictionary of field validators for the form. - - - Gets or sets the form identifier. - The form identifier. - - - Returns a serialized object that contains the form identifier and field-validation values for the form. - A serialized object that contains the form identifier and field-validation values for the form. - - - Returns the validation value for the specified input field. - The value to validate the field input with. - The name of the field to retrieve the validation value for. - The parameter is either null or empty. - - - Returns the validation value for the specified input field and a value that indicates what to do if the validation value is not found. - The value to validate the field input with. - The name of the field to retrieve the validation value for. - true to create a validation value if one is not found; otherwise, false. - The parameter is either null or empty. - - - Returns a value that indicates whether the specified field has been rendered in the form. - true if the field has been rendered; otherwise, false. - The field name. - - - Sets a value that indicates whether the specified field has been rendered in the form. - The field name. - true to specify that the field has been rendered in the form; otherwise, false. - - - Determines whether client validation errors should be dynamically added to the validation summary. - true if client validation errors should be added to the validation summary; otherwise, false. - - - Gets or sets the identifier for the validation summary. - The identifier for the validation summary. - - - Enumerates the HTTP request types for a form. - - - Specifies a GET request. - - - Specifies a POST request. - - - Represents a value provider for form values that are contained in a object. - - - Initializes a new instance of the class. - An object that encapsulates information about the current HTTP request. - - - Represents a class that is responsible for creating a new instance of a form-value provider object. - - - Initializes a new instance of the class. - - - Returns a form-value provider object for the specified controller context. - A form-value provider object. - An object that encapsulates information about the current HTTP request. - The parameter is null. - - - Represents a class that contains all the global filters. - - - Initializes a new instance of the class. - - - Adds the specified filter to the global filter collection. - The filter. - - - Adds the specified filter to the global filter collection using the specified filter run order. - The filter. - The filter run order. - - - Removes all filters from the global filter collection. - - - Determines whether a filter is in the global filter collection. - true if is found in the global filter collection; otherwise, false. - The filter. - - - Gets the number of filters in the global filter collection. - The number of filters in the global filter collection. - - - Returns an enumerator that iterates through the global filter collection. - An enumerator that iterates through the global filter collection. - - - Removes all the filters that match the specified filter. - The filter to remove. - - - This API supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. - An enumerator that iterates through the global filter collection. - - - This API supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. - An enumerator that iterates through the global filter collection. - The controller context. - The action descriptor. - - - Represents the global filter collection. - - - Gets or sets the global filter collection. - The global filter collection. - - - Represents an attribute that is used to handle an exception that is thrown by an action method. - - - Initializes a new instance of the class. - - - Gets or sets the type of the exception. - The type of the exception. - - - Gets or sets the master view for displaying exception information. - The master view. - - - Called when an exception occurs. - The action-filter context. - The parameter is null. - - - Gets the unique identifier for this attribute. - The unique identifier for this attribute. - - - Gets or sets the page view for displaying exception information. - The page view. - - - Encapsulates information for handling an error that was thrown by an action method. - - - Initializes a new instance of the class. - The exception. - The name of the controller. - The name of the action. - The parameter is null. - The or parameter is null or empty. - - - Gets or sets the name of the action that was executing when the exception was thrown. - The name of the action. - - - Gets or sets the name of the controller that contains the action method that threw the exception. - The name of the controller. - - - Gets or sets the exception object. - The exception object. - - - Represents an attribute that is used to indicate whether a property or field value should be rendered as a hidden input element. - - - Initializes a new instance of the class. - - - Gets or sets a value that indicates whether to display the value of the hidden input element. - true if the value should be displayed; otherwise, false. - - - Represents support for rendering HTML controls in a view. - - - Initializes a new instance of the class by using the specified view context and view data container. - The view context. - The view data container. - The or the parameter is null. - - - Initializes a new instance of the class by using the specified view context, view data container, and route collection. - The view context. - The view data container. - The route collection. - One or more parameters is null. - - - Replaces underscore characters (_) with hyphens (-) in the specified HTML attributes. - The HTML attributes with underscore characters replaced by hyphens. - The HTML attributes. - - - Generates a hidden form field (anti-forgery token) that is validated when the form is submitted. - The generated form field (anti-forgery token). - - - Generates a hidden form field (anti-forgery token) that is validated when the form is submitted. The field value is generated using the specified salt value. - The generated form field (anti-forgery token). - The salt value, which can be any non-empty string. - - - Generates a hidden form field (anti-forgery token) that is validated when the form is submitted. The field value is generated using the specified salt value, domain, and path. - The generated form field (anti-forgery token). - The salt value, which can be any non-empty string. - The application domain. - The virtual path. - - - Converts the specified attribute object to an HTML-encoded string. - The HTML-encoded string. If the value parameter is null or empty, this method returns an empty string. - The object to encode. - - - Converts the specified attribute string to an HTML-encoded string. - The HTML-encoded string. If the value parameter is null or empty, this method returns an empty string. - The string to encode. - - - Gets or sets a value that indicates whether client validation is enabled. - true if enable client validation is enabled; otherwise, false. - - - Enables input validation that is performed by using client script in the browser. - - - Enables or disables client validation. - true to enable client validation; otherwise, false. - - - Enables unobtrusive JavaScript. - - - Enables or disables unobtrusive JavaScript. - true to enable unobtrusive JavaScript; otherwise, false. - - - Converts the value of the specified object to an HTML-encoded string. - The HTML-encoded string. - The object to encode. - - - Converts the specified string to an HTML-encoded string. - The HTML-encoded string. - The string to encode. - - - Creates an HTML element ID using the specified element name. - The ID of the HTML element. - The name of the HTML element. - The parameter is null. - - - Creates an HTML element ID using the specified element name and a string that replaces dots in the name. - The ID of the HTML element. - The name of the HTML element. - The string that replaces dots (.) in the parameter. - The parameter or the parameter is null. - - - Generates an HTML anchor element (a element) that links to the specified action method, and enables the user to specify the communication protocol, name of the host, and a URL fragment. - An HTML element that links to the specified action method. - The context of the HTTP request. - The collection of URL routes. - The text caption to display for the link. - The name of the route that is used to return a virtual path. - The name of the action method. - The name of the controller. - The communication protocol, such as HTTP or HTTPS. If this parameter is null, the protocol defaults to HTTP. - The name of the host. - The fragment identifier. - An object that contains the parameters for a route. - An object that contains the HTML attributes for the element. - - - Generates an HTML anchor element (a element) that links to the specified action method. - An HTML element that links to the specified action method. - The context of the HTTP request. - The collection of URL routes. - The text caption to display for the link. - The name of the route that is used to return a virtual path. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - An object that contains the HTML attributes for the element. - - - Generates an HTML anchor element (a element) that links to the specified URL route, and enables the user to specify the communication protocol, name of the host, and a URL fragment. - An HTML element that links to the specified URL route. - The context of the HTTP request. - The collection of URL routes. - The text caption to display for the link. - The name of the route that is used to return a virtual path. - The communication protocol, such as HTTP or HTTPS. If this parameter is null, the protocol defaults to HTTP. - The name of the host. - The fragment identifier. - An object that contains the parameters for a route. - An object that contains the HTML attributes for the element. - - - Generates an HTML anchor element (a element) that links to the specified URL route. - An HTML element that links to the specified URL route. - The context of the HTTP request. - The collection of URL routes. - The text caption to display for the link. - The name of the route that is used to return a virtual path. - An object that contains the parameters for a route. - An object that contains the HTML attributes for the element. - - - Returns the HTTP method that handles form input (GET or POST) as a string. - The form method string, either "get" or "post". - The HTTP method that handles the form. - - - Returns the HTML input control type as a string. - The input type string ("checkbox", "hidden", "password", "radio", or "text"). - The enumerated input type. - - - Gets the collection of unobtrusive JavaScript validation attributes using the specified HTML name attribute. - The collection of unobtrusive JavaScript validation attributes. - The HTML name attribute. - - - Gets the collection of unobtrusive JavaScript validation attributes using the specified HTML name attribute and model metadata. - The collection of unobtrusive JavaScript validation attributes. - The HTML name attribute. - The model metadata. - - - Returns a hidden input element that identifies the override method for the specified HTTP data-transfer method that was used by the client. - The override method that uses the HTTP data-transfer method that was used by the client. - The HTTP data-transfer method that was used by the client (DELETE, HEAD, or PUT). - The parameter is not "PUT", "DELETE", or "HEAD". - - - Returns a hidden input element that identifies the override method for the specified verb that represents the HTTP data-transfer method used by the client. - The override method that uses the verb that represents the HTTP data-transfer method used by the client. - The verb that represents the HTTP data-transfer method used by the client. - The parameter is not "PUT", "DELETE", or "HEAD". - - - Gets or sets the character that replaces periods in the ID attribute of an element. - The character that replaces periods in the ID attribute of an element. - - - Returns markup that is not HTML encoded. - The HTML markup without encoding. - The HTML markup. - - - Gets or sets the collection of routes for the application. - The collection of routes for the application. - - - Gets or sets a value that indicates whether unobtrusive JavaScript is enabled. - true if unobtrusive JavaScript is enabled; otherwise, false. - - - The name of the CSS class that is used to style an input field when a validation error occurs. - - - The name of the CSS class that is used to style an input field when the input is valid. - - - The name of the CSS class that is used to style the error message when a validation error occurs. - - - The name of the CSS class that is used to style the validation message when the input is valid. - - - The name of the CSS class that is used to style validation summary error messages. - - - The name of the CSS class that is used to style the validation summary when the input is valid. - - - Gets or sets the context information about the view. - The context of the view. - - - Gets the current view data dictionary. - The view data dictionary. - - - Gets or sets the view data container. - The view data container. - - - Represents support for rendering HTML controls in a strongly typed view. - The type of the model. - - - Initializes a new instance of the class by using the specified view context and view data container. - The view context. - The view data container. - - - Initializes a new instance of the class by using the specified view context, view data container, and route collection. - The view context. - The view data container. - The route collection. - - - Gets the strongly typed view data dictionary. - The strongly typed view data dictionary. - - - Represents an attribute that is used to restrict an action method so that the method handles only HTTP DELETE requests. - - - Initializes a new instance of the class. - - - Determines whether a request is a valid HTTP DELETE request. - true if the request is valid; otherwise, false. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - Encapsulates information about a method, such as its type, return type, and arguments. - - - Represents a value provider to use with values that come from a collection of HTTP files. - - - Initializes a new instance of the class. - An object that encapsulates information about the current HTTP request. - - - Represents a class that is responsible for creating a new instance of an HTTP file collection value provider object. - - - Initializes a new instance of the class. - - - Returns a value provider object for the specified controller context. - An HTTP file collection value provider. - An object that encapsulates information about the HTTP request. - The parameter is null. - - - Represents an attribute that is used to restrict an action method so that the method handles only HTTP GET requests. - - - Initializes a new instance of the class. - - - Determines whether a request is a valid HTTP GET request. - true if the request is valid; otherwise, false. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - Encapsulates information about a method, such as its type, return type, and arguments. - - - Defines an object that is used to indicate that the requested resource was not found. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using a status description. - The status description. - - - Represents an attribute that is used to restrict an action method so that the method handles only HTTP POST requests. - - - Initializes a new instance of the class. - - - Determines whether a request is a valid HTTP POST request. - true if the request is valid; otherwise, false. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - Encapsulates information about a method, such as its type, return type, and arguments. - - - Binds a model to a posted file. - - - Initializes a new instance of the class. - - - Binds the model. - The bound value. - The controller context. - The binding context. - One or both parameters are null. - - - Represents an attribute that is used to restrict an action method so that the method handles only HTTP PUT requests. - - - Initializes a new instance of the class. - - - Determines whether a request is a valid HTTP PUT request. - true if the request is valid; otherwise, false. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - Encapsulates information about a method, such as its type, return type, and arguments. - - - Extends the class that contains the HTTP values that were sent by a client during a Web request. - - - Retrieves the HTTP data-transfer method override that was used by the client. - The HTTP data-transfer method override that was used by the client. - An object that contains the HTTP values that were sent by a client during a Web request. - The parameter is null. - The HTTP data-transfer method override was not implemented. - - - Provides a way to return an action result with a specific HTTP response status code and description. - - - Initializes a new instance of the class using a status code. - The status code. - - - Initializes a new instance of the class using a status code and status description. - The status code. - The status description. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context in which the result is executed. The context information includes the controller, HTTP content, request context, and route data. - - - Gets the HTTP status code. - The HTTP status code. - - - Gets the HTTP status description. - the HTTP status description. - - - Represents the result of an unauthorized HTTP request. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the status description. - The status description. - - - Enumerates the HTTP verbs. - - - Retrieves the information or entity that is identified by the URI of the request. - - - Posts a new entity as an addition to a URI. - - - Replaces an entity that is identified by a URI. - - - Requests that a specified URI be deleted. - - - Retrieves the message headers for the information or entity that is identified by the URI of the request. - - - Defines the methods that are used in an action filter. - - - Called after the action method executes. - The filter context. - - - Called before an action method executes. - The filter context. - - - Defines the contract for an action invoker, which is used to invoke an action in response to an HTTP request. - - - Invokes the specified action by using the specified controller context. - true if the action was found; otherwise, false. - The controller context. - The name of the action. - - - Defines the methods that are required for an authorization filter. - - - Called when authorization is required. - The filter context. - - - Provides a way for the ASP.NET MVC validation framework to discover at run time whether a validator has support for client validation. - - - When implemented in a class, returns client validation rules for that class. - The client validation rules for this validator. - The model metadata. - The controller context. - - - Defines the methods that are required for a controller. - - - Executes the specified request context. - The request context. - - - Provides fine-grained control over how controllers are instantiated using dependency injection. - - - When implemented in a class, creates a controller. - The created controller. - The request context. - The controller type. - - - Defines the methods that are required for a controller factory. - - - Creates the specified controller by using the specified request context. - The controller. - The request context. - The name of the controller. - - - Gets the controller's session behavior. - The controller's session behavior. - The request context. - The name of the controller whose session behavior you want to get. - - - Releases the specified controller. - The controller. - - - Defines the methods that simplify service location and dependency resolution. - - - Resolves singly registered services that support arbitrary object creation. - The requested service or object. - The type of the requested service or object. - - - Resolves multiply registered services. - The requested services. - The type of the requested services. - - - Defines the methods that are required for an exception filter. - - - Called when an exception occurs. - The filter context. - - - Provides an interface for finding filters. - - - Returns an enumerator that contains all the instances in the service locator. - The enumerator that contains all the instances in the service locator. - The controller context. - The action descriptor. - - - Provides an interface for exposing attributes to the class. - - - When implemented in a class, provides metadata to the model metadata creation process. - The model metadata. - - - Defines the methods that are required for a model binder. - - - Binds the model to a value by using the specified controller context and binding context. - The bound value. - The controller context. - The binding context. - - - Defines methods that enable dynamic implementations of model binding for classes that implement the interface. - - - Returns the model binder for the specified type. - The model binder for the specified type. - The type of the model. - - - Defines members that specify the order of filters and whether multiple filters are allowed. - - - When implemented in a class, gets or sets a value that indicates whether multiple filters are allowed. - true if multiple filters are allowed; otherwise, false. - - - When implemented in a class, gets the filter order. - The filter order. - - - Enumerates the types of input controls. - - - A check box. - - - A hidden field. - - - A password box. - - - A radio button. - - - A text box. - - - Defines the methods that are required for a result filter. - - - Called after an action result executes. - The filter context. - - - Called before an action result executes. - The filter context. - - - Associates a route with an area in an ASP.NET MVC application. - - - Gets the name of the area to associate the route with. - The name of the area to associate the route with. - - - Defines the contract for temporary-data providers that store data that is viewed on the next request. - - - Loads the temporary data. - The temporary data. - The controller context. - - - Saves the temporary data. - The controller context. - The values. - - - Represents an interface that can skip request validation. - - - Retrieves the value of the object that is associated with the specified key. - The value of the object for the specified key. - The key. - true if validation should be skipped; otherwise, false. - - - Defines the methods that are required for a value provider in ASP.NET MVC. - - - Determines whether the collection contains the specified prefix. - true if the collection contains the specified prefix; otherwise, false. - The prefix to search for. - - - Retrieves a value object using the specified key. - The value object for the specified key. - The key of the value object to retrieve. - - - Defines the methods that are required for a view. - - - Renders the specified view context by using the specified the writer object. - The view context. - The writer object. - - - Defines the methods that are required for a view data dictionary. - - - Gets or sets the view data dictionary. - The view data dictionary. - - - Defines the methods that are required for a view engine. - - - Finds the specified partial view by using the specified controller context. - The partial view. - The controller context. - The name of the partial view. - true to specify that the view engine returns the cached view, if a cached view exists; otherwise, false. - - - Finds the specified view by using the specified controller context. - The page view. - The controller context. - The name of the view. - The name of the master. - true to specify that the view engine returns the cached view, if a cached view exists; otherwise, false. - - - Releases the specified view by using the specified controller context. - The controller context. - The view. - - - Defines the methods that are required in order to cache view locations in memory. - - - Gets the view location by using the specified HTTP context and the cache key. - The view location. - The HTTP context. - The cache key. - - - Inserts the specified view location into the cache by using the specified HTTP context and the cache key. - The HTTP context. - The cache key. - The virtual path. - - - Provides fine-grained control over how view pages are instantiated using dependency injection. - - - The created view page. - The controller context. - The type of the controller. - - - Sends JavaScript content to the response. - - - Initializes a new instance of the class. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context within which the result is executed. - The parameter is null. - - - Gets or sets the script. - The script. - - - Specifies whether HTTP GET requests from the client are allowed. - - - HTTP GET requests from the client are allowed. - - - HTTP GET requests from the client are not allowed. - - - Represents a class that is used to send JSON-formatted content to the response. - - - Initializes a new instance of the class. - - - Gets or sets the content encoding. - The content encoding. - - - Gets or sets the type of the content. - The type of the content. - - - Gets or sets the data. - The data. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context within which the result is executed. - The parameter is null. - - - Gets or sets a value that indicates whether HTTP GET requests from the client are allowed. - A value that indicates whether HTTP GET requests from the client are allowed. - - - Enables action methods to send and receive JSON-formatted text and to model-bind the JSON text to parameters of action methods. - - - Initializes a new instance of the class. - - - Returns a JSON value-provider object for the specified controller context. - A JSON value-provider object for the specified controller context. - The controller context. - - - Maps a browser request to a LINQ object. - - - Initializes a new instance of the class. - - - Binds the model by using the specified controller context and binding context. - The bound data object. If the model cannot be bound, this method returns null. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - - - Represents an attribute that is used to associate a model type to a model-builder type. - - - Initializes a new instance of the class. - The type of the binder. - The parameter is null. - - - Gets or sets the type of the binder. - The type of the binder. - - - Retrieves an instance of the model binder. - A reference to an object that implements the interface. - An error occurred while an instance of the model binder was being created. - - - Represents a class that contains all model binders for the application, listed by binder type. - - - Initializes a new instance of the class. - - - Adds the specified item to the model binder dictionary. - The object to add to the instance. - The object is read-only. - - - Adds the specified item to the model binder dictionary using the specified key. - The key of the element to add. - The value of the element to add. - The object is read-only. - - is null. - An element that has the same key already exists in the object. - - - Removes all items from the model binder dictionary. - The object is read-only. - - - Determines whether the model binder dictionary contains a specified value. - true if is found in the model binder dictionary; otherwise, false. - The object to locate in the object. - - - Determines whether the model binder dictionary contains an element that has the specified key. - true if the model binder dictionary contains an element that has the specified key; otherwise, false. - The key to locate in the object. - - is null. - - - Copies the elements of the model binder dictionary to an array, starting at a specified index. - The one-dimensional array that is the destination of the elements copied from . The array must have zero-based indexing. - The zero-based index in at which copying starts. - - is null. - - is less than 0. - - is multidimensional.-or- is equal to or greater than the length of .-or- The number of elements in the source object is greater than the available space from to the end of the destination array. -or- Type cannot be cast automatically to the type of the destination array. - - - Gets the number of elements in the model binder dictionary. - The number of elements in the model binder dictionary. - - - Gets or sets the default model binder. - The default model binder. - - - Retrieves the model binder for the specified type. - The model binder. - The type of the model to retrieve. - The parameter is null. - - - Retrieves the model binder for the specified type or retrieves the default model binder. - The model binder. - The type of the model to retrieve. - true to retrieve the default model binder. - The parameter is null. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Gets a value that indicates whether the model binder dictionary is read-only. - true if the model binder dictionary is read-only; otherwise, false. - - - Gets or sets the specified key in an object that implements the interface. - The key for the specified item. - The item key. - - - Gets a collection that contains the keys in the model binder dictionary. - A collection that contains the keys in the model binder dictionary. - - - Removes the first occurrence of the specified element from the model binder dictionary. - true if was successfully removed from the model binder dictionary; otherwise, false. This method also returns false if is not found in the model binder dictionary. - The object to remove from the object. - The object is read-only. - - - Removes the element that has the specified key from the model binder dictionary. - true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the model binder dictionary. - The key of the element to remove. - The object is read-only. - - is null. - - - Returns an enumerator that can be used to iterate through a collection. - An enumerator that can be used to iterate through the collection. - - - Gets the value that is associated with the specified key. - true if the object that implements contains an element that has the specified key; otherwise, false. - The key of the value to get. - When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - - is null. - - - Gets a collection that contains the values in the model binder dictionary. - A collection that contains the values in the model binder dictionary. - - - Provides a container for model binder providers. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using a list of model binder providers. - A list of model binder providers. - - - Returns a model binder of the specified type. - A model binder of the specified type. - The type of the model binder. - - - Inserts a model binder provider into the at the specified index. - The index. - The model binder provider. - - - Replaces the model binder provider element at the specified index. - The index. - The model binder provider. - - - Provides a container for model binder providers. - - - Provides a registration point for model binder providers for applications that do not use dependency injection. - The model binder provider collection. - - - Provides global access to the model binders for the application. - - - Gets the model binders for the application. - The model binders for the application. - - - Provides the context in which a model binder functions. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the binding context. - The binding context. - - - Gets or sets a value that indicates whether the binder should use an empty prefix. - true if the binder should use an empty prefix; otherwise, false. - - - Gets or sets the model. - The model. - - - Gets or sets the model metadata. - The model metadata. - - - Gets or sets the name of the model. - The name of the model. - - - Gets or sets the state of the model. - The state of the model. - - - Gets or sets the type of the model. - The type of the model. - - - Gets or sets the property filter. - The property filter. - - - Gets the property metadata. - The property metadata. - - - Gets or sets the value provider. - The value provider. - - - Provides a container for an equality validation rule that is sent to the browser. - - - Initializes a new instance of the class. - The error message. - The model value used for equality comparison. - - - Provides a container for a range-validation rule that is sent to the browser. - - - Initializes a new instance of the class. - The error message. - The minimum value. - The maximum value. - - - Provides a container for a regular-expression client validation rule that is sent to the browser. - - - Initializes a new instance of the class. - The error message to display when the regular expression validation fails. - The regular expression. - - - Provides a container for a remote validation rule that is sent to the browser. - - - Initializes a new instance of the class. - The error message. - The URL for the validation parameters. - The HTTP method for the validation parameters. - - - Provides a container for client validation for required field. - - - Initializes a new instance of the class. - The error message to display when a value for the required field is not provided. - - - Provides a base class container for a client validation rule that is sent to the browser. - - - Initializes a new instance of the class. - - - Gets or sets the error message for the client validation rule. - The error message for the client validation rule. - - - Gets the list of validation parameters. - A list of validation parameters. - - - Gets or sets the validation type. - The validation type. - - - Provides a container for a string-length validation rule that is sent to the browser. - - - Initializes a new instance of the class. - The validation error message. - The minimum length of the string. - The maximum length of the string. - - - Represents an error that occurs during model binding. - - - Initializes a new instance of the class by using the specified exception. - The exception. - The parameter is null. - - - Initializes a new instance of the class by using the specified exception and error message. - The exception. - The error message. - The parameter is null. - - - Initializes a new instance of the class by using the specified error message. - The error message. - - - Gets or sets the error message. - The error message. - - - Gets or sets the exception object. - The exception object. - - - A collection of instances. - - - Initializes a new instance of the class. - - - Adds the specified object to the model-error collection. - The exception. - - - Adds the specified error message to the model-error collection. - The error message. - - - Provides a container for common metadata, for the class, and for the class for a data model. - - - Initializes a new instance of the class. - The provider. - The type of the container. - The model accessor. - The type of the model. - The name of the model. - - - Gets a dictionary that contains additional metadata about the model. - A dictionary that contains additional metadata about the model. - - - Gets or sets the type of the container for the model. - The type of the container for the model. - - - Gets or sets a value that indicates whether empty strings that are posted back in forms should be converted to null. - true if empty strings that are posted back in forms should be converted to null; otherwise, false. The default value is true. - - - Gets or sets meta information about the data type. - Meta information about the data type. - - - The default order value, which is 10000. - - - Gets or sets the description of the model. - The description of the model. The default value is null. - - - Gets or sets the display format string for the model. - The display format string for the model. - - - Gets or sets the display name of the model. - The display name of the model. - - - Gets or sets the edit format string of the model. - The edit format string of the model. - - - Returns the metadata from the parameter for the model. - The metadata. - An expression that identifies the model. - The view data dictionary. - The type of the parameter. - The type of the value. - - - Gets the metadata from the expression parameter for the model. - The metadata for the model. - An expression that identifies the model. - The view data dictionary. - - - Gets the display name for the model. - The display name for the model. - - - Returns the simple description of the model. - The simple description of the model. - - - Gets a list of validators for the model. - A list of validators for the model. - The controller context. - - - Gets or sets a value that indicates whether the model object should be rendered using associated HTML elements. - true if the associated HTML elements that contains the model object should be included with the object; otherwise, false. - - - Gets or sets a value that indicates whether the model is a complex type. - A value that indicates whether the model is considered a complex type by the MVC framework. - - - Gets a value that indicates whether the type is nullable. - true if the type is nullable; otherwise, false. - - - Gets or sets a value that indicates whether the model is read-only. - true if the model is read-only; otherwise, false. - - - Gets or sets a value that indicates whether the model is required. - true if the model is required; otherwise, false. - - - Gets the value of the model. - The value of the model. For more information about , see the entry ASP.NET MVC 2 Templates, Part 2: ModelMetadata on Brad Wilson's blog - - - Gets the type of the model. - The type of the model. - - - Gets or sets the string to display for null values. - The string to display for null values. - - - Gets or sets a value that represents order of the current metadata. - The order value of the current metadata. - - - Gets a collection of model metadata objects that describe the properties of the model. - A collection of model metadata objects that describe the properties of the model. - - - Gets the property name. - The property name. - - - Gets or sets the provider. - The provider. - - - Gets or sets a value that indicates whether request validation is enabled. - true if request validation is enabled; otherwise, false. - - - Gets or sets a short display name. - The short display name. - - - Gets or sets a value that indicates whether the property should be displayed in read-only views such as list and detail views. - true if the model should be displayed in read-only views; otherwise, false. - - - Gets or sets a value that indicates whether the model should be displayed in editable views. - true if the model should be displayed in editable views; otherwise, false. - - - Gets or sets the simple display string for the model. - The simple display string for the model. - - - Gets or sets a hint that suggests what template to use for this model. - A hint that suggests what template to use for this model. - - - Gets or sets a value that can be used as a watermark. - The watermark. - - - Provides an abstract base class for a custom metadata provider. - - - When overridden in a derived class, initializes a new instance of the object that derives from the class. - - - Gets a object for each property of a model. - A object for each property of a model. - The container. - The type of the container. - - - Gets metadata for the specified property. - A object for the property. - The model accessor. - The type of the container. - The property to get the metadata model for. - - - Gets metadata for the specified model accessor and model type. - A object for the specified model accessor and model type. - The model accessor. - The type of the model. - - - Provides a container for the current instance. - - - Gets or sets the current object. - The current object. - - - Encapsulates the state of model binding to a property of an action-method argument, or to the argument itself. - - - Initializes a new instance of the class. - - - Returns a object that contains any errors that occurred during model binding. - The errors. - - - Returns a object that encapsulates the value that was being bound during model binding. - The value. - - - Represents the state of an attempt to bind a posted form to an action method, which includes validation information. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using values that are copied from the specified model-state dictionary. - The model-state dictionary. - The parameter is null. - - - Adds the specified item to the model-state dictionary. - The object to add to the model-state dictionary. - The model-state dictionary is read-only. - - - Adds an element that has the specified key and value to the model-state dictionary. - The key of the element to add. - The value of the element to add. - The model-state dictionary is read-only. - - is null. - An element that has the specified key already occurs in the model-state dictionary. - - - Adds the specified model error to the errors collection for the model-state dictionary that is associated with the specified key. - The key. - The exception. - - - Adds the specified error message to the errors collection for the model-state dictionary that is associated with the specified key. - The key. - The error message. - - - Removes all items from the model-state dictionary. - The model-state dictionary is read-only. - - - Determines whether the model-state dictionary contains a specific value. - true if is found in the model-state dictionary; otherwise, false. - The object to locate in the model-state dictionary. - - - Determines whether the model-state dictionary contains the specified key. - true if the model-state dictionary contains the specified key; otherwise, false. - The key to locate in the model-state dictionary. - - - Copies the elements of the model-state dictionary to an array, starting at a specified index. - The one-dimensional array that is the destination of the elements copied from the object. The array must have zero-based indexing. - The zero-based index in at which copying starts. - - is null. - - is less than 0. - - is multidimensional.-or- is equal to or greater than the length of .-or- The number of elements in the source collection is greater than the available space from to the end of the destination .-or- Type cannot be cast automatically to the type of the destination . - - - Gets the number of key/value pairs in the collection. - The number of key/value pairs in the collection. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Gets a value that indicates whether the collection is read-only. - true if the collection is read-only; otherwise, false. - - - Gets a value that indicates whether this instance of the model-state dictionary is valid. - true if this instance is valid; otherwise, false. - - - Determines whether there are any objects that are associated with or prefixed with the specified key. - true if the model-state dictionary contains a value that is associated with the specified key; otherwise, false. - The key. - The parameter is null. - - - Gets or sets the value that is associated with the specified key. - The model state item. - The key. - - - Gets a collection that contains the keys in the dictionary. - A collection that contains the keys of the model-state dictionary. - - - Copies the values from the specified object into this dictionary, overwriting existing values if keys are the same. - The dictionary. - - - Removes the first occurrence of the specified object from the model-state dictionary. - true if was successfully removed the model-state dictionary; otherwise, false. This method also returns false if is not found in the model-state dictionary. - The object to remove from the model-state dictionary. - The model-state dictionary is read-only. - - - Removes the element that has the specified key from the model-state dictionary. - true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the model-state dictionary. - The key of the element to remove. - The model-state dictionary is read-only. - - is null. - - - Sets the value for the specified key by using the specified value provider dictionary. - The key. - The value. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Attempts to gets the value that is associated with the specified key. - true if the object that implements contains an element that has the specified key; otherwise, false. - The key of the value to get. - When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - - is null. - - - Gets a collection that contains the values in the dictionary. - A collection that contains the values of the model-state dictionary. - - - Provides a container for a validation result. - - - Initializes a new instance of the class. - - - Gets or sets the name of the member. - The name of the member. - - - Gets or sets the validation result message. - The validation result message. - - - Provides a base class for implementing validation logic. - - - Called from constructors in derived classes to initialize the class. - The metadata. - The controller context. - - - Gets the controller context. - The controller context. - - - When implemented in a derived class, returns metadata for client validation. - The metadata for client validation. - - - Returns a composite model validator for the model. - A composite model validator for the model. - The metadata. - The controller context. - - - Gets or sets a value that indicates whether a model property is required. - true if the model property is required; otherwise, false. - - - Gets the metadata for the model validator. - The metadata for the model validator. - - - When implemented in a derived class, validates the object. - A list of validation results. - The container. - - - Provides a list of validators for a model. - - - When implemented in a derived class, initializes a new instance of the class. - - - Gets a list of validators. - A list of validators. - The metadata. - The context. - - - Provides a container for a list of validation providers. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using a list of model-validation providers. - A list of model-validation providers. - - - Returns the list of model validators. - The list of model validators. - The model metadata. - The controller context. - - - Inserts a model-validator provider into the collection. - The zero-based index at which item should be inserted. - The model-validator provider object to insert. - - - Replaces the model-validator provider element at the specified index. - The zero-based index of the model-validator provider element to replace. - The new value for the model-validator provider element. - - - Provides a container for the current validation provider. - - - Gets the model validator provider collection. - The model validator provider collection. - - - Represents a list of items that users can select more than one item from. - - - Initializes a new instance of the class by using the specified items to include in the list. - The items. - The parameter is null. - - - Initializes a new instance of the class by using the specified items to include in the list and the selected values. - The items. - The selected values. - The parameter is null. - - - Initializes a new instance of the class by using the items to include in the list, the data value field, and the data text field. - The items. - The data value field. - The data text field. - The parameter is null. - - - Initializes a new instance of the class by using the items to include in the list, the data value field, the data text field, and the selected values. - The items. - The data value field. - The data text field. - The selected values. - The parameter is null. - - - Gets or sets the data text field. - The data text field. - - - Gets or sets the data value field. - The data value field. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Gets or sets the items in the list. - The items in the list. - - - Gets or sets the selected values. - The selected values. - - - Returns an enumerator can be used to iterate through a collection. - An enumerator that can be used to iterate through the collection. - - - When implemented in a derived class, provides a metadata class that contains a reference to the implementation of one or more of the filter interfaces, the filter's order, and the filter's scope. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class and specifies the order of filters and whether multiple filters are allowed. - true to specify that multiple filters of the same type are allowed; otherwise, false. - The filter order. - - - Gets a value that indicates whether more than one instance of the filter attribute can be specified. - true if more than one instance of the filter attribute is allowed; otherwise, false. - - - Gets a value that indicates the order in which a filter is applied. - A value that indicates the order in which a filter is applied. - - - Selects the controller that will handle an HTTP request. - - - Initializes a new instance of the class. - The request context. - The parameter is null. - - - Adds the version header by using the specified HTTP context. - The HTTP context. - - - Called by ASP.NET to begin asynchronous request processing. - The status of the asynchronous call. - The HTTP context. - The asynchronous callback method. - The state of the asynchronous object. - - - Called by ASP.NET to begin asynchronous request processing using the base HTTP context. - The status of the asynchronous call. - The HTTP context. - The asynchronous callback method. - The state of the asynchronous object. - - - Gets or sets a value that indicates whether the MVC response header is disabled. - true if the MVC response header is disabled; otherwise, false. - - - Called by ASP.NET when asynchronous request processing has ended. - The asynchronous result. - - - Gets a value that indicates whether another request can use the instance. - true if the instance is reusable; otherwise, false. - - - Contains the header name of the ASP.NET MVC version. - - - Processes the request by using the specified HTTP request context. - The HTTP context. - - - Processes the request by using the specified base HTTP request context. - The HTTP context. - - - Gets the request context. - The request context. - - - Called by ASP.NET to begin asynchronous request processing using the base HTTP context. - The status of the asynchronous call. - The HTTP context. - The asynchronous callback method. - The data. - - - Called by ASP.NET when asynchronous request processing has ended. - The asynchronous result. - - - Gets a value that indicates whether another request can use the instance. - true if the instance is reusable; otherwise, false. - - - Enables processing of HTTP Web requests by a custom HTTP handler that implements the interface. - An object that provides references to the intrinsic server objects (for example, Request, Response, Session, and Server) that are used to service HTTP requests. - - - Represents an HTML-encoded string that should not be encoded again. - - - Initializes a new instance of the class. - The string to create. If no value is assigned, the object is created using an empty-string value. - - - Creates an HTML-encoded string using the specified text value. - An HTML-encoded string. - The value of the string to create . - - - Contains an empty HTML string. - - - Determines whether the specified string contains content or is either null or empty. - true if the string is null or empty; otherwise, false. - The string. - - - Verifies and processes an HTTP request. - - - Initializes a new instance of the class. - - - Called by ASP.NET to begin asynchronous request processing. - The status of the asynchronous call. - The HTTP context. - The asynchronous callback method. - The state. - - - Called by ASP.NET to begin asynchronous request processing. - The status of the asynchronous call. - The base HTTP context. - The asynchronous callback method. - The state. - - - Called by ASP.NET when asynchronous request processing has ended. - The asynchronous result. - - - Called by ASP.NET to begin asynchronous request processing. - The status of the asynchronous call. - The context. - The asynchronous callback method. - An object that contains data. - - - Called by ASP.NET when asynchronous request processing has ended. - The status of the asynchronous operations. - - - Verifies and processes an HTTP request. - The HTTP handler. - The HTTP context. - - - Creates an object that implements the IHttpHandler interface and passes the request context to it. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the specified factory controller object. - The controller factory. - - - Returns the HTTP handler by using the specified HTTP context. - The HTTP handler. - The request context. - - - Returns the session behavior. - The session behavior. - The request context. - - - Returns the HTTP handler by using the specified request context. - The HTTP handler. - The request context. - - - Creates instances of files. - - - Initializes a new instance of the class. - - - Creates a Razor host. - A Razor host. - The virtual path to the target file. - The physical path to the target file. - - - Extends a NameValueCollection object so that the collection can be copied to a specified dictionary. - - - Copies the specified collection to the specified destination. - The collection. - The destination. - - - Copies the specified collection to the specified destination, and optionally replaces previous entries. - The collection. - The destination. - true to replace previous entries; otherwise, false. - - - Represents the base class for value providers whose values come from a object. - - - Initializes a new instance of the class using the specified unvalidated collection. - A collection that contains the values that are used to initialize the provider. - A collection that contains the values that are used to initialize the provider. This collection will not be validated. - An object that contains information about the target culture. - - - Initializes a new instance of the class. - A collection that contains the values that are used to initialize the provider. - An object that contains information about the target culture. - The parameter is null. - - - Determines whether the collection contains the specified prefix. - true if the collection contains the specified prefix; otherwise, false. - The prefix to search for. - The parameter is null. - - - Returns a value object using the specified key. - The value object for the specified key. - The key of the value object to retrieve. - The parameter is null. - - - Returns a value object using the specified key and validation directive. - The value object for the specified key. - The key. - true if validation should be skipped; otherwise, false. - - - Provides a convenience wrapper for the attribute. - - - Initializes a new instance of the class. - - - Represents an attribute that is used to indicate that a controller method is not an action method. - - - Initializes a new instance of the class. - - - Determines whether the attribute marks a method that is not an action method by using the specified controller context. - true if the attribute marks a valid non-action method; otherwise, false. - The controller context. - The method information. - - - Represents an attribute that is used to mark an action method whose output will be cached. - - - Initializes a new instance of the class. - - - Gets or sets the cache profile name. - The cache profile name. - - - Gets or sets the child action cache. - The child action cache. - - - Gets or sets the cache duration, in seconds. - The cache duration. - - - Returns a value that indicates whether a child action cache is active. - true if the child action cache is active; otherwise, false. - The controller context. - - - Gets or sets the location. - The location. - - - Gets or sets a value that indicates whether to store the cache. - true if the cache should be stored; otherwise, false. - - - This method is an implementation of and supports the ASP.NET MVC infrastructure. It is not intended to be used directly from your code. - The filter context. - - - This method is an implementation of and supports the ASP.NET MVC infrastructure. It is not intended to be used directly from your code. - The filter context. - - - This method is an implementation of and supports the ASP.NET MVC infrastructure. It is not intended to be used directly from your code. - The filter context. - - - This method is an implementation of and supports the ASP.NET MVC infrastructure. It is not intended to be used directly from your code. - The filter context. - - - Called before the action result executes. - The filter context, which encapsulates information for using . - The parameter is null. - - - Gets or sets the SQL dependency. - The SQL dependency. - - - Gets or sets the vary-by-content encoding. - The vary-by-content encoding. - - - Gets or sets the vary-by-custom value. - The vary-by-custom value. - - - Gets or sets the vary-by-header value. - The vary-by-header value. - - - Gets or sets the vary-by-param value. - The vary-by-param value. - - - Encapsulates information for binding action-method parameters to a data model. - - - Initializes a new instance of the class. - - - Gets the model binder. - The model binder. - - - Gets a comma-delimited list of property names for which binding is disabled. - The exclude list. - - - Gets a comma-delimited list of property names for which binding is enabled. - The include list. - - - Gets the prefix to use when the MVC framework binds a value to an action parameter or to a model property. - The prefix. - - - Contains information that describes a parameter. - - - Initializes a new instance of the class. - - - Gets the action descriptor. - The action descriptor. - - - Gets the binding information. - The binding information. - - - Gets the default value of the parameter. - The default value of the parameter. - - - Returns an array of custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns an array of custom attributes that are defined for this member, identified by type. - An array of custom attributes, or an empty array if no custom attributes exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - The parameter is null. - - - Indicates whether one or more instances of a custom attribute type are defined for this member. - true if the custom attribute type is defined for this member; otherwise, false. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The parameter is null. - - - Gets the name of the parameter. - The name of the parameter. - - - Gets the type of the parameter. - The type of the parameter. - - - Represents a base class that is used to send a partial view to the response. - - - Initializes a new instance of the class. - - - Returns the object that is used to render the view. - The view engine result. - The controller context. - An error occurred while the method was attempting to find the view. - - - Provides a registration point for ASP.NET Razor pre-application start code. - - - Registers Razor pre-application start code. - - - Represents a value provider for query strings that are contained in a object. - - - Initializes a new instance of the class. - An object that encapsulates information about the current HTTP request. - - - Represents a class that is responsible for creating a new instance of a query-string value-provider object. - - - Initializes a new instance of the class. - - - Returns a value-provider object for the specified controller context. - A query-string value-provider object. - An object that encapsulates information about the current HTTP request. - The parameter is null. - - - Provides an adapter for the attribute. - - - Initializes a new instance of the class. - The model metadata. - The controller context. - The range attribute. - - - Gets a list of client validation rules for a range check. - A list of client validation rules for a range check. - - - Represents the class used to create views that have Razor syntax. - - - Initializes a new instance of the class. - The controller context. - The view path. - The layout or master page. - A value that indicates whether view start files should be executed before the view. - The set of extensions that will be used when looking up view start files. - - - Initializes a new instance of the class using the view page activator. - The controller context. - The view path. - The layout or master page. - A value that indicates whether view start files should be executed before the view. - The set of extensions that will be used when looking up view start files. - The view page activator. - - - Gets the layout or master page. - The layout or master page. - - - Renders the specified view context by using the specified writer and instance. - The view context. - The writer that is used to render the view to the response. - The instance. - - - Gets a value that indicates whether view start files should be executed before the view. - A value that indicates whether view start files should be executed before the view. - - - Gets or sets the set of file extensions that will be used when looking up view start files. - The set of file extensions that will be used when looking up view start files. - - - Represents a view engine that is used to render a Web page that uses the ASP.NET Razor syntax. - - - Initializes a new instance of the class. - - - - Creates a partial view using the specified controller context and partial path. - The partial view. - The controller context. - The path to the partial view. - - - Creates a view by using the specified controller context and the paths of the view and master view. - The view. - The controller context. - The path to the view. - The path to the master view. - - - Controls the processing of application actions by redirecting to a specified URI. - - - Initializes a new instance of the class. - The target URL. - The parameter is null. - - - Initializes a new instance of the class using the specified URL and permanent-redirection flag. - The URL. - A value that indicates whether the redirection should be permanent. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context within which the result is executed. - The parameter is null. - - - Gets a value that indicates whether the redirection should be permanent. - true if the redirection should be permanent; otherwise, false. - - - Gets or sets the target URL. - The target URL. - - - Represents a result that performs a redirection by using the specified route values dictionary. - - - Initializes a new instance of the class by using the specified route name and route values. - The name of the route. - The route values. - - - Initializes a new instance of the class by using the specified route name, route values, and permanent-redirection flag. - The name of the route. - The route values. - A value that indicates whether the redirection should be permanent. - - - Initializes a new instance of the class by using the specified route values. - The route values. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context within which the result is executed. - The parameter is null. - - - Gets a value that indicates whether the redirection should be permanent. - true if the redirection should be permanent; otherwise, false. - - - Gets or sets the name of the route. - The name of the route. - - - Gets or sets the route values. - The route values. - - - Contains information that describes a reflected action method. - - - Initializes a new instance of the class. - The action-method information. - The name of the action. - The controller descriptor. - Either the or parameter is null. - The parameter is null or empty. - - - Gets the name of the action. - The name of the action. - - - Gets the controller descriptor. - The controller descriptor. - - - Executes the specified controller context by using the specified action-method parameters. - The action return value. - The controller context. - The parameters. - The or parameter is null. - - - Returns an array of custom attributes defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns an array of custom attributes defined for this member, identified by type. - An array of custom attributes, or an empty array if no custom attributes exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Retrieves the parameters of the action method. - The parameters of the action method. - - - Retrieves the action selectors. - The action selectors. - - - Indicates whether one or more instances of a custom attribute type are defined for this member. - true if the custom attribute type is defined for this member; otherwise, false. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Gets or sets the action-method information. - The action-method information. - - - Gets the unique ID for the reflected action descriptor using lazy initialization. - The unique ID. - - - Contains information that describes a reflected controller. - - - Initializes a new instance of the class. - The type of the controller. - The parameter is null. - - - Gets the type of the controller. - The type of the controller. - - - Finds the specified action for the specified controller context. - The information about the action. - The controller context. - The name of the action. - The parameter is null. - The parameter is null or empty. - - - Returns the list of actions for the controller. - A list of action descriptors for the controller. - - - Returns an array of custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns an array of custom attributes that are defined for this member, identified by type. - An array of custom attributes, or an empty array if no custom attributes exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns a value that indicates whether one or more instances of a custom attribute type are defined for this member. - true if the custom attribute type is defined for this member; otherwise, false. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Contains information that describes a reflected action-method parameter. - - - Initializes a new instance of the class. - The parameter information. - The action descriptor. - The or parameter is null. - - - Gets the action descriptor. - The action descriptor. - - - Gets the binding information. - The binding information. - - - Gets the default value of the reflected parameter. - The default value of the reflected parameter. - - - Returns an array of custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns an array of custom attributes that are defined for this member, identified by type. - An array of custom attributes, or an empty array if no custom attributes exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns a value that indicates whether one or more instances of a custom attribute type are defined for this member. - true if the custom attribute type is defined for this member; otherwise, false. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Gets or sets the parameter information. - The parameter information. - - - Gets the name of the parameter. - The name of the parameter. - - - Gets the type of the parameter. - The type of the parameter. - - - Provides an adapter for the attribute. - - - Initializes a new instance of the class. - The model metadata. - The controller context. - The regular expression attribute. - - - Gets a list of regular-expression client validation rules. - A list of regular-expression client validation rules. - - - Provides an attribute that uses the jQuery validation plug-in remote validator. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the specified route name. - The route name. - - - Initializes a new instance of the class using the specified action-method name and controller name. - The name of the action method. - The name of the controller. - - - Initializes a new instance of the class using the specified action-method name, controller name, and area name. - The name of the action method. - The name of the controller. - The name of the area. - - - Gets or sets the additional fields that are required for validation. - The additional fields that are required for validation. - - - Returns a comma-delimited string of validation field names. - A comma-delimited string of validation field names. - The name of the validation property. - - - Formats the error message that is displayed when validation fails. - A formatted error message. - A name to display with the error message. - - - Formats the property for client validation by prepending an asterisk (*) and a dot. - The string "*." Is prepended to the property. - The property. - - - Gets a list of client validation rules for the property. - A list of remote client validation rules for the property. - The model metadata. - The controller context. - - - Gets the URL for the remote validation call. - The URL for the remote validation call. - The controller context. - - - Gets or sets the HTTP method used for remote validation. - The HTTP method used for remote validation. The default value is "Get". - - - This method always returns true. - true - The validation target. - - - Gets the route data dictionary. - The route data dictionary. - - - Gets or sets the route name. - The route name. - - - Gets the route collection from the route table. - The route collection from the route table. - - - Provides an adapter for the attribute. - - - Initializes a new instance of the class. - The model metadata. - The controller context. - The required attribute. - - - Gets a list of required-value client validation rules. - A list of required-value client validation rules. - - - Represents an attribute that forces an unsecured HTTP request to be re-sent over HTTPS. - - - Initializes a new instance of the class. - - - Handles unsecured HTTP requests that are sent to the action method. - An object that encapsulates information that is required in order to use the attribute. - The HTTP request contains an invalid transfer method override. All GET requests are considered invalid. - - - Determines whether a request is secured (HTTPS) and, if it is not, calls the method. - An object that encapsulates information that is required in order to use the attribute. - The parameter is null. - - - Provides the context for the method of the class. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The controller context. - The result object. - true to cancel execution; otherwise, false. - The exception object. - The parameter is null. - - - Gets or sets a value that indicates whether this instance is canceled. - true if the instance is canceled; otherwise, false. - - - Gets or sets the exception object. - The exception object. - - - Gets or sets a value that indicates whether the exception has been handled. - true if the exception has been handled; otherwise, false. - - - Gets or sets the action result. - The action result. - - - Provides the context for the method of the class. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified controller context and action result. - The controller context. - The action result. - The parameter is null. - - - Gets or sets a value that indicates whether this value is "cancel". - true if the value is "cancel"; otherwise, false. - - - Gets or sets the action result. - The action result. - - - Extends a object for MVC routing. - - - Returns an object that contains information about the route and virtual path that are the result of generating a URL in the current area. - An object that contains information about the route and virtual path that are the result of generating a URL in the current area. - An object that contains the routes for the applications. - An object that encapsulates information about the requested route. - The name of the route to use when information about the URL path is retrieved. - An object that contains the parameters for a route. - - - Returns an object that contains information about the route and virtual path that are the result of generating a URL in the current area. - An object that contains information about the route and virtual path that are the result of generating a URL in the current area. - An object that contains the routes for the applications. - An object that encapsulates information about the requested route. - An object that contains the parameters for a route. - - - Ignores the specified URL route for the given list of available routes. - A collection of routes for the application. - The URL pattern for the route to ignore. - The or parameter is null. - - - Ignores the specified URL route for the given list of the available routes and a list of constraints. - A collection of routes for the application. - The URL pattern for the route to ignore. - A set of expressions that specify values for the parameter. - The or parameter is null. - - - Maps the specified URL route. - A reference to the mapped route. - A collection of routes for the application. - The name of the route to map. - The URL pattern for the route. - The or parameter is null. - - - Maps the specified URL route and sets default route values. - A reference to the mapped route. - A collection of routes for the application. - The name of the route to map. - The URL pattern for the route. - An object that contains default route values. - The or parameter is null. - - - Maps the specified URL route and sets default route values and constraints. - A reference to the mapped route. - A collection of routes for the application. - The name of the route to map. - The URL pattern for the route. - An object that contains default route values. - A set of expressions that specify values for the parameter. - The or parameter is null. - - - Maps the specified URL route and sets default route values, constraints, and namespaces. - A reference to the mapped route. - A collection of routes for the application. - The name of the route to map. - The URL pattern for the route. - An object that contains default route values. - A set of expressions that specify values for the parameter. - A set of namespaces for the application. - The or parameter is null. - - - Maps the specified URL route and sets default route values and namespaces. - A reference to the mapped route. - A collection of routes for the application. - The name of the route to map. - The URL pattern for the route. - An object that contains default route values. - A set of namespaces for the application. - The or parameter is null. - - - Maps the specified URL route and sets the namespaces. - A reference to the mapped route. - A collection of routes for the application. - The name of the route to map. - The URL pattern for the route. - A set of namespaces for the application. - The or parameter is null. - - - Represents a value provider for route data that is contained in an object that implements the interface. - - - Initializes a new instance of the class. - An object that contain information about the HTTP request. - - - Represents a factory for creating route-data value provider objects. - - - Initialized a new instance of the class. - - - Returns a value-provider object for the specified controller context. - A value-provider object. - An object that encapsulates information about the current HTTP request. - The parameter is null. - - - Represents a list that lets users select one item. - - - Initializes a new instance of the class by using the specified items for the list. - The items. - - - Initializes a new instance of the class by using the specified items for the list and a selected value. - The items. - The selected value. - - - Initializes a new instance of the class by using the specified items for the list, the data value field, and the data text field. - The items. - The data value field. - The data text field. - - - Initializes a new instance of the class by using the specified items for the list, the data value field, the data text field, and a selected value. - The items. - The data value field. - The data text field. - The selected value. - - - Gets the list value that was selected by the user. - The selected value. - - - Represents the selected item in an instance of the class. - - - Initializes a new instance of the class. - - - Gets or sets a value that indicates whether this is selected. - true if the item is selected; otherwise, false. - - - Gets or sets the text of the selected item. - The text. - - - Gets or sets the value of the selected item. - The value. - - - Specifies the session state of the controller. - - - Initializes a new instance of the class - The type of the session state. - - - Get the session state behavior for the controller. - The session state behavior for the controller. - - - Provides session-state data to the current object. - - - Initializes a new instance of the class. - - - Loads the temporary data by using the specified controller context. - The temporary data. - The controller context. - An error occurred when the session context was being retrieved. - - - Saves the specified values in the temporary data dictionary by using the specified controller context. - The controller context. - The values. - An error occurred the session context was being retrieved. - - - Provides an adapter for the attribute. - - - Initializes a new instance of the class. - The model metadata. - The controller context. - The string-length attribute. - - - Gets a list of string-length client validation rules. - A list of string-length client validation rules. - - - Represents a set of data that persists only from one request to the next. - - - Initializes a new instance of the class. - - - Adds an element that has the specified key and value to the object. - The key of the element to add. - The value of the element to add. - The object is read-only. - - is null. - An element that has the same key already exists in the object. - - - Removes all items from the instance. - The object is read-only. - - - Determines whether the instance contains an element that has the specified key. - true if the instance contains an element that has the specified key; otherwise, false. - The key to locate in the instance. - - is null. - - - Determines whether the dictionary contains the specified value. - true if the dictionary contains the specified value; otherwise, false. - The value. - - - Gets the number of elements in the object. - The number of elements in the object. - - - Gets the enumerator. - The enumerator. - - - Gets or sets the object that has the specified key. - The object that has the specified key. - The key to access. - - - Marks all keys in the dictionary for retention. - - - Marks the specified key in the dictionary for retention. - The key to retain in the dictionary. - - - Gets an object that contains the keys of elements in the object. - The keys of the elements in the object. - - - Loads the specified controller context by using the specified data provider. - The controller context. - The temporary data provider. - - - Returns an object that contains the element that is associated with the specified key, without marking the key for deletion. - An object that contains the element that is associated with the specified key. - The key of the element to return. - - - Removes the element that has the specified key from the object. - true if the element was removed successfully; otherwise, false. This method also returns false if was not found in the . instance. - The key of the element to remove. - The object is read-only. - - is null. - - - Saves the specified controller context by using the specified data provider. - The controller context. - The temporary data provider. - - - Adds the specified key/value pair to the dictionary. - The key/value pair. - - - Determines whether a sequence contains a specified element by using the default equality comparer. - true if the dictionary contains the specified key/value pair; otherwise, false. - The key/value pair to search for. - - - Copies a key/value pair to the specified array at the specified index. - The target array. - The index. - - - Gets a value that indicates whether the dictionary is read-only. - true if the dictionary is read-only; otherwise, false. - - - Deletes the specified key/value pair from the dictionary. - true if the key/value pair was removed successfully; otherwise, false. - The key/value pair. - - - Returns an enumerator that can be used to iterate through a collection. - An object that can be used to iterate through the collection. - - - Gets the value of the element that has the specified key. - true if the object that implements contains an element that has the specified key; otherwise, false. - The key of the value to get. - When this method returns, the value that is associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - - is null. - - - Gets the object that contains the values in the object. - The values of the elements in the object that implements . - - - Encapsulates information about the current template context. - - - Initializes a new instance of the class. - - - Gets or sets the formatted model value. - The formatted model value. - - - Retrieves the full DOM ID of a field using the specified HTML name attribute. - The full DOM ID. - The value of the HTML name attribute. - - - Retrieves the fully qualified name (including a prefix) for a field using the specified HTML name attribute. - The prefixed name of the field. - The value of the HTML name attribute. - - - Gets or sets the HTML field prefix. - The HTML field prefix. - - - Contains the number of objects that were visited by the user. - The number of objects. - - - Determines whether the template has been visited by the user. - true if the template has been visited by the user; otherwise, false. - An object that encapsulates information that describes the model. - - - Contains methods to build URLs for ASP.NET MVC within an application. - - - Initializes a new instance of the class using the specified request context. - An object that contains information about the current request and about the route that it matched. - The parameter is null. - - - Initializes a new instance of the class by using the specified request context and route collection. - An object that contains information about the current request and about the route that it matched. - A collection of routes. - The or the parameter is null. - - - Generates a fully qualified URL to an action method by using the specified action name. - The fully qualified URL to an action method. - The name of the action method. - - - Generates a fully qualified URL to an action method by using the specified action name and route values. - The fully qualified URL to an action method. - The name of the action method. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - - - Generates a fully qualified URL to an action method by using the specified action name and controller name. - The fully qualified URL to an action method. - The name of the action method. - The name of the controller. - - - Generates a fully qualified URL to an action method by using the specified action name, controller name, and route values. - The fully qualified URL to an action method. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - - - Generates a fully qualified URL to an action method by using the specified action name, controller name, route values, and protocol to use. - The fully qualified URL to an action method. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - The protocol for the URL, such as "http" or "https". - - - Generates a fully qualified URL to an action method by using the specified action name, controller name, and route values. - The fully qualified URL to an action method. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - - - Generates a fully qualified URL for an action method by using the specified action name, controller name, route values, protocol to use, and host name. - The fully qualified URL to an action method. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - - - Generates a fully qualified URL to an action method for the specified action name and route values. - The fully qualified URL to an action method. - The name of the action method. - An object that contains the parameters for a route. - - - Converts a virtual (relative) path to an application absolute path. - The application absolute path. - The virtual path of the content. - - - Encodes special characters in a URL string into character-entity equivalents. - An encoded URL string. - The text to encode. - - - Returns a string that contains a content URL. - A string that contains a content URL. - The content path. - The HTTP context. - - - Returns a string that contains a URL. - A string that contains a URL. - The route name. - The action name. - The controller name. - The HTTP protocol. - The host name. - The fragment. - The route values. - The route collection. - The request context. - true to include implicit MVC values; otherwise false. - - - Returns a string that contains a URL. - A string that contains a URL. - The route name. - The action name. - The controller name. - The route values. - The route collection. - The request context. - true to include implicit MVC values; otherwise. false. - - - Returns a value that indicates whether the URL is local. - true if the URL is local; otherwise, false. - The URL. - - - Gets information about an HTTP request that matches a defined route. - The request context. - - - Gets a collection that contains the routes that are registered for the application. - The route collection. - - - Generates a fully qualified URL for the specified route values. - The fully qualified URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - - - Generates a fully qualified URL for the specified route name. - The fully qualified URL. - The name of the route that is used to generate the URL. - - - Generates a fully qualified URL for the specified route values by using a route name. - The fully qualified URL. - The name of the route that is used to generate the URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - - - Generates a fully qualified URL for the specified route values by using a route name and the protocol to use. - The fully qualified URL. - The name of the route that is used to generate the URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - The protocol for the URL, such as "http" or "https". - - - Generates a fully qualified URL for the specified route values by using a route name. - The fully qualified URL. - The name of the route that is used to generate the URL. - An object that contains the parameters for a route. - - - Generates a fully qualified URL for the specified route values by using the specified route name, protocol to use, and host name. - The fully qualified URL. - The name of the route that is used to generate the URL. - An object that contains the parameters for a route. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - - - Generates a fully qualified URL for the specified route values. - The fully qualified URL. - An object that contains the parameters for a route. - - - Represents an optional parameter that is used by the class during routing. - - - Contains the read-only value for the optional parameter. - - - Returns an empty string. This method supports the ASP.NET MVC infrastructure and is not intended to be used directly from your code. - An empty string. - - - Provides an object adapter that can be validated. - - - Initializes a new instance of the class. - The model metadata. - The controller context. - - - Validates the specified object. - A list of validation results. - The container. - - - Represents an attribute that is used to detect whether a server request has been tampered with. - - - Initializes a new instance of the class. - - - Called when authorization is required. - The filter context. - The parameter is null. - - - Gets or sets the salt string. - The salt string. - - - Represents an attribute that is used to mark action methods whose input must be validated. - - - Initializes a new instance of the class. - true to enable validation. - - - Gets or sets a value that indicates whether to enable validation. - true if validation is enabled; otherwise, false. - - - Called when authorization is required. - The filter context. - The parameter is null. - - - Represents the collection of value-provider objects for the application. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class and registers the specified value providers. - The list of value providers to register. - - - Determines whether the collection contains the specified prefix. - true if the collection contains the specified prefix; otherwise, false. - The prefix to search for. - - - Returns a value object using the specified key. - The value object for the specified key. - The key of the value object to retrieve. - - - Returns a value object using the specified key and skip-validation parameter. - The value object for the specified key. - The key of the value object to retrieve. - true to specify that validation should be skipped; otherwise, false. - - - Inserts the specified value-provider object into the collection at the specified index location. - The zero-based index location at which to insert the value provider into the collection. - The value-provider object to insert. - The parameter is null. - - - Replaces the value provider at the specified index location with a new value provider. - The zero-based index of the element to replace. - The new value for the element at the specified index. - The parameter is null. - - - Represents a dictionary of value providers for the application. - - - Initializes a new instance of the class. - The controller context. - - - Adds the specified item to the collection of value providers. - The object to add to the object. - The object is read-only. - - - Adds an element that has the specified key and value to the collection of value providers. - The key of the element to add. - The value of the element to add. - The object is read-only. - - is null. - An element that has the specified key already exists in the object. - - - Adds an element that has the specified key and value to the collection of value providers. - The key of the element to add. - The value of the element to add. - The object is read-only. - - is null. - An element that has the specified key already exists in the object. - - - Removes all items from the collection of value providers. - The object is read-only. - - - Determines whether the collection of value providers contains the specified item. - true if is found in the collection of value providers; otherwise, false. - The object to locate in the instance. - - - Determines whether the collection of value providers contains an element that has the specified key. - true if the collection of value providers contains an element that has the key; otherwise, false. - The key of the element to find in the instance. - - is null. - - - Gets or sets the controller context. - The controller context. - - - Copies the elements of the collection to an array, starting at the specified index. - The one-dimensional array that is the destination of the elements copied from the object. The array must have zero-based indexing. - The zero-based index in at which copying starts. - - is null. - - is less than 0. - - is multidimensional.-or- is equal to or greater than the length of .-or-The number of elements in the source collection is greater than the available space from to the end of the destination .-or-Type cannot be cast automatically to the type of the destination array. - - - Gets the number of elements in the collection. - The number of elements in the collection. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Gets a value that indicates whether the collection is read-only. - true if the collection is read-only; otherwise, false. - - - Gets or sets the object that has the specified key. - The object. - The key. - - - Gets a collection that contains the keys of the instance. - A collection that contains the keys of the object that implements the interface. - - - Removes the first occurrence of the specified item from the collection of value providers. - true if was successfully removed from the collection; otherwise, false. This method also returns false if is not found in the collection. - The object to remove from the instance. - The object is read-only. - - - Removes the element that has the specified key from the collection of value providers. - true if the element was successfully removed; otherwise, false. This method also returns false if was not found in the collection. - The key of the element to remove. - The object is read-only. - - is null. - - - Returns an enumerator that can be used to iterate through a collection. - An enumerator that can be used to iterate through the collection. - - - Determines whether the collection contains the specified prefix. - true if the collection contains the specified prefix; otherwise, false. - The prefix to search for. - - - Returns a value object using the specified key. - The value object for the specified key. - The key of the value object to return. - - - Gets the value of the element that has the specified key. - true if the object that implements contains an element that has the specified key; otherwise, false. - The key of the element to get. - When this method returns, the value that is associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - - is null. - - - Gets a collection that contains the values in the object. - A collection of the values in the object that implements the interface. - - - Represents a container for value-provider factory objects. - - - Gets the collection of value-provider factories for the application. - The collection of value-provider factory objects. - - - Represents a factory for creating value-provider objects. - - - Initializes a new instance of the class. - - - Returns a value-provider object for the specified controller context. - A value-provider object. - An object that encapsulates information about the current HTTP request. - - - Represents the collection of value-provider factories for the application. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the specified list of value-provider factories. - A list of value-provider factories to initialize the collection with. - - - Returns the value-provider factory for the specified controller context. - The value-provider factory object for the specified controller context. - An object that encapsulates information about the current HTTP request. - - - Inserts the specified value-provider factory object at the specified index location. - The zero-based index location at which to insert the value provider into the collection. - The value-provider factory object to insert. - The parameter is null. - - - Sets the specified value-provider factory object at the given index location. - The zero-based index location at which to insert the value provider into the collection. - The value-provider factory object to set. - The parameter is null. - - - Represents the result of binding a value (such as from a form post or query string) to an action-method argument property, or to the argument itself. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified raw value, attempted value, and culture information. - The raw value. - The attempted value. - The culture. - - - Gets or sets the raw value that is converted to a string for display. - The raw value. - - - Converts the value that is encapsulated by this result to the specified type. - The converted value. - The target type. - The parameter is null. - - - Converts the value that is encapsulated by this result to the specified type by using the specified culture information. - The converted value. - The target type. - The culture to use in the conversion. - The parameter is null. - - - Gets or sets the culture. - The culture. - - - Gets or set the raw value that is supplied by the value provider. - The raw value. - - - Encapsulates information that is related to rendering a view. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified controller context, view, view data dictionary, temporary data dictionary, and text writer. - Encapsulates information about the HTTP request. - The view to render. - The dictionary that contains the data that is required in order to render the view. - The dictionary that contains temporary data for the view. - The text writer object that is used to write HTML output. - One of the parameters is null. - - - Gets or sets a value that indicates whether client-side validation is enabled. - true if client-side validation is enabled; otherwise, false. - - - Gets or sets an object that encapsulates information that is required in order to validate and process the input data from an HTML form. - An object that encapsulates information that is required in order to validate and process the input data from an HTML form. - - - Writes the client validation information to the HTTP response. - - - Gets data that is associated with this request and that is available for only one request. - The temporary data. - - - Gets or sets a value that indicates whether unobtrusive JavaScript is enabled. - true if unobtrusive JavaScript is enabled; otherwise, false. - - - Gets an object that implements the interface to render in the browser. - The view. - - - Gets the view data that is passed to the view. - The view data. - - - Gets or sets the text writer object that is used to write HTML output. - The object that is used to write the HTML output. - - - Represents a container that is used to pass data between a controller and a view. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified model. - The model. - - - Initializes a new instance of the class by using the specified dictionary. - The dictionary. - The parameter is null. - - - Adds the specified item to the collection. - The object to add to the collection. - The collection is read-only. - - - Adds an element to the collection using the specified key and value . - The key of the element to add. - The value of the element to add. - The object is read-only. - - is null. - An element with the same key already exists in the object. - - - Removes all items from the collection. - The object is read-only. - - - Determines whether the collection contains the specified item. - true if is found in the collection; otherwise, false. - The object to locate in the collection. - - - Determines whether the collection contains an element that has the specified key. - true if the collection contains an element that has the specified key; otherwise, false. - The key of the element to locate in the collection. - - is null. - - - Copies the elements of the collection to an array, starting at a particular index. - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - is null. - - is less than 0. - - is multidimensional.-or- is equal to or greater than the length of .-or- The number of elements in the source collection is greater than the available space from to the end of the destination .-or- Type cannot be cast automatically to the type of the destination . - - - Gets the number of elements in the collection. - The number of elements in the collection. - - - Evaluates the specified expression. - The results of the evaluation. - The expression. - The parameter is null or empty. - - - Evaluates the specified expression by using the specified format. - The results of the evaluation. - The expression. - The format. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Returns information about the view data as defined by the parameter. - An object that contains the view data information that is defined by the parameter. - A set of key/value pairs that define the view-data information to return. - The parameter is either null or empty. - - - Gets a value that indicates whether the collection is read-only. - true if the collection is read-only; otherwise, false. - - - Gets or sets the item that is associated with the specified key. - The value of the selected item. - The key. - - - Gets a collection that contains the keys of this dictionary. - A collection that contains the keys of the object that implements . - - - Gets or sets the model that is associated with the view data. - The model that is associated with the view data. - - - Gets or sets information about the model. - Information about the model. - - - Gets the state of the model. - The state of the model. - - - Removes the first occurrence of a specified object from the collection. - true if was successfully removed from the collection; otherwise, false. This method also returns false if is not found in the collection. - The object to remove from the collection. - The collection is read-only. - - - Removes the element from the collection using the specified key. - true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original collection. - The key of the element to remove. - The collection is read-only. - - is null. - - - Sets the data model to use for the view. - The data model to use for the view. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Gets or sets an object that encapsulates information about the current template context. - An object that contains information about the current template. - - - Attempts to retrieve the value that is associated with the specified key. - true if the collection contains an element with the specified key; otherwise, false. - The key of the value to get. - When this method returns, the value that is associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - - is null. - - - Gets a collection that contains the values in this dictionary. - A collection that contains the values of the object that implements . - - - Represents a container that is used to pass strongly typed data between a controller and a view. - The type of the model. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified view data dictionary. - An existing view data dictionary to copy into this instance. - - - Initializes a new instance of the class by using the specified model. - The data model to use for the view. - - - Gets or sets the model. - A reference to the data model. - - - Gets or sets information about the model. - Information about the model. - - - Sets the data model to use for the view. - The data model to use for the view. - An error occurred while the model was being set. - - - Encapsulates information about the current template content that is used to develop templates and about HTML helpers that interact with templates. - - - Initializes a new instance of the class. - - - Initializes a new instance of the T:System.Web.Mvc.ViewDataInfo class and associates a delegate for accessing the view data information. - A delegate that defines how the view data information is accessed. - - - Gets or sets the object that contains the values to be displayed by the template. - The object that contains the values to be displayed by the template. - - - Gets or sets the description of the property to be displayed by the template. - The description of the property to be displayed by the template. - - - Gets or sets the current value to be displayed by the template. - The current value to be displayed by the template. - - - Represents a collection of view engines that are available to the application. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified list of view engines. - The list that is wrapped by the new collection. - - is null. - - - Finds the specified partial view by using the specified controller context. - The partial view. - The controller context. - The name of the partial view. - The parameter is null. - The parameter is null or empty. - - - Finds the specified view by using the specified controller context and master view. - The view. - The controller context. - The name of the view. - The name of the master view. - The parameter is null. - The parameter is null or empty. - - - Inserts an element into the collection at the specified index. - The zero-based index at which should be inserted. - The object to insert. - - is less than zero.-or- is greater than the number of items in the collection. - The parameter is null. - - - Replaces the element at the specified index. - The zero-based index of the element to replace. - The new value for the element at the specified index. - - is less than zero.-or- is greater than the number of items in the collection. - The parameter is null. - - - Represents the result of locating a view engine. - - - Initializes a new instance of the class by using the specified searched locations. - The searched locations. - The parameter is null. - - - Initializes a new instance of the class by using the specified view and view engine. - The view. - The view engine. - The or parameter is null. - - - Gets or sets the searched locations. - The searched locations. - - - Gets or sets the view. - The view. - - - Gets or sets the view engine. - The view engine. - - - Represents a collection of view engines that are available to the application. - - - Gets the view engines. - The view engines. - - - Represents the information that is needed to build a master view page. - - - Initializes a new instance of the class. - - - Gets the AJAX script for the master page. - The AJAX script for the master page. - - - Gets the HTML for the master page. - The HTML for the master page. - - - Gets the model. - The model. - - - Gets the temporary data. - The temporary data. - - - Gets the URL. - The URL. - - - Gets the dynamic view-bag dictionary. - The dynamic view-bag dictionary. - - - Gets the view context. - The view context. - - - Gets the view data. - The view data. - - - Gets the writer that is used to render the master page. - The writer that is used to render the master page. - - - Represents the information that is required in order to build a strongly typed master view page. - The type of the model. - - - Initializes a new instance of the class. - - - Gets the AJAX script for the master page. - The AJAX script for the master page. - - - Gets the HTML for the master page. - The HTML for the master page. - - - Gets the model. - A reference to the data model. - - - Gets the view data. - The view data. - - - Represents the properties and methods that are needed to render a view as a Web Forms page. - - - Initializes a new instance of the class. - - - Gets or sets the object that is used to render HTML in Ajax scenarios. - The Ajax helper object that is associated with the view. - - - Gets or sets the object that is used to render HTML elements. - The HTML helper object that is associated with the view. - - - Initializes the , , and properties. - - - Gets or sets the path of the master view. - The path of the master view. - - - Gets the Model property of the associated object. - The Model property of the associated object. - - - Raises the event at the beginning of page initialization. - The event data. - - - Enables processing of the specified HTTP request by the ASP.NET MVC framework. - An object that encapsulates HTTP-specific information about the current HTTP request. - - - Initializes the object that receives the page content to be rendered. - The object that receives the page content. - - - Renders the view page to the response using the specified view context. - An object that encapsulates the information that is required in order to render the view, which includes the controller context, form context, the temporary data, and the view data for the associated view. - - - Sets the text writer that is used to render the view to the response. - The writer that is used to render the view to the response. - - - Sets the view data dictionary for the associated view. - A dictionary of data to pass to the view. - - - Gets the temporary data to pass to the view. - The temporary data to pass to the view. - - - Gets or sets the URL of the rendered page. - The URL of the rendered page. - - - Gets the view bag. - The view bag. - - - Gets or sets the information that is used to render the view. - The information that is used to render the view, which includes the form context, the temporary data, and the view data of the associated view. - - - Gets or sets a dictionary that contains data to pass between the controller and the view. - A dictionary that contains data to pass between the controller and the view. - - - Gets the text writer that is used to render the view to the response. - The text writer that is used to render the view to the response. - - - Represents the information that is required in order to render a strongly typed view as a Web Forms page. - The type of the model. - - - Initializes a new instance of the class. - - - Gets or sets the object that supports rendering HTML in Ajax scenarios. - The Ajax helper object that is associated with the view. - - - Gets or sets the object that provides support for rendering elements. - The HTML helper object that is associated with the view. - - - Instantiates and initializes the and properties. - - - Gets the property of the associated object. - A reference to the data model. - - - Sets the view data dictionary for the associated view. - A dictionary of data to pass to the view. - - - Gets or sets a dictionary that contains data to pass between the controller and the view. - A dictionary that contains data to pass between the controller and the view. - - - Represents a class that is used to render a view by using an instance that is returned by an object. - - - Initializes a new instance of the class. - - - Searches the registered view engines and returns the object that is used to render the view. - The object that is used to render the view. - The controller context. - An error occurred while the method was searching for the view. - - - Gets the name of the master view (such as a master page or template) to use when the view is rendered. - The name of the master view. - - - Represents a base class that is used to provide the model to the view and then render the view to the response. - - - Initializes a new instance of the class. - - - When called by the action invoker, renders the view to the response. - The context that the result is executed in. - The parameter is null. - - - Returns the object that is used to render the view. - The view engine. - The context. - - - Gets the view data model. - The view data model. - - - Gets or sets the object for this result. - The temporary data. - - - Gets or sets the object that is rendered to the response. - The view. - - - Gets the view bag. - The view bag. - - - Gets or sets the view data object for this result. - The view data. - - - Gets or sets the collection of view engines that are associated with this result. - The collection of view engines. - - - Gets or sets the name of the view to render. - The name of the view. - - - Provides an abstract class that can be used to implement a view start (master) page. - - - When implemented in a derived class, initializes a new instance of the class. - - - When implemented in a derived class, gets the HTML markup for the view start page. - The HTML markup for the view start page. - - - When implemented in a derived class, gets the URL for the view start page. - The URL for the view start page. - - - When implemented in a derived class, gets the view context for the view start page. - The view context for the view start page. - - - Provides a container for objects. - - - Initializes a new instance of the class. - - - Provides a container for objects. - The type of the model. - - - Initializes a new instance of the class. - - - Gets the formatted value. - The formatted value. - - - Represents the type of a view. - - - Initializes a new instance of the class. - - - Gets or sets the name of the type. - The name of the type. - - - Represents the information that is needed to build a user control. - - - Initializes a new instance of the class. - - - Gets the AJAX script for the view. - The AJAX script for the view. - - - Ensures that view data is added to the object of the user control if the view data exists. - - - Gets the HTML for the view. - The HTML for the view. - - - Gets the model. - The model. - - - Renders the view by using the specified view context. - The view context. - - - Sets the text writer that is used to render the view to the response. - The writer that is used to render the view to the response. - - - Sets the view-data dictionary by using the specified view data. - The view data. - - - Gets the temporary-data dictionary. - The temporary-data dictionary. - - - Gets the URL for the view. - The URL for the view. - - - Gets the view bag. - The view bag. - - - Gets or sets the view context. - The view context. - - - Gets or sets the view-data dictionary. - The view-data dictionary. - - - Gets or sets the view-data key. - The view-data key. - - - Gets the writer that is used to render the view to the response. - The writer that is used to render the view to the response. - - - Represents the information that is required in order to build a strongly typed user control. - The type of the model. - - - Initializes a new instance of the class. - - - Gets the AJAX script for the view. - The AJAX script for the view. - - - Gets the HTML for the view. - The HTML for the view. - - - Gets the model. - A reference to the data model. - - - Sets the view data for the view. - The view data. - - - Gets or sets the view data. - The view data. - - - Represents an abstract base-class implementation of the interface. - - - Initializes a new instance of the class. - - - Gets or sets the area-enabled master location formats. - The area-enabled master location formats. - - - Gets or sets the area-enabled partial-view location formats. - The area-enabled partial-view location formats. - - - Gets or sets the area-enabled view location formats. - The area-enabled view location formats. - - - Creates the specified partial view by using the specified controller context. - A reference to the partial view. - The controller context. - The partial path for the new partial view. - - - Creates the specified view by using the controller context, path of the view, and path of the master view. - A reference to the view. - The controller context. - The path of the view. - The path of the master view. - - - Returns a value that indicates whether the file is in the specified path by using the specified controller context. - true if the file is in the specified path; otherwise, false. - The controller context. - The virtual path. - - - Gets or sets the file-name extensions that are used to locate a view. - The file-name extensions that are used to locate a view. - - - Finds the specified partial view by using the specified controller context. - The partial view. - The controller context. - The name of the partial view. - true to use the cached partial view. - The parameter is null (Nothing in Visual Basic). - The parameter is null or empty. - - - Finds the specified view by using the specified controller context and master view name. - The page view. - The controller context. - The name of the view. - The name of the master view. - true to use the cached view. - The parameter is null (Nothing in Visual Basic). - The parameter is null or empty. - - - Gets or sets the master location formats. - The master location formats. - - - Gets or sets the partial-view location formats. - The partial-view location formats. - - - Releases the specified view by using the specified controller context. - The controller context. - The view to release. - - - Gets or sets the view location cache. - The view location cache. - - - Gets or sets the view location formats. - The view location formats. - - - Gets or sets the virtual path provider. - The virtual path provider. - - - Represents the information that is needed to build a Web Forms page in ASP.NET MVC. - - - Initializes a new instance of the class using the controller context and view path. - The controller context. - The view path. - - - Initializes a new instance of the class using the controller context, view path, and the path to the master page. - The controller context. - The view path. - The path to the master page. - - - Initializes a new instance of the class using the controller context, view path, the path to the master page, and a instance. - The controller context. - The view path. - The path to the master page. - An instance of the view page activator interface. - - - Gets or sets the master path. - The master path. - - - Renders the view to the response. - An object that encapsulates the information that is required in order to render the view, which includes the controller context, form context, the temporary data, and the view data for the associated view. - The text writer object that is used to write HTML output. - The view page instance. - - - Represents a view engine that is used to render a Web Forms page to the response. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the specified view page activator. - An instance of a class that implements the interface. - - - Creates the specified partial view by using the specified controller context. - The partial view. - The controller context. - The partial path. - - - Creates the specified view by using the specified controller context and the paths of the view and master view. - The view. - The controller context. - The view path. - The master-view path. - - - Represents the properties and methods that are needed in order to render a view that uses ASP.NET Razor syntax. - - - Initializes a new instance of the class. - - - Gets or sets the object that is used to render HTML using Ajax. - The object that is used to render HTML using Ajax. - - - Sets the view context and view data for the page. - The parent page. - - - Gets the object that is associated with the page. - The object that is associated with the page. - - - Runs the page hierarchy for the ASP.NET Razor execution pipeline. - - - Gets or sets the object that is used to render HTML elements. - The object that is used to render HTML elements. - - - Initializes the , , and classes. - - - Gets the Model property of the associated object. - The Model property of the associated object. - - - Sets the view data. - The view data. - - - Gets the temporary data to pass to the view. - The temporary data to pass to the view. - - - Gets or sets the URL of the rendered page. - The URL of the rendered page. - - - Gets the view bag. - The view bag. - - - Gets or sets the information that is used to render the view. - The information that is used to render the view, which includes the form context, the temporary data, and the view data of the associated view. - - - Gets or sets a dictionary that contains data to pass between the controller and the view. - A dictionary that contains data to pass between the controller and the view. - - - Represents the properties and methods that are needed in order to render a view that uses ASP.NET Razor syntax. - The type of the view data model. - - - Initializes a new instance of the class. - - - Gets or sets the object that is used to render HTML markup using Ajax. - The object that is used to render HTML markup using Ajax. - - - Gets or sets the object that is used to render HTML elements. - The object that is used to render HTML elements. - - - Initializes the , , and classes. - - - Gets the Model property of the associated object. - The Model property of the associated object. - - - Sets the view data. - The view data. - - - Gets or sets a dictionary that contains data to pass between the controller and the view. - A dictionary that contains data to pass between the controller and the view. - - - Represents support for ASP.NET AJAX within an ASP.NET MVC application. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - The name of the controller. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - The name of the controller. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - The name of the controller. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element.. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response using the specified routing information. - An opening <form> tag. - The AJAX helper. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response using the specified routing information. - An opening <form> tag. - The AJAX helper. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response using the specified routing information. - An opening <form> tag. - The AJAX helper. - The name of the route to use to obtain the form post URL. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response using the specified routing information. - An opening <form> tag. - The AJAX helper. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response using the specified routing information. - An opening <form> tag. - The AJAX helper. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - - - Returns an HTML script element that contains a reference to a globalization script that defines the culture information. - A script element whose src attribute is set to the globalization script, as in the following example: <script type="text/javascript" src="/MvcApplication1/Scripts/Globalization/en-US.js"></script> - The AJAX helper object that this method extends. - - - Returns an HTML script element that contains a reference to a globalization script that defines the specified culture information. - An HTML script element whose src attribute is set to the globalization script, as in the following example:<script type="text/javascript" src="/MvcApplication1/Scripts/Globalization/en-US.js"></script> - The AJAX helper object that this method extends. - Encapsulates information about the target culture, such as date formats. - The parameter is null. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Represents option settings for running Ajax scripts in an ASP.NET MVC application. - - - Initializes a new instance of the class. - - - Gets or sets the message to display in a confirmation window before a request is submitted. - The message to display in a confirmation window. - - - Gets or sets the HTTP request method ("Get" or "Post"). - The HTTP request method. The default value is "Post". - - - Gets or sets the mode that specifies how to insert the response into the target DOM element. - The insertion mode ("InsertAfter", "InsertBefore", or "Replace"). The default value is "Replace". - - - Gets or sets a value, in milliseconds, that controls the duration of the animation when showing or hiding the loading element. - A value, in milliseconds, that controls the duration of the animation when showing or hiding the loading element. - - - Gets or sets the id attribute of an HTML element that is displayed while the Ajax function is loading. - The ID of the element that is displayed while the Ajax function is loading. - - - Gets or sets the name of the JavaScript function to call immediately before the page is updated. - The name of the JavaScript function to call before the page is updated. - - - Gets or sets the JavaScript function to call when response data has been instantiated but before the page is updated. - The JavaScript function to call when the response data has been instantiated. - - - Gets or sets the JavaScript function to call if the page update fails. - The JavaScript function to call if the page update fails. - - - Gets or sets the JavaScript function to call after the page is successfully updated. - The JavaScript function to call after the page is successfully updated. - - - Returns the Ajax options as a collection of HTML attributes to support unobtrusive JavaScript. - The Ajax options as a collection of HTML attributes to support unobtrusive JavaScript. - - - Gets or sets the ID of the DOM element to update by using the response from the server. - The ID of the DOM element to update. - - - Gets or sets the URL to make the request to. - The URL to make the request to. - - - Enumerates the AJAX script insertion modes. - - - Replace the element. - - - Insert before the element. - - - Insert after the element. - - - Provides information about an asynchronous action method, such as its name, controller, parameters, attributes, and filters. - - - Initializes a new instance of the class. - - - Invokes the asynchronous action method by using the specified parameters and controller context. - An object that contains the result of an asynchronous call. - The controller context. - The parameters of the action method. - The callback method. - An object that contains information to be used by the callback method. This parameter can be null. - - - Returns the result of an asynchronous operation. - The result of an asynchronous operation. - An object that represents the status of an asynchronous operation. - - - Executes the asynchronous action method by using the specified parameters and controller context. - The result of executing the asynchronous action method. - The controller context. - The parameters of the action method. - - - Represents a class that is responsible for invoking the action methods of an asynchronous controller. - - - Initializes a new instance of the class. - - - Invokes the asynchronous action method by using the specified controller context, action name, callback method, and state. - An object that contains the result of an asynchronous operation. - The controller context. - The name of the action. - The callback method. - An object that contains information to be used by the callback method. This parameter can be null. - - - Invokes the asynchronous action method by using the specified controller context, action descriptor, parameters, callback method, and state. - An object that contains the result of an asynchronous operation. - The controller context. - The action descriptor. - The parameters for the asynchronous action method. - The callback method. - An object that contains information to be used by the callback method. This parameter can be null. - - - Invokes the asynchronous action method by using the specified controller context, filters, action descriptor, parameters, callback method, and state. - An object that contains the result of an asynchronous operation. - The controller context. - The filters. - The action descriptor. - The parameters for the asynchronous action method. - The callback method. - An object that contains information to be used by the callback method. This parameter can be null. - - - Cancels the action. - true if the action was canceled; otherwise, false. - The user-defined object that qualifies or contains information about an asynchronous operation. - - - Cancels the action. - true if the action was canceled; otherwise, false. - The user-defined object that qualifies or contains information about an asynchronous operation. - - - Cancels the action. - true if the action was canceled; otherwise, false. - The user-defined object that qualifies or contains information about an asynchronous operation. - - - Returns the controller descriptor. - The controller descriptor. - The controller context. - - - Provides asynchronous operations for the class. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the synchronization context. - The synchronization context. - - - Notifies ASP.NET that all asynchronous operations are complete. - - - Occurs when the method is called. - - - Gets the number of outstanding operations. - The number of outstanding operations. - - - Gets the parameters that were passed to the asynchronous completion method. - The parameters that were passed to the asynchronous completion method. - - - Executes a callback in the current synchronization context. - The asynchronous action. - - - Gets or sets the asynchronous timeout value, in milliseconds. - The asynchronous timeout value, in milliseconds. - - - Defines the interface for an action invoker, which is used to invoke an asynchronous action in response to an HTTP request. - - - Invokes the specified action. - The status of the asynchronous result. - The controller context. - The name of the asynchronous action. - The callback method. - The state. - - - Cancels the asynchronous action. - true if the asynchronous method could be canceled; otherwise, false. - The asynchronous result. - - - Defines the methods that are required for an asynchronous controller. - - - Executes the specified request context. - The status of the asynchronous operation. - The request context. - The asynchronous callback method. - The state. - - - Ends the asynchronous operation. - The asynchronous result. - - - Provides a container for the asynchronous manager object. - - - Gets the asynchronous manager object. - The asynchronous manager object. - - - Provides a container that maintains a count of pending asynchronous operations. - - - Initializes a new instance of the class. - - - Occurs when an asynchronous method completes. - - - Gets the operation count. - The operation count. - - - Reduces the operation count by 1. - The updated operation count. - - - Reduces the operation count by the specified value. - The updated operation count. - The number of operations to reduce the count by. - - - Increments the operation count by one. - The updated operation count. - - - Increments the operation count by the specified value. - The updated operation count. - The number of operations to increment the count by. - - - Provides information about an asynchronous action method, such as its name, controller, parameters, attributes, and filters. - - - Initializes a new instance of the class. - An object that contains information about the method that begins the asynchronous operation (the method whose name ends with "Asynch"). - An object that contains information about the completion method (method whose name ends with "Completed"). - The name of the action. - The controller descriptor. - - - Gets the name of the action method. - The name of the action method. - - - Gets the method information for the asynchronous action method. - The method information for the asynchronous action method. - - - Begins running the asynchronous action method by using the specified parameters and controller context. - An object that contains the result of an asynchronous call. - The controller context. - The parameters of the action method. - The callback method. - An object that contains information to be used by the callback method. This parameter can be null. - - - Gets the method information for the asynchronous completion method. - The method information for the asynchronous completion method. - - - Gets the controller descriptor for the asynchronous action method. - The controller descriptor for the asynchronous action method. - - - Returns the result of an asynchronous operation. - The result of an asynchronous operation. - An object that represents the status of an asynchronous operation. - - - Returns an array of custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Returns an array of custom attributes that are defined for this member, identified by type. - An array of custom attributes, or an empty array if no custom attributes of the specified type exist. - The type of the custom attributes to return. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Returns the parameters of the action method. - The parameters of the action method. - - - Returns the action-method selectors. - The action-method selectors. - - - Determines whether one or more instances of the specified attribute type are defined for the action member. - true if an attribute of type that is represented by is defined for this member; otherwise, false. - The type of the custom attribute. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Gets the lazy initialized unique ID of the instance of this class. - The lazy initialized unique ID of the instance of this class. - - - Encapsulates information that describes an asynchronous controller, such as its name, type, and actions. - - - Initializes a new instance of the class. - The type of the controller. - - - Gets the type of the controller. - The type of the controller. - - - Finds an action method by using the specified name and controller context. - The information about the action method. - The controller context. - The name of the action. - - - Returns a list of action method descriptors in the controller. - A list of action method descriptors in the controller. - - - Returns custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Returns custom attributes of a specified type that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Returns a value that indicates whether one or more instances of the specified custom attribute are defined for this member. - true if an attribute of the type represented by is defined for this member; otherwise, false. - The type of the custom attribute. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Represents an exception that occurred during the synchronous processing of an HTTP request in an ASP.NET MVC application. - - - Initializes a new instance of the class using a system-supplied message. - - - Initializes a new instance of the class using the specified message. - The message that describes the exception. The caller of this constructor must make sure that this string has been localized for the current system culture. - - - Initializes a new instance of the class using a specified error message and a reference to the inner exception that is the cause of this exception. - The message that describes the exception. The caller of this constructor must make sure that this string has been localized for the current system culture. - The exception that is the cause of the current exception. If the parameter is not null, the current exception is raised in a catch block that handles the inner exception. - - - Represents support for calling child action methods and rendering the result inline in a parent view. - - - Invokes the specified child action method and returns the result as an HTML string. - The child action result as an HTML string. - The HTML helper instance that this method extends. - The name of the action method to invoke. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method with the specified parameters and returns the result as an HTML string. - The child action result as an HTML string. - The HTML helper instance that this method extends. - The name of the action method to invoke. - An object that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified controller name and returns the result as an HTML string. - The child action result as an HTML string. - The HTML helper instance that this method extends. - The name of the action method to invoke. - The name of the controller that contains the action method. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and controller name and returns the result as an HTML string. - The child action result as an HTML string. - The HTML helper instance that this method extends. - The name of the action method to invoke. - The name of the controller that contains the action method. - An object that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and controller name and returns the result as an HTML string. - The child action result as an HTML string. - The HTML helper instance that this method extends. - The name of the action method to invoke. - The name of the controller that contains the action method. - A dictionary that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and returns the result as an HTML string. - The child action result as an HTML string. - The HTML helper instance that this method extends. - The name of the action method to invoke. - A dictionary that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method and renders the result inline in the parent view. - The HTML helper instance that this method extends. - The name of the child action method to invoke. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and renders the result inline in the parent view. - The HTML helper instance that this method extends. - The name of the child action method to invoke. - An object that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified controller name and renders the result inline in the parent view. - The HTML helper instance that this method extends. - The name of the child action method to invoke. - The name of the controller that contains the action method. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and controller name and renders the result inline in the parent view. - The HTML helper instance that this method extends. - The name of the child action method to invoke. - The name of the controller that contains the action method. - An object that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and controller name and renders the result inline in the parent view. - The HTML helper instance that this method extends. - The name of the child action method to invoke. - The name of the controller that contains the action method. - A dictionary that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and renders the result inline in the parent view. - The HTML helper instance that this method extends. - The name of the child action method to invoke. - A dictionary that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Represents support for rendering object values as HTML. - - - Returns HTML markup for each property in the object that is represented by a string expression. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - - - Returns HTML markup for each property in the object that is represented by a string expression, using additional view data. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns HTML markup for each property in the object that is represented by the expression, using the specified template. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - - - Returns HTML markup for each property in the object that is represented by the expression, using the specified template and additional view data. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns HTML markup for each property in the object that is represented by the expression, using the specified template and an HTML field ID. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - - - Returns HTML markup for each property in the object that is represented by the expression, using the specified template, HTML field ID, and additional view data. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns HTML markup for each property in the object that is represented by the expression. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The type of the model. - The type of the value. - - - Returns a string that contains each property value in the object that is represented by the specified expression, using additional view data. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - The type of the model. - The type of the value. - - - Returns a string that contains each property value in the object that is represented by the , using the specified template. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - The type of the model. - The type of the value. - - - Returns a string that contains each property value in the object that is represented by the specified expression, using the specified template and additional view data. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - The type of the model. - The type of the value. - - - Returns HTML markup for each property in the object that is represented by the , using the specified template and an HTML field ID. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - The type of the model. - The type of the value. - - - Returns HTML markup for each property in the object that is represented by the specified expression, using the template, an HTML field ID, and additional view data. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - The type of the model. - The type of the value. - - - Returns HTML markup for each property in the model. - The HTML markup for each property in the model. - The HTML helper instance that this method extends. - - - Returns HTML markup for each property in the model, using additional view data. - The HTML markup for each property in the model. - The HTML helper instance that this method extends. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns HTML markup for each property in the model using the specified template. - The HTML markup for each property in the model. - The HTML helper instance that this method extends. - The name of the template that is used to render the object. - - - Returns HTML markup for each property in the model, using the specified template and additional view data. - The HTML markup for each property in the model. - The HTML helper instance that this method extends. - The name of the template that is used to render the object. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns HTML markup for each property in the model using the specified template and HTML field ID. - The HTML markup for each property in the model. - The HTML helper instance that this method extends. - The name of the template that is used to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - - - Returns HTML markup for each property in the model, using the specified template, an HTML field ID, and additional view data. - The HTML markup for each property in the model. - The HTML helper instance that this method extends. - The name of the template that is used to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Provides a way to render object values as HTML. - - - Returns HTML markup for each property in the object that is represented by the specified expression. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - - - Returns HTML markup for each property in the object that is represented by the specified expression. - The HTML markup for each property.zz 12/29/2010 1:25:49 PM - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The type of the model. - The type of the result. - - - Represents support for the HTML input element in an application. - - - Returns an HTML input element for each property in the object that is represented by the expression. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - - - Returns an HTML input element for each property in the object that is represented by the expression, using additional view data. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template and additional view data. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template and HTML field name. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template, HTML field name, and additional view data. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns an HTML input element for each property in the object that is represented by the expression. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The type of the model. - The type of the value. - - - Returns an HTML input element for each property in the object that is represented by the expression, using additional view data. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - The type of the model. - The type of the value. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - The type of the model. - The type of the value. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template and additional view data. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - The type of the model. - The type of the value. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template and HTML field name. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - The type of the model. - The type of the value. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template, HTML field name, and additional view data. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - The type of the model. - The type of the value. - - - Returns an HTML input element for each property in the model. - An HTML input element for each property in the model. - The HTML helper instance that this method extends. - - - Returns an HTML input element for each property in the model, using additional view data. - An HTML input element for each property in the model. - The HTML helper instance that this method extends. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns an HTML input element for each property in the model, using the specified template. - An HTML input element for each property in the model and in the specified template. - The HTML helper instance that this method extends. - The name of the template to use to render the object. - - - Returns an HTML input element for each property in the model, using the specified template and additional view data. - An HTML input element for each property in the model. - The HTML helper instance that this method extends. - The name of the template to use to render the object. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns an HTML input element for each property in the model, using the specified template name and HTML field name. - An HTML input element for each property in the model and in the named template. - The HTML helper instance that this method extends. - The name of the template to use to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - - - Returns an HTML input element for each property in the model, using the template name, HTML field name, and additional view data. - An HTML input element for each property in the model. - The HTML helper instance that this method extends. - The name of the template to use to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Represents support for HTML in an application. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - The HTTP method for processing the form, either GET or POST. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - The HTTP method for processing the form, either GET or POST. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - The HTTP method for processing the form, either GET or POST. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - An object that contains the parameters for a route. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - The HTTP method for processing the form, either GET or POST. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - The HTTP method for processing the form, either GET or POST. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - An object that contains the parameters for a route - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - An object that contains the parameters for a route - The HTTP method for processing the form, either GET or POST. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - An object that contains the parameters for a route - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - An object that contains the parameters for a route - - - Renders the closing </form> tag to the response. - The HTML helper instance that this method extends. - - - Represents support for HTML input controls in an application.12/23/2010 12:04:24 PM zz - - - Returns a check box input element by using the specified HTML helper and the name of the form field. - An input element whose type attribute is set to "checkbox". - The HTML helper instance that this method extends. - The name of the form field. - - - Returns a check box input element by using the specified HTML helper, the name of the form field, and a value to indicate whether the check box is selected. - An input element whose type attribute is set to "checkbox". - The HTML helper instance that this method extends. - The name of the form field. - true to select the check box; otherwise, false. - - - Returns a check box input element by using the specified HTML helper, the name of the form field, a value to indicate whether the check box is selected, and the HTML attributes. - An input element whose type attribute is set to "checkbox". - The HTML helper instance that this method extends. - The name of the form field. - true to select the check box; otherwise, false. - An object that contains the HTML attributes to set for the element. - - - Returns a check box input element by using the specified HTML helper, the name of the form field, a value that indicates whether the check box is selected, and the HTML attributes. - An input element whose type attribute is set to "checkbox". - The HTML helper instance that this method extends. - The name of the form field. - true to select the check box; otherwise, false. - An object that contains the HTML attributes to set for the element. - - - Returns a check box input element by using the specified HTML helper, the name of the form field, and the HTML attributes. - An input element whose type attribute is set to "checkbox". - The HTML helper instance that this method extends. - The name of the form field. - An object that contains the HTML attributes to set for the element. - - - Returns a check box input element by using the specified HTML helper, the name of the form field, and the HTML attributes. - An input element whose type attribute is set to "checkbox". - The HTML helper instance that this method extends. - The name of the form field. - An object that contains the HTML attributes to set for the element. - - - Returns a check box input element for each property in the object that is represented by the specified expression. - An HTML input element whose type attribute is set to "checkbox" for each property in the object that is represented by the specified expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The parameter is null. - - - Returns a check box input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "checkbox" for each property in the object that is represented by the specified expression, using the specified HTML attributes. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The parameter is null. - - - Returns a check box input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "checkbox" for each property in the object that is represented by the specified expression, using the specified HTML attributes. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - An object that contains the HTML attributes to set for the element. - The type of the model. - The parameter is null. - - - Returns a hidden input element by using the specified HTML helper and the name of the form field. - An input element whose type attribute is set to "hidden". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - - - Returns a hidden input element by using the specified HTML helper, the name of the form field, and the value. - An input element whose type attribute is set to "hidden". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the hidden input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - - - Returns a hidden input element by using the specified HTML helper, the name of the form field, the value, and the HTML attributes. - An input element whose type attribute is set to "hidden". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the hidden input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - An object that contains the HTML attributes to set for the element. - - - Returns a hidden input element by using the specified HTML helper, the name of the form field, the value, and the HTML attributes. - An input element whose type attribute is set to "hidden". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the hidden input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - An object that contains the HTML attributes to set for the element. - - - Returns an HTML hidden input element for each property in the object that is represented by the specified expression. - An input element whose type attribute is set to "hidden" for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The type of the property. - - - Returns an HTML hidden input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An input element whose type attribute is set to "hidden" for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the property. - - - Returns an HTML hidden input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An input element whose type attribute is set to "hidden" for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the property. - - - Returns a password input element by using the specified HTML helper and the name of the form field. - An input element whose type attribute is set to "password". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - - - Returns a password input element by using the specified HTML helper, the name of the form field, and the value. - An input element whose type attribute is set to "password". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the password input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - - - Returns a password input element by using the specified HTML helper, the name of the form field, the value, and the HTML attributes. - An input element whose type attribute is set to "password". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the password input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - An object that contains the HTML attributes to set for the element. - - - Returns a password input element by using the specified HTML helper, the name of the form field, the value, and the HTML attributes. - An input element whose type attribute is set to "password". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the password input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - An object that contains the HTML attributes to set for the element. - - - Returns a password input element for each property in the object that is represented by the specified expression. - An HTML input element whose type attribute is set to "password" for each property in the object that is represented by the specified expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The type of the value. - The parameter is null. - - - Returns a password input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "password" for each property in the object that is represented by the specified expression, using the specified HTML attributes. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns a password input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "password" for each property in the object that is represented by the specified expression, using the specified HTML attributes. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns a radio button input element that is used to present mutually exclusive options. - An input element whose type attribute is set to "radio". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - The parameter is null or empty. - The parameter is null. - - - Returns a radio button input element that is used to present mutually exclusive options. - An input element whose type attribute is set to "radio". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - true to select the radio button; otherwise, false. - The parameter is null or empty. - The parameter is null. - - - Returns a radio button input element that is used to present mutually exclusive options. - An input element whose type attribute is set to "radio". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - true to select the radio button; otherwise, false. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - The parameter is null. - - - Returns a radio button input element that is used to present mutually exclusive options. - An input element whose type attribute is set to "radio". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - true to select the radio button; otherwise, false. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - The parameter is null. - - - Returns a radio button input element that is used to present mutually exclusive options. - An input element whose type attribute is set to "radio". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - The parameter is null. - - - Returns a radio button input element that is used to present mutually exclusive options. - An input element whose type attribute is set to "radio". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - The parameter is null. - - - Returns a radio button input element for each property in the object that is represented by the specified expression. - An HTML input element whose type attribute is set to "radio" for each property in the object that is represented by the specified expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - The type of the model. - The type of the value. - The parameter is null. - - - Returns a radio button input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "radio" for each property in the object that is represented by the specified expression, using the specified HTML attributes. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns a radio button input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "radio" for each property in the object that is represented by the specified expression, using the specified HTML attributes. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns a text input element by using the specified HTML helper and the name of the form field. - An input element whose type attribute is set to "text". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - - - Returns a text input element by using the specified HTML helper, the name of the form field, and the value. - An input element whose type attribute is set to "text". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the text input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - - - Returns a text input element by using the specified HTML helper, the name of the form field, the value, and the HTML attributes. - An input element whose type attribute is set to "text". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the text input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - An object that contains the HTML attributes to set for the element. - - - Returns a text input element by using the specified HTML helper, the name of the form field, the value, and the HTML attributes. - An input element whose type attribute is set to "text". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the text input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - An object that contains the HTML attributes to set for the element. - - - Returns a text input element for each property in the object that is represented by the specified expression. - An HTML input element whose type attribute is set to "text" for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The type of the value. - The parameter is null or empty. - - - Returns a text input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element type attribute is set to "text" for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null or empty. - - - Returns a text input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "text" for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null or empty. - - - Represents support for the HTML label element in an ASP.NET MVC view. - - - Returns an HTML label element and the property name of the property that is represented by the specified expression. - An HTML label element and the property name of the property that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the property to display. - - - Returns . - - - An HTML label element and the property name of the property that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the property to display. - The type of the model. - The type of the value. - - - An HTML label element and the property name of the property that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the property to display. - The label text. - The type of the model. - The type of the value. - - - Returns an HTML label element and the property name of the property that is represented by the model. - An HTML label element and the property name of the property that is represented by the model. - The HTML helper instance that this method extends. - - - Returns . - - - Represents support for HTML links in an application. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - An object that contains the HTML attributes for the element. The attributes are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - The name of the controller. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - The name of the controller. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - The name of the controller. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - The name of the controller. - An object that contains the parameters for a route. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - An object that contains the parameters for a route. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - An object that contains the parameters for a route. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - An object that contains the parameters for a route. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - An object that contains the parameters for a route. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - An object that contains the parameters for a route. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - An object that contains the parameters for a route. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Represents an HTML form element in an MVC view. - - - Initializes a new instance of the class using the specified HTTP response object. - The HTTP response object. - The parameter is null. - - - Initializes a new instance of the class using the specified view context. - An object that encapsulates the information that is required in order to render a view. - The parameter is null. - - - Releases all resources that are used by the current instance of the class. - - - Releases unmanaged and, optionally, managed resources used by the current instance of the class. - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - Ends the form and disposes of all form resources. - - - Represents the functionality to render a partial view as an HTML-encoded string. - - - Renders the specified partial view as an HTML-encoded string. - The partial view that is rendered as an HTML-encoded string. - The HTML helper instance that this method extends. - The name of the partial view to render. - - - Renders the specified partial view as an HTML-encoded string. - The partial view that is rendered as an HTML-encoded string. - The HTML helper instance that this method extends. - The name of the partial view to render. - The model for the partial view. - - - Renders the specified partial view as an HTML-encoded string. - The partial view that is rendered as an HTML-encoded string. - The HTML helper instance that this method extends. - The name of the partial view. - The model for the partial view. - The view data dictionary for the partial view. - - - Renders the specified partial view as an HTML-encoded string. - The partial view that is rendered as an HTML-encoded string. - The HTML helper instance that this method extends. - The name of the partial view to render. - The view data dictionary for the partial view. - - - Provides support for rendering a partial view. - - - Renders the specified partial view by using the specified HMTL helper. - The HTML helper. - The name of the partial view - - - Renders the specified partial view, passing it a copy of the current object, but with the Model property set to the specified model. - The HTML helper. - The name of the partial view. - The model. - - - Renders the specified partial view, replacing the partial view's ViewData property with the specified object and setting the Model property of the view data to the specified model. - The HTML helper. - The name of the partial view. - The model for the partial view. - The view data for the partial view. - - - Renders the specified partial view, replacing its ViewData property with the specified object. - The HTML helper. - The name of the partial view. - The view data. - - - Represents support for making selections in a list. - - - Returns a single-selection select element using the specified HTML helper and the name of the form field. - An HTML select element. - The HTML helper instance that this method extends. - The name of the form field to return. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, and the specified list items. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, the specified list items, and the specified HTML attributes. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, the specified list items, and the specified HTML attributes. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, the specified list items, and an option label. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - The text for a default empty item. This parameter can be null. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, the specified list items, an option label, and the specified HTML attributes. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - The text for a default empty item. This parameter can be null. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, the specified list items, an option label, and the specified HTML attributes. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - The text for a default empty item. This parameter can be null. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, and an option label. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - The text for a default empty item. This parameter can be null. - The parameter is null or empty. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - A collection of objects that are used to populate the drop-down list. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items and HTML attributes. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - A collection of objects that are used to populate the drop-down list. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items and HTML attributes. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - A collection of objects that are used to populate the drop-down list. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items and option label. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - A collection of objects that are used to populate the drop-down list. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items, option label, and HTML attributes. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - A collection of objects that are used to populate the drop-down list. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items, option label, and HTML attributes. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - A collection of objects that are used to populate the drop-down list. - The type of the model. - The type of the value. - The parameter is null. - - - Returns a multi-select select element using the specified HTML helper and the name of the form field. - An HTML select element. - The HTML helper instance that this method extends. - The name of the form field to return. - The parameter is null or empty. - - - Returns a multi-select select element using the specified HTML helper, the name of the form field, and the specified list items. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - The parameter is null or empty. - - - Returns a multi-select select element using the specified HTML helper, the name of the form field, the specified list items, and the specified HMTL attributes. - An HTML select element with an option subelement for each item in the list.. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns a multi-select select element using the specified HTML helper, the name of the form field, and the specified list items. - An HTML select element with an option subelement for each item in the list.. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an HTML select element for each property in the object that is represented by the specified expression and using the specified list items. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - A collection of objects that are used to populate the drop-down list. - The type of the model. - The type of the property. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items and HTML attributes. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - A collection of objects that are used to populate the drop-down list. - The type of the model. - The type of the property. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items and HTML attributes. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - A collection of objects that are used to populate the drop-down list. - The type of the model. - The type of the property. - The parameter is null. - - - Represents support for HTML textarea controls. - - - Returns the specified textarea element by using the specified HTML helper and the name of the form field. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - - - Returns the specified textarea element by using the specified HTML helper, the name of the form field, and the specified HTML attributes. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - An object that contains the HTML attributes to set for the element. - - - Returns the specified textarea element by using the specified HTML helper and HTML attributes. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - An object that contains the HTML attributes to set for the element. - - - Returns the specified textarea element by using the specified HTML helper, the name of the form field, and the text content. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - The text content. - - - Returns the specified textarea element by using the specified HTML helper, the name of the form field, the text content, and the specified HTML attributes. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - The text content. - An object that contains the HTML attributes to set for the element. - - - Returns the specified textarea element by using the specified HTML helper, the name of the form field, the text content, the number of rows and columns, and the specified HTML attributes. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - The text content. - The number of rows. - The number of columns. - An object that contains the HTML attributes to set for the element. - - - Returns the specified textarea element by using the specified HTML helper, the name of the form field, the text content, the number of rows and columns, and the specified HTML attributes. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - The text content. - The number of rows. - The number of columns. - An object that contains the HTML attributes to set for the element. - - - Returns the specified textarea element by using the specified HTML helper, the name of the form field, the text content, and the specified HTML attributes. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - The text content. - An object that contains the HTML attributes to set for the element. - - - Returns an HTML textarea element for each property in the object that is represented by the specified expression. - An HTML textarea element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The type of the property. - The parameter is null. - - - Returns an HTML textarea element for each property in the object that is represented by the specified expression using the specified HTML attributes. - An HTML textarea element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the property. - The parameter is null. - - - Returns an HTML textarea element for each property in the object that is represented by the specified expression using the specified HTML attributes and the number of rows and columns. - An HTML textarea element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The number of rows. - The number of columns. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the property. - The parameter is null. - - - Returns an HTML textarea element for each property in the object that is represented by the specified expression using the specified HTML attributes and the number of rows and columns. - An HTML textarea element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The number of rows. - The number of columns. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the property. - The parameter is null. - - - Returns an HTML textarea element for each property in the object that is represented by the specified expression using the specified HTML attributes. - An HTML textarea element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the property. - The parameter is null. - - - Provides support for validating the input from an HTML form. - - - Gets or sets the name of the resource file (class key) that contains localized string values. - The name of the resource file (class key). - - - Retrieves the validation metadata for the specified model and applies each rule to the data field. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - The parameter is null. - - - Retrieves the validation metadata for the specified model and applies each rule to the data field. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The type of the property. - - - Displays a validation message if an error exists for the specified field in the object. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - - - Displays a validation message if an error exists for the specified field in the object. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - An object that contains the HTML attributes for the element. - - - Displays a validation message if an error exists for the specified field in the object. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - An object that contains the HTML attributes for the element. - - - Displays a validation message if an error exists for the specified field in the object. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - The message to display if the specified field contains an error. - - - Displays a validation message if an error exists for the specified field in the object. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - The message to display if the specified field contains an error. - An object that contains the HTML attributes for the element. - - - Displays a validation message if an error exists for the specified field in the object. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - The message to display if the specified field contains an error. - An object that contains the HTML attributes for the element. - - - Returns the HTML markup for a validation-error message for each data field that is represented by the specified expression. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The type of the property. - - - Returns the HTML markup for a validation-error message for each data field that is represented by the specified expression, using the specified message. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The message to display if the specified field contains an error. - The type of the model. - The type of the property. - - - Returns the HTML markup for a validation-error message for each data field that is represented by the specified expression, using the specified message and HTML attributes. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The message to display if the specified field contains an error. - An object that contains the HTML attributes for the element. - The type of the model. - The type of the property. - - - Returns the HTML markup for a validation-error message for each data field that is represented by the specified expression, using the specified message and HTML attributes. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The message to display if the specified field contains an error. - An object that contains the HTML attributes for the element. - The type of the model. - The type of the property. - - - Returns an unordered list (ul element) of validation messages that are in the object. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - - - Returns an unordered list (ul element) of validation messages that are in the object and optionally displays only model-level errors. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - true to have the summary display model-level errors only, or false to have the summary display all errors. - - - Returns an unordered list (ul element) of validation messages that are in the object and optionally displays only model-level errors. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - true to have the summary display model-level errors only, or false to have the summary display all errors. - The message to display with the validation summary. - - - Returns an unordered list (ul element) of validation messages that are in the object and optionally displays only model-level errors. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - true to have the summary display model-level errors only, or false to have the summary display all errors. - The message to display with the validation summary. - A dictionary that contains the HTML attributes for the element. - - - Returns an unordered list (ul element) of validation messages that are in the object and optionally displays only model-level errors. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - true to have the summary display model-level errors only, or false to have the summary display all errors. - The message to display with the validation summary. - An object that contains the HTML attributes for the element. - - - Returns an unordered list (ul element) of validation messages that are in the object. - A string that contains an unordered list (ul element) of validation messages. - The HMTL helper instance that this method extends. - The message to display if the specified field contains an error. - - - Returns an unordered list (ul element) of validation messages that are in the object. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - The message to display if the specified field contains an error. - A dictionary that contains the HTML attributes for the element. - - - Returns an unordered list (ul element) of validation messages in the object. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - The message to display if the specified field contains an error. - An object that contains the HTML attributes for the element. - - - Provides a model-aware class for ASP.NET MVC. - - - Initializes a new instance of the class. - The start of the span. - The content. - The type name of the model. - - - Gets a value that indicates whether the current object is identical to the specified object. - true if the current object is identical to the specified object; otherwise, false. - The model span object. - - - Returns the hash code of the object. - The hash code of the object. - - - Gets the type name of the model. - The type name of the model. - - - Compiles ASP.NET Razor views into classes. - - - Initializes a new instance of the class. - The class name. - The root namespace. - The name of the source file. - The ASP.NET Razor engine host. - - - Returns a value that indicates whether the specified model span is an instance of . - true if the value of the parameter is an instance of ; otherwise, false. - The model span. - - - - - - Compiles ASP.NET Razor views into classes. - - - - - Extends the VBCodeParser class by adding support for the @model keyword. - - - Initializes a new instance of the class. - - - - Configures the ASP.NET Razor parser and code generator for a specified file. - - - Initializes a new instance of the class. - The virtual path of the ASP.NET Razor file. - The physical path of the ASP.NET Razor file. - - - - - \ No newline at end of file diff --git a/lib/System.Web.Razor.dll b/lib/System.Web.Razor.dll deleted file mode 100644 index 8668fb6ba57..00000000000 Binary files a/lib/System.Web.Razor.dll and /dev/null differ diff --git a/lib/System.Web.Razor.xml b/lib/System.Web.Razor.xml deleted file mode 100644 index 05e6ce2f394..00000000000 --- a/lib/System.Web.Razor.xml +++ /dev/null @@ -1,4359 +0,0 @@ - - - - System.Web.Razor - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - . - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - Enumerates the list of Visual Basic keywords. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - \ No newline at end of file diff --git a/lib/System.Web.WebPages.Razor.dll b/lib/System.Web.WebPages.Razor.dll deleted file mode 100644 index 9846dd3fc48..00000000000 Binary files a/lib/System.Web.WebPages.Razor.dll and /dev/null differ diff --git a/lib/System.Web.WebPages.dll b/lib/System.Web.WebPages.dll deleted file mode 100644 index 9fea012852d..00000000000 Binary files a/lib/System.Web.WebPages.dll and /dev/null differ diff --git a/lib/js/JSV.js b/lib/js/JSV.js deleted file mode 100644 index f7d31dfa582..00000000000 --- a/lib/js/JSV.js +++ /dev/null @@ -1,588 +0,0 @@ -/** - * Created by IntelliJ IDEA. - * User: mythz - * Date: 16-Jun-2010 - * Time: 00:51:17 - * To change this template use File | Settings | File Templates. - */ - -var JSV = {}; -/** - * parses JSV text into a JavaScript type - * @param str - */ -JSV.parse = function(str) -{ - if (!str) return str; - if (str[0] == '{') - { - return JSV.parseObject_(str); - } - else if (str[0] == '[') - { - return JSV.parseArray_(str); - } - else - { - return JSV.parseString(str); - } -} - -JSV.ESCAPE_CHARS = ['"', ',', '{', '}', '[', ']']; - -JSV.parseArray_ = function(str) -{ - var to = [], value = JSV.stripList_(str); - if (!value) return to; - - if (value[0] == '{') - { - var ref = {i:0}; - do - { - var itemValue = JSV.eatMapValue_(value, ref); - to.push(JSV.parse(itemValue)); - } while (++ref.i < value.length); - } - else - { - for (var ref={i:0}; ref.i < value.length; ref.i++) - { - var elementValue = JSV.eatElementValue_(value, ref); - to.push(JSV.parse(elementValue)); - } - } - return to; -}; - -JSV.parseObject_ = function(str) -{ - if (str[0] != '{') - { - throw "Type definitions should start with a '{', got string starting with: " - + str.substr(0, str.length < 50 ? str.length : 50); - } - - var name, obj = {}; - - if (str == '{}') return null; - for (var ref={i:1}, strTypeLength = str.length; ref.i < strTypeLength; ref.i++) - { - name = JSV.eatMapKey_(str, ref); - ref.i++; - var value = JSV.eatMapValue_(str, ref); - obj[name]= JSV.parse(value); - } - return obj; -} - -JSV.eatElementValue_ = function(value, ref) -{ - return JSV.eatUntilCharFound_(value, ref, ','); -} - -JSV.containsAny_ = function(str, tests) -{ - if (!is.String(str)) return; - for (var i = 0, len = tests.length; i < len; i++) - { - if (str.indexOf(tests[i]) != -1) return true; - } - return false; -}; - -JSV.toCsvField = function(text) -{ - return !text || JSV.containsAny_(JSV.ESCAPE_CHARS) - ? text - : '"' + text.replace(/"/g, '""') + '"'; -} - -JSV.parseString = JSV.fromCsvField = function(text) -{ - return !text || text[0] != '"' - ? text - : text.substr(1, text.length - 2).replace(/""/g, '"'); -} - -JSV.stripList_ = function(value) -{ - if (!value) return null; - return value[0] == '[' - ? value.substr(1, value.length - 2) - : value; -}; - -/** - * @param value {string} - * @param ref {ref int} - * @param findChar {char} - */ -JSV.eatUntilCharFound_ = function(value, ref, findChar) -{ - var tokenStartPos = ref.i; - var valueLength = value.length; - if (value[tokenStartPos] != '"') - { - ref.i = value.indexOf(findChar, tokenStartPos); - if (ref.i == -1) ref.i = valueLength; - return value.substr(tokenStartPos, ref.i - tokenStartPos); - } - - while (++ref.i < valueLength) - { - if (value[ref.i] == '"') - { - if (ref.i + 1 >= valueLength) - { - return value.substr(tokenStartPos, ++ref.i - tokenStartPos); - } - if (value[ref.i + 1] == '"') - { - ref.i++; - } - else if (value[ref.i + 1] == findChar) - { - return value.substr(tokenStartPos, ++ref.i - tokenStartPos); - } - } - } - - throw "Could not find ending quote"; -} - -/** - * - * @param value {string} - * @param i {ref int} - */ -JSV.eatMapKey_ = function(value, ref) -{ - var tokenStartPos = ref.i; - while (value[++ref.i] != ':' && ref.i < value.length) { } - return value.substr(tokenStartPos, ref.i - tokenStartPos); -} - -/** - * - * @param value {string} - * @param ref {ref int} - */ -JSV.eatMapValue_ = function(value, ref) -{ - var tokenStartPos = ref.i; - var valueLength = value.length; - if (ref.i == valueLength) return null; - - var valueChar = value[ref.i]; - - //If we are at the end, return. - if (valueChar == ',' || valueChar == '}') - { - return null; - } - - //Is List, i.e. [...] - var withinQuotes = false; - if (valueChar == '[') - { - var endsToEat = 1; - while (++ref.i < valueLength && endsToEat > 0) - { - valueChar = value[ref.i]; - if (valueChar == '"') - withinQuotes = !withinQuotes; - if (withinQuotes) - continue; - if (valueChar == '[') - endsToEat++; - if (valueChar == ']') - endsToEat--; - } - return value.substr(tokenStartPos, ref.i - tokenStartPos); - } - - //Is Type/Map, i.e. {...} - if (valueChar == '{') - { - var endsToEat = 1; - while (++ref.i < valueLength && endsToEat > 0) - { - valueChar = value[ref.i]; - - if (valueChar == '"') - withinQuotes = !withinQuotes; - if (withinQuotes) - continue; - if (valueChar == '{') - endsToEat++; - if (valueChar == '}') - endsToEat--; - } - return value.substr(tokenStartPos, ref.i - tokenStartPos); - } - - //Is Within Quotes, i.e. "..." - if (valueChar == '"') - { - while (++ref.i < valueLength) - { - valueChar = value[ref.i]; - if (valueChar != '"') continue; - var isLiteralQuote = ref.i + 1 < valueLength && value[ref.i + 1] == '"'; - ref.i++; //skip quote - if (!isLiteralQuote) - break; - } - return value.substr(tokenStartPos, ref.i - tokenStartPos); - } - - //Is Value - while (++ref.i < valueLength) - { - valueChar = value[ref.i]; - if (valueChar == ',' || valueChar == '}') - break; - } - - return value.substr(tokenStartPos, ref.i - tokenStartPos); -} - -JSV.isEmpty_ = function(a) -{ - return (a === null || a === undefined || a === ""); -} -JSV.isFunction_ = function(a) -{ - return (typeof (a) === 'function') ? a.constructor.toString().match(/Function/) !== null : false; -}; -JSV.isString_ = function(a) -{ - if (a === null || a === undefined) return false; - return (typeof (a) === 'string') ? true : (typeof (a) === 'object') ? a.constructor.toString().match(/string/i) !== null : false; -}; -JSV.isDate_ = function(a) -{ - if (JSV.isEmpty_(a)) return false; - return (typeof (a) === 'date') ? true : (typeof (a) === 'object') ? a.constructor.toString().match(/date/i) !== null : false; -}; - -JSV.isArray_ = function(a) -{ - if (a === null || a === undefined || a === "") return false; - return (typeof (a) === 'object') ? a.constructor.toString().match(/array/i) !== null || a.length !== undefined : false; -}; -JSV.toXsdDateTime = function(date) -{ - function pad(n) { - var s = n.toString(); - return s.length < 2 ? '0'+s : s; - }; - var yyyy = date.getUTCFullYear(); - var MM = pad(date.getUTCMonth()+1); - var dd = pad(date.getUTCDate()); - var hh = pad(date.getUTCHours()); - var mm = pad(date.getUTCMinutes()); - var ss = pad(date.getUTCSeconds()); - var ms = pad(date.getUTCMilliseconds()); - - return yyyy +'-' + MM + '-' + dd + 'T' + hh + ':' + mm + ':' + ss + '.' + ms + 'Z'; -} -JSV.serialize = JSV.stringify = function(obj) -{ - if (obj === null || obj === undefined) return null; - - var typeOf = typeof(obj); - if (obj === 'function') return null; - - if (typeOf === 'object') - { - var ctorStr = obj.constructor.toString().toLowerCase(); - if (ctorStr.indexOf('string') != -1) - return JSV.escapeString(obj); - if (ctorStr.indexOf('boolean') != -1) - return obj ? "True" : "False"; - if (ctorStr.indexOf('number') != -1) - return obj; - if (ctorStr.indexOf('date') != -1) - return JSV.escapeString(JSV.toXsdDateTime(obj)); - if (ctorStr.indexOf('array') != -1) - return JSV.serializeArray(obj); - - return JSV.serializeObject(obj); - } - else - { - switch(typeOf) - { - case 'string': - return JSV.escapeString(obj); - break; - case 'boolean': - return obj ? "True" : "False"; - break; - case 'date': - return JSV.escapeString(JSV.toXsdDateTime(obj)); - break; - case 'array': - return JSV.serializeArray(obj); - break; - case 'number': - default: - return obj; - } - } -}; -JSV.serializeObject = function(obj) -{ - var value, sb = new StringBuffer(); - for (var key in obj) - { - value = obj[key]; - if (!obj.hasOwnProperty(key) || JSV.isEmpty_(value) || JSV.isFunction_(value)) continue; - - if (sb.getLength() > 0) - sb.append(','); - - sb.append(JSV.escapeString(key)); - sb.append(':'); - sb.append(JSV.serialize(value)); - } - return '{' + sb.toString() + '}'; -}; -JSV.serializeArray = function(array) -{ - var value, sb = new StringBuffer(); - for (var i=0, len=array.length; i 0) - sb.append(','); - - sb.append(JSV.serialize(value)); - } - return '[' + sb.toString() + ']'; -}; -JSV.escapeString = function(str) -{ - if (str === undefined || str === null) return null; - if (str === '') return '""'; - - if (str.indexOf('"')) - { - str = str.replace(/"/g,'""'); - } - if (JSV.containsAny_(str, JSV.ESCAPE_CHARS)) - { - return '"' + str + '"'; - } - return str; -}; -JSV.containsAny_ = function(str, tests) -{ - if (!JSV.isString_(str)) return; - for (var i = 0, len = tests.length; i < len; i++) - { - if (str.indexOf(tests[i]) != -1) return true; - } - return false; -}; - -/* Closure Library StringBuffer for efficient string concatenation */ -var hasScriptEngine = 'ScriptEngine' in window; -var HAS_JSCRIPT = hasScriptEngine && window['ScriptEngine']() == 'JScript'; - -StringBuffer = function(opt_a1, var_args) { - this.buffer_ = HAS_JSCRIPT ? [] : ''; - - if (opt_a1 != null) { - this.append.apply(this, arguments); - } -}; -StringBuffer.prototype.set = function(s) { - this.clear(); - this.append(s); -}; -if (HAS_JSCRIPT) { - StringBuffer.prototype.bufferLength_ = 0; - StringBuffer.prototype.append = function(a1, opt_a2, var_args) { - // IE version. - if (opt_a2 == null) { // second argument is undefined (null == undefined) - // Array assignment is 2x faster than Array push. Also, use a1 - // directly to avoid arguments instantiation, another 2x improvement. - this.buffer_[this.bufferLength_++] = a1; - } else { - this.buffer_.push.apply(/** @type {Array} */ (this.buffer_), arguments); - this.bufferLength_ = this.buffer_.length; - } - return this; - }; -} else { - StringBuffer.prototype.append = function(a1, opt_a2, var_args) { - // W3 version. - this.buffer_ += a1; - if (opt_a2 != null) { // second argument is undefined (null == undefined) - for (var i = 1; i < arguments.length; i++) { - this.buffer_ += arguments[i]; - } - } - return this; - }; -} -StringBuffer.prototype.clear = function() { - if (HAS_JSCRIPT) { - this.buffer_.length = 0; // Reuse the array to avoid creating new object. - this.bufferLength_ = 0; - } else { - this.buffer_ = ''; - } -}; -StringBuffer.prototype.getLength = function() { - return this.toString().length; -}; -StringBuffer.prototype.toString = function() { - if (HAS_JSCRIPT) { - var str = this.buffer_.join(''); - this.clear(); - if (str) { - this.append(str); - } - return str; - } else { - return /** @type {string} */ (this.buffer_); - } -}; - - -/** - * Considering pulling this out - * @param baseUri - * @param type - */ -function JsvServiceClient(baseUri) -{ - this.baseSyncReplyUri = JsvServiceClient.combine_(baseUri, "jsv/reply"); - this.baseAsyncOneWayUri = JsvServiceClient.combine_(baseUri, "jsv/oneway"); -} -JsvServiceClient.prototype.send = function(webMethod, request, onSuccess, onError, ajaxOptions) { - var startCallTime = new Date(); - var requestUrl = JsvServiceClient.combine_(this.baseSyncReplyUri, webMethod); - var id = JsvServiceClient.id++; - - var options = { - type: "GET", - url: requestUrl, - data: request, - dataType: "text", - success: function(responseText) - { - var endCallTime = new Date(); - var callDuration = endCallTime.getTime() - startCallTime.getTime(); - - var response = JSV.parse(responseText); - if (!response) - { - if (onSuccess) onSuccess(null); - return; - } - - var status = JsvServiceClient.parseResponseStatus_(response.ResponseStatus); - if (status.isSuccess) - { - if (onSuccess) onSuccess(response); - JsvServiceClient.onSuccess({ id: id, webMethod: webMethod, request: request, - response: response, durationMs: callDuration - }); - } - else - { - if (onError) onError(status); - JsvServiceClient.onError({ id: id, webMethod: webMethod, request: request, - error: status, durationMs: callDuration - }); - } - }, - error: function(xhr, desc, exObj) - { - var endCallTime = new Date(); - var callDuration = endCallTime.getTime() - startCallTime.getTime(); - - try - { - if (onError) onError(xhr.responseText); - } - catch (e) {} - JsvServiceClient.onError({ id: id, webMethod: webMethod, request: request, - error: xhr.responseText, durationMs: callDuration - }); - } - }; - - for (var k in ajaxOptions) options[k] = ajaxOptions[k]; - - var ajax = $.ajax(options); -}; - -JsvServiceClient.combine_ = function() { - var paths = ""; - for (var i = 0, len = arguments.length; i < len; i++) { - if (paths.length > 0) - paths += "/"; - paths += arguments[i].replace(/[/]+$/g, ""); - } - return paths; -}; - -//Sends a HTTP 'GET' request on the QueryString -JsvServiceClient.prototype.getFromService = function(webMethod, request, onSuccess, onError) { - this.send(webMethod, request, onSuccess, onError); -}; - -//Sends a HTTP 'POST' request as key value pair formData -JsvServiceClient.prototype.postFormDataToService = function(webMethod, request, onSuccess, onError) { - this.send(webMethod, request, onSuccess, onError, { type: "POST" }); -}; - -//Sends a HTTP 'POST' request as JSV @requires jQuery -JsvServiceClient.prototype.postToService = function(webMethod, request, onSuccess, onError) { - var jsvRequest = JSV.serialize(request); - this.send(webMethod, jsvRequest, onSuccess, onError, { type: "POST", processData: false, contentType: "application/jsv; charset=utf-8" }); -}; - -JsvServiceClient.id = 0; -JsvServiceClient.onError = function() { }; -JsvServiceClient.onSuccess = function() { }; - -JsvServiceClient.parseResponseStatus_ = function(status) -{ - if (!status) return {isSuccess:true}; - - var result = - { - isSuccess: status.ErrorCode === undefined || status.ErrorCode === null, - errorCode: status.ErrorCode, - message: status.Message, - errorMessage: status.ErrorMessage, - stackTrace: status.StackTrace, - fieldErrors: [], - fieldErrorMap: {} - }; - - if (status.FieldErrors) - { - for (var i=0, len = status.FieldErrors.length; i
      "); - for (var k in obj) { - cols.push(k); - sb.push(""); - } - sb.push(""); - } - sb.push(""); - for (var j = 0, colsLen = cols.length; j < colsLen; j++) { - var k = cols[j]; - var data = tableFormatFns[k] ? tableFormatFns[k](obj[k]) : Dto.formatValue(obj[k]); - - sb.push(""); - } - sb.push(""); - } - sb.push("
      " + k + "
      " + data + "
      "); - return sb.join(''); -} - -//Object Utils -var O = {}; -O.keys = function(obj) { - var keys = []; - for (var key in obj) keys.push(key); - return keys; -}; - -//Path Utils -var Path = {}; -Path.combine = function() { - var paths = ""; - for (var i = 0, len = arguments.length; i < len; i++) { - - if (paths.length > 0) - paths += "/"; - - paths += S.rtrim(arguments[i], '/'); - } - return paths; -}; -Path.getFirstArg = function(path) -{ - if (!path) return null; - return path.split('/')[0]; -}; -Path.getFirstValue = function(path) -{ - if (!path || path.indexOf('/') == -1) return null; - return path.substr(path.indexOf('/') + 1); -}; -Path.getArgs = function(path) -{ - if (!path) return null; - return path.split('/'); -}; - -var Urn = {}; -Urn.toId = function(urn) { - return urn.replace(/:/g, '_'); -}; -Urn.getIdValue = function(urn) { - return urn.split(':')[2]; -}; -Urn.fromId = function(urn) { - return urn.replace(/_/g, ':'); -}; - - -var Dto = {}; -Dto.toArray = function(array) { - return is.Array(array) - ? S.toString(array) - : "[" + S.toString(array) + "]"; -}; -Dto.toUtcDate = function(date) { - return date.getUTCFullYear() - + '-' + S.lpad(date.getUTCMonth() + 1, 2) - + '-' + S.lpad(date.getUTCDate(), 2) - + 'T' + S.lpad(date.getUTCHours(), 2) - + ':' + S.lpad(date.getUTCMinutes(), 2) - + ':' + S.lpad(date.getUTCSeconds(), 2) - + 'Z'; -}; -Dto.isJsonDate = function(str) -{ - if (!is.String(str)) return false; - return S.startsWith(str, Dto.WcfDatePrefix); -}; -Dto.WcfDatePrefix = "\/Date("; -Dto.toJsonDate = function(date) { - date = Dto.parseJsonDate(date); - return Dto.WcfDatePrefix + date.getTime() + "+0000)\/"; -}; -Dto.parseJsonDate = function(date) { - return is.Date(date) - ? date - : (S.startsWith(date, Dto.WcfDatePrefix) - ? new Date(parseInt(date.substring(Dto.WcfDatePrefix.length, date.length - 2))) - : new Date(date)); -}; -Dto.formatDate = function(date) { - //IE needs '/' seperators - date = Dto.parseJsonDate(date); - return date.getUTCFullYear() - + '/' + S.lpad(date.getUTCMonth() + 1, 2) - + '/' + S.lpad(date.getUTCDate(), 2); -}; -Dto.formatValue = function(value) -{ - if (Dto.isJsonDate(value)) return Dto.formatDate(value); - if (is.Empty(value)) return ""; - return S.startsWith(value, "{") - ? _.jsonreport(value) - : _.jsonreport.val(value); -}; - - -if (!_) var _ = {}; -_.jsonreport = (function () -{ - var root = this, doc = document, - $ = function (id) { return doc.getElementById(id); }, - $$ = function (sel) { return doc.getElementsByTagName(sel); }, - $each = function (fn) { for (var i = 0, len = this.length; i < len; i++) fn(i, this[i], this); }, - isIE = /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent); - - $.each = function (arr, fn) { $each.call(arr, fn); }; - - var splitCase = function (t) { return typeof t != 'string' ? t : t.replace(/([A-Z]|[0-9]+)/g, ' $1').replace(/_/g, ' '); }, - uniqueKeys = function (m) { var h = {}; for (var i = 0, len = m.length; i < len; i++) for (var k in m[i]) if (show(k)) h[k] = k; return h; }, - keys = function (o) { var a = []; for (var k in o) if (show(k)) a.push(k); return a; } - var tbls = []; - - function val(m) - { - if (m == null) return ''; - if (typeof m == 'number') return num(m); - if (typeof m == 'string') return str(m); - if (typeof m == 'boolean') return m ? 'true' : 'false'; - return m.length ? arr(m) : obj(m); - } - function num(m) { return m; } - function str(m) - { - return m.substr(0, 6) == '/Date(' ? dfmt(date(m)) : m; - } - function date(s) { return new Date(parseFloat(/Date\(([^)]+)\)/.exec(s)[1])); } - function pad(d) { return d < 10 ? '0' + d : d; } - function dfmt(d) { return d.getFullYear() + '/' + pad(d.getMonth() + 1) + '/' + pad(d.getDate()); } - function show(k) { return typeof k != 'string' || k.substr(0, 2) != '__'; } - function obj(m) - { - var sb = '
      '; - for (var k in m) if (show(k)) sb += '
      ' + splitCase(k) + '
      ' + val(m[k]) + '
      '; - sb += '
      '; - return sb; - } - function arr(m) - { - if (typeof m[0] == 'string' || typeof m[0] == 'number') return m.join(', '); - var id = tbls.length, h = uniqueKeys(m); - var sb = ''; - tbls.push(m); - var i = 0; - for (var k in h) sb += ''; - sb += '' + makeRows(h, m) + '
      ' + splitCase(k) + '
      '; - return sb; - } - - function makeRows(h, m) - { - var sb = ''; - for (var r = 0, len = m.length; r < len; r++) - { - sb += ''; - var row = m[r]; - for (var k in h) sb += '' + val(row[k]) + ''; - sb += ''; - } - return sb; - } - - function setTableBody(tbody, html) - { - if (!isIE) { tbody.innerHTML = html; return; } - var temp = tbody.ownerDocument.createElement('div'); - temp.innerHTML = '' + html + '
      '; - tbody.parentNode.replaceChild(temp.firstChild.firstChild, tbody); - } - - function clearSel() - { - if (doc.selection && doc.selection.empty) doc.selection.empty(); - else if (root.getSelection) - { - var sel = root.getSelection(); - if (sel && sel.removeAllRanges) sel.removeAllRanges(); - } - } - - function cmp(v1, v2) - { - var f1, f2, f1 = parseFloat(v1), f2 = parseFloat(v2); - if (!isNaN(f1) && !isNaN(f2)) v1 = f1, v2 = f2; - if (typeof v1 == 'string' && v1.substr(0, 6) == '/Date(') v1 = date(v1), v2 = date(v2); - if (v1 == v2) return 0; - return v1 > v2 ? 1 : -1; - } - - function enc(html) - { - if (typeof html != 'string') return html; - return html.replace(//g, '>').replace(/"/g, '"'); - } - - function addEvent(obj, type, fn) - { - if (obj.attachEvent) - { - obj['e' + type + fn] = fn; - obj[type + fn] = function () { obj['e' + type + fn](root.event); } - obj.attachEvent('on' + type, obj[type + fn]); - } else - obj.addEventListener(type, fn, false); - } - - addEvent(doc, 'click', function (e) - { - var e = e || root.event, el = e.target || e.srcElement, cls = el.className; - if (el.tagName == 'B') el = el.parentNode; - if (el.tagName != 'TH') return; - el.className = cls == 'asc' ? 'desc' : (cls == 'desc' ? null : 'asc'); - $.each($$('TH'), function (i, th) { if (th == el) return; th.className = null; }); - clearSel(); - var ids = el.id.split('-'), tId = ids[1], cId = ids[2]; - var tbl = tbls[tId].slice(0), h = uniqueKeys(tbl), col = keys(h)[cId], tbody = el.parentNode.parentNode.nextSibling; - if (!el.className) { setTableBody(tbody, makeRows(h, tbls[tId])); return; } - var d = el.className == 'asc' ? 1 : -1; - tbl.sort(function (a, b) { return cmp(a[col], b[col]) * d; }); - setTableBody(tbody, makeRows(h, tbl)); - }); - - var f = function (json) - { - var model = typeof json == 'string' ? JSON.parse(json) : json; - return val(model); - }; - f.val = val; - return f; -})(); - - -goog.exportSymbol("JsonServiceClient", JsonServiceClient); -goog.exportSymbol("is", is); -goog.exportSymbol("S", S); -goog.exportSymbol("A", A); -goog.exportSymbol("O", O); -goog.exportSymbol("Path", Path); -goog.exportSymbol("Urn", Urn); -goog.exportSymbol("Dto", Dto); -goog.exportSymbol("jsonreport", _.jsonreport); diff --git a/lib/js/JsonServiceClient.js b/lib/js/JsonServiceClient.js deleted file mode 100644 index 1d634361b7f..00000000000 --- a/lib/js/JsonServiceClient.js +++ /dev/null @@ -1,396 +0,0 @@ -/** @constructor */ - -function JsonServiceClient(baseUri) { - this.baseSyncReplyUri = Path.combine(baseUri, "json/reply"); - this.baseAsyncOneWayUri = Path.combine(baseUri, "json/oneway"); -} -JsonServiceClient.prototype.send = function(webMethod, request, onSuccess, onError, ajaxOptions) { - var startCallTime = new Date(); - var requestUrl = Path.combine(this.baseSyncReplyUri, webMethod); - var id = JsonServiceClient.id++; - - var options = { - type: "GET", - url: requestUrl, - data: request, - dataType: "json", - success: function(response) { - var endCallTime = new Date(); - var callDuration = endCallTime.getTime() - startCallTime.getTime(); - if (!response) { - if (onSuccess) onSuccess(null); - return; - } - - var status = JsonServiceClient.parseResponseStatus_(response.ResponseStatus); - if (status.isSuccess) { - if (onSuccess) onSuccess(response); - JsonServiceClient.onSuccess({ id: id, webMethod: webMethod, request: request, - response: response, durationMs: callDuration - }); - } - else { - if (onError) onError(status); - JsonServiceClient.onError({ id: id, webMethod: webMethod, request: request, - error: status, durationMs: callDuration - }); - } - }, - error: function(xhr, desc, exceptionobj) { - var endCallTime = new Date(); - var callDuration = endCallTime.getTime() - startCallTime.getTime(); - - try { - var response = xhr.responseText; - try { response = JsonServiceClient.parseJSON(response); } catch (e) { } - if (onError) onError(response); - } - catch (e) { } - JsonServiceClient.onError({ id: id, webMethod: webMethod, request: request, - error: xhr.responseText, durationMs: callDuration - }); - } - }; - - for (var k in ajaxOptions) options[k] = ajaxOptions[k]; - - var ajax = JsonServiceClient.ajax(options); -}; - -//Sends a HTTP 'GET' request on the QueryString -JsonServiceClient.prototype.getFromService = function(webMethod, request, onSuccess, onError) { - var options = document.all ? { cache: false} : null; - this.send(webMethod, request, onSuccess, onError, options); -}; - -//Sends a HTTP 'POST' request as key value pair formData -JsonServiceClient.prototype.postFormDataToService = function(webMethod, request, onSuccess, onError) { - this.send(webMethod, request, onSuccess, onError, { type: "POST" }); -}; - -//Sends a HTTP 'POST' request as JSON @requires jQuery -JsonServiceClient.prototype.postToService = function(webMethod, request, onSuccess, onError) { - var jsonRequest = JsonServiceClient.toJSON(request); - this.send(webMethod, jsonRequest, onSuccess, onError, { type: "POST", processData: false, contentType: "application/json; charset=utf-8" }); -}; - -//Sends a HTTP 'PUT' request as JSON @requires jQuery -JsonServiceClient.prototype.putToService = function(webMethod, request, onSuccess, onError) { - var jsonRequest = JsonServiceClient.toJSON(request); - this.send(webMethod, jsonRequest, onSuccess, onError, { type: "PUT", processData: false, contentType: "application/json; charset=utf-8" }); -}; - -//Sends a HTTP 'DELETE' request as JSON @requires jQuery -JsonServiceClient.prototype.deleteFromService = function(webMethod, request, onSuccess, onError) { - var jsonRequest = JsonServiceClient.toJSON(request); - this.send(webMethod, jsonRequest, onSuccess, onError, { type: "DELETE", processData: false, contentType: "application/json; charset=utf-8" }); -}; - -JsonServiceClient.id = 0; -JsonServiceClient.onError = function() { }; -JsonServiceClient.onSuccess = function() { }; -JsonServiceClient.parseResponseStatus_ = function(status) { - if (!status) return { isSuccess: true }; - - var result = - { - isSuccess: status.ErrorCode === undefined || status.ErrorCode === null, - errorCode: status.ErrorCode, - message: status.Message, - errorMessage: status.ErrorMessage, - stackTrace: status.StackTrace, - fieldErrors: [], - fieldErrorMap: {} - }; - - if (status.FieldErrors) { - for (var i = 0, len = status.FieldErrors.length; i < len; i++) { - var err = status.FieldErrors[i]; - var error = { errorCode: err.ErrorCode, fieldName: err.FieldName, errorMessage: err.ErrorMessage || '' }; - result.fieldErrors.push(error); - - if (error.fieldName) { - result.fieldErrorMap[error.fieldName] = error; - } - } - } - return result; -}; -JsonServiceClient.toJsonDate = function(date) { - var jsDate = is.Date(date) ? date : new Date(date); -} -//Adapter methods use jquery or google closure library if available -JsonServiceClient.parseJSON = function(json) { - if (typeof (JSON) == 'object' && JSON.parse) - return JSON.parse(json); - if ($ && $.parseJSON) - return $.parseJSON(json); - if (goog && goog.json) - return goog.json.parse(json); - throw "no json parser found"; -} -JsonServiceClient.toJSON = function(o) { - if (typeof(JSON) == 'object' && JSON.stringify) - return JSON.stringify(o); - if ($ && $.toJSON) - return $.toJSON(o); - if (goog && goog.json) - return goog.json.serialize(o); - throw "no json serializer found"; -} -JsonServiceClient.ajax = function(ajaxOptions) { - if ($ && $.ajax) - return $.ajax(ajaxOptions); - throw "no ajax provider found"; -} - -/* Dependent snippets below from AjaxStack. TODO: replace with utils in Google Closure Library */ -var is = { - Null: function(a) { - return a === null; - }, - Undefined: function(a) { - return a === undefined; - }, - Empty: function(a) { - return (a === null || a === undefined || a === ""); - }, - Function: function(a) { - return (typeof (a) === 'function') ? a.constructor.toString().match(/Function/) !== null : false; - }, - String: function(a) { - if (a === null || a === undefined || a.type) return false; - return (typeof (a) === 'string') ? true : (typeof (a) === 'object') ? a.constructor.toString().match(/string/i) !== null : false; - }, - Array: function(a) { - if (is.Empty(a) || a.type) return false; - return (typeof (a) === 'object') ? a.constructor.toString().match(/array/i) !== null || a.length !== undefined : false; - }, - Boolean: function(a) { - if (is.Empty(a) || a.type) return false; - return (typeof (a) === 'boolean') ? true : (typeof (a) === 'object') ? a.constructor.toString().match(/boolean/i) !== null : false; - }, - Date: function(a) { - if (is.Empty(a) || a.type) return false; - return (typeof (a) === 'date') ? true : (typeof (a) === 'object') ? a.constructor.toString().match(/date/i) !== null : false; - }, - Number: function(a) { - if (is.Empty(a) || a.type) return false; - return (typeof (a) === 'number') ? true : (typeof (a) === 'object') ? a.constructor.toString().match(/Number/) !== null : false; - }, - ValueType: function(a) { - if (is.Empty(a) || a.type) return false; - return is.String(a) || is.Date(a) || is.Number(a) || is.Boolean(a); - } -}; - -//String Utils -var S = {}; -S.rtrim = function(str, chars) { - chars = chars || "\\s"; - return str.replace(new RegExp("[" + chars + "]+$", "g"), ""); -}; -S.toString = function() { - if (arguments.length == 0 || !arguments[0]) return null; - - var s = ""; - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i]; - - if (s) s += "/"; - - if (is.String(arg)) s += arg; - else if (is.ValueType(arg)) s += arg.toString(); - else if (is.Array(arg)) s += '[' + A.join(arg, ",") + ']'; - else { - var o = ""; - for (var name in arg) { - if (o) o += ","; - o += name + ":" + S.safeString(arg[name]); - } - s += '{' + o + '}'; - } - } - return s; -}; -S.safeString = function(str) { - if (!str) return str; - if (S.containsAny(str, ['[', ']', '{', '}', ','])) { - return '"' + str + '"'; - } - return str; -}; -S.containsAny = function(str, tests) { - if (!is.String(str)) return; - for (var i = 0, len = tests.length; i < len; i++) { - if (str.indexOf(tests[i]) != -1) return true; - } - return false; -}; -S.startsWith = function(text, startsWith) { - if (!text || !startsWith) return false; - return text.lastIndexOf(startsWith, 0) == 0; -}; -S.pad = function(text, padLen, padChar, rpad) { - var padChar = padChar || (rpad ? " " : "0"); - text = text.toString(); - while (text.length < padLen) { - text = rpad - ? text + padChar - : padChar + text; - } - return text; -} -S.padLeft = function(text, padLen, padChar) { - return S.pad(text, padLen, padChar, false); -} -S.padRight = function(text, padLen, padChar) { - return S.pad(text, padLen, padChar, true); -} -S.lpad = S.padLeft; -S.rpad = S.padRight; - - -//Array Utils -var A = {}; -A.each = function(array, fn) { - if (!array) return; - for (var i = 0, len = array.length; i < len; i++) - fn(array[i]); -}; -A.convertAll = function(array, convertFn) { - var to = []; - for (var i = 0, len = array.length; i < len; i++) - to[i] = convertFn(array[i]); - return to; -}; -A.join = function(array, on) { - var s = ""; - on = on || ","; - for (var i = 0, len = array.length; i < len; i++) { - if (s) s += on; - s += array[i]; - } - return s; -}; -A.toTable = function(array, tableFormatFns) { - tableFormatFns = tableFormatFns || {}; - var cols = [], sb = []; - for (var i = 0, len = array.length; i < len; i++) { - var obj = array[i]; - if (!obj) continue; - if (i == 0) { - sb.push(""); - for (var k in obj) { - cols.push(k); - sb.push(""); - } - sb.push(""); - } - sb.push(""); - for (var j = 0, colsLen = cols.length; j < colsLen; j++) { - var k = cols[j]; - var data = tableFormatFns[k] ? tableFormatFns[k](obj[k]) : Dto.formatValue(obj[k]); - - sb.push(""); - } - sb.push(""); - } - sb.push("
      " + k + "
      " + data + "
      "); - return sb.join(''); -} - -//Object Utils -var O = {}; -O.keys = function(obj) { - var keys = []; - for (var key in obj) keys.push(key); - return keys; -}; - -//Path Utils -var Path = {}; -Path.combine = function() { - var paths = ""; - for (var i = 0, len = arguments.length; i < len; i++) { - - if (paths.length > 0) - paths += "/"; - - paths += S.rtrim(arguments[i], '/'); - } - return paths; -}; -Path.getFirstArg = function(path) -{ - if (!path) return null; - return path.split('/')[0]; -}; -Path.getFirstValue = function(path) -{ - if (!path || path.indexOf('/') == -1) return null; - return path.substr(path.indexOf('/') + 1); -}; -Path.getArgs = function(path) -{ - if (!path) return null; - return path.split('/'); -}; - -var Urn = {}; -Urn.toId = function(urn) { - return urn.replace(/:/g, '_'); -}; -Urn.getIdValue = function(urn) { - return urn.split(':')[2]; -}; -Urn.fromId = function(urn) { - return urn.replace(/_/g, ':'); -}; - - -var Dto = {}; -Dto.toArray = function(array) { - return is.Array(array) - ? S.toString(array) - : "[" + S.toString(array) + "]"; -}; -Dto.toUtcDate = function(date) { - return date.getUTCFullYear() - + '-' + S.lpad(date.getUTCMonth() + 1, 2) - + '-' + S.lpad(date.getUTCDate(), 2) - + 'T' + S.lpad(date.getUTCHours(), 2) - + ':' + S.lpad(date.getUTCMinutes(), 2) - + ':' + S.lpad(date.getUTCSeconds(), 2) - + 'Z'; -}; -Dto.isJsonDate = function(str) -{ - if (!is.String(str)) return false; - return S.startsWith(str, Dto.WcfDatePrefix); -}; -Dto.WcfDatePrefix = "\/Date("; -Dto.toJsonDate = function(date) { - date = Dto.parseJsonDate(date); - return Dto.WcfDatePrefix + date.getTime() + "+0000)\/"; -}; -Dto.parseJsonDate = function(date) { - return is.Date(date) - ? date - : (S.startsWith(date, Dto.WcfDatePrefix) - ? new Date(parseInt(date.substring(Dto.WcfDatePrefix.length, date.length - 2))) - : new Date(date)); -}; -Dto.formatDate = function(date) { - //IE needs '/' seperators - date = Dto.parseJsonDate(date); - return date.getUTCFullYear() - + '/' + S.lpad(date.getUTCMonth() + 1, 2) - + '/' + S.lpad(date.getUTCDate(), 2); -}; -Dto.formatValue = function(value) -{ - if (Dto.isJsonDate(value)) return Dto.formatDate(value); - if (is.Empty(value)) return ""; - return value; -}; diff --git a/lib/js/test-jsv.html b/lib/js/test-jsv.html deleted file mode 100644 index b72b2734251..00000000000 --- a/lib/js/test-jsv.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - -

      Serialize JSON to JSV

      - - - -

      Output:

      - -
      - -
      - -

      Error:

      -
      - - - - - - \ No newline at end of file diff --git a/lib/net40/System.Web.Razor.Unofficial.dll b/lib/net40/System.Web.Razor.Unofficial.dll deleted file mode 100644 index 2a523e9e4a2..00000000000 Binary files a/lib/net40/System.Web.Razor.Unofficial.dll and /dev/null differ diff --git a/lib/net45/ServiceStack.OrmLite.SqlServer.dll b/lib/net45/ServiceStack.OrmLite.SqlServer.dll deleted file mode 100644 index fbcd8ef5f9f..00000000000 Binary files a/lib/net45/ServiceStack.OrmLite.SqlServer.dll and /dev/null differ diff --git a/lib/net45/ServiceStack.OrmLite.dll b/lib/net45/ServiceStack.OrmLite.dll deleted file mode 100644 index 880f9753e61..00000000000 Binary files a/lib/net45/ServiceStack.OrmLite.dll and /dev/null differ diff --git a/lib/net45/signed/ServiceStack.OrmLite.SqlServer.dll b/lib/net45/signed/ServiceStack.OrmLite.SqlServer.dll deleted file mode 100644 index a3202e4faac..00000000000 Binary files a/lib/net45/signed/ServiceStack.OrmLite.SqlServer.dll and /dev/null differ diff --git a/lib/net45/signed/ServiceStack.OrmLite.dll b/lib/net45/signed/ServiceStack.OrmLite.dll deleted file mode 100644 index ec01a4ba292..00000000000 Binary files a/lib/net45/signed/ServiceStack.OrmLite.dll and /dev/null differ diff --git a/lib/pcl/ServiceStack.Client.Pcl.dll.mdb b/lib/pcl/ServiceStack.Client.Pcl.dll.mdb deleted file mode 100644 index c1cf30b36b1..00000000000 Binary files a/lib/pcl/ServiceStack.Client.Pcl.dll.mdb and /dev/null differ diff --git a/lib/pcl/ServiceStack.Client.dll b/lib/pcl/ServiceStack.Client.dll deleted file mode 100644 index 42e42ecfc7d..00000000000 Binary files a/lib/pcl/ServiceStack.Client.dll and /dev/null differ diff --git a/lib/pcl/ServiceStack.Client.dll.mdb b/lib/pcl/ServiceStack.Client.dll.mdb deleted file mode 100644 index ee1645561af..00000000000 Binary files a/lib/pcl/ServiceStack.Client.dll.mdb and /dev/null differ diff --git a/lib/pcl/ServiceStack.Interfaces.dll b/lib/pcl/ServiceStack.Interfaces.dll deleted file mode 100644 index 4c3be0c2551..00000000000 Binary files a/lib/pcl/ServiceStack.Interfaces.dll and /dev/null differ diff --git a/lib/pcl/ServiceStack.Interfaces.dll.mdb b/lib/pcl/ServiceStack.Interfaces.dll.mdb deleted file mode 100644 index b835f607d72..00000000000 Binary files a/lib/pcl/ServiceStack.Interfaces.dll.mdb and /dev/null differ diff --git a/lib/pcl/ServiceStack.Pcl.Android.dll b/lib/pcl/ServiceStack.Pcl.Android.dll deleted file mode 100644 index 629c5cf407d..00000000000 Binary files a/lib/pcl/ServiceStack.Pcl.Android.dll and /dev/null differ diff --git a/lib/pcl/ServiceStack.Pcl.Android.dll.mdb b/lib/pcl/ServiceStack.Pcl.Android.dll.mdb deleted file mode 100644 index 13f6c377a0d..00000000000 Binary files a/lib/pcl/ServiceStack.Pcl.Android.dll.mdb and /dev/null differ diff --git a/lib/pcl/ServiceStack.Pcl.Net45.dll b/lib/pcl/ServiceStack.Pcl.Net45.dll deleted file mode 100644 index 1846502b11a..00000000000 Binary files a/lib/pcl/ServiceStack.Pcl.Net45.dll and /dev/null differ diff --git a/lib/pcl/ServiceStack.Pcl.WinStore.dll b/lib/pcl/ServiceStack.Pcl.WinStore.dll deleted file mode 100644 index 63b3beb902c..00000000000 Binary files a/lib/pcl/ServiceStack.Pcl.WinStore.dll and /dev/null differ diff --git a/lib/pcl/ServiceStack.Pcl.WinStore.pri b/lib/pcl/ServiceStack.Pcl.WinStore.pri deleted file mode 100644 index a3071fe88d3..00000000000 Binary files a/lib/pcl/ServiceStack.Pcl.WinStore.pri and /dev/null differ diff --git a/lib/pcl/ServiceStack.Pcl.iOS.dll b/lib/pcl/ServiceStack.Pcl.iOS.dll deleted file mode 100644 index e149d03d01c..00000000000 Binary files a/lib/pcl/ServiceStack.Pcl.iOS.dll and /dev/null differ diff --git a/lib/pcl/ServiceStack.Text.dll b/lib/pcl/ServiceStack.Text.dll deleted file mode 100644 index 74bef1169bf..00000000000 Binary files a/lib/pcl/ServiceStack.Text.dll and /dev/null differ diff --git a/lib/pcl/ServiceStack.Text.dll.mdb b/lib/pcl/ServiceStack.Text.dll.mdb deleted file mode 100644 index 362ee32248d..00000000000 Binary files a/lib/pcl/ServiceStack.Text.dll.mdb and /dev/null differ diff --git a/lib/signed/ServiceStack.Client.dll b/lib/signed/ServiceStack.Client.dll deleted file mode 100644 index 01adcc2336a..00000000000 Binary files a/lib/signed/ServiceStack.Client.dll and /dev/null differ diff --git a/lib/signed/ServiceStack.Common.dll b/lib/signed/ServiceStack.Common.dll deleted file mode 100644 index 4dfde049d64..00000000000 Binary files a/lib/signed/ServiceStack.Common.dll and /dev/null differ diff --git a/lib/signed/ServiceStack.Common.xml b/lib/signed/ServiceStack.Common.xml deleted file mode 100644 index 109d91cfff2..00000000000 --- a/lib/signed/ServiceStack.Common.xml +++ /dev/null @@ -1,206 +0,0 @@ - - - - ServiceStack.Common - - - - - Useful .NET Encryption Utils from: - http://andrewlocatelliwoodcock.com/2011/08/01/implementing-rsa-asymmetric-public-private-key-encryption-in-c-encrypting-under-the-public-key/ - - - - - Encrypt an arbitrary string of data under the supplied public key - - The public key to encrypt under - The data to encrypt - The bit length or strength of the public key: 1024, 2048 or 4096 bits. This must match the - value actually used to create the publicKey - - - - - Create Public and Private Key Pair based on settings already in static class. - - RsaKeyPair - - - - Gets the textual description of the enum if it has one. e.g. - - - enum UserColors - { - [Description("Bright Red")] - BrightRed - } - UserColors.BrightRed.ToDescription(); - - - - - - - - Creates a Console Logger, that logs all messages to: System.Console - - Made public so its testable - - - - - Default logger is to Console.WriteLine - - Made public so its testable - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - - - Logs the specified message. - - - - - Logs the format. - - - - - Logs the specified message. - - - - - Useful IPAddressExtensions from: - http://blogs.msdn.com/knom/archive/2008/12/31/ip-address-calculations-with-c-subnetmasks-networks.aspx - - - - - - Gets the ipv4 addresses from all Network Interfaces that have Subnet masks. - - - - - - Gets the ipv6 addresses from all Network Interfaces. - - - - - - Func to get the Strongly-typed field - - - - - Required to cast the return ValueType to an object for caching - - - - - Func to set the Strongly-typed field - - - - - Required to cast the ValueType to an object for caching - - - - - Required to cast the ValueType to an object for caching - - - - - Func to get the Strongly-typed field - - - - - Required to cast the return ValueType to an object for caching - - - - - Func to set the Strongly-typed field - - - - - Required to cast the ValueType to an object for caching - - - - - Required to cast the ValueType to an object for caching - - - - - Common functionality when creating adapters - - - - - Executes the specified expression. - - - The action. - - - - - Executes the specified action (for void methods). - - The action. - - - - Note: InMemoryLog keeps all logs in memory, so don't use it long running exceptions - - Returns a thread-safe InMemoryLog which you can use while *TESTING* - to provide a detailed analysis of your logs. - - - - - Creates a Unified Resource Name (URN) with the following formats: - - - urn:{TypeName}:{IdFieldValue} e.g. urn:UserSession:1 - - urn:{TypeName}:{IdFieldName}:{IdFieldValue} e.g. urn:UserSession:UserId:1 - - - - - - - Provide the an option for the callee to block until all commands are executed - - - - - - - Invokes the action provided and returns true if no excpetion was thrown. - Otherwise logs the exception and returns false if an exception was thrown. - - The action. - - - - diff --git a/lib/signed/ServiceStack.Interfaces.XML b/lib/signed/ServiceStack.Interfaces.XML deleted file mode 100644 index c7b048124fb..00000000000 --- a/lib/signed/ServiceStack.Interfaces.XML +++ /dev/null @@ -1,1696 +0,0 @@ - - - - ServiceStack.Interfaces - - - - - Required when using a TypeDescriptor to make it unique - - - - - A common interface implementation that is implemented by most cache providers - - - - - Removes the specified item from the cache. - - The identifier for the item to delete. - - true if the item was successfully removed from the cache; false otherwise. - - - - - Removes the cache for all the keys provided. - - The keys. - - - - Retrieves the specified item from the cache. - - - The identifier for the item to retrieve. - - The retrieved item, or null if the key was not found. - - - - - Increments the value of the specified key by the given amount. - The operation is atomic and happens on the server. - A non existent value at key starts at 0 - - The identifier for the item to increment. - The amount by which the client wants to increase the item. - - The new value of the item or -1 if not found. - - The item must be inserted into the cache before it can be changed. The item must be inserted as a . The operation only works with values, so -1 always indicates that the item was not found. - - - - Increments the value of the specified key by the given amount. - The operation is atomic and happens on the server. - A non existent value at key starts at 0 - - The identifier for the item to increment. - The amount by which the client wants to decrease the item. - - The new value of the item or -1 if not found. - - The item must be inserted into the cache before it can be changed. The item must be inserted as a . The operation only works with values, so -1 always indicates that the item was not found. - - - - Adds a new item into the cache at the specified cache key only if the cache is empty. - - The key used to reference the item. - The object to be inserted into the cache. - - true if the item was successfully stored in the cache; false otherwise. - - The item does not expire unless it is removed due memory pressure. - - - - Sets an item into the cache at the cache key specified regardless if it already exists or not. - - - - - Replaces the item at the cachekey specified only if an items exists at the location already. - - - - - Invalidates all data on the cache. - - - - - Retrieves multiple items from the cache. - The default value of T is set for all keys that do not exist. - - The list of identifiers for the items to retrieve. - - a Dictionary holding all items indexed by their key. - - - - - Sets multiple items to the cache. - - - The values. - - - - Removes items from cache that have keys matching the specified wildcard pattern - - The wildcard, where "*" means any sequence of characters and "?" means any single character. - - - - Removes items from the cache based on the specified regular expression pattern - - Regular expression pattern to search cache keys - - - - A light interface over a cache client. - This interface was inspired by Enyim.Caching.MemcachedClient - - Only the methods that are intended to be used are required, if you require - extra functionality you can uncomment the unused methods below as they have been - implemented in DdnMemcachedClient - - - - - Removes the specified item from the cache. - - The identifier for the item to delete. - - true if the item was successfully removed from the cache; false otherwise. - - - - - Removes the cache for all the keys provided. - - The keys. - - - - Retrieves the specified item from the cache. - - The identifier for the item to retrieve. - - The retrieved item, or null if the key was not found. - - - - - Increments the value of the specified key by the given amount. The operation is atomic and happens on the server. - - The identifier for the item to increment. - The amount by which the client wants to increase the item. - - The new value of the item or -1 if not found. - - The item must be inserted into the cache before it can be changed. The item must be inserted as a . The operation only works with values, so -1 always indicates that the item was not found. - - - - Increments the value of the specified key by the given amount. The operation is atomic and happens on the server. - - The identifier for the item to increment. - The amount by which the client wants to decrease the item. - - The new value of the item or -1 if not found. - - The item must be inserted into the cache before it can be changed. The item must be inserted as a . The operation only works with values, so -1 always indicates that the item was not found. - - - - Inserts an item into the cache with a cache key to reference its location. - - The key used to reference the item. - The object to be inserted into the cache. - - true if the item was successfully stored in the cache; false otherwise. - - The item does not expire unless it is removed due memory pressure. - - - - Inserts an item into the cache with a cache key to reference its location. - - The key used to reference the item. - The object to be inserted into the cache. - The time when the item is invalidated in the cache. - true if the item was successfully stored in the cache; false otherwise. - - - - Removes all data from the cache. - - - - - Retrieves multiple items from the cache. - - The list of identifiers for the items to retrieve. - - a Dictionary holding all items indexed by their key. - - - - - A Users Session - - - - - Set a typed value at key - - - - - - - - Get a typed value at key - - - - - - - - Store any object at key - - - - - - - Retrieves a User Session - - - - - Gets the session for this request, creates one if it doesn't exist. - - - - - - - - Gets the session for this request, creates one if it doesn't exist. - Only for ASP.NET apps. Uses the HttpContext.Current singleton. - - - - - Allow delegation of dependencies to other IOC's - - - - - Resolve Property Dependency - - - - - - - Resolve Constructor Dependency - - - - - - - BelongToAttribute - Use to indicate that a join column belongs to another table. - - - - - Compute attribute. - Use to indicate that a property is a Calculated Field - - - - - Decimal length attribute. - - - - - Explicit foreign key name. If it's null, or empty, the FK name will be autogenerated as before. - - - - - IgnoreAttribute - Use to indicate that a property is not a field in the table - properties with this attribute are ignored when building sql sentences - - - - - Primary key attribute. - use to indicate that property is part of the pk - - - - - Used to annotate an Entity with its DB schema - - - - - - For providers that want a cleaner API with a little more perf - - - - - - Decorate any type or property with adhoc info - - - - - Creates a Debug Logger, that logs all messages to: System.Diagnostics.Debug - - Made public so its testable - - - - - Factory to create ILog instances - - - - - Gets the logger. - - - - - Gets the logger. - - - - - Default logger is to System.Diagnostics.Debug.WriteLine - - Made public so its testable - - - - - Logs a message in a running application - - - - - Logs a Debug message. - - The message. - - - - Logs a Debug message and exception. - - The message. - The exception. - - - - Logs a Debug format message. - - The format. - The args. - - - - Logs a Error message. - - The message. - - - - Logs a Error message and exception. - - The message. - The exception. - - - - Logs a Error format message. - - The format. - The args. - - - - Logs a Fatal message. - - The message. - - - - Logs a Fatal message and exception. - - The message. - The exception. - - - - Logs a Error format message. - - The format. - The args. - - - - Logs an Info message and exception. - - The message. - - - - Logs an Info message and exception. - - The message. - The exception. - - - - Logs an Info format message. - - The format. - The args. - - - - Logs a Warning message. - - The message. - - - - Logs a Warning message and exception. - - The message. - The exception. - - - - Logs a Warning format message. - - The format. - The args. - - - - Gets or sets a value indicating whether this instance is debug enabled. - - - true if this instance is debug enabled; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - - - Logs the specified message. - - - - - Logs the format. - - - - - Logs the specified message. - - - - - Default logger is to System.Diagnostics.Debug.Print - - Made public so its testable - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - - - Logs the specified message. - - - - - Logs the format. - - - - - Logs the specified message. - - - - - Creates a Debug Logger, that logs all messages to: System.Diagnostics.Debug - - Made public so its testable - - - - - StringBuilderLog writes to shared StringBuffer. - Made public so its testable - - - - - Logs the specified message. - - - - - Logs the format. - - - - - Logs the specified message. - - The message. - - - - Creates a test Logger, that stores all log messages in a member list - - - - - Tests logger which stores all log messages in a member list which can be examined later - - Made public so its testable - - - - - Initializes a new instance of the class. - - The type. - - - - Initializes a new instance of the class. - - The type. - - - - Logs the specified message. - - The message. - The exception. - - - - Logs the format. - - The message. - The args. - - - - Logs the specified message. - - The message. - - - - Logging API for this library. You can inject your own implementation otherwise - will use the DebugLogFactory to write to System.Diagnostics.Debug - - - - - Gets the logger. - - - - - Gets the logger. - - - - - Gets or sets the log factory. - Use this to override the factory that is used to create loggers - - - - - Publish the specified message into the durable queue @queueName - - - - - - - Publish the specified message into the transient queue @queueName - - - - - - - Synchronous blocking get. - - - - - - - - Non blocking get message - - - - - - - Blocking wait for notifications on any of the supplied channels - - - - - - - Simple definition of an MQ Host - - - - - Register DTOs and hanlders the MQ Host will process - - - - - - - Register DTOs and hanlders the MQ Host will process - - - - - - - - Get Total Current Stats for all Message Handlers - - - - - - Get the status of the service. Potential Statuses: Disposed, Stopped, Stopping, Starting, Started - - - - - - Get a Stats dump - - - - - - Start the MQ Host if not already started. - - - - - Stop the MQ Host if not already stopped. - - - - - Factory to create consumers and producers that work with this service - - - - - Get a list of all message types registered on this MQ Host - - - - - An Error Message Type that can be easily serialized - - - - - Basic implementation of IMessage[T] - - - - - - Base Exception for all ServiceStack.Messaging exceptions - - - - - Util static generic class to create unique queue names for types - - - - - - Util class to create unique queue names for runtime types - - - - - For messaging exceptions that should by-pass the messaging service's configured - retry attempts and store the message straight into the DLQ - - - - - Wrap the common redis list operations under a IList[string] interface. - - - - - Redis transaction for typed client - - - - - - interface to queueable operation using typed redis client - - - - - - Interface to redis typed pipeline - - - - - Pipeline interface shared by typed and non-typed pipelines - - - - - Interface to operations that allow queued commands to be completed - - - - - Returns a high-level typed client API - - - - - - Returns a Read/Write client (The default) using the hosts defined in ReadWriteHosts - - - - - - Returns a ReadOnly client using the hosts defined in ReadOnlyHosts. - - - - - - Returns a Read/Write ICacheClient (The default) using the hosts defined in ReadWriteHosts - - - - - - Returns a ReadOnly ICacheClient using the hosts defined in ReadOnlyHosts. - - - - - - Returns a Read/Write client (The default) using the hosts defined in ReadWriteHosts - - - - - - Returns a ReadOnly client using the hosts defined in ReadOnlyHosts. - - - - - - Returns a Read/Write ICacheClient (The default) using the hosts defined in ReadWriteHosts - - - - - - Returns a ReadOnly ICacheClient using the hosts defined in ReadOnlyHosts. - - - - - - Subscribe to channels by name - - - - - - Subscribe to channels matching the supplied patterns - - - - - - The number of active subscriptions this client has - - - - - Registered handler called after client *Subscribes* to each new channel - - - - - Registered handler called when each message is received - - - - - Registered handler called when each channel is unsubscribed - - - - - Interface to redis transaction - - - - - Base transaction interface, shared by typed and non-typed transactions - - - - - interface to operation that can queue commands - - - - - Interface to redis pipeline - - - - - Gets or sets parameter name with which allowable values will be associated. - - - - - The overall description of an API. Used by Swagger. - - - - - Gets or sets verb to which applies attribute. By default applies to all verbs. - - - - - Gets or sets parameter type: It can be only one of the following: path, query, body, or header. - - - - - Gets or sets unique name for the parameter. Each name must be unique, even if they are associated with different paramType values. - - - - Other notes on the name field: - If paramType is body, the name is used only for UI and codegeneration. - If paramType is path, the name field must correspond to the associated path segment from the path field in the api object. - If paramType is query, the name field corresponds to the query param name. - - - - - - Gets or sets the human-readable description for the parameter. - - - - - For path, query, and header paramTypes, this field must be a primitive. For body, this can be a complex or container datatype. - - - - - For path, this is always true. Otherwise, this field tells the client whether or not the field must be supplied. - - - - - For query params, this specifies that a comma-separated list of values can be passed to the API. For path and body types, this field cannot be true. - - - - - The status code of a response - - - - - The description of a response status code - - - - - Marker interfaces - - - - - Implement on Request DTOs that need access to the raw Request Stream - - - - - The raw Http Request Input Stream - - - - - Resolve a dependency from the AppHost's IOC - - - - - - - This interface can be implemented by an attribute - which adds an request filter for the specific request DTO the attribute marked. - - - - - The request filter is executed before the service. - - The http request wrapper - The http response wrapper - The request DTO - - - - A new shallow copy of this filter is used on every request. - - - - - - Order in which Request Filters are executed. - <0 Executed before global request filters - >0 Executed after global request filters - - - - - This interface can be implemented by an attribute - which adds an response filter for the specific response DTO the attribute marked. - - - - - The response filter is executed after the service - - The http request wrapper - The http response wrapper - - - - A new shallow copy of this filter is used on every request. - - - - - - Order in which Response Filters are executed. - <0 Executed before global response filters - >0 Executed after global response filters - - - - - The HTTP Response Status - - - - - The HTTP Response Status Code - - - - - The HTTP Status Description - - - - - The HTTP Response ContentType - - - - - Additional HTTP Headers - - - - - Response DTO - - - - - if not provided, get's injected by ServiceStack - - - - - Holds the request call context - - - - - A thin wrapper around ASP.NET or HttpListener's HttpRequest - - - - - A thin wrapper around each host's Request e.g: ASP.NET, HttpListener, MQ, etc - - - - - The entire string contents of Request.InputStream - - - - - - The underlying ASP.NET or HttpListener HttpRequest - - - - - The name of the service being called (e.g. Request DTO Name) - - - - - The Verb / HttpMethod or Action for this request - - - - - Optional preferences for the processing of this Request - - - - - The Request DTO, after it has been deserialized. - - - - - The request ContentType - - - - - The expected Response ContentType for this request - - - - - Whether the ResponseContentType has been explicitly overrided or whether it was just the default - - - - - Attach any data to this request that all filters and services can access. - - - - - Buffer the Request InputStream so it can be re-read - - - - - The Remote Ip as reported by Request.UserHostAddress - - - - - The Remote Ip as reported by X-Forwarded-For, X-Real-IP or Request.UserHostAddress - - - - - e.g. is https or not - - - - - Access to the multi-part/formdata files posted on this request - - - - - The value of the Referrer, null if not available - - - - - The HttpResponse - - - - - The HTTP Verb - - - - - The IP Address of the X-Forwarded-For header, null if null or empty - - - - - The Port number of the X-Forwarded-Port header, null if null or empty - - - - - The http or https scheme of the X-Forwarded-Proto header, null if null or empty - - - - - The value of the X-Real-IP header, null if null or empty - - - - - A thin wrapper around ASP.NET or HttpListener's HttpResponse - - - - - A thin wrapper around each host's Response e.g: ASP.NET, HttpListener, MQ, etc - - - - - Signal that this response has been handled and no more processing should be done. - When used in a request or response filter, no more filters or processing is done on this request. - - - - - Calls Response.End() on ASP.NET HttpResponse otherwise is an alias for Close(). - Useful when you want to prevent ASP.NET to provide it's own custom error page. - - - - - Response.Flush() and OutputStream.Flush() seem to have different behaviour in ASP.NET - - - - - The underlying ASP.NET or HttpListener HttpResponse - - - - - The Response DTO - - - - - Gets a value indicating whether this instance is closed. - - - - - Log every service request - - - - - Log a request - - The RequestContext - Request DTO - Response DTO or Exception - How long did the Request take - - - - View the most recent logs - - - - - - - Turn On/Off Session Tracking - - - - - Turn On/Off Raw Request Body Tracking - - - - - Turn On/Off Tracking of Responses - - - - - Turn On/Off Tracking of Exceptions - - - - - Limit access to /requestlogs service to role - - - - - Don't log requests of these types. - - - - - Don't log request bodys for services with sensitive information. - By default Auth and Registration requests are hidden. - - - - - Implement on services that need access to the RequestContext - - - - - Responsible for executing the operation within the specified context. - - The operation types. - - - - Returns the first matching RestPath - - - - - Executes the MQ DTO request. - - - - - Executes the MQ DTO request with the supplied requestContext - - - - - Executes the DTO request under the supplied requestContext. - - - - - Executes the DTO request with an empty RequestContext. - - - - - Allow the registration of user-defined routes for services - - - - - Maps the specified REST path to the specified request DTO. - - The type of request DTO to map - the path to. - The path to map the request DTO to. - See RouteAttribute.Path - for details on the correct format. - The same instance; - never . - - - - Maps the specified REST path to the specified request DTO, and - specifies the HTTP verbs supported by the path. - - The type of request DTO to map - the path to. - The path to map the request DTO to. - See RouteAttribute.Path - for details on the correct format. - - The comma-delimited list of HTTP verbs supported by the path, - such as "GET,PUT,DELETE". Specify empty or - to indicate that all verbs are supported. - - The same instance; - never . - - - - Maps the specified REST path to the specified request DTO, - specifies the HTTP verbs supported by the path, and indicates - the default MIME type of the returned response. - - - The type of request DTO to map the path to. - - The path to map the request DTO to. - See RouteAttribute.Path - for details on the correct format. - - The comma-delimited list of HTTP verbs supported by the path, - such as "GET,PUT,DELETE". - - The same instance; - never . - - - - Maps the specified REST path to the specified request DTO, - specifies the HTTP verbs supported by the path, and indicates - the default MIME type of the returned response. - - - Used to rank the precedences of route definitions in reverse routing. - i.e. Priorities below 0 are auto-generated have less precedence. - - - - - Maps the specified REST path to the specified request DTO, - specifies the HTTP verbs supported by the path, and indicates - the default MIME type of the returned response. - - - The type of request DTO to map the path to. - - The path to map the request DTO to. - See RouteAttribute.Path - for details on the correct format. - - The comma-delimited list of HTTP verbs supported by the path, - such as "GET,PUT,DELETE". - - - The short summary of what the REST does. - - - The longer text to explain the behaviour of the REST. - - The same instance; - never . - - - - Used to decorate Request DTO's to associate a RESTful request - path mapping with a service. Multiple attributes can be applied to - each request DTO, to map multiple paths to the service. - - - - - Initializes an instance of the class. - - - The path template to map to the request. See - RouteAttribute.Path - for details on the correct format. - - - - - Initializes an instance of the class. - - - The path template to map to the request. See - RouteAttribute.Path - for details on the correct format. - - A comma-delimited list of HTTP verbs supported by the - service. If unspecified, all verbs are assumed to be supported. - - - - Gets or sets the path template to be mapped to the request. - - - A value providing the path mapped to - the request. Never . - - - Some examples of valid paths are: - - - "/Inventory" - "/Inventory/{Category}/{ItemId}" - "/Inventory/{ItemPath*}" - - - Variables are specified within "{}" - brackets. Each variable in the path is mapped to the same-named property - on the request DTO. At runtime, ServiceStack will parse the - request URL, extract the variable values, instantiate the request DTO, - and assign the variable values into the corresponding request properties, - prior to passing the request DTO to the service object for processing. - - It is not necessary to specify all request properties as - variables in the path. For unspecified properties, callers may provide - values in the query string. For example: the URL - "http://services/Inventory?Category=Books&ItemId=12345" causes the same - request DTO to be processed as "http://services/Inventory/Books/12345", - provided that the paths "/Inventory" (which supports the first URL) and - "/Inventory/{Category}/{ItemId}" (which supports the second URL) - are both mapped to the request DTO. - - Please note that while it is possible to specify property values - in the query string, it is generally considered to be less RESTful and - less desirable than to specify them as variables in the path. Using the - query string to specify property values may also interfere with HTTP - caching. - - The final variable in the path may contain a "*" suffix - to grab all remaining segments in the path portion of the request URL and assign - them to a single property on the request DTO. - For example, if the path "/Inventory/{ItemPath*}" is mapped to the request DTO, - then the request URL "http://services/Inventory/Books/12345" will result - in a request DTO whose ItemPath property contains "Books/12345". - You may only specify one such variable in the path, and it must be positioned at - the end of the path. - - - - - Gets or sets short summary of what the route does. - - - - - Gets or sets longer text to explain the behaviour of the route. - - - - - Gets or sets a comma-delimited list of HTTP verbs supported by the service, such as - "GET,PUT,POST,DELETE". - - - A providing a comma-delimited list of HTTP verbs supported - by the service, or empty if all verbs are supported. - - - - - Used to rank the precedences of route definitions in reverse routing. - i.e. Priorities below 0 are auto-generated have less precedence. - - - - - Fallback routes have the lowest precedence, i.e. after normal Routes, static files or any matching Catch All Handlers. - - - - - Generic ResponseStatus for when Response Type can't be inferred. - In schemaless formats like JSON, JSV it has the same shape as a typed Response DTO - - - - - Contract indication that the Response DTO has a ResponseStatus - - - - - A log entry added by the IRequestLogger - - - - - Decorate on Request DTO's to alter the accessibility of a service and its visibility on /metadata pages - - - - - Restrict access and metadata visibility to any of the specified access scenarios - - The restrict access to scenarios. - - - - Restrict access and metadata visibility to any of the specified access scenarios - - The restrict access to scenarios. - - - - Returns the allowed set of scenarios based on the user-specified restrictions - - - - - - - Allow access but hide from metadata to requests from Localhost only - - - - - Allow access but hide from metadata to requests from Localhost and Local Intranet only - - - - - Restrict access and hide from metadata to requests from Localhost and Local Intranet only - - - - - Restrict access and hide from metadata to requests from Localhost only - - - - - Sets a single access restriction - - Restrict Access to. - - - - Restrict access to any of the specified access scenarios - - Access restrictions - - - - Sets a single metadata Visibility restriction - - Restrict metadata Visibility to. - - - - Restrict metadata visibility to any of the specified access scenarios - - Visibility restrictions - - - - Converts from a User intended restriction to a flag with all the allowed attribute flags set, e.g: - - If No Network restrictions were specified all Network access types are allowed, e.g: - restrict EndpointAttributes.None => ... 111 - - If a Network restriction was specified, only it will be allowed, e.g: - restrict EndpointAttributes.LocalSubnet => ... 010 - - The returned Enum will have a flag with all the allowed attributes set - - - - - - - Error information pertaining to a particular named field. - Used for returning multiple field validation errors.s - - - - - Common ResponseStatus class that should be present on all response DTO's - - - - - Initializes a new instance of the class. - - A response status without an errorcode == success - - - - - Initializes a new instance of the class. - - A response status with an errorcode == failure - - - - - Initializes a new instance of the class. - - A response status with an errorcode == failure - - - - - Holds the custom ErrorCode enum if provided in ValidationException - otherwise will hold the name of the Exception type, e.g. typeof(Exception).Name - - A value of non-null means the service encountered an error while processing the request. - - - - - A human friendly error message - - - - - - - - - - For multiple detailed validation errors. - Can hold a specific error message for each named field. - - - - - Write a partial content result - - - - - Whether this HttpResult allows Partial Response - - - - - Sends the specified request. - - The request. - - - - diff --git a/lib/signed/ServiceStack.Interfaces.dll b/lib/signed/ServiceStack.Interfaces.dll deleted file mode 100644 index 3fb50307e67..00000000000 Binary files a/lib/signed/ServiceStack.Interfaces.dll and /dev/null differ diff --git a/lib/signed/ServiceStack.OrmLite.SqlServer.dll b/lib/signed/ServiceStack.OrmLite.SqlServer.dll deleted file mode 100644 index aa510535305..00000000000 Binary files a/lib/signed/ServiceStack.OrmLite.SqlServer.dll and /dev/null differ diff --git a/lib/signed/ServiceStack.OrmLite.dll b/lib/signed/ServiceStack.OrmLite.dll deleted file mode 100644 index 5fbedd1905a..00000000000 Binary files a/lib/signed/ServiceStack.OrmLite.dll and /dev/null differ diff --git a/lib/signed/ServiceStack.Razor.dll b/lib/signed/ServiceStack.Razor.dll deleted file mode 100644 index 1e6079c4825..00000000000 Binary files a/lib/signed/ServiceStack.Razor.dll and /dev/null differ diff --git a/lib/signed/ServiceStack.Redis.XML b/lib/signed/ServiceStack.Redis.XML deleted file mode 100644 index 1b460938ad0..00000000000 --- a/lib/signed/ServiceStack.Redis.XML +++ /dev/null @@ -1,1382 +0,0 @@ - - - - ServiceStack.Redis - - - - - Provides thread-safe retrievel of redis clients since each client is a new one. - Allows the configuration of different ReadWrite and ReadOnly hosts - - - BasicRedisClientManager for ICacheClient - - For more interoperabilty I'm also implementing the ICacheClient on - this cache client manager which has the affect of calling - GetCacheClient() for all write operations and GetReadOnlyCacheClient() - for the read ones. - - This works well for master-slave replication scenarios where you have - 1 master that replicates to multiple read slaves. - - - - - Hosts can be an IP Address or Hostname in the format: host[:port] - e.g. 127.0.0.1:6379 - default is: localhost:6379 - - The write hosts. - The read hosts. - - - - Returns a Read/Write client (The default) using the hosts defined in ReadWriteHosts - - - - - - Returns a ReadOnly client using the hosts defined in ReadOnlyHosts. - - - - - - Gets or sets object key prefix. - - - - - Courtesy of @marcgravell - http://code.google.com/p/protobuf-net/source/browse/trunk/protobuf-net/BufferPool.cs - - - - - Provides thread-safe pooling of redis client connections. - - - - - Returns a Read/Write client (The default) using the hosts defined in ReadWriteHosts - - - - - - Called within a lock - - - - - - Disposes the write client. - - The client. - - - - The client wraps the native redis operations into a more readable c# API. - - Where possible these operations are also exposed in common c# interfaces, - e.g. RedisClient.Lists => IList[string] - RedisClient.Sets => ICollection[string] - - - - - This class contains all the common operations for the RedisClient. - The client contains a 1:1 mapping of c# methods to redis operations of the same name. - - Not threadsafe use a pooled manager - - - - - Requires custom result parsing - - Number of results - - - - Command to set multuple binary safe arguments - - - - - - - reset buffer index in send buffer - - - - - Used to manage connection pooling - - - - - Gets or sets object key prefix. - - - - - Creates a new instance of the Redis Client from NewFactoryFn. - - - - - Alias for GetValue - - - - - Returns key with automatic object id detection in provided value with generic type. - - - - - - - Returns key with explicit object id. - - - - - - - Returns key with explicit object type and id. - - - - - - - - A complete redis command, with method to send command, receive response, and run callback on success or failure - - - - - Allows you to get Redis value operations to operate against POCO types. - - - - - - Use this to share the same redis connection with another - - The client. - - - - Pipeline for redis typed client - - - - - - Queue of commands for redis typed client - - - - - - Redis operation (transaction/pipeline) that allows queued commands to be completed - - - - - For interoperabilty GetCacheClient() and GetReadOnlyCacheClient() - return an ICacheClient wrapper around the redis manager which has the affect of calling - GetClient() for all write operations and GetReadOnlyClient() for the read ones. - - This works well for master-slave replication scenarios where you have - 1 master that replicates to multiple read slaves. - - - - - Ignore dispose on RedisClientsManager, which should be registered as a singleton - - - - - Useful wrapper IRedisClientsManager to cut down the boiler plate of most IRedisClient access - - - - - Creates a PubSubServer that uses a background thread to listen and process for - Redis Pub/Sub messages published to the specified channel. - Use optional callbacks to listen for message, error and life-cycle events. - Callbacks can be assigned later, then call Start() for PubSubServer to start listening for messages - - - - - A complete redis command, with method to send command, receive response, and run callback on success or failure - - - - - Redis command that does not get queued - - - - - Initialize channel and register client manager - - - - - - Check if GetValidSentinel should try the next sentinel server - - - This will be true if the failures is less than either RedisSentinel.MaxFailures or the # of sentinels, whatever is greater - - - - Raised if there is an error from a sentinel worker - - - - - - - Event that is fired when the sentinel subscription raises an event - - - - - - - Does a sentinel check for masters and slaves and either sets up or fails over to the new config - - - - - Takes output from sentinel slaves command and converts into a list of servers - - - - - - - Takes output from sentinel master command and converts into a list of servers - - - - - - - Provides a redis connection pool that can be sharded - - - - - Provides thread-safe pooling of redis client connections. - Allows load-balancing of master-write and read-slave hosts, ideal for - 1 master and multiple replicated read slaves. - - - - - Hosts can be an IP Address or Hostname in the format: host[:port] - e.g. 127.0.0.1:6379 - default is: localhost:6379 - - The write hosts. - The read hosts. - The config. - - - - Returns a Read/Write client (The default) using the hosts defined in ReadWriteHosts - - - - - - Called within a lock - - - - - - Returns a ReadOnly client using the hosts defined in ReadOnlyHosts. - - - - - - Called within a lock - - - - - - Disposes the read only client. - - The client. - - - - Disposes the write client. - - The client. - - - - Gets or sets object key prefix. - - - - - Manage a client acquired from the PooledRedisClientManager - Dispose method will release the client back to the pool. - - - - - wrap the acquired client - - - - - - release the wrapped client back to the pool - - - - - access the wrapped client - - - - - logical name - - - - - An arbitrary weight relative to other nodes - - - - logical name - An arbitrary weight relative to other nodes - redis nodes - - - - Provides sharding of redis client connections. - uses consistent hashing to distribute keys across connection pools - - - - - maps a key to a redis connection pool - - key to map - a redis connection pool - - - - Adds a node and maps points across the circle - - node to add - An arbitrary number, specifies how often it occurs relative to other targets. - - - - A variation of Binary Search algorithm. Given a number, matches the next highest number from the sorted array. - If a higher number does not exist, then the first number in the array is returned. - - a sorted array to perform the search - number to find the next highest number against - next highest number - - - - Given a key, generates an unsigned 64 bit hash code using MD5 - - - - - - - Provides access to the method reflection data as part of the before/after event - - - - - Stores details about the context in which an IRedisClient is allocated. - - - - - - Tracks each IRedisClient instance allocated from the IRedisClientsManager logging when they are allocated and disposed. - Periodically writes the allocated instances to the log for diagnostic purposes. - - - - - Distributed lock interface - - - - - Optimized implementation. Primitive types are manually serialized, the rest are serialized using binary serializer />. - - - - - serialize/deserialize arbitrary objects - (objects must be serializable) - - - - - Serialize object to buffer - - serializable object - - - - - Deserialize buffer to object - - byte array to deserialize - - - - - - - - - - - - - - - - - - - serialize value and wrap with - - - - - - - Unwrap object wrapped in - - - - - - - pop numProcessed items from queue and unlock queue for work item id that dequeued - items are associated with - - - - - - A dequeued work item has been processed. When all of the dequeued items have been processed, - all items will be popped from the queue,and the queue unlocked for the work item id that - the dequeued items are associated with - - - - - Update first unprocessed item with new work item. - - - - - - - - - - - distributed work item queue. Each message must have an associated - work item id. For a given id, all work items are guaranteed to be processed - in the order in which they are received. - - - - - distributed work item queue. Each message must have an associated - work item id. For a given id, all work items are guaranteed to be processed - in the order in which they are received. - - - - - - - distributed work item queue - - - - - Enqueue item in priority queue corresponding to workItemId identifier - - - - - - - Preprare next work item id for dequeueing - - - - - Dequeue up to maxBatchSize items from queue corresponding to workItemId identifier. - Once this method is called, or will not - return any items for workItemId until the dequeue lock returned is unlocked. - - - - - - - - Replace existing work item in workItemId queue - - - - - - - - Queue incoming messages - - - - - - - Must call this periodically to move work items from priority queue to pending queue - - - - - Replace existing work item in workItemId queue - - - - - - - - Pop items from list - - - - - - - Force release of locks held by crashed servers - - - - - release lock held by crashed server - - - - true if lock is released, either by this method or by another client; false otherwise - - - - Unlock work item id, so other servers can process items for this id - - - - - - - - - - - - - - - - - - - - - - - - - - - pop remaining items that were returned by dequeue, and unlock queue - - - - - - indicate that an item has been processed by the caller - - - - - Update first unprocessed work item - - - - - - wraps a serialized representation of an object - - - - - - Initializes a new instance of . - - Custom item data. - The serialized item. - - - - The data representing the item being stored/retireved. - - - - - Flags set for this instance. - - - - - distributed lock class that follows the Resource Allocation Is Initialization pattern - - - - - Lock - - - - in seconds - in seconds - - - - unlock - - - - - Enqueue item - - - - - - Dequeue up to maxBatchSize items from queue - - - - - - - distributed work item queue. Messages are processed in chronological order - - - - - Enqueue incoming messages - - - - - - - - Dequeue next batch of work items - - - - - - - - - simple distributed work item queue - - - - - - - Queue incoming messages - - - - - - Dequeue next batch of work items for processing. After this method is called, - no other work items with same id will be available for - dequeuing until PostDequeue is called - - KeyValuePair: key is work item id, and value is list of dequeued items. - - - - - Serialize object to buffer - - serializable object - - - - - - - array of serializable objects - - - - - Deserialize buffer to object - - byte array to deserialize - - - - - - customize the client serializer - - - - - Factory to create SerializingRedisClient objects - - - - - - - - - General purpose pipeline - - - - - - Flush send buffer, and read responses - - - - - Wrap the common redis set operations under a ICollection[string] interface. - - - - - Adds support for Redis Transactions (i.e. MULTI/EXEC/DISCARD operations). - - - - - Put "QUEUED" messages at back of queue - - - - - - Issue exec command (not queued) - - - - - callback for after result count is read in - - - - - - Wrap the common redis set operations under a ICollection[string] interface. - - - - - Wrap the common redis set operations under a ICollection[string] interface. - - - - - Wrap the common redis set operations under a ICollection[string] interface. - - - - - Redis-specific exception. Thrown if unable to connect to Redis server due to socket exception, for example. - - - - - Adds support for Redis Transactions (i.e. MULTI/EXEC/DISCARD operations). - - - - - Put "QUEUED" messages at back of queue - - - - - - Issue exec command (not queued) - - - - - callback for after result count is read in - - - - - - Provide the default factory implementation for creating a RedisClient that - can be mocked and used by different 'Redis Client Managers' - - - - - Wrap the common redis set operations under a ICollection[string] interface. - - - - - Provide the factory implementation for creating a RedisCacheClient that - can be mocked and used by different 'Redis Client Managers' - - - - - Wrap the common redis set operations under a ICollection[string] interface. - - - - - Wrap the common redis list operations under a IList[string] interface. - - - - - Represents a generic collection of key/value pairs that are ordered independently of the key and value. - - The type of the keys in the dictionary - The type of the values in the dictionary - - - - Adds an entry with the specified key and value into the IOrderedDictionary<TKey,TValue> collection with the lowest available index. - - The key of the entry to add. - The value of the entry to add. - The index of the newly added entry - - You can also use the property to add new elements by setting the value of a key that does not exist in the IOrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the IOrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. - An element with the same key already exists in the IOrderedDictionary<TKey,TValue> - The IOrderedDictionary<TKey,TValue> is read-only.
      - -or-
      - The IOrderedDictionary<TKey,TValue> has a fized size.
      -
      - - - Inserts a new entry into the IOrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. - - The zero-based index at which the element should be inserted. - The key of the entry to add. - The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. - is less than 0.
      - -or-
      - is greater than .
      - An element with the same key already exists in the IOrderedDictionary<TKey,TValue>. - The IOrderedDictionary<TKey,TValue> is read-only.
      - -or-
      - The IOrderedDictionary<TKey,TValue> has a fized size.
      -
      - - - Gets or sets the value at the specified index. - - The zero-based index of the value to get or set. - The value of the item at the specified index. - is less than 0.
      - -or-
      - is equal to or greater than .
      -
      - - - Represents a generic collection of key/value pairs that are ordered independently of the key and value. - - The type of the keys in the dictionary - The type of the values in the dictionary - - - - Initializes a new instance of the OrderedDictionary<TKey,TValue> class. - - - - - Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified initial capacity. - - The initial number of elements that the OrderedDictionary<TKey,TValue> can contain. - is less than 0 - - - - Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified comparer. - - The IEqualityComparer<TKey> to use when comparing keys, or to use the default EqualityComparer<TKey> for the type of the key. - - - - Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified initial capacity and comparer. - - The initial number of elements that the OrderedDictionary<TKey,TValue> collection can contain. - The IEqualityComparer<TKey> to use when comparing keys, or to use the default EqualityComparer<TKey> for the type of the key. - is less than 0 - - - - Converts the object passed as a key to the key type of the dictionary - - The key object to check - The key object, cast as the key type of the dictionary - is . - The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . - - - - Converts the object passed as a value to the value type of the dictionary - - The object to convert to the value type of the dictionary - The value object, converted to the value type of the dictionary - is , and the value type of the OrderedDictionary<TKey,TValue> is a value type. - The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . - - - - Inserts a new entry into the OrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. - - The zero-based index at which the element should be inserted. - The key of the entry to add. - The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. - is less than 0.
      - -or-
      - is greater than .
      - is . - An element with the same key already exists in the OrderedDictionary<TKey,TValue>. -
      - - - Inserts a new entry into the OrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. - - The zero-based index at which the element should be inserted. - The key of the entry to add. - The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. - is less than 0.
      - -or-
      - is greater than .
      - is .
      - -or-
      - is , and the value type of the OrderedDictionary<TKey,TValue> is a value type.
      - The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
      - -or-
      - The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
      - -or-
      - An element with the same key already exists in the OrderedDictionary<TKey,TValue>.
      -
      - - - Removes the entry at the specified index from the OrderedDictionary<TKey,TValue> collection. - - The zero-based index of the entry to remove. - is less than 0.
      - -or-
      - index is equal to or greater than .
      -
      - - - Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. - - The key of the entry to add. - The value of the entry to add. This value can be . - A key cannot be , but a value can be. - You can also use the property to add new elements by setting the value of a key that does not exist in the OrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the OrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. - is - An element with the same key already exists in the OrderedDictionary<TKey,TValue> - - - - Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. - - The key of the entry to add. - The value of the entry to add. This value can be . - The index of the newly added entry - A key cannot be , but a value can be. - You can also use the property to add new elements by setting the value of a key that does not exist in the OrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the OrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. - is - An element with the same key already exists in the OrderedDictionary<TKey,TValue> - - - - Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. - - The key of the entry to add. - The value of the entry to add. This value can be . - is .
      - -or-
      - is , and the value type of the OrderedDictionary<TKey,TValue> is a value type.
      - The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
      - -or-
      - The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
      -
      - - - Removes all elements from the OrderedDictionary<TKey,TValue> collection. - - The capacity is not changed as a result of calling this method. - - - - Determines whether the OrderedDictionary<TKey,TValue> collection contains a specific key. - - The key to locate in the OrderedDictionary<TKey,TValue> collection. - if the OrderedDictionary<TKey,TValue> collection contains an element with the specified key; otherwise, . - is - - - - Determines whether the OrderedDictionary<TKey,TValue> collection contains a specific key. - - The key to locate in the OrderedDictionary<TKey,TValue> collection. - if the OrderedDictionary<TKey,TValue> collection contains an element with the specified key; otherwise, . - is - The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . - - - - Returns the zero-based index of the specified key in the OrderedDictionary<TKey,TValue> - - The key to locate in the OrderedDictionary<TKey,TValue> - The zero-based index of , if is found in the OrderedDictionary<TKey,TValue>; otherwise, -1 - This method performs a linear search; therefore it has a cost of O(n) at worst. - - - - Removes the entry with the specified key from the OrderedDictionary<TKey,TValue> collection. - - The key of the entry to remove - if the key was found and the corresponding element was removed; otherwise, - - - - Removes the entry with the specified key from the OrderedDictionary<TKey,TValue> collection. - - The key of the entry to remove - - - - Copies the elements of the OrderedDictionary<TKey,TValue> elements to a one-dimensional Array object at the specified index. - - The one-dimensional object that is the destination of the objects copied from the OrderedDictionary<TKey,TValue>. The must have zero-based indexing. - The zero-based index in at which copying begins. - The method preserves the order of the elements in the OrderedDictionary<TKey,TValue> - - - - Gets the value associated with the specified key. - - The key of the value to get. - When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of . This parameter can be passed uninitialized. - if the OrderedDictionary<TKey,TValue> contains an element with the specified key; otherwise, . - - - - Adds the specified value to the OrderedDictionary<TKey,TValue> with the specified key. - - The KeyValuePair<TKey,TValue> structure representing the key and value to add to the OrderedDictionary<TKey,TValue>. - - - - Determines whether the OrderedDictionary<TKey,TValue> contains a specific key and value. - - The KeyValuePair<TKey,TValue> structure to locate in the OrderedDictionary<TKey,TValue>. - if is found in the OrderedDictionary<TKey,TValue>; otherwise, . - - - - Copies the elements of the OrderedDictionary<TKey,TValue> to an array of type , starting at the specified index. - - The one-dimensional array of type KeyValuePair<TKey,TValue> that is the destination of the KeyValuePair<TKey,TValue> elements copied from the OrderedDictionary<TKey,TValue>. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - - - Removes a key and value from the dictionary. - - The KeyValuePair<TKey,TValue> structure representing the key and value to remove from the OrderedDictionary<TKey,TValue>. - if the key and value represented by is successfully found and removed; otherwise, . This method returns if is not found in the OrderedDictionary<TKey,TValue>. - - - - Gets the dictionary object that stores the keys and values - - The dictionary object that stores the keys and values for the OrderedDictionary<TKey,TValue> - Accessing this property will create the dictionary object if necessary - - - - Gets the list object that stores the key/value pairs. - - The list object that stores the key/value pairs for the OrderedDictionary<TKey,TValue> - Accessing this property will create the list object if necessary. - - - - Gets or sets the value at the specified index. - - The zero-based index of the value to get or set. - The value of the item at the specified index. - is less than 0.
      - -or-
      - index is equal to or greater than .
      -
      - - - Gets or sets the value at the specified index. - - The zero-based index of the value to get or set. - The value of the item at the specified index. - is less than 0.
      - -or-
      - index is equal to or greater than .
      - is a null reference, and the value type of the OrderedDictionary<TKey,TValue> is a value type. - The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . -
      - - - Gets a value indicating whether the OrderedDictionary<TKey,TValue> has a fixed size. - - if the OrderedDictionary<TKey,TValue> has a fixed size; otherwise, . The default is . - - - - Gets a value indicating whether the OrderedDictionary<TKey,TValue> collection is read-only. - - if the OrderedDictionary<TKey,TValue> is read-only; otherwise, . The default is . - - A collection that is read-only does not allow the addition, removal, or modification of elements after the collection is created. - A collection that is read-only is simply a collection with a wrapper that prevents modification of the collection; therefore, if changes are made to the underlying collection, the read-only collection reflects those changes. - - - - - Gets an object containing the keys in the OrderedDictionary<TKey,TValue>. - - An object containing the keys in the OrderedDictionary<TKey,TValue>. - The returned object is not a static copy; instead, the collection refers back to the keys in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the key collection. - - - - Gets an object containing the values in the OrderedDictionary<TKey,TValue> collection. - - An object containing the values in the OrderedDictionary<TKey,TValue> collection. - The returned object is not a static copy; instead, the refers back to the values in the original OrderedDictionary<TKey,TValue> collection. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the . - - - - Gets or sets the value with the specified key. - - The key of the value to get or set. - The value associated with the specified key. If the specified key is not found, attempting to get it returns , and attempting to set it creates a new element using the specified key. - - - - Gets or sets the value with the specified key. - - The key of the value to get or set. - The value associated with the specified key. If the specified key is not found, attempting to get it returns , and attempting to set it creates a new element using the specified key. - - - - Gets the number of key/values pairs contained in the OrderedDictionary<TKey,TValue> collection. - - The number of key/value pairs contained in the OrderedDictionary<TKey,TValue> collection. - - - - Gets a value indicating whether access to the OrderedDictionary<TKey,TValue> object is synchronized (thread-safe). - - This method always returns false. - - - - Gets an object that can be used to synchronize access to the OrderedDictionary<TKey,TValue> object. - - An object that can be used to synchronize access to the OrderedDictionary<TKey,TValue> object. - - - - Gets an ICollection<TKey> object containing the keys in the OrderedDictionary<TKey,TValue>. - - An ICollection<TKey> object containing the keys in the OrderedDictionary<TKey,TValue>. - The returned ICollection<TKey> object is not a static copy; instead, the collection refers back to the keys in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the key collection. - - - - Gets an ICollection<TValue> object containing the values in the OrderedDictionary<TKey,TValue>. - - An ICollection<TValue> object containing the values in the OrderedDictionary<TKey,TValue>. - The returned ICollection<TKey> object is not a static copy; instead, the collection refers back to the values in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the value collection. - - - - acquire distributed, non-reentrant lock on key - - global key for this lock - timeout for acquiring lock - timeout for lock, in seconds (stored as value against lock key) - - - - - - unlock key - - - - - - - - - - - - - Locking strategy interface - - - - - This class manages a read lock for a local readers/writer lock, - using the Resource Acquisition Is Initialization pattern - - - - - RAII initialization - - - - - - RAII disposal - - - - - This class manages a write lock for a local readers/writer lock, - using the Resource Acquisition Is Initialization pattern - - - - - - RAII disposal - - - - - manages a "region" in the redis key space - namespace can be cleared by incrementing the generation - - - - - get current generation - - - - - - set new generation - - - - - - redis key for generation - - - - - - get redis key that holds all namespace keys - - - - - - get global cache key - - - - - - - get global key inside of this namespace - - - prefixes can be added for name deconfliction - - - - - replace UniqueCharacter with its double, to avoid name clash - - - - - - - - - - - - - - get locking strategy - - -
      -
      diff --git a/lib/signed/ServiceStack.Redis.dll b/lib/signed/ServiceStack.Redis.dll deleted file mode 100644 index 20222c58591..00000000000 Binary files a/lib/signed/ServiceStack.Redis.dll and /dev/null differ diff --git a/lib/signed/ServiceStack.Server.dll b/lib/signed/ServiceStack.Server.dll deleted file mode 100644 index aa9788e38e0..00000000000 Binary files a/lib/signed/ServiceStack.Server.dll and /dev/null differ diff --git a/lib/signed/ServiceStack.Text.XML b/lib/signed/ServiceStack.Text.XML deleted file mode 100644 index 6cf831f51f8..00000000000 --- a/lib/signed/ServiceStack.Text.XML +++ /dev/null @@ -1,714 +0,0 @@ - - - - ServiceStack.Text - - - - - Utils to load types - - - - - Find the type from the name supplied - - [typeName] or [typeName, assemblyName] - - - - - The top-most interface of the given type, if any. - - - - - Find type if it exists - - - - The type if it exists - - - - Populate an object with Example data. - - - - - - - Populates the object with example data. - - - Tracks how deeply nested we are - - - - - If AlwaysUseUtc is set to true then convert all DateTime to UTC. - - - - - - - Repairs an out-of-spec XML date/time string which incorrectly uses a space instead of a 'T' to separate the date from the time. - These string are occasionally generated by SQLite and can cause errors in OrmLite when reading these columns from the DB. - - The XML date/time string to repair - The repaired string. If no repairs were made, the original string is returned. - - - - WCF Json format: /Date(unixts+0000)/ - - - - - - - WCF Json format: /Date(unixts+0000)/ - - - - - - - Get the type(string) constructor if exists - - The type. - - - - - micro optimizations: using flags instead of value.IndexOfAny(EscapeChars) - - - - - - - Class to hold - - - - - - A fast, standards-based, serialization-issue free DateTime serailizer. - - - - - Determines whether this serializer can create the specified type from a string. - - The type. - - true if this instance [can create from string] the specified type; otherwise, false. - - - - - Parses the specified value. - - The value. - - - - - Deserializes from reader. - - The reader. - - - - - Serializes to string. - - The value. - - - - - Serializes to writer. - - The value. - The writer. - - - - Sets which format to use when serializing TimeSpans - - - - - if the is configured - to take advantage of specification, - to support user-friendly serialized formats, ie emitting camelCasing for JSON - and parsing member names and enum values in a case-insensitive manner. - - - - - if the is configured - to support web-friendly serialized formats, ie emitting lowercase_underscore_casing for JSON - - - - - Define how property names are mapped during deserialization - - - - - Gets or sets a value indicating if the framework should throw serialization exceptions - or continue regardless of deserialization errors. If the framework - will throw; otherwise, it will parse as many fields as possible. The default is . - - - - - Gets or sets a value indicating if the framework should always convert to UTC format instead of local time. - - - - - Gets or sets a value indicating if the framework should always assume is in UTC format if Kind is Unspecified. - - - - - Gets or sets whether we should append the Utc offset when we serialize Utc dates. Defaults to no. - Only supported for when the JsConfig.DateHandler == JsonDateHandler.TimestampOffset - - - - - Gets or sets a value indicating if unicode symbols should be serialized as "\uXXXX". - - - - - If set to true, Interface types will be prefered over concrete types when serializing. - - - - - For extra serialization performance you can re-use a ThreadStatic StringBuilder - when serializing to a JSON String. - - - - - Sets the maximum depth to avoid circular dependencies - - - - - Set this to enable your own type construction provider. - This is helpful for integration with IoC containers where you need to call the container constructor. - Return null if you don't know how to construct the type and the parameterless constructor will be used. - - - - - If set to true, Interface types will be prefered over concrete types when serializing. - - - - - Always emit type info for this type. Takes precedence over ExcludeTypeInfo - - - - - Never emit type info for this type - - - - - if the is configured - to take advantage of specification, - to support user-friendly serialized formats, ie emitting camelCasing for JSON - and parsing member names and enum values in a case-insensitive manner. - - - - - Define custom serialization fn for BCL Structs - - - - - Define custom raw serialization fn - - - - - Define custom serialization hook - - - - - Define custom after serialization hook - - - - - Define custom deserialization fn for BCL Structs - - - - - Define custom raw deserialization fn for objects - - - - - Exclude specific properties of this type from being serialized - - - - - Opt-in flag to set some Value Types to be treated as a Ref Type - - - - - Whether there is a fn (raw or otherwise) - - - - - The property names on target types must match property names in the JSON source - - - - - The property names on target types may not match the property names in the JSON source - - - - - Uses the xsd format like PT15H10M20S - - - - - Uses the standard .net ToString method of the TimeSpan class - - - - - Get JSON string value converted to T - - - - - Get JSON string value - - - - - Get unescaped string value - - - - - Get unescaped string value - - - - - Write JSON Array, Object, bool or number values as raw string - - - - - Get JSON string value - - - - - Creates an instance of a Type from a string value - - - - - Parses the specified value. - - The value. - - - - - Shortcut escape when we're sure value doesn't contain any escaped chars - - - - - - - Given a character as utf32, returns the equivalent string provided that the character - is legal json. - - - - - - - micro optimizations: using flags instead of value.IndexOfAny(EscapeChars) - - - - - - - Implement the serializer using a more static approach - - - - - - Implement the serializer using a more static approach - - - - - - Public Code API to register commercial license for ServiceStack. - - - - - Internal Utilities to verify licensing - - - - - Pretty Thread-Safe cache class from: - http://code.google.com/p/dapper-dot-net/source/browse/Dapper/SqlMapper.cs - - This is a micro-cache; suitable when the number of terms is controllable (a few hundred, for example), - and strictly append-only; you cannot change existing values. All key matches are on **REFERENCE** - equality. The type is fully thread-safe. - - - - - Represents an individual object, allowing access to members by-name - - - - - Use the target types definition of equality - - - - - Obtain the hash of the target object - - - - - Use the target's definition of a string representation - - - - - Wraps an individual object, allowing by-name access to that instance - - - - - Get or Set the value of a named member for the underlying object - - - - - The object represented by this instance - - - - - Provides by-name member-access to objects of a given type - - - - - Create a new instance of this type - - - - - Provides a type-specific accessor, allowing by-name access for all objects of that type - - The accessor is cached internally; a pre-existing accessor may be returned - - - - Does this type support new instances via a parameterless constructor? - - - - - Get or set the value of a named member on the target instance - - - - - Maps the path of a file in the context of a VS project - - the relative path - the absolute path - Assumes static content is two directories above the /bin/ directory, - eg. in a unit test scenario the assembly would be in /bin/Debug/. - - - - Maps the path of a file in a self-hosted scenario - - the relative path - the absolute path - Assumes static content is copied to /bin/ folder with the assemblies - - - - Maps the path of a file in an Asp.Net hosted scenario - - the relative path - the absolute path - Assumes static content is in the parent folder of the /bin/ directory - - - - Implement the serializer using a more static approach - - - - - - Creates a new instance of type. - First looks at JsConfig.ModelFactory before falling back to CreateInstance - - - - - Creates a new instance of type. - First looks at JsConfig.ModelFactory before falling back to CreateInstance - - - - - Creates a new instance from the default constructor of type - - - - - Add a Property attribute at runtime. - Not threadsafe, should only add attributes on Startup. - - - - - Add a Property attribute at runtime. - Not threadsafe, should only add attributes on Startup. - - - - - @jonskeet: Collection of utility methods which operate on streams. - r285, February 26th 2009: http://www.yoda.arachsys.com/csharp/miscutil/ - - - - - Reads the given stream up to the end, returning the data as a byte - array. - - - - - Reads the given stream up to the end, returning the data as a byte - array, using the given buffer size. - - - - - Reads the given stream up to the end, returning the data as a byte - array, using the given buffer for transferring data. Note that the - current contents of the buffer is ignored, so the buffer needn't - be cleared beforehand. - - - - - Copies all the data from one stream into another. - - - - - Copies all the data from one stream into another, using a buffer - of the given size. - - - - - Copies all the data from one stream into another, using the given - buffer for transferring data. Note that the current contents of - the buffer is ignored, so the buffer needn't be cleared beforehand. - - - - - Reads exactly the given number of bytes from the specified stream. - If the end of the stream is reached before the specified amount - of data is read, an exception is thrown. - - - - - Reads into a buffer, filling it completely. - - - - - Reads exactly the given number of bytes from the specified stream, - into the given buffer, starting at position 0 of the array. - - - - - Reads exactly the given number of bytes from the specified stream, - into the given buffer, starting at position 0 of the array. - - - - - Same as ReadExactly, but without the argument checks. - - - - - Converts from base: 0 - 62 - - The source. - From. - To. - - - - - Skip the encoding process for 'safe strings' - - - - - - - A class to allow the conversion of doubles to string representations of - their exact decimal values. The implementation aims for readability over - efficiency. - - Courtesy of @JonSkeet - http://www.yoda.arachsys.com/csharp/DoubleConverter.cs - - - - - - - - How many digits are *after* the decimal point - - - - - Constructs an arbitrary decimal expansion from the given long. - The long must not be negative. - - - - - Multiplies the current expansion by the given amount, which should - only be 2 or 5. - - - - - Shifts the decimal point; a negative value makes - the decimal expansion bigger (as fewer digits come after the - decimal place) and a positive value makes the decimal - expansion smaller. - - - - - Removes leading/trailing zeroes from the expansion. - - - - - Converts the value to a proper decimal string representation. - - - - - Creates an instance of a Type from a string value - - - - - Determines whether the specified type is convertible from string. - - The type. - - true if the specified type is convertible from string; otherwise, false. - - - - - Parses the specified value. - - The value. - - - - - Parses the specified type. - - The type. - The value. - - - - - Useful extension method to get the Dictionary[string,string] representation of any POCO type. - - - - - - Recursively prints the contents of any POCO object in a human-friendly, readable format - - - - - - Print Dump to Console.WriteLine - - - - - Print string.Format to Console.WriteLine - - - - - Parses the specified value. - - The value. - - - - diff --git a/lib/signed/ServiceStack.Text.dll b/lib/signed/ServiceStack.Text.dll deleted file mode 100644 index 794729c86d2..00000000000 Binary files a/lib/signed/ServiceStack.Text.dll and /dev/null differ diff --git a/lib/signed/ServiceStack.dll b/lib/signed/ServiceStack.dll deleted file mode 100644 index f9da09e59fb..00000000000 Binary files a/lib/signed/ServiceStack.dll and /dev/null differ diff --git a/lib/signed/ServiceStack.xml b/lib/signed/ServiceStack.xml deleted file mode 100644 index fd1d004639a..00000000000 --- a/lib/signed/ServiceStack.xml +++ /dev/null @@ -1,5996 +0,0 @@ - - - - ServiceStack - - - - - Base class to create request filter attributes only for specific HTTP methods (GET, POST...) - - - - - Creates a new - - Defines when the filter should be executed - - - - This method is only executed if the HTTP method matches the property. - - The http request wrapper - The http response wrapper - The request DTO - - - - Create a ShallowCopy of this instance. - - - - - - Redirect to the https:// version of this url if not already. - - - - - Don't redirect when in DebugMode - - - - - Don't redirect if the request was a forwarded request, e.g. from a Load Balancer - - - - - Single threaded message handler that can process all messages - of a particular message type. - - - - - Process all messages pending - - - - - - Process messages from a single queue. - - - The queue to process - A predicate on whether to continue processing the next message if any - - - - - Get Current Stats for this Message Handler - - - - - - The type of the message this handler processes - - - - - Encapsulates creating a new message handler - - - - - Processes all messages in a Normal and Priority Queue. - Expects to be called in 1 thread. i.e. Non Thread-Safe. - - - - - - A convenient repository base class you can inherit from to reduce the boilerplate - with accessing a managed IDbConnection - - - - - A convenient base class for your injected service dependencies that reduces the boilerplate - with managed access to ServiceStack's built-in providers - - - - - Respond with a 'Soft redirect' so smart clients (e.g. ajax) have access to the response and - can decide whether or not they should redirect - - - - - Decorate the response with an additional client-side event to instruct participating - smart clients (e.g. ajax) with hints to transparently invoke client-side functionality - - - - - Shortcut to get the ResponseDTO whether it's bare or inside a IHttpResult - - - - - - - Alias of AsDto - - - - - Shortcut to get the ResponseDTO whether it's bare or inside a IHttpResult - - - TResponse if found; otherwise null - - - - Alias of AsDto - - - - - Whether the response is an IHttpError or Exception - - - - - rangeHeader should be of the format "bytes=0-" or "bytes=0-12345" or "bytes=123-456" - - - - - Adds 206 PartialContent Status, Content-Range and Content-Length headers - - - - - Writes partial range as specified by start-end, from fromStream to toStream. - - - - - Service error logs are kept in 'urn:ServiceErrors:{ServiceName}' - - - - - Combined service error logs are maintained in 'urn:ServiceErrors:All' - - - - - RequestLogs service Route, default is /requestlogs - - - - - Turn On/Off Session Tracking - - - - - Turn On/Off Logging of Raw Request Body, default is Off - - - - - Turn On/Off Tracking of Responses - - - - - Turn On/Off Tracking of Exceptions - - - - - Size of InMemoryRollingRequestLogger circular buffer - - - - - Limit access to /requestlogs service to these roles - - - - - Change the RequestLogger provider. Default is InMemoryRollingRequestLogger - - - - - Don't log requests of these types. By default RequestLog's are excluded - - - - - Don't log request bodys for services with sensitive information. - By default Auth and Registration requests are hidden. - - - - - Generic + Useful IService base class - - - - - Resolve an alternate Web Service from ServiceStack's IOC container. - - - - - - - Dynamic Session Bag - - - - - Typed UserSession - - - - - Indicates that the request dto, which is associated with this attribute, - requires authentication. - - - - - Restrict authentication to a specific . - For example, if this attribute should only permit access - if the user is authenticated with , - you should set this property to . - - - - - Redirect the client to a specific URL if authentication failed. - If this property is null, simply `401 Unauthorized` is returned. - - - - - Enable the authentication feature and configure the AuthService. - - - - - Inject logic into existing services by introspecting the request and injecting your own - validation logic. Exceptions thrown will have the same behaviour as if the service threw it. - - If a non-null object is returned the request will short-circuit and return that response. - - The instance of the service - GET,POST,PUT,DELETE - - Response DTO; non-null will short-circuit execution and return that response - - - - Public API entry point to authenticate via code - - - null; if already autenticated otherwise a populated instance of AuthResponse - - - - The specified may change as a side-effect of this method. If - subsequent code relies on current data be sure to reload - the session istance via . - - - - - Remove the Users Session - - - - - - - - The entry point for all AuthProvider providers. Runs inside the AuthService so exceptions are treated normally. - Overridable so you can provide your own Auth implementation. - - - - - Determine if the current session is already authenticated with this AuthProvider - - - - - Allows specifying a global fallback config that if exists is formatted with the Provider as the first arg. - E.g. this appSetting with the TwitterAuthProvider: - oauth.CallbackUrl="http://localhost:11001/auth/{0}" - Would result in: - oauth.CallbackUrl="http://localhost:11001/auth/twitter" - - - - - - Remove the Users Session - - - - - - - - Saves the Auth Tokens for this request. Called in OnAuthenticated(). - Overrideable, the default behaviour is to call IUserAuthRepository.CreateOrMergeAuthSession(). - - - - - Base class for entity validator classes. - - The type of the object being validated - - - - Defines a validator for a particualr type. - - - - - - Defines a validator for a particular type. - - - - - Validates the specified instance - - - A ValidationResult containing any validation failures - - - - Validates the specified instance. - - A ValidationContext - A ValidationResult object containy any validation failures. - - - - Creates a hook to access various meta data properties - - A IValidatorDescriptor object which contains methods to access metadata - - - - Checks to see whether the validator can validate objects of the specified type - - - - - Validates the specified instance. - - The instance to validate - A ValidationResult object containing any validation failures. - - - - Sets the cascade mode for all rules within this validator. - - - - - Validates the specified instance - - The object to validate - A ValidationResult object containing any validation failures - - - - Validates the specified instance. - - Validation Context - A ValidationResult object containing any validation failures. - - - - Adds a rule to the current validator. - - - - - - Creates a that can be used to obtain metadata about the current validator. - - - - - Defines a validation rule for a specify property. - - - RuleFor(x => x.Surname)... - - The type of property being validated - The expression representing the property to validate - an IRuleBuilder instance on which validators can be defined - - - - Defines a custom validation rule using a lambda expression. - If the validation rule fails, it should return a instance of a ValidationFailure - If the validation rule succeeds, it should return null. - - A lambda that executes custom validation rules. - - - - Defines a custom validation rule using a lambda expression. - If the validation rule fails, it should return an instance of ValidationFailure - If the validation rule succeeds, it should return null. - - A lambda that executes custom validation rules - - - - Defines a RuleSet that can be used to group together several validators. - - The name of the ruleset. - Action that encapsulates the rules in the ruleset. - - - - Defines a RuleSet that can be used to provide specific validation rules for specific HTTP methods (GET, POST...) - - The HTTP methods where this rule set should be used. - Action that encapuslates the rules in the ruleset. - - - - Defines a condition that applies to several rules - - The condition that should apply to multiple rules - Action that encapsulates the rules. - - - - - Defiles an inverse condition that applies to several rules - - The condition that should be applied to multiple rules - Action that encapsulates the rules - - - - Returns an enumerator that iterates through the collection of validation rules. - - - A that can be used to iterate through the collection. - - 1 - - - - Sets the cascade mode for all rules within this validator. - - - - - Create a Facebook App at: https://developers.facebook.com/apps - The Callback URL for your app should match the CallbackUrl provided. - - - - - The entry point for all AuthProvider providers. Runs inside the AuthService so exceptions are treated normally. - Overridable so you can provide your own Auth implementation. - - - - - - - - - Sets the CallbackUrl and session.ReferrerUrl if not set and initializes the session tokens for this AuthProvider - - - - - - - - - Download Yammer User Info given its ID. - - - The Yammer User ID. - - - The User info in JSON format. - - - - Yammer provides a method to retrieve current user information via - "https://www.yammer.com/api/v1/users/current.json". - - - However, to ensure consistency with the rest of the Auth codebase, - the explicit URL will be used, where [:id] denotes the User ID: - "https://www.yammer.com/api/v1/users/[:id].json" - - - Refer to: https://developer.yammer.com/restapi/ for full documentation. - - - - - - Thread-safe In memory UserAuth data store so it can be used without a dependency on Redis. - - - - - Creates the required missing tables or DB schema - - - - - Create new Registration - - - - - Logic to update UserAuth from Registration info, not enabled on OnPut because of security. - - - - - Thank you Martijn - http://www.dijksterhuis.org/creating-salted-hash-values-in-c/ - - - - - Create an app at https://dev.twitter.com/apps to get your ConsumerKey and ConsumerSecret for your app. - The Callback URL for your app should match the CallbackUrl provided. - - - - - Creates the required missing tables or DB schema - - - - - The ServiceStack Yammer OAuth provider. - - - - This provider is loosely based on the existing ServiceStack's Facebook OAuth provider. - - - For the full info on Yammer's OAuth2 authentication flow, refer to: - https://developer.yammer.com/authentication/#a-oauth2 - - - Note: Add these to your application / web config settings under appSettings and replace - values as appropriate. - - - - - - - - - ]]> - - - - - - The OAuth provider name / identifier. - - - - - Initializes a new instance of the class. - - - The application settings (in web.config). - - - - - Authenticate against Yammer OAuth endpoint. - - - The auth service. - - - The session. - - - The request. - - - The . - - - - - Load the UserAuth info into the session. - - - The User session. - - - The OAuth tokens. - - - The auth info. - - - - - Load the UserOAuth info into the session. - - - The auth session. - - - The OAuth tokens. - - - - - Gets or sets the Yammer OAuth client id. - - - - - Gets or sets the Yammer OAuth client secret. - - - - - Gets or sets the Yammer OAuth pre-auth url. - - - - - The Yammer User's email addresses. - - - - - Gets or sets the email address type (e.g. primary). - - - - - Gets or sets the email address. - - - - - Removes items from cache that have keys matching the specified wildcard pattern - - Cache client - The wildcard, where "*" means any sequence of characters and "?" means any single character. - - - - Removes items from the cache based on the specified regular expression pattern - - Cache client - Regular expression pattern to search cache keys - - - - Add value with specified key to the cache, and set the cache entry to never expire. - - - - - Stores The value with key only if such key doesn't exist at the server yet. - - - - - Adds or replaces the value with key, and sets the cache entry to never expire. - - - - - Adds or replaces the value with key. - - - - - Adds or replaces the value with key. - - - - - Replace the value with specified key if it exists, and set the cache entry to never expire. - - - - - Replace the value with specified key if it exists. - - - - - Add the value with key to the cache, set to never expire. - - - - - Add or replace the value with key to the cache, set to never expire. - - - - - Replace the value with key in the cache, set to never expire. - - - - - Add the value with key to the cache, set to expire at specified DateTime. - - This method examines the DateTimeKind of expiresAt to determine if conversion to - universal time is needed. The version of Add that takes a TimeSpan expiration is faster - than using this method with a DateTime of Kind other than Utc, and is not affected by - ambiguous local time during daylight savings/standard time transition. - - - - Add or replace the value with key to the cache, set to expire at specified DateTime. - - This method examines the DateTimeKind of expiresAt to determine if conversion to - universal time is needed. The version of Set that takes a TimeSpan expiration is faster - than using this method with a DateTime of Kind other than Utc, and is not affected by - ambiguous local time during daylight savings/standard time transition. - - - - Replace the value with key in the cache, set to expire at specified DateTime. - - This method examines the DateTimeKind of expiresAt to determine if conversion to - universal time is needed. The version of Replace that takes a TimeSpan expiration is faster - than using this method with a DateTime of Kind other than Utc, and is not affected by - ambiguous local time during daylight savings/standard time transition. - - - - Add the value with key to the cache, set to expire after specified TimeSpan. - - - - - Add or replace the value with key to the cache, set to expire after specified TimeSpan. - - - - - Replace the value with key in the cache, set to expire after specified TimeSpan. - - - - - Create new instance of CacheEntry. - - - - UTC time at which CacheEntry expires. - - - - Would've preferred to use [assembly: ContractNamespace] attribute but it is not supported in Mono - - - - - More familiar name for the new crowd. - - - - - The tier lets you specify a retrieving a setting with the tier prefix first before falling back to the original key. - E.g a tier of 'Live' looks for 'Live.{Key}' or if not found falls back to '{Key}'. - - - - - Returns string if exists, otherwise null - - - - - - - Provides a common interface for Settings providers such as - ConfigurationManager or Azure's RoleEnvironment. The only - requirement is that if the implementation cannot find the - specified key, the return value must be null - - The key for the setting - The string value of the specified key, or null if the key - was invalid - - - - Gets the nullable app setting. - - - - - Gets the app setting. - - - - - Determines wheter the Config section identified by the sectionName exists. - - - - - Returns AppSetting[key] if exists otherwise defaultValue - - - - - Returns AppSetting[key] if exists otherwise defaultValue, for non-string values - - - - - Gets the connection string setting. - - - - - Gets the connection string. - - - - - Gets the list from app setting. - - - - - Gets the dictionary from app setting. - - - - - Get the static Parse(string) method on the type supplied - - - - - Gets the constructor info for T(string) if exists. - - - - - Returns the value returned by the 'T.Parse(string)' method if exists otherwise 'new T(string)'. - e.g. if T was a TimeSpan it will return TimeSpan.Parse(textValue). - If there is no Parse Method it will attempt to create a new instance of the destined type - - - - - Plugin adds support for Cross-origin resource sharing (CORS, see http://www.w3.org/TR/access-control/). - CORS allows to access resources from different domain which usually forbidden by origin policy. - - - - - Represents a default constructor with Allow Origin equals to "*", Allowed GET, POST, PUT, DELETE, OPTIONS request and allowed "Content-Type" header. - - - - - Attribute marks that specific response class has support for Cross-origin resource sharing (CORS, see http://www.w3.org/TR/access-control/). CORS allows to access resources from different domain which usually forbidden by origin policy. - - - - - Represents a default constructor with Allow Origin equals to "*", Allowed GET, POST, PUT, DELETE, OPTIONS request and allowed "Content-Type" header. - - - - - Change the default HTML view or template used for the HTML response of this service - - - - - Class that can be used to find all the validators from a collection of types. - - - - - Creates a scanner that works on a sequence of types. - - - - - Finds all the validators in the specified assembly. - - - - - Finds all the validators in the assembly containing the specified type. - - - - - Performs the specified action to all of the assembly scan results. - - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - 1 - - - - Result of performing a scan. - - - - - Creates an instance of an AssemblyScanResult. - - - - - Validator interface type, eg IValidator<Foo> - - - - - Concrete type that implements the InterfaceType, eg FooValidator. - - - - - Implementation of IValidatorFactory that looks for ValidatorAttribute instances on the specified type in order to provide the validator instance. - - - - - Gets validators for a particular type. - - - - - Gets the validator for the specified type. - - - - - Gets the validator for the specified type. - - - - - Gets a validator for the appropriate type. - - - - - Gets a validator for the appropriate type. - - - - - Validator attribute to define the class that will describe the Validation rules - - - - - Creates an instance of the ValidatorAttribute allowing a validator type to be specified. - - - - - The type of the validator used to validate the current type. - - - - - Associates an instance of IValidator with the current property rule and is used to validate each item within the collection. - - The validator to use - - - - Rule builder - - - - - - - Rule builder - - - - - - - Associates a validator with this the property for this rule builder. - - The validator to set - - - - - Associates an instance of IValidator with the current property rule. - - The validator to use - - - - Represents an object that is configurable. - - Type of object being configured - Return type - - - - Configures the current object. - - Action to configure the object. - - - - - Extension methods that provide the default set of validators. - - - - - Defines a 'not null' validator on the current rule builder. - Validation will fail if the property is null. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - - - - - Defines a 'not empty' validator on the current rule builder. - Validation will fail if the property is null, an empty or the default value for the type (for example, 0 for integers) - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - - - - - Defines a length validator on the current rule builder, but only for string properties. - Validation will fail if the length of the string is outside of the specifed range. The range is inclusive. - - Type of object being validated - The rule builder on which the validator should be defined - - - - - Defines a length validator on the current rule builder, but only for string properties. - Validation will fail if the length of the string is not equal to the length specified. - - Type of object being validated - The rule builder on which the validator should be defined - - - - - Defines a regular expression validator on the current rule builder, but only for string properties. - Validation will fail if the value returned by the lambda does not match the regular expression. - - Type of object being validated - The rule builder on which the validator should be defined - The regular expression to check the value against. - - - - - Defines a regular expression validator on the current rule builder, but only for string properties. - Validation will fail if the value returned by the lambda is not a valid email address. - - Type of object being validated - The rule builder on which the validator should be defined - - - - - Defines a 'not equal' validator on the current rule builder. - Validation will fail if the specified value is equal to the value of the property. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value to compare - Equality comparer to use - - - - - Defines a 'not equal' validator on the current rule builder using a lambda to specify the value. - Validation will fail if the value returned by the lambda is equal to the value of the property. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - A lambda expression to provide the comparison value - Equality Comparer to use - - - - - Defines an 'equals' validator on the current rule builder. - Validation will fail if the specified value is not equal to the value of the property. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value to compare - Equality Comparer to use - - - - - Defines an 'equals' validator on the current rule builder using a lambda to specify the comparison value. - Validation will fail if the value returned by the lambda is not equal to the value of the property. - - The type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - A lambda expression to provide the comparison value - Equality comparer to use - - - - - Defines a predicate validator on the current rule builder using a lambda expression to specify the predicate. - Validation will fail if the specified lambda returns false. - Validation will succeed if the specifed lambda returns true. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - A lambda expression specifying the predicate - - - - - Defines a predicate validator on the current rule builder using a lambda expression to specify the predicate. - Validation will fail if the specified lambda returns false. - Validation will succeed if the specifed lambda returns true. - This overload accepts the object being validated in addition to the property being validated. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - A lambda expression specifying the predicate - - - - - Defines a predicate validator on the current rule builder using a lambda expression to specify the predicate. - Validation will fail if the specified lambda returns false. - Validation will succeed if the specifed lambda returns true. - This overload accepts the object being validated in addition to the property being validated. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - A lambda expression specifying the predicate - - - - - Defines a 'less than' validator on the current rule builder. - The validation will succeed if the property value is less than the specified value. - The validation will fail if the property value is greater than or equal to the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Defines a 'less than' validator on the current rule builder. - The validation will succeed if the property value is less than the specified value. - The validation will fail if the property value is greater than or equal to the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Defines a 'less than or equal' validator on the current rule builder. - The validation will succeed if the property value is less than or equal to the specified value. - The validation will fail if the property value is greater than the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Defines a 'less than or equal' validator on the current rule builder. - The validation will succeed if the property value is less than or equal to the specified value. - The validation will fail if the property value is greater than the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Defines a 'greater than' validator on the current rule builder. - The validation will succeed if the property value is greater than the specified value. - The validation will fail if the property value is less than or equal to the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Defines a 'greater than' validator on the current rule builder. - The validation will succeed if the property value is greater than the specified value. - The validation will fail if the property value is less than or equal to the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Defines a 'greater than or equal' validator on the current rule builder. - The validation will succeed if the property value is greater than or equal the specified value. - The validation will fail if the property value is less than the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Defines a 'greater than or equal' validator on the current rule builder. - The validation will succeed if the property value is greater than or equal the specified value. - The validation will fail if the property value is less than the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Defines a 'less than' validator on the current rule builder using a lambda expression. - The validation will succeed if the property value is less than the specified value. - The validation will fail if the property value is greater than or equal to the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - A lambda that should return the value being compared - - - - - Defines a 'less than' validator on the current rule builder using a lambda expression. - The validation will succeed if the property value is less than the specified value. - The validation will fail if the property value is greater than or equal to the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - A lambda that should return the value being compared - - - - - Defines a 'less than or equal' validator on the current rule builder using a lambda expression. - The validation will succeed if the property value is less than or equal to the specified value. - The validation will fail if the property value is greater than the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Defines a 'less than or equal' validator on the current rule builder using a lambda expression. - The validation will succeed if the property value is less than or equal to the specified value. - The validation will fail if the property value is greater than the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Defines a 'less than' validator on the current rule builder using a lambda expression. - The validation will succeed if the property value is greater than the specified value. - The validation will fail if the property value is less than or equal to the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Defines a 'less than' validator on the current rule builder using a lambda expression. - The validation will succeed if the property value is greater than the specified value. - The validation will fail if the property value is less than or equal to the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Defines a 'less than' validator on the current rule builder using a lambda expression. - The validation will succeed if the property value is greater than or equal the specified value. - The validation will fail if the property value is less than the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Defines a 'less than' validator on the current rule builder using a lambda expression. - The validation will succeed if the property value is greater than or equal the specified value. - The validation will fail if the property value is less than the specified value. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The value being compared - - - - - Validates certain properties of the specified instance. - - The current validator - The object to validate - Expressions to specify the properties to validate - A ValidationResult object containing any validation failures - - - - Validates certain properties of the specified instance. - - The object to validate - The names of the properties to validate. - A ValidationResult object containing any validation failures. - - - - Performs validation and then throws an exception if validation fails. - - - - - Defines an 'inclusive between' validator on the current rule builder, but only for properties of types that implement IComparable. - Validation will fail if the value of the property is outside of the specifed range. The range is inclusive. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The lowest allowed value - The highest allowed value - - - - - Defines an 'inclusive between' validator on the current rule builder, but only for properties of types that implement IComparable. - Validation will fail if the value of the property is outside of the specifed range. The range is inclusive. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The lowest allowed value - The highest allowed value - - - - - Defines an 'exclusive between' validator on the current rule builder, but only for properties of types that implement IComparable. - Validation will fail if the value of the property is outside of the specifed range. The range is exclusive. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The lowest allowed value - The highest allowed value - - - - - Defines an 'exclusive between' validator on the current rule builder, but only for properties of types that implement IComparable. - Validation will fail if the value of the property is outside of the specifed range. The range is exclusive. - - Type of object being validated - Type of property being validated - The rule builder on which the validator should be defined - The lowest allowed value - The highest allowed value - - - - - Defines a credit card validator for the current rule builder that ensures that the specified string is a valid credit card number. - - - - - Default options that can be used to configure a validator. - - - - - Specifies the cascade mode for failures. - If set to 'Stop' then execution of the rule will stop once the first validator in the chain fails. - If set to 'Continue' then all validators in the chain will execute regardless of failures. - - - - - Specifies a custom action to be invoked when the validator fails. - - - - - - - - - - Specifies a custom error message to use if validation fails. - - The current rule - The error message to use - - - - - Specifies a custom error message to use if validation fails. - - The current rule - The error message to use - Additional arguments to be specified when formatting the custom error message. - - - - - Specifies a custom error message to use if validation fails. - - The current rule - The error message to use - Additional property values to be included when formatting the custom error message. - - - - - Specifies a custom error message resource to use when validation fails. - - The current rule - The resource to use as an expression, eg () => Messages.MyResource - - - - - Specifies a custom error message resource to use when validation fails. - - The current rule - The resource to use as an expression, eg () => Messages.MyResource - Custom message format args - - - - - Specifies a custom error message resource to use when validation fails. - - The current rule - The resource to use as an expression, eg () => Messages.MyResource - Custom message format args - - - - - Specifies a custom error message resource to use when validation fails. - - The current rule - The resource to use as an expression, eg () => Messages.MyResource - The resource accessor builder to use. - - - - - Specifies a custom error code to use when validation fails - - The current rule - The error code to use - - - - - Specifies a condition limiting when the validator should run. - The validator will only be executed if the result of the lambda returns true. - - The current rule - A lambda expression that specifies a condition for when the validator should run - Whether the condition should be applied to the current rule or all rules in the chain - - - - - Specifies a condition limiting when the validator should not run. - The validator will only be executed if the result of the lambda returns false. - - The current rule - A lambda expression that specifies a condition for when the validator should not run - Whether the condition should be applied to the current rule or all rules in the chain - - - - - Specifies a custom property name to use within the error message. - - The current rule - The property name to use - - - - - Specifies a localized name for the error message. - - The current rule - The resource to use as an expression, eg () => Messages.MyResource - Resource accessor builder to use - - - - Overrides the name of the property associated with this rule. - NOTE: This is a considered to be an advanced feature. 99% of the time that you use this, you actually meant to use WithName. - - The current rule - The property name to use - - - - - Specifies custom state that should be stored alongside the validation message when validation fails for this rule. - - - - - - - - - - Specifies how rules should cascade when one fails. - - - - - When a rule fails, execution continues to the next rule. - - - - - When a rule fails, validation is stopped and all other rules in the chain will not be executed. - - - - - Specifies where a When/Unless condition should be applied - - - - - Applies the condition to all validators declared so far in the chain. - - - - - Applies the condition to the current validator only. - - - - - Validator implementation that allows rules to be defined without inheriting from AbstractValidator. - - - - public class Customer { - public int Id { get; set; } - public string Name { get; set; } - - public static readonly InlineValidator<Customer> Validator = new InlineValidator<Customer> { - v => v.RuleFor(x => x.Name).NotNull(), - v => v.RuleFor(x => x.Id).NotEqual(0), - } - } - - - - - - - Allows configuration of the validator. - - - - - Delegate that specifies configuring an InlineValidator. - - - - - Default validator selector that will execute all rules that do not belong to a RuleSet. - - - - - Determines whether or not a rule should execute. - - - - - Determines whether or not a rule should execute. - - The rule - Property path (eg Customer.Address.Line1) - Contextual information - Whether or not the validator can execute. - - - - Determines whether or not a rule should execute. - - The rule - Property path (eg Customer.Address.Line1) - Contextual information - Whether or not the validator can execute. - - - - Custom IValidationRule for performing custom logic. - - - - - - Defines a rule associated with a property which can have multiple validators. - - - - - Performs validation using a validation context and returns a collection of Validation Failures. - - Validation Context - A collection of validation failures - - - - The validators that are grouped under this rule. - - - - - Name of the rule-set to which this rule belongs. - - - - - Creates a new DelegateValidator using the specified function to perform validation. - - - - - Creates a new DelegateValidator using the specified function to perform validation. - - - - - Performs validation using a validation context and returns a collection of Validation Failures. - - Validation Context - A collection of validation failures - - - - Performs validation using a validation context and returns a collection of Validation Failures. - - Validation Context - A collection of validation failures - - - - Rule set to which this rule belongs. - - - - - The validators that are grouped under this rule. - - - - - Useful extensions - - - - - Gets a MemberInfo from a member expression. - - - - - Gets a MemberInfo from a member expression. - - - - - Splits pascal case, so "FooBar" would become "Foo Bar" - - - - - Helper method to construct a constant expression from a constant. - - Type of object being validated - Type of property being validated - The value being compared - - - - - Based on a child validator and a propery rule, infers whether the validator should be wrapped in a ChildValidatorAdaptor or a CollectionValidatorAdaptor - - - - - Instancace cache. - TODO: This isn't actually completely thread safe. It would be much better to use ConcurrentDictionary, but this isn't available in Silverlight/WP7. - - - - - Gets or creates an instance using Activator.CreateInstance - - The type to instantiate - The instantiated object - - - - Gets or creates an instance using a custom factory - - The type to instantiate - The custom factory - The instantiated object - - - - Selects validators that are associated with a particular property. - - - - - Creates a new instance of MemberNameValidatorSelector. - - - - - Determines whether or not a rule should execute. - - The rule - Property path (eg Customer.Address.Line1) - Contextual information - Whether or not the validator can execute. - - - - Creates a MemberNameValidatorSelector from a collection of expressions. - - - - - Assists in the construction of validation messages. - - - - - Default Property Name placeholder. - - - - - Adds a value for a validation message placeholder. - - - - - - - - Appends a property name to the message. - - The name of the property - - - - - Adds additional arguments to the message for use with standard string placeholders. - - Additional arguments - - - - - Constructs the final message from the specified template. - - Message template - The message with placeholders replaced with their appropriate values - - - - Represents a chain of properties - - - - - Creates a new PropertyChain. - - - - - Creates a new PropertyChain based on another. - - - - - Adds a MemberInfo instance to the chain - - Member to add - - - - Adds a property name to the chain - - Name of the property to add - - - - Adds an indexer to the property chain. For example, if the following chain has been constructed: - Parent.Child - then calling AddIndexer(0) would convert this to: - Parent.Child[0] - - - - - - Creates a string representation of a property chain. - - - - - Checks if the current chain is the child of another chain. - For example, if chain1 were for "Parent.Child" and chain2 were for "Parent.Child.GrandChild" then - chain2.IsChildChainOf(chain1) would be true. - - The parent chain to compare - True if the current chain is the child of the other chain, otherwise false - - - - Builds a property path. - - - - - Defines a rule associated with a property. - - - - - Creates a new property rule. - - Property - Function to get the property value - Lambda expression used to create the rule - Function to get the cascade mode. - Type to validate - Container type that owns the property - - - - Creates a new property rule from a lambda expression. - - - - - Creates a new property rule from a lambda expression. - - - - - Adds a validator to the rule. - - - - - Replaces a validator in this rule. Used to wrap validators. - - - - - Display name for the property. - - - - - Performs validation using a validation context and returns a collection of Validation Failures. - - Validation Context - A collection of validation failures - - - - Invokes a property validator using the specified validation context. - - - - - Property associated with this rule. - - - - - Function that can be invoked to retrieve the value of the property. - - - - - Expression that was used to create the rule. - - - - - String source that can be used to retrieve the display name (if null, falls back to the property name) - - - - - Rule set that this rule belongs to (if specified) - - - - - Function that will be invoked if any of the validators associated with this rule fail. - - - - - The current validator being configured by this rule. - - - - - Type of the property being validated - - - - - Cascade mode for this rule. - - - - - Validators associated with this rule. - - - - - Returns the property name for the property being validated. - Returns null if it is not a property being validated (eg a method call) - - - - - Builds a validation rule and constructs a validator. - - Type of object being validated - Type of property being validated - - - - Rule builder that starts the chain - - - - - - - Creates a new instance of the RuleBuilder class. - - - - - Sets the validator associated with the rule. - - The validator to set - - - - - Sets the validator associated with the rule. Use with complex properties where an IValidator instance is already declared for the property type. - - The validator to set - - - - The rule being created by this RuleBuilder. - - - - - Selects validators that belong to the specified rulesets. - - - - - Creates a new instance of the RulesetValidatorSelector. - - - - - Determines whether or not a rule should execute. - - The rule - Property path (eg Customer.Address.Line1) - Contextual information - Whether or not the validator can execute. - - - - Provides metadata about a validator. - - - - - Gets the name display name for a property. - - - - - Gets a collection of validators grouped by property. - - - - - Gets validators for a particular property. - - - - - Gets rules for a property. - - - - - Builds a delegate for retrieving a localised resource from a resource type and property name. - - - - - Gets a function that can be used to retrieve a message from a resource type and resource name. - - - - - Builds a delegate for retrieving a localised resource from a resource type and property name. - - - - - Builds a function used to retrieve the resource. - - - - - Gets the PropertyInfo for a resource. - ResourceType and ResourceName are ref parameters to allow derived types - to replace the type/name of the resource before the delegate is constructed. - - - - - Implemenetation of IResourceAccessorBuilder that can fall back to the default resource provider. - - - - - Gets the PropertyInfo for a resource. - ResourceType and ResourceName are ref parameters to allow derived types - to replace the type/name of the resource before the delegate is constructed. - - - - - Provides error message templates - - - - - Construct the error message template - - Error message template - - - - The name of the resource if localized. - - - - - The type of the resource provider if localized. - - - - - Represents a localized string. - - - - - Creates a new instance of the LocalizedErrorMessageSource class using the specified resource name and resource type. - - The resource type - The resource name - Strategy used to construct the resource accessor - - - - Creates an IErrorMessageSource from an expression: () => MyResources.SomeResourceName - - The expression - Strategy used to construct the resource accessor - Error message source - - - - Construct the error message template - - Error message template - - - - The name of the resource if localized. - - - - - The type of the resource provider if localized. - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to '{PropertyName}' is not a valid credit card number.. - - - - - Looks up a localized string similar to '{PropertyName}' is not a valid email address.. - - - - - Looks up a localized string similar to '{PropertyName}' should be equal to '{PropertyValue}'.. - - - - - Looks up a localized string similar to '{PropertyName}' must be {MaxLength} characters in length. You entered {TotalLength} characters.. - - - - - Looks up a localized string similar to '{PropertyName}' must be between {From} and {To} (exclusive). You entered {Value}.. - - - - - Looks up a localized string similar to '{PropertyName}' must be greater than '{ComparisonValue}'.. - - - - - Looks up a localized string similar to '{PropertyName}' must be greater than or equal to '{ComparisonValue}'.. - - - - - Looks up a localized string similar to '{PropertyName}' must be between {From} and {To}. You entered {Value}.. - - - - - Looks up a localized string similar to '{PropertyName}' must be between {MinLength} and {MaxLength} characters. You entered {TotalLength} characters.. - - - - - Looks up a localized string similar to '{PropertyName}' must be less than '{ComparisonValue}'.. - - - - - Looks up a localized string similar to '{PropertyName}' must be less than or equal to '{ComparisonValue}'.. - - - - - Looks up a localized string similar to '{PropertyName}' should not be empty.. - - - - - Looks up a localized string similar to '{PropertyName}' should not be equal to '{PropertyValue}'.. - - - - - Looks up a localized string similar to '{PropertyName}' must not be empty.. - - - - - Looks up a localized string similar to The specified condition was not met for '{PropertyName}'.. - - - - - Looks up a localized string similar to '{PropertyName}' is not in the correct format.. - - - - - Represents a static string. - - - - - Creates a new StringErrorMessageSource using the specified error message as the error template. - - The error message template. - - - - Construct the error message template - - Error message template - - - - The name of the resource if localized. - - - - - The type of the resource provider if localized. - - - - - Creates a new validation failure. - - - - - Creates a new ValidationFailure. - - - - - Creates a textual representation of the failure. - - - - - The name of the property. - - - - - The error message - - - - - The error code - - - - - The property value that caused the failure. - - - - - Custom state associated with the failure. - - - - - Used for providing metadata about a validator. - - - - - A custom property validator. - This interface should not be implemented directly in your code as it is subject to change. - Please inherit from PropertyValidator instead. - - - - - Creates an error validation result for this validator. - - The validator context - Returns an error validation result. - - - - Ensures that the property value is a valid credit card number. - - - - - Provides access to the anti-forgery system, which provides protection against - Cross-site Request Forgery (XSRF, also called CSRF) attacks. - - - - - Generates an anti-forgery token for this request. This token can - be validated by calling the Validate() method. - - An HTML string corresponding to an <input type="hidden"> - element. This element should be put inside a <form>. - - This method has a side effect: it may set a response cookie. - - - - - Generates an anti-forgery token pair (cookie and form token) for this request. - This method is similar to GetHtml(), but this method gives the caller control - over how to persist the returned values. To validate these tokens, call the - appropriate overload of Validate. - - The anti-forgery token - if any - that already existed - for this request. May be null. The anti-forgery system will try to reuse this cookie - value when generating a matching form token. - Will contain a new cookie value if the old cookie token - was null or invalid. If this value is non-null when the method completes, the caller - must persist this value in the form of a response cookie, and the existing cookie value - should be discarded. If this value is null when the method completes, the existing - cookie value was valid and needn't be modified. - The value that should be stored in the <form>. The caller - should take care not to accidentally swap the cookie and form tokens. - - Unlike the GetHtml() method, this method has no side effect. The caller - is responsible for setting the response cookie and injecting the returned - form token as appropriate. - - - - - Validates an anti-forgery token that was supplied for this request. - The anti-forgery token may be generated by calling GetHtml(). - - - Throws an HttpAntiForgeryException if validation fails. - - - - - Validates an anti-forgery token pair that was generated by the GetTokens method. - - The token that was supplied in the request cookie. - The token that was supplied in the request form body. - - Throws an HttpAntiForgeryException if validation fails. - - - - - Provides programmatic configuration for the anti-forgery token system. - - - - - Specifies an object that can provide additional data to put into all - generated tokens and that can validate additional data in incoming - tokens. - - - - - Specifies the name of the cookie that is used by the anti-forgery - system. - - - If an explicit name is not provided, the system will automatically - generate a name. - - - - - Specifies whether SSL is required for the anti-forgery system - to operate. If this setting is 'true' and a non-SSL request - comes into the system, all anti-forgery APIs will fail. - - - - - Specifies whether the anti-forgery system should skip checking - for conditions that might indicate misuse of the system. Please - use caution when setting this switch, as improper use could open - security holes in the application. - - - Setting this switch will disable several checks, including: - - Identity.IsAuthenticated = true without Identity.Name being set - - special-casing claims-based identities - - - - - If claims-based authorization is in use, specifies the claim - type from the identity that is used to uniquely identify the - user. If this property is set, all claims-based identities - must return unique values for this claim type. - - - If claims-based authorization is in use and this property has - not been set, the anti-forgery system will automatically look - for claim types "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" - and "http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider". - - - - - Allows providing or validating additional custom data for anti-forgery tokens. - For example, the developer could use this to supply a nonce when the token is - generated, then he could validate the nonce when the token is validated. - - - The anti-forgery system already embeds the client's username within the - generated tokens. This interface provides and consumes supplemental - data. If an incoming anti-forgery token contains supplemental data but no - additional data provider is configured, the supplemental data will not be - validated. - - - - - Provides additional data to be stored for the anti-forgery tokens generated - during this request. - - Information about the current request. - Supplemental data to embed within the anti-forgery token. - - - - Validates additional data that was embedded inside an incoming anti-forgery - token. - - Information about the current request. - Supplemental data that was embedded within the token. - True if the data is valid; false if the data is invalid. - - - - Initializes a new instance of the class. - - The base scope. - - The dictionary to use as a storage. Since the dictionary would be used as-is, we expect the implementer to - use the same key-value comparison logic as we do here. - - - - - Custom comparer for the context dictionaries - The comparer treats strings as a special case, performing case insesitive comparison. - This guaratees that we remain consistent throughout the chain of contexts since PageData dictionary - behaves in this manner. - - - - - End a ServiceStack Request - - - - - End a ServiceStack Request - - - - - End a HttpHandler Request - - - - - End a HttpHandler Request - - - - - End a ServiceStack Request with no content - - - - - Main container class for components, supporting container hierarchies and - lifetime management of instances. - - - - - Initializes a new empty container. - - - - - Creates a child container of the current one, which exposes its - current service registration to the new child container. - - - - - Disposes the container and all instances owned by it (see - ), as well as all child containers - created through . - - - - - Registers a service instance with the container. This instance - will have and - behavior. - Service instance to use. - - - - Registers a named service instance with the container. This instance - will have and - behavior. - Name of the service to register.Service instance to use. - - - - Retrieves a function that can be used to lazily resolve an instance - of the service when needed. - Type of the service to retrieve.The function that can resolve to the service instance when invoked.The requested service has not been registered previously. - - - - - - - - - - - - - - - - - - - - - - Retrieves a function that can be used to lazily resolve an instance - of the service with the given name when needed. - Type of the service to retrieve.Name of the service to retrieve.The function that can resolve to the service instance with the given name when invoked.The requested service with the given name has not been registered previously. - - - - Retrieves a function that can be used to lazily resolve an instance - of the service of the given type, name and service constructor arguments when needed. - Name of the service to retrieve.The function that can resolve to the service instance with the given and service constructor arguments name when invoked.The requested service with the given name and constructor arguments has not been registered previously. - - - - Retrieves a function that can be used to lazily resolve an instance - of the service of the given type, name and service constructor arguments when needed. - Name of the service to retrieve.The function that can resolve to the service instance with the given and service constructor arguments name when invoked.The requested service with the given name and constructor arguments has not been registered previously. - - - - Retrieves a function that can be used to lazily resolve an instance - of the service of the given type, name and service constructor arguments when needed. - Name of the service to retrieve.The function that can resolve to the service instance with the given and service constructor arguments name when invoked.The requested service with the given name and constructor arguments has not been registered previously. - - - - Retrieves a function that can be used to lazily resolve an instance - of the service of the given type, name and service constructor arguments when needed. - Name of the service to retrieve.The function that can resolve to the service instance with the given and service constructor arguments name when invoked.The requested service with the given name and constructor arguments has not been registered previously. - - - - Retrieves a function that can be used to lazily resolve an instance - of the service of the given type, name and service constructor arguments when needed. - Name of the service to retrieve.The function that can resolve to the service instance with the given and service constructor arguments name when invoked.The requested service with the given name and constructor arguments has not been registered previously. - - - - Retrieves a function that can be used to lazily resolve an instance - of the service of the given type, name and service constructor arguments when needed. - Name of the service to retrieve.The function that can resolve to the service instance with the given and service constructor arguments name when invoked.The requested service with the given name and constructor arguments has not been registered previously. - - - - Registers the given service by providing a factory delegate to - instantiate it. - The service type to register.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Registers the given service by providing a factory delegate that receives arguments to - instantiate it. - The service type to register.First argument that should be passed to the factory delegate to create the instace.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Registers the given service by providing a factory delegate that receives arguments to - instantiate it. - The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Registers the given service by providing a factory delegate that receives arguments to - instantiate it. - The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Registers the given service by providing a factory delegate that receives arguments to - instantiate it. - The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.Fourth argument that should be passed to the factory delegate to create the instace.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Registers the given service by providing a factory delegate that receives arguments to - instantiate it. - The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.Fourth argument that should be passed to the factory delegate to create the instace.Fifth argument that should be passed to the factory delegate to create the instace.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Registers the given service by providing a factory delegate that receives arguments to - instantiate it. - The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.Fourth argument that should be passed to the factory delegate to create the instace.Fifth argument that should be passed to the factory delegate to create the instace.Sixth argument that should be passed to the factory delegate to create the instace.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Registers the given named service by providing a factory delegate to - instantiate it. - The service type to register.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Registers the given named service by providing a factory delegate that receives arguments to - instantiate it. - The service type to register.First argument that should be passed to the factory delegate to create the instace.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Registers the given named service by providing a factory delegate that receives arguments to - instantiate it. - The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Registers the given named service by providing a factory delegate that receives arguments to - instantiate it. - The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Registers the given named service by providing a factory delegate that receives arguments to - instantiate it. - The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.Fourth argument that should be passed to the factory delegate to create the instace.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Registers the given named service by providing a factory delegate that receives arguments to - instantiate it. - The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.Fourth argument that should be passed to the factory delegate to create the instace.Fifth argument that should be passed to the factory delegate to create the instace.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Registers the given named service by providing a factory delegate that receives arguments to - instantiate it. - The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.Fourth argument that should be passed to the factory delegate to create the instace.Fifth argument that should be passed to the factory delegate to create the instace.Sixth argument that should be passed to the factory delegate to create the instace.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. - - - - Resolves the given service by type, without passing any arguments for - its construction. - Type of the service to retrieve.The resolved service instance.The given service could not be resolved. - - - - Resolves the given service by type, passing the given arguments - for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. - - - - Resolves the given service by type, passing the given arguments - for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. - - - - Resolves the given service by type, passing the given arguments - for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. - - - - Resolves the given service by type, passing the given arguments - for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. - - - - Resolves the given service by type, passing the given arguments - for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. - - - - Resolves the given service by type, passing the given arguments - for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace.Sixth argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. - - - - Resolves the given service by type and name, without passing arguments for its initialization. - Type of the service to retrieve.The resolved service instance.The given service could not be resolved. - - - - Resolves the given service by type and name, passing the given arguments - for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. - - - - Resolves the given service by type and name, passing the given arguments - for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. - - - - Resolves the given service by type and name, passing the given arguments - for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. - - - - Resolves the given service by type and name, passing the given arguments - for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. - - - - Resolves the given service by type and name, passing the given arguments - for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. - - - - Resolves the given service by type and name, passing the given arguments - for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace.Sixth argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. - - - - Attempts to resolve the given service by type, without passing arguments for its initialization. - Type of the service to retrieve. - The resolved service instance or if it cannot be resolved. - - - - - Attempts to resolve the given service by type, passing the - given arguments arguments for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace. - The resolved service instance or if it cannot be resolved. - - - - - Attempts to resolve the given service by type, passing the - given arguments arguments for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace. - The resolved service instance or if it cannot be resolved. - - - - - Attempts to resolve the given service by type, passing the - given arguments arguments for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace. - The resolved service instance or if it cannot be resolved. - - - - - Attempts to resolve the given service by type, passing the - given arguments arguments for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace. - The resolved service instance or if it cannot be resolved. - - - - - Attempts to resolve the given service by type, passing the - given arguments arguments for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace. - The resolved service instance or if it cannot be resolved. - - - - - Attempts to resolve the given service by type, passing the - given arguments arguments for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace.Sixth argument to pass to the factory delegate that may create the instace. - The resolved service instance or if it cannot be resolved. - - - - - Attempts to resolve the given service by type and name, without passing - arguments arguments for its initialization. - Type of the service to retrieve. - The resolved service instance or if it cannot be resolved. - - - - - Attempts to resolve the given service by type and name, passing the - given arguments arguments for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace. - The resolved service instance or if it cannot be resolved. - - - - - Attempts to resolve the given service by type and name, passing the - given arguments arguments for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace. - The resolved service instance or if it cannot be resolved. - - - - - Attempts to resolve the given service by type and name, passing the - given arguments arguments for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace. - The resolved service instance or if it cannot be resolved. - - - - - Attempts to resolve the given service by type and name, passing the - given arguments arguments for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace. - The resolved service instance or if it cannot be resolved. - - - - - Attempts to resolve the given service by type and name, passing the - given arguments arguments for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace. - The resolved service instance or if it cannot be resolved. - - - - - Attempts to resolve the given service by type and name, passing the - given arguments arguments for its initialization. - Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace.Sixth argument to pass to the factory delegate that may create the instace. - The resolved service instance or if it cannot be resolved. - - - - - Register an autowired dependency - - - - - - Register an autowired dependency as a separate type - - - - - - Alias for RegisterAutoWiredAs - - - - - - Auto-wires an existing instance, - ie all public properties are tried to be resolved. - - - - - - Generates a function which creates and auto-wires . - - - - - - - - Auto-wires an existing instance of a specific type. - The auto-wiring progress is also cached to be faster - when calling next time with the same type. - - - - - - Default owner for new registrations. by default. - - - - - Default reuse scope for new registrations. by default. - - - - - Enable the Registration feature and configure the RegistrationService. - - - - - Registers the type in the IoC container and - adds auto-wiring to the specified type. - - - - - - - Registers the type in the IoC container and - adds auto-wiring to the specified type. - The reuse scope is set to none (transient). - - - - - - Registers the types in the IoC container and - adds auto-wiring to the specified types. - The reuse scope is set to none (transient). - - - - - - Register a singleton instance as a runtime type - - - - - Encapsulates a method that has five parameters and returns a value of the - type specified by the parameter. - - - - - Encapsulates a method that has six parameters and returns a value of the - type specified by the parameter. - - - - - Encapsulates a method that has seven parameters and returns a value of the - type specified by the parameter. - - - - - Helper interface used to hide the base - members from the fluent API to make for much cleaner - Visual Studio intellisense experience. - - - - - - - - - - - - - - - - - Funqlets are a set of components provided as a package - to an existing container (like a module). - - - - - Configure the given container with the - registrations provided by the funqlet. - - Container to register. - - - - Interface used by plugins to contribute registrations - to an existing container. - - - - - Determines who is responsible for disposing instances - registered with a container. - - - - - Container should dispose provided instances when it is disposed. This is the - default. - - - - - Container does not dispose provided instances. - - - - - Default owner, which equals . - - - - - Exception thrown by the container when a service cannot be resolved. - - - - - Initializes the exception with the service that could not be resolved. - - - - - Initializes the exception with the service (and its name) that could not be resolved. - - - - - Initializes the exception with an arbitrary message. - - - - - Determines visibility and reuse of instances provided by the container. - - - - - Instances are reused within a container hierarchy. Instances - are created (if necessary) in the container where the registration - was performed, and are reused by all descendent containers. - - - - - Instances are reused only at the given container. Descendent - containers do not reuse parent container instances and get - a new instance at their level. - - - - - Each request to resolve the dependency will result in a new - instance being returned. - - - - - Instaces are reused within the given request - - - - - Default scope, which equals . - - - - - Fluent API for customizing the registration of a service. - - - - - Fluent API that exposes both - and owner (). - - - - - Fluent API that allows specifying the reuse instances. - - - - - Specifies how instances are reused within a container or hierarchy. Default - scope is . - - - - - Fluent API that allows specifying the owner of instances - created from a registration. - - - - - Specifies the owner of instances created from this registration. Default - owner is . - - - - - Ownership setting for the service. - - - - - Reuse scope setting for the service. - - - - - The container where the entry was registered. - - - - - Specifies the owner for instances, which determines how - they will be disposed. - - - - - Specifies the scope for instances, which determines - visibility of instances across containers and hierarchies. - - - - - Fluent API for customizing the registration of a service. - - - - - Fluent API that allows registering an initializer for the - service. - - - - - Specifies an initializer that should be invoked after - the service instance has been created by the factory. - - - - - The Func delegate that creates instances of the service. - - - - - The cached service instance if the scope is or - . - - - - - The Func delegate that initializes the object after creation. - - - - - Clones the service entry assigning the to the - . Does not copy the . - - - - - BaseProfilerProvider. This providers some helper methods which provide access to - internals not otherwise available. - To use, override the , and - methods. - - - - - A provider used to create instances and maintain the current instance. - - - - - Starts a new MiniProfiler and sets it to be current. By the end of this method - should return the new MiniProfiler. - - - - - Ends the current profiling session, if one exists. - - - When true, clears the for this HttpContext, allowing profiling to - be prematurely stopped and discarded. Useful for when a specific route does not need to be profiled. - - - - - Returns the current MiniProfiler. This is used by . - - - - - - Starts a new MiniProfiler and sets it to be current. By the end of this method - should return the new MiniProfiler. - - - - - Stops the current MiniProfiler (if any is currently running). - should be called if is false - - If true, any current results will be thrown away and nothing saved - - - - Returns the current MiniProfiler. This is used by . - - - - - - Sets to be active (read to start profiling) - This should be called once a new MiniProfiler has been created. - - The profiler to set to active - If is null - - - - Stops the profiler and marks it as inactive. - - The profiler to stop - True if successful, false if Stop had previously been called on this profiler - If is null - - - - Calls to save the current - profiler using the current storage settings - - - - - - Categories of sql statements. - - - - - Unknown - - - - - DML statements that alter database state, e.g. INSERT, UPDATE - - - - - Statements that return a single record - - - - - Statements that iterate over a result set - - - - - A callback for ProfiledDbConnection and family - - - - - Called when a command starts executing - - - - - - - Called when a reader finishes executing - - - - - - - - Called when a reader is done iterating through the data - - - - - - Called when an error happens during execution of a command - - - - - - - - True if the profiler instance is active - - - - - This is a micro-cache; suitable when the number of terms is controllable (a few hundred, for example), - and strictly append-only; you cannot change existing values. All key matches are on **REFERENCE** - equality. The type is fully thread-safe. - - - - - If the underlying command supports BindByName, this sets/clears the underlying - implementation accordingly. This is required to support OracleCommand from dapper-dot-net - - - - - Wraps a database connection, allowing sql execution timings to be collected when a session is started. - - - - - This will be made private; use - - - - - This will be made private; use - - - - - Returns a new that wraps , - providing query execution profiling. If profiler is null, no profiling will occur. - - Your provider-specific flavor of connection, e.g. SqlConnection, OracleConnection - The currently started or null. - Determines whether the ProfiledDbConnection will dispose the underlying connection. - - - - The underlying, real database connection to your db provider. - - - - - The current profiler instance; could be null. - - - - - The raw connection this is wrapping - - - - - Wrapper for a db provider factory to enable profiling - - - - - Every provider factory must have an Instance public field - - - - - Used for db provider apis internally - - - - - Allow to re-init the provider factory. - - - - - - - proxy - - - - - - - proxy - - - - - proxy - - - - - proxy - - - - - proxy - - - - - proxy - - - - - proxy - - - - - proxy - - - - - proxy - - - - - proxy - - - - - Common extension methods to use only in this project - - - - - Answers true if this String is either null or empty. - - - - - Answers true if this String is neither null or empty. - - - - - Removes trailing / characters from a path and leaves just one - - - - - Removes any leading / characters from a path - - - - - Removes any leading / characters from a path - - - - - Serializes to a json string. - - - - - Gets part of a stack trace containing only methods we care about. - - - - - Gets the current formatted and filted stack trace. - - Space separated list of methods - - - - Identifies users based on ip address. - - - - - Provides functionality to identify which user is profiling a request. - - - - - Returns a string to identify the user profiling the current 'request'. - - The current HttpRequest being profiled. - - - - Returns the paramter HttpRequest's client ip address. - - - - - A single MiniProfiler can be used to represent any number of steps/levels in a call-graph, via Step() - - Totally baller. - - - - Starts when this profiler is instantiated. Each step will use this Stopwatch's current ticks as - their starting time. - - - - - Creates and starts a new MiniProfiler for the root , filtering steps to . - - - - - Returns the 's and this profiler recorded. - - - - - Returns true if Ids match. - - - - - Returns hashcode of Id. - - - - - Obsolete - used for serialization. - - - - - Walks the hierarchy contained in this profiler, starting with , and returns each Timing found. - - - - - Returns milliseconds based on Stopwatch's Frequency. - - - - - Starts a new MiniProfiler based on the current . This new profiler can be accessed by - - - - - - Ends the current profiling session, if one exists. - - - When true, clears the for this HttpContext, allowing profiling to - be prematurely stopped and discarded. Useful for when a specific route does not need to be profiled. - - - - - Returns an that will time the code between its creation and disposal. Use this method when you - do not wish to include the MvcMiniProfiler namespace for the extension method. - - A descriptive name for the code that is encapsulated by the resulting IDisposable's lifetime. - This step's visibility level; allows filtering when is called. - - - - Returns the css and javascript includes needed to display the MiniProfiler results UI. - - Which side of the page the profiler popup button should be displayed on (defaults to left) - Whether to show trivial timings by default (defaults to false) - Whether to show time the time with children column by default (defaults to false) - The maximum number of trace popups to show before removing the oldest (defaults to 15) - xhtml rendering mode, ensure script tag is closed ... etc - when true, shows buttons to minimize and clear MiniProfiler results - Script and link elements normally; an empty string when there is no active profiling session. - - - - Renders the current to json. - - - - - Renders the parameter to json. - - - - - Deserializes the json string parameter to a . - - - - - Create a DEEP clone of this object - - - - - - Returns all currently open commands on this connection - - - - - Returns all results contained in all child steps. - - - - - Contains any sql statements that are executed, along with how many times those statements are executed. - - - - - Adds to the current . - - - - - Returns the number of sql statements of that were executed in all s. - - - - - Identifies this Profiler so it may be stored/cached. - - - - - A display name for this profiling session. - - - - - When this profiler was instantiated. - - - - - Where this profiler was run. - - - - - Allows filtering of steps based on what - the steps are created with. - - - - - The first that is created and started when this profiler is instantiated. - All other s will be children of this one. - - - - - A string identifying the user/client that is profiling this request. Set - with an -implementing class to provide a custom value. - - - If this is not set manually at some point, the implementation will be used; - by default, this will be the current request's ip address. - - - - - Returns true when this MiniProfiler has been viewed by the that recorded it. - - - Allows POSTs that result in a redirect to be profiled. implementation - will keep a list of all profilers that haven't been fetched down. - - - - - For unit testing, returns the timer. - - - - - Milliseconds, to one decimal place, that this MiniProfiler ran. - - - - - Returns true when or any of its are . - - - - - Returns true when all child s are . - - - - - Any Timing step with a duration less than or equal to this will be hidden by default in the UI; defaults to 2.0 ms. - - - - - Ticks since this MiniProfiler was started. - - - - - Points to the currently executing Timing. - - - - - Gets the currently running MiniProfiler for the current HttpContext; null if no MiniProfiler was ed. - - - - - Contains information about queries executed during this profiling session. - - - - - Milliseconds, to one decimal place, that this MiniProfiler was executing sql. - - - - - Returns true when we have profiled queries. - - - - - Returns true when any child Timings have duplicate queries. - - - - - How many sql data readers were executed in all steps. - - - - - How many sql scalar queries were executed in all steps. - - - - - How many sql non-query statements were executed in all steps. - - - - - Various configuration properties. - - - - - Excludes the specified assembly from the stack trace output. - - The short name of the assembly. AssemblyName.Name - - - - Excludes the specified type from the stack trace output. - - The System.Type name to exclude - - - - Excludes the specified method name from the stack trace output. - - The name of the method - - - - Make sure we can at least store profiler results to the http runtime cache. - - - - - Assemblies to exclude from the stack trace report. - - - - - Types to exclude from the stack trace report. - - - - - Methods to exclude from the stack trace report. - - - - - The max length of the stack string to report back; defaults to 120 chars. - - - - - Any Timing step with a duration less than or equal to this will be hidden by default in the UI; defaults to 2.0 ms. - - - - - Dictates if the "time with children" column is displayed by default, defaults to false. - For a per-page override you can use .RenderIncludes(showTimeWithChildren: true/false) - - - - - Dictates if trivial timings are displayed by default, defaults to false. - For a per-page override you can use .RenderIncludes(showTrivial: true/false) - - - - - Determines how many traces to show before removing the oldest; defaults to 15. - For a per-page override you can use .RenderIncludes(maxTracesToShow: 10) - - - - - Dictates on which side of the page the profiler popup button is displayed; defaults to left. - For a per-page override you can use .RenderIncludes(position: RenderPosition.Left/Right) - - - - - Determines if min-max, clear, etc are rendered; defaults to false. - For a per-page override you can use .RenderIncludes(showControls: true/false) - - - - - By default, SqlTimings will grab a stack trace to help locate where queries are being executed. - When this setting is true, no stack trace will be collected, possibly improving profiler performance. - - - - - When is called, if the current request url contains any items in this property, - no profiler will be instantiated and no results will be displayed. - Default value is { "/ssr-", "/content/", "/scripts/", "/favicon.ico" }. - - - - - The path under which ALL routes are registered in, defaults to the application root. For example, "~/myDirectory/" would yield - "/myDirectory/ssr-includes.js" rather than just "/mini-profiler-includes.js" - Any setting here should be in APP RELATIVE FORM, e.g. "~/myDirectory/" - - - - - Understands how to save and load MiniProfilers. Used for caching between when - a profiling session ends and results can be fetched to the client, and for showing shared, full-page results. - - - The normal profiling session life-cycle is as follows: - 1) request begins - 2) profiler is started - 3) normal page/controller/request execution - 4) profiler is stopped - 5) profiler is cached with 's implementation of - 6) request ends - 7) page is displayed and profiling results are ajax-fetched down, pulling cached results from - 's implementation of - - - - - The formatter applied to the SQL being rendered (used only for UI) - - - - - Assembly version of this dank MiniProfiler. - - - - - The provider used to provider the current instance of a provider - This is also - - - - - A function that determines who can access the MiniProfiler results url. It should return true when - the request client has access, false for a 401 to be returned. HttpRequest parameter is the current request and - MiniProfiler parameter is the results that were profiled. - - - Both the HttpRequest and MiniProfiler parameters that will be passed into this function should never be null. - - - - - Allows switching out stopwatches for unit testing. - - - - - Categorizes individual steps to allow filtering. - - - - - Default level given to Timings. - - - - - Useful when profiling many items in a loop, but you don't wish to always see this detail. - - - - - Dictates on which side of the page the profiler popup button is displayed; defaults to left. - - - - - Profiler popup button is displayed on the left. - - - - - Profiler popup button is displayed on the right. - - - - - Contains helper methods that ease working with null s. - - - - - Wraps in a call and executes it, returning its result. - - The current profiling session or null. - Method to execute and profile. - The step name used to label the profiler results. - - - - - Returns an that will time the code between its creation and disposal. - - The current profiling session or null. - A descriptive name for the code that is encapsulated by the resulting IDisposable's lifetime. - This step's visibility level; allows filtering when is called. - - - - Adds 's hierarchy to this profiler's current Timing step, - allowing other threads, remote calls, etc. to be profiled and joined into this profiling session. - - - - - Returns an html-encoded string with a text-representation of ; returns "" when profiler is null. - - The current profiling session or null. - - - - Formats any SQL query with inline parameters, optionally including the value type - - - - - Takes a SqlTiming and returns a formatted SQL string, for parameter replacement, etc. - - - - - Return SQL the way you want it to look on the in the trace. Usually used to format parameters - - - Formatted SQL - - - - Creates a new Inline SQL Formatter, optionally including the parameter type info in comments beside the replaced value - - whether to include a comment after the value, indicating the type, e.g. /* @myParam DbType.Int32 */ - - - - Formats the SQL in a generic frieldly format, including the parameter type information in a comment if it was specified in the InlineFormatter constructor - - The SqlTiming to format - A formatted SQL string - - - - Returns a string representation of the parameter's value, including the type - - The parameter to get a value for - - - - - NOT IMPLEMENTED - will format statements with paramters in an Oracle friendly way - - - - - Does NOTHING, implement me! - - - - - Formats SQL server queries with a DECLARE up top for parameter values - - - - - Formats the SQL in a SQL-Server friendly way, with DECLARE statements for the parameters up top. - - The SqlTiming to format - A formatted SQL string - - - - Contains helper code to time sql statements. - - - - - Returns a new SqlProfiler to be used in the 'profiler' session. - - - - - Tracks when 'command' is started. - - - - - Returns all currently open commands on this connection - - - - - Finishes profiling for 'command', recording durations. - - - - - Called when 'reader' finishes its iterations and is closed. - - - - - The profiling session this SqlProfiler is part of. - - - - - Helper methods that allow operation on SqlProfilers, regardless of their instantiation. - - - - - Tracks when 'command' is started. - - - - - Finishes profiling for 'command', recording durations. - - - - - Called when 'reader' finishes its iterations and is closed. - - - - - Profiles a single sql execution. - - - - - Creates a new SqlTiming to profile 'command'. - - - - - Obsolete - used for serialization. - - - - - Returns a snippet of the sql command and the duration. - - - - - Returns true if Ids match. - - - - - Returns hashcode of Id. - - - - - Called when command execution is finished to determine this SqlTiming's duration. - - - - - Called when database reader is closed, ending profiling for SqlTimings. - - - - - To help with display, put some space around sammiched commas - - - - - Unique identifier for this SqlTiming. - - - - - Category of sql statement executed. - - - - - The sql that was executed. - - - - - The command string with special formatting applied based on MiniProfiler.Settings.SqlFormatter - - - - - Roughly where in the calling code that this sql was executed. - - - - - Offset from main MiniProfiler start that this sql began. - - - - - How long this sql statement took to execute. - - - - - When executing readers, how long it took to come back initially from the database, - before all records are fetched and reader is closed. - - - - - Stores any parameter names and values used by the profiled DbCommand. - - - - - Id of the Timing this statement was executed in. - - - Needed for database deserialization. - - - - - The Timing step that this sql execution occurred in. - - - - - True when other identical sql statements have been executed during this MiniProfiler session. - - - - - Information about a DbParameter used in the sql statement profiled by SqlTiming. - - - - - Returns true if this has the same parent , and as . - - - - - Returns the XOR of certain properties. - - - - - Which SqlTiming this Parameter was executed with. - - - - - Parameter name, e.g. "@routeName" - - - - - The value submitted to the database. - - - - - System.Data.DbType, e.g. "String", "Bit" - - - - - How large the type is, e.g. for string, size could be 4000 - - - - - Understands how to save MiniProfiler results to a MSSQL database, allowing more permanent storage and - querying of slow results. - - - - - Provides saving and loading s to a storage medium. - - - - - Stores under its . - - The results of a profiling session. - - Should also ensure the profiler is stored as being unviewed by its profiling . - - - - - Returns a from storage based on , which should map to . - - - Should also update that the resulting profiler has been marked as viewed by its profiling . - - - - - Returns a list of s that haven't been seen by . - - User identified by the current . - - - - Returns a new SqlServerDatabaseStorage object that will insert into the database identified by connectionString. - - - - - Saves 'profiler' to a database under its . - - - - - Returns the MiniProfiler identified by 'id' from the database or null when no MiniProfiler exists under that 'id'. - - - - - Returns a list of s that haven't been seen by . - - User identified by the current . - - - - Returns a DbConnection for your specific provider. - - - - - Returns a DbConnection already opened for execution. - - - - - Giving freshly selected collections, this method puts them in the correct - hierarchy under the 'result' MiniProfiler. - - - - - How we connect to the database used to save/load MiniProfiler results. - - - - - Understands how to store a to the with absolute expiration. - - - - - The string that prefixes all keys that MiniProfilers are saved under, e.g. - "mini-profiler-ecfb0050-7ce8-4bf1-bf82-2cb38e90e31e". - - - - - Returns a new HttpRuntimeCacheStorage class that will cache MiniProfilers for the specified duration. - - - - - Saves to the HttpRuntime.Cache under a key concated with - and the parameter's . - - - - - Returns the saved identified by . Also marks the resulting - profiler to true. - - - - - Returns a list of s that haven't been seen by . - - User identified by the current . - - - - Syncs access to runtime cache when adding a new list of ids for a user. - - - - - How long to cache each for (i.e. the absolute expiration parameter of - ) - - - - - An individual profiling step that can contain child steps. - - - - - Rebuilds all the parent timings on deserialization calls - - - - - Offset from parent MiniProfiler's creation that this Timing was created. - - - - - Creates a new Timing named 'name' in the 'profiler's session, with 'parent' as this Timing's immediate ancestor. - - - - - Obsolete - used for serialization. - - - - - Returns this Timing's Name. - - - - - Returns true if Ids match. - - - - - Returns hashcode of Id. - - - - - Adds arbitrary string 'value' under 'key', allowing custom properties to be stored in this Timing step. - - - - - Completes this Timing's duration and sets the MiniProfiler's Head up one level. - - - - - Add the parameter 'timing' to this Timing's Children collection. - - - Used outside this assembly for custom deserialization when creating an implementation. - - - - - Adds the parameter 'sqlTiming' to this Timing's SqlTimings collection. - - A sql statement profiling that was executed in this Timing step. - - Used outside this assembly for custom deserialization when creating an implementation. - - - - - Returns the number of sql statements of that were executed in this . - - - - - Unique identifer for this timing; set during construction. - - - - - Text displayed when this Timing is rendered. - - - - - How long this Timing step took in ms; includes any Timings' durations. - - - - - The offset from the start of profiling. - - - - - All sub-steps that occur within this Timing step. Add new children through - - - - - Stores arbitrary key/value strings on this Timing step. Add new tuples through . - - - - - Any queries that occurred during this Timing step. - - - - - Needed for database deserialization and JSON serialization. - - - - - Which Timing this Timing is under - the duration that this step takes will be added to its parent's duration. - - This will be null for the root (initial) Timing. - - - - Gets the elapsed milliseconds in this step without any children's durations. - - - - - Gets the aggregate elapsed milliseconds of all SqlTimings executed in this Timing, excluding Children Timings. - - - - - Returns true when this is less than the configured - , by default 2.0 ms. - - - - - Reference to the containing profiler, allowing this Timing to affect the Head and get Stopwatch readings. - - - - - Returns true when this Timing has inner Timing steps. - - - - - Returns true if this Timing step collected sql execution timings. - - - - - Returns true if any s executed in this step are detected as duplicate statements. - - - - - Returns true when this Timing is the first one created in a MiniProfiler session. - - - - - How far away this Timing is from the Profiler's Root. - - - - - How many sql data readers were executed in this Timing step. Does not include queries in any child Timings. - - - - - How many sql scalar queries were executed in this Timing step. Does not include queries in any child Timings. - - - - - How many sql non-query statements were executed in this Timing step. Does not include queries in any child Timings. - - - - - Understands how to route and respond to MiniProfiler UI urls. - - - - - Returns either includes' css/javascript or results' html. - - - - - Handles rendering static content files. - - - - - Handles rendering a previous MiniProfiler session, identified by its "?id=GUID" on the query. - - - - - Embedded resource contents keyed by filename. - - - - - Helper method that sets a proper 404 response code. - - - - - Try to keep everything static so we can easily be reused. - - - - - HttpContext based profiler provider. This is the default provider to use in a web context. - The current profiler is associated with a HttpContext.Current ensuring that profilers are - specific to a individual HttpRequest. - - - - - Public constructor. This also registers any UI routes needed to display results - - - - - Starts a new MiniProfiler and associates it with the current . - - - - - Ends the current profiling session, if one exists. - - - When true, clears the for this HttpContext, allowing profiling to - be prematurely stopped and discarded. Useful for when a specific route does not need to be profiled. - - - - - Makes sure 'profiler' has a Name, pulling it from route data or url. - - - - - Returns the current profiler - - - - - - Gets the currently running MiniProfiler for the current HttpContext; null if no MiniProfiler was ed. - - - - - WebRequestProfilerProvider specific configurations - - - - - Provides user identification for a given profiling request. - - - - - Indicates that the request dto, which is associated with this attribute, - can only execute, if the user has specific permissions. - - - - - Indicates that the request dto, which is associated with this attribute, - can only execute, if the user has specific roles. - - - - - Check all session is in all supplied roles otherwise a 401 HttpError is thrown - - - - - - - Indicates that the request dto, which is associated with this attribute, - can only execute, if the user has specific permissions. - - - - - Indicates that the request dto, which is associated with this attribute, - can only execute, if the user has any of the specified roles. - - - - - Check all session is in any supplied roles otherwise a 401 HttpError is thrown - - - - - - - Base class to create response filter attributes only for specific HTTP methods (GET, POST...) - - - - - Creates a new - - Defines when the filter should be executed - - - - This method is only executed if the HTTP method matches the property. - - The http request wrapper - The http response wrapper - The response DTO - - - - Create a ShallowCopy of this instance. - - - - - - If they don't have an ICacheClient configured use an In Memory one. - - - - - Creates instance using straight Resolve approach. - This will throw an exception if resolution fails - - - - - Creates instance using the TryResolve approach if tryResolve = true. - Otherwise uses Resolve approach, which will throw an exception if resolution fails - - - - - Sets a persistent cookie which never expires - - - - - Sets a session cookie which expires after the browser session closes - - - - - Deletes a specified cookie by setting its value to empty and expiration to -1 days - - - - - Lets you Register new Services and the optional restPaths will be registered against - this default Request Type - - - - - ASP.NET or HttpListener ServiceStack host - - - - - Register dependency in AppHost IOC on Startup - - - - - AutoWired Registration of an interface with a concrete type in AppHost IOC on Startup. - - - - - Allows the clean up for executed autowired services and filters. - Calls directly after services and filters are executed. - - - - - Called at the end of each request. Enables Request Scope. - - - - - Register an Adhoc web service on Startup - - - - - Apply plugins to this AppHost - - - - - Create a service runner for IService actions - - - - - Resolve the absolute url for this request - - - - - Resolve localized text, returns itself by default. - - - - - Register user-defined custom routes. - - - - - Register custom ContentType serializers - - - - - Add Request Filters, to be applied before the dto is deserialized - - - - - Add Request Filters for HTTP Requests - - - - - Add Response Filters for HTTP Responses - - - - - Add Request Filters for MQ/TCP Requests - - - - - Add Response Filters for MQ/TCP Responses - - - - - Add alternative HTML View Engines - - - - - Provide an exception handler for unhandled exceptions - - - - - Provide an exception handler for un-caught exceptions - - - - - Skip the ServiceStack Request Pipeline and process the returned IHttpHandler instead - - - - - Provide a catch-all handler that doesn't match any routes - - - - - Use a Custom Error Handler for handling specific error HttpStatusCodes - - - - - Provide a custom model minder for a specific Request DTO - - - - - The AppHost config - - - - - List of pre-registered and user-defined plugins to be enabled in this AppHost - - - - - Virtual access to file resources - - - - - Executed immediately before a Service is executed. Use return to change the request DTO used, must be of the same type. - - - - - Executed immediately after a service is executed. Use return to change response used. - - - - - Occurs when the Service throws an Exception. - - - - - Occurs when an exception is thrown whilst processing a request. - - - - - Apply PreRequest Filters for participating Custom Handlers, e.g. RazorFormat, MarkdownFormat, etc - - - - - Applies the raw request filters. Returns whether or not the request has been handled - and no more processing should be done. - - - - - - Applies the request filters. Returns whether or not the request has been handled - and no more processing should be done. - - - - - - Applies the response filters. Returns whether or not the request has been handled - and no more processing should be done. - - - - - - The AppHost.Container. Note: it is not thread safe to register dependencies after AppStart. - - - - - Naming convention for the ResponseStatus property name on the response DTO - - - - - Create an instance of the service response dto type and inject it with the supplied responseStatus - - - - - - - - - - - - - - - - - Override to provide additional/less context about the Service Exception. - By default the request is serialized and appended to the ResponseStatus StackTrace. - - - - - Scans the supplied Assemblies to infer REST paths and HTTP verbs. - - The instance. - - The assemblies with REST services. - - The same instance; - never . - - - - Configure ServiceStack to have ISession support - - - - - Create the active Session or Permanent Session Id cookie. - - - - - - Create both Permanent and Session Id cookies and return the active sessionId - - - - - - This class interecepts 401 requests and changes them to 402 errors. When this happens the FormAuthentication module - will no longer hijack it and redirect back to login because it is a 402 error, not a 401. - When the request ends, this class sets the status code back to 401 and everything works as it should. - - PathToSupress is the path inside your website where the above swap should happen. - - If you can build for .net 4.5, you do not have to do this swap. You can take advantage of a new flag (SuppressFormsAuthenticationRedirect) - that tells the FormAuthenticationModule to not redirect, which also means you will not need the EndRequest code. - - - - - Converts the validation result to an error result which will be serialized by ServiceStack in a clean and human-readable way. - - The validation result - - - - - Converts the validation result to an error exception which will be serialized by ServiceStack in a clean and human-readable way - if the returned exception is thrown. - - The validation result - - - - - Creates a new instance of the RulesetValidatorSelector. - - - - - Determines whether or not a rule should execute. - - The rule - Property path (eg Customer.Address.Line1) - Contextual information - Whether or not the validator can execute. - - - - Activate the validation mechanism, so every request DTO with an existing validator - will be validated. - - The app host - - - - Override to provide additional/less context about the Service Exception. - By default the request is serialized and appended to the ResponseStatus StackTrace. - - - - - Auto-scans the provided assemblies for a - and registers it in the provided IoC container. - - The IoC container - The assemblies to scan for a validator - - - - In Memory repository for files. Useful for testing. - - - - - Context to capture IService action - - - - - Get an IAppHost container. - Note: Registering dependencies should only be done during setup/configuration - stage and remain immutable there after for thread-safety. - - - - - - - Ensure the same instance is used for subclasses - - - - - Called before page is executed - - - - - Called after page is executed but before it's merged with the - website template if any. - - - - - Don't HTML encode safe output - - - - - - - Return the output of a different view with the specified name - using the supplied model - - - - - - - - Resolve registered Assemblies - - - - - - Reference to MarkdownViewEngine - - - - - The AppHost so you can access configuration and resolve dependencies, etc. - - - - - This precompiled Markdown page with Metadata - - - - - ASP.NET MVC's HtmlHelper - - - - - All variables passed to and created by your page. - The Response DTO is stored and accessible via the 'Model' variable. - - All variables and outputs created are stored in ScopeArgs which is what's available - to your website template. The Generated page is stored in the 'Body' variable. - - - - - Whether HTML or Markdown output is requested - - - - - The Response DTO - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to Container service is built-in and read-only.. - - - - - Looks up a localized string similar to Service type {0} does not inherit or implement {1}.. - - - - - Looks up a localized string similar to Required dependency of type {0} named '{1}' could not be resolved.. - - - - - Looks up a localized string similar to Required dependency of type {0} could not be resolved.. - - - - - Looks up a localized string similar to Unknown scope.. - - - - - Gets string value from Items[name] then Cookies[name] if exists. - Useful when *first* setting the users response cookie in the request filter. - To access the value for this initial request you need to set it in Items[]. - - string value or null if it doesn't exist - - - - Gets request paramater string value by looking in the following order: - - QueryString[name] - - FormData[name] - - Cookies[name] - - Items[name] - - string value or null if it doesn't exist - - - * - Input: http://localhost:96/Cambia3/Temp/Test.aspx/path/info?q=item#fragment - - Some HttpRequest path and URL properties: - Request.ApplicationPath: /Cambia3 - Request.CurrentExecutionFilePath: /Cambia3/Temp/Test.aspx - Request.FilePath: /Cambia3/Temp/Test.aspx - Request.Path: /Cambia3/Temp/Test.aspx/path/info - Request.PathInfo: /path/info - Request.PhysicalApplicationPath: D:\Inetpub\wwwroot\CambiaWeb\Cambia3\ - Request.QueryString: /Cambia3/Temp/Test.aspx/path/info?query=arg - Request.Url.AbsolutePath: /Cambia3/Temp/Test.aspx/path/info - Request.Url.AbsoluteUri: http://localhost:96/Cambia3/Temp/Test.aspx/path/info?query=arg - Request.Url.Fragment: - Request.Url.Host: localhost - Request.Url.LocalPath: /Cambia3/Temp/Test.aspx/path/info - Request.Url.PathAndQuery: /Cambia3/Temp/Test.aspx/path/info?query=arg - Request.Url.Port: 96 - Request.Url.Query: ?query=arg - Request.Url.Scheme: http - Request.Url.Segments: / - Cambia3/ - Temp/ - Test.aspx/ - path/ - info - * - - - - Use this to treat Request.Items[] as a cache by returning pre-computed items to save - calculating them multiple times. - - - - - Sets a persistent cookie which never expires - - - - - Sets a session cookie which expires after the browser session closes - - - - - Sets a persistent cookie which expires after the given time - - - - - Sets a persistent cookie with an expiresAt date - - - - - Deletes a specified cookie by setting its value to empty and expiration to -1 days - - - - - Returns the optimized result for the IRequestContext. - Does not use or store results in any cache. - - - - - - - - Overload for the method returning the most - optimized result based on the MimeType and CompressionType from the IRequestContext. - - - - - Overload for the method returning the most - optimized result based on the MimeType and CompressionType from the IRequestContext. - How long to cache for, null is no expiration - - - - - Clears all the serialized and compressed caches set - by the 'Resolve' method for the cacheKey provided - - - - - - - - Store an entry in the IHttpRequest.Items Dictionary - - - - - Get an entry from the IHttpRequest.Items Dictionary - - - - - For performance withPathInfoParts should already be a lower case string - to minimize redundant matching operations. - - - - - - - - For performance withPathInfoParts should already be a lower case string - to minimize redundant matching operations. - - - - - - - - - The number of segments separated by '/' determinable by path.Split('/').Length - e.g. /path/to/here.ext == 3 - - - - - The total number of segments after subparts have been exploded ('.') - e.g. /path/to/here.ext == 4 - - - - - Provide for quick lookups based on hashes that can be determined from a request url - - - - - Execute MQ - - - - - Execute MQ with requestContext - - - - - Execute using empty RequestContext - - - - - Execute HTTP - - - - - Gets the name of the base most type in the heirachy tree with the same. - - We get an exception when trying to create a schema with multiple types of the same name - like when inheriting from a DataContract with the same name. - - The type. - - - - - Inherit from this class if you want to host your web services inside an - ASP.NET application. - - - - - Inherit from this class if you want to host your web services inside a - Console Application, Windows Service, etc. - - Usage of HttpListener allows you to host webservices on the same port (:80) as IIS - however it requires admin user privillages. - - - - - Wrapper class for the HTTPListener to allow easier access to the - server, for start and stop management and event routing of the actual - inbound requests. - - - - - Starts the Web Service - - - A Uri that acts as the base that the server is listening on. - Format should be: http://127.0.0.1:8080/ or http://127.0.0.1:8080/somevirtual/ - Note: the trailing slash is required! For more info see the - HttpListener.Prefixes property on MSDN. - - - - - Shut down the Web Service - - - - - Overridable method that can be used to implement a custom hnandler - - - - - - Reserves the specified URL for non-administrator users and accounts. - http://msdn.microsoft.com/en-us/library/windows/desktop/cc307223(v=vs.85).aspx - - Reserved Url if the process completes successfully - - - - Exécute les tâches définies par l'application associées à la libération ou à la redéfinition des ressources non managées. - - 2 - - - - Load Embedded Resource Templates in ServiceStack. - To get ServiceStack to use your own instead just add a copy of one or more of the following to your Web Root: - ~/Templates/IndexOperations.html - ~/Templates/OperationControl.html - ~/Templates/HtmlFormat.html - - - - - when true, (most) bare plain URLs are auto-hyperlinked - WARNING: this is a significant deviation from the markdown spec - - - - - when true, RETURN becomes a literal newline - WARNING: this is a significant deviation from the markdown spec - - - - - use ">" for HTML output, or " />" for XHTML output - - - - - when true, problematic URL characters like [, ], (, and so forth will be encoded - WARNING: this is a significant deviation from the markdown spec - - - - - when false, email addresses will never be auto-linked - WARNING: this is a significant deviation from the markdown spec - - - - - when true, bold and italic require non-word characters on either side - WARNING: this is a significant deviation from the markdown spec - - - - - Markdown is a text-to-HTML conversion tool for web writers. - Markdown allows you to write using an easy-to-read, easy-to-write plain text format, - then convert it to structurally valid XHTML (or HTML). - - - - - Tabs are automatically converted to spaces as part of the transform - this constant determines how "wide" those tabs become in spaces - - - - - Create a new Markdown instance using default options - - - - - Create a new Markdown instance and optionally load options from a configuration - file. There they should be stored in the appSettings section, available options are: - - Markdown.StrictBoldItalic (true/false) - Markdown.EmptyElementSuffix (">" or " />" without the quotes) - Markdown.LinkEmails (true/false) - Markdown.AutoNewLines (true/false) - Markdown.AutoHyperlink (true/false) - Markdown.EncodeProblemUrlCharacters (true/false) - - - - - - Create a new Markdown instance and set the options from the MarkdownOptions object. - - - - - maximum nested depth of [] and () supported by the transform; implementation detail - - - - - In the static constuctor we'll initialize what stays the same across all transforms. - - - - - Transforms the provided Markdown-formatted text to HTML; - see http://en.wikipedia.org/wiki/Markdown - - - The order in which other subs are called here is - essential. Link and image substitutions need to happen before - EscapeSpecialChars(), so that any *'s or _'s in the a - and img tags get encoded. - - - - - Perform transformations that form block-level tags like paragraphs, headers, and list items. - - - - - Perform transformations that occur *within* block-level tags like paragraphs, headers, and list items. - - - - - splits on two or more newlines, to form "paragraphs"; - each paragraph is then unhashed (if it is a hash and unhashing isn't turned off) or wrapped in HTML p tag - - - - - Reusable pattern to match balanced [brackets]. See Friedl's - "Mastering Regular Expressions", 2nd Ed., pp. 328-331. - - - - - Reusable pattern to match balanced (parens). See Friedl's - "Mastering Regular Expressions", 2nd Ed., pp. 328-331. - - - - - Strips link definitions from text, stores the URLs and titles in hash references. - - - ^[id]: url "optional title" - - - - - derived pretty much verbatim from PHP Markdown - - - - - replaces any block-level HTML blocks with hash entries - - - - - returns an array of HTML tokens comprising the input string. Each token is - either a tag (possibly with nested, tags contained therein, such - as <a href="<MTFoo>">, or a run of text between tags. Each element of the - array is a two-element array; the first is either 'tag' or 'text'; the second is - the actual value. - - - - - Turn Markdown link shortcuts into HTML anchor tags - - - [link text](url "title") - [link text][id] - [id] - - - - - Turn Markdown image shortcuts into HTML img tags. - - - ![alt text][id] - ![alt text](url "optional title") - - - - - Turn Markdown headers into HTML header tags - - - Header 1 - ======== - - Header 2 - -------- - - # Header 1 - ## Header 2 - ## Header 2 with closing hashes ## - ... - ###### Header 6 - - - - - Turn Markdown horizontal rules into HTML hr tags - - - *** - * * * - --- - - - - - - - - - Turn Markdown lists into HTML ul and ol and li tags - - - - - Process the contents of a single ordered or unordered list, splitting it - into individual list items. - - - - - /// Turn Markdown 4-space indented code into HTML pre code blocks - - - - - Turn Markdown `code spans` into HTML code tags - - - - - Turn Markdown *italics* and **bold** into HTML strong and em tags - - - - - Turn markdown line breaks (two space at end of line) into HTML break tags - - - - - Turn Markdown > quoted blocks into HTML blockquote blocks - - - - - Turn angle-delimited URLs into HTML anchor tags - - - <http://www.example.com> - - - - - Remove one level of line-leading spaces - - - - - encodes email address randomly - roughly 10% raw, 45% hex, 45% dec - note that @ is always encoded and : never is - - - - - Encode/escape certain Markdown characters inside code blocks and spans where they are literals - - - - - Encode any ampersands (that aren't part of an HTML entity) and left or right angle brackets - - - - - Encodes any escaped characters such as \`, \*, \[ etc - - - - - swap back in all the special characters we've hidden - - - - - escapes Bold [ * ] and Italic [ _ ] characters - - - - - hex-encodes some unusual "problem" chars in URLs to avoid URL detection problems - - - - - Within tags -- meaning between < and > -- encode [\ ` * _] so they - don't conflict with their use in Markdown for code, italics and strong. - We're replacing each such character with its corresponding hash - value; this is likely overkill, but it should prevent us from colliding - with the escape values by accident. - - - - - convert all tabs to _tabWidth spaces; - standardizes line endings from DOS (CR LF) or Mac (CR) to UNIX (LF); - makes sure text ends with a couple of newlines; - removes any blank lines (only spaces) in the text - - - - - this is to emulate what's evailable in PHP - - - - - use ">" for HTML output, or " />" for XHTML output - - - - - when false, email addresses will never be auto-linked - WARNING: this is a significant deviation from the markdown spec - - - - - when true, bold and italic require non-word characters on either side - WARNING: this is a significant deviation from the markdown spec - - - - - when true, RETURN becomes a literal newline - WARNING: this is a significant deviation from the markdown spec - - - - - when true, (most) bare plain URLs are auto-hyperlinked - WARNING: this is a significant deviation from the markdown spec - - - - - when true, problematic URL characters like [, ], (, and so forth will be encoded - WARNING: this is a significant deviation from the markdown spec - - - - - current version of MarkdownSharp; - see http://code.google.com/p/markdownsharp/ for the latest code or to contribute - - - - - Render Markdown for text/markdown and text/plain ContentTypes - - - - - Used in Unit tests - - - - - - Non ASP.NET requests - - - - - - - - ASP.NET requests - - - - - - Writes to response. - Response headers are customizable by implementing IHasOptions an returning Dictionary of Http headers. - - The response. - Whether or not it was implicity handled by ServiceStack's built-in handlers. - The default action. - The serialization context. - Add prefix to response body if any - Add suffix to response body if any - - - - - Highly optimized code to find if GZIP is supported from: - - http://dotnetperls.com/gzip-request - - Other resources for GZip, deflate resources: - - http://www.west-wind.com/Weblog/posts/10564.aspx - - http://www.west-wind.com/WebLog/posts/102969.aspx - - ICSharpCode - - - - - Changes the links for the servicestack/metadata page - - - - - Non ASP.NET requests - - - - - ASP.NET requests - - - - - Keep default file contents in-memory - - - - - - Call to signal the completion of a ServiceStack-handled Request - - - - - Resolves and auto-wires a ServiceStack Service from a ASP.NET HttpContext. - - - - - Resolves and auto-wires a ServiceStack Service from a HttpListenerContext. - - - - - Resolves and auto-wires a ServiceStack Service. - - - - diff --git a/lib/signed/System.Web.Razor.dll b/lib/signed/System.Web.Razor.dll deleted file mode 100644 index 8668fb6ba57..00000000000 Binary files a/lib/signed/System.Web.Razor.dll and /dev/null differ diff --git a/lib/signed/System.Web.Razor.xml b/lib/signed/System.Web.Razor.xml deleted file mode 100644 index b42f27cb916..00000000000 --- a/lib/signed/System.Web.Razor.xml +++ /dev/null @@ -1,4359 +0,0 @@ - - - - System.Web.Razor - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - . - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - Enumerates the list of Visual Basic keywords. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. - - - \ No newline at end of file diff --git a/lib/sl5/ServiceStack.Client.dll b/lib/sl5/ServiceStack.Client.dll deleted file mode 100644 index a636b5b09de..00000000000 Binary files a/lib/sl5/ServiceStack.Client.dll and /dev/null differ diff --git a/lib/sl5/ServiceStack.Text.dll b/lib/sl5/ServiceStack.Text.dll deleted file mode 100644 index c939c6df59c..00000000000 Binary files a/lib/sl5/ServiceStack.Text.dll and /dev/null differ diff --git a/lib/sl5/ServiceStack.Text.pdb b/lib/sl5/ServiceStack.Text.pdb deleted file mode 100644 index 36e53a6e54e..00000000000 Binary files a/lib/sl5/ServiceStack.Text.pdb and /dev/null differ diff --git a/lib/sl5/ServiceStack.Text.xml b/lib/sl5/ServiceStack.Text.xml deleted file mode 100644 index cc924f71f6a..00000000000 --- a/lib/sl5/ServiceStack.Text.xml +++ /dev/null @@ -1,2212 +0,0 @@ - - - - ServiceStack.Text - - - - - Utils to load types - - - - - Find the type from the name supplied - - [typeName] or [typeName, assemblyName] - - - - - The top-most interface of the given type, if any. - - - - - Find type if it exists - - - - The type if it exists - - - - Populate an object with Example data. - - - - - - - Populates the object with example data. - - - Tracks how deeply nested we are - - - - - Search key structure for - - Type of the key. - Type of the value. - - - - A Concurrent implementation. - - Type of the keys. - Type of the values. - - This class is threadsafe and highly concurrent. This means that multiple threads can do lookup and insert operations - on this dictionary simultaneously. - It is not guaranteed that collisions will not occur. The dictionary is partitioned in segments. A segment contains - a set of items based on a hash of those items. The more segments there are and the beter the hash, the fewer collisions will occur. - This means that a nearly empty ConcurrentDictionary is not as concurrent as one containing many items. - - - - - Base class for concurrent hashtable implementations - - Type of the items stored in the hashtable. - Type of the key to search with. - - - - Constructor (protected) - - Use Initialize method after construction. - - - - Initialize the newly created ConcurrentHashtable. Invoke in final (sealed) constructor - or Create method. - - - - - Create a segment range - - Number of segments in range. - Number of slots allocated initialy in each segment. - The created instance. - - - - While adjusting the segmentation, _NewRange will hold a reference to the new range of segments. - when the adjustment is complete this reference will be copied to _CurrentRange. - - - - - Will hold the most current reange of segments. When busy adjusting the segmentation, this - field will hold a reference to the old range. - - - - - While adjusting the segmentation this field will hold a boundary. - Clients accessing items with a key hash value below this boundary (unsigned compared) - will access _NewRange. The others will access _CurrentRange - - - - - Get a hashcode for given storeable item. - - Reference to the item to get a hash value for. - The hash value as an . - - The hash returned should be properly randomized hash. The standard GetItemHashCode methods are usually not good enough. - A storeable item and a matching search key should return the same hash code. - So the statement ItemEqualsItem(storeableItem, searchKey) ? GetItemHashCode(storeableItem) == GetItemHashCode(searchKey) : true should always be true; - - - - - Get a hashcode for given search key. - - Reference to the key to get a hash value for. - The hash value as an . - - The hash returned should be properly randomized hash. The standard GetItemHashCode methods are usually not good enough. - A storeable item and a matching search key should return the same hash code. - So the statement ItemEqualsItem(storeableItem, searchKey) ? GetItemHashCode(storeableItem) == GetItemHashCode(searchKey) : true should always be true; - - - - - Compares a storeable item to a search key. Should return true if they match. - - Reference to the storeable item to compare. - Reference to the search key to compare. - True if the storeable item and search key match; false otherwise. - - - - Compares two storeable items for equality. - - Reference to the first storeable item to compare. - Reference to the second storeable item to compare. - True if the two soreable items should be regarded as equal. - - - - Indicates if a specific item reference contains a valid item. - - The storeable item reference to check. - True if the reference doesn't refer to a valid item; false otherwise. - The statement IsEmpty(default(TStoredI)) should always be true. - - - - Returns the type of the key value or object. - - The stored item to get the type of the key for. - The actual type of the key or null if it can not be determined. - - Used for diagnostics purposes. - - - - - Gets a segment out of either _NewRange or _CurrentRange based on the hash value. - - - - - - - Gets a LOCKED segment out of either _NewRange or _CurrentRange based on the hash value. - Unlock needs to be called on this segment before it can be used by other clients. - - - - - - - Gets a LOCKED segment out of either _NewRange or _CurrentRange based on the hash value. - Unlock needs to be called on this segment before it can be used by other clients. - - - - - - - Finds an item in the table collection that maches the given searchKey - - The key to the item. - Out reference to a field that will receive the found item. - A boolean that will be true if an item has been found and false otherwise. - - - - Looks for an existing item in the table contents using an alternative copy. If it can be found it will be returned. - If not then the alternative copy will be added to the table contents and the alternative copy will be returned. - - A copy to search an already existing instance with - Out reference to receive the found item or the alternative copy - A boolean that will be true if an existing copy was found and false otherwise. - - - - Replaces and existing item - - - - - true is the existing item was successfully replaced. - - - - Inserts an item in the table contents possibly replacing an existing item. - - The item to insert in the table - Out reference to a field that will receive any possibly replaced item. - A boolean that will be true if an existing copy was found and replaced and false otherwise. - - - - Removes an item from the table contents. - - The key to find the item with. - Out reference to a field that will receive the found and removed item. - A boolean that will be rue if an item was found and removed and false otherwise. - - - - Enumerates all segments in _CurrentRange and locking them before yielding them and resleasing the lock afterwards - The order in which the segments are returned is undefined. - Lock SyncRoot before using this enumerable. - - - - - - Removes all items from the collection. - Aquires a lock on SyncRoot before it does it's thing. - When this method returns and multiple threads have access to this table it - is not guaranteed that the table is actually empty. - - - - - Determines if a segmentation adjustment is needed. - - True - - - - Bool as int (for interlocked functions) that is true if a Segmentation assesment is pending. - - - - - The total allocated number of item slots. Filled with nonempty items or not. - - - - - When a segment resizes it uses this method to inform the hashtable of the change in allocated space. - - - - - - Schedule a call to the AssessSegmentation() method. - - - - - Checks if segmentation needs to be adjusted and if so performs the adjustment. - - - - - - This method is called when a re-segmentation is expected to be needed. It checks if it actually is needed and, if so, performs the re-segementation. - - - - - Adjusts the segmentation to the new segment count - - The new number of segments to use. This must be a power of 2. - The number of item slots to reserve in each segment. - - - - Returns an object that serves as a lock for range operations - - - Clients use this primarily for enumerating over the Tables contents. - Locking doesn't guarantee that the contents don't change, but prevents operations that would - disrupt the enumeration process. - Operations that use this lock: - Count, Clear, DisposeGarbage and AssessSegmentation. - Keeping this lock will prevent the table from re-segmenting. - - - - - Gets an IEnumerable to iterate over all items in all segments. - - - - A lock should be aquired and held on SyncRoot while this IEnumerable is being used. - The order in which the items are returned is undetermined. - - - - - Returns a count of all items in teh collection. This may not be - aqurate when multiple threads are accessing this table. - Aquires a lock on SyncRoot before it does it's thing. - - - - - Gives the minimum number of segments a hashtable can contain. This should be 1 or more and always a power of 2. - - - - - Gives the minimum number of allocated item slots per segment. This should be 1 or more, always a power of 2 - and less than 1/2 of MeanSegmentAllocatedSpace. - - - - - Gives the prefered number of allocated item slots per segment. This should be 4 or more and always a power of 2. - - - - - Constructs a instance using the default to compare keys. - - - - - Constructs a instance using the specified to compare keys. - - The tp compare keys with. - is null. - - - - Get a hashcode for given storeable item. - - Reference to the item to get a hash value for. - The hash value as an . - - The hash returned should be properly randomized hash. The standard GetItemHashCode methods are usually not good enough. - A storeable item and a matching search key should return the same hash code. - So the statement ItemEqualsItem(storeableItem, searchKey) ? GetItemHashCode(storeableItem) == GetItemHashCode(searchKey) : true should always be true; - - - - - Get a hashcode for given search key. - - Reference to the key to get a hash value for. - The hash value as an . - - The hash returned should be properly randomized hash. The standard GetItemHashCode methods are usually not good enough. - A storeable item and a matching search key should return the same hash code. - So the statement ItemEqualsItem(storeableItem, searchKey) ? GetItemHashCode(storeableItem) == GetItemHashCode(searchKey) : true should always be true; - - - - - Compares a storeable item to a search key. Should return true if they match. - - Reference to the storeable item to compare. - Reference to the search key to compare. - True if the storeable item and search key match; false otherwise. - - - - Compares two storeable items for equality. - - Reference to the first storeable item to compare. - Reference to the second storeable item to compare. - True if the two soreable items should be regarded as equal. - - - - Indicates if a specific item reference contains a valid item. - - The storeable item reference to check. - True if the reference doesn't refer to a valid item; false otherwise. - The statement IsEmpty(default(TStoredI)) should always be true. - - - - Adds an element with the provided key and value to the dictionary. - - The object to use as the key of the element to add. - The object to use as the value of the element to add. - An element with the same key already exists in the dictionary. - - - - Determines whether the dictionary - contains an element with the specified key. - - The key to locate in the dictionary. - true if the dictionary contains - an element with the key; otherwise, false. - - - - Removes the element with the specified key from the dictionary. - - The key of the element to remove. - true if the element is successfully removed; otherwise, false. This method - also returns false if key was not found in the original dictionary. - - - - Gets the value associated with the specified key. - - The key whose value to get. - - When this method returns, the value associated with the specified key, if - the key is found; otherwise, the default value for the type of the value - parameter. This parameter is passed uninitialized. - - - true if the dictionary contains an element with the specified key; otherwise, false. - - - - - Adds an association to the dictionary. - - A that represents the association to add. - An association with an equal key already exists in the dicitonary. - - - - Removes all items from the dictionary. - - WHen working with multiple threads, that each can add items to this dictionary, it is not guaranteed that the dictionary will be empty when this method returns. - - - - Determines whether the specified association exists in the dictionary. - - The key-value association to search fo in the dicionary. - True if item is found in the dictionary; otherwise, false. - - This method compares both key and value. It uses the default equality comparer to compare values. - - - - - Copies all associations of the dictionary to an - , starting at a particular index. - - The one-dimensional that is the destination of the associations - copied from . The must - have zero-based indexing. - The zero-based index in at which copying begins. - is null. - is less than 0. - is equal to or greater than the length of . - The number of associations to be copied - is greater than the available space from to the end of the destination - . - - - - Removes the specified association from the , comparing both key and value. - - A representing the association to remove. - true if the association was successfully removed from the ; - otherwise, false. This method also returns false if the association is not found in - the original . - - - - - Returns an enumerator that iterates through all associations in the at the moment of invocation. - - A that can be used to iterate through the associations. - - - - Returns an enumerator that iterates through all associations in the at the moment of invocation. - - A that can be used to iterate through the associations. - - - - Gives the of TKey that is used to compare keys. - - - - - Gets an containing the keys of - the dictionary. - - An containing the keys of the dictionary. - This property takes a snapshot of the current keys collection of the dictionary at the moment of invocation. - - - - Gets an containing the values in - the dictionary. - - - An containing the values in the dictionary. - - This property takes a snapshot of the current keys collection of the dictionary at the moment of invocation. - - - - Gets or sets the value associated with the specified key. - - The key of the value to get or set. - The value associated with the specified key. If the specified key is not found, a get operation throws a KeyNotFoundException, and a set operation creates a new element with the specified key. - - When working with multiple threads, that can each potentialy remove the searched for item, a can always be expected. - - - - - Gets the number of elements contained in the . - - - - - Gets a value indicating whether the is read-only, which is always false. - - - - - Initialize the segment. - - - - - - When segment gets introduced into hashtable then its allocated space should be added to the - total allocated space. - Single threaded access or locking is needed - - - - - - When segment gets removed from hashtable then its allocated space should be subtracted to the - total allocated space. - Single threaded access or locking is needed - - - - - - Array with 'slots'. Each slot can be filled or empty. - - - - - Inserts an item into a *not empty* spot given by position i. It moves items forward until an empty spot is found. - - - - - - - - - Find item in segment. - - Reference to the search key to use. - Out reference to store the found item in. - Object that tells this segment how to treat items and keys. - True if an item could be found, otherwise false. - - - - Find an existing item or, if it can't be found, insert a new item. - - Reference to the item that will be inserted if an existing item can't be found. It will also be used to search with. - Out reference to store the found item or, if it can not be found, the new inserted item. - Object that tells this segment how to treat items and keys. - True if an existing item could be found, otherwise false. - - - - Inserts an item in the segment, possibly replacing an equal existing item. - - A reference to the item to insert. - An out reference where any replaced item will be written to, if no item was replaced the new item will be written to this reference. - Object that tells this segment how to treat items and keys. - True if an existing item could be found and is replaced, otherwise false. - - - - Removes an item from the segment. - - A reference to the key to search with. - An out reference where the removed item will be stored or default() if no item to remove can be found. - Object that tells this segment how to treat items and keys. - True if an item could be found and is removed, false otherwise. - - - - Iterate over items in the segment. - - Position beyond which the next filled slot will be found and the item in that slot returned. (Starting with -1) - Out reference where the next item will be stored or default if the end of the segment is reached. - Object that tells this segment how to treat items and keys. - The index position the next item has been found or -1 otherwise. - - - - Total numer of filled slots in _List. - - - - - Remove any excess allocated space - - - - - - Boolean value indicating if this segment has not been trashed yet. - - - - - Release a reader lock - - - - - Release a writer lock - - - - - Aquire a reader lock. Wait until lock is aquired. - - - - - Aquire a reader lock. - - True if to wait until lock aquired, False to return immediately. - Boolean indicating if lock was successfuly aquired. - - - - Aquire a writer lock. Wait until lock is aquired. - - - - - Aquire a writer lock. - - True if to wait until lock aquired, False to return immediately. - Boolean indicating if lock was successfuly aquired. - - - - If AlwaysUseUtc is set to true then convert all DateTime to UTC. - - - - - - - Repairs an out-of-spec XML date/time string which incorrectly uses a space instead of a 'T' to separate the date from the time. - These string are occasionally generated by SQLite and can cause errors in OrmLite when reading these columns from the DB. - - The XML date/time string to repair - The repaired string. If no repairs were made, the original string is returned. - - - - WCF Json format: /Date(unixts+0000)/ - - - - - - - WCF Json format: /Date(unixts+0000)/ - - - - - - - Get the type(string) constructor if exists - - The type. - - - - - micro optimizations: using flags instead of value.IndexOfAny(EscapeChars) - - - - - - - Class to hold - - - - - - A fast, standards-based, serialization-issue free DateTime serailizer. - - - - - Determines whether this serializer can create the specified type from a string. - - The type. - - true if this instance [can create from string] the specified type; otherwise, false. - - - - - Parses the specified value. - - The value. - - - - - Deserializes from reader. - - The reader. - - - - - Serializes to string. - - The value. - - - - - Serializes to writer. - - The value. - The writer. - - - - Sets which format to use when serializing TimeSpans - - - - - if the is configured - to take advantage of specification, - to support user-friendly serialized formats, ie emitting camelCasing for JSON - and parsing member names and enum values in a case-insensitive manner. - - - - - if the is configured - to support web-friendly serialized formats, ie emitting lowercase_underscore_casing for JSON - - - - - Define how property names are mapped during deserialization - - - - - Gets or sets a value indicating if the framework should throw serialization exceptions - or continue regardless of deserialization errors. If the framework - will throw; otherwise, it will parse as many fields as possible. The default is . - - - - - Gets or sets a value indicating if the framework should always convert to UTC format instead of local time. - - - - - Gets or sets a value indicating if the framework should always assume is in UTC format if Kind is Unspecified. - - - - - Gets or sets whether we should append the Utc offset when we serialize Utc dates. Defaults to no. - Only supported for when the JsConfig.DateHandler == JsonDateHandler.TimestampOffset - - - - - Gets or sets a value indicating if unicode symbols should be serialized as "\uXXXX". - - - - - If set to true, Interface types will be prefered over concrete types when serializing. - - - - - Sets the maximum depth to avoid circular dependencies - - - - - Set this to enable your own type construction provider. - This is helpful for integration with IoC containers where you need to call the container constructor. - Return null if you don't know how to construct the type and the parameterless constructor will be used. - - - - - If set to true, Interface types will be prefered over concrete types when serializing. - - - - - Always emit type info for this type. Takes precedence over ExcludeTypeInfo - - - - - Never emit type info for this type - - - - - if the is configured - to take advantage of specification, - to support user-friendly serialized formats, ie emitting camelCasing for JSON - and parsing member names and enum values in a case-insensitive manner. - - - - - Define custom serialization fn for BCL Structs - - - - - Define custom raw serialization fn - - - - - Define custom serialization hook - - - - - Define custom deserialization fn for BCL Structs - - - - - Define custom raw deserialization fn for objects - - - - - Exclude specific properties of this type from being serialized - - - - - Opt-in flag to set some Value Types to be treated as a Ref Type - - - - - Whether there is a fn (raw or otherwise) - - - - - The property names on target types must match property names in the JSON source - - - - - The property names on target types may not match the property names in the JSON source - - - - - Uses the xsd format like PT15H10M20S - - - - - Uses the standard .net ToString method of the TimeSpan class - - - - - Get JSON string value converted to T - - - - - Get JSON string value - - - - - Get unescaped string value - - - - - Get unescaped string value - - - - - Write JSON Array, Object, bool or number values as raw string - - - - - Get JSON string value - - - - - Creates an instance of a Type from a string value - - - - - Parses the specified value. - - The value. - - - - - Shortcut escape when we're sure value doesn't contain any escaped chars - - - - - - - Given a character as utf32, returns the equivalent string provided that the character - is legal json. - - - - - - - micro optimizations: using flags instead of value.IndexOfAny(EscapeChars) - - - - - - - Implement the serializer using a more static approach - - - - - - Implement the serializer using a more static approach - - - - - - Public Code API to register commercial license for ServiceStack. - - - - - Internal Utilities to verify licensing - - - - - Pretty Thread-Safe cache class from: - http://code.google.com/p/dapper-dot-net/source/browse/Dapper/SqlMapper.cs - - This is a micro-cache; suitable when the number of terms is controllable (a few hundred, for example), - and strictly append-only; you cannot change existing values. All key matches are on **REFERENCE** - equality. The type is fully thread-safe. - - - - - Maps the path of a file in the context of a VS project - - the relative path - the absolute path - Assumes static content is two directories above the /bin/ directory, - eg. in a unit test scenario the assembly would be in /bin/Debug/. - - - - Maps the path of a file in a self-hosted scenario - - the relative path - the absolute path - Assumes static content is copied to /bin/ folder with the assemblies - - - - Maps the path of a file in an Asp.Net hosted scenario - - the relative path - the absolute path - Assumes static content is in the parent folder of the /bin/ directory - - - - Implement the serializer using a more static approach - - - - - - Creates a new instance of type. - First looks at JsConfig.ModelFactory before falling back to CreateInstance - - - - - Creates a new instance of type. - First looks at JsConfig.ModelFactory before falling back to CreateInstance - - - - - Creates a new instance from the default constructor of type - - - - - Add a Property attribute at runtime. - Not threadsafe, should only add attributes on Startup. - - - - - Add a Property attribute at runtime. - Not threadsafe, should only add attributes on Startup. - - - - - BigInteger library by Chew Keong TAN (See project source for info). - - - - - Interface which must be implemented by all custom padding providers. - Padding is used to provide randomness and unpredictability to the data - before it is encrypted. - - - - - Adds padding to the input data and returns the padded data. - - Data to be padded prior to encryption - RSA Parameters used for padding computation - Padded message - - - - Removes padding that was added to the unencrypted data prior to encryption. - - Data to have padding removed - RSA Parameters used for padding computation - Unpadded message - - - - Gets the maximum message length for this padding provider. - - RSA Parameters used for padding computation - Max message length - - - - Uses PKCS#1 v 1.5 padding scheme to pad the data. - - - - - - Default constructor. - - - - - Adds padding to the input data and returns the padded data. - - Data to be padded prior to encryption - RSA Parameters used for padding computation - Padded message - - - - Removes padding that was added to the unencrypted data prior to encryption. - - Data to have padding removed - RSA Parameters used for padding computation - Unpadded message - - - - Gets the maximum message length for this padding provider. - - RSA Parameters used for padding computation - Max message length - - - - The NoPadding class does not add any padding to the data. - This is not recommended. - - - - - Default constructor. - - - - - Adds padding to the input data and returns the padded data. - - Data to be padded prior to encryption - RSA Parameters used for padding computation - Padded message - - - - Removes padding that was added to the unencrypted data prior to encryption. - - Data to have padding removed - RSA Parameters used for padding computation - Unpadded message - - - - Gets the maximum message length for this padding provider. - - RSA Parameters used for padding computation - Max message length - - - - Uses OAEP Padding defined in PKCS#1 v 2.1. Uses the - default standard SHA1 hash. This padding provider is - compatible with .NET's OAEP implementation. - - - - - Default constructor. Uses the default SHA1 Hash for OAEP hash calculation. - - - - - Internal constructor (used to perform OAEP with a different hash and hash output length - - - - - - - Adds padding to the input data and returns the padded data. - - Data to be padded prior to encryption - RSA Parameters used for padding computation - Padded message - - - - Removes padding that was added to the unencrypted data prior to encryption. - - Data to have padding removed - RSA Parameters used for padding computation - Unpadded message - - - - Gets the maximum message length for this padding provider. - - RSA Parameters used for padding computation - Max message length - - - - Uses OAEP Padding Scheme defined in PKCS#1 v 2.1. Uses a - SHA256 hash. This padding provider is currently - not compatible with .NET's OAEP implementation. - - - - - Default constructor. Uses a SHA256 Hash for OAEP hash calculation. - This PaddingProvider provides added security to message padding, - however it requires the data to be encrypted to be shorter and - is not compatible with the RSACryptoServiceProvider's implementation - of OAEP. - - - - - Adds padding to the input data and returns the padded data. - - Data to be padded prior to encryption - RSA Parameters used for padding computation - Padded message - - - - Removes padding that was added to the unencrypted data prior to encryption. - - Data to have padding removed - RSA Parameters used for padding computation - Unpadded message - - - - Gets the maximum message length for this padding provider. - - RSA Parameters used for padding computation - Max message length - - - - All custom signature providers must implement this interface. The - RSACrypto class handles encryption and decryption of data. The - SignatureProvider is intended to provide the hashing and signature - generation mechanism used to create the comparison data. - - - - - Generates a hash for the input data. - - Data to be signed - RSA Parameters used for signature calculation - Computed signature (pre-encryption) - - - - Verifies the signed data against the unsigned data after decryption. - - Unsigned data - Signed data (after decryption) - RSAParameters used for signature computation - Boolean representing whether the input data matches the signed data - - - - Uses the DER (Distinguished Encoding Rules) - and the SHA1 hash provider for encoding generation. - - - - - Default constructor - - - - - Hashes and encodes the signature for encryption. Uses the DER (Distinguished Encoding Rules) - and the SHA1 hash provider for encoding generation. - - Data to be signed - RSA Parameters used for signature calculation - Computed signature (pre-encryption) - - - - Verifies the signed data against the unsigned data after decryption. - - Unsigned data - Signed data (after decryption) - RSAParameters used for signature computation - Boolean representing whether the input data matches the signed data - - - - Uses the DER (Distinguished Encoding Rules) - and the SHA256 hash provider for encoding generation. - - - - - Default constructor - - - - - Hashes and encodes the signature for encryption. Uses the DER (Distinguished Encoding Rules) - and the SHA256 hash provider for encoding generation. - - Data to be signed - RSA Parameters used for signature calculation - Computed signature (pre-encryption) - - - - Verifies the signed data against the unsigned data after decryption. - - Unsigned data - Signed data (after decryption) - RSAParameters used for signature computation - Boolean representing whether the input data matches the signed data - - - - Base interface that must be implemented by all hash providers. - - - - - Compute the hash of the input byte array and return the hashed value as a byte array. - - Input data - Hashed data. - - - - Hash provider based on SHA256 - - - - - Default constructor. - - - - - Compute the hash of the input byte array and return the hashed value as a byte array. - - Input data - SHA256 Hashed data - - - - Hash provider based on HMACSHA256 to allow inclusion of a hash seed value - - - - - Constructor accepting a private key (seed) value - - Byte array containing the private hash seed - - - - Compute the hash of the input byte array and return the hashed value as a byte array. - - Input data - HMACSHA256 Hashed data. - - - - Hash provider based on SHA1 - - - - - Default constructor. - - - - - Compute the hash of the input byte array and return the hashed value as a byte array. - - Input data - SHA1 Hashed data. - - - - Hash provider based on HMACSHA1 to allow inclusion of a hash seed value - - - - - Constructor accepting a private key (seed) value - - Byte array containing the private hash seed - - - - Compute the hash of the input byte array and return the hashed value as a byte array. - - Input data - HMACSHA1 Hashed data. - - - - RSA Cryptography class - - - - - Default constructor for the RSA Class. A cipher strength of 1024-bit will used by default. To specify - a higher cipher strength, please use the alternate RSACrypto(cipherStrength) constructor. - - - - - RSA Class Constructor - - - Cipher strength in bits. 2048 is recommended. Must be a multiple of 8. - Max supported by this class is 4096. Minimum is 256. Cipher strength only - needs to be specified if generating new key pairs. It is not necessary to - know the cipher strength when importing existing key pairs. - - - - - Return the currently loaded key as XML. This method will automatically - return an empty string if no key has been loaded. - - Signals whether to include the private key in the output data. - XML String with the key data. - - - - Sets the current class internal variables based on the supplied XML. - Attempts to validate the XML prior to setting. - - XML String containing key info - - - - - Import an existing set of RSA Parameters. If only the public key is to be loaded, - Do not set the P, Q, DP, DQ, IQ or D values. If P, Q or D are set, the parameters - will automatically be validated for existence of private key. - - RSAParameters object containing key data. - - - - Returns an RSAParameters object that contains the key data for the currently loaded key. - - Instance of the currently loaded RSAParameters object or null if no key is loaded - - - - - Imports a blob that represents asymmetric key information. - - A byte array that represents an asymmetric key blob. - Invalid key blob data - Initialized RSAParameters structure - - - - Exports a blob that contains the key information associated with an AsymmetricAlgorithm object. - - true to include the private key; otherwise, false. - A byte array that contains the key information associated with an AsymmetricAlgorithm object - - - - Generate the RSA Key Pair using the default exponent of 65537. - - - - - Generate the RSA Key Pair using a supplied cipher strength and the default - exponent value of 65537. If a cipherStrength was specified in the constructor, - the supplied value will override it. - - The strength of the cipher in bits. Must be a multiple of 8 - and between 256 and 4096 - - - - Generate the RSA Key Pair using a supplied cipher strength value and exponent value. - A prime number value between 3 and 65537 is recommended for the exponent. Larger - exponents can increase security but also increase encryption time. Your supplied - exponent may be automatically adjusted to ensure compatibility with the RSA algorithm - security requirements. If a cipherStrength was specified in the constructor, - the supplied value will override it. - - The strength of the cipher in bits. Must be a multiple of 8 - and between 256 and 4096 - Custom exponent value to be used for RSA Calculation - - - - Encrypt input bytes with the public key. Data can only be decrypted with - the private key. If no PaddingProvider is set, the default padding provider of OAEP will be assumed. To - specify a different padding algorithm, make sure you set the PaddingProvider property. - - Data bytes to be encrypted - Encrypted byte array - Key generation is CPU intensive. It is highly recommended that you create - your key pair in advance and use a predetermined key pair. If you do choose to allow - the key pair to be automatically generated, it can be exported to XML or an RSAParameter - set after the encryption is complete. - - - - Run the encryption routine using the private key for encryption. While this may be useful in some - fringe scenarios, if simple verification is needed it is recommended that you use the Sign() method - instead, which signs a hashed version of your data. If no PaddingProvider is set, the default padding - provider of OAEP will be assumed. To specify a different padding algorithm, make sure you set the - PaddingProvider property. - - Data to be encrypted with the private key - Encrypted data bytes - - This method uses the PaddingProvider for message verification. To create signature - hashes, please use the SignData and VerifyData methods. - Data encrypted this way can be decrypted using your PUBLIC KEY. This method of encryption is meant - for verification purposes only and does not secure your data against decryption. - - - - - Sign a hash of the input data using the supplied Signature Provider and encrypt with the private key. - - Data to be hashed and signed - The signature provider to use for signature generation. - Signed hash bytes - - - - Decrypt data that was encrypted using the Public Key. If no PaddingProvider is set, the default - padding provider of OAEP will be assumed. To specify a different padding algorithm, make sure - you set the PaddingProvider property. - - Encrypted bytes - Decrypted bytes - - - - Decrypt data that was encrypted with the Private Key. NOTE: This method - uses the PaddingProvider for message decoding. To create signature - hashes, please use the SignData and VerifyData methods. If no PaddingProvider is set, the default - padding provider of OAEP will be assumed. To specify a different padding algorithm, make sure - you set the PaddingProvider property. - - Encrypted bytes - Decrypted bytes - - - - Verify the signature against the unsigned data. The encryptedData is decrypted using the public key and - the unsignedData is hashed and compared to the un-encrypted signed data using the supplied SignatureProvider. - - The raw, unencrypted data to be hashed and compared. - The data that has been hashed and encrypted with the private key. - The signature provider that matches the algorithm used to generate the original signature - Boolean representing whether the signature was valid (verified) - - - - Different versions of RSA use different padding schemes. This property allows you to - set the padding scheme you wish to use. If not set, the default of OAEP will be - used. While PKCS1 v1.5 is supported, OAEP is the recommended padding scheme to use. - You can create your own padding schemes by implementing the IPaddingProvider interface. - - Padding provider instance - Current padding provider - - - - Based on the padding provider, messages are stricted to certain lengths for encryption. Also, - ensure that the key pair has either been generated or imported. - - - - - Fires when key generation is complete. - - - - - Delegate for OnKeysGenerated event - - Object - - - - Cryptographic Exception - - - - - Constructor - - Error Message - - - - Constructor - - Error Message - Inner Exception - - - - CALG_RSA_KEYX = (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_RSA|ALG_SID_RSA_ANY) - - - - - Simple Key BLOB - - - - - Public Key BLOB - - - - - Private Key BLOB - - - - - PlainText Key BLOB - - - - - Opaque Key BLOB - - - - - Public Key BLOB Extended - - - - - Symmetric Wrap Key BLOB - - - - - A BLOBHEADER / PUBLICKEYSTRUC structure (Import from WinCrypt.h) - - http://msdn.microsoft.com/en-us/library/ms884652.aspx - - - - Key BLOB type. The only BLOB types currently defined are PUBLICKEYBLOB, PRIVATEKEYBLOB, and SIMPLEBLOB. Other key BLOB types will be defined as needed. - - - - - Version number of the key BLOB format. This member currently must always have a value of 0x02. - - - - - Reserved for future use. This member must be set to zero. - - - - - Algorithm identifier for the key contained by the key BLOB structure - - - - - Create and initialize structure from binary data - - On validate errors - Initialized structure - - - - Serializes structure as binary data - - - - - Create and initialize structure from RSAParameters - - Initialized structure - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - RSA public key data - - http://msdn.microsoft.com/en-us/library/aa387685(v=VS.85).aspx - - - - The magic member must be set to 0x31415352 (public only) / 0x32415352 (including private). This hex value is the ASCII encoding of RSA1 / RSA2. - - - - - # of bits in modulus - - - - - Public exponent - - - - - Create and initialize structure from binary data - - On validate errors - Initialized structure - - - - Serializes structure as binary data - - - - - Create and initialize structure from RSAParameters - - Initialized structure - - - - Create and initialize RSAParameters structure - - Initialized structure - http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsaparameters.aspx - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Private-key BLOBs, type PRIVATEKEYBLOB, are used to store private keys outside a CSP. Extended provider private-key BLOBs have the following format. - - - - - BLOB Header - - - - - RSA public key data - - - - - The modulus. This has a value of prime1 * prime2 and is often known as n. - - - - - Prime number 1, often known as p. - - - - - Prime number 2, often known as q. - - - - - Exponent 1. This has a numeric value of d mod (p - 1). - - - - - Exponent 2. This has a numeric value of d mod (q - 1). - - - - - Coefficient. This has a numeric value of (inverse of q mod p). - - - - - Private exponent, often known as d. - - - - - Create and initialize structure from binary data - - On validate errors - Initialized structure - - - - Create and initialize structure from binary data with defined header - - On validate errors - Initialized structure - - - - Serializes structure as binary data - - - - - Create and initialize structure from RSAParameters - - Initialized structure - http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsaparameters.aspx - - - - Create and initialize RSAParameters structure - - Initialized structure - http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsaparameters.aspx - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Public-key BLOBs, type PUBLICKEYBLOB, are used to store public keys outside a CSP. Extended provider public-key BLOBs have the following format. - - - - - BLOB Header - - - - - RSA public key data - - - - - The public-key modulus data - - - - - Create and initialize structure from binary data - - On validate errors - Initialized structure - - - - Create and initialize structure from binary data with defined header - - On validate errors - Initialized structure - - - - Serializes structure as binary data - - - - - Create and initialize structure from RSAParameters - - Initialized structure - http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsaparameters.aspx - - - - Create and initialize RSAParameters structure - - Initialized structure - http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsaparameters.aspx - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - RSAParameters for Import / Export - - - - - Parameter value E - - - - - Parameter value N - - - - - Parameter value P - - - - - Parameter value Q - - - - - Parameter value DP - - - - - Parameter value DQ - - - - - Parameter value IQ - - - - - Parameter value D - - - - - Parameter value Phi - - - - - Bitwise XOR for 2 byte arrays. Arrays must be the same length. - - Left side for comparison - Right side for comparison - Resulting byte array - - - - Bitwise XOR for 2 Bytes. - - Left side for comparison - Right side for comparison - Resulting byte - - - - Convert the input Integer to an Octet String. - - input integer - size in octets (bytes) - Resulting byte array of specified length - - - - Mask generation function. - - Seed - Length of generated mask - Length of the hash produced by the supplied hash provider - Hash provider to use in mask generation - Generated mask of specified length - - - - @jonskeet: Collection of utility methods which operate on streams. - r285, February 26th 2009: http://www.yoda.arachsys.com/csharp/miscutil/ - - - - - Reads the given stream up to the end, returning the data as a byte - array. - - - - - Reads the given stream up to the end, returning the data as a byte - array, using the given buffer size. - - - - - Reads the given stream up to the end, returning the data as a byte - array, using the given buffer for transferring data. Note that the - current contents of the buffer is ignored, so the buffer needn't - be cleared beforehand. - - - - - Copies all the data from one stream into another. - - - - - Copies all the data from one stream into another, using a buffer - of the given size. - - - - - Copies all the data from one stream into another, using the given - buffer for transferring data. Note that the current contents of - the buffer is ignored, so the buffer needn't be cleared beforehand. - - - - - Reads exactly the given number of bytes from the specified stream. - If the end of the stream is reached before the specified amount - of data is read, an exception is thrown. - - - - - Reads into a buffer, filling it completely. - - - - - Reads exactly the given number of bytes from the specified stream, - into the given buffer, starting at position 0 of the array. - - - - - Reads exactly the given number of bytes from the specified stream, - into the given buffer, starting at position 0 of the array. - - - - - Same as ReadExactly, but without the argument checks. - - - - - Converts from base: 0 - 62 - - The source. - From. - To. - - - - - Skip the encoding process for 'safe strings' - - - - - - - A class to allow the conversion of doubles to string representations of - their exact decimal values. The implementation aims for readability over - efficiency. - - Courtesy of @JonSkeet - http://www.yoda.arachsys.com/csharp/DoubleConverter.cs - - - - - - - - How many digits are *after* the decimal point - - - - - Constructs an arbitrary decimal expansion from the given long. - The long must not be negative. - - - - - Multiplies the current expansion by the given amount, which should - only be 2 or 5. - - - - - Shifts the decimal point; a negative value makes - the decimal expansion bigger (as fewer digits come after the - decimal place) and a positive value makes the decimal - expansion smaller. - - - - - Removes leading/trailing zeroes from the expansion. - - - - - Converts the value to a proper decimal string representation. - - - - - Creates an instance of a Type from a string value - - - - - Determines whether the specified type is convertible from string. - - The type. - - true if the specified type is convertible from string; otherwise, false. - - - - - Parses the specified value. - - The value. - - - - - Parses the specified type. - - The type. - The value. - - - - - Useful extension method to get the Dictionary[string,string] representation of any POCO type. - - - - - - Recursively prints the contents of any POCO object in a human-friendly, readable format - - - - - - Print Dump to Console.WriteLine - - - - - Print string.Format to Console.WriteLine - - - - - Parses the specified value. - - The value. - - - - diff --git a/lib/sqlite3.def b/lib/sqlite3.def deleted file mode 100644 index 251d5bb5613..00000000000 --- a/lib/sqlite3.def +++ /dev/null @@ -1,210 +0,0 @@ -EXPORTS -sqlite3_aggregate_context -sqlite3_aggregate_count -sqlite3_auto_extension -sqlite3_backup_finish -sqlite3_backup_init -sqlite3_backup_pagecount -sqlite3_backup_remaining -sqlite3_backup_step -sqlite3_bind_blob -sqlite3_bind_double -sqlite3_bind_int -sqlite3_bind_int64 -sqlite3_bind_null -sqlite3_bind_parameter_count -sqlite3_bind_parameter_index -sqlite3_bind_parameter_name -sqlite3_bind_text -sqlite3_bind_text16 -sqlite3_bind_value -sqlite3_bind_zeroblob -sqlite3_blob_bytes -sqlite3_blob_close -sqlite3_blob_open -sqlite3_blob_read -sqlite3_blob_reopen -sqlite3_blob_write -sqlite3_busy_handler -sqlite3_busy_timeout -sqlite3_cancel_auto_extension -sqlite3_changes -sqlite3_clear_bindings -sqlite3_close -sqlite3_close_v2 -sqlite3_collation_needed -sqlite3_collation_needed16 -sqlite3_column_blob -sqlite3_column_bytes -sqlite3_column_bytes16 -sqlite3_column_count -sqlite3_column_database_name -sqlite3_column_database_name16 -sqlite3_column_decltype -sqlite3_column_decltype16 -sqlite3_column_double -sqlite3_column_int -sqlite3_column_int64 -sqlite3_column_name -sqlite3_column_name16 -sqlite3_column_origin_name -sqlite3_column_origin_name16 -sqlite3_column_table_name -sqlite3_column_table_name16 -sqlite3_column_text -sqlite3_column_text16 -sqlite3_column_type -sqlite3_column_value -sqlite3_commit_hook -sqlite3_compileoption_get -sqlite3_compileoption_used -sqlite3_complete -sqlite3_complete16 -sqlite3_config -sqlite3_context_db_handle -sqlite3_create_collation -sqlite3_create_collation16 -sqlite3_create_collation_v2 -sqlite3_create_function -sqlite3_create_function16 -sqlite3_create_function_v2 -sqlite3_create_module -sqlite3_create_module_v2 -sqlite3_data_count -sqlite3_db_config -sqlite3_db_filename -sqlite3_db_handle -sqlite3_db_mutex -sqlite3_db_readonly -sqlite3_db_release_memory -sqlite3_db_status -sqlite3_declare_vtab -sqlite3_enable_load_extension -sqlite3_enable_shared_cache -sqlite3_errcode -sqlite3_errmsg -sqlite3_errmsg16 -sqlite3_errstr -sqlite3_exec -sqlite3_expired -sqlite3_extended_errcode -sqlite3_extended_result_codes -sqlite3_file_control -sqlite3_finalize -sqlite3_free -sqlite3_free_table -sqlite3_get_autocommit -sqlite3_get_auxdata -sqlite3_get_table -sqlite3_global_recover -sqlite3_initialize -sqlite3_interrupt -sqlite3_last_insert_rowid -sqlite3_libversion -sqlite3_libversion_number -sqlite3_limit -sqlite3_load_extension -sqlite3_log -sqlite3_malloc -sqlite3_memory_alarm -sqlite3_memory_highwater -sqlite3_memory_used -sqlite3_mprintf -sqlite3_mutex_alloc -sqlite3_mutex_enter -sqlite3_mutex_free -sqlite3_mutex_leave -sqlite3_mutex_try -sqlite3_next_stmt -sqlite3_open -sqlite3_open16 -sqlite3_open_v2 -sqlite3_os_end -sqlite3_os_init -sqlite3_overload_function -sqlite3_prepare -sqlite3_prepare16 -sqlite3_prepare16_v2 -sqlite3_prepare_v2 -sqlite3_profile -sqlite3_progress_handler -sqlite3_randomness -sqlite3_realloc -sqlite3_release_memory -sqlite3_reset -sqlite3_reset_auto_extension -sqlite3_result_blob -sqlite3_result_double -sqlite3_result_error -sqlite3_result_error16 -sqlite3_result_error_code -sqlite3_result_error_nomem -sqlite3_result_error_toobig -sqlite3_result_int -sqlite3_result_int64 -sqlite3_result_null -sqlite3_result_text -sqlite3_result_text16 -sqlite3_result_text16be -sqlite3_result_text16le -sqlite3_result_value -sqlite3_result_zeroblob -sqlite3_rollback_hook -sqlite3_rtree_geometry_callback -sqlite3_set_authorizer -sqlite3_set_auxdata -sqlite3_shutdown -sqlite3_sleep -sqlite3_snprintf -sqlite3_soft_heap_limit -sqlite3_soft_heap_limit64 -sqlite3_sourceid -sqlite3_sql -sqlite3_status -sqlite3_step -sqlite3_stmt_busy -sqlite3_stmt_readonly -sqlite3_stmt_status -sqlite3_strglob -sqlite3_stricmp -sqlite3_strnicmp -sqlite3_table_column_metadata -sqlite3_test_control -sqlite3_thread_cleanup -sqlite3_threadsafe -sqlite3_total_changes -sqlite3_trace -sqlite3_transfer_bindings -sqlite3_update_hook -sqlite3_uri_boolean -sqlite3_uri_int64 -sqlite3_uri_parameter -sqlite3_user_data -sqlite3_value_blob -sqlite3_value_bytes -sqlite3_value_bytes16 -sqlite3_value_double -sqlite3_value_int -sqlite3_value_int64 -sqlite3_value_numeric_type -sqlite3_value_text -sqlite3_value_text16 -sqlite3_value_text16be -sqlite3_value_text16le -sqlite3_value_type -sqlite3_vfs_find -sqlite3_vfs_register -sqlite3_vfs_unregister -sqlite3_vmprintf -sqlite3_vsnprintf -sqlite3_vtab_config -sqlite3_vtab_on_conflict -sqlite3_wal_autocheckpoint -sqlite3_wal_checkpoint -sqlite3_wal_checkpoint_v2 -sqlite3_wal_hook -sqlite3_win32_mbcs_to_utf8 -sqlite3_win32_set_directory -sqlite3_win32_sleep -sqlite3_win32_utf8_to_mbcs -sqlite3_win32_write_debug diff --git a/lib/sqlite3.dll b/lib/sqlite3.dll deleted file mode 100644 index 1058a2b1737..00000000000 Binary files a/lib/sqlite3.dll and /dev/null differ diff --git a/lib/tests/Mono.Data.Sqlite.dll b/lib/tests/Mono.Data.Sqlite.dll deleted file mode 100644 index dad79f065d7..00000000000 Binary files a/lib/tests/Mono.Data.Sqlite.dll and /dev/null differ diff --git a/lib/tests/Moq.dll b/lib/tests/Moq.dll deleted file mode 100644 index abcb72ee64c..00000000000 Binary files a/lib/tests/Moq.dll and /dev/null differ diff --git a/lib/tests/Moq.pdb b/lib/tests/Moq.pdb deleted file mode 100644 index 034ab186e52..00000000000 Binary files a/lib/tests/Moq.pdb and /dev/null differ diff --git a/lib/tests/Moq.xml b/lib/tests/Moq.xml deleted file mode 100644 index a29e2306a7c..00000000000 --- a/lib/tests/Moq.xml +++ /dev/null @@ -1,2930 +0,0 @@ - - - - Moq - - - - - A that returns an empty default value - for invocations that do not have expectations or return values, with loose mocks. - This is the default behavior for a mock. - - - - - Interface to be implemented by classes that determine the - default value of non-expected invocations. - - - - - Provides a value for the given member and arguments. - - The member to provide a default - value for. - Optional arguments passed in - to the call that requires a default value. - - - Type to mock, which can be an interface or a class. - - Provides a mock implementation of . - - - Only abstract and virtual members of classes can be mocked. - - The behavior of the mock with regards to the expectations and the actual calls is determined - by the optional that can be passed to the - constructor. - - - - The following example shows setting expectations with specific values - for method invocations: - - //setup - data - var order = new Order(TALISKER, 50); - var mock = new Mock<IWarehouse>(); - - //setup - expectations - mock.Expect(x => x.HasInventory(TALISKER, 50)).Returns(true); - - //exercise - order.Fill(mock.Object); - - //verify - Assert.True(order.IsFilled); - - The following example shows how to use the class - to specify conditions for arguments instead of specific values: - - //setup - data - var order = new Order(TALISKER, 50); - var mock = new Mock<IWarehouse>(); - - //setup - expectations - //shows how to expect a value within a range - mock.Expect(x => x.HasInventory( - It.IsAny<string>(), - It.IsInRange(0, 100, Range.Inclusive))) - .Returns(false); - - //shows how to throw for unexpected calls. contrast with the "verify" approach of other mock libraries. - mock.Expect(x => x.Remove( - It.IsAny<string>(), - It.IsAny<int>())) - .Throws(new InvalidOperationException()); - - //exercise - order.Fill(mock.Object); - - //verify - Assert.False(order.IsFilled); - - - - - - Helper interface used to hide the base - members from the fluent API to make it much cleaner - in Visual Studio intellisense. - - - - - - - - - - - - - - - - - Adds an interface implementation to the mock, - allowing expectations to be set for it. - - - This method can only be called before the first use - of the mock property, at which - point the runtime type has already been generated - and no more interfaces can be added to it. - - Also, must be an - interface and not a class, which must be specified - when creating the mock instead. - - - The mock type - has already been generated by accessing the property. - The specified - is not an interface. - - The following example creates a mock for the main interface - and later adds to it to verify - it's called by the consumer code: - - var mock = new Mock<IProcessor>(); - mock.Expect(x => x.Execute("ping")); - - // add IDisposable interface - var disposable = mock.As<IDisposable>(); - disposable.Expect(d => d.Dispose()).Verifiable(); - - - Type of interface to cast the mock to. - - - - Sets an expectation on the mocked type for a call to - to a value returning method. - - Type of the return value. Typically omitted as it can be inferred from the expression. - - If more than one expectation is set for the same method or property, - the latest one wins and is the one that will be executed. - - Lambda expression that specifies the expected method invocation. - - - mock.Expect(x => x.HasInventory("Talisker", 50)).Returns(true); - - - - - - Sets an expectation on the mocked type for a call to - to a void method. - - - If more than one expectation is set for the same method or property, - the latest one wins and is the one that will be executed. - - Lambda expression that specifies the expected method invocation. - - - var mock = new Mock<IProcessor>(); - mock.Expect(x => x.Execute("ping")); - - - - - - Sets an expectation on the mocked type for a call to - to a property getter. - - - If more than one expectation is set for the same property getter, - the latest one wins and is the one that will be executed. - - Type of the property. Typically omitted as it can be inferred from the expression. - Lambda expression that specifies the expected property getter. - - - mock.ExpectGet(x => x.Suspended) - .Returns(true); - - - - - - Sets an expectation on the mocked type for a call to - to a property setter. - - - If more than one expectation is set for the same property setter, - the latest one wins and is the one that will be executed. - - Type of the property. Typically omitted as it can be inferred from the expression. - Lambda expression that specifies the expected property setter. - - - mock.ExpectSet(x => x.Suspended); - - - - - - Sets an expectation on the mocked type for a call to - to a property setter with a specific value. - - - More than one expectation can be set for the setter with - different values. - - Type of the property. Typically omitted as it can be inferred from the expression. - Lambda expression that specifies the expected property setter. - The value expected to be set for the property. - - - mock.ExpectSet(x => x.Suspended, true); - - - - - - Implements . - - - - - Implements . - - - - - Verifies that a specific invocation matching the given - expression was performed on the mock. Use in conjuntion - with the default . - - - This example assumes that the mock has been used, - and later we want to verify that a given invocation - with specific parameters was performed: - - var mock = new Mock<IProcessor>(); - // exercise mock - //... - // Will throw if the test code didn't call Execute with a "ping" string argument. - mock.Verify(proc => proc.Execute("ping")); - - - The invocation was not performed on the mock. - Expression to verify. - - - - Verifies that a specific invocation matching the given - expression was performed on the mock. Use in conjuntion - with the default . - - - This example assumes that the mock has been used, - and later we want to verify that a given invocation - with specific parameters was performed: - - var mock = new Mock<IWarehouse>(); - // exercise mock - //... - // Will throw if the test code didn't call HasInventory. - mock.Verify(warehouse => warehouse.HasInventory(TALISKER, 50)); - - - The invocation was not performed on the mock. - Expression to verify. - Type of return value from the expression. - - - - Verifies that a property was read on the mock. - Use in conjuntion with the default . - - - This example assumes that the mock has been used, - and later we want to verify that a given property - was retrieved from it: - - var mock = new Mock<IWarehouse>(); - // exercise mock - //... - // Will throw if the test code didn't retrieve the IsClosed property. - mock.VerifyGet(warehouse => warehouse.IsClosed); - - - The invocation was not performed on the mock. - Expression to verify. - Type of the property to verify. Typically omitted as it can - be inferred from the expression's return type. - - - - Verifies that a property has been set on the mock. - Use in conjuntion with the default . - - - This example assumes that the mock has been used, - and later we want to verify that a given invocation - with specific parameters was performed: - - var mock = new Mock<IWarehouse>(); - // exercise mock - //... - // Will throw if the test code didn't set the IsClosed property. - mock.VerifySet(warehouse => warehouse.IsClosed); - - - The invocation was not performed on the mock. - Expression to verify. - Type of the property to verify. Typically omitted as it can - be inferred from the expression's return type. - - - - Verifies that a property has been set on the mock to the given value. - Use in conjuntion with the default . - - - This example assumes that the mock has been used, - and later we want to verify that a given invocation - with specific parameters was performed: - - var mock = new Mock<IWarehouse>(); - // exercise mock - //... - // Will throw if the test code didn't set the IsClosed property to true - mock.VerifySet(warehouse => warehouse.IsClosed, true); - - - The invocation was not performed on the mock. - Expression to verify. - The value that should have been set on the property. - Type of the property to verify. Typically omitted as it can - be inferred from the expression's return type. - - - - Exposes the mocked object instance. - - - - - Specifies the behavior to use when returning default values for - unexpected invocations. - - - - - Behavior of the mock, according to the value set in the constructor. - - - - - Implements the fluent API. - - - - - Defines the Callback verb and overloads. - - - - - Specifies a callback to invoke when the method is called. - - Callback method to invoke. - - The following example specifies a callback to set a boolean - value that can be used later: - - bool called = false; - mock.Expect(x => x.Execute()) - .Callback(() => called = true); - - - - - - Specifies a callback to invoke when the method is called that receives the original - arguments. - - Argument type of the invoked method. - Callback method to invoke. - - Invokes the given callback with the concrete invocation argument value. - - Notice how the specific string argument is retrieved by simply declaring - it as part of the lambda expression for the callback: - - - mock.Expect(x => x.Execute(It.IsAny<string>())) - .Callback((string command) => Console.WriteLine(command)); - - - - - - Specifies a callback to invoke when the method is called that receives the original - arguments. - - Type of the first argument of the invoked method. - Type of the second argument of the invoked method. - Callback method to invoke. - - Invokes the given callback with the concrete invocation arguments values. - - Notice how the specific arguments are retrieved by simply declaring - them as part of the lambda expression for the callback: - - - mock.Expect(x => x.Execute( - It.IsAny<string>(), - It.IsAny<string>())) - .Callback((string arg1, string arg2) => Console.WriteLine(arg1 + arg2)); - - - - - - Specifies a callback to invoke when the method is called that receives the original - arguments. - - Type of the first argument of the invoked method. - Type of the second argument of the invoked method. - Type of the third argument of the invoked method. - Callback method to invoke. - - Invokes the given callback with the concrete invocation arguments values. - - Notice how the specific arguments are retrieved by simply declaring - them as part of the lambda expression for the callback: - - - mock.Expect(x => x.Execute( - It.IsAny<string>(), - It.IsAny<string>(), - It.IsAny<int>())) - .Callback((string arg1, string arg2, int arg3) => Console.WriteLine(arg1 + arg2 + arg3)); - - - - - - Specifies a callback to invoke when the method is called that receives the original - arguments. - - Type of the first argument of the invoked method. - Type of the second argument of the invoked method. - Type of the third argument of the invoked method. - Type of the fourth argument of the invoked method. - Callback method to invoke. - - Invokes the given callback with the concrete invocation arguments values. - - Notice how the specific arguments are retrieved by simply declaring - them as part of the lambda expression for the callback: - - - mock.Expect(x => x.Execute( - It.IsAny<string>(), - It.IsAny<string>(), - It.IsAny<int>(), - It.IsAny<bool>())) - .Callback((string arg1, string arg2, int arg3, bool arg4) => Console.WriteLine(arg1 + arg2 + arg3 + arg4)); - - - - - - Defines occurrence members to constraint expectations. - - - - - The expected invocation can happen at most once. - - - - var mock = new Mock<ICommand>(); - mock.Expect(foo => foo.Execute("ping")) - .AtMostOnce(); - - - - - - The expected invocation can happen at most specified number of times. - - - - var mock = new Mock<ICommand>(); - mock.Expect(foo => foo.Execute("ping")) - .AtMost( 5 ); - - - - - - Defines the Verifiable verb. - - - - - Marks the expectation as verifiable, meaning that a call - to will check if this particular - expectation was met. - - - The following example marks the expectation as verifiable: - - mock.Expect(x => x.Execute("ping")) - .Returns(true) - .Verifiable(); - - - - - - Defines the Raises verb. - - - - - Specifies the mocked event that will be raised - when the expectation is met. - - The mocked event, retrieved from - or . - - The event args to pass when raising the event. - - The following example shows how to set an expectation that will - raise an event when it's met: - - var mock = new Mock<IContainer>(); - // create handler to associate with the event to raise - var handler = mock.CreateEventHandler(); - // associate the handler with the event to raise - mock.Object.Added += handler; - // set the expectation and the handler to raise - mock.Expect(add => add.Add(It.IsAny<string>(), It.IsAny<object>())) - .Raises(handler, EventArgs.Empty); - - - - - - Specifies the mocked event that will be raised - when the expectation is met. - - The mocked event, retrieved from - or . - - A function that will build the - to pass when raising the event. - - - - - Specifies the mocked event that will be raised - when the expectation is met. - - The mocked event, retrieved from - or . - - A function that will build the - to pass when raising the event. - Type of the argument received by the expected invocation. - - - - - Specifies the mocked event that will be raised - when the expectation is met. - - The mocked event, retrieved from - or . - - A function that will build the - to pass when raising the event. - Type of the first argument received by the expected invocation. - Type of the second argument received by the expected invocation. - - - - - Specifies the mocked event that will be raised - when the expectation is met. - - The mocked event, retrieved from - or . - - A function that will build the - to pass when raising the event. - Type of the first argument received by the expected invocation. - Type of the second argument received by the expected invocation. - Type of the third argument received by the expected invocation. - - - - - Specifies the mocked event that will be raised - when the expectation is met. - - The mocked event, retrieved from - or . - - A function that will build the - to pass when raising the event. - Type of the first argument received by the expected invocation. - Type of the second argument received by the expected invocation. - Type of the third argument received by the expected invocation. - Type of the fourth argument received by the expected invocation. - - - - - Marks a method as a matcher, which allows complete replacement - of the built-in class with your own argument - matching rules. - - - The argument matching is used to determine whether a concrete - invocation in the mock matches a given expectation. This - matching mechanism is fully extensible. - - There are two parts of a matcher: the compiler matcher - and the runtime matcher. - - - Compiler matcher - Used to satisfy the compiler requirements for the - argument. Needs to be a method optionally receiving any arguments - you might need for the matching, but with a return type that - matches that of the argument. - - Let's say I want to match a lists of orders that contains - a particular one. I might create a compiler matcher like the following: - - - public static class Orders - { - [Matcher] - public static IEnumerable<Order> Contains(Order order) - { - return null; - } - } - - Now we can invoke this static method instead of an argument in an - invocation: - - var order = new Order { ... }; - var mock = new Mock<IRepository<Order>>(); - - mock.Expect(x => x.Save(Orders.Contains(order))) - .Throws<ArgumentException>(); - - Note that the return value from the compiler matcher is irrelevant. - This method will never be called, and is just used to satisfy the - compiler and to signal Moq that this is not a method that we want - to be invoked at runtime. - - - - Runtime matcher - - The runtime matcher is the one that will actually perform evaluation - when the test is run, and is defined by convention to have the - same signature as the compiler matcher, but where the return - value is the first argument to the call, which contains the - object received by the actual invocation at runtime: - - public static bool Contains(IEnumerable<Order> orders, Order order) - { - return orders.Contains(order); - } - - At runtime, the mocked method will be invoked with a specific - list of orders. This value will be passed to this runtime - matcher as the first argument, while the second argument is the - one specified in the expectation (x.Save(Orders.Contains(order))). - - The boolean returned determines whether the given argument has been - matched. If all arguments to the expected method are matched, then - the expectation is verified. - - - - - - Using this extensible infrastructure, you can easily replace the entire - set of matchers with your own. You can also avoid the - typical (and annoying) lengthy expressions that result when you have - multiple arguments that use generics. - - - The following is the complete example explained above: - - public static class Orders - { - [Matcher] - public static IEnumerable<Order> Contains(Order order) - { - return null; - } - - public static bool Contains(IEnumerable<Order> orders, Order order) - { - return orders.Contains(order); - } - } - - And the concrete test using this matcher: - - var order = new Order { ... }; - var mock = new Mock<IRepository<Order>>(); - - mock.Expect(x => x.Save(Orders.Contains(order))) - .Throws<ArgumentException>(); - - // use mock, invoke Save, and have the matcher filter. - - - - - - Casts the expression to a lambda expression, removing - a cast if there's any. - - - - - Casts the body of the lambda expression to a . - - If the body is not a method call. - - - - Converts the body of the lambda expression into the referenced by it. - - - - - Checks whether the body of the lambda expression is a property access. - - - - - Checks whether the expression is a property access. - - - - - Checks whether the body of the lambda expression is a property indexer, which is true - when the expression is an whose - has - equal to . - - - - - Checks whether the expression is a property indexer, which is true - when the expression is an whose - has - equal to . - - - - - Creates an expression that casts the given expression to the - type. - - - - - TODO: remove this code when https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=331583 - is fixed. - - - - - Base class for visitors of expression trees. - - - Provides the functionality of the internal visitor base class that - comes with Linq. - Matt's comments on the implementation: - - In this variant there is only one visitor class that dispatches calls to the general - Visit function out to specific VisitXXX methods corresponding to different node types. - Note not every node type gets it own method, for example all binary operators are - treated in one VisitBinary method. The nodes themselves do not directly participate - in the visitation process. They are treated as just data. - The reason for this is that the quantity of visitors is actually open ended. - You can write your own. Therefore no semantics of visiting is coupled into the node classes. - It’s all in the visitors. The default visit behavior for node XXX is baked into the base - class’s version of VisitXXX. - - - Another variant is that all VisitXXX methods return a node. - The Expression tree nodes are immutable. In order to change the tree you must construct - a new one. The default VisitXXX methods will construct a new node if any of its sub-trees change. - If no changes are made then the same node is returned. That way if you make a change - to a node (by making a new node) deep down in a tree, the rest of the tree is rebuilt - automatically for you. - - See: http://blogs.msdn.com/mattwar/archive/2007/07/31/linq-building-an-iqueryable-provider-part-ii.aspx. - - Matt Warren: http://blogs.msdn.com/mattwar - Documented by InSTEDD: http://www.instedd.org - - - - Default constructor used by derived visitors. - - - - - Visits the , determining which - of the concrete Visit methods to call. - - - - - Visits the generic , determining and - calling the appropriate Visit method according to the - , which will result - in calls to , - or . - - - - - - - Visits the initializer by - calling the for the - . - - - - - Visits the expression by - calling with the expression. - - - - - Visits the by calling - with the , - and - expressions. - - - - - Visits the by calling - with the - expression. - - - - - Visits the , by default returning the - same without further behavior. - - - - - Visits the by calling - with the , - and - expressions. - - - - - Visits the returning it - by default without further behavior. - - - - - Visits the by calling - with the - expression. - - - - - Visits the by calling - with the expression, - and then with the . - - - - - - - Visits the by iterating - the list and visiting each in it. - - - - - - - Visits the by calling - with the expression. - - - - - - - Visits the by calling - with the . - - - - - - - Visits the by calling - with the - . - - - - - - - Visits the by - calling for each in the - collection. - - - - - - - Visits the by - calling for each - in the collection. - - - - - - - Visits the by calling - with the expression. - - - - - - - Visits the by calling - with the - expressions. - - - - - - - Visits the by calling - with the - expression, then with the - . - - - - - Visits the by calling - with the - expression, and then with the - . - - - - - - - Visits the by calling - with the - expressions. - - - - - - - Visits the by calling - with the - expressions. - - - - - - - Provides partial evaluation of subtrees, whenever they can be evaluated locally. - - Matt Warren: http://blogs.msdn.com/mattwar - Documented by InSTEDD: http://www.instedd.org - - - - Performs evaluation and replacement of independent sub-trees - - The root of the expression tree. - A function that decides whether a given expression - node can be part of the local function. - A new tree with sub-trees evaluated and replaced. - - - - Performs evaluation and replacement of independent sub-trees - - The root of the expression tree. - A new tree with sub-trees evaluated and replaced. - - - - Evaluates and replaces sub-trees when first candidate is reached (top-down) - - - - - Performs bottom-up analysis to determine which nodes can possibly - be part of an evaluated sub-tree. - - - - - Checks an argument to ensure it isn't null. - - The argument value to check. - The name of the argument. - - - - Checks a string argument to ensure it isn't null or empty. - - The argument value to check. - The name of the argument. - - - - Defines the Returns verb for property get expectations. - - Type of the property. - - - - Base interface for . - - - - - Specifies the value to return. - - The value to return, or . - - Return a true value from the property getter call: - - mock.ExpectGet(x => x.Suspended) - .Returns(true); - - - - - - Specifies a function that will calculate the value to return for the property. - - The function that will calculate the return value. - - Return a calculated value when the property is retrieved: - - mock.ExpectGet(x => x.Suspended) - .Returns(() => returnValues[0]); - - The lambda expression to retrieve the return value is lazy-executed, - meaning that its value may change depending on the moment the property - is retrieved and the value the returnValues array has at - that moment. - - - - - Defines the Callback verb for property getter expectations. - - - Type of the property. - - - - Specifies a callback to invoke when the property is retrieved. - - Callback method to invoke. - - Invokes the given callback with the property value being set. - - mock.ExpectGet(x => x.Suspended) - .Callback(() => called = true) - .Returns(true); - - - - - - Implements the fluent API. - - - - - Implements the fluent API. - - - - - Defines the Returns verb. - - Type of the return value from the expression. - - - - Specifies the value to return. - - The value to return, or . - - Return a true value from the method call: - - mock.Expect(x => x.Execute("ping")) - .Returns(true); - - - - - - Specifies a function that will calculate the value to return from the method. - - The function that will calculate the return value. - - Return a calculated value when the method is called: - - mock.Expect(x => x.Execute("ping")) - .Returns(() => returnValues[0]); - - The lambda expression to retrieve the return value is lazy-executed, - meaning that its value may change depending on the moment the method - is executed and the value the returnValues array has at - that moment. - - - - - Specifies a function that will calculate the value to return from the method, - retrieving the arguments for the invocation. - - Type of the argument of the invoked method. - The function that will calculate the return value. - - Return a calculated value which is evaluated lazily at the time of the invocation. - - The lookup list can change between invocations and the expectation - will return different values accordingly. Also, notice how the specific - string argument is retrieved by simply declaring it as part of the lambda - expression: - - - mock.Expect(x => x.Execute(It.IsAny<string>())) - .Returns((string command) => returnValues[command]); - - - - - - Specifies a function that will calculate the value to return from the method, - retrieving the arguments for the invocation. - - Type of the first argument of the invoked method. - Type of the second argument of the invoked method. - The function that will calculate the return value. - - Return a calculated value which is evaluated lazily at the time of the invocation. - - The return value is calculated from the value of the actual method invocation arguments. - Notice how the arguments are retrieved by simply declaring them as part of the lambda - expression: - - - mock.Expect(x => x.Execute( - It.IsAny<string>(), - It.IsAny<string>())) - .Returns((string arg1, string arg2) => arg1 + arg2); - - - - - - Specifies a function that will calculate the value to return from the method, - retrieving the arguments for the invocation. - - Type of the first argument of the invoked method. - Type of the second argument of the invoked method. - Type of the third argument of the invoked method. - The function that will calculate the return value. - - Return a calculated value which is evaluated lazily at the time of the invocation. - - The return value is calculated from the value of the actual method invocation arguments. - Notice how the arguments are retrieved by simply declaring them as part of the lambda - expression: - - - mock.Expect(x => x.Execute( - It.IsAny<string>(), - It.IsAny<string>(), - It.IsAny<int>())) - .Returns((string arg1, string arg2, int arg3) => arg1 + arg2 + arg3); - - - - - - Specifies a function that will calculate the value to return from the method, - retrieving the arguments for the invocation. - - Type of the first argument of the invoked method. - Type of the second argument of the invoked method. - Type of the third argument of the invoked method. - Type of the fourth argument of the invoked method. - The function that will calculate the return value. - - Return a calculated value which is evaluated lazily at the time of the invocation. - - The return value is calculated from the value of the actual method invocation arguments. - Notice how the arguments are retrieved by simply declaring them as part of the lambda - expression: - - - mock.Expect(x => x.Execute( - It.IsAny<string>(), - It.IsAny<string>(), - It.IsAny<int>(), - It.IsAny<bool>())) - .Returns((string arg1, string arg2, int arg3, bool arg4) => arg1 + arg2 + arg3 + arg4); - - - - - - Defines the Throws verb. - - - - - Specifies the exception to throw when the method is invoked. - - Exception instance to throw. - - This example shows how to throw an exception when the method is - invoked with an empty string argument: - - mock.Expect(x => x.Execute("")) - .Throws(new ArgumentException()); - - - - - - Specifies the type of exception to throw when the method is invoked. - - Type of exception to instantiate and throw when the expectation is met. - - This example shows how to throw an exception when the method is - invoked with an empty string argument: - - mock.Expect(x => x.Execute("")) - .Throws<ArgumentException>(); - - - - - - Implements the fluent API. - - - - - Implements the fluent API. - - - - - Defines the Callback verb and overloads for callbacks on - expectations that return a value. - - Type of the return value of the expectation. - - - - Specifies a callback to invoke when the method is called. - - Callback method to invoke. - - The following example specifies a callback to set a boolean - value that can be used later: - - bool called = false; - mock.Expect(x => x.Execute()) - .Callback(() => called = true) - .Returns(true); - - Note that in the case of value-returning methods, after the Callback - call you can still specify the return value. - - - - - Specifies a callback to invoke when the method is called that receives the original - arguments. - - Type of the argument of the invoked method. - Callback method to invoke. - - Invokes the given callback with the concrete invocation argument value. - - Notice how the specific string argument is retrieved by simply declaring - it as part of the lambda expression for the callback: - - - mock.Expect(x => x.Execute(It.IsAny<string>())) - .Callback((string command) => Console.WriteLine(command)) - .Returns(true); - - - - - - Specifies a callback to invoke when the method is called that receives the original - arguments. - - Type of the first argument of the invoked method. - Type of the second argument of the invoked method. - Callback method to invoke. - - Invokes the given callback with the concrete invocation arguments values. - - Notice how the specific arguments are retrieved by simply declaring - them as part of the lambda expression for the callback: - - - mock.Expect(x => x.Execute( - It.IsAny<string>(), - It.IsAny<string>())) - .Callback((string arg1, string arg2) => Console.WriteLine(arg1 + arg2)) - .Returns(true); - - - - - - Specifies a callback to invoke when the method is called that receives the original - arguments. - - Type of the first argument of the invoked method. - Type of the second argument of the invoked method. - Type of the third argument of the invoked method. - Callback method to invoke. - - Invokes the given callback with the concrete invocation arguments values. - - Notice how the specific arguments are retrieved by simply declaring - them as part of the lambda expression for the callback: - - - mock.Expect(x => x.Execute( - It.IsAny<string>(), - It.IsAny<string>(), - It.IsAny<int>())) - .Callback((string arg1, string arg2, int arg3) => Console.WriteLine(arg1 + arg2 + arg3)) - .Returns(true); - - - - - - Specifies a callback to invoke when the method is called that receives the original - arguments. - - Type of the first argument of the invoked method. - Type of the second argument of the invoked method. - Type of the third argument of the invoked method. - Type of the fourth argument of the invoked method. - Callback method to invoke. - - Invokes the given callback with the concrete invocation arguments values. - - Notice how the specific arguments are retrieved by simply declaring - them as part of the lambda expression for the callback: - - - mock.Expect(x => x.Execute( - It.IsAny<string>(), - It.IsAny<string>(), - It.IsAny<int>(), - It.IsAny<bool>())) - .Callback((string arg1, string arg2, int arg3, bool arg4) => Console.WriteLine(arg1 + arg2 + arg3 + arg4)) - .Returns(true); - - - - - - Implemented by all generated mock object instances. - - - - - Implemented by all generated mock object instances. - - - - - Reference the Mock that contains this as the mock.Object value. - - - - - Reference the Mock that contains this as the mock.Object value. - - - - - Implements the actual interception and method invocation for - all mocks. - - - - - Get an eventInfo for a given event name. Search type ancestors depth first if necessary. - - Name of the event, with the set_ or get_ prefix already removed - - - - Given a type return all of its ancestors, both types and interfaces. - - The type to find immediate ancestors of - - - - Implements the fluent API. - - - - - Defines the Never verb. - - - - - The expected invocation is never expected to happen. - - - - var mock = new Mock<ICommand>(); - mock.Expect(foo => foo.Execute("ping")) - .Never(); - - - - is always verified inmediately as - the invocations are performed, like strict mocks do - with unexpected invocations. - - - - - Implements the fluent API. - - - - - Implements the fluent API. - - - - - Implements the fluent API. - - - - - Defines the Callback verb for property setter expectations. - - - - Type of the property. - - - - Specifies a callback to invoke when the property is set that receives the - property value being set. - - Callback method to invoke. - - Invokes the given callback with the property value being set. - - mock.ExpectSet(x => x.Suspended) - .Callback((bool state) => Console.WriteLine(state)); - - - - - - Allows the specification of a matching condition for an - argument in a method invocation, rather than a specific - argument value. "It" refers to the argument being matched. - - - This class allows the expectation to match a method invocation - with an arbitrary value, with a value in a specified range, or - even one that matches a given predicate. - - - - - Matches any value of the given type. - - - Typically used when the actual argument value for a method - call is not relevant. - - - - // Throws an exception for a call to Remove with any string value. - mock.Expect(x => x.Remove(It.IsAny<string>())).Throws(new InvalidOperationException()); - - - Type of the value. - - - - Matches any value that satisfies the given predicate. - - Type of the argument to check. - The predicate used to match the method argument. - - Allows the specification of a predicate to perform matching - of method call arguments. - - - This example shows how to return the value 1 whenever the argument to the - Do method is an even number. - - mock.Expect(x => x.Do(It.Is<int>(i => i % 2 == 0))) - .Returns(1); - - This example shows how to throw an exception if the argument to the - method is a negative number: - - mock.Expect(x => x.GetUser(It.Is<int>(i => i < 0))) - .Throws(new ArgumentException()); - - - - - - Matches any value that is in the range specified. - - Type of the argument to check. - The lower bound of the range. - The upper bound of the range. - The kind of range. See . - - The following example shows how to expect a method call - with an integer argument within the 0..100 range. - - mock.Expect(x => x.HasInventory( - It.IsAny<string>(), - It.IsInRange(0, 100, Range.Inclusive))) - .Returns(false); - - - - - - Matches a string argument if it matches the given regular expression pattern. - - The pattern to use to match the string argument value. - - The following example shows how to expect a call to a method where the - string argument matches the given regular expression: - - mock.Expect(x => x.Check(It.IsRegex("[a-z]+"))).Returns(1); - - - - - - Matches a string argument if it matches the given regular expression pattern. - - The pattern to use to match the string argument value. - The options used to interpret the pattern. - - The following example shows how to expect a call to a method where the - string argument matches the given regular expression, in a case insensitive way: - - mock.Expect(x => x.Check(It.IsRegex("[a-z]+", RegexOptions.IgnoreCase))).Returns(1); - - - - - - Matcher to treat static functions as matchers. - - mock.Expect(x => x.StringMethod(A.MagicString())); - - pbulic static class A - { - [Matcher] - public static string MagicString() { return null; } - public static bool MagicString(string arg) - { - return arg == "magic"; - } - } - - Will success if: mock.Object.StringMethod("magic"); - and fail with any other call. - - - - - We need this non-generics base class so that - we can use from - generic code. - - - - - Base class for mocks and static helper class with methods that - apply to mocked objects, such as to - retrieve a from an object instance. - - - - - Base mock interface exposing non-generic members. - - - - - Creates a handler that can be associated to an event receiving - the given and can be used - to raise the event. - - Type of - data passed in to the event. - - This example shows how to invoke an event with a custom event arguments - class in a view that will cause its corresponding presenter to - react by changing its state: - - var mockView = new Mock<IOrdersView>(); - var mockedEvent = mockView.CreateEventHandler<OrderEventArgs>(); - - var presenter = new OrdersPresenter(mockView.Object); - - // Check that the presenter has no selection by default - Assert.Null(presenter.SelectedOrder); - - // Create a mock event handler of the appropriate type - var handler = mockView.CreateEventHandler<OrderEventArgs>(); - // Associate it with the event we want to raise - mockView.Object.Cancel += handler; - // Finally raise the event with a specific arguments data - handler.Raise(new OrderEventArgs { Order = new Order("moq", 500) }); - - // Now the presenter reacted to the event, and we have a selected order - Assert.NotNull(presenter.SelectedOrder); - Assert.Equal("moq", presenter.SelectedOrder.ProductName); - - - - - - Creates a handler that can be associated to an event receiving - a generic and can be used - to raise the event. - - - This example shows how to invoke a generic event in a view that will - cause its corresponding presenter to react by changing its state: - - var mockView = new Mock<IOrdersView>(); - var mockedEvent = mockView.CreateEventHandler(); - - var presenter = new OrdersPresenter(mockView.Object); - - // Check that the presenter is not in the "Canceled" state - Assert.False(presenter.IsCanceled); - - // Create a mock event handler of the appropriate type - var handler = mockView.CreateEventHandler(); - // Associate it with the event we want to raise - mockView.Object.Cancel += handler; - // Finally raise the event - handler.Raise(EventArgs.Empty); - - // Now the presenter reacted to the event, and changed its state - Assert.True(presenter.IsCanceled); - - - - - - Verifies that all verifiable expectations have been met. - - - This example sets up an expectation and marks it as verifiable. After - the mock is used, a call is issued on the mock - to ensure the method in the expectation was invoked: - - var mock = new Mock<IWarehouse>(); - mock.Expect(x => x.HasInventory(TALISKER, 50)).Verifiable().Returns(true); - ... - // other test code - ... - // Will throw if the test code has didn't call HasInventory. - mock.Verify(); - - - Not all verifiable expectations were met. - - - - Verifies all expectations regardless of whether they have - been flagged as verifiable. - - - This example sets up an expectation without marking it as verifiable. After - the mock is used, a call is issued on the mock - to ensure that all expectations are met: - - var mock = new Mock<IWarehouse>(); - mock.Expect(x => x.HasInventory(TALISKER, 50)).Returns(true); - ... - // other test code - ... - // Will throw if the test code has didn't call HasInventory, even - // that expectation was not marked as verifiable. - mock.VerifyAll(); - - - At least one expectation was not met. - - - - Whether the base member virtual implementation will be called - for mocked classes if no expectation is met. Defaults to . - - - - - Determines how to generate default values for loose mocks on - unexpected invocations. - - - - - The mocked object instance. - - - - - Retrieves the mock object for the given object instance. - - Type of the mock to retrieve. Can be omitted as it's inferred - from the object instance passed in as the instance. - The instance of the mocked object. - The mock associated with the mocked object. - The received instance - was not created by Moq. - - The following example shows how to add a new expectation to an object - instance which is not the original but rather - the object associated with it: - - // Typed instance, not the mock, is retrieved from some test API. - HttpContextBase context = GetMockContext(); - - // context.Request is the typed object from the "real" API - // so in order to add an expectation to it, we need to get - // the mock that "owns" it - Mock<HttpRequestBase> request = Mock.Get(context.Request); - mock.Expect(req => req.AppRelativeCurrentExecutionFilePath) - .Returns(tempUrl); - - - - - - Initializes the mock - - - - - Returns the mocked object value. - - - - - Implements . - - - - - Implements . - - - - - Gets the interceptor target for the given expression and root mock, - building the intermediate hierarchy of mock objects if necessary. - - - - - Implements . - - Type of event argument class. - - - - Implements - - - - - Base class for mocks and static helper class with methods that - apply to mocked objects, such as to - retrieve a from an object instance. - - - - - Exposes the list of extra interfaces implemented by the mock. - - - - - Implements . - - - - - Implements . - - - - - Implements . - - - - - Specifies the class that will determine the default - value to return when invocations are made that - have no expectations and need to return a default - value (for loose mocks). - - - - - The mocked object instance. Implements . - - - - - Retrieves the type of the mocked object, its generic type argument. - This is used in the auto-mocking of hierarchy access. - - - - - Represents a generic event that has been mocked and can - be rised. - - - - - Provided solely to allow the interceptor to determine when the attached - handler is coming from this mocked event so we can assign the - corresponding EventInfo for it. - - - - - Raises the associated event with the given - event argument data. - - - - - Provides support for attaching a to - a generic event. - - Event to convert. - - - - Event raised whenever the mocked event is rised. - - - - - Options to customize the behavior of the mock. - - - - - Causes the mock to always throw - an exception for invocations that don't have a - corresponding expectation. - - - - - Will never throw exceptions, returning default - values when necessary (null for reference types, - zero for value types or empty enumerables and arrays). - - - - - Default mock behavior, which equals . - - - - - Exception thrown by mocks when expectations are not met, - the mock is not properly setup, etc. - - - A distinct exception type is provided so that exceptions - thrown by the mock can be differentiated in tests that - expect other exceptions to be thrown (i.e. ArgumentException). - - Richer exception hierarchy/types are not provided as - tests typically should not catch or expect exceptions - from the mocks. These are typically the result of changes - in the tested class or its collaborators implementation, and - result in fixes in the mock setup so that they dissapear and - allow the test to pass. - - - - - - Supports the serialization infrastructure. - - Serialization information. - Streaming context. - - - - Supports the serialization infrastructure. - - Serialization information. - Streaming context. - - - - Made internal as it's of no use for - consumers, but it's important for - our own tests. - - - - - Used by the mock factory to accumulate verification - failures. - - - - - Supports the serialization infrastructure. - - - - - Utility factory class to use to construct multiple - mocks when consistent verification is - desired for all of them. - - - If multiple mocks will be created during a test, passing - the desired (if different than the - or the one - passed to the factory constructor) and later verifying each - mock can become repetitive and tedious. - - This factory class helps in that scenario by providing a - simplified creation of multiple mocks with a default - (unless overriden by calling - ) and posterior verification. - - - - The following is a straightforward example on how to - create and automatically verify strict mocks using a : - - var factory = new MockFactory(MockBehavior.Strict); - - var foo = factory.Create<IFoo>(); - var bar = factory.Create<IBar>(); - - // no need to call Verifiable() on the expectation - // as we'll be validating all expectations anyway. - foo.Expect(f => f.Do()); - bar.Expect(b => b.Redo()); - - // exercise the mocks here - - factory.VerifyAll(); - // At this point all expectations are already checked - // and an optional MockException might be thrown. - // Note also that because the mocks are strict, any invocation - // that doesn't have a matching expectation will also throw a MockException. - - The following examples shows how to setup the factory - to create loose mocks and later verify only verifiable expectations: - - var factory = new MockFactory(MockBehavior.Loose); - - var foo = factory.Create<IFoo>(); - var bar = factory.Create<IBar>(); - - // this expectation will be verified at the end of the "using" block - foo.Expect(f => f.Do()).Verifiable(); - - // this expectation will NOT be verified - foo.Expect(f => f.Calculate()); - - // this expectation will be verified at the end of the "using" block - bar.Expect(b => b.Redo()).Verifiable(); - - // exercise the mocks here - // note that because the mocks are Loose, members - // called in the interfaces for which no matching - // expectations exist will NOT throw exceptions, - // and will rather return default values. - - factory.Verify(); - // At this point verifiable expectations are already checked - // and an optional MockException might be thrown. - - The following examples shows how to setup the factory with a - default strict behavior, overriding that default for a - specific mock: - - var factory = new MockFactory(MockBehavior.Strict); - - // this particular one we want loose - var foo = factory.Create<IFoo>(MockBehavior.Loose); - var bar = factory.Create<IBar>(); - - // set expectations - - // exercise the mocks here - - factory.Verify(); - - - - - - - Initializes the factory with the given - for newly created mocks from the factory. - - The behavior to use for mocks created - using the factory method if not overriden - by using the overload. - - - - Creates a new mock with the default - specified at factory construction time. - - Type to mock. - A new . - - - var factory = new MockFactory(MockBehavior.Strict); - - var foo = factory.Create<IFoo>(); - // use mock on tests - - factory.VerifyAll(); - - - - - - Creates a new mock with the default - specified at factory construction time and with the - the given constructor arguments for the class. - - - The mock will try to find the best match constructor given the - constructor arguments, and invoke that to initialize the instance. - This applies only to classes, not interfaces. - - Type to mock. - Constructor arguments for mocked classes. - A new . - - - var factory = new MockFactory(MockBehavior.Default); - - var mock = factory.Create<MyBase>("Foo", 25, true); - // use mock on tests - - factory.Verify(); - - - - - - Creates a new mock with the given . - - Type to mock. - Behavior to use for the mock, which overrides - the default behavior specified at factory construction time. - A new . - - The following example shows how to create a mock with a different - behavior to that specified as the default for the factory: - - var factory = new MockFactory(MockBehavior.Strict); - - var foo = factory.Create<IFoo>(MockBehavior.Loose); - - - - - - Creates a new mock with the given - and with the the given constructor arguments for the class. - - - The mock will try to find the best match constructor given the - constructor arguments, and invoke that to initialize the instance. - This applies only to classes, not interfaces. - - Type to mock. - Behavior to use for the mock, which overrides - the default behavior specified at factory construction time. - Constructor arguments for mocked classes. - A new . - - The following example shows how to create a mock with a different - behavior to that specified as the default for the factory, passing - constructor arguments: - - var factory = new MockFactory(MockBehavior.Default); - - var mock = factory.Create<MyBase>(MockBehavior.Strict, "Foo", 25, true); - - - - - - Implements creation of a new mock within the factory. - - Type to mock. - The behavior for the new mock. - Optional arguments for the construction of the mock. - - - - Verifies all verifiable expectations on all mocks created - by this factory. - - - One or more mocks had expectations that were not satisfied. - - - - Verifies all verifiable expectations on all mocks created - by this factory. - - - One or more mocks had expectations that were not satisfied. - - - - Invokes for each mock - in , and accumulates the resulting - that might be - thrown from the action. - - The action to execute against - each mock. - - - - Whether the base member virtual implementation will be called - for mocked classes if no expectation is met. Defaults to . - - - - - Specifies the behavior to use when returning default values for - unexpected invocations on loose mocks. - - - - - Gets the mocks that have been created by this factory and - that will get verified together. - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to Mock type has already been initialized by accessing its Object property. Adding interfaces must be done before that.. - - - - - Looks up a localized string similar to Can only add interfaces to the mock.. - - - - - Looks up a localized string similar to Can't set return value for void method {0}.. - - - - - Looks up a localized string similar to Constructor arguments cannot be passed for interface mocks.. - - - - - Looks up a localized string similar to A matching constructor for the given arguments was not found on the mocked type.. - - - - - Looks up a localized string similar to Invalid expectation on a non-overridable member: - {0}. - - - - - Looks up a localized string similar to A lambda expression is expected as the argument to It.Is<T>.. - - - - - Looks up a localized string similar to Invocation {0} should not have been made.. - - - - - Looks up a localized string similar to Expression is not a method invocation: {0}. - - - - - Looks up a localized string similar to Expression is not a property access: {0}. - - - - - Looks up a localized string similar to Expression {0} involves a field access, which is not supported. Use properties instead.. - - - - - Looks up a localized string similar to Type to mock must be an interface or an abstract or non-sealed class. . - - - - - Looks up a localized string similar to Cannot retrieve a mock with the given object type {0} as it's not the main type of the mock or any of its additional interfaces. - Please cast the argument to one of the supported types: {1}. - Remember that there's no generics covariance in the CLR, so your object must be one of these types in order for the call to succeed.. - - - - - Looks up a localized string similar to Member {0}.{1} does not exist.. - - - - - Looks up a localized string similar to Method {0}.{1} is public. Use strong-typed Expect overload instead: - mock.Expect(x => x.{1}()); - . - - - - - Looks up a localized string similar to {0} invocation failed with mock behavior {1}. - {2}. - - - - - Looks up a localized string similar to Expected only {0} calls to {1}.. - - - - - Looks up a localized string similar to Expected only one call to {0}.. - - - - - Looks up a localized string similar to All invocations on the mock must have a corresponding expectation.. - - - - - Looks up a localized string similar to The given invocation was not performed on the mock.. - - - - - Looks up a localized string similar to Object instance was not created by Moq.. - - - - - Looks up a localized string similar to Property {0}.{1} does not exist.. - - - - - Looks up a localized string similar to Property {0}.{1} is write-only.. - - - - - Looks up a localized string similar to Property {0}.{1} is read-only.. - - - - - Looks up a localized string similar to Cannot raise a mocked event unless it has been associated (attached) to a concrete event in a mocked object.. - - - - - Looks up a localized string similar to Invocation needs to return a value and therefore must have a corresponding expectation that provides it.. - - - - - Looks up a localized string similar to To set expectations for public property {0}.{1}, use the typed overloads, such as: - mock.Expect(x => x.{1}).Returns(value); - mock.ExpectGet(x => x.{1}).Returns(value); //equivalent to previous one - mock.ExpectSet(x => x.{1}).Callback(callbackDelegate); - . - - - - - Looks up a localized string similar to Expression {0} is not supported.. - - - - - Looks up a localized string similar to Only property accesses are supported in intermediate invocations on an expectation. Unsupported expression {0}.. - - - - - Looks up a localized string similar to Expression contains intermediate property access {0}.{1} which is of type {2} and cannot be mocked. Unsupported expression {3}.. - - - - - Looks up a localized string similar to Member {0} is not supported for protected mocking.. - - - - - Looks up a localized string similar to To set expectations for protected property {0}.{1}, use: - mock.Expect<{2}>(x => x.{1}).Returns(value); - mock.ExpectGet(x => x.{1}).Returns(value); //equivalent to previous one - mock.ExpectSet(x => x.{1}).Callback(callbackDelegate);. - - - - - Looks up a localized string similar to The following expectations were not met: - {0}. - - - - - Allows expectations to be set for protected members by using their - name as a string, rather than strong-typing them which is not possible - due to their visibility. - - - - - Sets an expectation on the void method with the given - , optionally specifying - arguments for the method call. - - Name of the void method to be invoke. - Optional arguments for the invocation. - - - - Sets an expectation on a property or a non void method with the given - , optionally specifying - arguments for the method call. - - Name of the method or property to be invoke. - Optional arguments for the invocation. - Return type of the method or property. - - - - Sets an expectation on a property getter with the given - . - - Name of the property. - Type of the property. - - - - Sets an expectation on a property setter with the given - . - - Name of the property. - Type of the property. - - - - Allows the specification of a matching condition for an - argument in a protected member expectation, rather than a specific - argument value. "ItExpr" refers to the argument being matched. - - - Use this variant of argument matching instead of - for protected expectations. - This class allows the expectation to match a method invocation - with an arbitrary value, with a value in a specified range, or - even one that matches a given predicate. - - - - - Matches any value of the given type. - - - Typically used when the actual argument value for a method - call is not relevant. - - - - // Throws an exception for a call to Remove with any string value. - mock.Protected() - .Expect("Remove", ItExpr.IsAny<string>()) - .Throws(new InvalidOperationException()); - - - Type of the value. - - - - Matches any value that satisfies the given predicate. - - Type of the argument to check. - The predicate used to match the method argument. - - Allows the specification of a predicate to perform matching - of method call arguments. - - - This example shows how to return the value 1 whenever the argument to the - Do method is an even number. - - mock.Protected() - .Expect("Do", ItExpr.Is<int>(i => i % 2 == 0)) - .Returns(1); - - This example shows how to throw an exception if the argument to the - method is a negative number: - - mock.Protected() - .Expect("GetUser", ItExpr.Is<int>(i => i < 0)) - .Throws(new ArgumentException()); - - - - - - Matches any value that is in the range specified. - - Type of the argument to check. - The lower bound of the range. - The upper bound of the range. - The kind of range. See . - - The following example shows how to expect a method call - with an integer argument within the 0..100 range. - - mock.Protected() - .Expect("HasInventory", - ItExpr.IsAny<string>(), - ItExpr.IsInRange(0, 100, Range.Inclusive)) - .Returns(false); - - - - - - Matches a string argument if it matches the given regular expression pattern. - - The pattern to use to match the string argument value. - - The following example shows how to expect a call to a method where the - string argument matches the given regular expression: - - mock.Protected() - .Expect("Check", ItExpr.IsRegex("[a-z]+")) - .Returns(1); - - - - - - Matches a string argument if it matches the given regular expression pattern. - - The pattern to use to match the string argument value. - The options used to interpret the pattern. - - The following example shows how to expect a call to a method where the - string argument matches the given regular expression, in a case insensitive way: - - mock.Protected() - .Expect("Check", ItExpr.IsRegex("[a-z]+", RegexOptions.IgnoreCase)) - .Returns(1); - - - - - - Enables the Protected() method on , - allowing expectations to be set for protected members by using their - name as a string, rather than strong-typing them which is not possible - due to their visibility. - - - - - Enable protected expectations for the mock. - - Mocked object type. Typically omitted as it can be inferred from the mock instance. - The mock to set the protected expectations on. - - - - - - - - - - - - Kind of range to use in a filter specified through - . - - - - - The range includes the to and - from values. - - - - - The range does not include the to and - from values. - - - - - Determines the way default values are generated - calculated for loose mocks. - - - - - Default behavior, which generates empty values for - value types (i.e. default(int)), empty array and - enumerables, and nulls for all other reference types. - - - - - Whenever the default value generated by - is null, replaces this value with a mock (if the type - can be mocked). - - - For sealed classes, a null value will be generated. - - - - - Core implementation of the interface. - - - Type to mock. - - - - Initializes an instance of the mock with default behavior and with - the given constructor arguments for the class. (Only valid when is a class) - - - The mock will try to find the best match constructor given the constructor arguments, and invoke that - to initialize the instance. This applies only for classes, not interfaces. - - - var mock = new Mock<MyProvider>(someArgument, 25); - - Optional constructor arguments if the mocked type is a class. - - - - Initializes an instance of the mock with default behavior. - - - var mock = new Mock<IFormatProvider>(); - - - - - Initializes an instance of the mock with the specified behavior. - - - var mock = new Mock<IFormatProvider>(MockBehavior.Relaxed); - - Behavior of the mock. - - - - Initializes an instance of the mock with a specific behavior with - the given constructor arguments for the class. - - - The mock will try to find the best match constructor given the constructor arguments, and invoke that - to initialize the instance. This applies only to classes, not interfaces. - - - var mock = new Mock<MyProvider>(someArgument, 25); - - Behavior of the mock. - Optional constructor arguments if the mocked type is a class. - - - - Returns the mocked object value. - - - - - Implements . - - Lambda expression that specifies the expected method invocation. - - - - Implements . - - Type of the return value. Typically omitted as it can be inferred from the expression. - Lambda expression that specifies the expected method invocation. - - - - Implements . - - Type of the property. Typically omitted as it can be inferred from the expression. - Lambda expression that specifies the expected property getter. - - - - Implements . - - Type of the property. Typically omitted as it can be inferred from the expression. - Lambda expression that specifies the expected property setter. - - - - Implements . - - Type of the property. Typically omitted as it can be inferred from the expression. - Lambda expression that specifies the expected property setter. - The value expected to be set for the property. - - - - Implements . - - Expression to verify. - - - - Implements . - - Expression to verify. - Type of return value from the expression. - - - - Implements . - - Expression to verify. - Type of the property to verify. Typically omitted as it can - be inferred from the expression's return type. - - - - Implements . - - Expression to verify. - Type of the property to verify. Typically omitted as it can - be inferred from the expression's return type. - - - - Implements . - - Expression to verify. - The value that should have been set on the property. - Type of the property to verify. Typically omitted as it can - be inferred from the expression's return type. - - - - Implements . - - - - - Implements . - - - - - Implements . - - Type of interface to cast the mock to. - - - - Exposes the mocked object instance. - - - - - A that returns an empty default value - for non-mockeable types, and mocks for all other types (interfaces and - non-sealed classes) that can be mocked. - - - - - Provides a typed for a - specific type of . - - The type of event arguments required by the event. - - The mocked event can either be a or custom - event handler which follows .NET practice of providing object sender, EventArgs args - kind of signature. - - - - - Raises the associated event with the given - event argument data. - - Data to pass to the event. - - - - Provides support for attaching a to - a generic event. - - Event to convert. - - - - Provided solely to allow the interceptor to determine when the attached - handler is coming from this mocked event so we can assign the - corresponding EventInfo for it. - - - - - Adds Stub extension method to a mock so that you can - stub properties. - - - - - Specifies that the given property should have stub behavior, - meaning that setting its value will cause it to be saved and - later returned when the property is requested. - - Mocked type, inferred from the object - where this method is being applied (does not need to be specified). - Type of the property, inferred from the property - expression (does not need to be specified). - The instance to stub. - Property expression to stub. - - If you have an interface with an int property Value, you might - stub it using the following straightforward call: - - var mock = new Mock<IHaveValue>(); - mock.Stub(v => v.Value); - - After the Stub call has been issued, setting and - retrieving the object value will behave as expected: - - IHaveValue v = mock.Object; - - v.Value = 5; - Assert.Equal(5, v.Value); - - - - - - Specifies that the given property should have stub behavior, - meaning that setting its value will cause it to be saved and - later returned when the property is requested. This overload - allows setting the initial value for the property. - - Mocked type, inferred from the object - where this method is being applied (does not need to be specified). - Type of the property, inferred from the property - expression (does not need to be specified). - The instance to stub. - Property expression to stub. - Initial value for the property. - - If you have an interface with an int property Value, you might - stub it using the following straightforward call: - - var mock = new Mock<IHaveValue>(); - mock.Stub(v => v.Value, 5); - - After the Stub call has been issued, setting and - retrieving the object value will behave as expected: - - IHaveValue v = mock.Object; - // Initial value was stored - Assert.Equal(5, v.Value); - - // New value set which changes the initial value - v.Value = 6; - Assert.Equal(6, v.Value); - - - - - - Stubs all properties on the mock, setting the default value to - the one generated as specified by the - property. - - Mocked type, typically omitted as it can be inferred from the mock argument. - The mock to stub. - - If the mock is set to , - the mocked default values will also be stubbed recursively. - - - - diff --git a/lib/tests/Northwind.Common.dll b/lib/tests/Northwind.Common.dll deleted file mode 100644 index b33ffb1092a..00000000000 Binary files a/lib/tests/Northwind.Common.dll and /dev/null differ diff --git a/lib/tests/ServiceStack.Mvc.Stubs.Tests.dll b/lib/tests/ServiceStack.Mvc.Stubs.Tests.dll deleted file mode 100644 index d9833edd1b3..00000000000 Binary files a/lib/tests/ServiceStack.Mvc.Stubs.Tests.dll and /dev/null differ diff --git a/lib/tests/nunit-console-runner.dll b/lib/tests/nunit-console-runner.dll deleted file mode 100644 index e637d6523b6..00000000000 Binary files a/lib/tests/nunit-console-runner.dll and /dev/null differ diff --git a/lib/tests/nunit-console-x86.exe b/lib/tests/nunit-console-x86.exe deleted file mode 100644 index 0f9a832d3be..00000000000 Binary files a/lib/tests/nunit-console-x86.exe and /dev/null differ diff --git a/lib/tests/nunit-console-x86.exe.config b/lib/tests/nunit-console-x86.exe.config deleted file mode 100644 index 8a6a2a6a669..00000000000 --- a/lib/tests/nunit-console-x86.exe.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/lib/tests/nunit-console.exe b/lib/tests/nunit-console.exe deleted file mode 100644 index db1700badd1..00000000000 Binary files a/lib/tests/nunit-console.exe and /dev/null differ diff --git a/lib/tests/nunit-console.exe.config b/lib/tests/nunit-console.exe.config deleted file mode 100644 index 8a6a2a6a669..00000000000 --- a/lib/tests/nunit-console.exe.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/lib/tests/nunit.core.dll b/lib/tests/nunit.core.dll deleted file mode 100644 index 1c57782550d..00000000000 Binary files a/lib/tests/nunit.core.dll and /dev/null differ diff --git a/lib/tests/nunit.core.interfaces.dll b/lib/tests/nunit.core.interfaces.dll deleted file mode 100644 index 941d4931d98..00000000000 Binary files a/lib/tests/nunit.core.interfaces.dll and /dev/null differ diff --git a/lib/tests/nunit.framework.dll b/lib/tests/nunit.framework.dll deleted file mode 100644 index 215767d2fb3..00000000000 Binary files a/lib/tests/nunit.framework.dll and /dev/null differ diff --git a/lib/tests/nunit.framework.extensions.dll b/lib/tests/nunit.framework.extensions.dll deleted file mode 100644 index 91e05857a68..00000000000 Binary files a/lib/tests/nunit.framework.extensions.dll and /dev/null differ diff --git a/lib/tests/nunit.framework.xml b/lib/tests/nunit.framework.xml deleted file mode 100644 index 7b0e798cada..00000000000 --- a/lib/tests/nunit.framework.xml +++ /dev/null @@ -1,10892 +0,0 @@ - - - - nunit.framework - - - - - Attribute used to apply a category to a test - - - - - The name of the category - - - - - Construct attribute for a given category based on - a name. The name may not contain the characters ',', - '+', '-' or '!'. However, this is not checked in the - constructor since it would cause an error to arise at - as the test was loaded without giving a clear indication - of where the problem is located. The error is handled - in NUnitFramework.cs by marking the test as not - runnable. - - The name of the category - - - - Protected constructor uses the Type name as the name - of the category. - - - - - The name of the category - - - - - Used to mark a field for use as a datapoint when executing a theory - within the same fixture that requires an argument of the field's Type. - - - - - Used to mark an array as containing a set of datapoints to be used - executing a theory within the same fixture that requires an argument - of the Type of the array elements. - - - - - Attribute used to provide descriptive text about a - test case or fixture. - - - - - Construct the attribute - - Text describing the test - - - - Gets the test description - - - - - Enumeration indicating how the expected message parameter is to be used - - - - Expect an exact match - - - Expect a message containing the parameter string - - - Match the regular expression provided as a parameter - - - Expect a message that starts with the parameter string - - - - ExpectedExceptionAttribute - - - - - - Constructor for a non-specific exception - - - - - Constructor for a given type of exception - - The type of the expected exception - - - - Constructor for a given exception name - - The full name of the expected exception - - - - Gets or sets the expected exception type - - - - - Gets or sets the full Type name of the expected exception - - - - - Gets or sets the expected message text - - - - - Gets or sets the user message displayed in case of failure - - - - - Gets or sets the type of match to be performed on the expected message - - - - - Gets the name of a method to be used as an exception handler - - - - - ExplicitAttribute marks a test or test fixture so that it will - only be run if explicitly executed from the gui or command line - or if it is included by use of a filter. The test will not be - run simply because an enclosing suite is run. - - - - - Default constructor - - - - - Constructor with a reason - - The reason test is marked explicit - - - - The reason test is marked explicit - - - - - Attribute used to mark a test that is to be ignored. - Ignored tests result in a warning message when the - tests are run. - - - - - Constructs the attribute without giving a reason - for ignoring the test. - - - - - Constructs the attribute giving a reason for ignoring the test - - The reason for ignoring the test - - - - The reason for ignoring a test - - - - - Abstract base for Attributes that are used to include tests - in the test run based on environmental settings. - - - - - Constructor with no included items specified, for use - with named property syntax. - - - - - Constructor taking one or more included items - - Comma-delimited list of included items - - - - Name of the item that is needed in order for - a test to run. Multiple itemss may be given, - separated by a comma. - - - - - Name of the item to be excluded. Multiple items - may be given, separated by a comma. - - - - - The reason for including or excluding the test - - - - - PlatformAttribute is used to mark a test fixture or an - individual method as applying to a particular platform only. - - - - - Constructor with no platforms specified, for use - with named property syntax. - - - - - Constructor taking one or more platforms - - Comma-deliminted list of platforms - - - - CultureAttribute is used to mark a test fixture or an - individual method as applying to a particular Culture only. - - - - - Constructor with no cultures specified, for use - with named property syntax. - - - - - Constructor taking one or more cultures - - Comma-deliminted list of cultures - - - - Marks a test to use a combinatorial join of any argument data - provided. NUnit will create a test case for every combination of - the arguments provided. This can result in a large number of test - cases and so should be used judiciously. This is the default join - type, so the attribute need not be used except as documentation. - - - - - PropertyAttribute is used to attach information to a test as a name/value pair.. - - - - - Construct a PropertyAttribute with a name and string value - - The name of the property - The property value - - - - Construct a PropertyAttribute with a name and int value - - The name of the property - The property value - - - - Construct a PropertyAttribute with a name and double value - - The name of the property - The property value - - - - Constructor for derived classes that set the - property dictionary directly. - - - - - Constructor for use by derived classes that use the - name of the type as the property name. Derived classes - must ensure that the Type of the property value is - a standard type supported by the BCL. Any custom - types will cause a serialization Exception when - in the client. - - - - - Gets the property dictionary for this attribute - - - - - Default constructor - - - - - Marks a test to use pairwise join of any argument data provided. - NUnit will attempt too excercise every pair of argument values at - least once, using as small a number of test cases as it can. With - only two arguments, this is the same as a combinatorial join. - - - - - Default constructor - - - - - Marks a test to use a sequential join of any argument data - provided. NUnit will use arguements for each parameter in - sequence, generating test cases up to the largest number - of argument values provided and using null for any arguments - for which it runs out of values. Normally, this should be - used with the same number of arguments for each parameter. - - - - - Default constructor - - - - - Summary description for MaxTimeAttribute. - - - - - Construct a MaxTimeAttribute, given a time in milliseconds. - - The maximum elapsed time in milliseconds - - - - RandomAttribute is used to supply a set of random values - to a single parameter of a parameterized test. - - - - - ValuesAttribute is used to provide literal arguments for - an individual parameter of a test. - - - - - Abstract base class for attributes that apply to parameters - and supply data for the parameter. - - - - - Gets the data to be provided to the specified parameter - - - - - The collection of data to be returned. Must - be set by any derived attribute classes. - We use an object[] so that the individual - elements may have their type changed in GetData - if necessary. - - - - - Construct with one argument - - - - - - Construct with two arguments - - - - - - - Construct with three arguments - - - - - - - - Construct with an array of arguments - - - - - - Get the collection of values to be used as arguments - - - - - Construct a set of doubles from 0.0 to 1.0, - specifying only the count. - - - - - - Construct a set of doubles from min to max - - - - - - - - Construct a set of ints from min to max - - - - - - - - Get the collection of values to be used as arguments - - - - - RangeAttribute is used to supply a range of values to an - individual parameter of a parameterized test. - - - - - Construct a range of ints using default step of 1 - - - - - - - Construct a range of ints specifying the step size - - - - - - - - Construct a range of longs - - - - - - - - Construct a range of doubles - - - - - - - - Construct a range of floats - - - - - - - - RepeatAttribute may be applied to test case in order - to run it multiple times. - - - - - Construct a RepeatAttribute - - The number of times to run the test - - - - RequiredAddinAttribute may be used to indicate the names of any addins - that must be present in order to run some or all of the tests in an - assembly. If the addin is not loaded, the entire assembly is marked - as NotRunnable. - - - - - Initializes a new instance of the class. - - The required addin. - - - - Gets the name of required addin. - - The required addin name. - - - - Summary description for SetCultureAttribute. - - - - - Construct given the name of a culture - - - - - - Summary description for SetUICultureAttribute. - - - - - Construct given the name of a culture - - - - - - SetUpAttribute is used in a TestFixture to identify a method - that is called immediately before each test is run. It is - also used in a SetUpFixture to identify the method that is - called once, before any of the subordinate tests are run. - - - - - Attribute used to mark a class that contains one-time SetUp - and/or TearDown methods that apply to all the tests in a - namespace or an assembly. - - - - - Attribute used to mark a static (shared in VB) property - that returns a list of tests. - - - - - Attribute used in a TestFixture to identify a method that is - called immediately after each test is run. It is also used - in a SetUpFixture to identify the method that is called once, - after all subordinate tests have run. In either case, the method - is guaranteed to be called, even if an exception is thrown. - - - - - Provide actions to execute before and after tests. - - - - - When implemented by an attribute, this interface implemented to provide actions to execute before and after tests. - - - - - Executed before each test is run - - Provides details about the test that is going to be run. - - - - Executed after each test is run - - Provides details about the test that has just been run. - - - - Provides the target for the action attribute - - The target for the action attribute - - - - Adding this attribute to a method within a - class makes the method callable from the NUnit test runner. There is a property - called Description which is optional which you can provide a more detailed test - description. This class cannot be inherited. - - - - [TestFixture] - public class Fixture - { - [Test] - public void MethodToTest() - {} - - [Test(Description = "more detailed description")] - publc void TestDescriptionMethod() - {} - } - - - - - - Descriptive text for this test - - - - - TestCaseAttribute is used to mark parameterized test cases - and provide them with their arguments. - - - - - The ITestCaseData interface is implemented by a class - that is able to return complete testcases for use by - a parameterized test method. - - NOTE: This interface is used in both the framework - and the core, even though that results in two different - types. However, sharing the source code guarantees that - the various implementations will be compatible and that - the core is able to reflect successfully over the - framework implementations of ITestCaseData. - - - - - Gets the argument list to be provided to the test - - - - - Gets the expected result - - - - - Indicates whether a result has been specified. - This is necessary because the result may be - null, so it's value cannot be checked. - - - - - Gets the expected exception Type - - - - - Gets the FullName of the expected exception - - - - - Gets the name to be used for the test - - - - - Gets the description of the test - - - - - Gets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets a value indicating whether this is explicit. - - true if explicit; otherwise, false. - - - - Gets the ignore reason. - - The ignore reason. - - - - Construct a TestCaseAttribute with a list of arguments. - This constructor is not CLS-Compliant - - - - - - Construct a TestCaseAttribute with a single argument - - - - - - Construct a TestCaseAttribute with a two arguments - - - - - - - Construct a TestCaseAttribute with a three arguments - - - - - - - - Gets the list of arguments to a test case - - - - - Gets or sets the expected result. - - The result. - - - - Gets the expected result. - - The result. - - - - Gets a flag indicating whether an expected - result has been set. - - - - - Gets a list of categories associated with this test; - - - - - Gets or sets the category associated with this test. - May be a single category or a comma-separated list. - - - - - Gets or sets the expected exception. - - The expected exception. - - - - Gets or sets the name the expected exception. - - The expected name of the exception. - - - - Gets or sets the expected message of the expected exception - - The expected message of the exception. - - - - Gets or sets the type of match to be performed on the expected message - - - - - Gets or sets the description. - - The description. - - - - Gets or sets the name of the test. - - The name of the test. - - - - Gets or sets the ignored status of the test - - - - - Gets or sets the ignored status of the test - - - - - Gets or sets the explicit status of the test - - - - - Gets or sets the reason for not running the test - - - - - Gets or sets the reason for not running the test. - Set has the side effect of marking the test as ignored. - - The ignore reason. - - - - FactoryAttribute indicates the source to be used to - provide test cases for a test method. - - - - - Construct with the name of the factory - for use with languages - that don't support params arrays. - - An array of the names of the factories that will provide data - - - - Construct with a Type and name - for use with languages - that don't support params arrays. - - The Type that will provide data - The name of the method, property or field that will provide data - - - - The name of a the method, property or fiend to be used as a source - - - - - A Type to be used as a source - - - - - Gets or sets the category associated with this test. - May be a single category or a comma-separated list. - - - - - [TestFixture] - public class ExampleClass - {} - - - - - Default constructor - - - - - Construct with a object[] representing a set of arguments. - In .NET 2.0, the arguments may later be separated into - type arguments and constructor arguments. - - - - - - Descriptive text for this fixture - - - - - Gets and sets the category for this fixture. - May be a comma-separated list of categories. - - - - - Gets a list of categories for this fixture - - - - - The arguments originally provided to the attribute - - - - - Gets or sets a value indicating whether this should be ignored. - - true if ignore; otherwise, false. - - - - Gets or sets the ignore reason. May set Ignored as a side effect. - - The ignore reason. - - - - Get or set the type arguments. If not set - explicitly, any leading arguments that are - Types are taken as type arguments. - - - - - Attribute used to identify a method that is - called before any tests in a fixture are run. - - - - - Attribute used to identify a method that is called after - all the tests in a fixture have run. The method is - guaranteed to be called, even if an exception is thrown. - - - - - Adding this attribute to a method within a - class makes the method callable from the NUnit test runner. There is a property - called Description which is optional which you can provide a more detailed test - description. This class cannot be inherited. - - - - [TestFixture] - public class Fixture - { - [Test] - public void MethodToTest() - {} - - [Test(Description = "more detailed description")] - publc void TestDescriptionMethod() - {} - } - - - - - - Used on a method, marks the test with a timeout value in milliseconds. - The test will be run in a separate thread and is cancelled if the timeout - is exceeded. Used on a method or assembly, sets the default timeout - for all contained test methods. - - - - - Construct a TimeoutAttribute given a time in milliseconds - - The timeout value in milliseconds - - - - Marks a test that must run in the STA, causing it - to run in a separate thread if necessary. - - On methods, you may also use STAThreadAttribute - to serve the same purpose. - - - - - Construct a RequiresSTAAttribute - - - - - Marks a test that must run in the MTA, causing it - to run in a separate thread if necessary. - - On methods, you may also use MTAThreadAttribute - to serve the same purpose. - - - - - Construct a RequiresMTAAttribute - - - - - Marks a test that must run on a separate thread. - - - - - Construct a RequiresThreadAttribute - - - - - Construct a RequiresThreadAttribute, specifying the apartment - - - - - ValueSourceAttribute indicates the source to be used to - provide data for one parameter of a test method. - - - - - Construct with the name of the factory - for use with languages - that don't support params arrays. - - The name of the data source to be used - - - - Construct with a Type and name - for use with languages - that don't support params arrays. - - The Type that will provide data - The name of the method, property or field that will provide data - - - - The name of a the method, property or fiend to be used as a source - - - - - A Type to be used as a source - - - - - AttributeExistsConstraint tests for the presence of a - specified attribute on a Type. - - - - - The Constraint class is the base of all built-in constraints - within NUnit. It provides the operator overloads used to combine - constraints. - - - - - The IConstraintExpression interface is implemented by all - complete and resolvable constraints and expressions. - - - - - Return the top-level constraint for this expression - - - - - - Static UnsetObject used to detect derived constraints - failing to set the actual value. - - - - - The actual value being tested against a constraint - - - - - The display name of this Constraint for use by ToString() - - - - - Argument fields used by ToString(); - - - - - The builder holding this constraint - - - - - Construct a constraint with no arguments - - - - - Construct a constraint with one argument - - - - - Construct a constraint with two arguments - - - - - Sets the ConstraintBuilder holding this constraint - - - - - Write the failure message to the MessageWriter provided - as an argument. The default implementation simply passes - the constraint and the actual value to the writer, which - then displays the constraint description and the value. - - Constraints that need to provide additional details, - such as where the error occured can override this. - - The MessageWriter on which to display the message - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Test whether the constraint is satisfied by an - ActualValueDelegate that returns the value to be tested. - The default implementation simply evaluates the delegate - but derived classes may override it to provide for delayed - processing. - - An ActualValueDelegate - True for success, false for failure - - - - Test whether the constraint is satisfied by a given reference. - The default implementation simply dereferences the value but - derived classes may override it to provide for delayed processing. - - A reference to the value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - Default override of ToString returns the constraint DisplayName - followed by any arguments within angle brackets. - - - - - - Returns the string representation of this constraint - - - - - This operator creates a constraint that is satisfied only if both - argument constraints are satisfied. - - - - - This operator creates a constraint that is satisfied if either - of the argument constraints is satisfied. - - - - - This operator creates a constraint that is satisfied if the - argument constraint is not satisfied. - - - - - Returns a DelayedConstraint with the specified delay time. - - The delay in milliseconds. - - - - - Returns a DelayedConstraint with the specified delay time - and polling interval. - - The delay in milliseconds. - The interval at which to test the constraint. - - - - - The display name of this Constraint for use by ToString(). - The default value is the name of the constraint with - trailing "Constraint" removed. Derived classes may set - this to another name in their constructors. - - - - - Returns a ConstraintExpression by appending And - to the current constraint. - - - - - Returns a ConstraintExpression by appending And - to the current constraint. - - - - - Returns a ConstraintExpression by appending Or - to the current constraint. - - - - - Class used to detect any derived constraints - that fail to set the actual value in their - Matches override. - - - - - Constructs an AttributeExistsConstraint for a specific attribute Type - - - - - - Tests whether the object provides the expected attribute. - - A Type, MethodInfo, or other ICustomAttributeProvider - True if the expected attribute is present, otherwise false - - - - Writes the description of the constraint to the specified writer - - - - - AttributeConstraint tests that a specified attribute is present - on a Type or other provider and that the value of the attribute - satisfies some other constraint. - - - - - Abstract base class used for prefixes - - - - - The base constraint - - - - - Construct given a base constraint - - - - - - Constructs an AttributeConstraint for a specified attriute - Type and base constraint. - - - - - - - Determines whether the Type or other provider has the - expected attribute and if its value matches the - additional constraint specified. - - - - - Writes a description of the attribute to the specified writer. - - - - - Writes the actual value supplied to the specified writer. - - - - - Returns a string representation of the constraint. - - - - - BasicConstraint is the abstract base for constraints that - perform a simple comparison to a constant value. - - - - - Initializes a new instance of the class. - - The expected. - The description. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - NullConstraint tests that the actual value is null - - - - - Initializes a new instance of the class. - - - - - TrueConstraint tests that the actual value is true - - - - - Initializes a new instance of the class. - - - - - FalseConstraint tests that the actual value is false - - - - - Initializes a new instance of the class. - - - - - NaNConstraint tests that the actual value is a double or float NaN - - - - - Test that the actual value is an NaN - - - - - - - Write the constraint description to a specified writer - - - - - - BinaryConstraint is the abstract base of all constraints - that combine two other constraints in some fashion. - - - - - The first constraint being combined - - - - - The second constraint being combined - - - - - Construct a BinaryConstraint from two other constraints - - The first constraint - The second constraint - - - - AndConstraint succeeds only if both members succeed. - - - - - Create an AndConstraint from two other constraints - - The first constraint - The second constraint - - - - Apply both member constraints to an actual value, succeeding - succeeding only if both of them succeed. - - The actual value - True if the constraints both succeeded - - - - Write a description for this contraint to a MessageWriter - - The MessageWriter to receive the description - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - OrConstraint succeeds if either member succeeds - - - - - Create an OrConstraint from two other constraints - - The first constraint - The second constraint - - - - Apply the member constraints to an actual value, succeeding - succeeding as soon as one of them succeeds. - - The actual value - True if either constraint succeeded - - - - Write a description for this contraint to a MessageWriter - - The MessageWriter to receive the description - - - - CollectionConstraint is the abstract base class for - constraints that operate on collections. - - - - - Construct an empty CollectionConstraint - - - - - Construct a CollectionConstraint - - - - - - Determines whether the specified enumerable is empty. - - The enumerable. - - true if the specified enumerable is empty; otherwise, false. - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Protected method to be implemented by derived classes - - - - - - - CollectionItemsEqualConstraint is the abstract base class for all - collection constraints that apply some notion of item equality - as a part of their operation. - - - - - Construct an empty CollectionConstraint - - - - - Construct a CollectionConstraint - - - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied Comparison object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IEqualityComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IEqualityComparer object. - - The IComparer object to use. - Self. - - - - Compares two collection members for equality - - - - - Return a new CollectionTally for use in making tests - - The collection to be included in the tally - - - - Flag the constraint to ignore case and return self. - - - - - EmptyCollectionConstraint tests whether a collection is empty. - - - - - Check that the collection is empty - - - - - - - Write the constraint description to a MessageWriter - - - - - - UniqueItemsConstraint tests whether all the items in a - collection are unique. - - - - - Check that all items are unique. - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - CollectionContainsConstraint is used to test whether a collection - contains an expected object as a member. - - - - - Construct a CollectionContainsConstraint - - - - - - Test whether the expected item is contained in the collection - - - - - - - Write a descripton of the constraint to a MessageWriter - - - - - - CollectionEquivalentCOnstraint is used to determine whether two - collections are equivalent. - - - - - Construct a CollectionEquivalentConstraint - - - - - - Test whether two collections are equivalent - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - CollectionSubsetConstraint is used to determine whether - one collection is a subset of another - - - - - Construct a CollectionSubsetConstraint - - The collection that the actual value is expected to be a subset of - - - - Test whether the actual collection is a subset of - the expected collection provided. - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - CollectionOrderedConstraint is used to test whether a collection is ordered. - - - - - Construct a CollectionOrderedConstraint - - - - - Modifies the constraint to use an IComparer and returns self. - - - - - Modifies the constraint to use an IComparer<T> and returns self. - - - - - Modifies the constraint to use a Comparison<T> and returns self. - - - - - Modifies the constraint to test ordering by the value of - a specified property and returns self. - - - - - Test whether the collection is ordered - - - - - - - Write a description of the constraint to a MessageWriter - - - - - - Returns the string representation of the constraint. - - - - - - If used performs a reverse comparison - - - - - CollectionTally counts (tallies) the number of - occurences of each object in one or more enumerations. - - - - - Construct a CollectionTally object from a comparer and a collection - - - - - Try to remove an object from the tally - - The object to remove - True if successful, false if the object was not found - - - - Try to remove a set of objects from the tally - - The objects to remove - True if successful, false if any object was not found - - - - The number of objects remaining in the tally - - - - - ComparisonAdapter class centralizes all comparisons of - values in NUnit, adapting to the use of any provided - IComparer, IComparer<T> or Comparison<T> - - - - - Returns a ComparisonAdapter that wraps an IComparer - - - - - Returns a ComparisonAdapter that wraps an IComparer<T> - - - - - Returns a ComparisonAdapter that wraps a Comparison<T> - - - - - Compares two objects - - - - - Gets the default ComparisonAdapter, which wraps an - NUnitComparer object. - - - - - Construct a ComparisonAdapter for an IComparer - - - - - Compares two objects - - - - - - - - Construct a default ComparisonAdapter - - - - - ComparisonAdapter<T> extends ComparisonAdapter and - allows use of an IComparer<T> or Comparison<T> - to actually perform the comparison. - - - - - Construct a ComparisonAdapter for an IComparer<T> - - - - - Compare a Type T to an object - - - - - Construct a ComparisonAdapter for a Comparison<T> - - - - - Compare a Type T to an object - - - - - Abstract base class for constraints that compare values to - determine if one is greater than, equal to or less than - the other. This class supplies the Using modifiers. - - - - - ComparisonAdapter to be used in making the comparison - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - - - Modifies the constraint to use an IComparer and returns self - - - - - Modifies the constraint to use an IComparer<T> and returns self - - - - - Modifies the constraint to use a Comparison<T> and returns self - - - - - Delegate used to delay evaluation of the actual value - to be used in evaluating a constraint - - - - - ConstraintBuilder maintains the stacks that are used in - processing a ConstraintExpression. An OperatorStack - is used to hold operators that are waiting for their - operands to be reognized. a ConstraintStack holds - input constraints as well as the results of each - operator applied. - - - - - Initializes a new instance of the class. - - - - - Appends the specified operator to the expression by first - reducing the operator stack and then pushing the new - operator on the stack. - - The operator to push. - - - - Appends the specified constraint to the expresson by pushing - it on the constraint stack. - - The constraint to push. - - - - Sets the top operator right context. - - The right context. - - - - Reduces the operator stack until the topmost item - precedence is greater than or equal to the target precedence. - - The target precedence. - - - - Resolves this instance, returning a Constraint. If the builder - is not currently in a resolvable state, an exception is thrown. - - The resolved constraint - - - - Gets a value indicating whether this instance is resolvable. - - - true if this instance is resolvable; otherwise, false. - - - - - OperatorStack is a type-safe stack for holding ConstraintOperators - - - - - Initializes a new instance of the class. - - The builder. - - - - Pushes the specified operator onto the stack. - - The op. - - - - Pops the topmost operator from the stack. - - - - - - Gets a value indicating whether this is empty. - - true if empty; otherwise, false. - - - - Gets the topmost operator without modifying the stack. - - The top. - - - - ConstraintStack is a type-safe stack for holding Constraints - - - - - Initializes a new instance of the class. - - The builder. - - - - Pushes the specified constraint. As a side effect, - the constraint's builder field is set to the - ConstraintBuilder owning this stack. - - The constraint. - - - - Pops this topmost constrait from the stack. - As a side effect, the constraint's builder - field is set to null. - - - - - - Gets a value indicating whether this is empty. - - true if empty; otherwise, false. - - - - Gets the topmost constraint without modifying the stack. - - The topmost constraint - - - - ConstraintExpression represents a compound constraint in the - process of being constructed from a series of syntactic elements. - - Individual elements are appended to the expression as they are - reognized. Once an actual Constraint is appended, the expression - returns a resolvable Constraint. - - - - - ConstraintExpressionBase is the abstract base class for the - ConstraintExpression class, which represents a - compound constraint in the process of being constructed - from a series of syntactic elements. - - NOTE: ConstraintExpressionBase is separate because the - ConstraintExpression class was generated in earlier - versions of NUnit. The two classes may be combined - in a future version. - - - - - The ConstraintBuilder holding the elements recognized so far - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the - class passing in a ConstraintBuilder, which may be pre-populated. - - The builder. - - - - Returns a string representation of the expression as it - currently stands. This should only be used for testing, - since it has the side-effect of resolving the expression. - - - - - - Appends an operator to the expression and returns the - resulting expression itself. - - - - - Appends a self-resolving operator to the expression and - returns a new ResolvableConstraintExpression. - - - - - Appends a constraint to the expression and returns that - constraint, which is associated with the current state - of the expression being built. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the - class passing in a ConstraintBuilder, which may be pre-populated. - - The builder. - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding only if a specified number of them succeed. - - - - - Returns a new PropertyConstraintExpression, which will either - test for the existence of the named property on the object - being tested or apply any following constraint to that property. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns the constraint provided as an argument - used to allow custom - custom constraints to easily participate in the syntax. - - - - - Returns the constraint provided as an argument - used to allow custom - custom constraints to easily participate in the syntax. - - - - - Returns a constraint that tests two items for equality - - - - - Returns a constraint that tests that two references are the same object - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than or equal to the suppled argument - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a collection containing the same elements as the - collection supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a subset of the collection supplied as an argument. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a new ContainsConstraint. This constraint - will, in turn, make use of the appropriate second-level - constraint, depending on the type of the actual argument. - This overload is only used if the item sought is a string, - since any other type implies that we are looking for a - collection member. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that tests whether the path provided - is the same as an expected path after canonicalization. - - - - - Returns a constraint that tests whether the path provided - is the same path or under an expected path after canonicalization. - - - - - Returns a constraint that tests whether the path provided - is the same path or under an expected path after canonicalization. - - - - - Returns a constraint that tests whether the actual value falls - within a specified range. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if at least one of them succeeds. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them fail. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Length property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Count property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Message property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the InnerException property of the object being tested. - - - - - With is currently a NOP - reserved for future use. - - - - - Returns a constraint that tests for null - - - - - Returns a constraint that tests for True - - - - - Returns a constraint that tests for False - - - - - Returns a constraint that tests for a positive value - - - - - Returns a constraint that tests for a negative value - - - - - Returns a constraint that tests for NaN - - - - - Returns a constraint that tests for empty - - - - - Returns a constraint that tests whether a collection - contains all unique items. - - - - - Returns a constraint that tests whether an object graph is serializable in binary format. - - - - - Returns a constraint that tests whether an object graph is serializable in xml format. - - - - - Returns a constraint that tests whether a collection is ordered - - - - - Helper class with properties and methods that supply - a number of constraints used in Asserts. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding only if a specified number of them succeed. - - - - - Returns a new PropertyConstraintExpression, which will either - test for the existence of the named property on the object - being tested or apply any following constraint to that property. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns a constraint that tests two items for equality - - - - - Returns a constraint that tests that two references are the same object - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than or equal to the suppled argument - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a collection containing the same elements as the - collection supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a subset of the collection supplied as an argument. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a new ContainsConstraint. This constraint - will, in turn, make use of the appropriate second-level - constraint, depending on the type of the actual argument. - This overload is only used if the item sought is a string, - since any other type implies that we are looking for a - collection member. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that fails if the actual - value matches the pattern supplied as an argument. - - - - - Returns a constraint that tests whether the path provided - is the same as an expected path after canonicalization. - - - - - Returns a constraint that tests whether the path provided - is the same path or under an expected path after canonicalization. - - - - - Returns a constraint that tests whether the path provided - is the same path or under an expected path after canonicalization. - - - - - Returns a constraint that tests whether the actual value falls - within a specified range. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if at least one of them succeeds. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them fail. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Length property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Count property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Message property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the InnerException property of the object being tested. - - - - - Returns a constraint that tests for null - - - - - Returns a constraint that tests for True - - - - - Returns a constraint that tests for False - - - - - Returns a constraint that tests for a positive value - - - - - Returns a constraint that tests for a negative value - - - - - Returns a constraint that tests for NaN - - - - - Returns a constraint that tests for empty - - - - - Returns a constraint that tests whether a collection - contains all unique items. - - - - - Returns a constraint that tests whether an object graph is serializable in binary format. - - - - - Returns a constraint that tests whether an object graph is serializable in xml format. - - - - - Returns a constraint that tests whether a collection is ordered - - - - - The ConstraintOperator class is used internally by a - ConstraintBuilder to represent an operator that - modifies or combines constraints. - - Constraint operators use left and right precedence - values to determine whether the top operator on the - stack should be reduced before pushing a new operator. - - - - - The precedence value used when the operator - is about to be pushed to the stack. - - - - - The precedence value used when the operator - is on the top of the stack. - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - - The syntax element preceding this operator - - - - - The syntax element folowing this operator - - - - - The precedence value used when the operator - is about to be pushed to the stack. - - - - - The precedence value used when the operator - is on the top of the stack. - - - - - PrefixOperator takes a single constraint and modifies - it's action in some way. - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - - Returns the constraint created by applying this - prefix to another constraint. - - - - - - - Negates the test of the constraint it wraps. - - - - - Constructs a new NotOperator - - - - - Returns a NotConstraint applied to its argument. - - - - - Abstract base for operators that indicate how to - apply a constraint to items in a collection. - - - - - Constructs a CollectionOperator - - - - - Represents a constraint that succeeds if all the - members of a collection match a base constraint. - - - - - Returns a constraint that will apply the argument - to the members of a collection, succeeding if - they all succeed. - - - - - Represents a constraint that succeeds if any of the - members of a collection match a base constraint. - - - - - Returns a constraint that will apply the argument - to the members of a collection, succeeding if - any of them succeed. - - - - - Represents a constraint that succeeds if none of the - members of a collection match a base constraint. - - - - - Returns a constraint that will apply the argument - to the members of a collection, succeeding if - none of them succeed. - - - - - Represents a constraint that succeeds if the specified - count of members of a collection match a base constraint. - - - - - Construct an ExactCountOperator for a specified count - - The expected count - - - - Returns a constraint that will apply the argument - to the members of a collection, succeeding if - none of them succeed. - - - - - Represents a constraint that simply wraps the - constraint provided as an argument, without any - further functionality, but which modifes the - order of evaluation because of its precedence. - - - - - Constructor for the WithOperator - - - - - Returns a constraint that wraps its argument - - - - - Abstract base class for operators that are able to reduce to a - constraint whether or not another syntactic element follows. - - - - - Operator used to test for the presence of a named Property - on an object and optionally apply further tests to the - value of that property. - - - - - Constructs a PropOperator for a particular named property - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - - Gets the name of the property to which the operator applies - - - - - Operator that tests for the presence of a particular attribute - on a type and optionally applies further tests to the attribute. - - - - - Construct an AttributeOperator for a particular Type - - The Type of attribute tested - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - Operator that tests that an exception is thrown and - optionally applies further tests to the exception. - - - - - Construct a ThrowsOperator - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - Abstract base class for all binary operators - - - - - Reduce produces a constraint from the operator and - any arguments. It takes the arguments from the constraint - stack and pushes the resulting constraint on it. - - - - - - Abstract method that produces a constraint by applying - the operator to its left and right constraint arguments. - - - - - Gets the left precedence of the operator - - - - - Gets the right precedence of the operator - - - - - Operator that requires both it's arguments to succeed - - - - - Construct an AndOperator - - - - - Apply the operator to produce an AndConstraint - - - - - Operator that requires at least one of it's arguments to succeed - - - - - Construct an OrOperator - - - - - Apply the operator to produce an OrConstraint - - - - - ContainsConstraint tests a whether a string contains a substring - or a collection contains an object. It postpones the decision of - which test to use until the type of the actual argument is known. - This allows testing whether a string is contained in a collection - or as a substring of another string using the same syntax. - - - - - Initializes a new instance of the class. - - The expected. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied Comparison object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IEqualityComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IEqualityComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to ignore case and return self. - - - - - Applies a delay to the match so that a match can be evaluated in the future. - - - - - Creates a new DelayedConstraint - - The inner constraint two decorate - The time interval after which the match is performed - If the value of is less than 0 - - - - Creates a new DelayedConstraint - - The inner constraint two decorate - The time interval after which the match is performed - The time interval used for polling - If the value of is less than 0 - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for if the base constraint fails, false if it succeeds - - - - Test whether the constraint is satisfied by a delegate - - The delegate whose value is to be tested - True for if the base constraint fails, false if it succeeds - - - - Test whether the constraint is satisfied by a given reference. - Overridden to wait for the specified delay period before - calling the base constraint with the dereferenced value. - - A reference to the value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a MessageWriter. - - The writer on which the actual value is displayed - - - - Returns the string representation of the constraint. - - - - - EmptyDirectoryConstraint is used to test that a directory is empty - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - EmptyConstraint tests a whether a string or collection is empty, - postponing the decision about which test is applied until the - type of the actual argument is known. - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - EqualConstraint is able to compare an actual value with the - expected value provided in its constructor. Two objects are - considered equal if both are null, or if both have the same - value. NUnit has special semantics for some object types. - - - - - If true, strings in error messages will be clipped - - - - - NUnitEqualityComparer used to test equality. - - - - - Initializes a new instance of the class. - - The expected value. - - - - Flag the constraint to use a tolerance when determining equality. - - Tolerance value to be used - Self. - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied Comparison object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IEqualityComparer object. - - The IComparer object to use. - Self. - - - - Flag the constraint to use the supplied IEqualityComparer object. - - The IComparer object to use. - Self. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write a failure message. Overridden to provide custom - failure messages for EqualConstraint. - - The MessageWriter to write to - - - - Write description of this constraint - - The MessageWriter to write to - - - - Display the failure information for two collections that did not match. - - The MessageWriter on which to display - The expected collection. - The actual collection - The depth of this failure in a set of nested collections - - - - Displays a single line showing the types and sizes of the expected - and actual enumerations, collections or arrays. If both are identical, - the value is only shown once. - - The MessageWriter on which to display - The expected collection or array - The actual collection or array - The indentation level for the message line - - - - Displays a single line showing the point in the expected and actual - arrays at which the comparison failed. If the arrays have different - structures or dimensions, both values are shown. - - The MessageWriter on which to display - The expected array - The actual array - Index of the failure point in the underlying collections - The indentation level for the message line - - - - Display the failure information for two IEnumerables that did not match. - - The MessageWriter on which to display - The expected enumeration. - The actual enumeration - The depth of this failure in a set of nested collections - - - - Flag the constraint to ignore case and return self. - - - - - Flag the constraint to suppress string clipping - and return self. - - - - - Flag the constraint to compare arrays as collections - and return self. - - - - - Switches the .Within() modifier to interpret its tolerance as - a distance in representable values (see remarks). - - Self. - - Ulp stands for "unit in the last place" and describes the minimum - amount a given value can change. For any integers, an ulp is 1 whole - digit. For floating point values, the accuracy of which is better - for smaller numbers and worse for larger numbers, an ulp depends - on the size of the number. Using ulps for comparison of floating - point results instead of fixed tolerances is safer because it will - automatically compensate for the added inaccuracy of larger numbers. - - - - - Switches the .Within() modifier to interpret its tolerance as - a percentage that the actual values is allowed to deviate from - the expected value. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in days. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in hours. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in minutes. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in seconds. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in milliseconds. - - Self - - - - Causes the tolerance to be interpreted as a TimeSpan in clock ticks. - - Self - - - - EqualityAdapter class handles all equality comparisons - that use an IEqualityComparer, IEqualityComparer<T> - or a ComparisonAdapter. - - - - - Compares two objects, returning true if they are equal - - - - - Returns true if the two objects can be compared by this adapter. - The base adapter cannot handle IEnumerables except for strings. - - - - - Returns an EqualityAdapter that wraps an IComparer. - - - - - Returns an EqualityAdapter that wraps an IEqualityComparer. - - - - - Returns an EqualityAdapter that wraps an IEqualityComparer<T>. - - - - - Returns an EqualityAdapter that wraps an IComparer<T>. - - - - - Returns an EqualityAdapter that wraps a Comparison<T>. - - - - - EqualityAdapter that wraps an IComparer. - - - - - Returns true if the two objects can be compared by this adapter. - Generic adapter requires objects of the specified type. - - - - - EqualityAdapter that wraps an IComparer. - - - - Helper routines for working with floating point numbers - - - The floating point comparison code is based on this excellent article: - http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm - - - "ULP" means Unit in the Last Place and in the context of this library refers to - the distance between two adjacent floating point numbers. IEEE floating point - numbers can only represent a finite subset of natural numbers, with greater - accuracy for smaller numbers and lower accuracy for very large numbers. - - - If a comparison is allowed "2 ulps" of deviation, that means the values are - allowed to deviate by up to 2 adjacent floating point values, which might be - as low as 0.0000001 for small numbers or as high as 10.0 for large numbers. - - - - - Compares two floating point values for equality - First floating point value to be compared - Second floating point value t be compared - - Maximum number of representable floating point values that are allowed to - be between the left and the right floating point values - - True if both numbers are equal or close to being equal - - - Floating point values can only represent a finite subset of natural numbers. - For example, the values 2.00000000 and 2.00000024 can be stored in a float, - but nothing inbetween them. - - - This comparison will count how many possible floating point values are between - the left and the right number. If the number of possible values between both - numbers is less than or equal to maxUlps, then the numbers are considered as - being equal. - - - Implementation partially follows the code outlined here: - http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ - - - - - Compares two double precision floating point values for equality - First double precision floating point value to be compared - Second double precision floating point value t be compared - - Maximum number of representable double precision floating point values that are - allowed to be between the left and the right double precision floating point values - - True if both numbers are equal or close to being equal - - - Double precision floating point values can only represent a limited series of - natural numbers. For example, the values 2.0000000000000000 and 2.0000000000000004 - can be stored in a double, but nothing inbetween them. - - - This comparison will count how many possible double precision floating point - values are between the left and the right number. If the number of possible - values between both numbers is less than or equal to maxUlps, then the numbers - are considered as being equal. - - - Implementation partially follows the code outlined here: - http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ - - - - - - Reinterprets the memory contents of a floating point value as an integer value - - - Floating point value whose memory contents to reinterpret - - - The memory contents of the floating point value interpreted as an integer - - - - - Reinterprets the memory contents of a double precision floating point - value as an integer value - - - Double precision floating point value whose memory contents to reinterpret - - - The memory contents of the double precision floating point value - interpreted as an integer - - - - - Reinterprets the memory contents of an integer as a floating point value - - Integer value whose memory contents to reinterpret - - The memory contents of the integer value interpreted as a floating point value - - - - - Reinterprets the memory contents of an integer value as a double precision - floating point value - - Integer whose memory contents to reinterpret - - The memory contents of the integer interpreted as a double precision - floating point value - - - - Union of a floating point variable and an integer - - - The union's value as a floating point variable - - - The union's value as an integer - - - The union's value as an unsigned integer - - - Union of a double precision floating point variable and a long - - - The union's value as a double precision floating point variable - - - The union's value as a long - - - The union's value as an unsigned long - - - - Tests whether a value is greater than the value supplied to its constructor - - - - - The value against which a comparison is to be made - - - - - Initializes a new instance of the class. - - The expected value. - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Tests whether a value is greater than or equal to the value supplied to its constructor - - - - - The value against which a comparison is to be made - - - - - Initializes a new instance of the class. - - The expected value. - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Tests whether a value is less than the value supplied to its constructor - - - - - The value against which a comparison is to be made - - - - - Initializes a new instance of the class. - - The expected value. - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Tests whether a value is less than or equal to the value supplied to its constructor - - - - - The value against which a comparison is to be made - - - - - Initializes a new instance of the class. - - The expected value. - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - MessageWriter is the abstract base for classes that write - constraint descriptions and messages in some form. The - class has separate methods for writing various components - of a message, allowing implementations to tailor the - presentation as needed. - - - - - Construct a MessageWriter given a culture - - - - - Method to write single line message with optional args, usually - written to precede the general failure message. - - The message to be written - Any arguments used in formatting the message - - - - Method to write single line message with optional args, usually - written to precede the general failure message, at a givel - indentation level. - - The indentation level of the message - The message to be written - Any arguments used in formatting the message - - - - Display Expected and Actual lines for a constraint. This - is called by MessageWriter's default implementation of - WriteMessageTo and provides the generic two-line display. - - The constraint that failed - - - - Display Expected and Actual lines for given values. This - method may be called by constraints that need more control over - the display of actual and expected values than is provided - by the default implementation. - - The expected value - The actual value causing the failure - - - - Display Expected and Actual lines for given values, including - a tolerance value on the Expected line. - - The expected value - The actual value causing the failure - The tolerance within which the test was made - - - - Display the expected and actual string values on separate lines. - If the mismatch parameter is >=0, an additional line is displayed - line containing a caret that points to the mismatch point. - - The expected string value - The actual string value - The point at which the strings don't match or -1 - If true, case is ignored in locating the point where the strings differ - If true, the strings should be clipped to fit the line - - - - Writes the text for a connector. - - The connector. - - - - Writes the text for a predicate. - - The predicate. - - - - Writes the text for an expected value. - - The expected value. - - - - Writes the text for a modifier - - The modifier. - - - - Writes the text for an actual value. - - The actual value. - - - - Writes the text for a generalized value. - - The value. - - - - Writes the text for a collection value, - starting at a particular point, to a max length - - The collection containing elements to write. - The starting point of the elements to write - The maximum number of elements to write - - - - Abstract method to get the max line length - - - - - Static methods used in creating messages - - - - - Static string used when strings are clipped - - - - - Returns the representation of a type as used in NUnitLite. - This is the same as Type.ToString() except for arrays, - which are displayed with their declared sizes. - - - - - - - Converts any control characters in a string - to their escaped representation. - - The string to be converted - The converted string - - - - Return the a string representation for a set of indices into an array - - Array of indices for which a string is needed - - - - Get an array of indices representing the point in a enumerable, - collection or array corresponding to a single int index into the - collection. - - The collection to which the indices apply - Index in the collection - Array of indices - - - - Clip a string to a given length, starting at a particular offset, returning the clipped - string with ellipses representing the removed parts - - The string to be clipped - The maximum permitted length of the result string - The point at which to start clipping - The clipped string - - - - Clip the expected and actual strings in a coordinated fashion, - so that they may be displayed together. - - - - - - - - - Shows the position two strings start to differ. Comparison - starts at the start index. - - The expected string - The actual string - The index in the strings at which comparison should start - Boolean indicating whether case should be ignored - -1 if no mismatch found, or the index where mismatch found - - - - The Numerics class contains common operations on numeric values. - - - - - Checks the type of the object, returning true if - the object is a numeric type. - - The object to check - true if the object is a numeric type - - - - Checks the type of the object, returning true if - the object is a floating point numeric type. - - The object to check - true if the object is a floating point numeric type - - - - Checks the type of the object, returning true if - the object is a fixed point numeric type. - - The object to check - true if the object is a fixed point numeric type - - - - Test two numeric values for equality, performing the usual numeric - conversions and using a provided or default tolerance. If the tolerance - provided is Empty, this method may set it to a default tolerance. - - The expected value - The actual value - A reference to the tolerance in effect - True if the values are equal - - - - Compare two numeric values, performing the usual numeric conversions. - - The expected value - The actual value - The relationship of the values to each other - - - - NUnitComparer encapsulates NUnit's default behavior - in comparing two objects. - - - - - Compares two objects - - - - - - - - Returns the default NUnitComparer. - - - - - Generic version of NUnitComparer - - - - - - Compare two objects of the same type - - - - - NUnitEqualityComparer encapsulates NUnit's handling of - equality tests between objects. - - - - - - - - - - Compares two objects for equality within a tolerance - - The first object to compare - The second object to compare - The tolerance to use in the comparison - - - - - If true, all string comparisons will ignore case - - - - - If true, arrays will be treated as collections, allowing - those of different dimensions to be compared - - - - - Comparison objects used in comparisons for some constraints. - - - - - Compares two objects for equality within a tolerance. - - - - - Helper method to compare two arrays - - - - - Method to compare two DirectoryInfo objects - - first directory to compare - second directory to compare - true if equivalent, false if not - - - - Returns the default NUnitEqualityComparer - - - - - Gets and sets a flag indicating whether case should - be ignored in determining equality. - - - - - Gets and sets a flag indicating that arrays should be - compared as collections, without regard to their shape. - - - - - Gets and sets an external comparer to be used to - test for equality. It is applied to members of - collections, in place of NUnit's own logic. - - - - - Gets the list of failure points for the last Match performed. - - - - - FailurePoint class represents one point of failure - in an equality test. - - - - - The location of the failure - - - - - The expected value - - - - - The actual value - - - - - Indicates whether the expected value is valid - - - - - Indicates whether the actual value is valid - - - - - PathConstraint serves as the abstract base of constraints - that operate on paths and provides several helper methods. - - - - - The expected path used in the constraint - - - - - The actual path being tested - - - - - Flag indicating whether a caseInsensitive comparison should be made - - - - - Construct a PathConstraint for a give expected path - - The expected path - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Returns true if the expected path and actual path match - - - - - Returns the string representation of this constraint - - - - - Canonicalize the provided path - - - The path in standardized form - - - - Test whether two paths are the same - - The first path - The second path - Indicates whether case should be ignored - - - - - Test whether one path is under another path - - The first path - supposed to be the parent path - The second path - supposed to be the child path - Indicates whether case should be ignored - - - - - Test whether one path is the same as or under another path - - The first path - supposed to be the parent path - The second path - supposed to be the child path - - - - - Modifies the current instance to be case-insensitve - and returns it. - - - - - Modifies the current instance to be case-sensitve - and returns it. - - - - - Summary description for SamePathConstraint. - - - - - Initializes a new instance of the class. - - The expected path - - - - Test whether the constraint is satisfied by a given value - - The expected path - The actual path - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - SubPathConstraint tests that the actual path is under the expected path - - - - - Initializes a new instance of the class. - - The expected path - - - - Test whether the constraint is satisfied by a given value - - The expected path - The actual path - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - SamePathOrUnderConstraint tests that one path is under another - - - - - Initializes a new instance of the class. - - The expected path - - - - Test whether the constraint is satisfied by a given value - - The expected path - The actual path - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Predicate constraint wraps a Predicate in a constraint, - returning success if the predicate is true. - - - - - Construct a PredicateConstraint from a predicate - - - - - Determines whether the predicate succeeds when applied - to the actual value. - - - - - Writes the description to a MessageWriter - - - - - NotConstraint negates the effect of some other constraint - - - - - Initializes a new instance of the class. - - The base constraint to be negated. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for if the base constraint fails, false if it succeeds - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a MessageWriter. - - The writer on which the actual value is displayed - - - - AllItemsConstraint applies another constraint to each - item in a collection, succeeding if they all succeed. - - - - - Construct an AllItemsConstraint on top of an existing constraint - - - - - - Apply the item constraint to each item in the collection, - failing if any item fails. - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - SomeItemsConstraint applies another constraint to each - item in a collection, succeeding if any of them succeeds. - - - - - Construct a SomeItemsConstraint on top of an existing constraint - - - - - - Apply the item constraint to each item in the collection, - succeeding if any item succeeds. - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - NoItemConstraint applies another constraint to each - item in a collection, failing if any of them succeeds. - - - - - Construct a NoItemConstraint on top of an existing constraint - - - - - - Apply the item constraint to each item in the collection, - failing if any item fails. - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - ExactCoutConstraint applies another constraint to each - item in a collection, succeeding only if a specified - number of items succeed. - - - - - Construct an ExactCountConstraint on top of an existing constraint - - - - - - - Apply the item constraint to each item in the collection, - succeeding only if the expected number of items pass. - - - - - - - Write a description of this constraint to a MessageWriter - - - - - - PropertyExistsConstraint tests that a named property - exists on the object provided through Match. - - Originally, PropertyConstraint provided this feature - in addition to making optional tests on the vaue - of the property. The two constraints are now separate. - - - - - Initializes a new instance of the class. - - The name of the property. - - - - Test whether the property exists for a given object - - The object to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. - - The writer on which the actual value is displayed - - - - Returns the string representation of the constraint. - - - - - - PropertyConstraint extracts a named property and uses - its value as the actual value for a chained constraint. - - - - - Initializes a new instance of the class. - - The name. - The constraint to apply to the property. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - Returns the string representation of the constraint. - - - - - - RangeConstraint tests whethe two values are within a - specified range. - - - - - Initializes a new instance of the class. - - From. - To. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - ResolvableConstraintExpression is used to represent a compound - constraint being constructed at a point where the last operator - may either terminate the expression or may have additional - qualifying constraints added to it. - - It is used, for example, for a Property element or for - an Exception element, either of which may be optionally - followed by constraints that apply to the property or - exception. - - - - - Create a new instance of ResolvableConstraintExpression - - - - - Create a new instance of ResolvableConstraintExpression, - passing in a pre-populated ConstraintBuilder. - - - - - Resolve the current expression to a Constraint - - - - - This operator creates a constraint that is satisfied only if both - argument constraints are satisfied. - - - - - This operator creates a constraint that is satisfied only if both - argument constraints are satisfied. - - - - - This operator creates a constraint that is satisfied only if both - argument constraints are satisfied. - - - - - This operator creates a constraint that is satisfied if either - of the argument constraints is satisfied. - - - - - This operator creates a constraint that is satisfied if either - of the argument constraints is satisfied. - - - - - This operator creates a constraint that is satisfied if either - of the argument constraints is satisfied. - - - - - This operator creates a constraint that is satisfied if the - argument constraint is not satisfied. - - - - - Appends an And Operator to the expression - - - - - Appends an Or operator to the expression. - - - - - ReusableConstraint wraps a resolved constraint so that it - may be saved and reused as needed. - - - - - Construct a ReusableConstraint - - The constraint or expression to be reused - - - - Conversion operator from a normal constraint to a ReusableConstraint. - - The original constraint to be wrapped as a ReusableConstraint - - - - - Returns the string representation of the constraint. - - A string representing the constraint - - - - Resolves the ReusableConstraint by returning the constraint - that it originally wrapped. - - A resolved constraint - - - - SameAsConstraint tests whether an object is identical to - the object passed to its constructor - - - - - Initializes a new instance of the class. - - The expected object. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - BinarySerializableConstraint tests whether - an object is serializable in binary format. - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - Returns the string representation - - - - - BinarySerializableConstraint tests whether - an object is serializable in binary format. - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - Returns the string representation of this constraint - - - - - StringConstraint is the abstract base for constraints - that operate on strings. It supports the IgnoreCase - modifier for string operations. - - - - - The expected value - - - - - Indicates whether tests should be case-insensitive - - - - - Constructs a StringConstraint given an expected value - - The expected value - - - - Modify the constraint to ignore case in matching. - - - - - EmptyStringConstraint tests whether a string is empty. - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - NullEmptyStringConstraint tests whether a string is either null or empty. - - - - - Constructs a new NullOrEmptyStringConstraint - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - SubstringConstraint can test whether a string contains - the expected substring. - - - - - Initializes a new instance of the class. - - The expected. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - StartsWithConstraint can test whether a string starts - with an expected substring. - - - - - Initializes a new instance of the class. - - The expected string - - - - Test whether the constraint is matched by the actual value. - This is a template method, which calls the IsMatch method - of the derived class. - - - - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - EndsWithConstraint can test whether a string ends - with an expected substring. - - - - - Initializes a new instance of the class. - - The expected string - - - - Test whether the constraint is matched by the actual value. - This is a template method, which calls the IsMatch method - of the derived class. - - - - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - RegexConstraint can test whether a string matches - the pattern provided. - - - - - Initializes a new instance of the class. - - The pattern. - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True for success, false for failure - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - ThrowsConstraint is used to test the exception thrown by - a delegate by applying a constraint to it. - - - - - Initializes a new instance of the class, - using a constraint to be applied to the exception. - - A constraint to apply to the caught exception. - - - - Executes the code of the delegate and captures any exception. - If a non-null base constraint was provided, it applies that - constraint to the exception. - - A delegate representing the code to be tested - True if an exception is thrown and the constraint succeeds, otherwise false - - - - Converts an ActualValueDelegate to a TestDelegate - before calling the primary overload. - - - - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - Returns the string representation of this constraint - - - - - Get the actual exception thrown - used by Assert.Throws. - - - - - ThrowsNothingConstraint tests that a delegate does not - throw an exception. - - - - - Test whether the constraint is satisfied by a given value - - The value to be tested - True if no exception is thrown, otherwise false - - - - Converts an ActualValueDelegate to a TestDelegate - before calling the primary overload. - - - - - - - Write the constraint description to a MessageWriter - - The writer on which the description is displayed - - - - Write the actual value for a failing constraint test to a - MessageWriter. The default implementation simply writes - the raw value of actual, leaving it to the writer to - perform any formatting. - - The writer on which the actual value is displayed - - - - Modes in which the tolerance value for a comparison can - be interpreted. - - - - - The tolerance was created with a value, without specifying - how the value would be used. This is used to prevent setting - the mode more than once and is generally changed to Linear - upon execution of the test. - - - - - The tolerance is used as a numeric range within which - two compared values are considered to be equal. - - - - - Interprets the tolerance as the percentage by which - the two compared values my deviate from each other. - - - - - Compares two values based in their distance in - representable numbers. - - - - - The Tolerance class generalizes the notion of a tolerance - within which an equality test succeeds. Normally, it is - used with numeric types, but it can be used with any - type that supports taking a difference between two - objects and comparing that difference to a value. - - - - - Constructs a linear tolerance of a specdified amount - - - - - Constructs a tolerance given an amount and ToleranceMode - - - - - Tests that the current Tolerance is linear with a - numeric value, throwing an exception if it is not. - - - - - Returns an empty Tolerance object, equivalent to - specifying no tolerance. In most cases, it results - in an exact match but for floats and doubles a - default tolerance may be used. - - - - - Returns a zero Tolerance object, equivalent to - specifying an exact match. - - - - - Gets the ToleranceMode for the current Tolerance - - - - - Gets the value of the current Tolerance instance. - - - - - Returns a new tolerance, using the current amount as a percentage. - - - - - Returns a new tolerance, using the current amount in Ulps. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of days. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of hours. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of minutes. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of seconds. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of milliseconds. - - - - - Returns a new tolerance with a TimeSpan as the amount, using - the current amount as a number of clock ticks. - - - - - Returns true if the current tolerance is empty. - - - - - TypeConstraint is the abstract base for constraints - that take a Type as their expected value. - - - - - The expected Type used by the constraint - - - - - Construct a TypeConstraint for a given Type - - - - - - Write the actual value for a failing constraint test to a - MessageWriter. TypeConstraints override this method to write - the name of the type. - - The writer on which the actual value is displayed - - - - ExactTypeConstraint is used to test that an object - is of the exact type provided in the constructor - - - - - Construct an ExactTypeConstraint for a given Type - - The expected Type. - - - - Test that an object is of the exact type specified - - The actual value. - True if the tested object is of the exact type provided, otherwise false. - - - - Write the description of this constraint to a MessageWriter - - The MessageWriter to use - - - - ExceptionTypeConstraint is a special version of ExactTypeConstraint - used to provided detailed info about the exception thrown in - an error message. - - - - - Constructs an ExceptionTypeConstraint - - - - - Write the actual value for a failing constraint test to a - MessageWriter. Overriden to write additional information - in the case of an Exception. - - The MessageWriter to use - - - - InstanceOfTypeConstraint is used to test that an object - is of the same type provided or derived from it. - - - - - Construct an InstanceOfTypeConstraint for the type provided - - The expected Type - - - - Test whether an object is of the specified type or a derived type - - The object to be tested - True if the object is of the provided type or derives from it, otherwise false. - - - - Write a description of this constraint to a MessageWriter - - The MessageWriter to use - - - - AssignableFromConstraint is used to test that an object - can be assigned from a given Type. - - - - - Construct an AssignableFromConstraint for the type provided - - - - - - Test whether an object can be assigned from the specified type - - The object to be tested - True if the object can be assigned a value of the expected Type, otherwise false. - - - - Write a description of this constraint to a MessageWriter - - The MessageWriter to use - - - - AssignableToConstraint is used to test that an object - can be assigned to a given Type. - - - - - Construct an AssignableToConstraint for the type provided - - - - - - Test whether an object can be assigned to the specified type - - The object to be tested - True if the object can be assigned a value of the expected Type, otherwise false. - - - - Write a description of this constraint to a MessageWriter - - The MessageWriter to use - - - - Thrown when an assertion failed. - - - - - The error message that explains - the reason for the exception - - - The error message that explains - the reason for the exception - The exception that caused the - current exception - - - - Serialization Constructor - - - - - Thrown when an assertion failed. - - - - - - - The error message that explains - the reason for the exception - The exception that caused the - current exception - - - - Serialization Constructor - - - - - Thrown when a test executes inconclusively. - - - - - The error message that explains - the reason for the exception - - - The error message that explains - the reason for the exception - The exception that caused the - current exception - - - - Serialization Constructor - - - - - Thrown when an assertion failed. - - - - - - - The error message that explains - the reason for the exception - The exception that caused the - current exception - - - - Serialization Constructor - - - - - - - - - - - Compares two objects of a given Type for equality within a tolerance - - The first object to compare - The second object to compare - The tolerance to use in the comparison - - - - - The different targets a test action attribute can be applied to - - - - - Default target, which is determined by where the action attribute is attached - - - - - Target a individual test case - - - - - Target a suite of test cases - - - - - Delegate used by tests that execute code and - capture any thrown exception. - - - - - The Assert class contains a collection of static methods that - implement the most common assertions used in NUnit. - - - - - We don't actually want any instances of this object, but some people - like to inherit from it to add other static methods. Hence, the - protected constructor disallows any instances of this object. - - - - - The Equals method throws an AssertionException. This is done - to make sure there is no mistake by calling this function. - - - - - - - override the default ReferenceEquals to throw an AssertionException. This - implementation makes sure there is no mistake in calling this function - as part of Assert. - - - - - - - Helper for Assert.AreEqual(double expected, double actual, ...) - allowing code generation to work consistently. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Throws a with the message and arguments - that are passed in. This allows a test to be cut short, with a result - of success returned to NUnit. - - The message to initialize the with. - Arguments to be used in formatting the message - - - - Throws a with the message and arguments - that are passed in. This allows a test to be cut short, with a result - of success returned to NUnit. - - The message to initialize the with. - - - - Throws a with the message and arguments - that are passed in. This allows a test to be cut short, with a result - of success returned to NUnit. - - - - - Throws an with the message and arguments - that are passed in. This is used by the other Assert functions. - - The message to initialize the with. - Arguments to be used in formatting the message - - - - Throws an with the message that is - passed in. This is used by the other Assert functions. - - The message to initialize the with. - - - - Throws an . - This is used by the other Assert functions. - - - - - Throws an with the message and arguments - that are passed in. This causes the test to be reported as ignored. - - The message to initialize the with. - Arguments to be used in formatting the message - - - - Throws an with the message that is - passed in. This causes the test to be reported as ignored. - - The message to initialize the with. - - - - Throws an . - This causes the test to be reported as ignored. - - - - - Throws an with the message and arguments - that are passed in. This causes the test to be reported as inconclusive. - - The message to initialize the with. - Arguments to be used in formatting the message - - - - Throws an with the message that is - passed in. This causes the test to be reported as inconclusive. - - The message to initialize the with. - - - - Throws an . - This causes the test to be reported as Inconclusive. - - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - An ActualValueDelegate returning the value to be tested - A Constraint expression to be applied - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display if the condition is false - Arguments to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display if the condition is false - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - - - - Asserts that the code represented by a delegate throws an exception - that satisfies the constraint provided. - - A TestDelegate to be executed - A ThrowsConstraint used in the test - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - Used as a synonym for That in rare cases where a private setter - causes a Visual Basic compilation error. - - A Constraint to be applied - The actual value to test - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - Used as a synonym for That in rare cases where a private setter - causes a Visual Basic compilation error. - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - Used as a synonym for That in rare cases where a private setter - causes a Visual Basic compilation error. - - - This method is provided for use by VB developers needing to test - the value of properties with private setters. - - A Constraint expression to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws a particular exception when called. - - A constraint to be satisfied by the exception - A TestSnippet delegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws a particular exception when called. - - A constraint to be satisfied by the exception - A TestSnippet delegate - The message that will be displayed on failure - - - - Verifies that a delegate throws a particular exception when called. - - A constraint to be satisfied by the exception - A TestSnippet delegate - - - - Verifies that a delegate throws a particular exception when called. - - The exception Type expected - A TestSnippet delegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws a particular exception when called. - - The exception Type expected - A TestSnippet delegate - The message that will be displayed on failure - - - - Verifies that a delegate throws a particular exception when called. - - The exception Type expected - A TestSnippet delegate - - - - Verifies that a delegate throws a particular exception when called. - - Type of the expected exception - A TestSnippet delegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws a particular exception when called. - - Type of the expected exception - A TestSnippet delegate - The message that will be displayed on failure - - - - Verifies that a delegate throws a particular exception when called. - - Type of the expected exception - A TestSnippet delegate - - - - Verifies that a delegate throws an exception when called - and returns it. - - A TestDelegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws an exception when called - and returns it. - - A TestDelegate - The message that will be displayed on failure - - - - Verifies that a delegate throws an exception when called - and returns it. - - A TestDelegate - - - - Verifies that a delegate throws an exception of a certain Type - or one derived from it when called and returns it. - - The expected Exception Type - A TestDelegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws an exception of a certain Type - or one derived from it when called and returns it. - - The expected Exception Type - A TestDelegate - The message that will be displayed on failure - - - - Verifies that a delegate throws an exception of a certain Type - or one derived from it when called and returns it. - - The expected Exception Type - A TestDelegate - - - - Verifies that a delegate throws an exception of a certain Type - or one derived from it when called and returns it. - - The expected Exception Type - A TestDelegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate throws an exception of a certain Type - or one derived from it when called and returns it. - - The expected Exception Type - A TestDelegate - The message that will be displayed on failure - - - - Verifies that a delegate throws an exception of a certain Type - or one derived from it when called and returns it. - - The expected Exception Type - A TestDelegate - - - - Verifies that a delegate does not throw an exception - - A TestSnippet delegate - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Verifies that a delegate does not throw an exception. - - A TestSnippet delegate - The message that will be displayed on failure - - - - Verifies that a delegate does not throw an exception. - - A TestSnippet delegate - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display in case of failure - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display in case of failure - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - - - - Asserts that a condition is false. If the condition is true the method throws - an . - - The evaluated condition - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that a condition is false. If the condition is true the method throws - an . - - The evaluated condition - The message to display in case of failure - - - - Asserts that a condition is false. If the condition is true the method throws - an . - - The evaluated condition - - - - Asserts that a condition is false. If the condition is true the method throws - an . - - The evaluated condition - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that a condition is false. If the condition is true the method throws - an . - - The evaluated condition - The message to display in case of failure - - - - Asserts that a condition is false. If the condition is true the method throws - an . - - The evaluated condition - - - - Verifies that the object that is passed in is not equal to null - If the object is null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the object that is passed in is not equal to null - If the object is null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - - - - Verifies that the object that is passed in is not equal to null - If the object is null then an - is thrown. - - The object that is to be tested - - - - Verifies that the object that is passed in is not equal to null - If the object is null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the object that is passed in is not equal to null - If the object is null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - - - - Verifies that the object that is passed in is not equal to null - If the object is null then an - is thrown. - - The object that is to be tested - - - - Verifies that the object that is passed in is equal to null - If the object is not null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the object that is passed in is equal to null - If the object is not null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - - - - Verifies that the object that is passed in is equal to null - If the object is not null then an - is thrown. - - The object that is to be tested - - - - Verifies that the object that is passed in is equal to null - If the object is not null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the object that is passed in is equal to null - If the object is not null then an - is thrown. - - The object that is to be tested - The message to display in case of failure - - - - Verifies that the object that is passed in is equal to null - If the object is not null then an - is thrown. - - The object that is to be tested - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - The message to display in case of failure - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - The message to display in case of failure - - - - Verifies that the double that is passed in is an NaN value. - If the object is not NaN then an - is thrown. - - The value that is to be tested - - - - Assert that a string is empty - that is equal to string.Empty - - The string to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that a string is empty - that is equal to string.Empty - - The string to be tested - The message to display in case of failure - - - - Assert that a string is empty - that is equal to string.Empty - - The string to be tested - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing ICollection - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing ICollection - The message to display in case of failure - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing ICollection - - - - Assert that a string is not empty - that is not equal to string.Empty - - The string to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that a string is not empty - that is not equal to string.Empty - - The string to be tested - The message to display in case of failure - - - - Assert that a string is not empty - that is not equal to string.Empty - - The string to be tested - - - - Assert that an array, list or other collection is not empty - - An array, list or other collection implementing ICollection - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that an array, list or other collection is not empty - - An array, list or other collection implementing ICollection - The message to display in case of failure - - - - Assert that an array, list or other collection is not empty - - An array, list or other collection implementing ICollection - - - - Assert that a string is either null or equal to string.Empty - - The string to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that a string is either null or equal to string.Empty - - The string to be tested - The message to display in case of failure - - - - Assert that a string is either null or equal to string.Empty - - The string to be tested - - - - Assert that a string is not null or empty - - The string to be tested - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Assert that a string is not null or empty - - The string to be tested - The message to display in case of failure - - - - Assert that a string is not null or empty - - The string to be tested - - - - Asserts that an object may be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object may be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - - - - Asserts that an object may be assigned a value of a given Type. - - The expected Type. - The object under examination - - - - Asserts that an object may be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object may be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - - - - Asserts that an object may be assigned a value of a given Type. - - The expected Type. - The object under examination - - - - Asserts that an object may not be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object may not be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - - - - Asserts that an object may not be assigned a value of a given Type. - - The expected Type. - The object under examination - - - - Asserts that an object may not be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object may not be assigned a value of a given Type. - - The expected Type. - The object under examination - The message to display in case of failure - - - - Asserts that an object may not be assigned a value of a given Type. - - The expected Type. - The object under examination - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - - - - Asserts that an object is an instance of a given type. - - The expected Type - The object being examined - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - The message to display in case of failure - - - - Asserts that an object is not an instance of a given type. - - The expected Type - The object being examined - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are equal. If they are not, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two doubles are equal considering a delta. If the - expected value is infinity then the delta value is ignored. If - they are not equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two doubles are equal considering a delta. If the - expected value is infinity then the delta value is ignored. If - they are not equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - The message to display in case of failure - - - - Verifies that two doubles are equal considering a delta. If the - expected value is infinity then the delta value is ignored. If - they are not equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - - - - Verifies that two doubles are equal considering a delta. If the - expected value is infinity then the delta value is ignored. If - they are not equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two doubles are equal considering a delta. If the - expected value is infinity then the delta value is ignored. If - they are not equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - The message to display in case of failure - - - - Verifies that two doubles are equal considering a delta. If the - expected value is infinity then the delta value is ignored. If - they are not equal then an is - thrown. - - The expected value - The actual value - The maximum acceptable difference between the - the expected and the actual - - - - Verifies that two objects are equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are not equal an is thrown. - - The value that is expected - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two objects are equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are not equal an is thrown. - - The value that is expected - The actual value - The message to display in case of failure - - - - Verifies that two objects are equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are not equal an is thrown. - - The value that is expected - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - The message to display in case of failure - - - - Verifies that two values are not equal. If they are equal, then an - is thrown. - - The expected value - The actual value - - - - Verifies that two objects are not equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are equal an is thrown. - - The value that is expected - The actual value - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that two objects are not equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are equal an is thrown. - - The value that is expected - The actual value - The message to display in case of failure - - - - Verifies that two objects are not equal. Two objects are considered - equal if both are null, or if both have the same value. NUnit - has special semantics for some object types. - If they are equal an is thrown. - - The value that is expected - The actual value - - - - Asserts that two objects refer to the same object. If they - are not the same an is thrown. - - The expected object - The actual object - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that two objects refer to the same object. If they - are not the same an is thrown. - - The expected object - The actual object - The message to display in case of failure - - - - Asserts that two objects refer to the same object. If they - are not the same an is thrown. - - The expected object - The actual object - - - - Asserts that two objects do not refer to the same object. If they - are the same an is thrown. - - The expected object - The actual object - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that two objects do not refer to the same object. If they - are the same an is thrown. - - The expected object - The actual object - The message to display in case of failure - - - - Asserts that two objects do not refer to the same object. If they - are the same an is thrown. - - The expected object - The actual object - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than the second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - The message to display in case of failure - - - - Verifies that the first value is greater than or equal tothe second - value. If it is not, then an - is thrown. - - The first value, expected to be greater - The second value, expected to be less - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - The message to display in case of failure - - - - Verifies that the first value is less than or equal to the second - value. If it is not, then an - is thrown. - - The first value, expected to be less - The second value, expected to be greater - - - - Asserts that an object is contained in a list. - - The expected object - The list to be examined - The message to display in case of failure - Array of objects to be used in formatting the message - - - - Asserts that an object is contained in a list. - - The expected object - The list to be examined - The message to display in case of failure - - - - Asserts that an object is contained in a list. - - The expected object - The list to be examined - - - - Gets the number of assertions executed so far and - resets the counter to zero. - - - - - AssertionHelper is an optional base class for user tests, - allowing the use of shorter names for constraints and - asserts and avoiding conflict with the definition of - , from which it inherits much of its - behavior, in certain mock object frameworks. - - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. Works - identically to Assert.That - - A Constraint to be applied - The actual value to test - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. Works - identically to Assert.That. - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. Works - identically to Assert.That - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - An ActualValueDelegate returning the value to be tested - A Constraint expression to be applied - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an assertion exception on failure. - - A Constraint to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . Works Identically to Assert.That. - - The evaluated condition - The message to display if the condition is false - Arguments to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . Works Identically to Assert.That. - - The evaluated condition - The message to display if the condition is false - - - - Asserts that a condition is true. If the condition is false the method throws - an . Works Identically Assert.That. - - The evaluated condition - - - - Asserts that the code represented by a delegate throws an exception - that satisfies the constraint provided. - - A TestDelegate to be executed - A ThrowsConstraint used in the test - - - - Returns a ListMapper based on a collection. - - The original collection - - - - - Provides static methods to express the assumptions - that must be met for a test to give a meaningful - result. If an assumption is not met, the test - should produce an inconclusive result. - - - - - The Equals method throws an AssertionException. This is done - to make sure there is no mistake by calling this function. - - - - - - - override the default ReferenceEquals to throw an AssertionException. This - implementation makes sure there is no mistake in calling this function - as part of Assert. - - - - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - An ActualValueDelegate returning the value to be tested - The message that will be displayed on failure - - - - Apply a constraint to an actual value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - An ActualValueDelegate returning the value to be tested - A Constraint expression to be applied - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - The message that will be displayed on failure - - - - Apply a constraint to a referenced value, succeeding if the constraint - is satisfied and throwing an InconclusiveException on failure. - - A Constraint expression to be applied - The actual value to test - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display if the condition is false - Arguments to be used in formatting the message - - - - Asserts that a condition is true. If the condition is false the method throws - an . - - The evaluated condition - The message to display if the condition is false - - - - Asserts that a condition is true. If the condition is false the - method throws an . - - The evaluated condition - - - - Asserts that the code represented by a delegate throws an exception - that satisfies the constraint provided. - - A TestDelegate to be executed - A ThrowsConstraint used in the test - - - - A set of Assert methods operationg on one or more collections - - - - - The Equals method throws an AssertionException. This is done - to make sure there is no mistake by calling this function. - - - - - - - override the default ReferenceEquals to throw an AssertionException. This - implementation makes sure there is no mistake in calling this function - as part of Assert. - - - - - - - Asserts that all items contained in collection are of the type specified by expectedType. - - IEnumerable containing objects to be considered - System.Type that all objects in collection must be instances of - - - - Asserts that all items contained in collection are of the type specified by expectedType. - - IEnumerable containing objects to be considered - System.Type that all objects in collection must be instances of - The message that will be displayed on failure - - - - Asserts that all items contained in collection are of the type specified by expectedType. - - IEnumerable containing objects to be considered - System.Type that all objects in collection must be instances of - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that all items contained in collection are not equal to null. - - IEnumerable containing objects to be considered - - - - Asserts that all items contained in collection are not equal to null. - - IEnumerable containing objects to be considered - The message that will be displayed on failure - - - - Asserts that all items contained in collection are not equal to null. - - IEnumerable of objects to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Ensures that every object contained in collection exists within the collection - once and only once. - - IEnumerable of objects to be considered - - - - Ensures that every object contained in collection exists within the collection - once and only once. - - IEnumerable of objects to be considered - The message that will be displayed on failure - - - - Ensures that every object contained in collection exists within the collection - once and only once. - - IEnumerable of objects to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that expected and actual are exactly equal. The collections must have the same count, - and contain the exact same objects in the same order. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - - - - Asserts that expected and actual are exactly equal. The collections must have the same count, - and contain the exact same objects in the same order. - If comparer is not null then it will be used to compare the objects. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - - - - Asserts that expected and actual are exactly equal. The collections must have the same count, - and contain the exact same objects in the same order. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - - - - Asserts that expected and actual are exactly equal. The collections must have the same count, - and contain the exact same objects in the same order. - If comparer is not null then it will be used to compare the objects. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - The message that will be displayed on failure - - - - Asserts that expected and actual are exactly equal. The collections must have the same count, - and contain the exact same objects in the same order. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that expected and actual are exactly equal. The collections must have the same count, - and contain the exact same objects in the same order. - If comparer is not null then it will be used to compare the objects. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - - - - Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - - - - Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that expected and actual are not exactly equal. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - - - - Asserts that expected and actual are not exactly equal. - If comparer is not null then it will be used to compare the objects. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - - - - Asserts that expected and actual are not exactly equal. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - - - - Asserts that expected and actual are not exactly equal. - If comparer is not null then it will be used to compare the objects. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - The message that will be displayed on failure - - - - Asserts that expected and actual are not exactly equal. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that expected and actual are not exactly equal. - If comparer is not null then it will be used to compare the objects. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The IComparer to use in comparing objects from each IEnumerable - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that expected and actual are not equivalent. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - - - - Asserts that expected and actual are not equivalent. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - - - - Asserts that expected and actual are not equivalent. - - The first IEnumerable of objects to be considered - The second IEnumerable of objects to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that collection contains actual as an item. - - IEnumerable of objects to be considered - Object to be found within collection - - - - Asserts that collection contains actual as an item. - - IEnumerable of objects to be considered - Object to be found within collection - The message that will be displayed on failure - - - - Asserts that collection contains actual as an item. - - IEnumerable of objects to be considered - Object to be found within collection - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that collection does not contain actual as an item. - - IEnumerable of objects to be considered - Object that cannot exist within collection - - - - Asserts that collection does not contain actual as an item. - - IEnumerable of objects to be considered - Object that cannot exist within collection - The message that will be displayed on failure - - - - Asserts that collection does not contain actual as an item. - - IEnumerable of objects to be considered - Object that cannot exist within collection - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that superset is not a subject of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - - - - Asserts that superset is not a subject of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - The message that will be displayed on failure - - - - Asserts that superset is not a subject of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Asserts that superset is a subset of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - - - - Asserts that superset is a subset of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - The message that will be displayed on failure - - - - Asserts that superset is a subset of subset. - - The IEnumerable superset to be considered - The IEnumerable subset to be considered - The message that will be displayed on failure - Arguments to be used in formatting the message - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - Arguments to be used in formatting the message - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - - - - Assert that an array,list or other collection is empty - - An array, list or other collection implementing IEnumerable - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - Arguments to be used in formatting the message - - - - Assert that an array, list or other collection is empty - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - - - - Assert that an array,list or other collection is empty - - An array, list or other collection implementing IEnumerable - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - Arguments to be used in formatting the message - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - The message to be displayed on failure - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - A custom comparer to perform the comparisons - The message to be displayed on failure - Arguments to be used in formatting the message - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - A custom comparer to perform the comparisons - The message to be displayed on failure - - - - Assert that an array, list or other collection is ordered - - An array, list or other collection implementing IEnumerable - A custom comparer to perform the comparisons - - - - Static helper class used in the constraint-based syntax - - - - - Creates a new SubstringConstraint - - The value of the substring - A SubstringConstraint - - - - Creates a new CollectionContainsConstraint. - - The item that should be found. - A new CollectionContainsConstraint - - - - Summary description for DirectoryAssert - - - - - The Equals method throws an AssertionException. This is done - to make sure there is no mistake by calling this function. - - - - - - - override the default ReferenceEquals to throw an AssertionException. This - implementation makes sure there is no mistake in calling this function - as part of Assert. - - - - - - - We don't actually want any instances of this object, but some people - like to inherit from it to add other static methods. Hence, the - protected constructor disallows any instances of this object. - - - - - Verifies that two directories are equal. Two directories are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Verifies that two directories are equal. Two directories are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - The message to display if directories are not equal - - - - Verifies that two directories are equal. Two directories are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - - - - Verifies that two directories are equal. Two directories are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Verifies that two directories are equal. Two directories are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - The message to display if directories are not equal - - - - Verifies that two directories are equal. Two directories are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - The message to display if directories are not equal - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory containing the value that is expected - A directory containing the actual value - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - The message to display if directories are equal - Arguments to be used in formatting the message - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - The message to display if directories are equal - - - - Asserts that two directories are not equal. If they are equal - an is thrown. - - A directory path string containing the value that is expected - A directory path string containing the actual value - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - The message to display if directories are not equal - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - The message to display if directories are not equal - - - - Asserts that the directory is empty. If it is not empty - an is thrown. - - A directory to search - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - The message to display if directories are not equal - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - The message to display if directories are not equal - Arguments to be used in formatting the message - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - The message to display if directories are not equal - - - - Asserts that the directory is not empty. If it is empty - an is thrown. - - A directory to search - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - Arguments to be used in formatting the message - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - Arguments to be used in formatting the message - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - - - - Asserts that path contains actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - Arguments to be used in formatting the message - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - Arguments to be used in formatting the message - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - The message to display if directory is not within the path - - - - Asserts that path does not contain actual as a subdirectory or - an is thrown. - - A directory to search - sub-directory asserted to exist under directory - - - - Summary description for FileAssert. - - - - - The Equals method throws an AssertionException. This is done - to make sure there is no mistake by calling this function. - - - - - - - override the default ReferenceEquals to throw an AssertionException. This - implementation makes sure there is no mistake in calling this function - as part of Assert. - - - - - - - We don't actually want any instances of this object, but some people - like to inherit from it to add other static methods. Hence, the - protected constructor disallows any instances of this object. - - - - - Verifies that two Streams are equal. Two Streams are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - The expected Stream - The actual Stream - The message to display if Streams are not equal - Arguments to be used in formatting the message - - - - Verifies that two Streams are equal. Two Streams are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - The expected Stream - The actual Stream - The message to display if objects are not equal - - - - Verifies that two Streams are equal. Two Streams are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - The expected Stream - The actual Stream - - - - Verifies that two files are equal. Two files are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A file containing the value that is expected - A file containing the actual value - The message to display if Streams are not equal - Arguments to be used in formatting the message - - - - Verifies that two files are equal. Two files are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A file containing the value that is expected - A file containing the actual value - The message to display if objects are not equal - - - - Verifies that two files are equal. Two files are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - A file containing the value that is expected - A file containing the actual value - - - - Verifies that two files are equal. Two files are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - The path to a file containing the value that is expected - The path to a file containing the actual value - The message to display if Streams are not equal - Arguments to be used in formatting the message - - - - Verifies that two files are equal. Two files are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - The path to a file containing the value that is expected - The path to a file containing the actual value - The message to display if objects are not equal - - - - Verifies that two files are equal. Two files are considered - equal if both are null, or if both have the same value byte for byte. - If they are not equal an is thrown. - - The path to a file containing the value that is expected - The path to a file containing the actual value - - - - Asserts that two Streams are not equal. If they are equal - an is thrown. - - The expected Stream - The actual Stream - The message to be displayed when the two Stream are the same. - Arguments to be used in formatting the message - - - - Asserts that two Streams are not equal. If they are equal - an is thrown. - - The expected Stream - The actual Stream - The message to be displayed when the Streams are the same. - - - - Asserts that two Streams are not equal. If they are equal - an is thrown. - - The expected Stream - The actual Stream - - - - Asserts that two files are not equal. If they are equal - an is thrown. - - A file containing the value that is expected - A file containing the actual value - The message to display if Streams are not equal - Arguments to be used in formatting the message - - - - Asserts that two files are not equal. If they are equal - an is thrown. - - A file containing the value that is expected - A file containing the actual value - The message to display if objects are not equal - - - - Asserts that two files are not equal. If they are equal - an is thrown. - - A file containing the value that is expected - A file containing the actual value - - - - Asserts that two files are not equal. If they are equal - an is thrown. - - The path to a file containing the value that is expected - The path to a file containing the actual value - The message to display if Streams are not equal - Arguments to be used in formatting the message - - - - Asserts that two files are not equal. If they are equal - an is thrown. - - The path to a file containing the value that is expected - The path to a file containing the actual value - The message to display if objects are not equal - - - - Asserts that two files are not equal. If they are equal - an is thrown. - - The path to a file containing the value that is expected - The path to a file containing the actual value - - - - GlobalSettings is a place for setting default values used - by the framework in performing asserts. - - - - - Default tolerance for floating point equality - - - - - Helper class with properties and methods that supply - a number of constraints used in Asserts. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding only if a specified number of them succeed. - - - - - Returns a new PropertyConstraintExpression, which will either - test for the existence of the named property on the object - being tested or apply any following constraint to that property. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns a new AttributeConstraint checking for the - presence of a particular attribute on an object. - - - - - Returns a new CollectionContainsConstraint checking for the - presence of a particular object in the collection. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if at least one of them succeeds. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them fail. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Length property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Count property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the Message property of the object being tested. - - - - - Returns a new ConstraintExpression, which will apply the following - constraint to the InnerException property of the object being tested. - - - - - Interface implemented by a user fixture in order to - validate any expected exceptions. It is only called - for test methods marked with the ExpectedException - attribute. - - - - - Method to handle an expected exception - - The exception to be handled - - - - Helper class with properties and methods that supply - a number of constraints used in Asserts. - - - - - Returns a constraint that tests two items for equality - - - - - Returns a constraint that tests that two references are the same object - - - - - Returns a constraint that tests whether the - actual value is greater than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is greater than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than or equal to the suppled argument - - - - - Returns a constraint that tests whether the - actual value is less than or equal to the suppled argument - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual - value is of the exact type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is of the type supplied as an argument or a derived type. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is assignable from the type supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a collection containing the same elements as the - collection supplied as an argument. - - - - - Returns a constraint that tests whether the actual value - is a subset of the collection supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that tests whether the path provided - is the same as an expected path after canonicalization. - - - - - Returns a constraint that tests whether the path provided - is the same path or under an expected path after canonicalization. - - - - - Returns a constraint that tests whether the path provided - is the same path or under an expected path after canonicalization. - - - - - Returns a constraint that tests whether the actual value falls - within a specified range. - - - - - Returns a ConstraintExpression that negates any - following constraint. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - Returns a constraint that tests for null - - - - - Returns a constraint that tests for True - - - - - Returns a constraint that tests for False - - - - - Returns a constraint that tests for a positive value - - - - - Returns a constraint that tests for a negative value - - - - - Returns a constraint that tests for NaN - - - - - Returns a constraint that tests for empty - - - - - Returns a constraint that tests whether a collection - contains all unique items. - - - - - Returns a constraint that tests whether an object graph is serializable in binary format. - - - - - Returns a constraint that tests whether an object graph is serializable in xml format. - - - - - Returns a constraint that tests whether a collection is ordered - - - - - The Iz class is a synonym for Is intended for use in VB, - which regards Is as a keyword. - - - - - The List class is a helper class with properties and methods - that supply a number of constraints used with lists and collections. - - - - - List.Map returns a ListMapper, which can be used to map - the original collection to another collection. - - - - - - - ListMapper is used to transform a collection used as an actual argument - producing another collection to be used in the assertion. - - - - - Construct a ListMapper based on a collection - - The collection to be transformed - - - - Produces a collection containing all the values of a property - - The collection of property values - - - - - Randomizer returns a set of random values in a repeatable - way, to allow re-running of tests if necessary. - - - - - Get a randomizer for a particular member, returning - one that has already been created if it exists. - This ensures that the same values are generated - each time the tests are reloaded. - - - - - Get a randomizer for a particular parameter, returning - one that has already been created if it exists. - This ensures that the same values are generated - each time the tests are reloaded. - - - - - Construct a randomizer using a random seed - - - - - Construct a randomizer using a specified seed - - - - - Return an array of random doubles between 0.0 and 1.0. - - - - - - - Return an array of random doubles with values in a specified range. - - - - - Return an array of random ints with values in a specified range. - - - - - Get a random seed for use in creating a randomizer. - - - - - The SpecialValue enum is used to represent TestCase arguments - that cannot be used as arguments to an Attribute. - - - - - Null represents a null value, which cannot be used as an - argument to an attriute under .NET 1.x - - - - - Basic Asserts on strings. - - - - - The Equals method throws an AssertionException. This is done - to make sure there is no mistake by calling this function. - - - - - - - override the default ReferenceEquals to throw an AssertionException. This - implementation makes sure there is no mistake in calling this function - as part of Assert. - - - - - - - Asserts that a string is found within another string. - - The expected string - The string to be examined - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string is found within another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string is found within another string. - - The expected string - The string to be examined - - - - Asserts that a string is not found within another string. - - The expected string - The string to be examined - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string is found within another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string is found within another string. - - The expected string - The string to be examined - - - - Asserts that a string starts with another string. - - The expected string - The string to be examined - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string starts with another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string starts with another string. - - The expected string - The string to be examined - - - - Asserts that a string does not start with another string. - - The expected string - The string to be examined - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string does not start with another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string does not start with another string. - - The expected string - The string to be examined - - - - Asserts that a string ends with another string. - - The expected string - The string to be examined - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string ends with another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string ends with another string. - - The expected string - The string to be examined - - - - Asserts that a string does not end with another string. - - The expected string - The string to be examined - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string does not end with another string. - - The expected string - The string to be examined - The message to display in case of failure - - - - Asserts that a string does not end with another string. - - The expected string - The string to be examined - - - - Asserts that two strings are equal, without regard to case. - - The expected string - The actual string - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that two strings are equal, without regard to case. - - The expected string - The actual string - The message to display in case of failure - - - - Asserts that two strings are equal, without regard to case. - - The expected string - The actual string - - - - Asserts that two strings are not equal, without regard to case. - - The expected string - The actual string - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that two strings are Notequal, without regard to case. - - The expected string - The actual string - The message to display in case of failure - - - - Asserts that two strings are not equal, without regard to case. - - The expected string - The actual string - - - - Asserts that a string matches an expected regular expression pattern. - - The regex pattern to be matched - The actual string - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string matches an expected regular expression pattern. - - The regex pattern to be matched - The actual string - The message to display in case of failure - - - - Asserts that a string matches an expected regular expression pattern. - - The regex pattern to be matched - The actual string - - - - Asserts that a string does not match an expected regular expression pattern. - - The regex pattern to be used - The actual string - The message to display in case of failure - Arguments used in formatting the message - - - - Asserts that a string does not match an expected regular expression pattern. - - The regex pattern to be used - The actual string - The message to display in case of failure - - - - Asserts that a string does not match an expected regular expression pattern. - - The regex pattern to be used - The actual string - - - - The TestCaseData class represents a set of arguments - and other parameter info to be used for a parameterized - test case. It provides a number of instance modifiers - for use in initializing the test case. - - Note: Instance modifiers are getters that return - the same instance after modifying it's state. - - - - - The argument list to be provided to the test - - - - - The expected result to be returned - - - - - Set to true if this has an expected result - - - - - The expected exception Type - - - - - The FullName of the expected exception - - - - - The name to be used for the test - - - - - The description of the test - - - - - A dictionary of properties, used to add information - to tests without requiring the class to change. - - - - - If true, indicates that the test case is to be ignored - - - - - If true, indicates that the test case is marked explicit - - - - - The reason for ignoring a test case - - - - - Initializes a new instance of the class. - - The arguments. - - - - Initializes a new instance of the class. - - The argument. - - - - Initializes a new instance of the class. - - The first argument. - The second argument. - - - - Initializes a new instance of the class. - - The first argument. - The second argument. - The third argument. - - - - Sets the expected result for the test - - The expected result - A modified TestCaseData - - - - Sets the expected exception type for the test - - Type of the expected exception. - The modified TestCaseData instance - - - - Sets the expected exception type for the test - - FullName of the expected exception. - The modified TestCaseData instance - - - - Sets the name of the test case - - The modified TestCaseData instance - - - - Sets the description for the test case - being constructed. - - The description. - The modified TestCaseData instance. - - - - Applies a category to the test - - - - - - - Applies a named property to the test - - - - - - - - Applies a named property to the test - - - - - - - - Applies a named property to the test - - - - - - - - Ignores this TestCase. - - - - - - Ignores this TestCase, specifying the reason. - - The reason. - - - - - Marks this TestCase as Explicit - - - - - - Marks this TestCase as Explicit, specifying the reason. - - The reason. - - - - - Gets the argument list to be provided to the test - - - - - Gets the expected result - - - - - Returns true if the result has been set - - - - - Gets the expected exception Type - - - - - Gets the FullName of the expected exception - - - - - Gets the name to be used for the test - - - - - Gets the description of the test - - - - - Gets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets a value indicating whether this is explicit. - - true if explicit; otherwise, false. - - - - Gets the ignore reason. - - The ignore reason. - - - - Gets a list of categories associated with this test. - - - - - Gets the property dictionary for this test - - - - - Provide the context information of the current test - - - - - Constructs a TestContext using the provided context dictionary - - A context dictionary - - - - Get the current test context. This is created - as needed. The user may save the context for - use within a test, but it should not be used - outside the test for which it is created. - - - - - Gets a TestAdapter representing the currently executing test in this context. - - - - - Gets a ResultAdapter representing the current result for the test - executing in this context. - - - - - Gets the directory containing the current test assembly. - - - - - Gets the directory to be used for outputing files created - by this test run. - - - - - TestAdapter adapts a Test for consumption by - the user test code. - - - - - Constructs a TestAdapter for this context - - The context dictionary - - - - The name of the test. - - - - - The FullName of the test - - - - - The properties of the test. - - - - - ResultAdapter adapts a TestResult for consumption by - the user test code. - - - - - Construct a ResultAdapter for a context - - The context holding the result - - - - The TestState of current test. This maps to the ResultState - used in nunit.core and is subject to change in the future. - - - - - The TestStatus of current test. This enum will be used - in future versions of NUnit and so is to be preferred - to the TestState value. - - - - - Provides details about a test - - - - - Creates an instance of TestDetails - - The fixture that the test is a member of, if available. - The method that implements the test, if available. - The full name of the test. - A string representing the type of test, e.g. "Test Case". - Indicates if the test represents a suite of tests. - - - - The fixture that the test is a member of, if available. - - - - - The method that implements the test, if available. - - - - - The full name of the test. - - - - - A string representing the type of test, e.g. "Test Case". - - - - - Indicates if the test represents a suite of tests. - - - - - The ResultState enum indicates the result of running a test - - - - - The result is inconclusive - - - - - The test was not runnable. - - - - - The test has been skipped. - - - - - The test has been ignored. - - - - - The test succeeded - - - - - The test failed - - - - - The test encountered an unexpected exception - - - - - The test was cancelled by the user - - - - - The TestStatus enum indicates the result of running a test - - - - - The test was inconclusive - - - - - The test has skipped - - - - - The test succeeded - - - - - The test failed - - - - - Helper class with static methods used to supply constraints - that operate on strings. - - - - - Returns a constraint that succeeds if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value contains the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value starts with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that fails if the actual - value ends with the substring supplied as an argument. - - - - - Returns a constraint that succeeds if the actual - value matches the Regex pattern supplied as an argument. - - - - - Returns a constraint that fails if the actual - value matches the pattern supplied as an argument. - - - - - Returns a ConstraintExpression, which will apply - the following constraint to all members of a collection, - succeeding if all of them succeed. - - - - - TextMessageWriter writes constraint descriptions and messages - in displayable form as a text stream. It tailors the display - of individual message components to form the standard message - format of NUnit assertion failure messages. - - - - - Prefix used for the expected value line of a message - - - - - Prefix used for the actual value line of a message - - - - - Length of a message prefix - - - - - Construct a TextMessageWriter - - - - - Construct a TextMessageWriter, specifying a user message - and optional formatting arguments. - - - - - - - Method to write single line message with optional args, usually - written to precede the general failure message, at a givel - indentation level. - - The indentation level of the message - The message to be written - Any arguments used in formatting the message - - - - Display Expected and Actual lines for a constraint. This - is called by MessageWriter's default implementation of - WriteMessageTo and provides the generic two-line display. - - The constraint that failed - - - - Display Expected and Actual lines for given values. This - method may be called by constraints that need more control over - the display of actual and expected values than is provided - by the default implementation. - - The expected value - The actual value causing the failure - - - - Display Expected and Actual lines for given values, including - a tolerance value on the expected line. - - The expected value - The actual value causing the failure - The tolerance within which the test was made - - - - Display the expected and actual string values on separate lines. - If the mismatch parameter is >=0, an additional line is displayed - line containing a caret that points to the mismatch point. - - The expected string value - The actual string value - The point at which the strings don't match or -1 - If true, case is ignored in string comparisons - If true, clip the strings to fit the max line length - - - - Writes the text for a connector. - - The connector. - - - - Writes the text for a predicate. - - The predicate. - - - - Write the text for a modifier. - - The modifier. - - - - Writes the text for an expected value. - - The expected value. - - - - Writes the text for an actual value. - - The actual value. - - - - Writes the text for a generalized value. - - The value. - - - - Writes the text for a collection value, - starting at a particular point, to a max length - - The collection containing elements to write. - The starting point of the elements to write - The maximum number of elements to write - - - - Write the generic 'Expected' line for a constraint - - The constraint that failed - - - - Write the generic 'Expected' line for a given value - - The expected value - - - - Write the generic 'Expected' line for a given value - and tolerance. - - The expected value - The tolerance within which the test was made - - - - Write the generic 'Actual' line for a constraint - - The constraint for which the actual value is to be written - - - - Write the generic 'Actual' line for a given value - - The actual value causing a failure - - - - Gets or sets the maximum line length for this writer - - - - - Helper class with properties and methods that supply - constraints that operate on exceptions. - - - - - Creates a constraint specifying the exact type of exception expected - - - - - Creates a constraint specifying the exact type of exception expected - - - - - Creates a constraint specifying the type of exception expected - - - - - Creates a constraint specifying the type of exception expected - - - - - Creates a constraint specifying an expected exception - - - - - Creates a constraint specifying an exception with a given InnerException - - - - - Creates a constraint specifying an expected TargetInvocationException - - - - - Creates a constraint specifying an expected TargetInvocationException - - - - - Creates a constraint specifying an expected TargetInvocationException - - - - - Creates a constraint specifying that no exception is thrown - - - - diff --git a/lib/tests/nunit.util.dll b/lib/tests/nunit.util.dll deleted file mode 100644 index c837e9ecf06..00000000000 Binary files a/lib/tests/nunit.util.dll and /dev/null differ diff --git a/lib/tests/old/sqlite3.def b/lib/tests/old/sqlite3.def deleted file mode 100644 index cffe677f2f7..00000000000 --- a/lib/tests/old/sqlite3.def +++ /dev/null @@ -1,179 +0,0 @@ -EXPORTS -sqlite3_aggregate_context -sqlite3_aggregate_count -sqlite3_auto_extension -sqlite3_backup_finish -sqlite3_backup_init -sqlite3_backup_pagecount -sqlite3_backup_remaining -sqlite3_backup_step -sqlite3_bind_blob -sqlite3_bind_double -sqlite3_bind_int -sqlite3_bind_int64 -sqlite3_bind_null -sqlite3_bind_parameter_count -sqlite3_bind_parameter_index -sqlite3_bind_parameter_name -sqlite3_bind_text -sqlite3_bind_text16 -sqlite3_bind_value -sqlite3_bind_zeroblob -sqlite3_blob_bytes -sqlite3_blob_close -sqlite3_blob_open -sqlite3_blob_read -sqlite3_blob_write -sqlite3_busy_handler -sqlite3_busy_timeout -sqlite3_changes -sqlite3_clear_bindings -sqlite3_close -sqlite3_collation_needed -sqlite3_collation_needed16 -sqlite3_column_blob -sqlite3_column_bytes -sqlite3_column_bytes16 -sqlite3_column_count -sqlite3_column_database_name -sqlite3_column_database_name16 -sqlite3_column_decltype -sqlite3_column_decltype16 -sqlite3_column_double -sqlite3_column_int -sqlite3_column_int64 -sqlite3_column_name -sqlite3_column_name16 -sqlite3_column_origin_name -sqlite3_column_origin_name16 -sqlite3_column_table_name -sqlite3_column_table_name16 -sqlite3_column_text -sqlite3_column_text16 -sqlite3_column_type -sqlite3_column_value -sqlite3_commit_hook -sqlite3_complete -sqlite3_complete16 -sqlite3_config -sqlite3_context_db_handle -sqlite3_create_collation -sqlite3_create_collation16 -sqlite3_create_collation_v2 -sqlite3_create_function -sqlite3_create_function16 -sqlite3_create_module -sqlite3_create_module_v2 -sqlite3_data_count -sqlite3_db_config -sqlite3_db_handle -sqlite3_db_mutex -sqlite3_db_status -sqlite3_declare_vtab -sqlite3_enable_load_extension -sqlite3_enable_shared_cache -sqlite3_errcode -sqlite3_errmsg -sqlite3_errmsg16 -sqlite3_exec -sqlite3_expired -sqlite3_extended_errcode -sqlite3_extended_result_codes -sqlite3_file_control -sqlite3_finalize -sqlite3_free -sqlite3_free_table -sqlite3_get_autocommit -sqlite3_get_auxdata -sqlite3_get_table -sqlite3_global_recover -sqlite3_initialize -sqlite3_interrupt -sqlite3_last_insert_rowid -sqlite3_libversion -sqlite3_libversion_number -sqlite3_limit -sqlite3_load_extension -sqlite3_malloc -sqlite3_memory_alarm -sqlite3_memory_highwater -sqlite3_memory_used -sqlite3_mprintf -sqlite3_mutex_alloc -sqlite3_mutex_enter -sqlite3_mutex_free -sqlite3_mutex_leave -sqlite3_mutex_try -sqlite3_next_stmt -sqlite3_open -sqlite3_open16 -sqlite3_open_v2 -sqlite3_os_end -sqlite3_os_init -sqlite3_overload_function -sqlite3_prepare -sqlite3_prepare16 -sqlite3_prepare16_v2 -sqlite3_prepare_v2 -sqlite3_profile -sqlite3_progress_handler -sqlite3_randomness -sqlite3_realloc -sqlite3_release_memory -sqlite3_reset -sqlite3_reset_auto_extension -sqlite3_result_blob -sqlite3_result_double -sqlite3_result_error -sqlite3_result_error16 -sqlite3_result_error_code -sqlite3_result_error_nomem -sqlite3_result_error_toobig -sqlite3_result_int -sqlite3_result_int64 -sqlite3_result_null -sqlite3_result_text -sqlite3_result_text16 -sqlite3_result_text16be -sqlite3_result_text16le -sqlite3_result_value -sqlite3_result_zeroblob -sqlite3_rollback_hook -sqlite3_set_authorizer -sqlite3_set_auxdata -sqlite3_shutdown -sqlite3_sleep -sqlite3_snprintf -sqlite3_soft_heap_limit -sqlite3_sql -sqlite3_status -sqlite3_step -sqlite3_stmt_status -sqlite3_strnicmp -sqlite3_table_column_metadata -sqlite3_test_control -sqlite3_thread_cleanup -sqlite3_threadsafe -sqlite3_total_changes -sqlite3_trace -sqlite3_transfer_bindings -sqlite3_update_hook -sqlite3_user_data -sqlite3_value_blob -sqlite3_value_bytes -sqlite3_value_bytes16 -sqlite3_value_double -sqlite3_value_int -sqlite3_value_int64 -sqlite3_value_numeric_type -sqlite3_value_text -sqlite3_value_text16 -sqlite3_value_text16be -sqlite3_value_text16le -sqlite3_value_type -sqlite3_version -sqlite3_vfs_find -sqlite3_vfs_register -sqlite3_vfs_unregister -sqlite3_vmprintf -sqlite3_win32_mbcs_to_utf8 diff --git a/lib/tests/old/sqlite3.dll b/lib/tests/old/sqlite3.dll deleted file mode 100644 index 321d48d31cf..00000000000 Binary files a/lib/tests/old/sqlite3.dll and /dev/null differ diff --git a/lib/tests/protobuf-net.dll b/lib/tests/protobuf-net.dll deleted file mode 100644 index 99bbb956f80..00000000000 Binary files a/lib/tests/protobuf-net.dll and /dev/null differ diff --git a/lib/x64/ServiceStack.OrmLite.SqliteNET.dll b/lib/x64/ServiceStack.OrmLite.SqliteNET.dll deleted file mode 100644 index e27d2e7c8f9..00000000000 Binary files a/lib/x64/ServiceStack.OrmLite.SqliteNET.dll and /dev/null differ diff --git a/lib/x86/ServiceStack.OrmLite.SqliteNET.dll b/lib/x86/ServiceStack.OrmLite.SqliteNET.dll deleted file mode 100644 index 720408e9dd3..00000000000 Binary files a/lib/x86/ServiceStack.OrmLite.SqliteNET.dll and /dev/null differ diff --git a/license.txt b/license.txt index 99429afd850..ba621930133 100644 --- a/license.txt +++ b/license.txt @@ -1,5 +1,5 @@ ServiceStack -Copyright (c) 2013 Service Stack +Copyright (c) 2013-present, ServiceStack =============================================================================== This program is free software: you can redistribute it and/or modify it @@ -35,7 +35,7 @@ work and are not dervied from the Software. - If you violate any of the terms in this Exception, you lose all rights granted to you by the Exception and revert to the terms of AGPLv3. -Service Stack reserves all rights not expressly granted in these terms and conditions. +ServiceStack reserves all rights not expressly granted in these terms and conditions. Open Source License List @@ -65,5 +65,5 @@ Zlib/libpng License - Commercial License =========================================================================== -In addition to this license, ServiceStack is offered under a commerical license. +In addition to this license, ServiceStack is offered under a commercial license. see https://servicestack.net/pricing for details. diff --git a/release-notes.md b/release-notes.md deleted file mode 100644 index ce1b02ef3a5..00000000000 --- a/release-notes.md +++ /dev/null @@ -1,5670 +0,0 @@ -## [2015 Release Notes](https://github.com/ServiceStack/ServiceStack/blob/master/docs/2015/release-notes.md) - ---- - -# v4.0.35 Release Notes - -We're ending 2014 with a short release cycle primarily focused on a polished and fixes Release, ready for before everyone gets back at work - re-energized for a Happy New 2015 work year :) - -## New [TechStacks](http://techstacks.io) LiveDemo! - -We've been gradually refining our modern [AngularJS](https://github.com/ServiceStack/ServiceStackVS/blob/master/angular-spa.md) and [React](https://github.com/ServiceStackApps/Chat-React) Single Page App VS.NET templates which represents what we believe to be the optimal formula for developing future .NET-based JS Apps - utilizing a best-of-breed node.js, npm, bower, grunt/gulp build system. - -To this end we're developing new Single Page Apps alongside to further refine these VS.NET templates and demonstrate their potential in using the pre-configured Grunt tasks to manage the full iterative client/server building, optimization and deployment dev workflows. - -We're happy to be able to preview the latest Live Demo built on the **AngularJS App** VS.NET template in: http://techstacks.io - -[![TechStacks](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/livedemos/techstacks/screenshots/techstacks.png)](http://techstacks.io) - -TechStacks is a modern [AngularJS](https://angularjs.org/) CRUD App that lets you Browse and Add Technology Stacks of popular StartUps. After Signing in you can add your own TechStacks and favorite technologies to create a personalized custom 'feed' to view Websites and Apps built with your favorite programming languages and technologies. - -TechStacks is based on a [Bootstrap template](http://getbootstrap.com) with client-side features: - - - HTML5 Routing to enable pretty urls, also supports full page reloads and back button support - - Same Services supporting both human-readable Slugs or int primary keys - - Responsive design supporting iPad Landscape and Portrait modes - - Preloading and background data fetching to reduce flicker and maximize responsiveness - - [Disqus](https://disqus.com/) commenting system - - [Chosen](http://harvesthq.github.io/chosen/) for UX-friendly multi combo boxes - -and some of TechStacks back-end features include: - - - [Twitter and GitHub OAuth Providers](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization) - - Substitutable [OrmLite](https://github.com/ServiceStack/ServiceStack.OrmLite) RDBMS [PostgreSQL and Sqlite](https://github.com/ServiceStackApps/TechStacks/blob/875e78910e43d2230f0925b71d5990497216511e/src/TechStacks/TechStacks/AppHost.cs#L49-L56) back-ends - - [Auto Query](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query) for automatic services of RDBMS tables - - [RDBMS Sessions and In Memory Caching](https://github.com/ServiceStack/ServiceStack/wiki/Caching) - - [Smart Razor Views](http://razor.servicestack.net) - - [Fluent Validation](https://github.com/ServiceStack/ServiceStack/wiki/Validation) - -TechStacks is a good example of the experience you can get running a packaged ServiceStack/AngularJS App on modest hardware - [techstacks.io](http://techstacks.io) is currently running on a single **m1.small** AWS EC2 instance and **db.t1.micro** RDS PostgreSQL instance that hosts all [Live Demos](https://github.com/ServiceStackApps/LiveDemos). - - - -### [View the Source](https://github.com/ServiceStackApps/TechStacks) - -Checkout the [Source Code for TechStacks](https://github.com/ServiceStackApps/TechStacks) for the full details to see how it's built. The project also includes an [example client layout](https://github.com/ServiceStackApps/TechStacks/tree/master/src/TechStacks/TechStacks/js) for structuring larger AngularJS projects in an extensible layout files and folder structure: - -### HTML5 Routing and Full-page reloads - -One of the disadvantages of Single Page Apps is having to resort to hash-style `#!` url suffix hacks to prevent JavaScript apps from making full-page reloads. By utilizing [AngularJS's HTML5 mode](https://docs.angularjs.org/guide/$location#html5-mode) we can take advantage of modern browsers support for HTML5 History API to retain the optimal pretty urls (we'd have if this were a server generated website) whilst still retaining the responsiveness of JS Apps which are able to load just the minimum content required, i.e. instead of waiting for the full page rendering of Server generated pages and their resource dependencies to be loaded again. - -ServiceStack has great support for these modern-style SPA's which lets you specify a fallback handler for **HTML page requests** with un-matched routes to return the same `/default.cshtml` home page so AngularJS is able to handle the request and perform the same client-side routing it would've had the url been navigated from within the App - using the [AppHost configuration below](https://github.com/ServiceStackApps/TechStacks/blob/41efa5d8add1c4b0bdd449d6507878f2c8387bbc/src/TechStacks/TechStacks/AppHost.cs#L41): - -```csharp -base.CustomErrorHttpHandlers[HttpStatusCode.NotFound] = new RazorHandler("/default.cshtml"); -``` - -This lets you re-use pretty client-side routes like: - - - http://techstacks.io/tech/servicestack - -And allow deep-link support for full round-trip requests (i.e. outside of AngularJS) - where since `/tech/servicestack` doesn't match any custom Server routes, ServiceStack instead responds with the above `/default.cshtml` Razor View. At which point AngularJS takes over and navigates to the internal route mapping that matches `/tech/servicestack`. - -> To get the latest AngularJS and React.js App templates download the latest [ServiceStackVS VS.NET Extension](https://visualstudiogallery.msdn.microsoft.com/5bd40817-0986-444d-a77d-482e43a48da7) - -## ServerEvents now supports Multiple Channels per subscription - -To ensure each Client only ever needs 1 ServerEvents subscription, subscriptions now support subscribing to multiple channels. Multi Channel Support is fully implemented in all [JavaScript ServerEvents](https://github.com/ServiceStack/ServiceStack/wiki/JavaScript-Server-Events-Client) and [C#/.NET ServerEvents](https://github.com/ServiceStack/ServiceStack/wiki/C%23-Server-Events-Client) Clients as well as both [back-end InMemory](https://github.com/ServiceStack/ServiceStack/wiki/Server-Events) and [Redis ServerEvents](https://github.com/ServiceStack/ServiceStack/wiki/Redis-Server-Events) providers. - -The API remains similar to the previous Single Channel Routes where in addition to subscribing to a single channel: - - /event-stream?channel=Home - -Clients can also subscribe to multiple channels: - - /event-stream?channel=Home,Work,Play - -> If preferred, clients can also use the more readable **?channels=** plural variable name - -And the above example again using the [C#/.NET ServerEvents Client](https://github.com/ServiceStack/ServiceStack/wiki/C%23-Server-Events-Client): - -```csharp -var client = new ServerEventsClient(BaseUri, "Home"); - -var client = new ServerEventsClient(BaseUri, "Home", "Work", "Play"); -``` - -Multi-Channel subscriptions works conceptually similar to having multiple "single channel" subscriptions where multiple Join/Leave/Message events are fired for events occurring in each channel. For more details on this checkout the [multi-channel ServerEvents tests](https://github.com/ServiceStack/ServiceStack/blob/42d08dee1f4945f1a7be29ac234ce1250e04de9b/tests/ServiceStack.WebHost.Endpoints.Tests/ServerEventTests.cs#L781). - -### Chat Apps now support multiple Chat Rooms - -With this feature, we can now create Chat Apps that support multiple Chat Rooms using only a single ServerEvents subscription: - -[![React Multi-Channel Chat](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/livedemos/chat-react-multichannels.png)](http://react-chat.servicestack.net/?channels=home,work,play) - -> Multi-Channel React Chat preview - -Surprisingly it only took a small amount of code to add support for multiple chat rooms in all the different Chat Apps which now all support Multiple Chat rooms: - - - Upgrade [jQuery Chat Client/Server](https://github.com/ServiceStackApps/Chat/commit/f23bb912791425abcba1bc724cd86cb4ab8cac82) to support multiple Chat Rooms - - Upgrade [React Chat Client](https://github.com/ServiceStackApps/Chat-React/commit/8969ce9c291d88f63d84500b3bb281c3b1f451c7) to support multiple Chat Rooms - - Upgrade [React Chat Server](https://github.com/ServiceStackApps/Chat-React/commit/cae43b6923771b02c28726dcfa4927d8490275ee) to support multiple Chat Rooms - - Upgrade [ServiceStack.Gap Chat Client/Server](https://github.com/ServiceStack/ServiceStack.Gap/commit/6ee72d81fcf7cd73573b686400500d7516f312b9) to support multiple Chat Rooms - -Should you want to run the previous "Single Room" Chat Apps, they're available in the **single-channel** branches: - - - [jQuery Chat](https://github.com/ServiceStackApps/Chat/tree/single-channel) - - [React Chat](https://github.com/ServiceStackApps/Chat-React/tree/singe-channel) - -> Multi-Channel support is mostly backwards compatible where all Chat Apps can be run as-is when upgraded to use the latest ServiceStack v4.0.35+ - but it does require upgrading both v4.0.35 Client and Server libraries together. - -## Minor Changes and Fixes - -Rest of this release was focused on minor features, changes and fixes: - -### Framework Changes - - - Custom HTTP Handlers now execute Global Request Filters [709fb73](https://github.com/ServiceStack/ServiceStack/commit/709fb73c1450f13ba6449eed9101e588775c3d9d) - - Static Default html pages (e.g. default.html) are served directly from root instead of being redirected to static file - Behavior is now in-line with `default.cshtml` in Razor Support [5b5d7fa](https://github.com/ServiceStack/ServiceStack/commit/5b5d7fa66bbd3d4237ede8a5bc9054354dfa7b2c) - - StaticFileHandler HTTP Handler is now re-usable `VirtualNode` for returning Static Files [8571ecd](https://github.com/ServiceStack/ServiceStack/commit/8571ecd6f7e244ee152e959e6759f6a1ee82fe4d) - - Original C#/.NET Exception is now accessible as `InnerException` in wrapped `HttpError` [42d5976](https://github.com/ServiceStack/ServiceStack/commit/42d59767fd8ea9414470cbedbac8b2bae308e9e8) - - Added overridable `IDbConnectionFactory` and `IRedisClientsManager` properties in `Service` base class [c18215b](https://github.com/ServiceStack/ServiceStack/commit/c18215b58a7a71f9537f8614ce42acf91beaee3b) - - Add `.woff2` to `Config.AllowFileExtensions` white-list [aa1e93a](https://github.com/ServiceStack/ServiceStack/commit/aa1e93adcea85216aac807cad4bdbe8f71ff2f52) - - Changed all methods in MVC ServiceStackController base class to protected to prevent MVC Controller Factories from assuming their MVC Actions [eff11c](https://github.com/ServiceStack/ServiceStack/commit/eff11c8992df78b18b07cc0137d27ea1e2d7eb47) - - Added Remove Plugin and Debug Link API's [9002d48](https://github.com/ServiceStack/ServiceStack/commit/9002d4827c43dd91e02b298a3b5a56e6e376963a) - - Added Retry logic on Concurrent Update collisions in `OrmLiteCacheClient` [aa6d62c](https://github.com/ServiceStack/ServiceStack/commit/aa6d62ca23ebef30eb3727f3894d214d320843b0) - - Added Runtime Attribute Filter example [355365b](https://github.com/ServiceStack/ServiceStack/commit/355365bbfc45e1309fa2d91fcbc1856e874a9676) - - Add support for implicit querying of enums in AutoQuery [b5d2477](https://github.com/ServiceStack/ServiceStack/commit/b5d2477c581152168f43017a355cbcae9dccbefb) - - Handle Retry Exceptions during on `ServerEventsClient` reconnections [7833cd8](https://github.com/ServiceStack/ServiceStack/commit/7833cd8c25e0eb4dc10cd0e0033d2d156393625a) - - Added `AppHost.GetCurrentRequest()` to allow different AppHosts to return the current HttpContext [7cbadda](https://github.com/ServiceStack/ServiceStack/commit/7cbadda18f5666a4c24a0e49fa1af740afd0fec4) - - Fixed NRE during max pool-size overflow handling in `RedisManagerPool` [c94eedd](https://github.com/ServiceStack/ServiceStack.Redis/commit/c94eedd2e3467a418b290209fdf52b01c0516855) - -### Auth Changes - - - `IAuthRepository.CreateOrMergeAuthSession()` now returns the merged `IUserAuthDetails` [f2383ff](https://github.com/ServiceStack/ServiceStack/commit/f2383fffd390d58d2da55dd47eb2b68110066c51) - - `OnRegistered()` callback now fired for successful first-time OAuth requests (in addition to `/register` Service) - - Added `AppHost.OnSaveSession()` to allow custom logic whenever a User Session is saved to the Cache [002a4eb](https://github.com/ServiceStack/ServiceStack/commit/002a4ebf9ea75e922554148ffa2581be05e2c359) - - New `Dictionary Meta` added to allow custom Auth params on `Authenticate` during Authentication [4d339c1](https://github.com/ServiceStack/ServiceStack/commit/4d339c190bf086e2639c3373792b9f4547e0851b) - - New `Config.AddRedirectParamsToQueryString` option added to change redirect params to be added to QueryString instead of hash `#` params [fea60fa](https://github.com/ServiceStack/ServiceStack/commit/fea60fa37000ff7603dc15a31b53150d72bae131) - - `NHibernateUserAuthRepository.GetCurrentSession()` is now overridable to customize NH Session Initialization [7249c9a](https://github.com/ServiceStack/ServiceStack/commit/7249c9af8191ec1bdf7b95db0bba607fe5015dc8) - -### MQ Changes - - - Added `QueueNames.IsTempQueue()` API to determine if a MQ name is a Temp Queue even when custom naming conventions are used [c3ee3d0](https://github.com/ServiceStack/ServiceStack/commit/c3ee3d037ec5676a05e0852ea90d0d75f0d25787) - - Pass `IMessageHandler` in custom MQ Error Handlers so Nak's can be sent from same client that received the message [3be2e3f](https://github.com/ServiceStack/ServiceStack/commit/3be2e3f9d3e9340c4993f8eabc8805c2b1325b18) - -### OrmLite Changes - - - `SqlProc` no longer disposes `IDbCommand` before returning it [9e71480](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/9e714808079aa08f8b7b90766ba308279532c08f) - - Fixed `SingleAsync` API to call correct internal API [b23410](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/b234105065b38df5eb18449e2fb8d5173458c269) - - Added support new Multi-Column OrderBy Descending API's [33292ef](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/33292ef67ec09cbe005afc2cba1f7c417da4434c) - - Add support for `ConvertToList` to handle Scalars as well [4290229](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/4290229cd50ae6475a3edffc198bbdc87cc54539) - -### ServiceStack.Text Changes - - - Add support for Dates in `yyyyMMdd` format [a752f2a](https://github.com/ServiceStack/ServiceStack.Text/commit/a752f2af70f165398899e92b2775daa0d870ff57) - - Add New `DateTimeSerializer.OnParseErrorFn` fallback can be used to handle unknown Date Formats - - Added convenient `Task.Success()` and `Task.Error()` extension methods for non-generic `Task` [b17866a](https://github.com/ServiceStack/ServiceStack.Text/commit/b17866a3b46e3e6c699c20b7f33ef3738fdffd46) - - PCL version of `GetPublicProperties()` now only return instance (non-static) properties [dbe1f83](https://github.com/ServiceStack/ServiceStack.Text/commit/dbe1f8349600ba47e2c4aaaa49c4759198a6ac1f) - -### Dependencies Updated - - - FacebookAuthProvider upgraded to use v2.0 of Facebook's API - - Swagger UI updated latest version - - Memcached updated to 0.57 - - FluentNHibernate to 2.0.1.0 - -# v4.0.34 Release Notes - -## [Add TypeScript Reference!](https://github.com/ServiceStack/ServiceStack/wiki/TypeScript-Add-ServiceStack-Reference) - -The next typed client supported in [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) is [TypeScript](http://www.typescriptlang.org/)! - -![Add TypeScript Reference](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackvs/add-typescript-reference.png) - -[TypeScript](http://www.typescriptlang.org/) is a superset of JavaScript that enhances it with an optional type system for annotating JavaScript source code - bringing many of the code-analysis, insights and tooling benefits that we get to enjoy developing in a typed language like C#/VS.NET. We're excited to also be able to bring these benefits to TypeScript Client Apps consuming ServiceStack Services! - -### TypeScript DTO Interface Declarations - -The TypeScript Native Types feature takes a non-invasive approach in that they're made available in the form of a `.d.ts` [TypeScript declaration file](http://www.typescriptlang.org/Handbook#writing-dts-files). TypeScript declarations are pure static type annotations, i.e. they don't generate any code or otherwise have any effect on runtime behavior. This makes them useful as a non-invasive drop-in into existing JavaScript code where it's used to provide type annotations and intelli-sense on existing JavaScript objects, letting you continue using your existing data types and Ajax libraries. - -### TypeScript Reference Example - -Lets walk through a simple example to see how we can use ServiceStack's TypeScript DTO annotations in our JavaScript clients. Firstly we'll need to add a **TypeScript Reference** to the remote ServiceStack Service by **right-clicking** on your project and clicking on `Add > TypeScript Reference...` (as seen in the above screenshot). - -This will import the remote Services dtos into your local project which ends up looking similar to: - -```typescript -/* Options: -Date: 2014-12-08 17:24:02 -Version: 1 -BaseUrl: http://api.example.com - -GlobalNamespace: dtos -//MakePropertiesOptional: True -//AddServiceStackTypes: True -//AddResponseStatus: False -*/ - -declare module dtos -{ - // @Route("/hello") - // @Route("/hello/{Name}") - interface Hello extends IReturn - { - // @Required() - name:string; - title?:string; - } - - interface HelloResponse - { - result?:string; - } - - interface IReturn {} - ... -} -``` - -Initially the single TypeScript module that contains all the DTO definitions will default to the C#/.NET `ServiceModel` namespace, but this can be made more readable in client apps by uncommenting in the header properties: - -`GlobalNamespace: dtos` - -Looking at the types we'll notice the DTO's are just interface type definitions with any .NET attributes added in comments using AtScript's proposed [meta-data annotations format](https://docs.google.com/document/d/11YUzC-1d0V1-Q3V0fQ7KSit97HnZoKVygDxpWzEYW0U/mobilebasic?viewopt=127). This lets you view helpful documentation about your DTO's like the different custom routes available for each Request DTO. - -By default DTO properties are optional but can be made a required field by annotating the .NET property with the `[Required]` attribute or by uncommenting `MakePropertiesOptional: False` in the header comments which instead defaults all properties as required. - -Property names always reflect to match the remote servers JSON Serialization configuration, i.e. will use **camelCase** properties when the `AppHost` is configured with: - -```csharp -JsConfig.EmitCamelCaseNames = true; -``` - -### Referencing TypeScript DTO's - - -Once added to your project, use VS.NET's JavaScript Doc Comments to reference the TypeScript definitions in your `.ts` scripts. The example below shows how to use the above TypeScript definitions to create a typed Request/Response utilizing jQuery's Ajax API to fire off a new Ajax request on every keystroke: - -```html -/// -... - - -
      - - -``` - -Here we're just using a simple inline `createUrl()` function to show how we're creating the url for the **GET** HTTP Request by appending all Request DTO properties to the QueryString, resulting in a HTTP GET Request that looks like: - - /hello?title=Dr&name=World - -There's also a new `$.ss.createUrl()` API in [ss-utils.js](https://github.com/ServiceStack/ServiceStack/wiki/ss-utils.js-JavaScript-Client-Library) which also handles .NET Route definitions where it will populate any variables in the `/path/{info}` instead of adding them to the `?QueryString`, e.g: - -```typescript -$(document).bindHandlers({ - sayHello: function () { - var request: dtos.Hello = {}; - request.title = "Dr"; - request.name = this.value; - - $.getJSON($.ss.createUrl("/hello/{Name}", request), request, - function (r: dtos.HelloResponse) { - $("#result").html(r.result); - }); - } -}); -``` - -Which results in a HTTP GET request with the expected Url: - - /hello/World?title=Dr - -### [ss-utils.d.ts](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/js/ss-utils.d.ts) - -To coincide with the new TypeScript Reference support, we've also included a TypeScript declaration file for [ss-utils.js](https://github.com/ServiceStack/ServiceStack/wiki/ss-utils.js-JavaScript-Client-Library). that's also available as an embedded resource in `ServiceStack.dll` at [/js/ss-utils.d.ts](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/js/ss-utils.d.ts). - -### [Upgrade ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) - -To take advantage of **Add TypeScript Reference** feature, [Upgrade or Install ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) VS.NET Extension: - -[![VS.NET Gallery Download](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackvs/vsgallery-download.png)](http://visualstudiogallery.msdn.microsoft.com/5bd40817-0986-444d-a77d-482e43a48da7) - -> If you already have ServiceStackVS installed, uninstall it first from **Tools -> Extensions and Updates...** then in the Extensions dialog find **ServiceStackVS -> Uninstall**. - -## Auto Batched Requests - -One of the best ways to improve performance, efficiency and reduce latency is to minimize the number of network requests required, which is one of the reasons we've always encouraged [Coarse-grained API designs](https://github.com/ServiceStack/ServiceStack/wiki/Why-Servicestack#servicestack-encourages-development-of-message-style-re-usable-and-batch-full-web-services) - which also lend themselves to better encapsulation and re-use. - -Another common use-case that can be improved are clients making multiple requests to the same API, but due to the lack of a better alternative batched API or control over the server implementation, will default to making multiple N+1 web service requests - thanks to ServiceStack's [message-based design](https://github.com/ServiceStack/ServiceStack/wiki/Advantages-of-message-based-web-services), that better alternative now exists :) - -### All Services now support Batching! - -With the introduction of **Auto Batched Requests** in this release, all ServiceStack Services now include implicit support for batching, automatically, without any additional effort - where multiple requests of the same type can be sent together in a single HTTP Request. - -This is now enabled in all [.NET Service Clients](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client) via the new `SendAll()` and `SendAllOneWay()` API's, e.g: - -```csharp -var client = new JsonServiceClient(BaseUrl); -var requests = new[] -{ - new Request { Id = 1, Name = "Foo" }, - new Request { Id = 2, Name = "Bar" }, - new Request { Id = 3, Name = "Baz" }, -}; - -List responses = client.SendAll(requests); -``` - -The API works as you would expect where multiple requests can be sent together and the Service Client will return a list of all responses in the same order as the requests were sent. - -And on the back-end, your Services are none the wiser, remaining focused on handling a single Request DTO. In the case below the Service does some work then stores the response in Redis before returning it: - -```csharp -public class MyServices : Service -{ - public object Any(Request request) - { - var response = DoWork(request); - Redis.Store(response); - return response; - } -} -``` - -### Request Execution Flow - -From the Service's point of view nothing changes. Request DTO's still get executed one at a time, through all existing filters just as if they we're sent on their own. They're just delivered together within a single HTTP Request, in this case POST'ed as JSON to the `/json/reply/Request[]` [pre-defined route](https://github.com/ServiceStack/ServiceStack/wiki/Routing#pre-defined-routes): - -![Auto Batched Requests](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/auto-batched-requests.png) - -### Custom Batched Requests Implementations - -If a client was previously calling the same API 100 times, the existing overhead of 100 HTTP Requests would be reduced to just **1 HTTP Request** when batched. Although the above Service would still be calling Redis 100 times to store each Response. - -If later this API has become really hot and you want to improve it even further, you can later add a custom implementation that accepts a `Request[]` and it will only get called once, with access to all the Request DTO's together. In this case we can use a custom implementation and take advantage of Redis's own batched API's and reduce this further to 1 Redis operation: - -```csharp -public class MyServices : Service -{ - public object Any(Request request) - { - var response = DoWork(request); - Redis.Store(response); - return response; - } - - public object Any(Request[] requests) - { - var responses = requests.Map(DoWork); - Redis.StoreAll(responses); - return responses; - } -} -``` - -So with this custom implementation we've gone from **100 HTTP Requests + 100 Redis Operations** to **1 HTTP Request + 1 Redis Operation**. - -Another scenario where you may consider using a **Custom Batched Implementation** is if you wanted to execute all requests within a single RDBMS transaction, which with [OrmLite](https://github.com/ServiceStack/ServiceStack.OrmLite) would look something like: - -```csharp -public class MyServices : Service -{ - public object Any(Request request) - { - var response = DoWork(request); - Db.Insert(request); - return response; - } - - public object Any(Request[] requests) - { - using (var trans = Db.OpenTransaction()) - { - var responses = requests.Map(x => Any(x)); - - trans.Commit(); - return responses; - } - } -} -``` - -Just like with normal Batched Requests, Custom Batched implementations are still executed one at a time through all request/response filters, taking advantage of any existing logic/validation. If you instead only wanted multiple Requests to be treated as a single Request through the entire pipeline you can create a new Request DTO that inherits from `List` which then gets treated as a normal Request DTO e, g: - -```csharp -public class Requests : List {} - -public class MyServices : Service -{ - ... - public object Any(Requests requests) - { - var responses = requests.Map(DoWork); - Redis.StoreAll(responses); - return responses; - } -} -``` - -More examples of Auto Batched Requests and its behavior can be found in the [ReplyAllTests suite](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/ReplyAllTests.cs). - -## New [ReactJS App Template](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project)! - -The new ServiceStackVS **ReactJS App** template shares the same approach for developing modern Single Page Apps in VS.NET as the existing [AngularJS App](https://github.com/ServiceStack/ServiceStackVS/blob/master/angular-spa.md) template by leveraging the **node.js** ecosystem for managing all aspects of Client App development utilizing the best-in-class libraries: - - - [npm](https://www.npmjs.org/) to manage node.js dependencies (bower, grunt, gulp) - - [Bower](http://bower.io/) for managing client dependencies (angular, jquery, bootstrap, etc) - - [Grunt](http://gruntjs.com/) as the primary task runner for server, client packaging and deployments - - [Gulp](http://gulpjs.com/) used by Grunt to do the heavy-lifting bundling and minification - -The templates conveniently pre-configures the above libraries into a working out-of-the-box solution, including high-level grunt tasks to take care of the full-dev-cycle of **building**, **packaging** and **deploying** your app: - - - **[01-run-tests](https://github.com/ServiceStack/ServiceStackVS/blob/angular-spa-template/angular-spa.md#01-run-tests)** - Runs Karma JavaScript Unit Tests - - **[02-package-server](https://github.com/ServiceStack/ServiceStackVS/blob/angular-spa-template/angular-spa.md#02-package-server)** - Uses msbuild to build the application and copies server artefacts to `/wwwroot` - - **[03-package-client](https://github.com/ServiceStack/ServiceStackVS/blob/angular-spa-template/angular-spa.md#03-package-client)** - Optimizes and packages the client artefacts for deployment in `/wwwroot` - - **[04-deploy-app](https://github.com/ServiceStack/ServiceStackVS/blob/angular-spa-template/angular-spa.md#04-deploy-app)** - Uses MS WebDeploy and `/wwwroot_buld/publish/config.json` to deploy app to specified server - -## [React Chat](https://github.com/ServiceStackApps/Chat-React) - -To help to get started with the **ReactJS App** VS.NET template and learn React, we've rewritten [ServiceStack Chat](https://github.com/ServiceStackApps/Chat) ServerEvents demo using [React](http://facebook.github.io/react/): - -[![React Chat](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/livedemos/chat-react.png)](http://react-chat.servicestack.net) - -> Live Demo: http://react-chat.servicestack.net - -### [Intro to developing apps with React and Reflux](https://github.com/ServiceStackApps/Chat-React) - -The [React Chat GitHub Repository](https://github.com/ServiceStackApps/Chat-React) also includes a guide of Facebook's [React](http://facebook.github.io/react/) library and [Flux pattern](http://facebook.github.io/react/docs/flux-overview.html) and walks through how to use them to put together a React-based App - making use of the scripts in the ServiceStackVS template along the way to optimize, package and deploy React Chat. - -## [Redis](https://github.com/ServiceStack/ServiceStack.Redis) - -### Heartbeats enabled on [RedisPubSubServer](https://github.com/ServiceStack/ServiceStack.Redis#new-managed-pubsub-server) - -`RedisPubServer` now maintains periodic heartbeats with Redis and will auto-reconnect when it detects a connection has dropped. Heartbeats can be disabled by setting `HeartbeatInterval=null`. - -The new heartbeat support should also improve resiliency in components powered by RedisPubServer, including `RedisMqServer` and `RedisServerEvents`. - -### Updated [RedisManagerPool](https://github.com/ServiceStack/ServiceStack.Redis#redismanagerpool) Pooling Behavior - -`RedisManagerPool` is our new streamlined version of `PooledRedisClientManager` with a simplified API courtesy of the configuration moving into the [Redis Connection String](https://github.com/ServiceStack/ServiceStack.Redis#redis-connection-strings). As an new and alternative Pooled Client Manager we've taken the opportunity to tweak the pooling behavior so that any connections required after the maximum Pool size has been reached will be created and disposed outside of the Pool. - -This is different to `PooledRedisClientManager` which imposes a maximum connection limit and when its maximum pool size has been reached will instead block on any new connection requests until the next RedisClient is released back into the pool. If no client became available within `PoolTimeout`, a Pool Timeout exception will be thrown. - -By not being restricted to a maximum pool size, the new pooling behavior in `RedisManagerPool` lets it maintain a smaller connection pool size at the cost of potentially having a higher opened/closed connection count. - -### Redis HTTP [Request Logger](https://github.com/ServiceStack/ServiceStack/wiki/Request-logger) - -A new `RedisRequestLogger` is available in the **ServiceStack.Server** NuGet package to provide an alternative back-end for the [Request Logs Feature](https://github.com/ServiceStack/ServiceStack/wiki/Request-logger) to log HTTP Requests with Redis so they remain available after AppDomain restarts. - -`RequestLogsFeature` can be configured to use the new `RedisRequestLogger` with: - -```csharp -Plugins.Add(new RequestLogsFeature { - RequestLogger = new RedisRequestLogger( - container.Resolve(), capacity:1000) -}); -``` - -## [OrmLite](https://github.com/ServiceStack/ServiceStack.OrmLite) - -### [Multiple Self References](https://github.com/ServiceStack/ServiceStack.OrmLite#multiple-self-references) - -Supports for multiple Self References of the same type has been added where if there are multiple fields containing `[References]` to the same type, OrmLite will fallback to matching properties based on `{PropertyName}Id` property naming convention, e.g: - -```csharp -public class Customer -{ - [AutoIncrement] - public int Id { get; set; } - public string Name { get; set; } - - [References(typeof(CustomerAddress))] - public int? HomeAddressId { get; set; } - - [References(typeof(CustomerAddress))] - public int? WorkAddressId { get; set; } - - [Reference] - public CustomerAddress HomeAddress { get; set; } - - [Reference] - public CustomerAddress WorkAddress { get; set; } -} -``` - -> Self References now also support mixing and matching of property names and DB Alias naming conventions - -### Support for CROSS JOIN's - -New `CrossJoin` API's were added to `SqlExpression` that works similarly to other JOIN's, e.g: - -```csharp -var q = db.From() - .CrossJoin() - .OrderBy(x => x.Id); - -var results = db.Select(q); -``` - -### OpenDbConnectionString() - -A new `OpenDbConnectionString` API was added to open adhoc connection strings using the same `OrmLiteConnectionFactory` and `DialectProvider` instance. This makes creating Multi Tenant DB Factories a little easier, e.g: - -```csharp -public class MultiTenantDbFactory : IDbConnectionFactory -{ - private readonly IDbConnectionFactory dbFactory; - - public MultiTenantDbFactory(IDbConnectionFactory dbFactory) - { - this.dbFactory = dbFactory; - } - - public IDbConnection OpenDbConnection() - { - var tenantId = RequestContext.Instance.Items["TenantId"] as string; - return tenantId != null - ? dbFactory.OpenDbConnectionString(GetConnectionString(tenantId)) - : dbFactory.OpenDbConnection(); - } - - public IDbConnection CreateDbConnection() - { - return dbFactory.CreateDbConnection(); - } -} -``` - -A complete Multi Tenant OrmLite example can be found in [MultiTennantAppHostTests.cs](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/MultiTennantAppHostTests.cs) - -### Oracle Provider returns to form - -Thanks to [@TroyDycavinu-AI](https://github.com/TroyDycavinu-AI) efforts, the [Oracle OrmLite Provider](http://nuget.org/packages/ServiceStack.OrmLite.Oracle) test suite is back in the green - -## [Razor](http://razor.servicestack.net/) - -### RenderToAction() - -The new `RenderToAction()` method lets you execute a Service in a Razor View and include it's rendered partial view using just a relative Url: - -```csharp -@Html.RenderAction("/products/1") -``` -It also takes an optional view name if you want a different view than the default: - -```csharp -@Html.RenderAction("/products/1", "CustomProductView") -``` - -An alternative approach to include another Services View is with `Html.Partial()` specifying which view and model you want to render: - -```csharp -@Html.Partial("GetProduct", - base.ExecuteService(s => s.Any(new GetProduct { Id = 1 }))) -``` - -Where `ExecuteService` is a shorthand wrapper around using `ResolveService` in a `using` block: - -```csharp -@{ - Response response = null; - using (var service = base.ResolveService()) - { - response = service.Any(new GetProduct { Id = 1 }); - } -} -@Html.Partial("GetProduct", response) -``` - -### Relative Content Partials - -In addition to Shared Razor Views in `/Views` you can now include Partials relative to the containing Razor Content Page: - -```csharp -@Html.Partial("LocalPartial", model) -@Html.Partial("SubDir/NestedPartial", model) -``` - -## [AutoQuery](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query) - -### Unlimited Custom Table Joins - -AutoQuery now supports joining any number of tables together by annotating the Request DTO with multiple `IJoin<>` interface markers e.g: - -```csharp -public class MyQuery : QueryBase, - IJoin, - IJoin, - IJoin, - //... -{ -} -``` - -## [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) - - - DTO Interfaces are now included in all C#, F#, VB.NET and TypeScript Native Type providers. - - F# developers can specify `GlobalNamespace` in their generated `.dtos.fs` - - -## [Authentication](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization) - -The `RavenDbUserAuthRepository` now supports specialization so it can be used to persist extended custom `UserAuth` and `UserAuthDetails` types, e.g: - -```csharp -public class CustomRavenDbAuthRepository - : RavenDbUserAuthRepository -{ - //... -} -``` - -### [Sessions](https://github.com/ServiceStack/ServiceStack/wiki/Sessions) - -If needed, Sessions can be injected or modified in ASP.NET hosts with: - -```csharp -HttpContext.Current.Items[ServiceExtensions.RequestItemsSessionKey] = - new AuthUserSession { ... }; -``` - -New Session API's added: - - - `IRequest.RemoveSession(sessionId)` - Remove the Session - - `IRequest.GetSessionTimeToLive()` - Time remaining before current Session expires - - `ICacheClient.GetSessionTimeToLive(id)` - Time remaining before specified Session expires - - - -## Other Features - - - SOAP no longer emits the UTF8 BOM by default, overridable in `Config.XmlWriterSettings` - - CORS Support added in Server Events raw HTTP Handlers - - C# Server Events Client auto restarts when Heartbeat has elapsed the Servers `IdleTimeoutMs` - - Added [workaround for supporting Mono with Redis SSL](https://github.com/mono/mono/pull/1399) - - -## Breaking Changes - -### PCL NuGet Packages Merged - -The **ServiceStack.Client.Pcl** and **ServiceStack.Stripe.Pcl** NuGet packages have been merged into the main **ServiceStack.Client** and **ServiceStack.Stripe** NuGet packages and as a result will no longer receive future updates. If you're using them please update your NuGet references. - -### Refactored Redis Client API's - -`IRedisClient.GetTimeToLive()` now returns a `TimeSpan?` will will return: - - `null` if no key exists - - `TimeSpan.MaxValue` if there is no expiry set on the key - - or a `TimeSpan` value with the time remaining before the key is set to expire - - `KeepAliveRetryAfterMs` has been renamed to `WaitBeforeNextRestart` in `RedisPubSubServer` and the classes that use it: `RedisServerEvents` and `RedisMqServer`. - -# v4.0.33 Release Notes - -## OrmLite now supports Async! - -Another [major feature request](http://servicestack.uservoice.com/forums/176786-feature-requests/suggestions/6217167-provider-async-support-for-ormlite) -is ticked off in this release with the new **Async support available in OrmLite!** - -A quick overview of the new Async API's added can be seen in the class diagram below: - -![OrmLite Async APIs](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/ormlite/OrmLiteApiAsync.png) - -Basically most of OrmLite public API's now have async equivalents of the same name and an additional conventional `*Async` suffix. -The Async API's also take an optional `CancellationToken` making converting sync code trivial, where you just need to -add the `Async` suffix and **await** keyword, as can be seen in the -[Customer Orders UseCase upgrade to Async diff](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/c1ce6f0eac99133fc232b263c26c42379d4c5f48) -, e.g: - -Sync: - -```csharp -db.Insert(new Employee { Id = 1, Name = "Employee 1" }); -db.Save(product1, product2); -var customer = db.Single(new { customer.Email }); -``` - -Async: - -```csharp -await db.InsertAsync(new Employee { Id = 1, Name = "Employee 1" }); -await db.SaveAsync(product1, product2); -var customer = await db.SingleAsync(new { customer.Email }); -``` - -> Effectively the only Data Access API's that doesn't have async equivalents are `*Lazy` APIs yielding a lazy -> sequence (incompatible with async) as well as **Schema** DDL API's which are typically not used at runtime. - -For a quick preview of many of the new Async API's in action, checkout -[ApiSqlServerTestsAsync.cs](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLiteV45.Tests/ApiSqlServerTestsAsync.cs). - -### Async RDBMS Providers - -Currently only a limited number of RDBMS providers offer async API's which are only available in their **.NET 4.5** builds, which at this time are only: - - - [SQL Server .NET 4.5+](https://www.nuget.org/packages/ServiceStack.OrmLite.SqlServer) - - [MySQL .NET 4.5+](https://www.nuget.org/packages/ServiceStack.OrmLite.MySql) - -We've also added a -[.NET 4.5 build for Sqlite](https://www.nuget.org/packages/ServiceStack.OrmLite.Sqlite.Mono) -as it's a common use-case to swapout to use Sqlite's in-memory provider for faster tests. -But as Sqlite doesn't provide async API's under-the-hood we fallback to *pseudo async* support where we just wrap its synchronous responses in `Task` results. - -Regardless of whether the RDBMS provider offers Async API's, you still can use the same OrmLite async API's with all providers, -where the same Async OrmLite API's can also be used in DB Providers that doesn't natively support Async (i.e. Sqlite): - - - [ApiSqlServerTestsAsync.cs](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLiteV45.Tests/ApiSqlServerTestsAsync.cs) - - [ApiMySqlTestsAsync.cs](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLiteV45.Tests/ApiMySqlTestsAsync.cs) - - [ApiSqliteTestsAsync.cs](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLiteV45.Tests/ApiSqliteTestsAsync.cs) - -Only when these Async API's are run on an RDBMS provider with native async support (i.e. .NET 4.5 SqlServer or MySql) will you benefit from true -non-blocking Async I/O, otherwise it fallsback to *pseudo async* support, i.e. synchronous I/O datasets wrapped in `Task` Results. - -### Multiple Self References - -OrmLite's [POCO Reference conventions](https://github.com/ServiceStack/ServiceStack.OrmLite#reference-conventions) -has been expanded to include support for multiple Self References. - -The example below shows a customer with multiple `CustomerAddress` references which are able to be matched with -the `{PropertyReference}Id` naming convention, e.g: - -```csharp -public class Customer -{ - [AutoIncrement] - public int Id { get; set; } - public string Name { get; set; } - - [References(typeof(CustomerAddress))] - public int? HomeAddressId { get; set; } - - [References(typeof(CustomerAddress))] - public int? WorkAddressId { get; set; } - - [Reference] - public CustomerAddress HomeAddress { get; set; } - - [Reference] - public CustomerAddress WorkAddress { get; set; } -} -``` - -Once defined, it can be saved and loaded via OrmLite's normal Reference and Select API's, e.g: - -```csharp -var customer = new Customer -{ - Name = "Z Customer", - HomeAddress = new CustomerAddress { - Address = "1 Home Street", - Country = "US" - }, - WorkAddress = new CustomerAddress { - Address = "2 Work Road", - Country = "UK" - }, -}; - -db.Save(customer, references:true); - -var c = db.LoadSelect(q => q.Name == "Z Customer"); -c.WorkAddress.Address.Print(); // 2 Work Road - -var ukAddress = db.Single(q => q.Country == "UK"); -ukAddress.Address.Print(); // 2 Work Road -``` - -## [ServiceStack.Redis SSL Support](https://github.com/ServiceStack/ServiceStack/wiki/Secure-SSL-Redis-connections-to-Azure-Redis) - -The [most requested feature for ServiceStack.Redis](http://servicestack.uservoice.com/forums/176786-feature-requests/suggestions/6093693-support-ssl-connection-to-redis-instances-hosted-a) -has also been realized in this release with **ServiceStack.Redis** now supporting **SSL connections** making it suitable for accessing -remote Redis server instances over a **secure SSL connection**. - -![Azure Redis Cache](https://github.com/ServiceStack/Assets/raw/master/img/wikis/redis/azure-redis-instance.png) - -### Redis Use Cases - -Redis is normally used as a back-end datastore whose access is typically limited to Internal networks or authorized networks protected via firewalls. -The new SSL Support in the Redis Client also enables secure access to a redis-server instance over the Internet and public networks as well, -a scenario that's been recently popularized by Cloud hosting environments like Azure Redis Cache. - -### [Connecting to Azure Redis](https://github.com/ServiceStack/ServiceStack/wiki/Secure-SSL-Redis-connections-to-Azure-Redis) - -As connecting to [Azure Redis Cache](http://azure.microsoft.com/en-us/services/cache/) via SSL was the primary use-case for this feature, -we've added a new -[Getting connected to Azure Redis via SSL](https://github.com/ServiceStack/ServiceStack/wiki/Secure-SSL-Redis-connections-to-Azure-Redis) -to help you get started. - -### Redis Connection Strings - -Redis Connection strings have been expanded to support the more versatile URI format which is now able to capture most of Redis Client settings in a -single connection string (akin to DB Connection strings). - -Redis Connection Strings supports multiple URI-like formats, from a simple **hostname** or **IP Address and port** pair to a fully-qualified **URL** -with multiple options specified on the QueryString. - -Some examples of supported formats: - - localhost - 127.0.0.1:6379 - redis://localhost:6379 - password@localhost:6379 - clientid:password@localhost:6379 - redis://clientid:password@localhost:6380?ssl=true&db=1 - -> More examples can be seen in -[ConfigTests.cs](https://github.com/ServiceStack/ServiceStack.Redis/blob/master/tests/ServiceStack.Redis.Tests/ConfigTests.cs) - -Any additional configuration can be specified as QueryString parameters. The full list of options that can be specified include: - -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      SslboolIf this is an SSL connection
      DbintThe Redis DB this connection should be set to
      ClientstringA text alias to specify for this connection for analytic purposes
      PasswordstringUrlEncoded version of the Password for this connection
      ConnectTimeoutintTimeout in ms for making a TCP Socket connection
      SendTimeoutintTimeout in ms for making a synchronous TCP Socket Send
      ReceiveTimeoutintTimeout in ms for waiting for a synchronous TCP Socket Receive
      IdleTimeOutSecsintTimeout in Seconds for an Idle connection to be considered active
      NamespacePrefixstringUse a custom prefix for ServiceStack.Redis internal index colletions
      - -### New `RedisManagerPool` Client Manager - -With the introduction of Redis URI Connection Strings we've been able to simplify and streamline the existing `PooledRedisClientManager` -implementation that's been extracted out into clients manager called `RedisManagerPool`. -In addition to removing all above options on the Client Manager itself, we've also removed readonly connection strings so the configuration is -much simpler and more aligned with the common use-case. - -In most cases, `PooledRedisClientManager` is substitutable with `RedisManagerPool` e.g: - -```csharp -container.Register(c => - new RedisManagerPool(redisConnectionString)); -``` - -### New Generic API's for calling Custom Redis commands - -Most of the time when waiting to use a new [Redis Command](http://redis.io/commands) you'll need to wait for an updated version of -**ServiceStack.Redis** to add support for the new commands likewise there are times when the Redis Client doesn't offer every permutation -that redis-server supports. - -With the new `Custom` and `RawCommand` API's on `IRedisClient` and `IRedisNativeClient` you can now use the RedisClient to send your own -custom commands that can call adhoc Redis commands: - -```csharp -public interface IRedisClient -{ - ... - RedisText Custom(params object[] cmdWithArgs); -} - -public interface IRedisNativeClient -{ - ... - RedisData RawCommand(params object[] cmdWithArgs); - RedisData RawCommand(params byte[][] cmdWithBinaryArgs); -} -``` - -These API's return Custom Results in the generic data structures below: - -```csharp -public class RedisText -{ - public string Text { get; set; } - public List Children { get; set; } -} - -public class RedisData -{ - public byte[] Data { get; set; } - public List Children { get; set; } -} -``` - -These Custom API's take a flexible `object[]` arguments which accepts any serializable value e.g. -`byte[]`, `string`, `int` as well as any user-defined Complex Types which are transparently serialized -as JSON and send across the wire as UTF-8 bytes. - -```csharp -var ret = Redis.Custom("SET", "foo", 1); // ret.Text = "OK" - -byte[] cmdSet = Commands.Set; -ret = Redis.Custom(cmdSet, "bar", "b"); // ret.Text = "OK" - -ret = Redis.Custom("GET", "foo"); // ret.Text = "1" -``` - -There are also -[convenient extension methods](https://github.com/ServiceStack/ServiceStack.Redis/blob/master/src/ServiceStack.Redis/RedisDataExtensions.cs) -on `RedisData` and `RedisText` that make it easy to access structured data, e.g: - -```csharp -var ret = Redis.Custom(Commands.Keys, "*"); -var keys = ret.GetResults(); // keys = ["foo", "bar"] - -ret = Redis.Custom(Commands.MGet, "foo", "bar"); -var values = ret.GetResults(); // values = ["1", "b"] - -Enum.GetNames(typeof(DayOfWeek)).ToList() - .ForEach(x => Redis.Custom(Commands.RPush, "DaysOfWeek", x)); -ret = Redis.Custom(Commands.LRange, "DaysOfWeek", 1, -2); -var weekDays = ret.GetResults(); - -weekDays.PrintDump(); // ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] -``` - -and some more examples using Complex Types with the Custom API's: - -```csharp -var ret = Redis.Custom(Commands.Set, "foo", new Poco { Name = "Bar" }); // ret.Text = "OK" - -ret = Redis.Custom(Commands.Get, "foo"); // ret.Text = {"Name":"Bar"} -Poco dto = ret.GetResult(); - -dto.Name.Print(); // Bar -``` - -### New Config, Role and Client commands - -A number of New API's added in this can be seen below: - -```csharp -public interface IRedisClient -{ - ... - RedisText GetServerRoleInfo(); - string GetConfig(string item); - void SetConfig(string item, string value); - void SaveConfig(); - void ResetInfoStats(); - - string GetClient(); - void SetClient(string name); - void KillClient(string address); - long KillClients(string fromAddress = null, - string withId = null, RedisClientType? ofType = null, bool? skipMe = null); - List> GetClientsInfo(); - void PauseAllClients(TimeSpan duration); -} - -public interface IRedisNativeClient -{ - ... - void ConfigRewrite(); - RedisText Role(); - string ClientGetName(); - void ClientSetName(string client); - void ClientKill(string host); - long ClientKill(string addr = null, string id = null, string type = null, string skipMe = null); - byte[] ClientList(); - void ClientPause(int timeOutMs); -} -``` - -## [New VB.NET Add ServiceStack Reference!](https://github.com/ServiceStack/ServiceStack/wiki/VB.Net-Add-ServiceStack-Reference) - -This release also adds [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) -support for the last remaining major .NET language with the new first-class support for -[VB.NET Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/VB.Net-Add-ServiceStack-Reference)! - -This now allows any C#, F# or VB.NET client project to be able generate and end-to-end typed API for your services just by providing the -url of your remote ServiceStack instance, directly from within VS.NET! - -![Add ServiceStack Reference](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/add-service-ref-flow.png) - -After clicking OK, the servers DTO's and **ServiceStack.Client** NuGet package are added to the project, providing an instant typed API: - -![Calling a ServiceStack Service from VB.NET](https://github.com/ServiceStack/Assets/raw/master/img/apps/StackApis/call-service-vb.png) - -Thanks to the close semantics between the C# and VB.NET languages, we're able to add support for all C# -[customization options in VB.NET](https://github.com/ServiceStack/ServiceStack/wiki/VB.Net-Add-ServiceStack-Reference#dto-customization-options) as well. - -Much of the new VB.NET NativeTypes provider is thanks to the efforts of [@KevinHoward](https://github.com/KevinHoward). - -### [Upgrade ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) - -To take advantage of VB.NET Add ServiceStack Reference feature, -[Upgrade or Install ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) VS.NET Extension. -If you already have **ServiceStackVS** installed, uninstall it first from `Tools -> Extensions and Updates... -> ServiceStackVS -> Uninstall`. - -## Simplified UX for all languages - -Our first iteration of **Add ServiceStack Reference** for C# used a **T4 Template** to make it easy for clients to view and modify all -Customization options available and to be able to auto-generate the Server DTO's by modifying and saving (or re-running) the T4 template. - -As F# projects didn't support T4 Templates, when we added support for -[F# Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/FSharp-Add-ServiceStack-Reference) -we had to skip the T4 template and add the server-generated DTO's source file directly to the project. - -By skipping the T4 Template we pleasantly discovered we ended up with a nicer, simplified and more user-friendly UX, with less moving parts for -the default use case of generating client DTO's based on the -[Default Server Configuration](https://github.com/ServiceStack/ServiceStack/wiki/CSharp-Add-ServiceStack-Reference#change-default-server-configuration). - -### Improving Single Generated Source File Story - -We've since decided to embrace and provide a better development experience around a single source file approach and use it consistently in all -C#, F# and VB.NET projects - now resulting simpler **Add ServiceStack Reference** UX for all client projects. - -### Update ServiceStack Reference Context Menu Item - -With the latest **ServiceStackVS** you can now update the Server DTO's in all projects by clicking on `Update ServiceStack Reference` -on the context-menu, e.g: - -![Update ServiceStack Reference](https://github.com/ServiceStack/Assets/raw/master/img/servicestackvs/servicestack%20reference/updateref-vbnet.gif) - -### Updating and Customizing Generated Types - -To [customize the generated DTO's](https://github.com/ServiceStack/ServiceStack/wiki/CSharp-Add-ServiceStack-Reference#dto-customization-options) -on the client you can just uncomment the option you want to change directly in the **header comments** and hit save. -**ServiceStackVS** automatically watches for any changes to the generated dto source files (i.e. ending with `.dtos.cs`) and will automatically -send the uncommented options to the remote server referenced by the `BaseUrl` and replace the existing file with the updated DTOs instantly! - -Taking the example below, once we uncomment the `MakePartial` option and save the file, **ServiceStackVS** automatically sends a new request -to the remote ServiceStack instance, passing in the `?MakePartial=False` option when requesting updated DTO's: - -```csharp -/* Options: -Date: 2014-10-21 00:44:24 -Version: 1 -BaseUrl: http://stackapis.servicestack.net - -MakePartial: False -//MakeVirtual: True -//MakeDataContractsExtensible: False -//AddReturnMarker: True -//AddDescriptionAsComments: True -//AddDataContractAttributes: False -//AddIndexesToDataMembers: False -//AddResponseStatus: False -//AddImplicitVersion: -//InitializeCollections: True -//AddDefaultXmlNamespace: http://schemas.servicestack.net/types -*/ -``` - -After saving you'll be able to notice the DTO's are updated instantly with the `Date: *` changing to reflect the current time and the new -generated DTO's no longer containing `partial` classes. - -### ServiceStack.Text - -New `JsConfig.OnDeserializing` and dynamic `ShouldSerialize(string field)` customization options were added to ServiceStack's JSON and JSV -Text serializers by [@pavelsavara](https://twitter.com/pavelsavara). An example of these new customization options in action is visible below: - -```csharp -[DataContract] -public class CustomSerializedPoco -{ - [IgnoreDataMember] - public HashSet hasAttribute; - - [DataMember(EmitDefaultValue = false, IsRequired = false)] - public int A { get; set; } - - [DataMember(EmitDefaultValue = false, IsRequired = false)] - public int? B { get; set; } - - public bool? ShouldSerialize(string fieldName) - { - return hasAttribute == null - ? null - : hasAttribute.Contains(fieldName); - } - - public object OnDeserializing(string fieldName, object value) - { - if (hasAttribute == null) - hasAttribute = new HashSet(); - hasAttribute.Add(fieldName); - return value; - } -} -``` - -This change makes it possible to create dynamic POCO's that behave in a similar way that dynamic languages can, -e.g. After deserialization you can detect which fields were deserialized by inspecting the `hasAttribute` collection. - -The `ShouldSerialize` API, closely follows the existing `ShouldSerialize{X}` convention but instead allows for a single API -to handle all serializable properties. - -The API returns a `bool?` which has the following meaning: - - `true` - Should be emitted - - `false` - Should not be emitted - - `null` - Use default behavior - -This allows us to implement a custom type that can support full round-trip when the field on the original JSON payload allowing use to -implement a custom type with similar functionality to `IExtensibleDataObject` which allows survival and forwarding of unknown properties, but for JSON. - -## [RabbitMQ](https://github.com/ServiceStack/ServiceStack/wiki/Rabbit-MQ) - -RabbitMQ Server and Client now have optional `PublishMessageFilter` and `GetMessageFilter` callbacks which can be used to intercept -outgoing and incoming messages, the `IBasicProperties.Type` is also pre-populated with the Type name of the message body that was published, e.g: - -```csharp -var mqServer = new RabbitMqServer("localhost") -{ - PublishMessageFilter = (queueName, properties, msg) => { - properties.AppId = "app:{0}".Fmt(queueName); - }, - GetMessageFilter = (queueName, basicMsg) => { - var props = basicMsg.BasicProperties; - receivedMsgType = props.Type; //automatically added by RabbitMqProducer - receivedMsgApp = props.AppId; - } -}; - -using (var mqClient = mqServer.CreateMessageQueueClient()) -{ - mqClient.Publish(new Hello { Name = "Bugs Bunny" }); -} - -receivedMsgApp.Print(); // app:mq:Hello.In -receivedMsgType.Print(); // Hello -``` - -## Other Minor Changes - - - ServerEvents Server now echoes heartbeat messages back through to the listening connection, - `ServerEventsClient` only fires the `OnHeartbeat` callback when it's receives the echoed `cmd.Heartbeat` command message - - Request binding for `Path` and `QueryString` variables are added to DTO's with Request DTO's providing their own [custom body deserialization](https://github.com/ServiceStack/ServiceStack/wiki/Serialization-deserialization) by implementing `IRequiresRequestStream` - - New `IAppHost.OnDisposeCallbacks` available allowing **Plugins** to register callbacks when `AppHost` is disposed - - `Config.UseHttpsLinks` now modifies generated BaseUrl of all links to use `https` - - The `ResponseStatus` on Custom DTO's are now preserved when thrown inside a custom `HttpError` response - - Equality members added to `[Route]`, `[Authenticate]`, `[RequiredRole]` and `[RequiredPermission]` attributes - - `ToOptimizedResultUsingCache` no longer double-encodes raw `string` responses - - `MvcHtmlString` was moved to `ServiceStack.Html` namespace - - New `StaticFileHandler.ResponseFilter` added to be able to modify custom headers returned on static files - - Many of OrmLite's static Extension method classes were renamed into a more logical grouping. - These changes are source compatible for typical usage of OrmLite API's, i.e. referenced as extension methods - -## Breaking changes - -### Added new .NET 4.5 Builds - -In preparation for introducing Async API's we've added new **.NET 4.5 builds** for the following packages: - - - ServiceStack.OrmLite - - ServiceStack.OrmLite.Sqlite.Mono - - ServiceStack.OrmLite.SqlServer - - ServiceStack.OrmLite.MySql - - ServiceStack.Server - -When adding ServiceStack NuGet Packages to a **.NET 4.5** project you will now get these newer .NET 4.5 builds instead. -The additional builds means you could potentially run into issues if mixing .NET v4.0 and v4.5 builds as all dependencies -need to reference the same build version. - -Should you need to, the easiest way to fix any versioning issues is to make sure all projects use the same .NET Framework version -(e.g. .NET 4.5) and then just uninstall and re-install the ServiceStack NuGet packages. - -### Removed ThreadStatic OrmLite Configuration - -We've also removed our existing ThreadStatic config variables (used to temporarily override global configuration). -Most per-connection state is now stored on the connection e.g. `CommandTimeout` was previously overridden with: - -```csharp -var hold = OrmLiteConfig.TSCommandTimeout; -try { - OrmLiteConfig.TSCommandTimeout = 60; - db.Select(...); -} finally { - OrmLiteConfig.TSCommandTimeout = hold; -} -``` - -Is now set directly on the connection (and only applies to that connection), e.g: - -```csharp -using (var db = DbFactory.Open()) -{ - db.SetCommandTimeout(60); - db.Select(...); -} -``` - -Likewise if you ever need to access the current `OrmLiteConfig.DialectProvider`, it should now be retrieved from the `IDbConnection`, i.e: - -```csharp -db.GetDialectProvider(); -``` - -and if you ever need to access the underlying ADO.NET `IDbConnection` or `IDbCommand` you can access them via the following APIs: - -```csharp -IDbConnection adoDb = db.ToDbConnection(); -IDbCommand adoDbCmd = dmCmd.ToDbCommand(); -``` - -### IReturnVoid now returns void - -All `IReturnVoid` API's on Service Clients have been changed to return `void` instead of -`HttpWebResponse` which needed to be explicitly disposed by the callee. - -To access the `HttpWebResponse`, Request DTO's can be changed to `IReturn` - -```csharp -public class EmptyResponse : IReturn { ... } -``` - -Alternatively the Response can be specified on the call-site with: - -```csharp -HttpWebResponse response = client.Get(new EmptyResponse()); -``` - -# v4.0.32 Release Notes - -## FSharp Add ServiceStack Reference! - -We're happy to announce that the next language supported by [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) is F#! - -For a quick overview, [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) is a simple solution to WCF's Add Service Reference that provides a flexible alternative to sharing your compiled server DTO's assembly with clients. Now F# clients can easily add a reference to a remote ServiceStack instance and update typed DTO's directly from within VS.NET - reducing the burden and effort required to consume ServiceStack Services. - -### Example Usage - -The easiest way to Add a ServiceStack reference to your project is to right-click on your project to bring up [ServiceStackVS's](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) **Add ServiceStack Reference** context-menu item. This opens a dialog where you can add the url of the ServiceStack instance you want to typed DTO's for, as well as the name of the T4 template that's added to your project. - -[![Add ServiceStack Reference](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/add-service-ref-flow.png)](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/add-service-ref-flow.png) - -After clicking OK, the servers DTO's and [ServiceStack.Client](https://www.nuget.org/packages/ServiceStack.Client) NuGet package are added to the project, providing an instant typed API: - -[![Calling ServiceStack Service with FSharp](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/fsharp-add-servicestack-reference.png)](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/fsharp-add-servicestack-reference.png) - -### Updating a ServiceStack Reference - -Updating a ServiceStack reference works intuitively where you can right-click on the DTO's you want to update and click **Update ServiceStack Reference** on the context menu: - -[![Calling ServiceStack Service with FSharp](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/fsharp-update-servicestack-reference.png)](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/fsharp-update-servicestack-reference.png) - -### F# Client Example - -Just like with C#, F# Native Types can be used in ServiceStack's [Generic Service Clients](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client) providing and end-to-end Typed API whose PCL support also allows F# to be used in [mobile clients apps](https://github.com/ServiceStackApps/HelloMobile) as well. The basic [stackapis.servicestack.net](http://stackapis.servicestack.net/) Services example in F# looks like: - -```fsharp -let client = new JsonServiceClient("http://stackapis.servicestack.net") -let response = client.Get(new SearchQuestions( - Tags = new List([ "redis"; "ormlite" ]))) - -TypeSerializer.PrintDump(response) -``` - -## FSharp Native Types Notes - -Add ServiceStack Reference in FSharp projects works a little different to C# projects which [utilizes VS.NET's built-in T4 support](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference#add-servicestack-reference) to provide customization of DTO's on the client that auto-runs the T4 template implicitly on **Save** or explicitly with the **Run Custom Tool** context menu item. - -Since there's no support for T4 templates in F# Projects, clicking **Add ServiceStack Reference** skips the T4 template and just adds the generated F# Types using the server defaults. This ends up providing a simpler experience for F# clients in the default case. Customization of default behavior can still be done on the Server: - -### Change Default Server Configuration - -The above defaults are also overridable on the ServiceStack Server by modifying the default config on the `NativeTypesFeature` Plugin, e.g: - -```csharp -var typesConfig = this.GetPlugin().MetadataTypesConfig; -typesConfig.AddDataContractAttributes = false; -... -``` - -## F# Native Types Constraints - -As the ordering constraint in F# conflicted with the ordering of types by C# namespaces, the cleanest approach was to add all DTO's under a single namespace. By default the namespace used will be the base **ServiceModel** namespace which is overridable with the `GlobalNamespace` Config: - -```csharp -typesConfig.GlobalNamespace = "Client.Namespace"; -``` - -This does mean that each DTO type name needs to be unique which is a best-practice that's now a requirement in order to make use of F# native types. Another semantic difference is that any C# partial classes are converted into top-level classes in F#. - -For more documentation about F# Native Types including info on each of the config options supported checkout the [F# Add ServiceStack Reference wiki](https://github.com/ServiceStack/ServiceStack/wiki/FSharp-Add-ServiceStack-Reference). - -### [Upgrade ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) - -To take advantage of this F# Add ServiceStack Reference [Upgrade or Install ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) VS.NET Extension. If you already have **ServiceStackVS** installed, uninstall it first from `Tools -> Extensions and Updates... -> ServiceStackVS -> Uninstall`. - -### Nested classes and Enums - -Support for Enums and Nested classes are now supported on both C# and F# Native Types. - -## Improved integration with MVC and ASP.NET - -We've improved integration for making use of ServiceStack components in existing ASP.NET MVC and WebForms Web Applications. The internals of `ServiceStackController` have been rewritten to share a common code-base with the new WebForms `ServiceStackPage` WebForms base page, both provide easy access to the same clean, high-performance components found in ServiceStack's `Service` base class, directly from within your MVC Controllers and WebForm pages. - -This is an outline of the API's found in MVC's `ServiceStackController` and WebForms `ServiceStackPage`: - -```csharp -public class ServiceStackController : Controller -{ - //... - IServiceStackProvider ServiceStackProvider { get; set; } - IAppSettings AppSettings { get; set; } - IHttpRequest ServiceStackRequest { get; set; } - IHttpResponse ServiceStackResponse { get; set; } - ICacheClient Cache { get; set; } - IDbConnection Db { get; set; } - IRedisClient Redis { get; set; } - IMessageFactory MessageFactory { get; set; } - IMessageProducer MessageProducer { get; set; } - ISessionFactory SessionFactory { get; set; } - ISession SessionBag { get; set; } - bool IsAuthenticated { get; set; } - - T TryResolve(); - T ResolveService(); - object Execute(object requestDto); - object ForwardRequestToServiceStack(IRequest request=null); - IAuthSession GetSession(bool reload = true); - TUserSession SessionAs(); - void ClearSession(); - void PublishMessage(T message); -} -``` - -### Use ServiceStack Authentication - -One benefit of integration with ServiceStack is to be able to make use of ServiceStack's simple and flexible [Authentication Providers](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization) which require minimal configuration and supports a number of different [Session Providers](https://github.com/ServiceStack/ServiceStack/wiki/Caching) and persistent [Data Store back-ends](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization#userauth-persistence---the-iuserauthrepository) to make it easy to integrate with an existing environment. - -### New MVC and WebForms Examples - -To illustrate the seamless integration with ServiceStack, we've created 2 new authentication-enabled example websites: - - - **ASP.NET MVC** Live Demo: [mvc.servicestack.net](http://mvc.servicestack.net/) and [source code](https://github.com/ServiceStack/Test/tree/master/src/Mvc) - - **ASP.NET WebForms** Live Demo: [webforms.servicestack.net](http://webforms.servicestack.net/) and [source code](https://github.com/ServiceStack/Test/tree/master/src/WebForms) - -![MVC with ServiceStack Authentication](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/mvc-integration.png) - -### Integrating with ServiceStack from MVC or WebForms - -We'll go through the MVC example to showcase the different ways you can integrate with ServiceStack from an external Web Framework. - -#### Using ResolveService to call Services directly - -The `Login` Action is a standard MVC Action handling HTML Form input accepting 3 parameters, a `userName`, `password` as well as a relative `redirect` url to redirect to when authentication is successful. Login uses the `ResolveService` API which just resolves an auto-wired instance of the ServiceStack `AuthenticateService` from the IOC and injects the current HTTP Request context, which we then use to call a method on the Service directly: - -```csharp -public ActionResult Login(string userName, string password, string redirect=null) -{ - if (ModelState.IsValid) - { - try - { - using (var authService = ResolveService()) - { - var response = authService.Authenticate(new Authenticate { - provider = CredentialsAuthProvider.Name, - UserName = userName, - Password = password, - RememberMe = true, - }); - - // add ASP.NET auth cookie - FormsAuthentication.SetAuthCookie(userName, true); - - return Redirect(string.IsNullOrEmpty(redirect) ? "/" : redirect); - } - } - catch (Exception ex) - { - ModelState.AddModelError(string.Empty, ex.Message); - } - } - - return View("Index", GetViewModel()); -} -``` - -> Since the above example calls the Service method directly any exceptions raised by the Service implementation are thrown and caught as normal. - -#### Using Execute to process Request DTO's - -The `Logout()` MVC Action uses ServiceStack's `Execute()` API which can call the desired ServiceStack Service with just a populated Request DTO: - -```csharp -public ActionResult Logout() -{ - Execute(new Authenticate { provider = "logout" }); - FormsAuthentication.SignOut(); - - return Redirect("/"); -} -``` - -#### Using ForwardRequestToServiceStack to proxy HTTP Requests - -The `ForwardingController` handles OAuth callbacks that have been configured to callback to `/auth/*` route which is handled by MVC as ServiceStack is mounted at and only configured to handle `/api` requests. - -Instead of creating new OAuth Applications with each provider to use the new `/api/auth/*` callback url so ServiceStack can handle the OAuth callback, we can use just use the new `ForwardRequestToServiceStack()` which just forwards the incoming HTTP Request from MVC to ServiceStack to process, effectively acting as a proxy: - -```csharp -routes.MapRoute("Forwarding", "auth/{*pathinfo}", - new { controller = "Forwarding", action = "Index" }); -... - -public class ForwardingController : ServiceStackController -{ - public ActionResult Index() - { - var response = ForwardRequestToServiceStack(); - if (ServiceStackResponse.IsClosed) return new EmptyResult(); - - string redirectUrl; - var httpResult = response as IHttpResult; - if (httpResult != null && httpResult.Headers.TryGetValue(HttpHeaders.Location, out redirectUrl)) - return Redirect(redirectUrl); - - return Redirect("/"); - } -} -``` - -The `Execute()` and `ForwardRequestToServiceStack()` are high-level API's that call into ServiceStack's internal Request pipeline, executing any Action Filters and also converts any exceptions into a populated serializable Response DTO with a populated `ResponseStatus` as would be returned to Service Clients. - -### Authentication Attributes - -Since we're using ServiceStack for Authentication, we're also able to re-use ServiceStack's Authentication Attribute Filters directly on MVC Controllers and WebForm Pages just as if they were ServiceStack Services, e.g: - -```csharp -[Authenticate] -public class AuthOnlyController : ServiceStackController -{ - public ActionResult Index() - { - return View(SessionAs()); - } -} -``` - -The above controller hanldes the [mvc.servicestack.net/AuthOnly](http://mvc.servicestack.net/AuthOnly) route which only allows access to Authorized users. If a user is not authenticated they're automatically redirected to [/?redirect=/AuthOnly#f=Unauthorized](http://mvc.servicestack.net/?redirect=%2fAuthOnly#f=Unauthorized) to prompt the user to login, after successfully logging in it will redirect back to the original `/AuthOnly` url. - -### Required Role or Permission - -The `[RequiredRole]` and `[RequiredPermission]` attributes work similar to the `[Authentication]` attribute except they also assert that the user is a member of the specified role: - -```csharp -[RequiredRole("TheRole")] -public class RequiresRoleController : ServiceStackController -{ - public ActionResult Index() - { - return View(SessionAs()); - } -} -``` - -The above Controller handles the [/RequiresRole](http://mvc.servicestack.net/RequiresRole) Route and will only grant access if the Authenticated User is also a member of the **TheRole**. - -### Calling ServiceStack Services Directly - -The simplest way to consume ServiceStack Services requiring the least effort and moving parts is to call them directly: - -#### Using ServiceStack OAuth in MVC - -Integrating with ServiceStack's OAuth providers requires the least effort as they're linkable directly in the format `/api/auth/{provider}` which is handled by ServiceStack's OAuth Service who initiates the Authentication process by redirecting to the selected OAuth provider: - -![MVC OAuth with HTML](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/mvc-auth.png) - -#### Calling ServiceStack with Ajax in MVC - -Posting HTML Forms directly to ServiceStack Services isn't that much more effort, Start with a plain HTML Form with field names that match with the Services property names: - -![MVC Register with HTML](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/mvc-register.png) - -We can then use ServiceStack's built-in [ss-utils.js JavaScript Libraray](https://github.com/ServiceStack/ServiceStack/wiki/ss-utils.js-JavaScript-Client-Library) to take care of Ajaxifying, auto-binding and submitting the form via Ajax. It also has built-in support for [Bootstrap Forms Field Validation conventions](https://github.com/ServiceStack/ServiceStack/wiki/ss-utils.js-JavaScript-Client-Library#bootstrap-forms) to automatically bind errors to the appropriate fields. The only custom code required is to bind the form is then: - -```javascript -$("#form-register").bindForm({ - success: function (r) { location.href = '/'; } -}); -``` - -In this case we've added a success callback to redirect to the home page if the registration was successful which will either be authenticated with the newly registered user if **Auto Login** was checked, otherwise you can use the login form to Sign in as the newly registered user. - -## [Server Events](https://github.com/ServiceStack/ServiceStack/wiki/Server-Events) - -There are new custom hooks on `ServerEventsFeature` to allow for further customization and deeper introspection of ServiceStack's Server Events: - - - `OnInit` - Invoked when clients first connect to the `event-stream`, can be used to add additional HTTP Headers back to the client - - `OnPublish` - Fired after each message is published with the active Response and the raw message that was published - -### Add Authentication support to .NET ServerEvents Client - -There are new explicit `Authenticate` and `AuthenticateAsync` API's which can be used to authenticate the ServerEvents ServiceClient which now **shares cookies** with the WebRequest that connects to the `/event-stream` so authenticating with the Server Events ServiceClient will also authenticate the `/event-stream` HTTP Connection: - -```csharp -client.Authenticate(new Authenticate { - provider = CredentialsAuthProvider.Name, - UserName = "user", - Password = "pass", - RememberMe = true, -}); - -client.Start(); -``` - -Which is also equivalent to: - -```csharp -client.ServiceClient.Post(new Authenticate { - provider = CredentialsAuthProvider.Name, - UserName = "user", - Password = "pass", - RememberMe = true, -}); -``` - -### Limiting Server Events to Authenticated Clients Only - -There's a new `LimitToAuthenticatedUsers` option in `ServerEventsFeature` to limit access to authenticated clients only: - -```csharp -Plugins.Add(new ServerEventsFeature { - LimitToAuthenticatedUsers = true, -}); -``` - -When enabled it will return a `401 Unauthorized` for non-authenticated clients. - -### JavaScript ServerEvents Client - -The [Server Events JavaScript Client](https://github.com/ServiceStack/ServiceStack/wiki/JavaScript-Server-Events-Client) now auto-reconnects when a heartbeat request fails by calling the new `$.ss.reconnectServerEvents()` API. - -## Funq IOC - -Funq now supports Lazy dependencies where you can `Func` factories to delay the resolution of dependencies to only when the Service is needed. The factories also support Multiple lazy arguments (up to 3 args): - -```csharp -container.RegisterAutoWiredAs(); -container.RegisterAutoWiredAs(); -container.RegisterAutoWiredAs(); - -container.RegisterAutoWired(); - -public class Dependency -{ - Func ctorFoo; - public Dependency(Func ctorFoo) - { - this.ctorFoo = ctorFoo; - } - - public Func Foo { get; set; } - - public Func FooBar { get; set; } - - public Func FooBarBaz { get; set; } - - public object Execute() - { - int total = 0; - var foo = ctorFoo(); - var bar = FooBar(foo); - var baz = FooBarBaz(foo, bar); - return bax.Execute(); - } -} -``` - -An alternative approach to resolving lazy dependency is to use a Lazy Property which is our preferred approach since allows the call-site to be transparent and retain a clean API, e.g: - -```csharp -public virtual IDbConnectionFactory DbFactory { get; set; } - -IDbConnection db; -public virtual IDbConnection Db -{ - get { return db ?? (db = DbFactory.OpenDbConnection()); } -} -``` - -This technique is used in the built-in [Repository Base](https://github.com/ServiceStack/ServiceStack/blob/8dcbbdb7dbe20fd3201cde100370564e8577a019/src/ServiceStack/ILogic.cs#L38) and [Logic Base](https://github.com/ServiceStack/ServiceStack/blob/8dcbbdb7dbe20fd3201cde100370564e8577a019/src/ServiceStack/ILogic.cs#L55) base classes which your dependencies can inherit from to enable lazy access to common ServiceStack providers. - -## App Settings - -### New Providers - -There's a new `EnvironmentVariableSettings` AppSettings provider to source configuration from Environment variables as well as a new `MultiAppSettings` AppSettings provider that enables reading configuration from multiple configuration sources. - -With these new providers we can setup a cascading configuration that first checks Environment variables, then looks in a local `~/appsettings.txt` plain-text file before falling back to `Web.config`: - -```csharp -AppSettings = new MultiAppSettings( - new EnvironmentVariableSettings(), - new TextFileSettings("~/appsettings.txt".MapHostAbsolutePath()), - new AppSettings()); -``` - -### New Apis - -New `GetAllKeys()` and `Exists()` were added to all `IAppSettings` providers: - -```csharp -public interface IAppSettings -{ - List GetAllKeys(); - bool Exists(string key); - //... -} -``` - -This makes it easy to scan and retrieve all related keys, e.g: - -```csharp -var devKeys = appSettings.GetAllKeys().Where(x => x.Matches("Dev.*")); -``` - -## [Session](https://github.com/ServiceStack/ServiceStack/wiki/Sessions) - -### Use HTTP Headers to Send Session Cookies - -You can now make a Session-enabled request with HTTP Headers instead of Cookies. The Session HTTP Headers have a `X-` prefix before the Session Id, i.e: `X-ss-id`, `X-ss-pid` and `X-ss-opts` - -### New API's for Session Bag - -New API's for storing and retrieving POCO's in a session bag without specifying a key (key defaults to Type Name): - -```csharp -SessionBag.Set(unAuthInfo); -var unAuthInfo = SessionBag.Get(); -``` - -New `GetSessionBag()` extension methods on `IRequest` and `IServiceBase` make it easier to access the users dynamic Session Bag from outside of a Service. E.g the example below shows how to copy any Anonymous User Session info into the Users typed Session when they Sign In: - -```csharp -public class CustomUserSession : AuthUserSession -{ - [DataMember] - public string UnAuthInfo { get; set; } - - public override void OnAuthenticated(IServiceBase authService, IAuthSession session, - IAuthTokens tokens, Dictionary authInfo) - { - UnAuthInfo = authService.GetSessionBag().Get(); - } -} -``` - -## OrmLite - -### New OrderBy API's for Joined Tables - -You can now Order By fields from Joined Tables in an SqlExpression: - -```csharp -var q = db.From() - .Join() - .OrderBy(x => x.Name); -``` - -### Count Queries - - - New `RowCount()` API added to return the number of rows in a query - - Aggregate `Count()` queries that return more than a single row are summed together - -### SelectInto Mapping - - - You no longer need to repeat `[Alias]` attributes when projecting results into different types with `db.SelectInto` API's as fields are now mapped by POCO Property names - -## ServiceStack.Text - - - Default delimiter of `ParseKeyValueText` changed from `:` to ` ` (space) - - New `string.Matches()` extension method to perform Glob-style matches - - `GetGenericType()` extension has been renamed to the more appropriate `FirstGenericType()` - - The `__type` info for late-bound types is no longer affected by white-space - -## Other - - - Metadata detail pages now include any types referenced in the Request and Response DTOs - - Rabbit MQ Clients no longer auto-declare Server Named Queues `amq.*` - -## Community - -### New [ServiceStack Succinctly](http://www.agile-code.com/blog/servicestack-succinctly-free-e-book/) Free e-book! - -[ServiceStack Succinctly](http://www.agile-code.com/blog/servicestack-succinctly-free-e-book/) is a new free e-book by [Zoran Maksimovic](https://twitter.com/zoranmax) which runs through the basics of creating and implementing a simple order management system with ServiceStack: - -Free ServiceStack Succinctly e-book - -### Table of Contents - - 1. ServiceStack Overview - 2. ServiceStack Basics - 3. Order Management System - 4. Solution Configuration - 5. Service Implementation - 6. Pagination - 7. Authentication - 8. Caching - 9. Logging - 10. Profiling - 11. Extending ServiceStack - 12. Documenting Web Services - -# v4.0.31 Release Notes - -The most requested feature since our last release was to expand our last releases support for [Server Sent Events](https://github.com/ServiceStackApps/Chat#server-sent-events) with both a scale-out **Redis ServerEvents back-end** for use in load-balanced App Servers scenarios as well as a **typed C# ServerEvents Client** - we're happy to announce we've been able to deliver both features in this release! - -#### Major features in this release - - - Server Events - - [Redis ServerEvents](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#redis-serverevents) - - [C# ServerEvents Client](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#c-serverevents-client) - - Redis - - [Redis Pub/Sub Server](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#redis-pubsub-server) - - AppSettings - - [First-class AppSettings](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#first-class-appsettings) - - [Writable AppSettings API](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#appsettings-are-now-writable) - - [Metadata Pages](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#metadata-pages) - - Authentication - - [WebSudo](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#web-sudo) - - [Auth Events](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#auth-events) - - [OrmLite](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#ormlite) - - [Text](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#text) - - Community - - [ServiceStack MiniProfiler Toolkit](https://github.com/ServiceStack/ServiceStack/blob/master/release-notes.md#servicestack-miniprofiler-toolkit) - -## Redis ServerEvents - -One limitation the default `MemoryServerEvents` implementation has is being limited for use within a single App Server where all client connections are maintained. This is no longer a limitation with the new **Redis ServerEvents back-end** which utilizes a distributed redis-server back-end to provide a scale-out option capable of serving fan-out/load-balanced App Servers. If you're familiar with SignalR, this is akin to [SignalR's scaleout with Redis back-end](http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-with-redis). - -`RedisServerEvents` is a drop-in replacement for the built-in `MemoryServerEvents` that's effectively a transparent implementation detail, invisible to Server or Client API's where both implementations even [share the same integration Tests](https://github.com/ServiceStack/ServiceStack/blob/b9eb34eb80ff64fa1171d2f7f29ef359c3580eed/tests/ServiceStack.WebHost.Endpoints.Tests/ServerEventTests.cs#L169-L189). - -![Redis ServerEvents Scale Out](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/gap/Chat/redis-scaleout.png) - -### Enabling RedisServer Events - -As a drop-in replacement it can easily be configured with just a few lines of code, as seen in the updated Chat App which can run on either [Memory or Redis ServerEvents providers](https://github.com/ServiceStackApps/Chat/blob/326617e88272d7cc0a8b7513272cf055378957e2/src/Chat/Global.asax.cs#L46-L54): - -```csharp -var redisHost = AppSettings.GetString("RedisHost"); -if (redisHost != null) -{ - container.Register(new PooledRedisClientManager(redisHost)); - - container.Register(c => - new RedisServerEvents(c.Resolve())); - - container.Resolve().Start(); -} -``` - -The above configuration will use Redis ServerEvents if there's a `RedisHost` **appSetting** in Chat's [Web.config](https://github.com/ServiceStackApps/Chat/blob/326617e88272d7cc0a8b7513272cf055378957e2/src/Chat/Web.config#L21): - -```xml - -``` - -### Cross-platform Memory and Redis ServerEvent Enabled Chat.exe - -To showcase Redis ServerEvents in action, we've prepared a stand-alone [ServiceStack.Gap](https://github.com/ServiceStack/ServiceStack.Gap) version of [Chat](http://chat.servicestack.net) compiled down into a single **Chat.exe** that can run on either Windows and OSX with Mono which can be downloaded from: - -### [Chat.zip](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/Chat.zip) (1.2MB) - -[![Redis ServerEvents Preview](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/redis-server-events.gif)](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/Chat.zip) - -> As Chat only runs on **2 back-end Services**, it fits well within [ServiceStack's Free Quota's](https://servicestack.net/download#free-quotas) which can be further customized and enhanced without a commercial license. - -Running **Chat.exe** without any arguments will run Chat using the default **Memory ServerEvents**. This can be changed to use **Redis ServerEvents** by [un-commenting this line in appsettings.txt](https://github.com/ServiceStack/ServiceStack.Gap/blob/master/src/Chat/Chat/appsettings.txt#L5): - -``` -#redis localhost -``` - -This will require a **redis-server** running on `localhost`. If you don't have redis yet, [download redis-server for Windows](https://github.com/ServiceStack/redis-windows). - -Alternatively you can specify which **port** to run Chat on and change it to use Redis ServerEvents by specifying the **redis** instance it should connect to on the command-line with: - -``` -Chat.exe /port=1337 /redis=localhost -``` - -Also included in `Chat.zip` are [test-fanout-redis-events.bat](https://github.com/ServiceStack/ServiceStack.Gap/blob/master/src/Chat/build/test-fanout-redis-events.bat) and equivalent [test-fanout-redis-events.sh](https://github.com/ServiceStack/ServiceStack.Gap/blob/master/src/Chat/build/test-fanout-redis-events.sh) helper scripts for **spawning multiple versions of Chat.exe** on different ports (and backgrounds) for **Windows or OSX**, showing how multiple clients are able to send messages to each other via Redis whilst being subscribed to different HTTP Servers: - -``` -START Chat.exe /port=1337 /redis=localhost -START Chat.exe /port=2337 /redis=localhost /background=http://bit.ly/1oQqhtm -START Chat.exe /port=3337 /redis=localhost /background=http://bit.ly/1yIJOBH -``` - -This script was used to create the animated gif above to launch **3 self-hosting instances of Chat.exe** running on **different ports**, all connected to each other via Redis. This enables some interesting peer-to-peer scenarios where users are able to run a network of (CPU/resource isolated) decentralized stand-alone HTTP Servers on their local machines, but can still communicate with each other via redis. - -## C# ServerEvents Client - -Like ServiceStack's other [C# Service Clients](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client), the new `ServerEventsClient` is a [portable library](https://github.com/ServiceStackApps/HelloMobile) contained in the `ServiceStack.Client` NuGet package: - -``` -PM> Install-Package ServiceStack.Client -``` - -And like the Service Clients it requires the `BaseUri` of your ServiceStack instance as well as an optional `channel` for the client to subscribe to: - -```csharp -var client = new ServerEventsClient("http://chat.servicestack.net", channel:"home"); -``` - -### Managed Connection - -The **C# ServerEvent Client** is a managed .NET client with feature parity with the [ServiceStack's JavaScript client](https://github.com/ServiceStackApps/Chat#client-bindings---ss-utilsjs) that **auto-reconnects** when a connection is lost, **sends periodic heartbeats** to maintain an active subscription as well as **auto-unregistering** once the client stops listening for messages, or gets disposed. - -### Handling Server Events - -Unlike other C# clients, the ServerEvents Client is mainly reactive in that it's primarily waiting for Server Events to be initiated from a remote server instead of the typical scenario in which requests are initiated by clients. To maximize utility, there are a number of different API's to receive and process messages: - -### Assigning Callback Handlers - -One way to receive messages (useful in long-running clients) is to assign handlers for each of the different events that are fired. This example shows how to capture all the different events a Client can receive: - -```csharp -ServerEventConnect connectMsg = null; -var msgs = new List(); -var commands = new List(); -var errors = new List(); - -var client = new ServerEventsClient(baseUri) { - OnConnect = e => connectMsg = e, - OnCommand = commands.Add, - OnMessage = msgs.Add, - OnException = errors.Add, -}.Start(); -``` - -Once the Client is configured, calling `Start()` will start listening for messages and calling `Stop()` or `Dispose()` will cancel the background HTTP connection and stop it listening for server events. - -### Customizing Metadata sent to clients - -As ServerEvents have deep integration with the rest of ServiceStack we're able to offer [Typed Messages](https://github.com/ServiceStack/ServiceStack/blob/71b51d231d1ddb2ba7da39613e216ab75fd181c0/src/ServiceStack.Client/ServerEventsClient.cs#L14-L44) containing the users `UserAuthId`, `DisplayName` and `ProfileUrl` of the users avatar when it's available. The typed messages also offer an extensible `Dictionary Meta` collection for maintaining custom metadata that can be sent to clients by appending to them in the ServerEventsFeature hooks, which can be defined when registering `ServerEventsFeature`: - -```csharp -Plugins.Add(new ServerEventsFeature { - // private Connect args - OnConnect = (subscription,httpReq) => AppendTo(subscription.Meta), - - // public Join/Leave args - OnCreated = (subscription,httpReq) => AppendTo(subscription.Meta), -}) -``` - -### Using C# Async/Await friendly API's - -Depending on your use-case, if you only want to use the ServerEvent Client for a short-time to listen for predictable responses (i.e. waiting for a Server callback on a pending request) you can alternatively use the Task-based API's letting you to participate in C# async/await workflows: - -```csharp -var client = new ServerEventsClient(baseUri, channel="Home"); - -// Wait to receive onConnect event -ServerEventConnect connectMsg = await client.Connect(); - -// Wait to receive onJoin command event -ServerEventCommand joinMsg = await client.WaitForNextCommand(); - -// Hold a future task to get notified once a msg has been received -Task msgTask = client1.WaitForNextMessage(); - -// Send a Web Service Request using the built-in JsonServiceClient -client.ServiceClient.Post(new PostChatToChannel { - Channel = client.Channel, // The channel we're listening on - From = client.SubscriptionId, // SubscriptionId Populated after Connect() - Message = "Hello, World!", -}); - -// Wait till we receive the chat Msg event we sent earlier -ServerEventMessage msg = await msgTask; -``` - -The above example showcases the **3 Task-based API's** available: - - 1. `Connect()` wait till receiving confirmation of a successful event subscription - 2. `WaitForNextCommand()` wait for the next `onJoin` or `onLeave` subscription events - 3. `WaitForNextMessage()` wait for the next message published to the channel - -The `ServiceClient` property lets you access a `JsonServiceClient` that's pre-configured with the clients `BaseUri` so that is primed for Sending Web Service Requests with. - -After the ServerEvent Client has connected, the `ConnectionInfo` property is populated with the typed `ServerEventConnect` response. - -### Message Event Handlers - -The above examples show generic API's for receiving any type of message, but just like in the JavaScript client, more fine-grained API's are available for handling specific message types. - -The `Handlers` dictionary is akin to the JavaScript Client's [Global Event Handlers](https://github.com/ServiceStackApps/Chat#global-event-handlers) which specify lambda's to be executed when messages are sent with the `cmd.*` selector: - -```csharp -client.Handlers["chat"] = (client, msg) => { - var chatMsg = msg.Json.FromJson(); //Deserialize JSON string to typed DTO - "Received '{0}' from '{1}'".Print(chatMsg.Message, chatMsg.FromName); -}; -``` - -Roughly translates to the equivalent JavaScript below: - -```javascript -$(source).handleServerEvents({ - handlers: { - chat: function (msg, event) { - console.log("Received " + msg.message + " from " + msg.fromName); - } - } -}); -``` - -Where both methods handle the `ChatMessage` sent with the `cmd.chat` selector. - -### Named Receivers - -Whilst handlers provide a light way to handle loose-typed messages, there's a more structured and typed option that works similar to ServiceStack's `IService` classes but are used to instead handle typed Server Event Messages. - -To be able to handle messages with your own classes, get them to implement the `IReceiver` empty marker interface: - -```csharp -public interface IReceiver -{ - void NoSuchMethod(string selector, object message); -} -``` - -Whilst primarily a marker interface, `IReceiver` does include a `NoSuchMethod` API to be able to handle messages sent with a unknown selector **target** that doesn't match any defined method or property. - -**Named Receivers** are equivalent to [Receivers](https://github.com/ServiceStackApps/Chat#receivers) in the JavaScript client which can be assigned to handle all messages sent to a receiver with the selector format: - -``` -{receiver}.{target} -``` - -A Named Receiver can be registered with the API below: - -```csharp -client.RegisterNamedReceiver("test"); -``` - -Which will forward all messages with a `test.*` selector to an instance of the `TestNamedReceiver` Type - -```csharp -public class TestNamedReceiver : ServerEventReceiver -{ - public void FooMethod(CustomType request) {} // void return type - - public CustomType BarMethod(CustomType request) - { - return request; // works with any return type, which are ignored - } - - public CustomType BazSetter { get; set; } // Auto populate properties - - public override void NoSuchMethod(string selector, object message) - { - var msg = (ServerEventMessage)message; - var nonExistentMethodCustomType = msg.Json.FromJson(); - } -} -``` - -This is roughly equivalent to the following JavaScript code: - -```javascript -$(source).handleServerEvents({ - receivers: { - test: { - FooMethod: function (msg, event) { ... }, - BarMethod: function (msg, event) { ... }, - BazSetter: null, - } - } -}); -``` - -> The [ServerEventReceiver](https://github.com/ServiceStack/ServiceStack/blob/68c7159037e7cf2a519d482b7dae524ca073da20/src/ServiceStack.Client/ServerEventsClient.Receiver.cs#L16-L28) is a convenient base class that in addition to implementing `IReceiver` interface, gets injected with the `Client` as well as additional context about the raw message available in `base.Request`. - -#### Unknown Message Handling - -One difference in the JavaScript client is that messages with **unknown** targets are assigned as properties on the `test` receiver, e.g `test.QuxTarget = {..}`. - -### Sending messages to Named Receivers - -Once registered, an instance of `TestNamedReceiver` will process messages sent with a `test.*` selector. The example below shows how to send a DTO to each of `TestNamedReceiver` defined methods and properties: - -```csharp -public class MyEventServices : Service -{ - public IServerEvents ServerEvents { get; set; } - - public void Any(CustomType request) - { - ServerEvents.NotifyChannel("home", "test.FooMethod", request); - ServerEvents.NotifyChannel("home", "test.BarMethod", request); - ServerEvents.NotifyChannel("home", "test.BazSetter", request); - - ServerEvents.NotifyChannel("home", "test.QuxTarget", request); - } -} -``` - -### Life-cycle of Receivers - -Similar to **Services** in ServiceStack, each message is processed with an instance of the Receiver that's resolved from `ServerEventsClient.Resolver` which by default uses the [NewInstanceResolver](https://github.com/ServiceStack/ServiceStack/blob/ec0226b97227048c3bd7c24667a71e7af7e1ff31/src/ServiceStack.Client/ServerEventsClient.Receiver.cs#L30-L36) to execute messages using a new instance of the Receiver Type: - -```csharp -public class NewInstanceResolver : IResolver -{ - public T TryResolve() - { - return typeof(T).CreateInstance(); - } -} -``` - -This can be changed to re-use the same instance by assigning a [SingletonInstanceResolver](https://github.com/ServiceStack/ServiceStack/blob/ec0226b97227048c3bd7c24667a71e7af7e1ff31/src/ServiceStack.Client/ServerEventsClient.Receiver.cs#L38-L46) instead: - -```csharp -public class SingletonInstanceResolver : IResolver -{ - ConcurrentDictionary Cache = new ConcurrentDictionary(); - - public T TryResolve() - { - return (T)Cache.GetOrAdd(typeof(T), type => type.CreateInstance()); - } -} - -client.Resolver = new SingletonInstanceResolver(); -``` - -We can also have it resolve instances from your preferred IOC. Here's an example showing how to register all Receiver Types, auto-wire them with any custom dependencies, and instruct the client to resolve instances from our IOC: - -```csharp -// Register all Receivers: -client.RegisterNamedReceiver("test"); -... - -// Register all dependencies used in a new Funq.Container: -var container = new Container(); -container.RegisterAs(); - -// Go through an auto-wire all Registered Receiver Types with Funq: -container.RegisterAutoWiredTypes(client.ReceiverTypes); - -// Change the client to resolve receivers from the new Funq Container: -client.Resolver = container; -``` - -We can assign `Funq.Container` directly as it already implements the [IResolver](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Interfaces/Configuration/IResolver.cs) interface, whilst you can re-use the existing IOC **Container Adapters** to [enable support for other IOCs](https://github.com/ServiceStack/ServiceStack/wiki/The-IoC-container#use-another-ioc-container). - -### The Global Receiver - -Whilst Named Receivers are used to handle messages sent to a specific namespaced selector, the client also supports registering a **Global Receiver** for handling messages sent with the special `cmd.*` selector. - -#### Handling Messages with the Default Selector - -All `IServerEvents` Notify API's inlcudes [overloads for sending messages without a selector](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/ServerEventsFeature.cs#L743-L771) that by convention will take the format `cmd.{TypeName}`. - -These events can be handled with a Global Receiver **based on Message type**, e.g: - -```csharp -public class GlobalReceiver : ServerEventReceiver -{ - public SetterType AnyNamedProperty { get; set; } - - public void AnyNamedMethod(CustomType request) - { - ... - } -} - -client.RegisterReceiver(); -``` - -Which will be called when messages are sent without a selector, e.g: - -```csharp -public class MyServices : Service -{ - public IServerEvents ServerEvents { get; set; } - - public void Any(Request request) - { - ServerEvents.NotifyChannel("home", new CustomType { ... }); - ServerEvents.NotifyChannel("home", new SetterType { ... }); - } -} -``` - -As Global Receivers handle other messages sent with the `cmd.*` selector and can be re-used as a named receiver, we can define a single class to handle all the different custom messages sent in [chat.servicestack.net](http://chat.servicestack.net) App, E.g: - -``` -cmd.chat Hi -cmd.announce This is your captain speaking... -cmd.toggle#channels -css.background-image url(https://servicestack.net/img/bg.jpg) -... -``` - -The above messages can all be handled with the Receiver below: - -```csharp -public class JavaScriptReceiver : ServerEventReceiver -{ - public void Chat(ChatMessage message) { ... } - public void Announce(string message) { ... } - public void Toggle(string message) { ... } - public void BackgroundImage(string cssRule) { ... } -} - -client.RegisterNamedReceiver(); -client.RegisterNamedReceiver("css"); -``` - -As seen above the **target** names are **case-insensitive** and `-` are collapsed to cater for JavaScript/CSS naming conventions. - -## ServiceStack.Redis - -### Redis Pub/Sub Server - -To power RedisServerEvents we've extracted the managed Pub/Sub long-running message-loop originally built for [Redis MQ](https://github.com/ServiceStack/ServiceStack/wiki/Messaging-and-Redis) and encapsulated it into a re-usable class that can be used independently for handling messages published to specific [Redis Pub/Sub](http://redis.io/commands#pubsub) channels. - -`RedisPubSubServer` processes messages in a managed background thread that **automatically reconnects** when the redis-server connection fails and works like an independent background Service that can be stopped and started on command. - -The public API is captured in the [IRedisPubSubServer](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Interfaces/Redis/IRedisPubSubServer.cs) interface: - -```csharp -public interface IRedisPubSubServer : IDisposable -{ - IRedisClientsManager ClientsManager { get; } - // What Channels it's subscribed to - string[] Channels { get; } - - // Run once on initial StartUp - Action OnInit { get; set; } - // Called each time a new Connection is Started - Action OnStart { get; set; } - // Invoked when Connection is broken or Stopped - Action OnStop { get; set; } - // Invoked after Dispose() - Action OnDispose { get; set; } - - // Fired when each message is received - Action OnMessage { get; set; } - // Fired after successfully subscribing to the specified channels - Action OnUnSubscribe { get; set; } - // Called when an exception occurs - Action OnError { get; set; } - // Called before attempting to Failover to a new redis master - Action OnFailover { get; set; } - - int? KeepAliveRetryAfterMs { get; set; } - // The Current Time for RedisServer - DateTime CurrentServerTime { get; } - - // Current Status: Starting, Started, Stopping, Stopped, Disposed - string GetStatus(); - // Different life-cycle stats - string GetStatsDescription(); - - // Subscribe to specified Channels and listening for new messages - IRedisPubSubServer Start(); - // Close active Connection and stop running background thread - void Stop(); - // Stop than Start - void Restart(); -} -``` - -To use `RedisPubSubServer`, initialize it with the channels you want to subscribe to and assign handlers for each of the events you want to handle. At a minimum you'll want to handle `OnMessage`: - -```csharp -var clientsManager = new PooledRedisClientManager(); -var redisPubSub = new RedisPubSubServer(clientsManager, "channel-1", "channel-2") { - OnMessage = (channel, msg) => "Received '{0}' from '{1}'".Print(msg, channel) - }.Start(); -``` - -Calling `Start()` after it's initialized will get it to start listening and processing any messages published to the subscribed channels. - -## [App Settings](https://github.com/ServiceStack/ServiceStack/wiki/AppSettings) - -For many years our solution against using .NET's complex XML configuration for App configuration is to store structured configuration in the **Web.config** appSettings which thanks to the [JSV Format](https://github.com/ServiceStack/ServiceStack.Text/wiki/JSV-Format) makes it easy to read and write structured data from a single string value, e.g: - -```xml - - - - - - - -``` - -This can be easily parsed into C# types with the [IAppSettings](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Interfaces/Configuration/IAppSettings.cs) API: - -```csharp -IAppSettings settings = new AppSettings(); - -string value = settings.Get("String"); -int value = settings.Get("Int", defaultValue:1); -List values = settings.GetList("List"); -Dictionary valuesMap = settings.GetDictionary("Dict"); -MyConfig config = settings.Get("Poco", new MyConfig { Foo = "Baz" }); -``` - -Like other ServiceStack providers, `IAppSettings` is a clean interface with multiple providers letting you easily change or override where you want to source your App configuration from: - - - **DictionarySettings** - Maintain settings in an in-memory Dictionary - - **TextFileSettings** - Maintain settings in a plain-text file - - **OrmLiteAppSettings** - Maintain settings in any RDBMS `Config` table - -We take advantage of this in our [public OSS projects](https://github.com/ServiceStackApps/Chat) when we want to override [public appSettings with production settings](https://github.com/ServiceStackApps/HttpBenchmarks/blob/master/src/BenchmarksAnalyzer/Global.asax.cs#L29-L32) or in our [stand-alone Applications](https://github.com/ServiceStack/ServiceStack.Gap) by allowing us to ship our applications with more end-user friendly **plain-text config file** whose defaults are embedded in the stand-alone **.exe**, exporting it if it doesn't exist - letting us achieve a single, portable **.exe** that can be xcopy'ed and run as-is. - -### First class AppSettings - -After proving its value over the years we've decided to make it a first-class property on `IAppHost.AppSettings` which defaults to looking at .NET's App/Web.config's. - -The new [Chat.zip](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/Chat.zip) App explores different ways AppSettings can be used: - -If there's an existing `appsettings.txt` file where the **.exe** is run it will use that, otherwise it falls back to **Web.config** appSettings: - -```csharp -public AppHost() : base("Chat", typeof (ServerEventsServices).Assembly) -{ - var customSettings = new FileInfo("appsettings.txt"); - AppSettings = customSettings.Exists - ? (IAppSettings)new TextFileSettings(customSettings.FullName) - : new AppSettings(); -} -``` - -As a normal property in your AppHost, AppSettings can be accessed directly in `AppHost.Configure()`: - -```csharp -public void Configure(Container container) -{ - ... - var redisHost = AppSettings.GetString("RedisHost"); - if (redisHost != null) - { - container.Register(c => - new RedisServerEvents(new PooledRedisClientManager(redisHost))); - - container.Resolve().Start(); - } -} -``` - -Inside your services or IOC dependencies, like any other auto-wired dependency: - -```csharp -public class ServerEventsServices : Service -{ - public IAppSettings AppSettings { get; set; } - - public void Any(PostRawToChannel request) - { - if (!IsAuthenticated && AppSettings.Get("LimitRemoteControlToAuthenticatedUsers", false)) - throw new HttpError(HttpStatusCode.Forbidden, "You must be authenticated to use remote control."); - ... - } -} -``` - -Directly within Razor views: - -```html - -``` - -As well as outside ServiceStack, via the `HostContext` static class: - -```csharp -var redisHost = HostContext.AppSettings.GetString("redis"); -``` - -### AppSettings are now writable - -A new `Set()` API was added to [IAppSettings](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Interfaces/Configuration/IAppSettings.cs) letting you save any serializable property that works for all providers: - -```csharp -public interface IAppSettings -{ - void Set(string key, T value); - ... -} - -AppSettings.Set("Poco", new MyConfig { Foo = "Baz" }); -``` - -In providers that support writable configuration natively like `OrmLiteAppSettings` and `DictionarySettings`, the settings get written through to the underlying provider. For read-only providers like Web.config's `AppSettings` or `TextFileSettings` a **shadowed** cache is kept that works similar to prototypal shadowing in JavaScript where if a property doesn't exist, setting a property will be stored on the top-level object instance which also takes precedence on subsequent property access. - -## [Metadata Pages](https://github.com/ServiceStack/ServiceStack/wiki/Metadata-Page) - -The metadata pages have been expanded to include some of [Swagger API Attribute annotations](https://github.com/ServiceStack/ServiceStack/wiki/Swagger-API#swagger-attributes) which now shows the parameters for the Request and Response DTO's as well as any other DTO's used in each metadata operation page: - -![Metadata Type Info](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/metadata-swagger-api.png) - -When annotated the Description also shows any **allowable Enum values** or **range limits** when provided. - -#### HtmlFormat - -The humanize feature in [Auto HtmlFormat](https://github.com/ServiceStack/ServiceStack/wiki/HTML5ReportFormat) for splitting JoinedCase words with spaces can be disabled for all pages with: - -```csharp -HtmlFormat.Humanize = false; -``` - -Or on adhoc pages by adding `#dehumanize` hash param. - -## [Authentication](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization) - -### Web Sudo - -A common UX in some websites is to add an extra layer of protection for **super protected** functionality by getting users to re-confirm their password verifying it's still them using the website, common in places like confirming a financial transaction. - -**WebSudo** (by [@tvjames](https://github.com/tvjames)) is a new feature similar in spirit requiring users to re-authenticate when accessing Services annotated with the `[WebSudoRequired]` attribute. To make use of WebSudo, first register the plugin: - -```csharp -Plugins.Add(new WebSudoFeature()); -``` - -You can then apply WebSudo behavior to existing services by annotating them with `[WebSudoRequired]`: - -```csharp -[WebSudoRequired] -public class RequiresWebSudoService : Service -{ - public object Any(RequiresWebSudo request) - { - return request; - } -} -``` - -Once enabled this will throw a **402 Web Sudo Required** HTTP Error the first time the service is called: - -```csharp -var requiresWebSudo = new RequiresWebSudo { Name = "test" }; -try -{ - client.Send(requiresWebSudo); //throws -} -catch (WebServiceException) -{ - client.Send(authRequest); //re-authenticate - var response = client.Send(requiresWebSudo); //success! -} -``` - -Re-authenticating afterwards will allow access to the WebSudo service. - -### Auth Events - -In order to enable functionality like **WebSudo** we've added additional hooks into the Authentication process with `IAuthEvents`: - -```csharp -public interface IAuthEvents -{ - void OnRegistered(IRequest httpReq, IAuthSession session, IServiceBase registrationService); - - void OnAuthenticated(IRequest httpReq, IAuthSession session, IServiceBase authService, - IAuthTokens tokens, Dictionary authInfo); - - void OnLogout(IRequest httpReq, IAuthSession session, IServiceBase authService); - - void OnCreated(IRequest httpReq, IAuthSession session); -} -``` - -These are the same authentication hooks that were previously only available when creating a **Custom UserSession** by inheriting [AuthUserSession](https://github.com/ServiceStack/ServiceStack/wiki/Sessions#session-events). The new AuthEvents API provide a loose-typed way where plugins can tap into the same hooks by registering it with `AuthFeature.AuthEvents`, e.g: - -```csharp -public class WebSudoFeature : IPlugin, IAuthEvents -{ - public void Register(IAppHost appHost) - { - ... - var authFeature = appHost.GetPlugin(); - authFeature.AuthEvents.Add(this); - } - - // Add implementations on `IAuthEvents` handlers - public void OnCreated(IRequest httpReq, IAuthSession session) - { - ... - } - ... -} -``` - -An alternative way for accessing `IAuthEvents` is to register it like a normal dependency, e.g: - -```csharp -container.RegisterAs(); -``` - -To simplify custom implementations you can inherit from the empty concrete [AuthEvents](https://github.com/ServiceStack/ServiceStack/blob/7eb3a34a2e545a54c2591665328c16c5d398d37a/src/ServiceStack/Auth/AuthEvents.cs#L18-L25) and choose to only implement the callbacks you're interested in, e.g: - -```csharp -public class LogAuthEvents : AuthEvents -{ - public static ILog Log = LogManager.GetLogger(typeof(LogAuthEvents)); - - public override void OnLogout(IRequest httpReq, IAuthSession session, IServiceBase authService) - { - Log.DebugFormat("User #{0} {1} has logged out", session.UserAuthId, session.UserName); - } -} -``` - -## OrmLite - - - Added new `db.ColumnLazy` API for lazily fetching a column of data - - Added `db.TableExists` for a typed API to detect whether a table exists - - Added `INamingStrategy.GetSequenceName()` to [override how sequence names in Oracle are generated](http://stackoverflow.com/a/25611452/85785) - - Upgraded PostgreSql Provider to **Npgsql 2.2.0** and Sqlite to **Sqlite.Core 1.0.93.0** - -## Text - - - Added `JsConfig.ParsePrimitiveIntegerTypes` and `JsConfig.ParsePrimitiveFloatingPointTypes` to [change preferences on what primitive numeric types should be converted to](https://github.com/ServiceStack/ServiceStack.Text/pull/428). - - Added `JsConfig.IgnoreAttributesNamed` to [change what attributes are used to ignore properties](https://github.com/ServiceStack/ServiceStack.Text/commit/3b9972fbd61ce000f9af72d74d79b30eb0d2f45b) - - Added [string.CountOccurancesOf() extension method](https://github.com/ServiceStack/ServiceStack.Text/commit/d41d7fb879d68e5a4ccb529e3cc6ed7d3ce937a2) - - Added [Image MimeTypes](https://github.com/ServiceStack/ServiceStack.Text/commit/b07cf033d7b4735b0249850769b119be0c857b9d) - -## Community - -## [ServiceStack MiniProfiler Toolkit](https://bitbucket.org/migajek/miniprofilingtoolkit) - -From the wider ServiceStack Community, [Michał Gajek](https://plus.google.com/u/0/+Micha%C5%82Gajek/auto) has developed an alternative analyzer of ServiceStack's MiniProfiler results in a comprehensive UI that allows deep introspection of your running Services. From the Project's description: - -### Description - -This project intends to provide tools for collecting & analyzing profiling results of ServiceStack-based apps. -Not only this makes profiling possible in the scenario when no built-in web-frontend is available (like Single Page Applications), but also has several advantages over it: - - - collects & persists the results - - allows the "background" profiling (example: production environment) - - it's better to analyze large amounts of collected profiling results, not just focusing on single execution timings - - helps finding time-consuming queries - -### Screenshots - -![](http://i.imgur.com/Ybpx4xg.png) - -![](http://i.imgur.com/BA4Mc68.png) - -![](http://i.imgur.com/US4Gk6s.png) - -![](http://i.imgur.com/bILdbQc.png) - - -### Install - -``` -PM> Install-Package Migajek.MiniProfiling.ServiceStack.RemoteStorage -``` - -### Register the Plugin: - -```csharp -Plugins.Add(new Migajek.Profiling.ServiceStackProfiler.MiniProfilingToolkit("http://url/", "ProjectName")); -``` - -# v4.0.30 Release Notes - -## [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) - -We have an exciting feature in this release showcasing our initial support for generating Native Types from client VS.NET projects using [ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project#step-1-download-and-install-servicestackvs) new **Add ServiceStack Reference** feature. It provides a simpler, cleaner and more versatile alternative to WCF's **Add Service Reference** in VS.NET. - -Our goal with Native Types is to provide an alternative for sharing DTO dlls, that can enable a better dev workflow for external clients who are now able to generate (and update) Typed APIs for your Services from a remote url - reducing the burden and effort required to consume ServiceStack Services whilst benefiting from clients native language strong-typing feedback. - -This is just the beginning, whilst C# is the first language supported it lays the groundwork and signals our approach on adding support for typed API's in other languages in future. Add a [feature request for your favorite language](http://servicestack.uservoice.com/forums/176786-feature-requests) to prioritize support for it sooner! - -### Example Usage - -The easiest way to Add a ServiceStack reference to your project is to right-click on your project to bring up [ServiceStackVS's](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) `Add ServiceStack Reference` context-menu item. This opens a dialog where you can add the url of the ServiceStack instance you want to typed DTO's for, as well as the name of the T4 template that's added to your project. - -![Add ServiceStack Reference](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/add-service-ref-flow.png) - -After clicking OK, the servers DTO's and [ServiceStack.Client](https://www.nuget.org/packages/ServiceStack.Client) NuGet package are added to the project, providing an instant typed API: - -![Calling ServiceStack Service](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/call-service.png) - -### Consuming Services from Mobile Clients now Easier than Ever! - -In addition with our improved PCL Support in this release, it's never been easier to create an instant Typed API for a remote Service consumable from any Xamarin.Android, Xamarin.iOS, Silverlgiht 5, Windows Store or .full NET4.0+ platforms - Here's a quick demo of it working in Android: - -![Android Add ServiceStack Reference](https://raw.githubusercontent.com/ServiceStack/ServiceStackVS/master/Images/android-add-ref-demo.gif) - -### Advantages over WCF - - - **Simple** Uses a small T4 template to save generated POCO Types. Updating as easy as re-running T4 template - - **Versatile** Clean DTOs works in all JSON, XML, JSV, MsgPack and ProtoBuf [generic service clients](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client#built-in-clients) - - **Reusable** Generated DTO's are not coupled to any endpoint or format. Defaults are both partial and virtual for maximum re-use - - **Resilient** Messaging-based services offer a number of [advantages over RPC Services](https://github.com/ServiceStack/ServiceStack/wiki/Advantages-of-message-based-web-services) - - **Flexible** DTO generation is customizable, Server and Clients can override built-in defaults - - **Integrated** Rich Service metadata annotated on DTO's, [Internal Services](https://github.com/ServiceStack/ServiceStack/wiki/Restricting-Services) are excluded when accessed externally - -### Available from v4.0.30+ ServiceStack Projects - -Native Types is now available by default on all **v4.0.30+** ServiceStack projects. It can be disabled by removing the `NativeTypesFeature` plugin with: - -```csharp -Plugins.RemoveAll(x => x is NativeTypesFeature); -``` - -For detailed info on how NativeTypesFeature works, its different customization options and improvements over WCF, checkout the [Add ServiceStack Reference](https://github.com/ServiceStack/ServiceStack/wiki/Add-ServiceStack-Reference) docs. - -### [Upgrade ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) - -To take advantage of this feature [Upgrade or Install ServiceStackVS](https://github.com/ServiceStack/ServiceStack/wiki/Creating-your-first-project) VS.NET Extension. If you already have **ServiceStackVS** installed, uninstall it first from `Tools -> Extensions and Updates... -> ServiceStackVS -> Uninstall`. - -## Improved PCL Story - -Our [PCL Story](https://github.com/ServiceStackApps/HelloMobile) has been greatly improved in this release now that `ServiceStack.Interfaces` has been converted into a pure PCL dll. This now lets you maintain your server DTO's in a pure PCL DLL that can be shared as-is on most supported platforms (Profile136): - - - Xamarin.iOS - - Xamarin.Android - - Windows Store - - WPF app using .NET 4.0 PCL support - - Silverlight 5 - -Whilst our impl-free `ServiceStack.Interfaces.dll` was able to be converted into a pure PCL dll, our Client libraries have instead resorted to using [PCL's Bait and Switch technique](http://log.paulbetts.org/the-bait-and-switch-pcl-trick/) to provide platform-specific extensions and optimizations. The one outlier is Silverlight5 which remains a custom (non-PCL) SL5 build, that whilst can now share DTO's, still can't support projects with dependencies on the PCL-compatible version of **ServiceStack.Client**. - -As of this release all PCL, platform and Silverlight dlls are now merged into the main [ServiceStack.Client](https://www.nuget.org/packages/ServiceStack.Client) NuGet packages so now any clients need only reference the main Client NuGet package: - -``` -Install-Package ServiceStack.Client -``` - -The [Hello PCL](https://github.com/ServiceStackApps/HelloMobile) project now contains examples of reusing a Server DTO project with all supported client platforms as well as showing re-use of a high-level `SharedGateway` which referenes `ServiceStack.Client` that's shared between all PCL-compatible platforms. - -### New ServiceStack + AngularJS Example - [StackApis](http://stackapis.servicestack.net) - -[![StackApis Home](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/stackapis-home.png)](http://stackapis.servicestack.net/) - -[StackApis](http://stackapis.servicestack.net/) is a simple new ServiceStack + AngularJS example project created with [ServiceStackVS AngularJS Template](https://github.com/ServiceStack/ServiceStackVS#servicestackvs) showcasing how quick and easy it is to create responsive feature-rich Single Page Apps with AngularJS and [AutoQuery](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query). StackApis is powered by a Sqlite database containing [snapshot of ServiceStack questions from StackOverflow APIs](https://github.com/ServiceStackApps/StackApis/blob/master/src/StackApis.Tests/UnitTests.cs#L67) that's [persisted in an sqlite database](https://github.com/ServiceStackApps/StackApis/blob/master/src/StackApis.Tests/UnitTests.cs#L119-L124) using [OrmLite](https://github.com/ServiceStack/ServiceStack.OrmLite/). - -### StackApis AutoQuery Service - -The [Home Page](https://github.com/ServiceStackApps/StackApis/blob/master/src/StackApis/default.cshtml) is built with less than **<50 Lines** of JavaScript which thanks to [AutoQuery](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query) routes all requests to the single AutoQuery Service below: - -```csharp -[Route("/questions")] -public class StackOverflowQuery : QueryBase -{ - public int? ScoreGreaterThan { get; set; } -} -``` - -> Not even `ScoreGreaterThan` is a required property, it's just an example of a [formalized convention](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query#advantages-of-well-defined-service-contracts) enabling queries from Typed Service Clients. - -Feel free to play around with a deployed version of StackApis at [stackapis.servicestack.net](http://stackapis.servicestack.net/). - -You can also use the public `http://stackapis.servicestack.net/` url to test out ServiceStack's new **Add ServiceStack Reference** feature :) - -## [Swagger Support](https://github.com/ServiceStack/ServiceStack/wiki/Swagger-API) - -### All static resources are now embedded - -ServiceStack's [Swagger Support](https://github.com/ServiceStack/ServiceStack/wiki/Swagger-API) received some welcomed enhancements thanks to [@tvjames](https://github.com/tvjames) and [@tyst](https://github.com/tyst)'s efforts which now sees all of Swagger's static resources embedded into a single `ServiceStack.Api.Swagger.dll`, taking advantage of the Virtual File Systems [transparent support for Embedded Resources](https://github.com/ServiceStack/ServiceStack.Gap#creating-an-embedded-servicestack-app), making it easier to manage and upgrade Swagger as a self-contained unit. - -### New Bootstrap theme for Swagger - -A new attractive Bootstrap Theme was also added to Swagger, available from [/swagger-ui-bootstrap/](http://stackapis.servicestack.net/swagger-ui-bootstrap/): - -[![Swagger Bootstrap](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/apps/StackApis/stackapis-swagger-bootstrap.png)](http://stackapis.servicestack.net/swagger-ui-bootstrap/) - -You can change the [metadata page plugin link](https://github.com/ServiceStack/ServiceStack/wiki/Metadata-page#adding-links-to-metadata-page) to point to this new theme with: - -```csharp -Plugins.Add(new SwaggerFeature { - UseBootstrapTheme = true, - LogoUrl = "your-logo.png" //optional use your own logo -}); -``` - -Swagger was also been updated to the latest version. - -## Authentication - -### Unique Emails - -ServiceStack now verifies emails returned by OAuth providers are now unique where if there's already another UserAuth with an existing email, authentication will fail and redirect (for HTML/Web Browser requests) with the Error token: - - /#f=EmailAlreadyExists - -This behavior is in-line with ServiceStack's other AuthProviders. If this change causes any issues, it can be disabled with: - -```csharp -AuthProvider.ValidateUniqueEmails = false; -``` - -> This doesn't apply to Users who login with multiple OAuth Providers as there accounts automatically get merged into a single UserAuth entity. - -### CustomValidationFilter - -A new `CustomValidationFilter` was added to all AuthProviders which can be used to return a `IHttpResult` to control what error response is returned, e.g: - -```csharp -Plugins.Add(new AuthFeature( - () => new CustomUserSession(), - new IAuthProvider[] { - new FacebookAuthProvider(appSettings) { - CustomValidationFilter = authCtx => - CustomIsValid(authCtx) - ? authCtx.Service.Redirect(authCtx.Session.ReferrerUrl - .AddHashParam("f","CustomErrorCode")) - : null, - }, - })); -``` - -## Breaking Changes - -### Upgrade all ServiceStack NuGet packages - -The primary breaking change was converting ServiceStack's core `ServiceStack.Interfaces.dll` into a pure portable class library which as it's incompatible with the previous non-PCL ServiceStack.Interfaces.dll requires that all NuGet dependenices (inc. transitive dependencies) be upgraded to **v4.0.30**. The version number was bumped to **v4.0.30** specifically to stress that it's incompatible with any ** - -Chat is another ServiceStack Single Page App Special showing how you can get a lot done with minimal effort and dependencies which delivers all these features in a tiny footprint built with vanilla jQuery and weighing just: - - - [1 default.cshtml page](https://github.com/ServiceStackApps/Chat/blob/master/src/Chat/default.cshtml) with under **170 lines of JavaScript** and **70 lines** of HTML - - [2 ServiceStack Services](https://github.com/ServiceStackApps/Chat/blob/master/src/Chat/Global.asax.cs) entire backend in 1 `.cs` file - - 1 ASP.NET Web Application project requiring only a sane **9 .NET dll** references - -### Remote control - -Chat features the ability to remotely control other users chat window with the client bindings in `/js/ss-utils.js`, providing a number of different ways to interact and modify a live webapp by either: - - - Invoking Global Event Handlers - - Modifying CSS via jQuery - - Sending messages to Receivers - - Raising jQuery Events - -All options above are designed to integrate with an apps existing functionality by providing the ability to invoke predefined handlers and exported object instances as well as modify jQuery CSS and raising DOM events. - -The [complete documentation](https://github.com/ServiceStackApps/Chat) in Chat is the recommended way to learn more about Server Events which goes through and explains how to use its Server and Client features. - -## [ServiceStackVS](https://github.com/ServiceStack/ServiceStackVS) - ServiceStack's VS.NET Extension - -Another exciting announcement is the initial release of [ServiceStackVS](https://github.com/ServiceStack/ServiceStackVS) - our VS.NET ServiceStack Extension containing the most popular starting templates for ServiceStack powered solutions: - -![Visual Studio Templates](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackvs/vs-templates.png) - -Each project template supports our [recommended multi-project structure](https://github.com/ServiceStack/ServiceStack/wiki/Physical-project-structure) promoting a clean architecture and Web Services best-practices, previously [documented in Email Contacts](https://github.com/ServiceStack/EmailContacts/#creating-emailcontacts-solution-from-scratch). - -This is now the fastest way to get up and running with ServiceStack. With these new templates you can now create a new ServiceStack Razor, AngularJS and Bootstrap enabled WebApp, pre-wired end-to-end in seconds: - -![AngularJS WalkThrough](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackvs/angularjs-overview.gif) - - - -### Get the [Learning AngularJS for .NET Developers](http://www.packtpub.com/learning-angularjs-for-net-developers/book) Book! - -On ServiceStack and AngularJS front, we also have great content coming from the ServiceStack community as -**[Learning AngularJS for .NET Developers](http://www.packtpub.com/learning-angularjs-for-net-developers/book)**, -a new book by [Alex Pop](https://twitter.com/AlexandruVPop) has just been made available. - -More details about the book as well as downloadable code-samples is available on -[Alex's announcement blog post](http://alexvpop.blogspot.co.uk/2014/06/announcing-learning-angularjs-dotnet.html). - -### Download ServiceStackVS - -ServiceStackVS supports both VS.NET 2013 and 2012 and can be [downloaded from the Visual Studio Gallery](http://visualstudiogallery.msdn.microsoft.com/5bd40817-0986-444d-a77d-482e43a48da7) - -[![VS.NET Gallery Download](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackvs/vsgallery-download.png)](http://visualstudiogallery.msdn.microsoft.com/5bd40817-0986-444d-a77d-482e43a48da7) - -### VS.NET 2012 Prerequisites - - - VS.NET 2012 Users must install the [Microsoft Visual Studio Shell Redistributable](http://www.microsoft.com/en-au/download/details.aspx?id=40764) - - It's also highly recommended to [Update to the latest NuGet](http://docs.nuget.org/docs/start-here/installing-nuget). - -> Alternatively if continuing to use an older version of the **NuGet Package Manager** you will need to click on **Enable NuGet Package Restore** after creating a new project to ensure its NuGet dependencies are installed. - -### Feedback - -We hope **ServiceStackVS** helps make ServiceStack developers more productive than ever and we'll look at continue improving it with new features in future. [Suggestions and feedback are welcome](http://servicestack.uservoice.com/forums/176786-feature-requests). - -## [Authentication](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization) - -### Saving User Profile Images - -To make it easier to build Social Apps like [Chat](https://github.com/ServiceStackApps/Chat) with ServiceStack we've started saving profile image urls (aka avatars) for the following popular OAuth providers: - - - Twitter - - Facebook - - GitHub - - Google OAuth2 - - LinkedIn OAuth2 - -The users profile url can be accessed in your services using the `IAuthSession.GetProfileUrl()` extension method which goes through the new `IAuthMetadataProvider` which by default looks in `UserAuthDetails.Items["profileUrl"]`. - -### New IAuthMetadataProvider - -A new [IAuthMetadataProvider](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/Auth/AuthMetadataProvider.cs) has been added that provides a way to customize the `authInfo` in all AuthProviders. It also allows overriding of how extended Auth metadata like `profileUrl` is returned. - -```csharp -public interface IAuthMetadataProvider -{ - void AddMetadata(IAuthTokens tokens, Dictionary authInfo); - - string GetProfileUrl(IAuthSession authSession, string defaultUrl = null); -} -``` - -> To override with a custom implementation, register `IAuthMetadataProvider` in the IOC - -### Saving OAuth Metadata - - -The new `SaveExtendedUserInfo` property (enabled by default) on all OAuth providers let you control whether to save the extended OAuth metadata available (into `UserAuthDetails.Items`) when logging in via OAuth. - -## [OrmLite](https://github.com/ServiceStack/ServiceStack.OrmLite/) - -### Loading of References in Multi-Select Queries - -Previous support of pre-loading of references were limited to a single entity using `LoadSingleById` to automatically fetch all child references, e.g: - -```csharp -public class Customer -{ - [AutoIncrement] - public int Id { get; set; } - public string Name { get; set; } - - [Reference] // Save in CustomerAddress table - public CustomerAddress PrimaryAddress { get; set; } - - [Reference] // Save in Order table - public List Orders { get; set; } -} - -var customer = db.LoadSingleById(request.Id); -customer.PrimaryAddress // Loads 1:1 CustomerAddress record -customer.Orders // Loads 1:M Order records -``` - -We've now also added support for pre-loading of references for multiple resultsets as well with `LoadSelect` which loads references for all results, e.g: - -```csharp -var customers = db.LoadSelect(q => q.Name.StartsWith("A")); -``` - -This is implemented efficiently behind the scenes where only 1 additional SQL Query is performed for each defined reference. - -> As a design goal none of OrmLite Query API's perform N+1 queries. - -### Self References - -We've extended OrmLite [References support](https://github.com/ServiceStack/ServiceStack.OrmLite/#reference-support-poco-style) to support Self References for **1:1** relations where the foreign key property can be on the parent table, e.g: - -```csharp -public class Customer -{ - ... - public int CustomerAddressId { get; set; } - - [Reference] - public CustomerAddress PrimaryAddress { get; set; } -} -``` - -Which maintains the same relationship as having the Foreign Key column on the child table instead, i,e: - -```csharp -public class CustomerAddress -{ - public int CustomerId { get; set; } -} -``` - -### Support Foreign Key Attributes to specify Reference Fields - -Previously definitions of references relied on [Reference Conventions](https://github.com/ServiceStack/ServiceStack.OrmLite/#reference-conventions) using either the C# Property Name or Property Aliases. You can now also use the [References and ForeignKey attributes](https://github.com/ServiceStack/ServiceStack.OrmLite/#new-foreign-key-attribute-for-referential-actions-on-updatedeletes) to specify Reference Properties, e.g: - -```csharp -public class Customer -{ - [Reference(typeof(CustomerAddress))] - public int PrimaryAddressId { get; set; } - - [Reference] - public CustomerAddress PrimaryAddress { get; set; } -} -``` - -> Reference Attributes take precedence over naming conventions - -### Support for Stored Procedures with out params - -A new `SqlProc` API was added returning an `IDbCommand` which can be used to customize the Stored Procedure call letting you add custom out parameters. The example below shows - -```csharp -string spSql = @"DROP PROCEDURE IF EXISTS spSearchLetters; - CREATE PROCEDURE spSearchLetters (IN pLetter varchar(10), OUT pTotal int) - BEGIN - SELECT COUNT(*) FROM LetterFrequency WHERE Letter = pLetter INTO pTotal; - SELECT * FROM LetterFrequency WHERE Letter = pLetter; - END"; - -db.ExecuteSql(spSql); - -var cmd = db.SqlProc("spSearchLetters", new { pLetter = "C" }); -var pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output); - -var results = cmd.ConvertToList(); -var total = pTotal.Value; -``` - -An alternative approach is to use the new overload added to the raw SQL API `SqlList` that lets you customize the Stored Procedure using a filter, e.g: - -```csharp -IDbDataParameter pTotal = null; -var results = db.SqlList("spSearchLetters", cmd => { - cmd.CommandType = CommandType.StoredProcedure; - cmd.AddParam("pLetter", "C"); - pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output); - }); -var total = pTotal.Value; -``` - -### Minor OrmLite Features - - - Use `OrmLiteConfig.DisableColumnGuessFallback=false` to disable fallback matching heuristics - - Added [GenericTableExpressions](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/Expression/GenericTableExpressions.cs) example showing how to extend OrmLite to support different runtime table names on a single schema type. - -## [AutoQuery](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query) - -### Support for loading References - -AutoQuery now takes advantage of OrmLite's new support for loading child references where marking your Query DTO with `[Reference]` will automatically load its related data, e.g: - -```csharp -public class Rockstar -{ - public int Id { get; set; } - public string FirstName { get; set; } - public string LastName { get; set; } - public int? Age { get; set; } - - [Reference] - public List Albums { get; set; } -} -``` - -### Improved OrderBy - -Add support for inverting sort direction of individual orderBy fields using '-' prefix e.g: - -```csharp -// ?orderBy=Rating,-ImdbId -var movies = client.Get(new SearchMovies { OrderBy = "Rating,-ImdbId" }); - -// ?orderByDesc=-Rating,ImdbId -var movies = client.Get(new SearchMovies { OrderByDesc = "-Rating,ImdbId" }); -``` - -## ServiceStack.Text - - - Added support for `OrderedDictionary` and other uncommon `IDictionary` types - - WCF-style `JsConfig.OnSerializedFn` custom hook has been added - - `JsConfig.ReuseStringBuffer` is enabled by default for faster JSON/JSV text serialization - - Properties can also be ignored with `[JsonIgnore]` attribute - -## Other Features - - - New `[Exclude(Feature.Soap)]` attribute can be used to exclude types from XSD/WSDL's - - XSD/WSDL's no longer including open generic types - - Added `$.ss.getSelection()`, `$.ss.queryString()`, `$.ss.splitOnFirst()`, `$.ss.splitOnLast()` to /ss-utils.js - - `TwitterAuthProvider` now makes authenticated v1.1 API requests to fetch user metadata - - -# v4.0.23 Release Notes - -## [AutoQuery](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query) - -The big ticket feature in this release is the new [AutoQuery](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query) feature - with our approach of enabling Queryable Data Services, that's designed to avoid [OData's anti-patterns and pitfalls](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query#why-not-odata). - - - Simple, intuitive and easy to use! - - Works with all OrmLite's [supported RDBMS providers](https://github.com/ServiceStack/ServiceStack.OrmLite/#download) - - Supports multiple table JOINs and custom responses - - Code-first, declarative programming model - - Promotes clean, intent-based self-describing API's - - Highly extensible, implementations are completely overridable - - Configurable Adhoc, Explicit and Implicit conventions - - Allows preemptive client queries - - New `GetLazy()` API in Service Clients allow transparently streaming of paged queries - - Raw SqlFilters available if required - -#### AutoQuery Services are normal ServiceStack Services - -AutoQuery also benefits from just being normal ServiceStack Services where you can re-use existing knowledge in implementing, customizing, introspecting and consuming ServiceStack services, i.e: - - - Utilizes the same customizable [Request Pipeline](https://github.com/ServiceStack/ServiceStack/wiki/Order-of-Operations) - - AutoQuery services can be mapped to any [user-defined route](https://github.com/ServiceStack/ServiceStack/wiki/Routing) - - Is available in all [registered formats](https://github.com/ServiceStack/ServiceStack/wiki/Formats) - - The [CSV Format](https://github.com/ServiceStack/ServiceStack/wiki/ServiceStack-CSV-Format) especially shines in AutoQuery who's tabular result-set are perfect for CSV - - Can be [consumed from typed Service Clients](https://github.com/ServiceStack/ServiceStack/wiki/Clients-overview) allowing an end-to-end API without code-gen in [PCL client platforms as well](https://github.com/ServiceStackApps/HelloMobile) - -### Getting Started - -AutoQuery uses your Services existing OrmLite DB registration, the example below registers an InMemory Sqlite Provider: - -```csharp -container.Register( - new OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider)); -``` - -There are no additional dependencies, enabling AutoQuery is as easy as registering the AutoQueryFeature Plugin: - -```csharp -Plugins.Add(new AutoQueryFeature { MaxLimit = 100 }); -``` - -The configuration above limits all queries to a maximum of **100** results. - -The minimum code to expose a Query Service for the `Rockstar` table under a user-defined Route is just: - -```csharp -[Route("/rockstars")] -public class FindRockstars : QueryBase {} -``` - -With no additional code, this allows you to use any of the registered built-in conventions, e.g: - - /rockstars?Ids=1,2,3 - /rockstars?AgeOlderThan=42 - /rockstars?AgeGreaterThanOrEqualTo=42 - /rockstars?FirstNameIn=Jim,Kurt - /rockstars?FirstNameBetween=A,F - /rockstars?FirstNameStartsWith=Jim - /rockstars?LastNameEndsWith=son - /rockstars?IdAbove=1000 - -You're also able to formalize your API by adding concrete properties to your Request DTO: - -```csharp -public class QueryRockstars : QueryBase -{ - public int? AgeOlderThan { get; set; } -} -``` - -Which now lets you access AutoQuery Services from the ServiceStack's [Typed Service Clients](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client): - -```csharp -client.Get(new QueryRockstars { AgeOlderThan = 42 }); -``` - -You can also take advantage of the new `GetLazy()` API to transparently stream large result-sets in managable-sized chunks: - -```csharp -var results = client.GetLazy(new QueryMovies { Ratings = new[]{"G","PG-13"}}).ToList(); -``` - -As GetLazy returns a lazy `IEnumerable` sequence it can be used within LINQ expressions: - -```csharp -var top250 = client.GetLazy(new QueryMovies { Ratings = new[]{ "G", "PG-13" } }) - .Take(250) - .ConvertTo(x => x.Title); -``` - -This is just a sampler, for a more complete guide to AutoQuery checkout the [AutoQuery wiki](https://github.com/ServiceStack/ServiceStack/wiki/Auto-Query). - -## New VistaDB OrmLite Provider! - -Also in this release is a preview release of OrmLite's new support for [VistaDB](http://www.gibraltarsoftware.com/) thanks to the efforts of [Ilya Lukyanov](https://github.com/ilyalukyanov). - -[VistaDB](http://www.gibraltarsoftware.com/) is a commercial easy-to-deploy SQL Server-compatible embedded database for .NET that provides a good alternative to Sqlite for embedded scenarios. - -To use first download and install [VistaDB](http://www.gibraltarsoftware.com/) itself, then grab OrmLite's VistaDB provider from NuGet: - - PM> Install-Package ServiceStack.OrmLite.VistaDb - -Then register the VistaDB Provider and the filename of what embedded database to use with: - -```csharp -VistaDbDialect.Provider.UseLibraryFromGac = true; - -container.Register( - new OrmLiteConnectionFactory("Data Source=db.vb5;", VistaDbDialect.Provider)); -``` - -The VistaDB provider is almost a complete OrmLite provider, the one major missing feature is OrmLite's new support for [Optimistic Concurrency](https://github.com/ServiceStack/ServiceStack.OrmLite/#optimistic-concurrency) which is missing in VistaDB which doesn't support normal Database triggers but we're still researching the most optimal way to implement this in VistaDB. - -## Improved AspNetWindowsAuthProvider - -A new `LoadUserAuthFilter` was added to allow `AspNetWindowsAuthProvider` to retrieve more detailed information about Windows Authenticated users by using the .NET's ActiveDirectory services, e.g: - -```csharp -public void LoadUserAuthInfo(AuthUserSession userSession, - IAuthTokens tokens, Dictionary authInfo) -{ - if (userSession == null) return; - using (PrincipalContext pc = new PrincipalContext(ContextType.Domain)) - { - var user = UserPrincipal.FindByIdentity(pc, userSession.UserAuthName); - tokens.DisplayName = user.DisplayName; - tokens.Email = user.EmailAddress; - tokens.FirstName = user.GivenName; - tokens.LastName = user.Surname; - tokens.FullName = (String.IsNullOrWhiteSpace(user.MiddleName)) - ? "{0} {1}".Fmt(user.GivenName, user.Surname) - : "{0} {1} {2}".Fmt(user.GivenName, user.MiddleName, user.Surname); - tokens.PhoneNumber = user.VoiceTelephoneNumber; - } -} -``` - -Then to use the above custom filter register it in AspNetWindowsAuthProvider with: - -```csharp -Plugins.Add(new AuthFeature( - () => new CustomUserSession(), - new IAuthProvider[] { - new AspNetWindowsAuthProvider(this) { - LoadUserAuthFilter = LoadUserAuthInfo - } - )); -``` - -Above example kindly provided by [Kevin Howard](https://github.com/KevinHoward). - -## Other features - - - [OrmLite's T4 Templates](https://github.com/ServiceStack/ServiceStack.OrmLite/#t4-template-support) were improved by [Darren Reid](https://github.com/Layoric) - - ApiVersion added to Swaggers ResourcesResponse DTO - - `Uri` in RedisClient allows passwords - -# v4.0.22 Release Notes - -## OrmLite - -This was primarily an OrmLite-focused release with the introduction of major new features: - -### Typed SQL Expressions now support Joins! - -Another [highly requested feature](http://servicestack.uservoice.com/forums/176786-feature-requests/suggestions/4459040-enhance-ormlite-with-common-data-usage-patterns) has been realized in this release with OrmLite's typed SqlExpressions extended to add support for Joins. - -The new JOIN support follows OrmLite's traditional approach of a providing a DRY, typed RDBMS-agnostic wrapper that retains a high affinity with SQL, providing an intuitive API that generates predictable SQL and a light-weight mapping to clean POCO's. - -### Basic Example - -Starting with the most basic example you can simply specify the table you want to join with: - -```csharp -var dbCustomers = db.Select(q => q.Join()); -``` - -This query rougly maps to the following SQL: - -```sql -SELECT Customer.* - FROM Customer - INNER JOIN - CustomerAddress ON (Customer.Id == CustomerAddress.Id) -``` - -Just like before `q` is an instance of `SqlExpression` which is bounded to the base `Customer` type (and what any subsequent implicit API's apply to). - -To better illustrate the above query, lets expand it to the equivalent explicit query: - -```csharp -SqlExpression q = db.From(); -q.Join(); - -List dbCustomers = db.Select(q); -``` - -### Reference Conventions - -The above query joins together the `Customer` and `CustomerAddress` POCO's using the same relationship convention used in [OrmLite's support for References](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/LoadReferencesTests.cs), i.e. using the referenced table `{ParentType}Id` property convention. - -An example of what this looks like can be seen the POCO's below: - -```csharp -class Customer { - public Id { get; set; } - ... -} -class CustomerAddress { - public Id { get; set; } - public CustomerId { get; set; } // Reference based on Property name convention -} -``` - -References based on matching alias names is also supported, e.g: - -```csharp -[Alias("LegacyCustomer")] -class Customer { - public Id { get; set; } - ... -} -class CustomerAddress { - public Id { get; set; } - - [Alias("LegacyCustomerId")] // Matches `LegacyCustomer` Alias - public RenamedCustomerId { get; set; } // Reference based on Alias Convention -} -``` - -Either convention lets you save a POCO and all its entity references with `db.Save()`, e.g: - -```csharp -var customer = new Customer { - Name = "Customer 1", - PrimaryAddress = new CustomerAddress { - AddressLine1 = "1 Australia Street", - Country = "Australia" - }, -}; -db.Save(customer, references:true); -``` - -Going back to the above example: - -```csharp -q.Join(); -``` - -Uses the implicit join in the above reference convention to expand into the equivalent explicit API: - -```csharp -q.Join((customer,address) => customer.Id == address.CustomerId); -``` - -### Selecting multiple columns across joined tables - -Another behaviour implicit when selecting from a typed SqlExpression is that results are mapped to the `Customer` POCO. To change this default we just need to explicitly specify what POCO it should map to instead: - -```csharp -List customers = db.Select( - db.From().Join()); -``` - -Where `FullCustomerInfo` is any POCO that contains a combination of properties matching any of the joined tables in the query. - -The above example is also equivalent to the shorthand `db.Select()` API: - -```csharp -var customers = db.Select(q => q.Join()); -``` - -Rules for how results are mapped is simply each property on `FullCustomerInfo` is mapped to the first matching property in any of the tables in the order they were added to the SqlExpression. - -As most OrmLite tables have a primary key property named `Id`, the auto-mapping includes a fallback for mapping to a full namespaced Id property in the same `{Type}Id` format. This allows you to auto-populate `CustomerId`, `CustomerAddressId` and `OrderId` columns even though they aren't a match to any of the fields in any of the joined tables. - -### Advanced Example - -Seeing how the SqlExpression is constructed, joined and mapped, we can take a look at a more advanced example to showcase more of the new API's available: - -```csharp -List rows = db.Select( // Map results to FullCustomerInfo POCO - db.From() // Create typed Customer SqlExpression - .LeftJoin() // Implict left join with base table - .Join((c,o) => c.Id == o.CustomerId) // Explicit join and condition - .Where(c => c.Name == "Customer 1") // Implicit condition on base table - .And(o => o.Cost < 2) // Explicit condition on joined Table - .Or((c,o) => c.Name == o.LineItem)); // Explicit condition with joined Tables -``` - -The comments next to each line document each Type of API used. Some of the new API's introduced in this example include: - - - Usage of `LeftJoin` for LEFT JOIN'S, `RightJoin` and `FullJoin` also available - - Usage of `And()`, to specify a condition on a Joined table - - Usage of `Or`, to specify a condition against 2 joined tables - -More code examples of References and Joined tables are available in: - - - [LoadReferencesTests.cs](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/LoadReferencesTests.cs) - - [LoadReferencesJoinTests.cs](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/LoadReferencesJoinTests.cs) - -## Optimistic Concurrency - -Another major feature added to OrmLite is support for optimistic concurrency which can be added to any table by adding a `ulong RowVersion { get; set; }` property, e.g: - -```csharp -public class Poco -{ - ... - public ulong RowVersion { get; set; } -} -``` - -RowVersion is implemented efficiently in all major RDBMS's, i.e: - - - Uses `rowversion` datatype in SqlServer - - Uses PostgreSql's `xmin` system column (no column on table required) - - Uses UPDATE triggers on MySql, Sqlite and Oracle whose lifetime is attached to Create/Drop tables APIs - -Despite their differing implementations each provider works the same way where the `RowVersion` property is populated when the record is selected and only updates the record if the RowVersion matches with what's in the database, e.g: - -```csharp -var rowId = db.Insert(new Poco { Text = "Text" }, selectIdentity:true); - -var row = db.SingleById(rowId); -row.Text += " Updated"; -db.Update(row); //success! - -row.Text += "Attempting to update stale record"; - -//Can't update stale record -Assert.Throws(() => - db.Update(row)); - -//Can update latest version -var updatedRow = db.SingleById(rowId); // fresh version -updatedRow.Text += "Update Success!"; -db.Update(updatedRow); - -updatedRow = db.SingleById(rowId); -db.Delete(updatedRow); // can delete fresh version -``` - -Optimistic concurrency is only verified on API's that update or delete an entire entity, i.e. it's not enforced in partial updates. There's also an Alternative API available for DELETE's: - -```csharp -db.DeleteById(id:updatedRow.Id, rowversion:updatedRow.RowVersion) -``` - -### Other OrmLite features - - - New [Limit API's added to JoinSqlBuilder](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/Expression/SqlExpressionTests.cs#L126-L168) - - SqlExpression's are now tied to the dialect provider at time of creation - -## ServiceStack.Text - -A new `JsConfig.ReuseStringBuffer` performance config option is available to JSON and JSV Text Serializers which lets you re-use ThreadStatic StringBuilder when serializing to a string. In initial benchmarks (both synchronous and parallel) it shows around a **~%30 increase in performance** for small POCO's. It can be enabled with: - -```csharp -JsConfig.ReuseStringBuffer = true; -``` - -Default enum values can be excluded from being serialized with: - -```csharp -JsConfig.IncludeDefaultEnums = false; -``` - -## ServiceStack - -### [Messaging](https://github.com/ServiceStack/ServiceStack/wiki/Messaging) - -Improved support for the MQ Request/Reply pattern with the new `GetTempQueueName()` API now available in all MQ Clients which returns a temporary queue (prefixed with `mq:tmp:`) suitable for use as the ReplyTo queue in Request/Reply scenarios: - -```csharp -mqServer.RegisterHandler(m => - new HelloResponse { Result = "Hello, {0}!".Fmt(m.GetBody().Name) }); -mqServer.Start(); - -using (var mqClient = mqServer.CreateMessageQueueClient()) -{ - var replyToMq = mqClient.GetTempQueueName(); - mqClient.Publish(new Message(new Hello { Name = "World" }) { - ReplyTo = replyToMq - }); - - IMessage responseMsg = mqClient.Get(replyToMq); - mqClient.Ack(responseMsg); - var responseDto = responseMsg.GetBody(); -} -``` - -On [Rabbit MQ](https://github.com/ServiceStack/ServiceStack/wiki/Rabbit-MQ) it creates an exclusive non-durable queue. - -In [Redis MQ](https://github.com/ServiceStack/ServiceStack/wiki/Messaging-and-Redis) there's a new `RedisMqServer.ExpireTemporaryQueues()` API which can be used on StartUp to expire temporary queues after a given period. - -Synchronous and Parallel tests for this feature is available in [MqRequestReplyTests.cs](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.Server.Tests/Messaging/MqRequestReplyTests.cs). - -## New NuGet packages - - - [ServiceStack.Authentication.LightSpeed](https://www.nuget.org/packages/ServiceStack.Authentication.LightSpeed/) is a new User Auth Repository created by [Herdy Handoko](https://plus.google.com/u/0/+HerdyHandoko/posts) providing a new persistence option for User Authentication backed by [Mindscape's LightSpeed ORM](http://www.mindscapehq.com/products/lightspeed). Checkout the [GitHub Project](https://github.com/hhandoko/ServiceStack.Authentication.LightSpeed) for more info. - -### Other Framework Features - - - Added support for locking users in all AuthProviders by populating `UserAuth.LockedDate`, effective from next login attempt - - Reduced dependencies on all Logging providers, now only depends on `ServiceStack.Interfaces` - - ContentLength is written where possible allowing [Async Progress callbacks on new payloads](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/AsyncProgressTests.cs) - - Non authenticated requests to `/auth` throw a 401 (otherwise returns basic session info) - - Metadata filter now supports IE8/IE9 - - `CopyTo` and `WriteTo` Stream extensions now return bytes transferred - -# v4.0.21 Release Notes - -## Authentication - -### Windows Auth Provider for ASP.NET - -An ASP.NET WindowsAuth Provider preview is available. This essentially wraps the existing Windows Auth support baked into ASP.NET and adds an adapter for [ServiceStack's Multi-Provider Authentication model](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization). - -It can be registered just like any other Auth Provider, i.e. in the AuthFeature plugin: - -```csharp -Plugins.Add(new AuthFeature( - () => new CustomUserSession(), - new IAuthProvider[] { - new AspNetWindowsAuthProvider(this) { AllowAllWindowsAuthUsers = true }, - } -)); -``` - -By default it only allows access to users in `AspNetWindowsAuthProvider.LimitAccessToRoles`, but can be overridden with `AllowAllWindowsAuthUsers=true` to allow access to all Windows Auth users as seen in the example above. - -Credentials can be attached to ServiceStack's Service Clients the same way [as .NET WebRequest's](http://stackoverflow.com/a/3563033/85785) by assingning the `Credentials` property, e.g: - -```csharp -var client = new JsonServiceClient(BaseUri) { - Credentials = CredentialCache.DefaultCredentials, -}; - -var response = client.Get(new RequiresAuth { Name = "Haz Access!" }); -``` - -To help with debugging, [?debug=requestinfo](https://github.com/ServiceStack/ServiceStack/wiki/Debugging#request-info) has been extended to include the Request's current Logon User info: - -![WindowsAuth DebugInfo](https://github.com/ServiceStack/Assets/raw/master/img/release-notes/debuginfo-windowsauth.png) - -> We're interested in hearing future use-cases this can support, feedback on this and future integration with Windows Auth are welcomed on [the Active Directory Integration feature request](http://servicestack.uservoice.com/forums/176786-feature-requests/suggestions/4725924-built-in-active-directory-authentication-suport). - -### New GitHub and other OAuth Providers available - -Thanks to [Rouslan Grabar](https://github.com/iamruss) we now have a number of new OAuth providers built into ServiceStack, including authentication with GitHub, Russia's most popular search engine [Yandex](http://www.yandex.ru/) and Europe's largest Social Networks after Facebook, [VK](http://vk.com) and [Odnoklassniki](http://odnoklassniki.ru/): - -```csharp -Plugins.Add(new AuthFeature( - () => new CustomUserSession(), - new IAuthProvider[] { - new GithubAuthProvider(appSettings), - new YandexAuthProvider(appSettings), - new VkAuthProvider(appSettings), - new OdnoklassnikiAuthProvider(appSettings), - } -)); -``` - -### Extended Auth DTO's - -You can now test whether a user is authenticated by calling the Auth Service without any parameters, e.g. `/auth` which will return summary auth info of the currently authenticated user or a `401` if the user is not authenticated. A `DisplayName` property was added to `AuthenticateResponse` to return a friendly name of the currently authenticated user. - -## [Portable ServiceStack](https://github.com/ServiceStack/ServiceStack.Gap) - -A new [ServiceStack.Gap](https://github.com/ServiceStack/ServiceStack.Gap) Repository and NuGet package was added to help with creating ServiceStack-powered Desktop applications. - -ServiceStack has a number of features that's particularly well-suited for these kind of apps: - - - It allows your services to be self-hosted using .NET's HTTP Listener - - It supports pre-compiled Razor Views - - It supports Embedded resources - - It supports an embedded database in Sqlite and OrmLite - - It can be ILMerged into a single .exe - -Combined together this allows you to encapsulate your ServiceStack application into a single cross-platform .exe that can run on Windows or OSX. - -To illustrate the potential of embedded ServiceStack solutions, a portable version [httpbenchmarks.servicestack.net](https://httpbenchmarks.servicestack.net) was created targetting a number of platforms below: - -> **[BenchmarksAnalyzer.zip](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/BenchmarksAnalyzer.zip)** - Single .exe that opens the BenchmarksAnalyzer app in the users browser - -[![Partial Console Screenshot](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/gap/partial-exe.png)](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/BenchmarksAnalyzer.zip) - -> **[BenchmarksAnalyzer.Mac.zip](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/BenchmarksAnalyzer.Mac.zip)** - Self-hosted app running inside a OSX Cocoa App Web Browser - -[![Partial OSX Screenshot](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/gap/partial-osx.png)](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/BenchmarksAnalyzer.Mac.zip) - -> **[BenchmarksAnalyzer.Windows.zip](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/BenchmarksAnalyzer.Windows.zip)** - Self-hosted app running inside a Native WinForms app inside [CEF](https://code.google.com/p/chromiumembedded/) - -[![Partial Windows Screenshot](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/gap/partial-win.png)](https://github.com/ServiceStack/ServiceStack.Gap/raw/master/deploy/BenchmarksAnalyzer.Windows.zip) - -### Usage - -By default `BenchmarksAnalyzer.exe` will scan the directory where it's run from, it also supports being called with the path to `.txt` or `.zip` files to view or even a directory where output files are located. Given this there are a few popular ways to use Benchmarks Analyzer: - - - Drop `BenchmarksAnalyzer.exe` into a directory of benchmark outputs before running it - - Drop a `.zip` or folder onto the `BenchmarksAnalyzer.exe` to view those results - -> Note: It can also be specified as a command-line argument, e.g: "BenchmarksAnalyzer.exe path\to\outputs" - -![Benchmarks Analyzer Usage](https://github.com/ServiceStack/Assets/raw/master/img/gap/benchmarksanalyzer-usage.gif) - -### ServiceStack.Gap Developer Guide - -The guides on how each application was created is on [ServiceStack.Gap](https://github.com/ServiceStack/ServiceStack.Gap) site, i.e: - - - [Self-Hosting Console App](https://github.com/ServiceStack/ServiceStack.Gap#self-hosting-console-app) - - [Windows Forms App with Chromium Embedded Framework and CefSharp](https://github.com/ServiceStack/ServiceStack.Gap#winforms-with-chromium-embedded-framework) - - [Mac OSX Cocoa App with Xmarain.Mac](https://github.com/ServiceStack/ServiceStack.Gap#mac-osx-cocoa-app-with-xmarainmac) - -## Other Framework Features - -### Filtering support added to Metadata pages - -You can now filter services on ServiceStack's `/metadata` page: - -![Metadata Filter](https://github.com/ServiceStack/Assets/raw/master/img/release-notes/metadata-filter.png) - -### Typed Request Filters - -A more typed API to register Global Request and Response filters per Request DTO Type are available under the `RegisterTyped*` API's in AppHost. These can be used to provide more flexibility in multi-tenant solutions by attaching custom data on incoming requests, e.g: - -```csharp -public override void Configure(Container container) -{ - RegisterTypedRequestFilter((req, res, dto) => - { - var route = req.GetRoute(); - if (route != null && route.Path == "/tenant/{TenantName}/resource") - { - dto.SubResourceName = "CustomResource"; - } - }); -} -``` - -Typed Filters can also be used to apply custom behavior on Request DTO's sharing a common interface, e.g: - -```csharp -public override void Configure(Container container) -{ - RegisterTypedRequestFilter((req, res, dtoInterface) => { - dtoInterface.SharedProperty = "Is Shared"; - }); -} -``` - -### Buffered Stream option has now added to Response - -Response streams can be buffered in the same way as you can buffer Request streams by setting `UseBufferedStream=true`, e.g: - -```csharp -appHost.PreRequestFilters.Add((httpReq, httpRes) => { - httpReq.UseBufferedStream = true; - httpRes.UseBufferedStream = true; -}); - -``` - -### AfterInitCallbacks added to AppHost - -You can register callbacks to add custom logic straight after the AppHost has finished initializing. E.g. you can find all Roles specified in `[RequiredRole]` attributes with: - -```csharp -appHost.AfterInitCallbacks.Add(host => -{ - var allRoleNames = host.Metadata.OperationsMap - .SelectMany(x => x.Key.AllAttributes() - .Concat(x.Value.ServiceType.AllAttributes())) - .SelectMany(x => x.RequiredRoles); -}); -``` - -### Request Scopes can be configured to use ThreadStatic - -Request Scoped dependencies are stored in `HttpRequest.Items` for ASP.NET hosts and uses Remoting's `CallContext.LogicalData` API's in self-hosts. Using the Remoting API's can be problematic in old versions of Mono or when executed in test runners. - -If this is an issue the RequestContext can be configured to use ThreadStatic with: - -```csharp -RequestContext.UseThreadStatic = true; -``` - -### Logging - -Updated Logging providers to allow `debugEnabled` in their LogFactory constructor, e.g: - -```csharp -LogFactory.LogManager = new NullLogFactory(debugEnabled:false); -LogFactory.LogManager = new ConsoleLogFactory(debugEnabled:true); -LogFactory.LogManager = new DebugLogFactory(debugEnabled:true); -``` - -Detailed command logging is now enabled in OrmLite and Redis when `debugEnabled=true`. The external Logging provider NuGet packages have also been updated to use their latest version. - -### Razor - - - Enabled support for Razor `@helpers` and `@functions` in Razor Views - - Direct access to Razor Views in `/Views` is now denied by default - -### Service Clients - - - Change Silverlight to auto emulate HTTP Verbs for non GET or POST requests - - Shorter aliases added on `PostFileWithRequest` which uses the Request DTO's auto-generated url - - The [PCL version of ServiceStack.Interfaces](https://github.com/ServiceStackApps/HelloMobile) now supports a min version of .NET 4.0 - -## OrmLite - -### Exec and Result Filters - -A new `CaptureSqlFilter` Results Filter has been added which shows some of the power of OrmLite's Result filters by being able to capture SQL Statements without running them, e.g: - -```csharp -public class CaptureSqlFilter : OrmLiteResultsFilter -{ - public CaptureSqlFilter() - { - SqlFilter = CaptureSql; - SqlStatements = new List(); - } - - private void CaptureSql(string sql) - { - SqlStatements.Add(sql); - } - - public List SqlStatements { get; set; } -} -``` - -This can then be wrapped around existing database calls to capture and print the generated SQL, e.g: - -```csharp -using (var captured = new CaptureSqlFilter()) -using (var db = OpenDbConnection()) -{ - db.CreateTable(); - db.Count(x => x.Age < 50); - db.Insert(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix" }); - db.Delete(new { FirstName = "Jimi", Age = 27 }); - - var sql = string.Join(";\n", captured.SqlStatements.ToArray()); - sql.Print(); -} -``` - -#### Exec filters can be limited to specific Dialect Providers - -```csharp -OrmLiteConfig.DialectProvider.ExecFilter = execFilter; -``` - -### OrmLite's custom SqlBuilders now implement ISqlExpression - -OrmLite provides good support in integrating with external or custom SQL builders that implement OrmLite's simple `ISqlExpression` interface which can be passed directly to `db.Select()` API. This has now been added to OrmLite's other built-in SQL Builders, e.g: - -#### Using JoinSqlBuilder - -```csharp -var joinQuery = new JoinSqlBuilder() - .LeftJoin(x => x.Id, x => x.UserId, - sourceWhere: x => x.Age > 18, - destinationWhere: x => x.Country == "Italy"); - -var results = db.Select(joinQuery); -``` - -#### Using SqlBuilder - -```csharp -var tmpl = sb.AddTemplate( - "SELECT * FROM User u INNER JOIN Address a on a.UserId = u.Id /**where**/"); -sb.Where("Age > @age", new { age = 18 }); -sb.Where("Countryalias = @country", new { country = "Italy" }); - -var results = db.Select(tmpl, tmpl.Parameters); -``` - -### Other Changes - - - OrmLite can create tables with any numeric type in all providers. Fallbacks were added on ADO.NET providers that don't support the numeric type natively - - Load/Save Reference property conventions can be [inferred on either aliases or C# property names](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/LoadReferencesTests.cs#L207) - - OrmLite can create tables from types with Indexers - - Can use `OrmLiteConfig.StripUpperInLike=true` to [remove use of upper() in Sql Expressions](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/Expression/SelectExpressionTests.cs#L205) - -## Redis - -A new `TrackingRedisClientsManager` client manager has been added by [Thomas James](https://github.com/tvjames) to help diagnose Apps that are leaking redis connections. - -# v4.0.19 Release Notes - -## Embedded ServiceStack - -This release has put all the final touches together to open up interesting new use-cases for deploying ServiceStack solutions into a single self-contained, cross-platform, xcopy-able executable. - -By leveraging ServiceStack's support for [self-hosting](https://github.com/ServiceStack/ServiceStack/wiki/Self-hosting), the [Virtual File System](https://github.com/ServiceStack/ServiceStack/wiki/Virtual-file-system) support for Embedded Resources and the new support for [Compiled Razor Views](#compiled-razor-views), we can embed all images/js/css Razor views and Markdown Razor assets into a single dll that can be ILMerged with the preferred ServiceStack dependencies (inc. OrmLite.Sqlite) into a single cross-platform .NET exe: - -### Razor Rockstars - Embedded Edition - -To showcase its potential we've compiled the entire [Razor Rockstars](http://razor.servicestack.net/) website into a [single dll](https://github.com/ServiceStack/RazorRockstars/tree/master/src/RazorRockstars.CompiledViews) that's referenced them in the multiple use-case scenarios below: - -> Note: all demo apps are unsigned so will require ignoring security warnings to run. - -### As a Single Self-Hosted .exe - -The examples below merges Razor Rockstars and ServiceStack into a Single, cross-platform, self-hosting Console App, that opens up Razor Rockstars homepage in the users default web browser when launched: - -> [RazorRockstars.exe](https://github.com/ServiceStack/RazorRockstars/raw/master/build/RazorRockstars.exe) - Self-Host running in a Console App - -> [WindowlessRockstars.exe](https://github.com/ServiceStack/RazorRockstars/raw/master/build/WindowlessRockstars.exe) - Headless Self-Hosted Console App running in the background - -[![SelfHost](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/self-host.png)](https://github.com/ServiceStack/RazorRockstars/raw/master/build/RazorRockstars.exe) - -> The total size for the entire uncompressed **RazorRockstars.exe** ServiceStack website comes down to just **4.8MB** (lighter than the 5MB footprint of EntityFramework.dll) that includes **1.5MB** for RazorRockstars html/img/js/css website assets and **630kb** for native Windows sqlite3.dll. - -### Running inside Windows and OSX Native Desktop Apps - -You can also achieve a [PhoneGap-like experience](http://phonegap.com/) by hosting ServiceStack inside native .NET Desktop App shells for OSX and Windows: - -> [RazorRockstars.MacHost.app](https://github.com/ServiceStack/RazorRockstars/raw/master/build/RazorRockstars.MacHost.app.zip) - Running inside a Desktop Cocoa OSX app using [Xamarin.Mac](https://xamarin.com/mac) - -[![OSX Cocoa App](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/osx-host.png)](https://github.com/ServiceStack/RazorRockstars/raw/master/build/RazorRockstars.MacHost.app.zip) - -> [WpfHost.zip](https://github.com/ServiceStack/RazorRockstars/raw/master/build/WpfHost.zip) - Running inside a WPF Desktop app - -[![WPF App](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/wpf-host.png)](https://github.com/ServiceStack/RazorRockstars/raw/master/build/WpfHost.zip) - -Surprisingly .NET Desktop apps built with [Xamarin.Mac on OSX](https://xamarin.com/mac) using Cocoa's WebKit-based WebView widget provides a superior experience over WPF's built-in WebBrowser widget which renders in an old behind-the-times version of IE. To improve the experience on Windows we're exploring better experiences on Windows by researching options around the [Chromium Embedded Framework](https://code.google.com/p/chromiumembedded/) and the existing managed .NET wrappers: [CefGlue](http://xilium.bitbucket.org/cefglue/) and [CefSharp](https://github.com/cefsharp/CefSharp). - -**Xamarin.Mac** can deliver an even better end-user experience by bundling the Mono runtime with the app avoiding the need for users to have Mono runtime installed. Incidentally this is the same approach used to deploy .NET OSX apps to the [Mac AppStore](http://www.apple.com/osx/apps/app-store.html). - -### Standard Web Hosts - -As the only differences when using the embedded .dll is that it embeds all img/js/css/etc assets as embedded resources and makes use of compiled razor views, it can also be used in standard web hosts configurations which are effectively just lightweight wrappers containing the App configuration and references to external dependencies: - - - [CompiledViews in SelfHost](https://github.com/ServiceStack/RazorRockstars/tree/master/src/RazorRockstars.CompiledViews.SelfHost) - - [CompiledViews in ASP.NET Web Host](https://github.com/ServiceStack/RazorRockstars/tree/master/src/RazorRockstars.CompiledViews.WebHost) - -Benefits of Web Hosts referencing embedded dlls include easier updates by being able to update a websites core functionality by copying over a single **.dll** as well as improved performance for Razor views by eliminating Razor compile times. - -### ILMerging - -Creating the single **RazorRockstars.exe** is simply a matter of [ILMerging all the self-host project dlls](https://github.com/ServiceStack/RazorRockstars/blob/master/build/ilmerge.bat) into a single executable. - -There are only a couple of issues that need to be addressed when running in a single ILMerged .exe: - -Assembly names are merged together so all registration of assemblies in `Config.EmbeddedResourceSources` end up referencing the same assembly which results in only serving embedded resources in the host assembly namespace. To workaround this behavior we've added a more specific way to reference assemblies in `Config.EmbeddedResourceBaseTypes`, e.g: - - ```csharp - SetConfig(new HostConfig { - DebugMode = true, - EmbeddedResourceBaseTypes = { GetType(), typeof(BaseTypeMarker) }, -}); -``` - -Where `BaseTypeMarker` is just a dummy class that sits on the base namespace of the class library that's used to preserve the Assembly namespace. - -The other limitation is not being able to merge unmanaged .dll's, which is what's needed for RazorRockstars as it makes use of the native `sqlite3.dll`. An easy workaround for this is to make `sqlite3.dll` an embedded resource then simply write it out to the current directory where OrmLite.Sqlite can find it when it first makes an sqlite connection, e.g: - - ```csharp -public static void ExportWindowsSqliteDll() -{ - if (Env.IsMono) - return; //Uses system sqlite3.so or sqlite3.dylib on Linux/OSX - - var resPath = "{0}.sqlite3.dll".Fmt(typeof(AppHost).Namespace); - - var resInfo = typeof(AppHost).Assembly.GetManifestResourceInfo(resPath); - if (resInfo == null) - throw new Exception("Couldn't load sqlite3.dll"); - - var dllBytes = typeof(AppHost).Assembly.GetManifestResourceStream(resPath).ReadFully(); - var dirPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - - var filePath = Path.Combine(dirPath, "sqlite3.dll"); - - File.WriteAllBytes(filePath, dllBytes); -} -``` - -This isn't required for Mono as it's able to make use of the preinstalled version of sqlite on OSX and Linux platforms. - -### Compiled Razor Views - -Support for Compiled Razor Views has landed in ServiceStack thanks to the efforts of [Carl Healy](https://github.com/Tyst). - -The primary benefits of compiled views is improved performance by eliminating compile times of Razor views. They also provide static compilation benefits by highlighting compile errors during development and also save you from deploying multiple `*.cshtml` files with your app since they all end up pre-compiled in your Assembly. - -Enabling compiled views is fairly transparent where you only need to install the new [Razor.BuildTask NuGet Package](https://www.nuget.org/packages/ServiceStack.Razor.BuildTask/) to the project containing your `.cshtml` Razor Views you want to compile: - - PM> Install-Package ServiceStack.Razor.BuildTask - -This doesn't add any additional dlls to your project, instead it just sets the **BuildAction** to all `*.cshtml` pages to `Content` and adds an MSBuild task to your project file to pre-compile razor views on every build. - -Then to register assemblies containing compiled razor views with Razor Format you just need to add it to `RazorFormat.LoadFromAssemblies`, e.g: - -```csharp -Plugins.Add(new RazorFormat { - LoadFromAssemblies = { typeof(RockstarsService).Assembly } -}); -``` - -The Compiled Views support continues to keep a great development experience in [DebugMode](https://github.com/ServiceStack/ServiceStack/wiki/Debugging#debugmode) where all Razor Views are initially loaded from the Assembly but then continues to monitor the file system for modified views, automatically compiling and loading them on the fly. - -## [Postman Support](http://www.getpostman.com/) - -We've added great support for the very popular [Postman Rest Client](http://www.getpostman.com/) in this release which is easily enabled by just registering the plugins below: - -```csharp -Plugins.Add(new PostmanFeature()); -Plugins.Add(new CorsFeature()); -``` - -> As it makes cross-site requests, Postman also requires CORS support. - -Once enabled, a link with appear in your metadata page: - -![Postman Metadata link](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/postman-metadata.png) - -Which by default is a link to `/postman` route that returns a JSON postman collection that can be imported into postman by clicking on **import collections** icon at the top: - -![Postman Screenshot](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/postman.png) - -Once imported it will populate a list of available routes which you can select and easily call from the Postman UI. Just like the [Swagger Support](https://github.com/ServiceStack/ServiceStack/wiki/Swagger-API) the list of operations returned respects the [Restriction Attributes](https://github.com/ServiceStack/ServiceStack/wiki/Restricting-Services) and only shows the operations each user is allowed to see. - -The above screenshot shows how to call the `SearchRockstars` Route `/rockstars/{Id}` which returns the rockstar with the matching id. - -The screenshot above also illustrates some of the customization that's available with the [Email Contacts](https://github.com/ServiceStack/EmailContacts/) metadata imported with the default settings and the Razor Rockstars metadata imported with a customized label: - - /postman?label=type,+,route - -The `label` param accepts a collection of string tokens that controls how the label is formatted.The `type` and `route` are special tokens that get replaced by the **Request DTO name** and **Route** respectively. Everything else are just added string literals including the `+` character which is just a url-encoded version of ` ` space character. - -Here are some examples using the example definition below: - -```csharp -[Route("/contacts/{Id}")] -public class GetContact { ... } -``` - -
      - - - - - - - - - - - - - - - - -
      /postman?label=typeGetContact
      /postman?label=route/contacts/{Id}
      /postman?label=type:englishGet contact
      /postman?label=type:english,+(,route,)Get contact (/contacts/{Id})
      - -The default label format can also be configured when registering the Postman plugin, e.g: - -```csharp -Plugins.Add(new PostmanFeature { - DefaultLabelFmt = new List { "type:english", " ", "route" } -}); -``` - -### Support for authenticated requests - -We've also made it easy to call authentication-only services with the `/postman?exportSession=true` parameter which will redirect to a url that captures your session cookies into a deep-linkable url like `/postman?ssopt=temp&ssid={key}&sspid={key}` that can be copied into Postman. - -This lets you replace your session cookies with the session ids on the url, effectively allowing you to take over someone elses session, in this case telling Postman to make requests on your behalf using your authenticated session cookies. - -As this functionality is potentially dangerous it's only enabled by default in **DebugMode** but can be overridden with: - -```csharp -Plugins.Add(new PostmanFeature { - EnableSessionExport = true -}); -``` - -### Other Customizations - -Other options include hosting postman on an alternate path, adding custom HTTP Headers for each Postman request and providing friendly aliases for Request DTO Property Types that you want to appear to external users, in this case we can show `DateTime` types as `Date` in Postmans UI: - -```csharp -Plugins.Add(new PostmanFeature { - AtRestPath = "/alt-postman-link", - Headers = "X-Custom-Header: Value\nXCustom2: Value2", - FriendlyTypeNames = { {"DateTime", "Date"} }, -}); -``` - -## [Cascading layout templates](http://razor.servicestack.net/#no-ceremony) - -Support for [Cascading layout templates](http://razor.servicestack.net/#no-ceremony) for Razor ViewPages inside `/Views` were added in this release by [@Its-Tyson](https://github.com/Its-Tyson). - -This works the same intuitive way it does for external Razor Content pages where the `_Layout.cshtml` nearest to the selected View will be used by default, e.g: - - /Views/_Layout.cshtml - /Views/Public.cshtml - /Views/Admin/_Layout.cshtml - /Views/Admin/Dashboard.cshtml - -Where `/Views/Admin/Dashboard.cshtml` by default uses the `/Views/Admin/_Layout.cshtml` template. - -## Async APIs added to HTTP Utils - -The following Async versions of [HTTP Utils](https://github.com/ServiceStack/ServiceStack/wiki/Http-Utils) have been added to ServiceStack.Text by [Kyle Gobel](https://github.com/KyleGobel): - -```csharp -Task GetStringFromUrlAsync(...) -Task PostStringToUrlAsync(...) -Task PostToUrlAsync(...) -Task PostJsonToUrlAsync(...) -Task PostXmlToUrlAsync(...) -Task PutStringToUrlAsync(...) -Task PutToUrlAsync(...) -Task PutJsonToUrlAsync(...) -Task PutXmlToUrlAsync(...) -Task DeleteFromUrlAsync(...) -Task OptionsFromUrlAsync(...) -Task HeadFromUrlAsync(...) -Task SendStringToUrlAsync(...) -``` - -## Redis - -The latest [stable release of redis-server](http://download.redis.io/redis-stable/00-RELEASENOTES) includes support for the new [ZRANGEBYLEX](http://redis.io/commands/zrangebylex) sorted set operations allowing you to query a sorted set lexically. A good showcase for this is available on [autocomplete.redis.io](http://autocomplete.redis.io/) that shows a demo querying all 8 millions of unique lines of the Linux kernel source code in a fraction of a second. - -These new operations are available as a 1:1 mapping with redis-server on IRedisNativeClient: - -```csharp -public interface IRedisNativeClient -{ - ... - byte[][] ZRangeByLex(string setId, string min, string max, int? skip = null, int? take = null); - long ZLexCount(string setId, string min, string max); - long ZRemRangeByLex(string setId, string min, string max); -} -``` - -As well as under more user-friendly APIs under IRedisClient: - -```csharp -public interface IRedisClient -{ - ... - List SearchSortedSet(string setId, string start=null, string end=null, int? skip=null, int? take=null); - long SearchSortedSetCount(string setId, string start=null, string end=null); - long RemoveRangeFromSortedSetBySearch(string setId, string start=null, string end=null); -} -``` - -Just like NuGet version matchers, Redis uses `[` char to express inclusiveness and `(` char for exclusiveness. -Since the `IRedisClient` APIs defaults to inclusive searches, these two APIs are the same: - -```csharp -Redis.SearchSortedSetCount("zset", "a", "c") -Redis.SearchSortedSetCount("zset", "[a", "[c") -``` - -Alternatively you can specify one or both bounds to be exclusive by using the `(` prefix, e.g: - -```csharp -Redis.SearchSortedSetCount("zset", "a", "(c") -Redis.SearchSortedSetCount("zset", "(a", "(c") -``` - -More API examples are available in [LexTests.cs](https://github.com/ServiceStack/ServiceStack.Redis/blob/master/tests/ServiceStack.Redis.Tests/LexTests.cs). - -### Twemproxy support - -This release also includes better support for [twemproxy](https://github.com/twitter/twemproxy), working around missing server commands sent upon connection. - -## OrmLite - -New support for StringFilter allowing you apply custom filter on string values, e.g [remove trailing whitespace](http://stackoverflow.com/a/23261868/85785): - -```csharp -OrmLiteConfig.StringFilter = s => s.TrimEnd(); - -db.Insert(new Poco { Name = "Value with trailing " }); -Assert.That(db.Select().First().Name, Is.EqualTo("Value with trailing")); -``` - -Added implicit support for [escaping wildcards in typed expressions](http://stackoverflow.com/a/23435975/85785) that make use of LIKE, namely `StartsWith`, `EndsWith` and `Contains`, e.g: - -```csharp -db.Insert(new Poco { Name = "ab" }); -db.Insert(new Poco { Name = "a%" }); -db.Insert(new Poco { Name = "a%b" }); - -db.Count(q => q.Name.StartsWith("a_")); //0 -db.Count(q => q.Name.StartsWith("a%")); //2 -``` - -OrmLite also underwent some internal refactoring to remove duplicate code and re-use existing code-paths. - -### Other Features - - - Allow overriding of `HttpListenerBase.CreateRequest()` for controlling creation of Self-Hosting requests allowing you to force a [Character encoding to override the built-in heuristics](http://stackoverflow.com/a/23381383/85785) for detecting non UTF-8 character encodings - - Support for retrieving untyped `base.UserSession` when inheriting from an untyped MVC `ServiceStackController` - - Added `@Html.RenderErrorIfAny()` to render a pretty bootstrap-styled exception response in a razor view - - The generated WSDL output now replaces all occurances of `http://schemas.servicestack.net/types` with `Config.WsdlServiceNamespace` - - Initialize the CompressedResult Status code with the current HTTP ResponseStatus code - - Plugins implementing `IPreInitPlugin` are now configured immediately after `AppHost.Configure()` - - HttpListeners now unwrap async Aggregate exceptions containing only a Single Exception for better error reporting - - HttpListeners now shares the same behavior as IIS for [redirecting requests for directories without a trailing slash](https://github.com/ServiceStack/ServiceStack/commit/a0a2857721656c7161fcd83eb07609ae4239ea2a) - - [Debug Request Info](https://github.com/ServiceStack/ServiceStack/wiki/Debugging#request-info) now shows file listing of the configured VirtualPathProvider - - Resource Virtual Directories are no longer case-sensitive - - Added new `Config.ExcludeAutoRegisteringServiceTypes` option to exclude services from being implicitly auto registered from assembly scanning. All built-in services in ServiceStack.dll now excluded by default which removes unintentional registration of services from ILMerging. - -# New HTTP Benchmarks example project - -[![HTTP Benchmarks](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/benchmarks-admin-ui.png)](https://httpbenchmarks.servicestack.net/) - -Following the release of the [Email Contacts](https://github.com/ServiceStack/EmailContacts/) solution, a new documented ServiceStack example project allowing you to uploaded Apache HTTP Benchmarks to visualize and analyze their results has been released at: [github.com/ServiceStack/HttpBenchmarks](https://github.com/ServiceStack/HttpBenchmarks) and is hosted at [httpbenchmarks.servicestack.net](https://httpbenchmarks.servicestack.net/). - -### Example Results - - - [Performance of different RDBMS in an ASP.NET Host](https://httpbenchmarks.servicestack.net/databases-in-asp-net) - - [Performance of different ServiceStack Hosts](https://httpbenchmarks.servicestack.net/servicestack-hosts) - -The documentation includes a development guide that walks through the projects different features: - - - Integration with `Glimpse` with support for `DotNetOpenAuth` - - Allow authentication with Twitter, Facebook, Google and LinkedIn OAuth providers - - Enables registration of new user accounts - - Use of `[FallbackRoute]` attribute to allow users to create top-level routes (e.g. twitter.com/name) - - Explains why you want to aim for minimal JS dependencies - - Introduction of **Really Simple MV Pattern** using plain JavaScript - - Integration with multi-file Uploader `FineUploader` - - Processes multiple file uploads including files in **.zip** packages using `DotNetZip` - - Integration with `Highcharts.js` - - Hosting differences of ASP.NET with AWS - - Deploying to AWS and creating customized deployment packages with MSDeploy - - Configuring SSL - - Forcing SSL Redirects - -The repository also includes benchmark scripts and host projects of [all ServiceStack HTTP Hosts](https://github.com/ServiceStack/HttpBenchmarks/tree/master/servers -), which all support runtime configuration of different RDBMS's: - -# v4.0.18 Release Notes - -## New, much faster Self-Host! - -Prior to this release ServiceStack had 2 self-hosting options with different [Concurrency Models](https://github.com/ServiceStack/ServiceStack/wiki/Concurrency-model): - -- `AppHostHttpListenerBase` - Executes requests on the IO callback thread -- `AppHostHttpListenerPoolBase` - Executes requests on .NET's built-in ThreadPool - -Where in typical scenarios (i.e. CPU intensive or blocking IO), executing on .NET's Thread Pool provides better performance. - -This [Self-hosting performance analysis](http://en.rdebug.com/2013/05/06/servicestack-selfhosted-performance-boost/) from the ServiceStack community shows we're able to achieve even better performance by utilizing the excellent [Smart Thread Pool](http://www.codeproject.com/Articles/7933/Smart-Thread-Pool) instead, which is now available in the `AppHostHttpListenerSmartPoolBase` base class. - -The new Smart Pool self-host routinely outperforms all other self hosting options, and does especially well in heavy IO scenarios as seen in the benchmarks below: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Self HostASP.NET/IIS ExpressHttpListener PoolHttpListener
      Database updates1x1.9x2x4.1x
      Single database query1x1.2x1.5x2.6x
      Multiple database queries1x1.2x1.4x2.6x
      Plaintext1x2.3x2.4x1.6x
      Fortunes Razor View1x1.2x1.5x1.8x
      JSON serialization1x1.2x1.4x1x
      - -### Using different Self Host options - -You can easily switch between the different self-hosting options by simply changing your AppHost's base class, e.g: - -```csharp -public class AppHost : AppHostHttpListenerBase { ... } -public class AppHost : AppHostHttpListenerPoolBase { ... } -public class AppHost : AppHostHttpListenerSmartPoolBase { ... } -``` - -Both the HttpListener Pool and SmartPool hosts have configurable pool sizes that can be tweaked to perform better under different scenarios. - -### Optimal Self Hosted option - -As the number of self-hosts grow, we've added a new `AppSelfHostBase` base class that represents an alias for the highest performing self-hosting option with an optimal configuration that we'll continue to tune for performance against typical scenarios. Unless you've identified specific configurations that performs better for your use-case, the recommendation is for new self-hosts to inherit this configuration: - -```csharp -public class AppHost : AppSelfHostBase { ... } -``` - -## OrmLite - -OrmLite received a lot more attention this release with a number of value-added additions: - -### Improved Oracle RDBMS provider - -The OrmLite Oracle Provider has been significantly improved thanks to [Bruce Cowen](https://github.com/BruceCowan-AI) efforts who's brought the quality in-line with other RDBMS providers which now passes OrmLite's test suite. As part of this change, the Oracle Provider now depends on [Oracle's Data Provider for .NET](http://www.oracle.com/technetwork/topics/dotnet/index-085163.html) and can be installed with: - - PM> Install-Package ServiceStack.OrmLite.Oracle - PM> Install-Package ServiceStack.OrmLite.Oracle.Signed - -More notes about the Oracle provider are maintained in the [OrmLite Release Notes](https://github.com/ServiceStack/ServiceStack.OrmLite/#oracle-provider-notes). - -### Improved Typed SqlExpressions - -The existing `db.SqlExpression()` API has a more readable alias in: - -```csharp -db.From(); -``` - -Which now supports an optional SQL **FROM** fragment that can be used to specify table joins, e.g: - - var results = db.Select(db.From("Person INNER JOIN Band ON Person.Id = Band.PersonId")); - -#### New ISqlExpression API - -OrmLite API's have overloads to execute any SQL builders that implement the simple `ISqlExpression` API, i.e: - -```csharp -public interface ISqlExpression -{ - string ToSelectStatement(); -} -``` - -This allows for more readable code when using a decoupled Sql Builder, e.g: - -```csharp -int over40s = db.Scalar(db.From().Select(Sql.Count("*")).Where(q => q.Age > 40)); - -List lastNames = db.Column(db.From().Select(x => x.LastName).Where(q => q.Age == 27)); - -HashSet uniqueAges = db.ColumnDistinct(db.From().Select(x => x.Age).Where(q => q.Age < 50)); - -Dictionary map = db.Dictionary(db.From().Select(x => new {x.Id, x.LastName})); -``` - -#### Partial Selects - -This also improves the APIs for partial SELECT queries, which originally required the use of custom SQL: - -```csharp -var partialColumns = db.SelectFmt(typeof(Shipper), "ShipperTypeId = {0}", 2); -``` - -But can now be expressed in any of the more typed examples below: - -```csharp -var partialColumns = db.Select(db.From().Where(q => q.ShipperTypeId == 2)); -``` - -Or partially populating the same POCO with only the columns specified: - -```csharp -var partialColumns = db.Select(q => q.Select(x => new { x.Phone, x.CompanyName }) - .Where(x => x.ShipperTypeId == 2)); - -var partialColumns = db.Select(q => q.Select("Phone, CompanyName") - .Where(x => x.ShipperTypeId == 2)); -``` - -#### Nullable Limit APIs - -The Limit API's now accept `int?` making it easier to apply paging in your ServiceStack services, e.g: - -```csharp -public Request -{ - public int? Skip { get; set; } - public int? Take { get; set; } -} - -public List
      Any(Request request) -{ - return Db.Select(db.From
      .Limit(request.Skip, request.Take)); -} -``` - -Which will only filter the results for the values provided. Aliases for `Skip()` and `Take()` are also available if LINQ naming is preferred. - -#### New AliasNamingStrategy - -A new alias naming strategy was added (in addition to `[Alias]` attribute) that lets you specify a dictionary of Table and Column aliases OrmLite should used instead, e.g: - -```csharp -OrmLiteConfig.DialectProvider.NamingStrategy = new AliasNamingStrategy { - TableAliases = { { "MyTable", "TableAlias" } }, - ColumnAliases = { { "MyField", "ColumnAlias" } }, -}; -``` - -Which OrmLite will use instead, e.g when creating a table: - -```csharp -db.CreateTable(); -``` - -Aliases can also be referenced when creating custom SQL using the `SqlTable()` and `SqlColumn()` extension methods, e.g: - -```csharp -var result = db.SqlList( - "SELECT * FROM {0} WHERE {1} = {2}".Fmt( - "MyTable".SqlTable(), - "MyField".SqlColumn(), "foo".SqlValue())); -``` - -#### New Exists APIs - -Nicer if you just need to check for existence, instead of retrieving a full result-set e.g: - -```csharp -bool hasUnder50s = db.Exists(x => x.Age < 50); -bool hasUnder50s = db.Exists(db.From().Where(x => x.Age < 50)); -``` - -## Redis - -### New Scan APIs Added - -Redis v2.8 introduced a beautiful new [SCAN](http://redis.io/commands/scan) operation that provides an optimal strategy for traversing a redis instance entire keyset in managable-size chunks utilizing only a client-side cursor and without introducing any server state. It's a higher performance alternative and should be used instead of [KEYS](http://redis.io/commands/keys) in application code. SCAN and its related operations for traversing members of Sets, Sorted Sets and Hashes are now available in the Redis Client in the following API's: - -```csharp -public interface IRedisClient -{ - ... - IEnumerable ScanAllKeys(string pattern = null, int pageSize = 1000); - IEnumerable ScanAllSetItems(string setId, string pattern = null, int pageSize = 1000); - IEnumerable> ScanAllSortedSetItems(string setId, string pattern = null, int pageSize = 1000); - IEnumerable> ScanAllHashEntries(string hashId, string pattern = null, int pageSize = 1000); -} - -//Low-level API -public interface IRedisNativeClient -{ - ... - ScanResult Scan(ulong cursor, int count = 10, string match = null); - ScanResult SScan(string setId, ulong cursor, int count = 10, string match = null); - ScanResult ZScan(string setId, ulong cursor, int count = 10, string match = null); - ScanResult HScan(string hashId, ulong cursor, int count = 10, string match = null); -} -``` - -The `IRedisClient` provides a higher-level API that abstracts away the client cursor to expose a lazy Enumerable sequence to provide an optimal way to stream scanned results that integrates nicely with LINQ, e.g: - -```csharp -var scanUsers = Redis.ScanAllKeys("urn:User:*"); -var sampleUsers = scanUsers.Take(10000).ToList(); //Stop after retrieving 10000 user keys -``` - -### New HyperLog API - -The development branch of Redis server (available when v3.0 is released) includes an ingenious algorithm to approximate the unique elements in a set with maximum space and time efficiency. For details about how it works see Redis's creator Salvatore's blog who [explains it in great detail](http://antirez.com/news/75). Essentially it lets you maintain an efficient way to count and merge unique elements in a set without having to store its elements. -A Simple example of it in action: - -```csharp -redis.AddToHyperLog("set1", "a", "b", "c"); -redis.AddToHyperLog("set1", "c", "d"); -var count = redis.CountHyperLog("set1"); //4 - -redis.AddToHyperLog("set2", "c", "d", "e", "f"); - -redis.MergeHyperLogs("mergedset", "set1", "set2"); - -var mergeCount = redis.CountHyperLog("mergedset"); //6 -``` - -## HTTP and MQ Service Clients - -### Substitutable OneWay MQ and HTTP Service Clients - -Service Clients and MQ Clients have become a lot more interoperable where all MQ Clients now implement the Service Clients `IOneWayClient` API which enables writing code that works with both HTTP and MQ Clients: - -```csharp -IOneWayClient client = GetClient(); -client.SendOneWay(new RequestDto { ... }); -``` - -Likewise the HTTP Service Clients implement the Messaging API `IMessageProducer`: - -```csharp -void Publish(T requestDto); -void Publish(IMessage message); -``` - -When publishing a `IMessage` the message metadata are sent as HTTP Headers with an `X-` prefix. - -### UploadProgress added on Service Clients - -Which works similar to [OnDownloadProgress](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/AsyncProgressTests.cs) where you can specify a callback to provide UX Progress updates, e.g: - -```csharp -client.OnUploadProgress = (bytesWritten, total) => "Written {0}/{1} bytes...".Print(bytesWritten, total); - -client.PostFileWithRequest(url, new FileInfo(path), new Upload { CreatedBy = "Me" }); -``` - -## Razor Support - -Our support for [No Ceremony Razor pages](https://github.com/ServiceStack/EmailContacts/#the-no-ceremony-option---dynamic-pages-without-controllers) has been very well received which has all but alleviated the need of requiring services / controllers for dynamic html pages. One of the areas where a Service may be required is for execution any custom request filters, which we've now added support for by letting you choose to execute all request filters for a specific Request with: - -```csharp -@{ - ApplyRequestFilters(new RequestDto()); -} -``` - -This will execute all the Request Filters applied to the specified Request DTO. Any one of the filters ends the request (e.g. with a redirect) and the rest of the Razor page will stop execution. - -Likewise it's possible to redirect from within Razor with: - -```csharp -@{ - if (!IsAuthenticated) { - Response.RedirectToUrl("/login"); - throw new StopExecutionException(); - } -} -``` -An alternative to `StopExecutionException` is to have an explicit `return;`, the difference being that it will continue to execute the remainder of the page, although neither approach will emit any Razor output to the response. - -As redirecting non-authenticated users is a common use-case it's also available as a one-liner: - -```csharp -@{ - RedirectIfNotAuthenticated(); -} -``` - -Which if no url is specified it will redirect to the path configured on `AuthFeature.HtmlRedirect`. - -### ss-utils.js - -A few enhancements were added to ServiceStack's **/js/ss-utils.js** is ServiceStack's built-in JS library, first demonstrated in [Email Contacts solution](https://github.com/ServiceStack/EmailContacts/#servicestack-javascript-utils---jsss-utilsjs): - -Declarative event handlers can send multiple arguments: - -```html -
        -
      • Foo
      • -
      • Bar
      • -
      -``` - -```javascript -$(document).bindHandlers({ - single: function(){ - var li = this; - }, - multiple: function(arg1, arg2) { - var li = this; - } -}); -``` - -Trigger client-side validation errors with `setFieldError()`: - -```javascript -$("form").bindForm({ - validate: function(){ - var params = $(this).serializeMap(); - if (params.Password != params.Confirm){ - $(this).setFieldError('Password', 'Passwords to not match'); - return false; - } - } -}); -``` - -Model binding now also populates `data-href` and `data-src` attributes e.g: - -```html - -``` - -```javascript -$("form").applyValues({ FieldName: imgUrl }); -``` -## Other Changes - -### Restriction attributes allowed on Services - -Restriction attributes can be added on Service classes in addition to Request DTOs (which still take precedence). - -```csharp -[Restrict(LocalhostOnly = true)] -public class LocalHostOnlyServices : Service { ... } -``` - -## AppSettings - -### New OrmLiteAppSettings - -Added new read/write AppSettings config option utilizing OrmLite as the back-end. -This now lets you maintain your applications configuration in any [RDBMS back-end OrmLite supports](https://github.com/ServiceStack/ServiceStack.OrmLite/#download). It basically works like a mini Key/Value database in which can store any serializable value against any key which is maintained into the simple Id/Value `ConfigSettings` table. - -#### Usage - -Registration just uses an OrmLite DB Factory, e.g: - -```csharp -container.Register(c => new OrmLiteAppSettings(c.Resolve())); -var appSettings = container.Resolve(); -appSettings.InitSchema(); //Create the ConfigSettings table if it doesn't exist -``` - -It then can be accessed like any [AppSetting APIs](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.Common.Tests/Configuration/AppSettingsTests.cs): - -```csharp -//Read the `MyConfig` POCO stored at `config` otherwise use default value if it doesn't exist -MyConfig config = appSettings.Get("config", new MyConfig { Key = "DefaultValue" }); -``` - -It also supports writing config values in addition to the AppSettings read-only API's, e.g: - -```csharp -var latestStats = appSettings.GetOrCreate("stats", () => statsProvider.GetLatest()); -``` - -### Extract key / value settings from text file - -The new ParseKeyValueText extension method lets you extract key / value data from text, e.g: - -```csharp -var configText = @" -StringKey string value -IntKey 42 -ListKey A,B,C,D,E -DictionaryKey A:1,B:2,C:3,D:4,E:5 -PocoKey {Foo:Bar,Key:Value}"; - -Dictionary configMap = configText.ParseKeyValueText(delimiter:" "); -``` - -When combined with the existing `DictionarySettings`, enables a rich, simple and clean alternative to .NET's App.config config section for reading structured configuration into clean data structures, e.g: - -```csharp -IAppSettings appSettings = new DictionarySettings(configMap); - -string value = appSettings.Get("StringKey"); - -int value = appSettings.Get("IntKey", defaultValue:1); - -List values = appSettings.GetList("ListKey"); - -Dictionary valuesMap = appSettings.GetList("DictionaryKey"); - -MyConfig config = appSettings.Get("PocoKey", new MyConfig { Key = "DefaultValue"}); -``` - -As we expect this to be a popular combination we've combined them into a single class that accepts a filePath, providing a simple alternative to custom Web.config configurations: - -```csharp -var appSettings = new TextFileSettings("~/app.settings".MapHostAbsolutePath()); -``` - -### PerfUtils - -We've included the [C# Benchmark Utils](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Common/PerfUtils.cs) previously used in [Sudoku Benchmarks](https://github.com/dartist/sudoku_solver#benchmarks) originally inspired from [Dart's benchmark_harness](https://github.com/dart-lang/benchmark_harness). Unlike other benchmark utils, it runs for a specified period of time (2000ms by default) then returns the avg iteration time in microseconds. Here's an example usage comparing performance of maintaining a unique int collection between HashSet vs List: - -```csharp -var rand = new Random(); -var set = new HashSet(); -var avgMicroSecs = PerfUtils.Measure( - () => set.Add(rand.Next(0, 1000)), runForMs:2000); - -"HashSet: {0}us".Print(avgMicroSecs); - -var list = new List(); -avgMicroSecs = PerfUtils.Measure(() => { - int i = rand.Next(0, 1000); - if (!list.Contains(i)) - list.Add(i); - }, runForMs: 2000); - -"List: {0}us".Print(avgMicroSecs); -``` - -### Minor Changes - -- Numeric type mismatches between POCOs used in OrmLite and underlying RDBMS Tables are transparently coerced -- `Vary: Accept` is included in Global HTTP Headers to resolve browsers caching different Content-Type for the same url -- Razor configuration removes references to a specific version of ASP.NET Web Pages and adds `System` to default namespaces -- Swagger API emits an ApiVersion, configurable with `Config.ApiVersion` that defaults to "1.0" -- Partials now render inside user-defined Razor sections -- Added `email.ToGravatarUrl()` extension method to retrieve avatar url from an email -- Replaced self-hosts use of ThreadStatics with CallContext to preserve Request scope in async requests -- Avoid runtime razor exceptions in Mono by not registering duplicate assemblies (i.e. from GAC) in RazorHost -- AppHostHttpListenerPoolBase self-host has a default pool size of `16 x Environment.ProcessorCount` -- ServiceStack's `IAppHost.CustomErrorHttpHandlers` can now override built-in HTTP Error handlers and fallback to generic error responses - -### New Signed Projects - -- [ServiceStack.ProtoBuf.Signed](https://www.nuget.org/packages/ServiceStack.ProtoBuf.Signed) - -### Breaking Changes - -- Moved `Config.GlobalHtmlErrorHttpHandler` to `IAppHost.GlobalHtmlErrorHttpHandler` - - -# v4.0.15 Release Notes - -### Individual Products now available - -In this release we've added the most requested "non-technical feature" by creating new licenses for [individual ServiceStack products](https://servicestack.net/#products) which provide -much better value when only using one of ServiceStack's stand-alone libraries on their own. - -New products available: - - - [servicestack.net/text](https://servicestack.net/text) - - [servicestack.net/redis](https://servicestack.net/redis) - - [servicestack.net/ormlite](https://servicestack.net/ormlite) - -> Both OrmLite and Redis includes an implicit license for ServiceStack.Text - -### ServiceStack - - - Upgraded ServiceStack's external dependencies to use latest version on NuGet - - Modified [ServiceStack.RabbitMq](http://www.nuget.org/packages/ServiceStack.RabbitMq) to only depend on **ServiceStack** instead of **ServiceStack.Server** - - Added optional `fieldName` property to ServiceClient [PostFileWithRequest](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Interfaces/IRestClient.cs#L52-L55) - - Changed exceptions in FileSystem scanning to be logged as warnings, fixes issues with NTFS symbolic links - - Pass through Thread CurrentCulture when executing a sync request in a new Task - - Added Evaluator.NamespaceAssemblies to specify alternate default namespace for Assemblies - - Changed to use OrdinalIgnoreCase instead of InvariantCultureIgnoreCase when possible - -### OrmLite - -#### OrmLite's core Exec functions are now overridable as a Filter - -Continuing in efforts to make OrmLite more introspectable and configurable, OrmLite's core Exec functions -[have been re-factored out into a substitutable Exec Filter](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/fa55404200f4a319eae3a298b648462dadafce5e). - -This now makes it possible to inject a custom managed exec function where you can inject your own behavior, tracing, profiling, etc. - -It comes in useful for situations when you want to use SqlServer in production but use an `in-memory` Sqlite database in tests and you want to emulate any missing SQL Server Stored Procedures in code: - -```csharp -public class MockStoredProcExecFilter : OrmLiteExecFilter -{ - public override T Exec(IDbConnection dbConn, Func filter) - { - try - { - return base.Exec(dbConn, filter); - } - catch (Exception ex) - { - if (dbConn.GetLastSql() == "exec sp_name @firstName, @age") - return (T)(object)new Person { FirstName = "Mocked" }; - throw; - } - } -} - -OrmLiteConfig.ExecFilter = new MockStoredProcExecFilter(); - -using (var db = OpenDbConnection()) -{ - var person = db.SqlScalar("exec sp_name @firstName, @age", - new { firstName = "aName", age = 1 }); - - person.FirstName.Print(); //Mocked -} -``` -Or if you want to do things like executing each operation multiple times, e.g: - -```csharp -public class ReplayOrmLiteExecFilter : OrmLiteExecFilter -{ - public int ReplayTimes { get; set; } - - public override T Exec(IDbConnection dbConn, Func filter) - { - var holdProvider = OrmLiteConfig.DialectProvider; - var dbCmd = CreateCommand(dbConn); - try - { - var ret = default(T); - for (var i = 0; i < ReplayTimes; i++) - { - ret = filter(dbCmd); - } - return ret; - } - finally - { - DisposeCommand(dbCmd); - OrmLiteConfig.DialectProvider = holdProvider; - } - } -} - -OrmLiteConfig.ExecFilter = new ReplayOrmLiteExecFilter { ReplayTimes = 3 }; - -using (var db = OpenDbConnection()) -{ - db.DropAndCreateTable(); - db.Insert(new PocoTable { Name = "Multiplicity" }); - - var rowsInserted = db.Count(q => q.Name == "Multiplicity"); //3 -} -``` - -#### Other improvements - - - Added [SqlVerifyFragment string extension](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/7f0711aa3368087037d8b7b84cf9f70f1ea2b191) to verify sql fragments where free-text is allowed in SqlExpression APIs - - Change MySql to create TimeSpan's column as INT to store ticks - -### Redis - - - Add new Increment by double and long methods to Redis Client - -### Text - - - Added [T.PopulateFromPropertiesWithoutAttribute](https://github.com/ServiceStack/ServiceStack.Text/commit/9bd0cc35c0a4e3ddcb7e6b6b88e760f45496145b) Auto Mapping method - -### New Signed NuGet Packages - - - [ServiceStack.OrmLite.Sqlite.Windows.Signed](http://www.nuget.org/packages/ServiceStack.OrmLite.Sqlite.Windows.Signed) - -# v4.0.12 Release Notes - -## New [Email Contact Services](https://github.com/ServiceStack/EmailContacts/) - -A new ServiceStack guidance is available detailing the recommended setup and physical layout structure of typical medium-sized ServiceStack projects. -It includes the complete documentation going through how to create the solution from scratch, and explains all the ServiceStack hidden features it makes use of along the way. - -[![EmailContacts Screenshot](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/email-contacts.png)](https://github.com/ServiceStack/EmailContacts/) - -[EmailContacts](https://github.com/ServiceStack/EmailContacts/) is a Single Page App built using just ServiceStack, -jQuery and Bootstrap that showcases some of ServiceStack's built-in features, useful in the reducing the effort for -developing medium-sized Web Applications. - -The purpose of EmailContacts is to manage contacts (in [any RDBMS](https://github.com/ServiceStack/ServiceStack.OrmLite/#download)), -provide a form to be able to send them messages and maintain a rolling history of any emails sent. -The application also provides an option to have emails instead sent and processed via [Rabbit MQ](https://github.com/ServiceStack/ServiceStack/wiki/Rabbit-MQ). - -#### Functional Single Page App in under 130 Lines of HTML and 70 Lines JS - -The entire EmailContacts UI is maintained in a single -[default.cshtml](https://github.com/ServiceStack/EmailContacts/blob/master/src/EmailContacts/default.cshtml) -requiring just 70 lines of JavaScript to render the dynamic UI, -bind server validation errors and provide real-time UX feedback. -The Application also follows an API-First development style where the Ajax UI calls only published APIs allowing -all services to be immediately available, naturally, via an end-to-end typed API to Mobile and Desktop .NET clients. - -### Example Projects - -During this release all Example projects, Demos, Starter Templates, etc in the -[ServiceStack.Example](https://github.com/ServiceStack/ServiceStack.Examples) and -[ServiceStack.UseCases](https://github.com/ServiceStack/ServiceStack.UseCases/) -master repositories were upgraded to ServiceStack v4. A new [ServiceStack + MVC5 project](https://github.com/ServiceStack/ServiceStack.UseCases/tree/master/Mvc5) -was also added to UseCases, it just follows the instructions at [MVC Integration](https://github.com/ServiceStack/ServiceStack/wiki/Mvc-integration) wiki, but starts with an empty MVC5 project. - -### Added new OrmLiteCacheClient - -A new `OrmLiteCacheClient` [Caching Provider](https://github.com/ServiceStack/ServiceStack/wiki/Caching) -was added to the **ServiceStack.Server** NuGet pacakge. -This provides a lot of utility by supporting -[OrmLite's RDBMS providers](https://github.com/ServiceStack/ServiceStack.OrmLite/#download) -allowing utilization of existing RDBMS's as a distributed cache, potentially saving an infrastructure dependency. - -Registration is simply: - -```csharp -//Register OrmLite Db Factory if not already -container.Register(c => - new OrmLiteConnectionFactory(connString, SqlServerDialect.Provider)); - -container.RegisterAs(); - -//Create 'CacheEntry' RDBMS table if it doesn't exist already -container.Resolve().InitSchema(); -``` - -### Service Clients - - - Added `CaptureSynchronizationContext` option to get Async Service Clients to execute responses on the same SynchronizationContext as their call-site - - Added `UserAgent` option, now defaults with the ServiceStack .NET client version - -### Minor features - - - Allow unrestricted access for Redis MQ and Rabbit MQ clients within free-quotas - - SessionIds are no longer created with Url Unfriendly chars `+`, `/` - - Add typed `ToOneWayUrl()` and `ToReplyUrl()` extension method for generating predefined urls - - Add Test showing how to use `ExecAllAndWait` extension method to [easily run synch operations in parallel](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.Common.Tests/ActionExecTests.cs) - - Added configurable BufferSize in StaticFileHandler - - All CacheClients can now store AuthUserSessions when `JsConfig.ExcludeTypeInfo=true` - - Allow RegistrationService to be used for PUT requests to updates User Registration info - - Elmah Logger now takes in a `HttpApplication` so it can use `ErrorSignal.Get(application).Raise()` allowing modules such as ErrorMail and ErrorPost (ElmahR) to be notified - -## OrmLite - - - Add support for [cloning SqlExpressions](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/Expression/ExpressionChainingUseCase.cs#L192-L207) - - Add example of [migrating SqlServer TIME column to BigInteger](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/AdoNetDataAccessTests.cs) - - Add example of [calling Stored Procedures with OrmLite vs ADO.NET](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/TypeWithByteArrayFieldTests.cs#L55-L147) - - Add support for [MaxText in all DB providers](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/tests/ServiceStack.OrmLite.Tests/TypeDescriptorMetadataTests.cs#L57-L96) with `[StringLength(StringLengthAttribute.MaxText)]` - - Capture the LastSql Run even for queries with exceptions - -## Redis - - - Use enhanced functionality for when newer versions of redis-server exists - - i.e. Use more precise EXPIRE operations when server supports it - - Add `GetServerTime()` - -## ServiceStack.Text - - - Moved `JsConfig.RegisterForAot()` to `PclExport.RegisterForAot()` - - Fine-grained AOT hints available on `IosPclExport` static methods in PCL builds - -## Breaking Changes - -The [ServiceStack.Stripe](https://www.nuget.org/packages/ServiceStack.Stripe/) NuGet package is now a normal .NET 4.0 release. A new portable NuGet package was created for PCL clients at [ServiceStack.Stripe.Pcl](https://www.nuget.org/packages/ServiceStack.Stripe.Pcl/). - -# v4.0.11 Release Notes - -## OrmLite - -This release saw a lot of effort towards adding new features to OrmLite: - -### Pluggable Complex Type Serializers - -One of the [most requested features](http://servicestack.uservoice.com/forums/176786-feature-requests/suggestions/4738945-allow-ormlite-to-store-complex-blobs-as-json) -to enable pluggable serialization for complex types in OrmLite is now supported. This can be used to specify different serialization strategies for each -available RDBMS provider, e.g: - -```csharp -//ServiceStack's JSON and JSV Format -SqliteDialect.Provider.StringSerializer = new JsvStringSerializer(); -PostgreSqlDialect.Provider.StringSerializer = new JsonStringSerializer(); -//.NET's XML and JSON DataContract serializers -SqlServerDialect.Provider.StringSerializer = new DataContractSerializer(); -MySqlDialect.Provider.StringSerializer = new JsonDataContractSerializer(); -//.NET XmlSerializer -OracleDialect.Provider.StringSerializer = new XmlSerializableSerializer(); -``` -You can also provide a custom serialization strategy by implementing -[IStringSerializer](https://github.com/ServiceStack/ServiceStack.Text/blob/master/src/ServiceStack.Text/IStringSerializer.cs). - -By default all dialects use the existing JsvStringSerializer, except for PostgreSQL which due to its built-in support for JSON, now uses the JSON format by default. - -#### Breaking Change - -Using JSON as a default for PostgreSQL may cause issues if you already have complex types blobbed with the previous JSV Format. -You can revert back to the old behavior by resetting it back to the JSV format with: - -```csharp -PostgreSqlDialect.Provider.StringSerializer = new JsvStringSerializer(); -``` - -### New Global Insert / Update Filters - -Similar to interceptors in some heavy ORM's, new Insert and Update filters were added which get fired just before any **insert** or **update** operation using OrmLite's typed API's (i.e. not dynamic SQL or partial updates using anon types). -This functionality can be used for easily auto-maintaining Audit information for your POCO data models, e.g: - -```csharp -public interface IAudit -{ - DateTime CreatedDate { get; set; } - DateTime ModifiedDate { get; set; } - string ModifiedBy { get; set; } -} - -OrmLiteConfig.InsertFilter = (dbCmd, row) => { - var auditRow = row as IAudit; - if (auditRow != null) - auditRow.CreatedDate = auditRow.ModifiedDate = DateTime.UtcNow; -}; - -OrmLiteConfig.UpdateFilter = (dbCmd, row) => { - var auditRow = row as IAudit; - if (auditRow != null) - auditRow.ModifiedDate = DateTime.UtcNow; -}; -``` - -Which will ensure that the `CreatedDate` and `ModifiedDate` fields are populated on every insert and update. - -### Validation - -The filters can also be used for validation where throwing an exception will prevent the operation and bubble the exception, e.g: - -```csharp -OrmLiteConfig.InsertFilter = OrmLiteConfig.UpdateFilter = (dbCmd, row) => { - var auditRow = row as IAudit; - if (auditRow != null && auditRow.ModifiedBy == null) - throw new ArgumentNullException("ModifiedBy"); -}; - -try -{ - db.Insert(new AuditTable()); -} -catch (ArgumentNullException) { - //throws ArgumentNullException -} - -db.Insert(new AuditTable { ModifiedBy = "Me!" }); //succeeds -``` - -### Custom SQL Customizations - -A number of new hooks were added to provide more flexibility when creating and dropping your RDBMS tables. - -#### Custom Field Declarations - -The new `[CustomField]` can be used for specifying custom field declarations in the generated Create table DDL statements, e.g: - -```csharp -public class PocoTable -{ - public int Id { get; set; } - - [CustomField("CHAR(20)")] - public string CharColumn { get; set; } - - [CustomField("DECIMAL(18,4)")] - public decimal? DecimalColumn { get; set; } -} - -db.CreateTable(); -``` - -Generates and executes the following SQL: - -```sql -CREATE TABLE "PocoTable" -( - "Id" INTEGER PRIMARY KEY, - "CharColumn" CHAR(20) NULL, - "DecimalColumn" DECIMAL(18,4) NULL -); -``` - -#### Pre / Post Custom SQL Hooks when Creating and Dropping tables - -A number of custom SQL hooks were added that allow you to inject custom SQL before and after tables are created or dropped, e.g: - -```csharp -[PostCreateTable("INSERT INTO TableWithSeedData (Name) VALUES ('Foo');" + - "INSERT INTO TableWithSeedData (Name) VALUES ('Bar');")] -public class TableWithSeedData -{ - [AutoIncrement] - public int Id { get; set; } - public string Name { get; set; } -} -``` - -And just like other ServiceStack attributes, they can also be added dynamically, e.g: - -```csharp -typeof(TableWithSeedData) - .AddAttributes(new PostCreateTableAttribute( - "INSERT INTO TableWithSeedData (Name) VALUES ('Foo');" + - "INSERT INTO TableWithSeedData (Name) VALUES ('Bar');")); -``` - -Custom SQL Hooks are now available to execute custom SQL before and after a table has been created or dropped, i.e: - -```csharp -[PreCreateTable(runSqlBeforeTableCreated)] -[PostCreateTable(runSqlAfterTableCreated)] -[PreDropTable(runSqlBeforeTableDropped)] -[PostDropTable(runSqlAfterTableDropped)] -public class Table {} -``` - -### Re-factoring OrmLite's SQLite NuGet Packages - -In their latest release, the SQLite dev team maintaining the [core SQLite NuGet packages](https://www.nuget.org/profiles/mistachkin/) -have added a dependency to Entity Framework on their existing Sqlite NuGet packages forcing the installation of Entity Framework for users of OrmLite Sqlite. -This change also caused some users to see invalid web.config sections after applying the new web.config.transforms. -After speaking to the maintainers they've created a new -[System.Data.SQLite.Core](http://www.nuget.org/packages/System.Data.SQLite.Core) -NuGet package without the entity framework dependency and the problematic web.config.transforms. - -Unfortunately this was only added for their bundled x86/x64 NuGet package and not their other -[System.Data.SQLite.x86](http://www.nuget.org/packages/System.Data.SQLite.x86/) and -[System.Data.SQLite.x64](http://www.nuget.org/packages/System.Data.SQLite.x64/) which the team have indicated should be deprecated -in favor of the x86/x64 bundled **System.Data.SQLite.Core** package. - -As a result of this we're removing the dependency to the Sqlite NuGet packages in both architecture specific -[ServiceStack.OrmLite.Sqlite32](http://www.nuget.org/packages/ServiceStack.OrmLite.Sqlite32/) and -[ServiceStack.OrmLite.Sqlite64](http://www.nuget.org/packages/ServiceStack.OrmLite.Sqlite64/) packages and have -instead embedded the Sqlite binaries directly, which will solve the current issues and shield them from any future changes/updates -from the upstream Sqlite packages. - -#### New ServiceStack.OrmLite.Sqlite.Windows NuGet package - -Both these arch-specific packages should now be deprecated in favour of a new Sqlite NuGet package supporting both x86/x64 architectures on Windows: - - PM> Install-Package ServiceStack.OrmLite.Sqlite.Windows - -Which should now be used for future (or existing) projects previously using the old -[OrmLite.Sqlite32](http://www.nuget.org/packages/ServiceStack.OrmLite.Sqlite32/) and -[OrmLite.Sqlite64](http://www.nuget.org/packages/ServiceStack.OrmLite.Sqlite64/) packages. - -The Windows-specific package was added in addition to our existing Mono and Windows compatible release: - - PM> Install-Package ServiceStack.OrmLite.Sqlite.Mono - -Which works cross-platform on Windows and Linux/OSX with Mono should you need cross-platform support. - -## .NET Service Clients - -New async API's were added for requests marked with returning `IReturnVoid`. -This provides a typed API for executing services with no response that was previously missing, e.g: - -```csharp -public class Request : IReturnVoid {} - -await client.PostAsync(new Request()); -``` - -The API's for all sync and async REST operations have been changed to return `HttpWebResponse` which now lets you query the returned HTTP Response, e.g: -```csharp -HttpWebResponse response = await client.PostAsync(new Request()); -var api = response.Headers["X-Api"]; -``` - -## Authentication - -### New IManageRoles API - -A new [IManageRoles API](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/Auth/IAuthRepository.cs#L26) -was added that IAuthRepository's can implement in order to provide an alternative strategy for querying and managing Users' -Roles and permissions. - -This new API is being used in the `OrmLiteAuthRepository` to provide an alternative way to store -Roles and Permission in their own distinct table rather than being blobbed with the rest of the User Auth data. -You can enable this new behavior by specifying `UseDistinctRoleTables=true` when registering the OrmLiteAuthRepository, e.g: - -```csharp -container.Register(c => -new OrmLiteAuthRepository(c.Resolve()) { - UseDistinctRoleTables = true, -}); -``` - -When enabled, roles and permissions are persisted in the distinct **UserAuthRole** table. -This behavior is integrated with the rest of ServiceStack including the Users Session, RequiredRole/RequiredPermission attributes and the AssignRoles/UnAssignRoles authentication services. -Examples of this can be seen in [ManageRolesTests.cs](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.Common.Tests/ManageRolesTests.cs). - -## [Messaging](https://github.com/ServiceStack/ServiceStack/wiki/Messaging) - -### Flexible Queue Name strategies - -There are now more flexible options for specifying the Queue Names used in [ServiceStack's MQ Servers](https://github.com/ServiceStack/ServiceStack/wiki/Messaging). -You can categorize queue names or avoid conflicts with other MQ services by specifying a global prefix to be used for all Queue Names, e.g: - -```csharp -QueueNames.SetQueuePrefix("site1."); - -QueueNames.In //= site1.mq:Hello.inq -``` - -Or to gain complete control of each queue name used, provide a custom QueueName strategy, e.g: - -```csharp -QueueNames.ResolveQueueNameFn = (typeName, suffix) => - "SITE.{0}{1}".Fmt(typeName.ToLower(), suffix.ToUpper()); - -QueueNames.In //= SITE.hello.INQ -``` - -> Note: Custom QueueNames need to be declared on both MQ Client in addition to ServiceStack Hosts. - -# v4.10 Release Notes - -## Debug Links - -To provide better visibility to the hidden functionality in ServiceStack we've added **Debug Info** links section to the `/metadata` page which add links to any Plugins with Web UI's, e.g: - -![Debug Info Links](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/debug-links.png) - -The Debug Links section is only available in **DebugMode** (recap: set by default in Debug builds or explicitly with `Config.DebugMode = true`). In addition, users with the **Admin** role (or if `Config.AdminAuthSecret` is enabled) can also view the debug Plugins UI's in production. - -You can add links to your own [Plugins](https://github.com/ServiceStack/ServiceStack/wiki/Plugins) in the metadata pages with: - -```csharp -appHost.GetPlugin().AddPluginLink("swagger-ui/", "Swagger UI"); -appHost.GetPlugin().AddDebugLink("?debug=requestinfo", "Request Info"); -``` - -`AddPluginLink` adds links under the **Plugin Links** section and should be used if your plugin is publicly visible, otherwise use `AddDebugLink` for plugins only available during debugging or development. - -## [Auto Mapping](https://github.com/ServiceStack/ServiceStack/wiki/Auto-mapping) - -#### Improved Support for non-POCO types -Previously you could only map between top-level POCO models, now you can map between scalars and collections directly, e.g: - -```csharp -var intVal = 2L.ConvertTo(); -var decimalVal = 4.4d.ConvertTo(); -var usersSet = new[] { new User(1), new User(2) }.ConvertTo>(); -``` - -#### Improved Auto-Mapping Performance - -A better caching strategy is used for conversions paths and now mapping fields utilize cached Delegate expressions so POCO's with fields Map much faster. - -## Async Support - -#### Consistent handling of Async Responses - -Previously Response Filters were called with the Task response returned from async services for the Response DTO, e.g. `Task`. The response filters are now chained to the task so Response filters see the same native `TResponse` DTO that are passed in from Sync services. - -#### Async services can now be used in MQ Servers - -Async responses now block for results which is in-line with sync Services behavior where Message Queue Handlers only process one message at a time for each worker thread assigned to the Request type. - -## NuGet packages specify min versions - -To ensure NuGet pulls the latest dependencies when installing any ServiceStack package, a minimum version is now specified for all NuGet package dependencies. This [should alleviate dependency issues](http://stackoverflow.com/a/21670294/85785) people are seeing from NuGet's default behavior of pulling down old packages. - -# v4.09 Release Notes - -## Rabbit MQ Support - -The biggest feature in this release is ServiceStack's new support for -[hosting Services via a Rabbit MQ Server](https://github.com/ServiceStack/ServiceStack/wiki/Rabbit-MQ), -expanding on our existing [Redis MQ and In Memory messaging](https://github.com/ServiceStack/ServiceStack/wiki/Messaging) options -with a new durable MQ option in the robust and popular [Rabbit MQ](http://www.rabbitmq.com). -ServiceStack's Rabbit MQ support is available on NuGet with: - - PM> Install-Package ServiceStack.RabbitMq - -A new [Rabbit MQ on Windows installation and setup guide](https://github.com/mythz/rabbitmq-windows) was published containing -code samples for working with Rabbit MQ from C#/.NET. - -### Configurable Metadata Pages - -New customizable filters were added to the `MetadataFeature` plugin to allow customization of the Master and detail metadata pages before they're rendered. -E.g. you can reverse the order of operation names with: - -```csharp -var metadata = (MetadataFeature)Plugins.First(x => x is MetadataFeature); -metadata.IndexPageFilter = page => { - page.OperationNames.Sort((x,y) => y.CompareTo(x)); -}; -``` - -### OrmLite new runtime typed API - -The [IUntypedApi](https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/src/ServiceStack.OrmLite/IUntypedApi.cs) interface is useful for when you only have access to a late-bound object runtime type which is accessible via `db.CreateTypedApi`, e.g: - -```csharp -public class BaseClass -{ - public int Id { get; set; } -} - -public class Target : BaseClass -{ - public string Name { get; set; } -} - -var row = (BaseClass)new Target { Id = 1, Name = "Foo" }; - -var useType = row.GetType(); -var typedApi = db.CreateTypedApi(useType); - -db.DropAndCreateTables(useType); - -typedApi.Save(row); - -var typedRow = db.SingleById(1); -typedRow.Name //= Foo - -var updateRow = (BaseClass)new Target { Id = 1, Name = "Bar" }; - -typedApi.Update(updateRow); - -typedRow = db.SingleById(1); -typedRow.Name //= Bar - -typedApi.Delete(typedRow, new { Id = 1 }); - -typedRow = db.SingleById(1); //= null -``` - -#### OrmLite Create Table Support - - - Added NonClustered and Clustered options to `[Index]` attribute - -## Breaking changes - -### Messaging - -In order to support Rabbit MQ Server some changes were made to -[ServiceStack's Messaging API](https://github.com/ServiceStack/ServiceStack/wiki/Messaging) to support all MQ options, namely: - - - `IMessageQueueClient` now exposes high-level `IMessage` API's instead of raw `byte[]` - - The `IMessage.Error` property is now a `ResponseStatus` type (same used in Web Services) - - **Ack** / **Nak** APIs were also added to `IMessageQueueClient` - - All MQ Brokers now have a default `RetryCount=1` - -### ServiceStack.Text - - - UrlEncode extension method now encodes spaces with `+` instead of `%20` to match default `HttpUtility.UrlEncode` behavior - -### OrmLite - - - MySql and Sqlite providers now treat GUID's as `char(36)` - -# v4.08 Release Notes - -Added new [ServiceStack/Stripe](https://github.com/ServiceStack/Stripe) GitHub repository containing a PCL typed, message-based API client gateway for [Stripe's REST API](https://stripe.com/docs/api/). Install from NuGet with: - - Install-Package ServiceStack.Stripe - -New in this release: - - - .NET 4.0 build of **ServiceStack.Razor** now available (in addition to .NET 4.5) - - New **Signed** NuGet packages published for - - [ServiceStack.Api.Swagger.Signed](https://www.nuget.org/packages/ServiceStack.Api.Swagger.Signed/) - - [ServiceStack.OrmLite.Oracle.Signed](https://www.nuget.org/packages/ServiceStack.OrmLite.Oracle.Signed/) - - Updated Swagger UI content files - - Added MiniProfiler SqlServerStorage adapter to **ServiceStack.Server** - - The [Razor Rockstars](https://github.com/ServiceStack/RazorRockstars/) and [Social Bootstrap Api](https://github.com/ServiceStack/SocialBootstrapApi/) projects have both been upgraded to v4 - -### OrmLite - - - Enums with `[Flag]` attribute (aka Enum flags) now stored as ints - - `TimeSpan` now stores ticks as longs for all DB providers (Breaking change for Sqlite) - -# v4.06 Release Notes - -## Portable Class Library Clients! - -The biggest feature of this release is the release of the new Portable Client NuGet packages: - -[![Portable Class Library Support](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/release-notes/hello-pcl.png)](https://github.com/ServiceStackApps/HelloMobile) - - - ServiceStack.Interfaces.Pcl - - PCL Profiles: iOS, Android, Windows8, .NET 4.5, Silverlight5, WP8 - - ServiceStack.Client.Pcl - - PCL Profiles: iOS, Android, Windows8, .NET 4.5 - - Custom builds: Silverlight 5 - - ServiceStack.Text.Pcl - - PCL Profiles: iOS, Android, Windows8, .NET 4.5 - - Custom builds: Silverlight 5 - -This now allows sharing binaries between the above platforms. To illustrate this a new [Hello Repository](https://github.com/ServiceStackApps/HelloMobile) was created to show how to use the same portable class libraries and DTO's across the different client platforms above. - -#### Breaking Changes - -Adding PCL support to the client libraries involved a lot of internal re-factoring which caused a few external user-facing changes: - - - The `IDbConnectionFactory` and `IHasDbConnection` interfaces referencing System.Data was moved to ServiceStack.Common - - Properties exposing the concrete `NameValueCollection` are now behind an `INameValueCollection` interface - - Dynamic classes like `DynamicJson` have been moved under the `ServiceStack` namespace - -### Improved SOAP Support - -For maximum compatibility with different SOAP clients, SOAP Exceptions are now treated as "Soft HTTP Errors" where exceptions -are automatically converted to a **200 OK** but returns the original Status Code in the `X-Status` HTTP Response header or `X-Status` SOAP Header. - -Errors can be detected by looking at the X-Status headers or by checking the **ResponseStatus.ErrorCode** property on the Response DTO. -This is transparently handled in ServiceStack's built-in SoapClients which automatically converts Response Errors into populated -C# WebServiceExceptions, retaining the same behavior of ServiceStack's other typed clients, as seen in -[WebServicesTests](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/AlwaysThrowsService.cs#L162). - -IHttpRequest.OperationName now reports the Request DTO name for SOAP requests as well, which it gets from the SOAPAction HTTP Header in SOAP 1.1 requests or the **Action** SOAP Header for SOAP 1.2 Requests. - -# ServiceStack V4 Release Notes - -We're happy to announce that after months of intense development, v4-beta of ServiceStack has finally been released to NuGet! - -As [announced in August](https://plus.google.com/+DemisBellot/posts/g8TcZaE7bv9) to ensure it's continued development, ServiceStack has moved to a self-sustaining commercial model for commercial usage of ServiceStack from **v4+ onwards**. It's the first time we've been able to commit full-time resources to the project and is what has ensured continued investment and enabled v4 to be possible, with even more exciting features in the pipeline and roadmap for 2014. - -## [Introductory Offer](https://servicestack.net/pricing) - -For our early supporters we're launching the new [servicestack.net](https://servicestack.net) website with [attractive introductory pricing](https://servicestack.net/pricing) available during the beta between **33-40% off** royalty-free/per-developer perpetual licensing and **20% off** our unlimited-developers/per-core subscriptions. There's also an additional **60 days free** maintenance and updates covering the beta period, available in 2013. These discounts are intended to be grandfathered-in and carried over for any future renewals, making the v4-beta the best time to get ServiceStack. For US Customers we also have free ServiceStack T-Shirts and stickers whilst stocks last - If you'd like them, add your preferred T-Shirt sizes in the Order notes. - -#### Free Usage for Small and OSS Projects - -We're also happy to announce that v4 includes [free quotas](https://servicestack.net/download#free-quotas) allowing the free usage of all of ServiceStack for small projects and evaluation purposes. Whilst OSS projects are able to use the source code on GitHub under the [AGPL/FOSS License Exception](https://github.com/ServiceStack/ServiceStack/blob/master/license.txt), and the older [v3 of ServiceStack](https://github.com/ServiceStackV3/ServiceStackV3) continues to be available under the [BSD license](https://github.com/ServiceStack/ServiceStack/blob/v3/LICENSE). - -#### Upgrading from v3 - -Whilst we recommend starting with **v4** for greenfield projects, v4 has seen significant changes since v3 that will require some development effort to upgrade. During the upgrade we recommend using a tool like [ReSharper](http://www.jetbrains.com/resharper/) to be able to easily find and update reference of any types that have moved. - -# What's new in v4 - -The major version upgrade of ServiceStack to v4 has provided us a long sought **breaking window** opportunity allowing us to re-factor, simplify, clean-up and fix all the warts and cruft that has been lingering in the ServiceStack code-base since its beginning - that due to backwards compatibility we were reluctant to remove. Whilst v4 has seen significant changes to the code-base, all existing tests are passing again with additional tests added for new functionality. - -We managed to retain a lot of the user-facing API's (E.g New API, AppHost, Config) which were already considered ideal so ideally upgrading shouldn't be too disruptive in the normal use-cases. - -v4 provides us a great foundation to build on that will be further improved during the beta by focusing on stability and fixing any reported issues as well as updating existing documentation to match v4's implementation and publish new examples showcasing v4's new features. - -## The big refactor of v4 - -This was the biggest re-factor in ServiceStack's history which at the end resulted in a much leaner, simplified, consistent and internal logically-structured code-base that's much easier to reason about, where even before adding any features the main ServiceStack repository saw: - - 1,192 changed files with 18,325 additions and 29,505 deletions. - -The number of deletions is indicative of how much legacy code was able to be removed, with much of the internals having been heavily restructured. Some of the highlights during the re-factor include: - - - All projects have been upgraded to .NET 4.0, except ServiceStack.Razor which is .NET 4.5 to use the latest version of Razor - - All obsolete/unused/shims/duplicate functionality and built-up cruft has now been removed (inc. the Old Api). - - State and configuration are now cohesively organized where now all AppHost's share the same `ServiceStackHost` base class which now maintains all state in ServiceStack, inc. the empty `BasicAppHost` that's used for unit testing which now shares much of the same state/context as Integration tests. - - Many namespaces and some concepts have been collapsed (e.g 'Endpoint'), resulting in ServiceStack projects requiring fewer namespaces - - All DTO's and extension methods and common user-facing classes have been moved to the base `ServiceStack` namespace - allowing them to be much easier to find. - - Re-organization of projects, **NuGet packages now map 1:1 with ServiceStack projects** for finer-grained control of dependencies: - + **ServiceStack.Interfaces** NuGet project created and ServiceInterface has been merged into **ServiceStack** - + **ServiceStack** NuGet package now only depends **ServiceStack.Common** and **ServiceStack.Client** - + A new **ServiceStack.Server** project exists for functionality requiring dependencies on OrmLite or Redis, inc. RedisMqServer and OrmLiteAuthRepository. - + **ServiceStack.Client** contains all the HTTP, SOAP and MQ Service Clients that have been split from **ServiceStack.Common** and only depends on ServiceStack.Interfaces and ServiceStack.Text (making it easier to maintain custom builds in future). - - EndpointHostConfig is now `HostConfig` and is limited to just Configuration, e.g. handlers like `CustomErrorHttpHandlers`, `RawHttpHandlers`, `GlobalHtmlErrorHttpHandler` have been moved to ServiceStackHost. - - EndpointHost is gone and replaced by the static `HostContext` class which doesn't contain any state itself, it's just a static convenience wrapper around `ServiceStackHost.Instance` (where all state is maintained). - - Removed all 'where T:' constraints where possible - - Removed `ConfigurationResourceManager`, use `AppSettings` instead - - The `ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory` used in Web.config's handler mapping has been renamed to just `ServiceStack.HttpHandlerFactory` - - `Config.ServiceStackHandlerFactoryPath` has been renamed to `Config.HandlerFactoryPath`. - - Predefined routes have been renamed from `/syncreply`, `/asynconeway` to just `/reply`, `/oneway` - - ServiceManager has been merged into `ServiceController`. - - The **ServiceStack.Logging** and **ServiceStack.Contrib** v4 projects have been merged into the major ServiceStack repo. - - The dynamic session `base.Session` has been renamed to `base.SessionBag` to better reflect its semantics. - - The [Auto Mapping](https://github.com/ServiceStack/ServiceStack/wiki/Auto-mapping) Utils extension methods were renamed from `TFrom.TranslateTo()` to `TFrom.ConvertTo()`. - - The `RequestFilters` and `ResponseFilters` were renamed to `GlobalRequestFilters` and `GlobalResponseFilters` which matches naming in the client `ServiceClientBase.GlobalRequestFilter`. - - New `GlobalMessageRequestFilters` and `GlobalMessageResponseFilters` have been added which are instead used by non-HTTP endpoints use, e.g. MQ. - - `CustomHttpHandlers` has been renamed to `CustomErrorHttpHandlers` - - The **LocalHttpWebRequestFilter** and **LocalHttpWebResponseFilter** in the Service Clients were renamed to just `RequestFilter` and `ResponseFilter` - - The Global **HttpWebRequestFilter** and **HttpWebResponseFilter** filters were also renamed to `GlobalRequestFilter` and `GlobalResponseFilter` respectively. - -### RequestContext now merged into new IRequest / IResponse classes: - -An annoyance remaining in the ServiceStack code-base was RequestContext and its relationship with its IHttpRequest and IHttpResponse classes. This was originally modeled after ASP.NET's relationship with HttpContext and its child HttpRequest/HttpResponse classes. Pragmatically speaking this model isn't ideal, as there was functionality spread across all 3 classes, many times duplicated. It was also not obvious how to retrieve IHttpRequest/IHttpResponse classes from a RequestContext and creating a RequestContext from outside of ServiceStack required more knowledge and effort than it should have. - -The new model adopts a flattened structure similar to Dart's server HttpRequest (http://bit.ly/19WUxLJ) which sees the `IRequestContext` eliminated in favour of a single `IRequest` class that also makes available direct access to the Response. - -This now becomes much easier to create a Request from outside of ServiceStack with an ASP.NET or HttpListener HttpContext e.g: - -```csharp -var service = new MyService { - Request = HttpContext.Current.ToRequest() -} - -var service = new MyService { - Request = httpListenerContext.ToRequest() -} -``` - -There's also direct access to the Response from a Request with: - -```csharp -IResponse response = Request.Response; -``` - -#### ASP.NET wrappers now only depends on HttpContextBase - -Also the ASP.NET `IHttpRequest` wrappers bind to the newer and mockable HttpContextBase / HttpRequestBase / HttpResponseBase classes which now makes it easier to call services from newer web frameworks like MVC with: - -```csharp -var service = new MyService { - Request = base.HttpContext.ToRequest() -} -``` - -The biggest user-facing change was renaming the IHttpRequest/IHttpResponse classes to IRequest/IResponse which is more indicative to what they represent, i.e. the Request and Response classes for all endpoints including MQ and future TCP endpoints. Now only HTTP Requests implement IHttpRequest/IHttpResponse which lets you add logic targeting only HTTP Services with a simple type check: - -```csharp -var httpReq = request as IHttpRequest; -if (httpReq != null) { - //Add logic for HTTP Requests... -} -``` - -Accessing the IHttpResponse works the same way, e.g: - -```csharp -var httpRes = Request.Response as IHttpResponse; -if (httpRes != null) { - //... -} -``` - -We're still going to add extension methods on IRequest/IResponse to make it easier to discover new functionality, but for HTTP functionality on non-HTTP requests these would just be a NO-OP rather than throw an exception. - -### Community v4 migration notes - - - [Upgrading Servicestack to 4.0 – Notes](http://www.binoot.com/2014/02/23/upgrading-servicestack-to-4-0-notes/) by [@binu_thayamkery](https://twitter.com/binu_thayamkery) - - [Upgrading OrmLite and ServiceStack to v4](http://camtucker.blogspot.ca/2014/01/updating-to-servicestack-v40.html?view=classic) by [@camtucker](http://camtucker.blogspot.ca/) - ----- - -# New Features in v4 - - -## Server-side Async Support - -The [most requested feature](http://bit.ly/16qCiy1), Server-side async support has now been implemented! This was surprisingly easy to do where now all HttpHandlers in ServiceStack inherit from a common `HttpAsyncTaskHandler` base class that now implements `IHttpAsyncHandler`. This lets you return an async Task from your Service in any number of ways as shown in http://bit.ly/1cOJ3hR - -E.g. Services can now have either an object, Task or async Task return types that can return a started or non-started task (which we'll start ourselves). This transition went as smooth as it could where all existing services continuing to work as before and all tests passing. - -## [ServiceStack Client](https://github.com/ServiceStack/ServiceStack/wiki/C%23-client) Task-based Async - -In matching the new server-side async story and now that all projects have been upgraded to .NET 4.0, all Service Clients have been changed to return .NET 4.0 Task's for all async operations so they can be used in C#'s async/await methods. Some examples of Async in action: http://bit.ly/17ps94C - -The Async API's also provide a **OnDownloadProgress** callback which you can tap into to provide a progress indicator in your UI, E.g: http://bit.ly/19ALXUW - -#### Use any Request DTO in Client API's - -ServiceClient API's that used to only accept Request DTO's with a `IReturn` marker, now have `object` overloads so they can be used for unmarked Request DTO's as well. - -### Custom Silverlight and Android builds - -We've added custom **Silverlight** and **Android** automated builds for ServiceStack.Client allowing the client libraries to be available in even more environments - with more to follow. - -## Signed NuGet Packages - -The following Signed NuGet packages are available for core ServiceStack projects in separate NuGet packages using the .Signed suffix: - - - ServiceStack.Client.Signed - - ServiceStack.Text.Signed - - ServiceStack.Redis.Signed - - ServiceStack.OrmLite.Signed - - ServiceStack.OrmLite.SqlServer.Signed - - ServiceStack.ServiceStack.Signed - - ServiceStack.ServiceStack.Razor.Signed - - ServiceStack.ServiceStack.Server.Signed - - ServiceStack.Common.Signed - -### ServiceStack.Interfaces is now strong-named - -In order to be able to have signed clients sharing types with non-signed ServiceStack instances, the DTO models and ServiceStack.Interfaces need to be signed. It was added in the most defensive way possible where **ServiceStack.Interfaces.dll** is the only dll that's strong-named by default. This should cause minimal friction as it is an impl-free assembly that rarely sees any changes. We're also keeping the AssemblyVersion which makes up the strong-name at a constant `4.0` whilst the benign AssemblyFileVersion will report the true version number. - -### Add Code-first Attributes at runtime, de-coupled from POCO's - -Inspection of all Metadata attributes in ServiceStack now uses ServiceStack.Text's attribute reflection API's which support adding of type and property metadata attributes dynamically. This now lets you add the same behavior normally only available via attributes, dynamically at StartUp. Some benefits of this include: being able to keep [unattributed data model POCOs in OrmLite](http://bit.ly/1e5IQqS) or to [extend built-in and external Request DTOs and Services](https://github.com/ServiceStack/ServiceStack/blob/d93ad805c8c8ffce8e32365e4217c65c19069cf0/tests/ServiceStack.WebHost.Endpoints.Tests/RuntimeAttributeTests.cs) with enhanced functionality that was previously only available using attributes. - -#### Fluent route configuration available in [Reverse Routing](https://github.com/ServiceStack/ServiceStack/wiki/Routing#reverse-routing) - -Leveraging the dynamic attribute support, we now include fluent Route definitions when retrieving relative or absolute urls in [Reverse Routing](https://github.com/ServiceStack/ServiceStack/wiki/Routing#reverse-routing), which can be used in Services when returning urls in responses and is also used in Service Clients to determine which routes to use. Note: as Fluent Routes are defined in the AppHost, they aren't registered and therefore not available in disconnected .NET client applications - so using `[Route]` attributes on Request DTO's remains the best way to share route definitions on both client and server. - -Priority was added to `[Route]` attributes so auto-generated routes are given less precedence than explicit user-defined custom routes when selecting the best matching route to use. - -### The Virtual FileSystem - -The Virtual FileSystem is now fully integrated into the rest of ServiceStack, this enables a few interesting things: - - - The `Config.WebHostPhysicalPath` sets where you want physical files in ServiceStack to be served from - - You can now access static files when ServiceStack is mounted at a custom path, e.g. /api/default.html will serve the static file at ~/default.html - - By Default, ServiceStack falls back (i.e when no physical file exists) to looking for Embedded Resource Files inside dlls. - - You can specify the number and precedence of which Assemblies it looks at with `Config.EmbeddedResourceSources` which by default looks at: - - The assembly that contains your AppHost - - **ServiceStack.dll** - -The VFS now elegantly lets you replace built-in ServiceStack templates with your own by simply copying the metadata or [HtmlFormat Template files](http://bit.ly/164YbrQ) you want to customize and placing them in your folder at: - - /Templates/HtmlFormat.html // The auto HtmlFormat template - /Templates/IndexOperations.html // The /metadata template - /Templates/OperationControl.html // Individual operation template - -This works because the ServiceStack.dll is the last assembly in `Config.EmbeddedResourceSources`. - -## API-first development - -We're starting to optimize ServiceStack's HTML story around an **API-first** style of web development (particularly well suited to ServiceStack) in which services are developed so they naturally support both web and native clients from the start. Effectively this means that the HTML views are just another client that escapes C# earlier and leverages JS+Ajax to provide its dynamic functionality, and any HTML-specific functionality is encouraged to be kept in Razor views rather than using post backs to generate different server-side HTML representations. - -Having developed the new [servicestack.net website](https://servicestack.net) in this way, we've found it to be a lot more productive and responsive than standard server-side MVC development that we we're accustomed to in .NET as JavaScript ends up being more mallable and flexible language with a smaller and reflective surface type area making it better suited in string manipulation, generating HTML views, consuming ajax services, event handling, DOM binding and manipulation, etc. - -We've begun taking advantage of the Virtual FileSystem to ship embedded resources enhancing ServiceStack's JS integration with client-side libraries like [ss-utils.js](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/js/ss-utils.js) that we maintain and update alongside the rest of ServiceStack's dlls. Whilst we intend to create more examples in the near future showcasing this functionality, here's an overview of what's been added: - - - ss-utils.js available in your local ServiceStack webhost at `/js/ss-utils.js` - - Inspired by AngularJS we've added **declarative** support over jQuery, letting you declaratively register and trigger events, bind values to HTML elements, register document handlers, etc, saving a lot of boilerplate than normal jQuery (more on this soon) - - Enhanced HTML forms with integration with ServiceStack validation, adds responsive UX/behavior, follows soft redirects - - Server-side responses can be decorated with Soft redirects with `HttpResult.SoftRedirect` or client events with `HttpResult.TriggerEvent` - - Use `("a").setActiveLinks()` to automatically set the active link and containing menu items for the current page - - Use `$("input").change($.ss.clearAdjacentError)` to clear highlighted errors as users correct their inputs - - Use `T.AsRawJson()` extension method to serialize C# models into JSON literals that are natively accessible in JS - - Use `T.ToGetUrl()`, `T.ToPostUrl()` to resolve service urls from typed Request DTOs (no code-gen required) - -## Improved Razor Support - -#### Improved Server-side validation - -The server-side validation story has also been improved with MVC's HTML INPUT and Validation Helpers rewritten to look at ServiceStack error responses (earlier lost in the upgrade to Razor 2.0) and making use of the same bootstrap conventional classes that the client-side Ajax validation uses letting you maintain a single style of error feedback for both validation styles. It also now looks at state contained in the POST'ed data when rendering the HTML INPUT controls. - -#### Fallback Routes - -The default Razor views are now also processed by the `FallbackRoute` if one exists, enhancing the story for Single Page Apps who want requests to un-specified routes to be handled by client-side routing instead of returning 404's. - -#### Pre-Request filters - -Direct (i.e. No Controller) Razor views and static file handlers now have pre-request filters applied to them, so they can be used for adding global behavior across all ServiceStack service and page requests. - -#### Precompilation option for Razor Views - -New options have been added to RazorFormat `PrecompilePages` and `WaitForPrecompilationOnStartup` that allow you to precompile razor views on startup and specify whether or not you want to wait for compilation to complete are now options available when registering the `RazorFormat`. As these can slow down dev iteration times they are not done when `Config.DebugMode` (aka development mode), but are otherwise enabled by default for production. - -#### Other Razor Improvements - - - More functionality was added to Razor Views matching the same API's available in ServiceStack's base `Service` class - - RenderSection/IsSectionDefined now looks in all connected views. - - `GetAbsoluteUrl`, `IsPostBack`, `GetErrorStatus()`, `GetErrorMessage()` convience methods added - -### CORS Feature - -CorsFeature now by default automatically handles all HTTP `OPTIONS` requests so you no longer have to explicitly allow for OPTION requests in your routes: http://bit.ly/19HbMVf - -Can be disabled with: - -```csharp -Plugins.Add(new CorsFeature { AutoHandleOptionsRequests = false }) -``` - -## Authentication - -The Auth Tables are now called **UserAuth** and **UserAuthDetails** and implements the IUserAuth and IUserAuthDetails interfaces. For advanced customization, these tables can now be extended using custom models inheriting these interfaces by using the generic AuthRepository types, e.g: - - - OrmLiteAuthRepository - - RedisAuthRepository - -Where the common non-generic **OrmLiteAuthRepository** is just a concrete impl inheriting from `OrmLiteAuthRepository`. Use `InitSchema()` to ensure missing Auth Tables are created at registration. - -#### New optional UserAuthRole table added - -A new `UserAuthRole` class was created for users who would prefer roles to be managed in separate tables rather than blobbed with the UserAuth table and session. E.g. You can change your custom session to check the database for asserting required users and permissions with: - -```csharp -public class CustomUserSession : AuthUserSession -{ - public override bool HasRole(string role) - { - using (var db = HostContext.TryResolve().Open()) - { - return db.Count(q => - q.UserAuthId == int.Parse(UserAuthId) && q.Role == role) > 0; - } - } - - public override bool HasPermission(string permission) - { - using (var db = HostContext.TryResolve().Open()) - { - return db.Count(q => - q.UserAuthId == int.Parse(UserAuthId) && q.Permission == permission) > 0; - } - } -} -``` - -#### Support for Max Login Attempts - -The `OrmLiteAuthRepository` now supports automatically locking out user accounts after reaching the maximum number of Login attempts which can be specified at registration, e.g: - -```csharp -container.Register(c => - new OrmLiteAuthRepository(c.Resolve()) { - MaxLoginAttempts = appSettings.Get("MaxLoginAttempts", 5) - }); -``` - -To opt-in to use the new locking behavior provide a value for `MaxLoginAttempts` as shown above. The above registration first uses the value overridable in appSettings if it exists, otherwise it defaults to a Maximum of 5 login attempts. - -#### Adhoc locking of User Accounts - -The `CredentialsAuthProvider` also supports locking user accounts by populating the `UserAuth.LockedDate` column with a non-null value. Set it back to null to unlock the account. - -#### Initializing Auth Repository Schemas - -Some Auth Repositories like OrmLite require an existing schema before they can be used, this can be done in the AppHost with: - -```csharp -//Create missing Auth Tables in any Auth Repositories that need them -container.Resolve().InitSchema(); -``` -This was previously named `CreateMissingTables()` and is safe to always run as it's a NO-OP for Auth repositories that don't require a schema and only creates missing tables, so is idempotent/non-destructive on subsequent runs. - -#### New AuthWeb Test project - -A new test project testing all Authentication providers within the same ServiceStack ASP.NET Web Application is in [ServiceStack.AuthWeb.Tests](https://github.com/ServiceStack/ServiceStack/tree/master/tests/ServiceStack.AuthWeb.Tests). - -### AppSettings - -AppSettings can now be passed a tier in the constructor, e.g. `new AppSettings(tier: "Live")` which it uses as a prefix to reference Tier-specific appSettings first, e.g: - - - -Before falling back to the common key without the prefix, i.e: - - - -AppSettings now allows a Parsing Strategy, e.g. You can collapse new lines when reading a complex configuration object in Web.Config `` with: - -```csharp -var appSettings = new AppSettings { - ParsingStrategy = AppSettingsStrategy.CollapseNewLines -}; -``` - -### Nested Request DTOs - -Using [nested types as Request DTO's](https://github.com/ServiceStack/ServiceStack/commit/376ca38f604214f4d12e2f7803d8e7cfc271b725) are now supported. -Nested Request DTO types include the names of their containing class to form their unique name, allowing the use of multiple nested types with the same name, which is potentially interesting to be used as a versioning strategy. - -### Localized symbols - -I've added `IAppHost.ResolveLocalizedString` support in [this commit](http://bit.ly/181q0eP) which lets you override the built-in English symbols used in ServiceStack, e.g. this lets you change built-in ServiceStack routes, e.g: `/auth`, `/assignroles`, `?redirect=`, etc. into something more appropriate for your language. - -## Other New Web Framework Features - - - Added convenient [Repository and Logic base classes](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/ILogic.cs) to reduce boilerplate when extracting logic from services into custom classes - - Added `IAppHost.OnExceptionTypeFilter` to be able to customize ResponseStatus based on Exception types. Used to change the [default behavior of ArgumentExceptions](https://github.com/ServiceStack/ServiceStack/commit/17985239ed6f84b3126c651dbacd0c760a4d2951) so that they're converted to field errors - - Added `IAppHost.OnServiceException` so service exceptions can be intercepted and converted to different responses - - Add `ConvertHtmlCodes` extension method converting HTML entities to hex-encoded entities - - Add `Config.ScanSkipPaths` option to skip any plugins using the VFS to scan the filesystem (e.g. Razor/Markdown feature) from scanning specified directories, `/bin/` and `/obj/` are added by default. - - Added a pre-defined `/swagger-ui/` route that loads the Swagger UI and auto configures it to look at ServiceStack services. A link to this is on the metadata page under **Plugin Links** heading. - - Added `ModelFilter` and `ModelPropertyFilter` to allow fine-grained custom control on what's displayed in the Swagger API - - Wrappers around .NET's JSON and XML DataContract Serializers now share the same `IStringSerializer` interface - - Added ToMsgPack/FromMsgPack and ToProtoBuf/FromProtoBuf extension methods - - Improved support for stripping App Virtual Paths when Resolving Absolute Urls useful when applications are hosted with virtual app paths as done in Amazon Web Services. This behavior can be enabled with `Config.StripApplicationVirtualPath = true`. - - Support for explicitly referencing ignored DTO properties in Route PathInfo definitions, but not QueryStrings - - Add support for getting Id property from runtime object type - - Added support for registering a singleton instance as a runtime type - - Added new [IRestGateway](https://github.com/ServiceStack/ServiceStack/commit/29d60dfa22424fe20ba35c8603686c05f88a6c25) interface that typed 3rd Party gateways can use to retain a consistent and mockable interface. Specialized MockRestGateway added to stub or mock out gateways to 3rd Party services - - `__requestinfo` is now available on any request with `?debug=requestinfo` and is accessible to administrators or when in **DebugMode**, and provides in-depth diagnostics about the details of the current request and the configured AppHost including Startup errors (if any). - - Plugins can register startup exceptions with `IAppHost.NotifyStartupException` - - Added new HTTP Headers on IHttpRequest for `XForwardedPort` and `XForwardedProtocol` - - Added `[EnsureHttps]` Request Filter to automatically redirect request if service was not requested under a Secure Connection with options to **SkipIfDebugMode** or **SkipIfXForwardedFor** to allow local development and requests via proxies / load-balancers in HTTP. - - Users in the **Admin** role have super-user access giving them access to all protected resources. You can also use `Config.AdminAuthSecret` to specify a special string to give you admin access without having to login by adding `?authsecret=xxx` to the query string. - ------ - -## OrmLite - -### Improved Consistency - -As the API surface of OrmLite expands it became a lot more important to focus on better consistency which now sees all alternative aliases having been removed in favor of standardized naming around SQL equivalents (e.g Select,Insert,etc). Also the parameterized APIs and the C#-like string.Format API's have now been merged with the parameterized APIs now being the default and the string.Format API having a 'Fmt' suffix. - -Most of these APIs now have XML docs and Examples for a better Intelli-sense experience. We've also provided them in a list along side it's generated SQL in [these API tests](http://bit.ly/1gmrnwe) - -Some notes: - - - `Select` returns a List - - `Single` returns 1 row (or null) if it doesn't exist - - `Scalar` returns a single a scalar value (e.g. int, long) - - `Where` is a short-hand for 'Select' that takes a single filter - - `Count` is a convenience that performs an aggregate SQL Count - - `Exists` returns true if there were any results - - `Lazy` suffix indicates the results are lazily streamed - - `Column` returns the first column results in a List - - `ColumnDistinct` returns the first column unique results in a HashSet - - `Dictionary` returns a Dictionary made up from the first 2 columns - - `Lookup` returns a LINQ-like grouping in a Dictionary> - - `NonDefaults` suffix indicates only non-null values are used in qry - - `Only` suffix allows you to specify fields used on the call-site - - `Sql` prefix are helpers for reading and querying arbitrary raw SQL - - `Save` is a convenience that inserts or updates depending if it exists or not. It also now populates AutoIncrementing Id's on Inserts. - - All batch operations like `InsertAll`, `UpdateAll`, `DeleteAll`, `SaveAll` participate in an existing transaction if 1 exists, otherwise a new one - - Removed all 'where T:' constraints where possible - - `OrDefault` APIs removed, All APIs now return null instead of throwing - - autoDisposeConnection removed. false for ":memory:" otherwise true - - Now that all OrmLite's parameterized `Query*` APIs have been merged (above), any `Query` APIs are from Dapper's extension method, which is also included in OrmLite under ServiceStack.OrmLite.Dapper namespace. - - All remaining OrmLIte Attributes have been moved to ServiceStack.Interfaces, which in future will be the only dependency needed by your data models and DTOs. - -### OrmLite extension methods are now mockable - -OrmLite API's can now be mocked by injecting a ResultsFilter letting you mock the results return by OrmLite which it will use instead of hitting the database. You can also mock with a filter function and it also supports nesting, see examples at: http://bit.ly/1aldecK - -This will be useful in Unit Testing Services that access OrmLite directly instead of using a repository. - -### Support for references, POCO style - -We've added a cool new feature to Store and Load related entities that works great on POCO which are enabled when you use the `[Reference]` attribute, e.g: http://bit.ly/1gmvtV6 - -Unlike normal complex properties in OrmLite: - - - Doesn't persist as complex type blob - - Doesn't impact normal querying - - Saves and loads references independently from itself - - Populated references get serialized in Text serializers (only populated are visible). - - Data is only loaded 1-reference-level deep - - Reference Fields require consistent `(T)Id` naming - -Basically it provides a better story when dealing with referential data that doesn't impact the POCO's ability to be used as DTO's. At the moment it's limited to loading and saving on a Single instance. We'll look at optimizations for batches on this in future. - -We're going to be giving OrmLite a lot more attention from now on given that we're working full-time on ServiceStack and are using it exclusively for our .NET RDBMS peristence. We also intend on adding specialized support to take advantage of PostgreSQL's new features like their HStore and native JSON support. PostgreSQL has been offering the best features of both RDBMS and NoSQL worlds lately and has recently become a particularly attractive option now that AWS is offering first-class support for PostgreSQL in both their RDS and Redshift services. - ------ -## ServiceStack.Text - - - Allow adding metadata attributes to types or attributes at runtime - - Add JsConfig.ExcludeTypes option to skip serialization of non-serializable properties like Streams - - Change QueryString's to also adopt the configured `JsConfig.PropertyConvention` and `JsConfig.EmitLowercaseUnderscoreNames` behavior - - Added an injectable ComplexTypeStrategy to the QueryStringSerializer that allows customizing the generation of complex types, e.g. can use a hash literal notation strategy with `QueryStringStrategy.FormUrlEncoded`. - - Added `typeof(T).New()` extension method providing a fast way of creating new instances of static or runtime types that will use factory functions registered in the centralized `JsConfig.ModelFactory` (if configured). - - The string "on" (i.e. the default value for HTML checkbox) is considered a **true** value for booleans (same with '1') - - The JSON serializers can be configured to support UnixTime and UnixTimeMs for DateTime's - - Renamed JsonDateHandler to `DateHandler` and JsonPropertyConvention to `PropertyConvention` - -### HTTP Utils are now mockable - -Following in the steps of now being able to Mock OrmLite, the [HTTP Utils](https://github.com/ServiceStack/ServiceStack/wiki/Http-Utils) extension methods (http://bit.ly/WyV2tn) are now mockable, e.g: - - using (new HttpResultsFilter { - StringResult = "mocked" - }) - { - //All return "mocked" - "http://google.com".GetJsonFromUrl(); - "http://google.com".GetXmlFromUrl(); - "http://google.com".GetStringFromUrl(accept: "text/csv"); - "http://google.com".PostJsonToUrl(json: "{\"postdata\":1}"); - } - -More examples showing how all HTTP Apis can be mocked are at: http://bit.ly/HdWmgm - ------ - -## New pre-release MyGet Feeds - -Instead of publishing pre-release packages on NuGet, we're instead going to release our interim packages to [MyGet](https://www.myget.org/) first which provides greater control and allows better management of packages. - -The Instructions to add ServiceStack's MyGet feed to VS.NET are: - - 1. Go to Tools -> Options -> Package Manager -> Package Sources - 2. Add the Source **https://www.myget.org/F/servicestack** with the name of your choice, e.g. _ServiceStack MyGet feed_ - ------ - -## [Older v3 Release Notes](https://github.com/ServiceStack/ServiceStack/wiki/Release-Notes-v3) diff --git a/src/.nuget/NuGet.config b/src/.nuget/NuGet.config index 67f8ea046ef..fe6a62c920d 100644 --- a/src/.nuget/NuGet.config +++ b/src/.nuget/NuGet.config @@ -3,4 +3,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/.nuget/NuGet.exe b/src/.nuget/NuGet.exe old mode 100644 new mode 100755 index ed2b0a22192..856263ded82 Binary files a/src/.nuget/NuGet.exe and b/src/.nuget/NuGet.exe differ diff --git a/src/Directory.Build.props b/src/Directory.Build.props new file mode 100644 index 00000000000..5e8bf6fc362 --- /dev/null +++ b/src/Directory.Build.props @@ -0,0 +1,50 @@ + + + + 5.9.2 + ServiceStack + ServiceStack, Inc. + © 2008-2019 ServiceStack, Inc + true + https://github.com/ServiceStack/ServiceStack + https://servicestack.net/terms + https://servicestack.net/img/logo-64.png + https://docs.servicestack.net/release-notes-history + git + https://github.com/ServiceStack/ServiceStack.git + embedded + latest + true + true + false + + + + true + true + + + + $(DefineConstants);NET45 + True + False + ../servicestack.snk + + + + $(DefineConstants);NETSTANDARD;NETSTANDARD2_0 + + + + $(DefineConstants);NETSTANDARD;NETSTANDARD2_1 + + + + + + + + DEBUG + + + diff --git a/src/ServiceStack.Android.sln b/src/ServiceStack.Android.sln deleted file mode 100644 index 4313e911556..00000000000 --- a/src/ServiceStack.Android.sln +++ /dev/null @@ -1,32 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Client.Android", "ServiceStack.Client\ServiceStack.Client.Android.csproj", "{42E1C8C0-A163-44CC-92B1-8F416F2C0B01}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Interfaces.Android", "ServiceStack.Interfaces\ServiceStack.Interfaces.Android.csproj", "{854FB3DA-8C75-4DCC-B96E-FBD36A7AF2BC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Text.Android", "..\..\ServiceStack.Text\src\ServiceStack.Text\ServiceStack.Text.Android.csproj", "{579B3FDB-CDAD-44E1-8417-885C38E49A0E}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {42E1C8C0-A163-44CC-92B1-8F416F2C0B01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {42E1C8C0-A163-44CC-92B1-8F416F2C0B01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {42E1C8C0-A163-44CC-92B1-8F416F2C0B01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {42E1C8C0-A163-44CC-92B1-8F416F2C0B01}.Release|Any CPU.Build.0 = Release|Any CPU - {854FB3DA-8C75-4DCC-B96E-FBD36A7AF2BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {854FB3DA-8C75-4DCC-B96E-FBD36A7AF2BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {854FB3DA-8C75-4DCC-B96E-FBD36A7AF2BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {854FB3DA-8C75-4DCC-B96E-FBD36A7AF2BC}.Release|Any CPU.Build.0 = Release|Any CPU - {579B3FDB-CDAD-44E1-8417-885C38E49A0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {579B3FDB-CDAD-44E1-8417-885C38E49A0E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {579B3FDB-CDAD-44E1-8417-885C38E49A0E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {579B3FDB-CDAD-44E1-8417-885C38E49A0E}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/src/ServiceStack.AndroidIndie.sln b/src/ServiceStack.AndroidIndie.sln deleted file mode 100644 index 278dd57512f..00000000000 --- a/src/ServiceStack.AndroidIndie.sln +++ /dev/null @@ -1,32 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Interfaces.AndroidIndie", "ServiceStack.Interfaces\ServiceStack.Interfaces.AndroidIndie.csproj", "{42E1C8C0-A163-44CC-92B1-8F416F2C0B01}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Client.AndroidIndie", "ServiceStack.Client\ServiceStack.Client.AndroidIndie.csproj", "{923E3732-3AEE-42B3-96AB-D3235DAADD48}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Text.AndroidIndie", "..\..\ServiceStack.Text\src\ServiceStack.Text\ServiceStack.Text.AndroidIndie.csproj", "{579B3FDB-CDAD-44E1-8417-885C38E49A0E}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {42E1C8C0-A163-44CC-92B1-8F416F2C0B01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {42E1C8C0-A163-44CC-92B1-8F416F2C0B01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {42E1C8C0-A163-44CC-92B1-8F416F2C0B01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {42E1C8C0-A163-44CC-92B1-8F416F2C0B01}.Release|Any CPU.Build.0 = Release|Any CPU - {923E3732-3AEE-42B3-96AB-D3235DAADD48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {923E3732-3AEE-42B3-96AB-D3235DAADD48}.Debug|Any CPU.Build.0 = Debug|Any CPU - {923E3732-3AEE-42B3-96AB-D3235DAADD48}.Release|Any CPU.ActiveCfg = Release|Any CPU - {923E3732-3AEE-42B3-96AB-D3235DAADD48}.Release|Any CPU.Build.0 = Release|Any CPU - {579B3FDB-CDAD-44E1-8417-885C38E49A0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {579B3FDB-CDAD-44E1-8417-885C38E49A0E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {579B3FDB-CDAD-44E1-8417-885C38E49A0E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {579B3FDB-CDAD-44E1-8417-885C38E49A0E}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/src/ServiceStack.Api.OpenApi/OpenApiFeature.cs b/src/ServiceStack.Api.OpenApi/OpenApiFeature.cs new file mode 100644 index 00000000000..d26359685e1 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/OpenApiFeature.cs @@ -0,0 +1,189 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using ServiceStack.Host.Handlers; +using ServiceStack.IO; +using ServiceStack.Api.OpenApi.Specification; +using ServiceStack.Auth; + +namespace ServiceStack.Api.OpenApi +{ + public class OpenApiFeature : IPlugin, IPreInitPlugin, Model.IHasStringId + { + public string Id { get; set; } = Plugins.OpenApi; + /// + /// Gets or sets pattern to filter available resources. + /// + public string ResourceFilterPattern { get; set; } + + public bool UseCamelCaseSchemaPropertyNames { get; set; } + + public bool UseLowercaseUnderscoreSchemaPropertyNames { get; set; } + + public bool DisableAutoDtoInBodyParam { get; set; } + + public string LogoUrl { get; set; } + + public string LogoHref { get; set; } + + public Action ApiDeclarationFilter { get; set; } + + /// + /// Operation filter. Action takes a verb and operation as parameters + /// + public Action OperationFilter { get; set; } + + public Action SchemaFilter { get; set; } + + public Action SchemaPropertyFilter { get; set; } + + public List Tags { get; set; } + + public List AnyRouteVerbs { get; set; } + + public List InlineSchemaTypesInNamespaces { get; set; } + + public bool DisableSwaggerUI { get; set; } + + public Dictionary SecurityDefinitions { get; set; } + + public Dictionary> OperationSecurity { get; set; } + + public bool UseBearerSecurity + { + set + { + SecurityDefinitions = new Dictionary { + { "Bearer", new OpenApiSecuritySchema { + Type = "apiKey", + Name = "Authorization", + In = "header", + } } + }; + OperationSecurity = new Dictionary> { + { "Bearer", new List() } + }; + } + } + + public bool UseBasicSecurity + { + set + { + SecurityDefinitions = new Dictionary { + { "basic", new OpenApiSecuritySchema { Type = "basic" } } + }; + OperationSecurity = new Dictionary> { + { "basic", new List() } + }; + } + } + + public OpenApiFeature() + { + Tags = new List(); + AnyRouteVerbs = new List { HttpMethods.Get, HttpMethods.Post, HttpMethods.Put, HttpMethods.Delete }; + InlineSchemaTypesInNamespaces = new List(); + } + + public void BeforePluginsLoaded(IAppHost appHost) + { + appHost.Config.EmbeddedResourceSources.Add(typeof(OpenApiFeature).Assembly); + } + + public void Register(IAppHost appHost) + { + if (ResourceFilterPattern != null) + OpenApiService.resourceFilterRegex = new Regex(ResourceFilterPattern, RegexOptions.Compiled); + + if (SecurityDefinitions == null && OperationSecurity == null) + { + var useBasicAuth = appHost.GetPlugin()?.AuthProviders + ?.Any(x => x.Provider == AuthenticateService.BasicProvider) == true; + if (!useBasicAuth) + UseBearerSecurity = true; + else + UseBasicSecurity = true; + } + + OpenApiService.UseCamelCaseSchemaPropertyNames = UseCamelCaseSchemaPropertyNames; + OpenApiService.UseLowercaseUnderscoreSchemaPropertyNames = UseLowercaseUnderscoreSchemaPropertyNames; + OpenApiService.DisableAutoDtoInBodyParam = DisableAutoDtoInBodyParam; + OpenApiService.ApiDeclarationFilter = ApiDeclarationFilter; + OpenApiService.OperationFilter = OperationFilter; + OpenApiService.SchemaFilter = SchemaFilter; + OpenApiService.SchemaPropertyFilter = SchemaPropertyFilter; + OpenApiService.AnyRouteVerbs = AnyRouteVerbs.ToArray(); + OpenApiService.InlineSchemaTypesInNamespaces = InlineSchemaTypesInNamespaces.ToArray(); + OpenApiService.SecurityDefinitions = SecurityDefinitions; + OpenApiService.OperationSecurity = OperationSecurity; + + appHost.RegisterService(typeof(OpenApiService), "/openapi"); + + if (!DisableSwaggerUI) + { + var swaggerUrl = "swagger-ui/"; + + appHost.GetPlugin() + .AddPluginLink(swaggerUrl, "Swagger UI"); + + appHost.CatchAllHandlers.Add((httpMethod, pathInfo, filePath) => + { + IVirtualFile indexFile; + IVirtualFile patchFile = null; + IVirtualFile patchPreLoadFile = null; + switch (pathInfo) + { + case "/swagger-ui/": + case "/swagger-ui/default.html": + indexFile = appHost.VirtualFileSources.GetFile("/swagger-ui/index.html"); + patchFile = appHost.VirtualFileSources.GetFile("/swagger-ui/patch.js"); + patchPreLoadFile = appHost.VirtualFileSources.GetFile("/swagger-ui/patch-preload.js"); + break; + default: + indexFile = null; + break; + } + if (indexFile != null) + { + var html = indexFile.ReadAllText(); + var injectJs = patchFile?.ReadAllText(); + var injectPreloadJs = patchPreLoadFile?.ReadAllText(); + + return new CustomResponseHandler((req, res) => + { + res.ContentType = MimeTypes.HtmlUtf8; //use alt HTML ContentType so it's not overridden when Feature.Html is removed + var resourcesUrl = req.ResolveAbsoluteUrl("~/openapi"); + html = html.Replace("http://petstore.swagger.io/v2/swagger.json", resourcesUrl) + .Replace("ApiDocs", HostContext.ServiceName) + .Replace("swagger", $"{HostContext.ServiceName}") + .Replace("http://swagger.io", LogoHref ?? "./"); + + if (LogoUrl != null) + html = html.Replace("images/logo_small.png", LogoUrl); + + if (injectPreloadJs != null) + { + html = html.Replace("window.swaggerUi.load();", injectPreloadJs + "\n\n window.swaggerUi.load();"); + } + + if (injectJs != null) + { + html = html.Replace("", + ""); + } + + return html; + }); + } + return pathInfo.StartsWith("/swagger-ui/") + ? new StaticFileHandler() + : null; + }); + } + } + + public static bool IsEnabled => HostContext.HasPlugin(); + } +} \ No newline at end of file diff --git a/src/ServiceStack.Api.OpenApi/OpenApiService.cs b/src/ServiceStack.Api.OpenApi/OpenApiService.cs new file mode 100644 index 00000000000..28219b558b4 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/OpenApiService.cs @@ -0,0 +1,1062 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Runtime.Serialization; +using System.Text.RegularExpressions; +using ServiceStack.DataAnnotations; +using ServiceStack.Host; +using ServiceStack.NativeTypes; +using ServiceStack.Text; +using ServiceStack.Web; +using ServiceStack.Api.OpenApi.Support; +using ServiceStack.Api.OpenApi.Specification; + +namespace ServiceStack.Api.OpenApi +{ + [DataContract] + [Exclude(Feature.Soap)] + public class OpenApiSpecification : IReturn + { + [DataMember(Name = "apiKey")] + public string ApiKey { get; set; } + } + + [AddHeader(DefaultContentType = MimeTypes.Json)] + [DefaultRequest(typeof(OpenApiSpecification))] + [Restrict(VisibilityTo = RequestAttributes.None)] + public class OpenApiService : Service + { + internal static bool UseCamelCaseSchemaPropertyNames { get; set; } + internal static bool UseLowercaseUnderscoreSchemaPropertyNames { get; set; } + internal static bool DisableAutoDtoInBodyParam { get; set; } + + internal static Regex resourceFilterRegex; + + internal static Action ApiDeclarationFilter { get; set; } + internal static Action OperationFilter { get; set; } + internal static Action SchemaFilter { get; set; } + internal static Action SchemaPropertyFilter { get; set; } + internal static string[] AnyRouteVerbs { get; set; } + internal static string[] InlineSchemaTypesInNamespaces { get; set; } + + public static Dictionary SecurityDefinitions { get; set; } + public static Dictionary> OperationSecurity { get; set; } + + public object Get(OpenApiSpecification request) + { + var map = HostContext.ServiceController.RestPathMap; + var paths = new List(); + + var basePath = new Uri(base.Request.GetBaseUrl()); + + var meta = HostContext.Metadata; + + foreach (var key in map.Keys) + { + var restPaths = map[key]; + var visiblePaths = restPaths.Where(x => meta.IsVisible(Request, Format.Json, x.RequestType.Name)); + paths.AddRange(visiblePaths); + } + + var definitions = new Dictionary + { + { "Object", new OpenApiSchema { Description = "Object", Type = OpenApiType.Object, Properties = new OrderedDictionary() } }, + }; + + foreach (var restPath in paths.SelectMany(x => x.Verbs.Select(y => new { Value = x, Verb = y }))) + { + ParseDefinitions(definitions, restPath.Value.RequestType, restPath.Value.Path, restPath.Verb); + } + + var tags = new Dictionary(); + var apiPaths = ParseOperations(paths, definitions, tags); + + var result = new OpenApiDeclaration + { + Info = new OpenApiInfo + { + Title = HostContext.ServiceName, + Version = HostContext.Config.ApiVersion, + }, + Paths = apiPaths, + BasePath = basePath.AbsolutePath, + Schemes = new List { basePath.Scheme }, //TODO: get https from config + Host = basePath.Authority, + Consumes = new List { "application/json" }, + Produces = new List { "application/json" }, + Definitions = definitions.Where(x => !SchemaIdToClrType.ContainsKey(x.Key) || !IsInlineSchema(SchemaIdToClrType[x.Key])).ToDictionary(x => x.Key, x => x.Value), + Tags = tags.Values.OrderBy(x => x.Name).ToList(), + Parameters = new Dictionary { { "Accept", GetAcceptHeaderParameter() } }, + SecurityDefinitions = SecurityDefinitions, + }; + + if (OperationFilter != null) + apiPaths.Each(x => GetOperations(x.Value).Each(o => OperationFilter(o.Item1, o.Item2))); + + ApiDeclarationFilter?.Invoke(result); + + return new HttpResult(result) + { + ResultScope = () => JsConfig.With(new Config + { + IncludeNullValues = false, + IncludeNullValuesInDictionaries = false, + IncludeTypeInfo = false, + ExcludeTypeInfo = true, + }) + }; + } + + private IEnumerable> GetOperations(OpenApiPath value) + { + if (value.Get != null) yield return new Tuple("GET", value.Get); + if (value.Post != null) yield return new Tuple("POST", value.Post); + if (value.Put != null) yield return new Tuple("PUT", value.Put); + if (value.Patch != null) yield return new Tuple("PATCH", value.Patch); + if (value.Delete != null) yield return new Tuple("DELETE", value.Delete); + if (value.Head != null) yield return new Tuple("HEAD", value.Head); + if (value.Options != null) yield return new Tuple("OPTIONS", value.Options); + } + + private static readonly Dictionary ClrTypesToSwaggerScalarTypes = new Dictionary { + {typeof(byte[]), OpenApiType.String}, + {typeof(sbyte[]), OpenApiType.String}, + {typeof(byte), OpenApiType.Integer}, + {typeof(sbyte), OpenApiType.Integer}, + {typeof(bool), OpenApiType.Boolean}, + {typeof(short), OpenApiType.Integer}, + {typeof(ushort), OpenApiType.Integer}, + {typeof(int), OpenApiType.Integer}, + {typeof(uint), OpenApiType.Integer}, + {typeof(long), OpenApiType.Integer}, + {typeof(ulong), OpenApiType.Integer}, + {typeof(float), OpenApiType.Number}, + {typeof(double), OpenApiType.Number}, + {typeof(decimal), OpenApiType.Number}, + {typeof(string), OpenApiType.String}, + {typeof(DateTime), OpenApiType.String}, + {typeof(DateTimeOffset), OpenApiType.String}, + }; + + private static readonly Dictionary ClrTypesToSwaggerScalarFormats = new Dictionary { + {typeof(byte[]), OpenApiTypeFormat.Byte}, + {typeof(sbyte[]), OpenApiTypeFormat.Byte}, + {typeof(byte), OpenApiTypeFormat.Int}, + {typeof(sbyte), OpenApiTypeFormat.Int}, + {typeof(short), OpenApiTypeFormat.Int}, + {typeof(ushort), OpenApiTypeFormat.Int}, + {typeof(int), OpenApiTypeFormat.Int}, + {typeof(uint), OpenApiTypeFormat.Int}, + {typeof(long), OpenApiTypeFormat.Long}, + {typeof(ulong), OpenApiTypeFormat.Long}, + {typeof(float), OpenApiTypeFormat.Float}, + {typeof(double), OpenApiTypeFormat.Double}, + {typeof(decimal), OpenApiTypeFormat.Double}, + {typeof(DateTime), OpenApiTypeFormat.DateTime}, + {typeof(DateTimeOffset), OpenApiTypeFormat.DateTime}, + }; + + private static bool IsSwaggerScalarType(Type type) + { + return ClrTypesToSwaggerScalarTypes.ContainsKey(type) + || (Nullable.GetUnderlyingType(type) ?? type).IsEnum + || (type.IsValueType && !IsKeyValuePairType(type)) + || type.IsNullableType(); + } + + private static string GetSwaggerTypeName(Type type) + { + var lookupType = Nullable.GetUnderlyingType(type) ?? type; + + return ClrTypesToSwaggerScalarTypes.ContainsKey(lookupType) + ? ClrTypesToSwaggerScalarTypes[lookupType] + : GetSchemaTypeName(lookupType); + } + + private static string GetSwaggerTypeFormat(Type type, string route = null, string verb = null) + { + var lookupType = Nullable.GetUnderlyingType(type) ?? type; + + //special case for response types byte[]. If byte[] is in response + //then we should use `binary` swagger type, because it's octet-encoded + //otherwise we use `byte` swagger type for base64-encoded input + if (route == null && verb == null && type == typeof(byte[])) + return OpenApiTypeFormat.Binary; + + return ClrTypesToSwaggerScalarFormats.TryGetValue(lookupType, out var format) ? format : null; + } + + private static Type GetListElementType(Type type) + { + if (type.IsArray) return type.GetElementType(); + + if (!type.IsGenericType) return null; + var genericType = type.GetGenericTypeDefinition(); + if (genericType == typeof(List<>) || genericType == typeof(IList<>) || genericType == typeof(IEnumerable<>)) + return type.GetGenericArguments()[0]; + return null; + } + + private static bool IsListType(Type type) + { + //Swagger2 specification has a special data format for type byte[] ('byte', 'binary' or 'file'), so it's not a list + if (type == typeof(byte[])) + return false; + + return GetListElementType(type) != null; + } + + private Dictionary GetOpenApiListItems(Type listItemType, string route, string verb, ApiAllowableValuesAttribute allowableValueAttrs = null) + { + var items = new Dictionary(); + + if (IsSwaggerScalarType(listItemType)) + { + items.Add("type", GetSwaggerTypeName(listItemType)); + items.Add("format", GetSwaggerTypeFormat(listItemType, route, verb)); + if (IsRequiredType(listItemType)) + { + items.Add("x-nullable", false); + } + var enumValues = GetEnumValues(allowableValueAttrs); + if (enumValues?.Count > 0) + { + items.Add("enum", enumValues); + } + } + else + { + items.Add("$ref", "#/definitions/" + GetSchemaTypeName(listItemType)); + } + + return items; + } + + private OpenApiSchema GetListSchema(IDictionary schemas, Type schemaType, string route, string verb) + { + if (!IsListType(schemaType)) + return null; + + var listItemType = GetListElementType(schemaType); + ParseDefinitions(schemas, listItemType, route, verb); + + return new OpenApiSchema + { + Title = GetSchemaTypeName(schemaType), + Type = OpenApiType.Array, + Items = GetOpenApiListItems(listItemType, route, verb) + }; + } + + private static bool IsDictionaryType(Type type) + { + if (!type.IsGenericType) return false; + + var genericType = type.GetGenericTypeDefinition(); + if (genericType == typeof(Dictionary<,>) + || genericType == typeof(IDictionary<,>) + || genericType == typeof(IReadOnlyDictionary<,>) + || genericType == typeof(SortedDictionary<,>)) + { + return true; + } + + return false; + } + + private OpenApiSchema GetDictionarySchema(IDictionary schemas, Type schemaType, string route, string verb) + { + if (!IsDictionaryType(schemaType)) + return null; + + var valueType = schemaType.GetGenericArguments()[1]; + + ParseDefinitions(schemas, valueType, route, verb); + + return new OpenApiSchema + { + Title = GetSchemaTypeName(schemaType), + Type = OpenApiType.Object, + Description = schemaType.GetDescription() ?? GetSchemaTypeName(schemaType), + AdditionalProperties = GetOpenApiProperty(schemas, valueType, route, verb) + }; + } + + private static bool IsKeyValuePairType(Type type) + { + return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(KeyValuePair<,>); + } + + private OpenApiSchema GetKeyValuePairSchema(IDictionary schemas, Type schemaType, string route, string verb) + { + if (!IsKeyValuePairType(schemaType)) + return null; + + var keyType = schemaType.GetGenericArguments()[0]; + var valueType = schemaType.GetGenericArguments()[1]; + + return new OpenApiSchema + { + Type = OpenApiType.Object, + Title = GetSchemaTypeName(schemaType), + Description = schemaType.GetDescription() ?? GetSchemaTypeName(schemaType), + Properties = new OrderedDictionary + { + { "Key", GetOpenApiProperty(schemas, keyType, route, verb) }, + { "Value", GetOpenApiProperty(schemas, valueType, route, verb) } + } + }; + } + + private static bool IsRequiredType(Type type) + { + return !type.IsNullableType() && type != typeof(string); + } + + private static string GetSchemaTypeName(Type schemaType) + { + if ((!IsKeyValuePairType(schemaType) && schemaType.IsValueType) || schemaType.IsNullableType()) + return OpenApiType.String; + + if (!schemaType.IsGenericType) + return schemaType.Name; + + var typeName = schemaType.ToPrettyName(); + return typeName; + } + + private static string GetSchemaDefinitionRef(Type schemaType) => + swaggerRefRegex.Replace(GetSchemaTypeName(schemaType), "_"); + + private static readonly Regex swaggerRefRegex = new Regex("[^A-Za-z0-9\\.\\-_]", RegexOptions.Compiled); + + private OpenApiProperty GetOpenApiProperty(IDictionary schemas, PropertyInfo pi, string route, string verb) + { + var ret = GetOpenApiProperty(schemas, pi.PropertyType, route, verb); + ret.PropertyInfo = pi; + return ret; + } + + private OpenApiProperty GetOpenApiProperty(IDictionary schemas, Type propertyType, string route, string verb) + { + var schemaProp = new OpenApiProperty { + PropertyType = propertyType, + }; + + if (IsKeyValuePairType(propertyType)) + { + if (IsInlineSchema(propertyType)) + { + ParseDefinitions(schemas, propertyType, route, verb); + InlineSchema(schemas[GetSchemaTypeName(propertyType)], schemaProp); + } + else + { + ParseDefinitions(schemas, propertyType, route, verb); + schemaProp.Ref = "#/definitions/" + GetSchemaDefinitionRef(propertyType); + } + } + else if (IsListType(propertyType)) + { + schemaProp.Type = OpenApiType.Array; + var listItemType = GetListElementType(propertyType); + if (IsSwaggerScalarType(listItemType)) + { + schemaProp.Items = new Dictionary + { + { "type", GetSwaggerTypeName(listItemType) }, + { "format", GetSwaggerTypeFormat(listItemType, route, verb) } + }; + if (IsRequiredType(listItemType)) + { + schemaProp.Items.Add("x-nullable", false); + //schemaProp.Items.Add("required", "true"); + } + ParseDefinitions(schemas, listItemType, route, verb); + } + else if (IsInlineSchema(listItemType)) + { + ParseDefinitions(schemas, listItemType, route, verb); + InlineSchema(schemas[GetSchemaTypeName(listItemType)], schemaProp); + } + else + { + schemaProp.Items = new Dictionary { { "$ref", "#/definitions/" + GetSchemaDefinitionRef(listItemType) } }; + ParseDefinitions(schemas, listItemType, route, verb); + } + } + else if ((Nullable.GetUnderlyingType(propertyType) ?? propertyType).IsEnum) + { + var enumType = Nullable.GetUnderlyingType(propertyType) ?? propertyType; + if (enumType.IsNumericType()) + { + var underlyingType = Enum.GetUnderlyingType(enumType); + schemaProp.Type = GetSwaggerTypeName(underlyingType); + schemaProp.Format = GetSwaggerTypeFormat(underlyingType, route, verb); + schemaProp.Enum = GetNumericValues(enumType, underlyingType).ToList(); + } + else + { + schemaProp.Type = OpenApiType.String; + schemaProp.Enum = Enum.GetNames(enumType).ToList(); + } + } + else if (IsSwaggerScalarType(propertyType)) + { + schemaProp.Type = GetSwaggerTypeName(propertyType); + schemaProp.Format = GetSwaggerTypeFormat(propertyType, route, verb); + schemaProp.Nullable = IsRequiredType(propertyType) ? false : (bool?)null; + //schemaProp.Required = IsRequiredType(propertyType) ? true : (bool?)null; + } + else if (IsInlineSchema(propertyType)) + { + ParseDefinitions(schemas, propertyType, route, verb); + InlineSchema(schemas[GetSchemaTypeName(propertyType)], schemaProp); + } + else + { + ParseDefinitions(schemas, propertyType, route, verb); + schemaProp.Ref = "#/definitions/" + GetSchemaDefinitionRef(propertyType); + } + + return schemaProp; + } + + private static void InlineSchema(OpenApiSchema schema, OpenApiProperty schemaProp) + { + schemaProp.Items = new Dictionary + { + {"title", schema.Title}, + {"discriminator", schema.Discriminator}, + {"readOnly", schema.ReadOnly}, + {"xml", schema.Xml}, + {"externalDocs", schema.ExternalDocs}, + {"example", schema.Example}, + {"required", schema.Required}, + {"allOf", schema.AllOf}, + {"properties", schema.Properties}, + {"additionalProperties", schema.AdditionalProperties}, + {"description", schema.Description}, + {"type", schema.Type}, + {"format", schema.Format}, + {"items", schema.Items}, + {"collectionFormat", schema.CollectionFormat}, + {"default", schema.Default}, + {"maximum", schema.Maximum}, + {"exclusiveMaximum", schema.ExclusiveMaximum}, + {"exclusiveMinimum", schema.ExclusiveMinimum}, + {"maxLength", schema.MaxLength}, + {"minLength", schema.MinLength}, + {"pattern", schema.Pattern}, + {"maxItems", schema.MaxItems}, + {"minItems", schema.MinItems}, + {"uniqueItems", schema.UniqueItems}, + {"maxProperties", schema.MaxProperties}, + {"minProperties", schema.MinProperties}, + {"enum", schema.Enum}, + {"multipleOf", schema.MultipleOf}, + {"x-nullable", schema.Nullable} + }; + } + + protected bool IsInlineSchema(Type schemaType) + { + return InlineSchemaTypesInNamespaces.Contains(schemaType.Namespace); + } + + public Dictionary SchemaIdToClrType { get; } = new Dictionary(); + + private void ParseDefinitions(IDictionary schemas, Type schemaType, string route, string verb) + { + if (IsSwaggerScalarType(schemaType) || schemaType.ExcludesFeature(Feature.Metadata)) return; + + var schemaId = GetSchemaDefinitionRef(schemaType); + if (schemas.ContainsKey(schemaId)) return; + + var schema = GetDictionarySchema(schemas, schemaType, route, verb) + ?? GetKeyValuePairSchema(schemas, schemaType, route, verb) + ?? GetListSchema(schemas, schemaType, route, verb); + + bool parseProperties = false; + + if (schema == null) + { + schema = new OpenApiSchema + { + Type = OpenApiType.Object, + Title = schemaType.Name, + Description = schemaType.GetDescription() ?? GetSchemaTypeName(schemaType), + Properties = new OrderedDictionary() + }; + parseProperties = schemaType.IsUserType(); + } + schemas[schemaId] = schema; + SchemaIdToClrType[schemaId] = schemaType; + + var properties = schemaType.GetProperties(); + + // Order schema properties by DataMember.Order if [DataContract] and [DataMember](s) defined + // Ordering defined by: http://msdn.microsoft.com/en-us/library/ms729813.aspx + var dataContractAttr = schemaType.FirstAttribute(); + if (dataContractAttr != null && properties.Any(prop => prop.IsDefined(typeof(DataMemberAttribute), true))) + { + var typeOrder = new List { schemaType }; + var baseType = schemaType.BaseType; + while (baseType != null) + { + typeOrder.Add(baseType); + baseType = baseType.BaseType; + } + + var propsWithDataMember = properties.Where(prop => prop.IsDefined(typeof(DataMemberAttribute), true)); + var propDataMemberAttrs = properties.ToDictionary(prop => prop, prop => prop.FirstAttribute()); + + properties = propsWithDataMember + .OrderBy(prop => propDataMemberAttrs[prop].Order) // Order by DataMember.Order + .ThenByDescending(prop => typeOrder.IndexOf(prop.DeclaringType)) // Then by BaseTypes First + .ThenBy(prop => // Then by [DataMember].Name / prop.Name + { + var name = propDataMemberAttrs[prop].Name; + return name.IsNullOrEmpty() ? prop.Name : name; + }).ToArray(); + } + + if (parseProperties) + { + foreach (var prop in properties) + { + if (prop.HasAttribute()) + continue; + + var apiMembers = prop + .AllAttributes() + .OrderByDescending(attr => attr.Route) + .ToList(); + var apiDoc = apiMembers + .Where(attr => string.IsNullOrEmpty(verb) || string.IsNullOrEmpty(attr.Verb) || (verb ?? "").Equals(attr.Verb)) + .Where(attr => string.IsNullOrEmpty(route) || string.IsNullOrEmpty(attr.Route) || (route ?? "").StartsWith(attr.Route)) + .FirstOrDefault(attr => attr.ParameterType == "body" || attr.ParameterType == "model"); + + if (apiMembers.Any(x => x.ExcludeInSchema)) + continue; + var schemaProperty = GetOpenApiProperty(schemas, prop, route, verb); + var schemaPropertyName = GetSchemaPropertyName(prop); + + schemaProperty.Description = prop.GetDescription() ?? apiDoc?.Description; + + var propAttr = prop.FirstAttribute(); + if (propAttr != null) + { + if (propAttr.DataType != null) + schemaProperty.Type = propAttr.DataType; + + if (propAttr.Format != null) + schemaProperty.Format = propAttr.Format; + + if (propAttr.IsRequired) + { + if (schema.Required == null) + schema.Required = new List(); + schema.Required.Add(schemaPropertyName); + } + } + + schemaProperty.Enum = GetEnumValues(prop.FirstAttribute()); + + SchemaPropertyFilter?.Invoke(schemaProperty); + + schema.Properties[schemaPropertyName] = schemaProperty; + } + } + } + + private static string GetSchemaPropertyName(PropertyInfo prop) + { + var dataMemberAttr = prop.FirstAttribute(); + if (dataMemberAttr != null && !dataMemberAttr.Name.IsNullOrEmpty()) + return dataMemberAttr.Name; + + return UseCamelCaseSchemaPropertyNames + ? (UseLowercaseUnderscoreSchemaPropertyNames ? prop.Name.ToLowercaseUnderscore() : prop.Name.ToCamelCase()) + : prop.Name; + } + + private static IEnumerable GetNumericValues(Type propertyType, Type underlyingType) + { + var values = Enum.GetValues(propertyType) + .Map(x => $"{Convert.ChangeType(x, underlyingType)} ({x})"); + + return values; + } + + private OpenApiSchema GetResponseSchema(IRestPath restPath, IDictionary schemas, out string schemaDescription) + { + schemaDescription = string.Empty; + + // Given: class MyDto : IReturn. Determine the type X. + foreach (var i in restPath.RequestType.GetInterfaces()) + { + if (i == typeof(IReturnVoid)) + return GetSchemaForResponseType(typeof(void), schemas, out schemaDescription); + + if (i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IReturn<>)) + { + var schemaType = i.GetGenericArguments()[0]; + return GetSchemaForResponseType(schemaType, schemas, out schemaDescription); + } + } + + return new OpenApiSchema { Ref = "#/definitions/Object" }; + } + + private OpenApiSchema GetSchemaForResponseType(Type schemaType, IDictionary schemas, out string schemaDescription) + { + if (schemaType == typeof(IReturnVoid) || schemaType == typeof(void)) + { + schemaDescription = "No Content"; + return null; + } + + ParseDefinitions(schemas, schemaType, null, null); + + var schema = GetDictionarySchema(schemas, schemaType, null, null) + ?? GetKeyValuePairSchema(schemas, schemaType, null, null) + ?? GetListSchema(schemas, schemaType, null, null) + ?? (IsSwaggerScalarType(schemaType) + ? new OpenApiSchema + { + Title = GetSchemaTypeName(schemaType), + Type = GetSwaggerTypeName(schemaType), + Format = GetSwaggerTypeFormat(schemaType) + } + : IsInlineSchema(schemaType) + ? schemas[GetSchemaTypeName(schemaType)] + : new OpenApiSchema { Ref = "#/definitions/" + GetSchemaDefinitionRef(schemaType) }); + + schemaDescription = schema.Description ?? schemaType.GetDescription() ?? string.Empty; + + return schema; + } + + private OrderedDictionary GetMethodResponseCodes(IRestPath restPath, IDictionary schemas, Type requestType) + { + var responses = new OrderedDictionary(); + + var responseSchema = GetResponseSchema(restPath, schemas, out string schemaDescription); + //schema is null when return type is IReturnVoid + var statusCode = responseSchema == null && HostConfig.Instance.Return204NoContentForEmptyResponse + ? ((int)HttpStatusCode.NoContent).ToString() + : ((int)HttpStatusCode.OK).ToString(); + + responses.Add(statusCode, new OpenApiResponse + { + Schema = responseSchema, + Description = !string.IsNullOrEmpty(schemaDescription) ? schemaDescription : "Success" + }); + + foreach (var attr in requestType.AllAttributes()) + { + string apiSchemaDescription = string.Empty; + + var response = new OpenApiResponse + { + Schema = attr.ResponseType != null + ? GetSchemaForResponseType(attr.ResponseType, schemas, out apiSchemaDescription) + : responseSchema, + Description = attr.Description ?? apiSchemaDescription + }; + + statusCode = attr.IsDefaultResponse ? "default" : attr.StatusCode.ToString(); + if (!responses.ContainsKey(statusCode)) + responses.Add(statusCode, response); + else + responses[statusCode] = response; + } + + return responses; + } + + private OrderedDictionary ParseOperations(List restPaths, Dictionary schemas, Dictionary tags) + { + var feature = HostContext.GetPlugin(); + var apiPaths = new OrderedDictionary(); + + foreach (var restPath in restPaths) + { + var verbs = new List(); + var summary = restPath.Summary ?? restPath.RequestType.GetDescription(); + + verbs.AddRange(restPath.AllowsAllVerbs + ? AnyRouteVerbs + : restPath.Verbs); + + var routePath = restPath.Path.Replace("*", ""); + var requestType = restPath.RequestType; + + if (!apiPaths.TryGetValue(restPath.Path, out var curPath)) + { + curPath = new OpenApiPath + { + Parameters = new List + { + new OpenApiParameter { Ref = "#/parameters/Accept" } + } + }; + apiPaths.Add(restPath.Path, curPath); + } + + var op = HostContext.Metadata.OperationsMap[requestType]; + var actions = HostContext.Metadata.GetImplementedActions(op.ServiceType, op.RequestType); + + var authAttrs = new[] { op.ServiceType, op.RequestType } + .SelectMany(x => x.AllAttributes().OfType()).ToList(); + + authAttrs.AddRange(actions + .Where(x => x.Name.ToUpperInvariant() == ActionContext.AnyAction) + .SelectMany(x => x.AllAttributes()) + ); + + var annotatingTagAttributes = requestType.AllAttributes(); + + foreach (var verb in verbs) + { + var needAuth = authAttrs.Count > 0 + || actions.Where(x => x.Name.ToUpperInvariant() == verb) + .SelectMany(x => x.AllAttributes()).Any(); + + var userTags = new List(); + if (ApplyToUtils.VerbsApplyTo.TryGetValue(verb, out var applyToVerb)) + { + userTags = annotatingTagAttributes.Where(x => x.ApplyTo.HasFlag(applyToVerb)).Select(x => x.Name).ToList(); + } + + var operation = new OpenApiOperation + { + RequestType = requestType.Name, + Summary = summary, + Description = restPath.Notes ?? summary, + OperationId = GetOperationName(requestType.Name, routePath, verb), + Parameters = ParseParameters(schemas, requestType, routePath, verb), + Responses = GetMethodResponseCodes(restPath, schemas, requestType), + Consumes = new List { "application/json" }, + Produces = new List { "application/json" }, + Tags = userTags.Count > 0 ? userTags : GetTags(restPath.Path), + Deprecated = requestType.HasAttribute(), + Security = needAuth ? new List>> { + OperationSecurity + } : null + }; + + if (HasFormData(verb, operation.Parameters)) + operation.Consumes = new List { "application/x-www-form-urlencoded" }; + + foreach (var tag in operation.Tags) + { + if (!tags.ContainsKey(tag)) + { + var tagObject = feature.Tags.FirstOrDefault(x => x.Name == tag) + ?? new OpenApiTag { Name = tag }; + + tags.Add(tag, tagObject); + } + } + + switch (verb) + { + case HttpMethods.Get: curPath.Get = operation; break; + case HttpMethods.Post: curPath.Post = operation; break; + case HttpMethods.Put: curPath.Put = operation; break; + case HttpMethods.Delete: curPath.Delete = operation; break; + case HttpMethods.Patch: curPath.Patch = operation; break; + case HttpMethods.Head: curPath.Head = operation; break; + case HttpMethods.Options: curPath.Options = operation; break; + } + } + } + + return apiPaths; + } + + private bool IsFormData(string verb, ApiAttribute apiAttr) + { + if (verb != HttpMethods.Post && verb != HttpMethods.Put) + return false; + + if (apiAttr?.BodyParameter == GenerateBodyParameter.Always + || (!DisableAutoDtoInBodyParam && apiAttr?.BodyParameter != GenerateBodyParameter.Never)) + return false; + + return true; + } + + private bool HasFormData(string verb, List parameters) + { + return (verb == HttpMethods.Post || verb == HttpMethods.Put) && parameters.Any(p => p.In == "formData"); + } + + static readonly Dictionary postfixes = new Dictionary() + { + { HttpMethods.Get, "_Get" }, //'Get' or 'List' to pass Autorest validation + { HttpMethods.Put, "_Create" }, //'Create' to pass Autorest validation + { HttpMethods.Post, "_Post" }, + { HttpMethods.Patch, "_Update" }, //'Update' to pass Autorest validation + { HttpMethods.Delete, "_Delete" } //'Delete' to pass Autorest validation + }; + + + HashSet operationIds = new HashSet(); + + /// Returns operation postfix to make operationId unique and swagger json be validable + private string GetOperationName(string name, string route, string verb) + { + string pathPostfix = string.Empty; + + var entries = route.Replace("{", string.Empty) + .Replace("}", string.Empty) + .Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + + if (entries.Length > 1) + pathPostfix = string.Join(string.Empty, entries, 1, entries.Length - 1); + + postfixes.TryGetValue(verb, out var verbPostfix); + verbPostfix = verbPostfix ?? string.Empty; + + var operationId = name + pathPostfix + verbPostfix; + + int num = 2; + while (operationIds.Contains(operationId)) + { + operationId = name + pathPostfix + num + verbPostfix; + num++; + } + + operationIds.Add(operationId); + + return operationId; + } + + private static List GetEnumValues(ApiAllowableValuesAttribute attr) + { + return attr?.Values?.ToList(); + } + + private List ParseParameters(IDictionary schemas, Type operationType, string route, string verb) + { + var hasDataContract = operationType.HasAttribute(); + var apiAttr = operationType.FirstAttribute(); + + var properties = operationType.GetProperties(); + var paramAttrs = new Dictionary(); + var propertyTypes = new Dictionary(); + var allowableParams = new List(); + var defaultOperationParameters = new List(); + + var hasApiMembers = false; + + foreach (var property in properties) + { + if (property.HasAttribute()) + continue; + + var attr = hasDataContract + ? property.FirstAttribute() + : null; + + var propertyName = attr?.Name ?? property.Name; + + var apiMembers = property.AllAttributes(); + if (apiMembers.Length > 0) + hasApiMembers = true; + + paramAttrs[propertyName] = apiMembers; + propertyTypes[propertyName] = property.PropertyType; + var allowableValuesAttrs = property.AllAttributes(); + allowableParams.AddRange(allowableValuesAttrs); + + if (hasDataContract && attr == null) + continue; + + var inPath = (route ?? "").ToLowerInvariant().Contains("{" + propertyName.ToLowerInvariant() + "}"); + var paramType = inPath + ? "path" + : IsFormData(verb, apiAttr) ? "formData" : "query"; + + + var parameter = GetParameter(schemas, property.PropertyType, + route, verb, + propertyName, paramType, + allowableValuesAttrs.FirstOrDefault()); + + defaultOperationParameters.Add(parameter); + } + + var methodOperationParameters = defaultOperationParameters; + if (hasApiMembers) + { + methodOperationParameters = new List(); + foreach (var key in paramAttrs.Keys) + { + var apiMembers = paramAttrs[key]; + foreach (var member in apiMembers) + { + if ((member.Verb == null || string.Compare(member.Verb, verb, StringComparison.OrdinalIgnoreCase) == 0) + && (member.Route == null || (route ?? "").StartsWith(member.Route)) + && !string.Equals(member.ParameterType, "model") + && methodOperationParameters.All(x => x.Name != (member.Name ?? key))) + { + var p = GetParameter(schemas, propertyTypes[key], route, verb, + member.Name ?? key, + member.GetParamType(operationType, member.Verb ?? verb), + allowableParams.FirstOrDefault(attr => attr.Name == (member.Name ?? key)), + true + ); + p.Type = member.DataType ?? p.Type; + p.Format = member.Format ?? p.Format; + p.Required = p.In =="path" || member.IsRequired; + p.Description = member.Description ?? p.Description; + + //Fix old Swagger 1.2 parameter type + if (p.In == "form") + p.In = "formData"; + + methodOperationParameters.Add(p); + } + } + } + } + + if (apiAttr?.BodyParameter == GenerateBodyParameter.Always + || (!DisableAutoDtoInBodyParam && apiAttr?.BodyParameter != GenerateBodyParameter.Never)) + { + if (!HttpMethods.Get.EqualsIgnoreCase(verb) && !HttpMethods.Delete.EqualsIgnoreCase(verb) + && !methodOperationParameters.Any(p => "body".EqualsIgnoreCase(p.In))) + { + ParseDefinitions(schemas, operationType, route, verb); + + var parameter = GetParameter(schemas, operationType, route, verb, "body", "body"); + + if (apiAttr?.IsRequired == true) + parameter.Required = true; + + methodOperationParameters.Add(parameter); + } + } + + return methodOperationParameters; + } + + private OpenApiParameter GetParameter(IDictionary schemas, Type schemaType, string route, string verb, string paramName, string paramIn, ApiAllowableValuesAttribute allowableValueAttrs = null, bool isApiMember = false) + { + //Compatibility: replace old Swagger ParamType to new Open API + if (paramIn == "form") paramIn = "formData"; + + if (IsSwaggerScalarType(schemaType)) + { + return new OpenApiParameter + { + In = paramIn, + Name = paramName, + Type = GetSwaggerTypeName(schemaType), + Format = GetSwaggerTypeFormat(schemaType, route, verb), + Enum = GetEnumValues(allowableValueAttrs), + Nullable = IsRequiredType(schemaType) ? false : (bool?)null, + Required = paramIn == "path" ? true : (bool?)null + }; + } + + if (paramIn != "body" && !isApiMember) + { + return new OpenApiParameter + { + In = paramIn, + Name = paramName, + Type = OpenApiType.String, + Required = paramIn == "path" ? true : (bool?)null + }; + } + + if (IsDictionaryType(schemaType)) + { + return new OpenApiParameter + { + In = paramIn, + Name = paramName, + Schema = GetDictionarySchema(schemas, schemaType, route, verb) + }; + } + + if (IsListType(schemaType)) + { + return GetListParameter(schemas, schemaType, route, verb, paramName, paramIn, allowableValueAttrs); + } + + OpenApiSchema openApiSchema; + + if (IsInlineSchema(schemaType)) + { + openApiSchema = schemas[GetSchemaTypeName(schemaType)]; + } + else + { + openApiSchema = new OpenApiSchema {Ref = "#/definitions/" + GetSchemaTypeName(schemaType)}; + } + + return new OpenApiParameter + { + In = paramIn, + Name = paramName, + Schema = openApiSchema + }; + } + + private List GetTags(string path) + { + var tagName = GetTagName(path); + return tagName != null ? new List { tagName } : null; + } + + private string GetTagName(string path) + { + var tags = path.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + + return tags.Length > 0 ? tags[0] : null; + } + + private OpenApiParameter GetListParameter(IDictionary schemas, Type listType, string route, string verb, string paramName, string paramIn, ApiAllowableValuesAttribute allowableValueAttrs = null) + { + if (!IsListType(listType)) + return null; + + var parameter = new OpenApiParameter + { + Type = OpenApiType.Array, + CollectionFormat = "multi", + Description = listType.GetDescription(), + Name = paramName, + In = paramIn, + Required = paramIn == "path" + }; + + var listItemType = GetListElementType(listType); + ParseDefinitions(schemas, listItemType, route, verb); + parameter.Items = GetOpenApiListItems(listItemType, route, verb, allowableValueAttrs); + + return parameter; + } + + private OpenApiParameter GetAcceptHeaderParameter() + { + return new OpenApiParameter + { + Type = OpenApiType.String, + Name = "Accept", + Description = "Accept Header", + Enum = new List { "application/json" }, + In = "header", + Required = true, + }; + } + } +} \ No newline at end of file diff --git a/src/ServiceStack.Api.OpenApi/Properties/AssemblyInfo.cs b/src/ServiceStack.Api.OpenApi/Properties/AssemblyInfo.cs new file mode 100644 index 00000000000..745290a6ee4 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +[assembly: System.Runtime.InteropServices.ComVisible(false)] +[assembly: System.Runtime.InteropServices.Guid("1dfebd7c-72e5-423e-8e0b-6da176ba34b8")] +[assembly: System.Reflection.AssemblyVersion("5.0.0.0")] + +[assembly: System.Runtime.Serialization.ContractNamespace("http://schemas.servicestack.net/types", + ClrNamespace = "ServiceStack.Api.OpenApi")] diff --git a/src/ServiceStack.Api.OpenApi/ServiceStack.Api.OpenApi.Core.csproj b/src/ServiceStack.Api.OpenApi/ServiceStack.Api.OpenApi.Core.csproj new file mode 100644 index 00000000000..1df8727f59a --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/ServiceStack.Api.OpenApi.Core.csproj @@ -0,0 +1,34 @@ + + + + ServiceStack.Api.OpenApi.Core + ServiceStack.Api.OpenApi + ServiceStack.Api.OpenApi + netstandard2.0 + ServiceStack.Api.OpenApi .NET Standard 2.0 + + Implements v2.0 of the Open API Specification (https://www.openapis.org). + Open API is a specification and complete framework implementation for describing, producing, consuming, and visualizing RESTful web services. + + OpenAPI;metadata;Swagger;API;REST;Metadata;Docs;ServiceStack + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ServiceStack.Api.OpenApi/ServiceStack.Api.OpenApi.Source.csproj b/src/ServiceStack.Api.OpenApi/ServiceStack.Api.OpenApi.Source.csproj new file mode 100644 index 00000000000..ea843f12962 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/ServiceStack.Api.OpenApi.Source.csproj @@ -0,0 +1,40 @@ + + + + ServiceStack.Api.OpenApi + ServiceStack.Api.OpenApi + ServiceStack.Api.OpenApi + net45;netstandard2.0 + ServiceStack support for Open API v2.0 and integrated Swagger UI + + Implements v2.0 of the Open API Specification (https://www.openapis.org). + Open API is a specification and complete framework implementation for describing, producing, consuming, and visualizing RESTful web services. + + OpenAPI;metadata;Swagger;API;REST;Metadata;Docs;ServiceStack + false + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ServiceStack.Api.OpenApi/ServiceStack.Api.OpenApi.csproj b/src/ServiceStack.Api.OpenApi/ServiceStack.Api.OpenApi.csproj new file mode 100644 index 00000000000..da0208283bc --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/ServiceStack.Api.OpenApi.csproj @@ -0,0 +1,38 @@ + + + + ServiceStack.Api.OpenApi + ServiceStack.Api.OpenApi + net45;netstandard2.0 + ServiceStack support for Open API v2.0 and integrated Swagger UI + + Implements v2.0 of the Open API Specification (https://www.openapis.org). + Open API is a specification and complete framework implementation for describing, producing, consuming, and visualizing RESTful web services. + + OpenAPI;metadata;Swagger;API;REST;Metadata;Docs;ServiceStack + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiContact.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiContact.cs new file mode 100644 index 00000000000..c0f4709154b --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiContact.cs @@ -0,0 +1,15 @@ +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiContact + { + [DataMember(Name = "name")] + public string Name { get; set; } + [DataMember(Name = "url")] + public string Url { get; set; } + [DataMember(Name = "email")] + public string Email { get; set; } + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiDataTypeSchema.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiDataTypeSchema.cs new file mode 100644 index 00000000000..2a99a2dd8b8 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiDataTypeSchema.cs @@ -0,0 +1,57 @@ +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + //from https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#user-content-parameterMaximum + [DataContract] + public abstract class OpenApiDataTypeSchema + { + [DataMember(Name = "$ref")] + public string Ref { get; set; } + [DataMember(Name = "description")] + public string Description { get; set; } + [DataMember(Name = "type")] + public string Type { get; set; } + [DataMember(Name = "format")] + public string Format { get; set; } + [DataMember(Name = "items")] + public Dictionary Items { get; set; } + [DataMember(Name = "collectionFormat")] + public string CollectionFormat { get; set; } + [DataMember(Name = "default")] + public string Default { get; set; } + [DataMember(Name = "maximum")] + public double? Maximum { get; set; } + [DataMember(Name = "exclusiveMaximum")] + public bool? ExclusiveMaximum { get; set; } + [DataMember(Name = "minimum")] + public double? Minimum { get; set; } + [DataMember(Name = "exclusiveMinimum")] + public bool? ExclusiveMinimum { get; set; } + [DataMember(Name = "maxLength")] + public int? MaxLength { get; set; } + [DataMember(Name = "minLength")] + public int? MinLength { get; set; } + [DataMember(Name = "pattern")] + public string Pattern { get; set; } + [DataMember(Name = "maxItems")] + public int? MaxItems { get; set; } + [DataMember(Name = "minItems")] + public int? MinItems { get; set; } + [DataMember(Name = "uniqueItems")] + public bool? UniqueItems { get; set; } + [DataMember(Name = "maxProperties")] + public string MaxProperties { get; set; } + [DataMember(Name = "minProperties")] + public string MinProperties { get; set; } + [DataMember(Name = "required")] + public bool? Required { get; set; } + [DataMember(Name = "enum")] + public List Enum { get; set; } + [DataMember(Name = "multipleOf")] + public double? MultipleOf { get; set; } + [DataMember(Name = "x-nullable")] + public bool? Nullable { get; set; } + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiDeclaration.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiDeclaration.cs new file mode 100644 index 00000000000..7c35c51e7e4 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiDeclaration.cs @@ -0,0 +1,57 @@ +using System.Collections.Generic; +using System.Runtime.Serialization; +using ServiceStack.Api.OpenApi.Support; +using ServiceStack.DataAnnotations; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + [Exclude(Feature.Soap)] + public class OpenApiDeclaration + { + [DataMember(Name = "swagger")] + public string Swagger => "2.0"; + + [DataMember(Name = "info")] + public OpenApiInfo Info { get; set; } + + [DataMember(Name = "host")] + public string Host { get; set; } + + [DataMember(Name = "basePath")] + public string BasePath { get; set; } + + [DataMember(Name = "schemes")] + public List Schemes { get; set; } + + [DataMember(Name = "consumes")] + public List Consumes { get; set; } + + [DataMember(Name = "produces")] + public List Produces { get; set; } + + [DataMember(Name = "paths")] + public OrderedDictionary Paths { get; set; } + + [DataMember(Name = "definitions")] + public Dictionary Definitions { get; set; } + + [DataMember(Name = "parameters")] + public Dictionary Parameters { get; set; } + + [DataMember(Name = "responses")] + public OrderedDictionary Responses { get; set; } + + [DataMember(Name = "securityDefinitions")] + public Dictionary SecurityDefinitions { get; set; } + + [DataMember(Name = "security")] + public List>> Security { get; set; } + + [DataMember(Name = "tags")] + public List Tags { get; set; } + + [DataMember(Name = "externalDocs")] + public OpenApiExternalDocumentation ExternalDocs { get; set; } + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiExternalDocumentation.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiExternalDocumentation.cs new file mode 100644 index 00000000000..2ea7854ce05 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiExternalDocumentation.cs @@ -0,0 +1,13 @@ +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiExternalDocumentation + { + [DataMember(Name = "description")] + public string Description { get; set; } + [DataMember(Name = "url")] + public string Url { get; set; } + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiInfo.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiInfo.cs new file mode 100644 index 00000000000..a688a559878 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiInfo.cs @@ -0,0 +1,21 @@ +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiInfo + { + [DataMember(Name = "title")] + public string Title { get; set; } + [DataMember(Name = "description")] + public string Description { get; set; } + [DataMember(Name = "termsOfServiceUrl")] + public string TermsOfServiceUrl { get; set; } + [DataMember(Name = "contact")] + public OpenApiContact Contact { get; set; } + [DataMember(Name = "license")] + public OpenApiLicense License { get; set; } + [DataMember(Name = "version")] + public string Version { get; set; } + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiLicense.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiLicense.cs new file mode 100644 index 00000000000..811de391ac6 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiLicense.cs @@ -0,0 +1,13 @@ +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiLicense + { + [DataMember(Name = "name")] + public string Name { get; set; } + [DataMember(Name = "url")] + public string Url { get; set; } + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiOperation.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiOperation.cs new file mode 100644 index 00000000000..0dcbdc0f6f8 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiOperation.cs @@ -0,0 +1,40 @@ +using ServiceStack.Api.OpenApi.Support; +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiOperation + { + //Custom: Request DTO Name to help with custom filtering + [IgnoreDataMember] + public string RequestType { get; set; } + + [DataMember(Name = "tags")] + public List Tags { get; set; } + [DataMember(Name = "summary")] + public string Summary { get; set; } + [DataMember(Name = "description")] + public string Description { get; set; } + [DataMember(Name = "externalDocs")] + public OpenApiExternalDocumentation ExternalDocs { get; set; } + [DataMember(Name = "operationId")] + public string OperationId { get; set; } + [DataMember(Name = "consumes")] + public List Consumes { get; set; } + [DataMember(Name = "produces")] + public List Produces { get; set; } + [DataMember(Name = "parameters")] + public List Parameters { get; set; } + [DataMember(Name = "responses")] + public OrderedDictionary Responses { get; set; } + [DataMember(Name = "schemes")] + public List Schemes { get; set; } + [DataMember(Name = "deprecated")] + public bool Deprecated { get; set; } + [DataMember(Name = "security")] + public List>> Security { get; set; } + } + +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiParameter.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiParameter.cs new file mode 100644 index 00000000000..7b004e51267 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiParameter.cs @@ -0,0 +1,17 @@ +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiParameter : OpenApiDataTypeSchema + { + [DataMember(Name = "name")] + public string Name { get; set; } + [DataMember(Name = "in")] + public string In { get; set; } + [DataMember(Name = "schema")] + public OpenApiSchema Schema { get; set; } + [DataMember(Name = "allowEmptyValue")] + public bool? AllowEmptyValue { get; set; } + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiPath.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiPath.cs new file mode 100644 index 00000000000..675d9a5dd87 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiPath.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiPath + { + [DataMember(Name = "$ref")] + public string Ref { get; set; } + [DataMember(Name = "get")] + public OpenApiOperation Get { get; set; } + [DataMember(Name = "put")] + public OpenApiOperation Put { get; set; } + [DataMember(Name = "post")] + public OpenApiOperation Post { get; set; } + [DataMember(Name = "delete")] + public OpenApiOperation Delete { get; set; } + [DataMember(Name = "options")] + public OpenApiOperation Options { get; set; } + [DataMember(Name = "head")] + public OpenApiOperation Head { get; set; } + [DataMember(Name = "patch")] + public OpenApiOperation Patch { get; set; } + [DataMember(Name = "parameters")] + public List Parameters { get; set; } + } + +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiProperty.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiProperty.cs new file mode 100644 index 00000000000..2eef9d4e561 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiProperty.cs @@ -0,0 +1,15 @@ +using System; +using System.Reflection; +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiProperty : OpenApiDataTypeSchema + { + [IgnoreDataMember] + public PropertyInfo PropertyInfo { get; set; } + [IgnoreDataMember] + public Type PropertyType { get; set; } + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiResponse.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiResponse.cs new file mode 100644 index 00000000000..0e0578b8f0b --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiResponse.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiResponse + { + [DataMember(Name = "description")] + public string Description { get; set; } + [DataMember(Name = "schema")] + public OpenApiSchema Schema { get; set; } + [DataMember(Name = "headers")] + public Dictionary Headers { get; set; } + [DataMember(Name = "examples")] + public Dictionary Examples { get; set; } + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiSchema.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiSchema.cs new file mode 100644 index 00000000000..3ffa870e02f --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiSchema.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using ServiceStack.Api.OpenApi.Support; +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiSchema : OpenApiDataTypeSchema + { + [DataMember(Name = "title")] + public string Title { get; set; } + [DataMember(Name = "discriminator")] + public string Discriminator { get; set; } + [DataMember(Name = "readOnly")] + public bool? ReadOnly { get; set; } + [DataMember(Name = "xml")] + public OpenApiXmlObject Xml { get; set; } + [DataMember(Name = "externalDocs")] + public OpenApiExternalDocumentation ExternalDocs { get; set; } + [DataMember(Name = "example")] + public string Example { get; set; } + + [DataMember(Name = "required")] + public new List Required { get; set; } + + [DataMember(Name = "allOf")] + public OpenApiSchema AllOf { get; set; } + [DataMember(Name = "properties")] + public OrderedDictionary Properties { get; set; } + [DataMember(Name = "additionalProperties")] + public OpenApiProperty AdditionalProperties { get; set; } + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiSecurity.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiSecurity.cs new file mode 100644 index 00000000000..931a89078ae --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiSecurity.cs @@ -0,0 +1,15 @@ +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiSecurity + { + [DataMember(Name = "name")] + public string Name { get; set; } + [DataMember(Name = "description")] + public string Description { get; set; } + [DataMember(Name = "externalDocs")] + public OpenApiExternalDocumentation ExternalDocs { get; set; } + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiSecuritySchema.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiSecuritySchema.cs new file mode 100644 index 00000000000..2b83208f06a --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiSecuritySchema.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiSecuritySchema + { + [DataMember(Name = "type")] + public string Type { get; set; } + [DataMember(Name = "description")] + public string Description { get; set; } + [DataMember(Name = "name")] + public string Name { get; set; } + [DataMember(Name = "in")] + public string In { get; set; } + [DataMember(Name = "flow")] + public string Flow { get; set; } + [DataMember(Name = "authorizationUrl")] + public string AuthorizationUrl { get; set; } + [DataMember(Name = "tokenUrl")] + public string TokenUrl { get; set; } + [DataMember(Name = "scopes")] + public Dictionary Scopes { get; set; } + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiTag.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiTag.cs new file mode 100644 index 00000000000..bfa7433c02d --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiTag.cs @@ -0,0 +1,17 @@ +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiTag + { + [DataMember(Name = "name")] + public string Name { get; set; } + + [DataMember(Name = "description")] + public string Description { get; set; } + + [DataMember(Name = "externalDocs")] + public OpenApiExternalDocumentation ExternalDocs { get; set; } + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiType.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiType.cs new file mode 100644 index 00000000000..cd02aabf0d9 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiType.cs @@ -0,0 +1,26 @@ +namespace ServiceStack.Api.OpenApi.Specification +{ + public static class OpenApiType + { + public const string Array = "array"; + public const string Boolean = "boolean"; + public const string Number = "number"; + public const string Integer = "integer"; + public const string String = "string"; + public const string Object = "object"; + } + + public static class OpenApiTypeFormat + { + public const string Array = "int32"; + public const string Byte = "byte"; + public const string Binary = "binary"; + public const string Date = "date"; + public const string DateTime = "date-time"; + public const string Double = "double"; + public const string Float = "float"; + public const string Int = "int32"; + public const string Long = "int64"; + public const string Password = "password"; + } +} diff --git a/src/ServiceStack.Api.OpenApi/Specification/OpenApiXmlObject.cs b/src/ServiceStack.Api.OpenApi/Specification/OpenApiXmlObject.cs new file mode 100644 index 00000000000..a01f72efe3b --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Specification/OpenApiXmlObject.cs @@ -0,0 +1,20 @@ +using System.Runtime.Serialization; + +namespace ServiceStack.Api.OpenApi.Specification +{ + [DataContract] + public class OpenApiXmlObject + { + [DataMember(Name = "name")] + public string Name { get; set; } + [DataMember(Name = "namespace")] + public string Namespace { get; set; } + [DataMember(Name = "prefix")] + public string Prefix { get; set; } + [DataMember(Name = "attribute")] + public bool Attribute { get; set; } + [DataMember(Name = "wrapped")] + public bool Wrapped { get; set; } + } + +} diff --git a/src/ServiceStack.Api.OpenApi/Support/IOrderedDictionary.cs b/src/ServiceStack.Api.OpenApi/Support/IOrderedDictionary.cs new file mode 100644 index 00000000000..23703a0073e --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Support/IOrderedDictionary.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; + +namespace ServiceStack.Api.OpenApi.Support +{ + /// + /// Represents a generic collection of key/value pairs that are ordered independently of the key and value. + /// + /// The type of the keys in the dictionary + /// The type of the values in the dictionary + public interface IOrderedDictionary + : IOrderedDictionary, IDictionary + { + /// + /// Adds an entry with the specified key and value into the IOrderedDictionary<TKey,TValue> collection with the lowest available index. + /// + /// The key of the entry to add. + /// The value of the entry to add. + /// The index of the newly added entry + /// + /// You can also use the property to add new elements by setting the value of a key that does not exist in the IOrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the IOrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. + /// An element with the same key already exists in the IOrderedDictionary<TKey,TValue> + /// The IOrderedDictionary<TKey,TValue> is read-only.
      + /// -or-
      + /// The IOrderedDictionary<TKey,TValue> has a fized size.
      + new int Add(TKey key, TValue value); + + /// + /// Inserts a new entry into the IOrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. + /// + /// The zero-based index at which the element should be inserted. + /// The key of the entry to add. + /// The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. + /// is less than 0.
      + /// -or-
      + /// is greater than .
      + /// An element with the same key already exists in the IOrderedDictionary<TKey,TValue>. + /// The IOrderedDictionary<TKey,TValue> is read-only.
      + /// -or-
      + /// The IOrderedDictionary<TKey,TValue> has a fized size.
      + void Insert(int index, TKey key, TValue value); + + /// + /// Gets or sets the value at the specified index. + /// + /// The zero-based index of the value to get or set. + /// The value of the item at the specified index. + /// is less than 0.
      + /// -or-
      + /// is equal to or greater than .
      + new TValue this[int index] + { + get; + set; + } + } +} \ No newline at end of file diff --git a/src/ServiceStack.Api.OpenApi/Support/OrderedDictionary.cs b/src/ServiceStack.Api.OpenApi/Support/OrderedDictionary.cs new file mode 100644 index 00000000000..2ce188fe01f --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/Support/OrderedDictionary.cs @@ -0,0 +1,642 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.Specialized; + +namespace ServiceStack.Api.OpenApi.Support +{ + /// + /// Represents a generic collection of key/value pairs that are ordered independently of the key and value. + /// + /// The type of the keys in the dictionary + /// The type of the values in the dictionary + public class OrderedDictionary : IOrderedDictionary + { + private const int DefaultInitialCapacity = 0; + + private static readonly string KeyTypeName = typeof(TKey).FullName; + private static readonly string ValueTypeName = typeof(TValue).FullName; + private static readonly bool ValueTypeIsReferenceType = !typeof(ValueType).IsAssignableFrom(typeof(TValue)); + + private Dictionary dictionary; + private List> list; + private readonly IEqualityComparer comparer; + private object syncRoot; + private readonly int initialCapacity; + + /// + /// Initializes a new instance of the OrderedDictionary<TKey,TValue> class. + /// + public OrderedDictionary() + : this(DefaultInitialCapacity, null) + { + } + + /// + /// Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified initial capacity. + /// + /// The initial number of elements that the OrderedDictionary<TKey,TValue> can contain. + /// is less than 0 + public OrderedDictionary(int capacity) + : this(capacity, null) + { + } + + /// + /// Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified comparer. + /// + /// The IEqualityComparer<TKey> to use when comparing keys, or to use the default EqualityComparer<TKey> for the type of the key. + public OrderedDictionary(IEqualityComparer comparer) + : this(DefaultInitialCapacity, comparer) + { + } + + /// + /// Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified initial capacity and comparer. + /// + /// The initial number of elements that the OrderedDictionary<TKey,TValue> collection can contain. + /// The IEqualityComparer<TKey> to use when comparing keys, or to use the default EqualityComparer<TKey> for the type of the key. + /// is less than 0 + public OrderedDictionary(int capacity, IEqualityComparer comparer) + { + if (0 > capacity) + throw new ArgumentOutOfRangeException("capacity", "'capacity' must be non-negative"); + + initialCapacity = capacity; + this.comparer = comparer; + } + + /// + /// Converts the object passed as a key to the key type of the dictionary + /// + /// The key object to check + /// The key object, cast as the key type of the dictionary + /// is . + /// The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . + private static TKey ConvertToKeyType(object keyObject) + { + if (null == keyObject) + { + throw new ArgumentNullException("key"); + } + else + { + if (keyObject is TKey) + return (TKey)keyObject; + } + throw new ArgumentException("'key' must be of type " + KeyTypeName, "key"); + } + + /// + /// Converts the object passed as a value to the value type of the dictionary + /// + /// The object to convert to the value type of the dictionary + /// The value object, converted to the value type of the dictionary + /// is , and the value type of the OrderedDictionary<TKey,TValue> is a value type. + /// The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . + private static TValue ConvertToValueType(object value) + { + if (null == value) + { + if (ValueTypeIsReferenceType) + return default(TValue); + else + throw new ArgumentNullException("value"); + } + else + { + if (value is TValue) + return (TValue)value; + } + throw new ArgumentException("'value' must be of type " + ValueTypeName, "value"); + } + + /// + /// Gets the dictionary object that stores the keys and values + /// + /// The dictionary object that stores the keys and values for the OrderedDictionary<TKey,TValue> + /// Accessing this property will create the dictionary object if necessary + private Dictionary Dictionary + { + get + { + if (null == dictionary) + { + dictionary = new Dictionary(initialCapacity, comparer); + } + return dictionary; + } + } + + /// + /// Gets the list object that stores the key/value pairs. + /// + /// The list object that stores the key/value pairs for the OrderedDictionary<TKey,TValue> + /// Accessing this property will create the list object if necessary. + private List> List + { + get + { + if (null == list) + { + list = new List>(initialCapacity); + } + return list; + } + } + + IDictionaryEnumerator IOrderedDictionary.GetEnumerator() + { + return Dictionary.GetEnumerator(); + } + + IDictionaryEnumerator IDictionary.GetEnumerator() + { + return Dictionary.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return List.GetEnumerator(); + } + + IEnumerator> IEnumerable>.GetEnumerator() + { + return List.GetEnumerator(); + } + + /// + /// Inserts a new entry into the OrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. + /// + /// The zero-based index at which the element should be inserted. + /// The key of the entry to add. + /// The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. + /// is less than 0.
      + /// -or-
      + /// is greater than .
      + /// is . + /// An element with the same key already exists in the OrderedDictionary<TKey,TValue>. + public void Insert(int index, TKey key, TValue value) + { + if (index > Count || index < 0) + throw new ArgumentOutOfRangeException("index"); + + Dictionary.Add(key, value); + List.Insert(index, new KeyValuePair(key, value)); + } + + /// + /// Inserts a new entry into the OrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. + /// + /// The zero-based index at which the element should be inserted. + /// The key of the entry to add. + /// The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. + /// is less than 0.
      + /// -or-
      + /// is greater than .
      + /// is .
      + /// -or-
      + /// is , and the value type of the OrderedDictionary<TKey,TValue> is a value type.
      + /// The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
      + /// -or-
      + /// The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
      + /// -or-
      + /// An element with the same key already exists in the OrderedDictionary<TKey,TValue>.
      + void IOrderedDictionary.Insert(int index, object key, object value) + { + Insert(index, ConvertToKeyType(key), ConvertToValueType(value)); + } + + /// + /// Removes the entry at the specified index from the OrderedDictionary<TKey,TValue> collection. + /// + /// The zero-based index of the entry to remove. + /// is less than 0.
      + /// -or-
      + /// index is equal to or greater than .
      + public void RemoveAt(int index) + { + if (index >= Count || index < 0) + throw new ArgumentOutOfRangeException("index", "'index' must be non-negative and less than the size of the collection"); + + TKey key = List[index].Key; + + List.RemoveAt(index); + Dictionary.Remove(key); + } + + /// + /// Gets or sets the value at the specified index. + /// + /// The zero-based index of the value to get or set. + /// The value of the item at the specified index. + /// is less than 0.
      + /// -or-
      + /// index is equal to or greater than .
      + public TValue this[int index] + { + get + { + return List[index].Value; + } + + set + { + if (index >= Count || index < 0) + throw new ArgumentOutOfRangeException("index", "'index' must be non-negative and less than the size of the collection"); + + TKey key = List[index].Key; + + List[index] = new KeyValuePair(key, value); + Dictionary[key] = value; + } + } + + /// + /// Gets or sets the value at the specified index. + /// + /// The zero-based index of the value to get or set. + /// The value of the item at the specified index. + /// is less than 0.
      + /// -or-
      + /// index is equal to or greater than .
      + /// is a null reference, and the value type of the OrderedDictionary<TKey,TValue> is a value type. + /// The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . + object IOrderedDictionary.this[int index] + { + get + { + return this[index]; + } + + set + { + this[index] = ConvertToValueType(value); + } + } + + /// + /// Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. + /// + /// The key of the entry to add. + /// The value of the entry to add. This value can be . + /// A key cannot be , but a value can be. + /// You can also use the property to add new elements by setting the value of a key that does not exist in the OrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the OrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. + /// is + /// An element with the same key already exists in the OrderedDictionary<TKey,TValue> + void IDictionary.Add(TKey key, TValue value) + { + Add(key, value); + } + + /// + /// Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. + /// + /// The key of the entry to add. + /// The value of the entry to add. This value can be . + /// The index of the newly added entry + /// A key cannot be , but a value can be. + /// You can also use the property to add new elements by setting the value of a key that does not exist in the OrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the OrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. + /// is + /// An element with the same key already exists in the OrderedDictionary<TKey,TValue> + public int Add(TKey key, TValue value) + { + Dictionary.Add(key, value); + List.Add(new KeyValuePair(key, value)); + return Count - 1; + } + + /// + /// Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. + /// + /// The key of the entry to add. + /// The value of the entry to add. This value can be . + /// is .
      + /// -or-
      + /// is , and the value type of the OrderedDictionary<TKey,TValue> is a value type.
      + /// The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
      + /// -or-
      + /// The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
      + void IDictionary.Add(object key, object value) + { + Add(ConvertToKeyType(key), ConvertToValueType(value)); + } + + /// + /// Removes all elements from the OrderedDictionary<TKey,TValue> collection. + /// + /// The capacity is not changed as a result of calling this method. + public void Clear() + { + Dictionary.Clear(); + List.Clear(); + } + + /// + /// Determines whether the OrderedDictionary<TKey,TValue> collection contains a specific key. + /// + /// The key to locate in the OrderedDictionary<TKey,TValue> collection. + /// if the OrderedDictionary<TKey,TValue> collection contains an element with the specified key; otherwise, . + /// is + public bool ContainsKey(TKey key) + { + return Dictionary.ContainsKey(key); + } + /// + /// Determines whether the OrderedDictionary<TKey,TValue> collection contains a specific key. + /// + /// The key to locate in the OrderedDictionary<TKey,TValue> collection. + /// if the OrderedDictionary<TKey,TValue> collection contains an element with the specified key; otherwise, . + /// is + /// The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . + bool IDictionary.Contains(object key) + { + return ContainsKey(ConvertToKeyType(key)); + } + + /// + /// Gets a value indicating whether the OrderedDictionary<TKey,TValue> has a fixed size. + /// + /// if the OrderedDictionary<TKey,TValue> has a fixed size; otherwise, . The default is . + bool IDictionary.IsFixedSize + { + get + { + return false; + } + } + + /// + /// Gets a value indicating whether the OrderedDictionary<TKey,TValue> collection is read-only. + /// + /// if the OrderedDictionary<TKey,TValue> is read-only; otherwise, . The default is . + /// + /// A collection that is read-only does not allow the addition, removal, or modification of elements after the collection is created. + /// A collection that is read-only is simply a collection with a wrapper that prevents modification of the collection; therefore, if changes are made to the underlying collection, the read-only collection reflects those changes. + /// + public bool IsReadOnly + { + get + { + return false; + } + } + + /// + /// Gets an object containing the keys in the OrderedDictionary<TKey,TValue>. + /// + /// An object containing the keys in the OrderedDictionary<TKey,TValue>. + /// The returned object is not a static copy; instead, the collection refers back to the keys in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the key collection. + ICollection IDictionary.Keys + { + get + { + return (ICollection)Keys; + } + } + + /// + /// Returns the zero-based index of the specified key in the OrderedDictionary<TKey,TValue> + /// + /// The key to locate in the OrderedDictionary<TKey,TValue> + /// The zero-based index of , if is found in the OrderedDictionary<TKey,TValue>; otherwise, -1 + /// This method performs a linear search; therefore it has a cost of O(n) at worst. + public int IndexOfKey(TKey key) + { + if (null == key) + throw new ArgumentNullException("key"); + + for (int index = 0; index < List.Count; index++) + { + KeyValuePair entry = List[index]; + TKey next = entry.Key; + if (null != comparer) + { + if (comparer.Equals(next, key)) + { + return index; + } + } + else if (next.Equals(key)) + { + return index; + } + } + + return -1; + } + + /// + /// Removes the entry with the specified key from the OrderedDictionary<TKey,TValue> collection. + /// + /// The key of the entry to remove + /// if the key was found and the corresponding element was removed; otherwise, + public bool Remove(TKey key) + { + if (null == key) + throw new ArgumentNullException("key"); + + int index = IndexOfKey(key); + if (index >= 0) + { + if (Dictionary.Remove(key)) + { + List.RemoveAt(index); + return true; + } + } + return false; + } + + /// + /// Removes the entry with the specified key from the OrderedDictionary<TKey,TValue> collection. + /// + /// The key of the entry to remove + void IDictionary.Remove(object key) + { + Remove(ConvertToKeyType(key)); + } + + /// + /// Gets an object containing the values in the OrderedDictionary<TKey,TValue> collection. + /// + /// An object containing the values in the OrderedDictionary<TKey,TValue> collection. + /// The returned object is not a static copy; instead, the refers back to the values in the original OrderedDictionary<TKey,TValue> collection. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the . + ICollection IDictionary.Values + { + get + { + return (ICollection)Values; + } + } + + /// + /// Gets or sets the value with the specified key. + /// + /// The key of the value to get or set. + /// The value associated with the specified key. If the specified key is not found, attempting to get it returns , and attempting to set it creates a new element using the specified key. + public TValue this[TKey key] + { + get + { + return Dictionary[key]; + } + set + { + if (Dictionary.ContainsKey(key)) + { + Dictionary[key] = value; + List[IndexOfKey(key)] = new KeyValuePair(key, value); + } + else + { + Add(key, value); + } + } + } + + /// + /// Gets or sets the value with the specified key. + /// + /// The key of the value to get or set. + /// The value associated with the specified key. If the specified key is not found, attempting to get it returns , and attempting to set it creates a new element using the specified key. + object IDictionary.this[object key] + { + get + { + return this[ConvertToKeyType(key)]; + } + set + { + this[ConvertToKeyType(key)] = ConvertToValueType(value); + } + } + + /// + /// Copies the elements of the OrderedDictionary<TKey,TValue> elements to a one-dimensional Array object at the specified index. + /// + /// The one-dimensional object that is the destination of the objects copied from the OrderedDictionary<TKey,TValue>. The must have zero-based indexing. + /// The zero-based index in at which copying begins. + /// The method preserves the order of the elements in the OrderedDictionary<TKey,TValue> + void ICollection.CopyTo(Array array, int index) + { + ((ICollection)List).CopyTo(array, index); + } + + /// + /// Gets the number of key/values pairs contained in the OrderedDictionary<TKey,TValue> collection. + /// + /// The number of key/value pairs contained in the OrderedDictionary<TKey,TValue> collection. + public int Count + { + get + { + return List.Count; + } + } + + /// + /// Gets a value indicating whether access to the OrderedDictionary<TKey,TValue> object is synchronized (thread-safe). + /// + /// This method always returns false. + bool ICollection.IsSynchronized + { + get + { + return false; + } + } + + /// + /// Gets an object that can be used to synchronize access to the OrderedDictionary<TKey,TValue> object. + /// + /// An object that can be used to synchronize access to the OrderedDictionary<TKey,TValue> object. + object ICollection.SyncRoot + { + get + { + if (this.syncRoot == null) + { + System.Threading.Interlocked.CompareExchange(ref this.syncRoot, new object(), null); + } + return this.syncRoot; + } + } + + /// + /// Gets an ICollection<TKey> object containing the keys in the OrderedDictionary<TKey,TValue>. + /// + /// An ICollection<TKey> object containing the keys in the OrderedDictionary<TKey,TValue>. + /// The returned ICollection<TKey> object is not a static copy; instead, the collection refers back to the keys in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the key collection. + public ICollection Keys + { + get + { + return Dictionary.Keys; + } + } + + /// + /// Gets the value associated with the specified key. + /// + /// The key of the value to get. + /// When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of . This parameter can be passed uninitialized. + /// if the OrderedDictionary<TKey,TValue> contains an element with the specified key; otherwise, . + public bool TryGetValue(TKey key, out TValue value) + { + return Dictionary.TryGetValue(key, out value); + } + + /// + /// Gets an ICollection<TValue> object containing the values in the OrderedDictionary<TKey,TValue>. + /// + /// An ICollection<TValue> object containing the values in the OrderedDictionary<TKey,TValue>. + /// The returned ICollection<TKey> object is not a static copy; instead, the collection refers back to the values in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the value collection. + public ICollection Values + { + get + { + return Dictionary.Values; + } + } + + /// + /// Adds the specified value to the OrderedDictionary<TKey,TValue> with the specified key. + /// + /// The KeyValuePair<TKey,TValue> structure representing the key and value to add to the OrderedDictionary<TKey,TValue>. + void ICollection>.Add(KeyValuePair item) + { + Add(item.Key, item.Value); + } + + /// + /// Determines whether the OrderedDictionary<TKey,TValue> contains a specific key and value. + /// + /// The KeyValuePair<TKey,TValue> structure to locate in the OrderedDictionary<TKey,TValue>. + /// if is found in the OrderedDictionary<TKey,TValue>; otherwise, . + bool ICollection>.Contains(KeyValuePair item) + { + return ((ICollection>)Dictionary).Contains(item); + } + + /// + /// Copies the elements of the OrderedDictionary<TKey,TValue> to an array of type , starting at the specified index. + /// + /// The one-dimensional array of type KeyValuePair<TKey,TValue> that is the destination of the KeyValuePair<TKey,TValue> elements copied from the OrderedDictionary<TKey,TValue>. The array must have zero-based indexing. + /// The zero-based index in at which copying begins. + void ICollection>.CopyTo(KeyValuePair[] array, int arrayIndex) + { + ((ICollection>)Dictionary).CopyTo(array, arrayIndex); + } + + /// + /// Removes a key and value from the dictionary. + /// + /// The KeyValuePair<TKey,TValue> structure representing the key and value to remove from the OrderedDictionary<TKey,TValue>. + /// if the key and value represented by is successfully found and removed; otherwise, . This method returns if is not found in the OrderedDictionary<TKey,TValue>. + bool ICollection>.Remove(KeyValuePair item) + { + return Remove(item.Key); + } + } +} diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/css/print.css b/src/ServiceStack.Api.OpenApi/swagger-ui/css/print.css new file mode 100644 index 00000000000..f2e8446445c --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/css/print.css @@ -0,0 +1 @@ +.swagger-section pre code{display:block;padding:.5em;background:#f0f0f0}.swagger-section pre .clojure .built_in,.swagger-section pre .lisp .title,.swagger-section pre .nginx .title,.swagger-section pre .subst,.swagger-section pre .tag .title,.swagger-section pre code{color:#000}.swagger-section pre .addition,.swagger-section pre .aggregate,.swagger-section pre .apache .cbracket,.swagger-section pre .apache .tag,.swagger-section pre .bash .variable,.swagger-section pre .constant,.swagger-section pre .django .variable,.swagger-section pre .erlang_repl .function_or_atom,.swagger-section pre .flow,.swagger-section pre .markdown .header,.swagger-section pre .parent,.swagger-section pre .preprocessor,.swagger-section pre .ruby .symbol,.swagger-section pre .ruby .symbol .string,.swagger-section pre .rules .value,.swagger-section pre .rules .value .number,.swagger-section pre .smalltalk .class,.swagger-section pre .stream,.swagger-section pre .string,.swagger-section pre .tag .value,.swagger-section pre .template_tag,.swagger-section pre .tex .command,.swagger-section pre .tex .special,.swagger-section pre .title{color:#800}.swagger-section pre .annotation,.swagger-section pre .chunk,.swagger-section pre .comment,.swagger-section pre .diff .header,.swagger-section pre .markdown .blockquote,.swagger-section pre .template_comment{color:#888}.swagger-section pre .change,.swagger-section pre .date,.swagger-section pre .go .constant,.swagger-section pre .literal,.swagger-section pre .markdown .bullet,.swagger-section pre .markdown .link_url,.swagger-section pre .number,.swagger-section pre .regexp,.swagger-section pre .smalltalk .char,.swagger-section pre .smalltalk .symbol{color:#080}.swagger-section pre .apache .sqbracket,.swagger-section pre .array,.swagger-section pre .attr_selector,.swagger-section pre .clojure .attribute,.swagger-section pre .coffeescript .property,.swagger-section pre .decorator,.swagger-section pre .deletion,.swagger-section pre .doctype,.swagger-section pre .envvar,.swagger-section pre .erlang_repl .reserved,.swagger-section pre .filter .argument,.swagger-section pre .important,.swagger-section pre .javadoc,.swagger-section pre .label,.swagger-section pre .localvars,.swagger-section pre .markdown .link_label,.swagger-section pre .nginx .built_in,.swagger-section pre .pi,.swagger-section pre .prompt,.swagger-section pre .pseudo,.swagger-section pre .ruby .string,.swagger-section pre .shebang,.swagger-section pre .tex .formula,.swagger-section pre .vhdl .attribute{color:#88f}.swagger-section pre .aggregate,.swagger-section pre .apache .tag,.swagger-section pre .bash .variable,.swagger-section pre .built_in,.swagger-section pre .css .tag,.swagger-section pre .go .typename,.swagger-section pre .id,.swagger-section pre .javadoctag,.swagger-section pre .keyword,.swagger-section pre .markdown .strong,.swagger-section pre .phpdoc,.swagger-section pre .request,.swagger-section pre .smalltalk .class,.swagger-section pre .status,.swagger-section pre .tex .command,.swagger-section pre .title,.swagger-section pre .winutils,.swagger-section pre .yardoctag{font-weight:700}.swagger-section pre .markdown .emphasis{font-style:italic}.swagger-section pre .nginx .built_in{font-weight:400}.swagger-section pre .coffeescript .javascript,.swagger-section pre .javascript .xml,.swagger-section pre .tex .formula,.swagger-section pre .xml .cdata,.swagger-section pre .xml .css,.swagger-section pre .xml .javascript,.swagger-section pre .xml .vbscript{opacity:.5}.swagger-section .hljs{display:block;overflow-x:auto;padding:.5em;background:#f0f0f0}.swagger-section .hljs,.swagger-section .hljs-subst{color:#444}.swagger-section .hljs-attribute,.swagger-section .hljs-doctag,.swagger-section .hljs-keyword,.swagger-section .hljs-meta-keyword,.swagger-section .hljs-name,.swagger-section .hljs-selector-tag{font-weight:700}.swagger-section .hljs-addition,.swagger-section .hljs-built_in,.swagger-section .hljs-bullet,.swagger-section .hljs-code,.swagger-section .hljs-literal{color:#1f811f}.swagger-section .hljs-link,.swagger-section .hljs-regexp,.swagger-section .hljs-selector-attr,.swagger-section .hljs-selector-pseudo,.swagger-section .hljs-symbol,.swagger-section .hljs-template-variable,.swagger-section .hljs-variable{color:#bc6060}.swagger-section .hljs-deletion,.swagger-section .hljs-number,.swagger-section .hljs-quote,.swagger-section .hljs-selector-class,.swagger-section .hljs-selector-id,.swagger-section .hljs-string,.swagger-section .hljs-template-tag,.swagger-section .hljs-type{color:#800}.swagger-section .hljs-section,.swagger-section .hljs-title{color:#800;font-weight:700}.swagger-section .hljs-comment{color:#888}.swagger-section .hljs-meta{color:#2b6ea1}.swagger-section .hljs-emphasis{font-style:italic}.swagger-section .hljs-strong{font-weight:700}.swagger-section .swagger-ui-wrap{line-height:1;font-family:Droid Sans,sans-serif;min-width:760px;max-width:960px;margin-left:auto;margin-right:auto}.swagger-section .swagger-ui-wrap b,.swagger-section .swagger-ui-wrap strong{font-family:Droid Sans,sans-serif;font-weight:700}.swagger-section .swagger-ui-wrap blockquote,.swagger-section .swagger-ui-wrap q{quotes:none}.swagger-section .swagger-ui-wrap p{line-height:1.4em;padding:0 0 10px;color:#333}.swagger-section .swagger-ui-wrap blockquote:after,.swagger-section .swagger-ui-wrap blockquote:before,.swagger-section .swagger-ui-wrap q:after,.swagger-section .swagger-ui-wrap q:before{content:none}.swagger-section .swagger-ui-wrap .heading_with_menu h1,.swagger-section .swagger-ui-wrap .heading_with_menu h2,.swagger-section .swagger-ui-wrap .heading_with_menu h3,.swagger-section .swagger-ui-wrap .heading_with_menu h4,.swagger-section .swagger-ui-wrap .heading_with_menu h5,.swagger-section .swagger-ui-wrap .heading_with_menu h6{display:block;clear:none;float:left;-ms-box-sizing:border-box;box-sizing:border-box;width:60%}.swagger-section .swagger-ui-wrap table{border-collapse:collapse;border-spacing:0}.swagger-section .swagger-ui-wrap table thead tr th{padding:5px;font-size:.9em;color:#666;border-bottom:1px solid #999}.swagger-section .swagger-ui-wrap table tbody tr:last-child td{border-bottom:none}.swagger-section .swagger-ui-wrap table tbody tr.offset{background-color:#f0f0f0}.swagger-section .swagger-ui-wrap table tbody tr td{padding:6px;font-size:.9em;border-bottom:1px solid #ccc;vertical-align:top;line-height:1.3em}.swagger-section .swagger-ui-wrap ol{margin:0 0 10px;padding:0 0 0 18px;list-style-type:decimal}.swagger-section .swagger-ui-wrap ol li{padding:5px 0;font-size:.9em;color:#333}.swagger-section .swagger-ui-wrap ol,.swagger-section .swagger-ui-wrap ul{list-style:none}.swagger-section .swagger-ui-wrap h1 a,.swagger-section .swagger-ui-wrap h2 a,.swagger-section .swagger-ui-wrap h3 a,.swagger-section .swagger-ui-wrap h4 a,.swagger-section .swagger-ui-wrap h5 a,.swagger-section .swagger-ui-wrap h6 a{text-decoration:none}.swagger-section .swagger-ui-wrap h1 a:hover,.swagger-section .swagger-ui-wrap h2 a:hover,.swagger-section .swagger-ui-wrap h3 a:hover,.swagger-section .swagger-ui-wrap h4 a:hover,.swagger-section .swagger-ui-wrap h5 a:hover,.swagger-section .swagger-ui-wrap h6 a:hover{text-decoration:underline}.swagger-section .swagger-ui-wrap h1 span.divider,.swagger-section .swagger-ui-wrap h2 span.divider,.swagger-section .swagger-ui-wrap h3 span.divider,.swagger-section .swagger-ui-wrap h4 span.divider,.swagger-section .swagger-ui-wrap h5 span.divider,.swagger-section .swagger-ui-wrap h6 span.divider{color:#aaa}.swagger-section .swagger-ui-wrap a{color:#547f00}.swagger-section .swagger-ui-wrap a img{border:none}.swagger-section .swagger-ui-wrap article,.swagger-section .swagger-ui-wrap aside,.swagger-section .swagger-ui-wrap details,.swagger-section .swagger-ui-wrap figcaption,.swagger-section .swagger-ui-wrap figure,.swagger-section .swagger-ui-wrap footer,.swagger-section .swagger-ui-wrap header,.swagger-section .swagger-ui-wrap hgroup,.swagger-section .swagger-ui-wrap menu,.swagger-section .swagger-ui-wrap nav,.swagger-section .swagger-ui-wrap section,.swagger-section .swagger-ui-wrap summary{display:block}.swagger-section .swagger-ui-wrap pre{font-family:Anonymous Pro,Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace;background-color:#fcf6db;border:1px solid #e5e0c6;padding:10px}.swagger-section .swagger-ui-wrap pre code{line-height:1.6em;background:none}.swagger-section .swagger-ui-wrap .content>.content-type>div>label{clear:both;display:block;color:#0f6ab4;font-size:1.1em;margin:0;padding:15px 0 5px}.swagger-section .swagger-ui-wrap .content pre{font-size:12px;margin-top:5px;padding:5px}.swagger-section .swagger-ui-wrap .icon-btn{cursor:pointer}.swagger-section .swagger-ui-wrap .info_title{padding-bottom:10px;font-weight:700;font-size:25px}.swagger-section .swagger-ui-wrap .footer{margin-top:20px}.swagger-section .swagger-ui-wrap div.big p,.swagger-section .swagger-ui-wrap p.big{font-size:1em;margin-bottom:10px}.swagger-section .swagger-ui-wrap form.fullwidth ol li.numeric input,.swagger-section .swagger-ui-wrap form.fullwidth ol li.string input,.swagger-section .swagger-ui-wrap form.fullwidth ol li.text textarea,.swagger-section .swagger-ui-wrap form.fullwidth ol li.url input{width:500px!important}.swagger-section .swagger-ui-wrap .info_license,.swagger-section .swagger-ui-wrap .info_tos{padding-bottom:5px}.swagger-section .swagger-ui-wrap .message-fail{color:#c00}.swagger-section .swagger-ui-wrap .info_email,.swagger-section .swagger-ui-wrap .info_name,.swagger-section .swagger-ui-wrap .info_url{padding-bottom:5px}.swagger-section .swagger-ui-wrap .info_description{padding-bottom:10px;font-size:15px}.swagger-section .swagger-ui-wrap .markdown ol li,.swagger-section .swagger-ui-wrap .markdown ul li{padding:3px 0;line-height:1.4em;color:#333}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input,.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input,.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input{display:block;padding:4px;width:auto;clear:both}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input.title,.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input.title,.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input.title{font-size:1.3em}.swagger-section .swagger-ui-wrap table.fullwidth{width:100%}.swagger-section .swagger-ui-wrap .model-signature{font-family:Droid Sans,sans-serif;font-size:1em;line-height:1.5em}.swagger-section .swagger-ui-wrap .model-signature .signature-nav a{text-decoration:none;color:#aaa}.swagger-section .swagger-ui-wrap .model-signature .signature-nav a:hover{text-decoration:underline;color:#000}.swagger-section .swagger-ui-wrap .model-signature .signature-nav .selected{color:#000;text-decoration:none}.swagger-section .swagger-ui-wrap .model-signature .propType{color:#55a}.swagger-section .swagger-ui-wrap .model-signature pre:hover{background-color:#ffd}.swagger-section .swagger-ui-wrap .model-signature pre{font-size:.85em;line-height:1.2em;overflow:auto;height:200px;resize:vertical;cursor:pointer}.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav{display:block;min-width:230px;margin:0;padding:0}.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li:last-child{padding-right:0;border-right:none}.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li{float:left;margin:0 5px 5px 0;padding:2px 5px 2px 0;border-right:1px solid #ddd}.swagger-section .swagger-ui-wrap .model-signature .propOpt{color:#555}.swagger-section .swagger-ui-wrap .model-signature .snippet small{font-size:.75em}.swagger-section .swagger-ui-wrap .model-signature .propOptKey{font-style:italic}.swagger-section .swagger-ui-wrap .model-signature .description .strong{font-weight:700;color:#000;font-size:.9em}.swagger-section .swagger-ui-wrap .model-signature .description div{font-size:.9em;line-height:1.5em;margin-left:1em}.swagger-section .swagger-ui-wrap .model-signature .description .stronger{font-weight:700;color:#000}.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper{border-spacing:0;position:absolute;background-color:#fff;border:1px solid #bbb;display:none;font-size:11px;max-width:400px;line-height:30px;color:#000;padding:5px;margin-left:10px}.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper th{text-align:center;background-color:#eee;border:1px solid #bbb;font-size:11px;color:#666;font-weight:700;padding:5px;line-height:15px}.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper .optionName{font-weight:700}.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown>p:first-child,.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown>p:last-child{display:inline}.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown>p:not(:first-child):before{display:block;content:''}.swagger-section .swagger-ui-wrap .model-signature .description span:last-of-type.propDesc.markdown>p:only-child{margin-right:-3px}.swagger-section .swagger-ui-wrap .model-signature .propName{font-weight:700}.swagger-section .swagger-ui-wrap .model-signature .signature-container{clear:both}.swagger-section .swagger-ui-wrap .body-textarea{width:300px;height:100px;border:1px solid #aaa}.swagger-section .swagger-ui-wrap .markdown li code,.swagger-section .swagger-ui-wrap .markdown p code{font-family:Anonymous Pro,Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace;background-color:#f0f0f0;color:#000;padding:1px 3px}.swagger-section .swagger-ui-wrap .required{font-weight:700}.swagger-section .swagger-ui-wrap .editor_holder{font-family:Anonymous Pro,Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace;font-size:.9em}.swagger-section .swagger-ui-wrap .editor_holder label{font-weight:400!important}.swagger-section .swagger-ui-wrap .editor_holder label.required{font-weight:700!important}.swagger-section .swagger-ui-wrap input.parameter{width:300px;border:1px solid #aaa}.swagger-section .swagger-ui-wrap h1{color:#000;font-size:1.5em;line-height:1.3em;padding:10px 0;font-family:Droid Sans,sans-serif;font-weight:700}.swagger-section .swagger-ui-wrap .heading_with_menu{float:none;clear:both;overflow:hidden;display:block}.swagger-section .swagger-ui-wrap .heading_with_menu ul{display:block;clear:none;float:right;-ms-box-sizing:border-box;box-sizing:border-box;margin-top:10px}.swagger-section .swagger-ui-wrap h2{color:#000;font-size:1.3em;padding:10px 0}.swagger-section .swagger-ui-wrap h2 a{color:#000}.swagger-section .swagger-ui-wrap h2 span.sub{font-size:.7em;color:#999;font-style:italic}.swagger-section .swagger-ui-wrap h2 span.sub a{color:#777}.swagger-section .swagger-ui-wrap span.weak{color:#666}.swagger-section .swagger-ui-wrap .message-success{color:#89bf04}.swagger-section .swagger-ui-wrap caption,.swagger-section .swagger-ui-wrap td,.swagger-section .swagger-ui-wrap th{text-align:left;font-weight:400;vertical-align:middle}.swagger-section .swagger-ui-wrap .code{font-family:Anonymous Pro,Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.text textarea{font-family:Droid Sans,sans-serif;height:250px;padding:4px;display:block;clear:both}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.select select{display:block;clear:both}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean{float:none;clear:both;overflow:hidden;display:block}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean label{display:block;float:left;clear:none;margin:0;padding:0}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean input{display:block;float:left;clear:none;margin:0 5px 0 0}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.required label{color:#000}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label{display:block;clear:both;width:auto;padding:0 0 3px;color:#666}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label abbr{padding-left:3px;color:#888}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li p.inline-hints{margin-left:0;font-style:italic;font-size:.9em;margin:0}.swagger-section .swagger-ui-wrap form.formtastic fieldset.buttons{margin:0;padding:0}.swagger-section .swagger-ui-wrap span.blank,.swagger-section .swagger-ui-wrap span.empty{color:#888;font-style:italic}.swagger-section .swagger-ui-wrap .markdown h3{color:#547f00}.swagger-section .swagger-ui-wrap .markdown h4{color:#666}.swagger-section .swagger-ui-wrap .markdown pre{font-family:Anonymous Pro,Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace;background-color:#fcf6db;border:1px solid #e5e0c6;padding:10px;margin:0 0 10px}.swagger-section .swagger-ui-wrap .markdown pre code{line-height:1.6em;overflow:auto}.swagger-section .swagger-ui-wrap div.gist{margin:20px 0 25px!important}.swagger-section .swagger-ui-wrap ul#resources{font-family:Droid Sans,sans-serif;font-size:.9em}.swagger-section .swagger-ui-wrap ul#resources li.resource{border-bottom:1px solid #ddd}.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading h2 a,.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading h2 a{color:#000}.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading ul.options li a,.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading ul.options li a{color:#555}.swagger-section .swagger-ui-wrap ul#resources li.resource:last-child{border-bottom:none}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading{border:1px solid transparent;float:none;clear:both;overflow:hidden;display:block}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options{overflow:hidden;padding:0;display:block;clear:none;float:right;margin:14px 10px 0 0}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li{float:left;clear:none;margin:0;padding:2px 10px;border-right:1px solid #ddd;color:#666;font-size:.9em}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a{color:#aaa;text-decoration:none}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover{text-decoration:underline;color:#000}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a.active,.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:active,.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover{text-decoration:underline}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.first,.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:first-child{padding-left:0}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:last-child{padding-right:0;border-right:none}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options.first,.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options:first-child{padding-left:0}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2{color:#999;padding-left:0;display:block;clear:none;float:left;font-family:Droid Sans,sans-serif;font-weight:700}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a{color:#999}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover{color:#000}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation{float:none;clear:both;overflow:hidden;display:block;margin:0 0 10px;padding:0}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading{float:none;clear:both;overflow:hidden;display:block;margin:0;padding:0}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3{display:block;clear:none;float:left;width:auto;margin:0;padding:0;line-height:1.1em;color:#000}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path{padding-left:10px}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a{color:#000;text-decoration:none}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a.toggleOperation.deprecated{text-decoration:line-through}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a:hover{text-decoration:underline}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.http_method a{text-transform:uppercase;text-decoration:none;color:#fff;display:inline-block;width:50px;font-size:.7em;text-align:center;padding:7px 0 4px;border-radius:2px}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span{margin:0;padding:0}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options{overflow:hidden;padding:0;display:block;clear:none;float:right;margin:6px 10px 0 0}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li{float:left;clear:none;margin:0;padding:2px 10px;font-size:.9em}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a{text-decoration:none}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a .markdown p{color:inherit;padding:0;line-height:inherit}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a .nickname{color:#aaa;padding:0;line-height:inherit}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li.access{color:#000}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content{border-top:none;padding:10px;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:0 0 20px}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h4{font-size:1.1em;margin:0;padding:15px 0 5px}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header{float:none;clear:both;overflow:hidden;display:block}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header a{padding:4px 0 0 10px;display:inline-block;font-size:.9em}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header input.submit{display:block;clear:none;float:left;padding:6px 8px}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header span.response_throbber{background-image:url(../images/throbber.gif);width:128px;height:16px;display:block;clear:none;float:right}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form input[type=text].error{outline:2px solid #000;outline-color:#c00}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form select[name=parameterContentType]{max-width:300px}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.response div.block pre{font-family:Anonymous Pro,Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace;padding:10px;font-size:.9em;max-height:400px;overflow-y:auto}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading{background-color:#f9f2e9;border:1px solid #f0e0ca}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a{background-color:#c5862b}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#f0e0ca;color:#c5862b}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a{color:#c5862b}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content{background-color:#faf5ee;border:1px solid #f0e0ca}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4{color:#c5862b}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a{color:#dcb67f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading{background-color:#fcffcd;border:1px solid #000;border-color:#ffd20f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a{text-transform:uppercase;background-color:#ffd20f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#ffd20f;color:#ffd20f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a{color:#ffd20f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content{background-color:#fcffcd;border:1px solid #000;border-color:#ffd20f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4{color:#ffd20f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a{color:#6fc992}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading{background-color:#f5e8e8;border:1px solid #e8c6c7}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a{text-transform:uppercase;background-color:#a41e22}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#e8c6c7;color:#a41e22}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a{color:#a41e22}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content{background-color:#f7eded;border:1px solid #e8c6c7}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4{color:#a41e22}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a{color:#c8787a}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading{background-color:#e7f6ec;border:1px solid #c3e8d1}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a{background-color:#10a54a}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#c3e8d1;color:#10a54a}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a{color:#10a54a}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content{background-color:#ebf7f0;border:1px solid #c3e8d1}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4{color:#10a54a}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a{color:#6fc992}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading{background-color:#fce9e3;border:1px solid #f5d5c3}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a{background-color:#d38042}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#f0cecb;color:#d38042}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a{color:#d38042}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content{background-color:#faf0ef;border:1px solid #f0cecb}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4{color:#d38042}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a{color:#dcb67f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading{background-color:#e7f0f7;border:1px solid #c3d9ec}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a{background-color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#c3d9ec;color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a{color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content{background-color:#ebf3f9;border:1px solid #c3d9ec}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4{color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a{color:#6fa5d2}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading{background-color:#e7f0f7;border:1px solid #c3d9ec}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading h3 span.http_method a{background-color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#c3d9ec;color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li a{color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content{background-color:#ebf3f9;border:1px solid #c3d9ec}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content h4{color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content div.sandbox_header a{color:#6fa5d2}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content{border-top:none}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child{padding-right:0;border-right:none}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a.active,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:active,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:hover{text-decoration:underline}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations.first,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations:first-child,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li.first,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li:first-child{padding-left:0}.swagger-section .swagger-ui-wrap p#colophon{margin:0 15px 40px;padding:10px 0;font-size:.8em;border-top:1px solid #ddd;font-family:Droid Sans,sans-serif;color:#999;font-style:italic}.swagger-section .swagger-ui-wrap p#colophon a{text-decoration:none;color:#547f00}.swagger-section .swagger-ui-wrap h3{color:#000;font-size:1.1em;padding:10px 0}.swagger-section .swagger-ui-wrap .markdown ol,.swagger-section .swagger-ui-wrap .markdown ul{font-family:Droid Sans,sans-serif;margin:5px 0 10px;padding:0 0 0 18px;list-style-type:disc}.swagger-section .swagger-ui-wrap form.form_box{background-color:#ebf3f9;border:1px solid #c3d9ec;padding:10px}.swagger-section .swagger-ui-wrap form.form_box label{color:#0f6ab4!important}.swagger-section .swagger-ui-wrap form.form_box input[type=submit]{display:block;padding:10px}.swagger-section .swagger-ui-wrap form.form_box p.weak{font-size:.8em}.swagger-section .swagger-ui-wrap form.form_box p{font-size:.9em;padding:0 0 15px;color:#7e7b6d}.swagger-section .swagger-ui-wrap form.form_box p a{color:#646257}.swagger-section .swagger-ui-wrap form.form_box p strong{color:#000}.swagger-section .swagger-ui-wrap .operation-status td.markdown>p:last-child{padding-bottom:0}.swagger-section .title{font-style:bold}.swagger-section .secondary_form{display:none}.swagger-section .main_image{display:block;margin-left:auto;margin-right:auto}.swagger-section .oauth_body{margin-left:100px;margin-right:100px}.swagger-section .oauth_submit{text-align:center;display:inline-block}.swagger-section .authorize-wrapper{margin:15px 0 10px}.swagger-section .authorize-wrapper_operation{float:right}.swagger-section .authorize__btn:hover{text-decoration:underline;cursor:pointer}.swagger-section .authorize__btn_operation:hover .authorize-scopes{display:block}.swagger-section .authorize-scopes{position:absolute;margin-top:20px;background:#fff;border:1px solid #ccc;border-radius:5px;display:none;font-size:13px;max-width:300px;line-height:30px;color:#000;padding:5px}.swagger-section .authorize-scopes .authorize__scope{text-decoration:none}.swagger-section .authorize__btn_operation{height:18px;vertical-align:middle;display:inline-block;background:url(../images/explorer_icons.png) no-repeat}.swagger-section .authorize__btn_operation_login{background-position:0 0;width:18px;margin-top:-6px;margin-left:4px}.swagger-section .authorize__btn_operation_logout{background-position:-30px 0;width:18px;margin-top:-6px;margin-left:4px}.swagger-section #auth_container{color:#fff;display:inline-block;border:none;padding:5px;width:87px;height:13px}.swagger-section #auth_container .authorize__btn{color:#fff}.swagger-section .auth_container{padding:0 0 10px;margin-bottom:5px;border-bottom:1px solid #ccc;font-size:.9em}.swagger-section .auth_container .auth__title{color:#547f00;font-size:1.2em}.swagger-section .auth_container .basic_auth__label{display:inline-block;width:60px}.swagger-section .auth_container .auth__description{color:#999;margin-bottom:5px}.swagger-section .auth_container .auth__button{margin-top:10px;height:30px}.swagger-section .auth_container .key_auth__field{margin:5px 0}.swagger-section .auth_container .key_auth__label{display:inline-block;width:60px}.swagger-section .api-popup-dialog{position:absolute;display:none}.swagger-section .api-popup-dialog-wrapper{z-index:2;width:500px;background:#fff;padding:20px;border:1px solid #ccc;border-radius:5px;font-size:13px;color:#777;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.swagger-section .api-popup-dialog-shadow{position:fixed;top:0;left:0;width:100%;height:100%;opacity:.2;background-color:gray;z-index:1}.swagger-section .api-popup-dialog .api-popup-title{font-size:24px;padding:10px 0}.swagger-section .api-popup-dialog .error-msg{padding-left:5px;padding-bottom:5px}.swagger-section .api-popup-dialog .api-popup-content{max-height:500px;overflow-y:auto}.swagger-section .api-popup-dialog .api-popup-authbtn,.swagger-section .api-popup-dialog .api-popup-cancel{height:30px}.swagger-section .api-popup-scopes{padding:10px 20px}.swagger-section .api-popup-scopes li{padding:5px 0;line-height:20px}.swagger-section .api-popup-scopes li input{position:relative;top:2px}.swagger-section .api-popup-scopes .api-scope-desc{padding-left:20px;font-style:italic}.swagger-section .api-popup-actions{padding-top:10px}.swagger-section fieldset{padding-bottom:10px;padding-left:20px}#header{display:none}.swagger-section .swagger-ui-wrap .model-signature pre{max-height:none}.swagger-section .swagger-ui-wrap .body-textarea,.swagger-section .swagger-ui-wrap input.parameter{width:100px}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options{display:none}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content{display:block!important} \ No newline at end of file diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/css/reset.css b/src/ServiceStack.Api.OpenApi/swagger-ui/css/reset.css new file mode 100644 index 00000000000..40dc8301c57 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/css/reset.css @@ -0,0 +1 @@ +a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0} \ No newline at end of file diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/css/screen.css b/src/ServiceStack.Api.OpenApi/swagger-ui/css/screen.css new file mode 100644 index 00000000000..1f069f6abe3 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/css/screen.css @@ -0,0 +1 @@ +.swagger-section pre code{display:block;padding:.5em;background:#f0f0f0}.swagger-section pre .clojure .built_in,.swagger-section pre .lisp .title,.swagger-section pre .nginx .title,.swagger-section pre .subst,.swagger-section pre .tag .title,.swagger-section pre code{color:#000}.swagger-section pre .addition,.swagger-section pre .aggregate,.swagger-section pre .apache .cbracket,.swagger-section pre .apache .tag,.swagger-section pre .bash .variable,.swagger-section pre .constant,.swagger-section pre .django .variable,.swagger-section pre .erlang_repl .function_or_atom,.swagger-section pre .flow,.swagger-section pre .markdown .header,.swagger-section pre .parent,.swagger-section pre .preprocessor,.swagger-section pre .ruby .symbol,.swagger-section pre .ruby .symbol .string,.swagger-section pre .rules .value,.swagger-section pre .rules .value .number,.swagger-section pre .smalltalk .class,.swagger-section pre .stream,.swagger-section pre .string,.swagger-section pre .tag .value,.swagger-section pre .template_tag,.swagger-section pre .tex .command,.swagger-section pre .tex .special,.swagger-section pre .title{color:#800}.swagger-section pre .annotation,.swagger-section pre .chunk,.swagger-section pre .comment,.swagger-section pre .diff .header,.swagger-section pre .markdown .blockquote,.swagger-section pre .template_comment{color:#888}.swagger-section pre .change,.swagger-section pre .date,.swagger-section pre .go .constant,.swagger-section pre .literal,.swagger-section pre .markdown .bullet,.swagger-section pre .markdown .link_url,.swagger-section pre .number,.swagger-section pre .regexp,.swagger-section pre .smalltalk .char,.swagger-section pre .smalltalk .symbol{color:#080}.swagger-section pre .apache .sqbracket,.swagger-section pre .array,.swagger-section pre .attr_selector,.swagger-section pre .clojure .attribute,.swagger-section pre .coffeescript .property,.swagger-section pre .decorator,.swagger-section pre .deletion,.swagger-section pre .doctype,.swagger-section pre .envvar,.swagger-section pre .erlang_repl .reserved,.swagger-section pre .filter .argument,.swagger-section pre .important,.swagger-section pre .javadoc,.swagger-section pre .label,.swagger-section pre .localvars,.swagger-section pre .markdown .link_label,.swagger-section pre .nginx .built_in,.swagger-section pre .pi,.swagger-section pre .prompt,.swagger-section pre .pseudo,.swagger-section pre .ruby .string,.swagger-section pre .shebang,.swagger-section pre .tex .formula,.swagger-section pre .vhdl .attribute{color:#88f}.swagger-section pre .aggregate,.swagger-section pre .apache .tag,.swagger-section pre .bash .variable,.swagger-section pre .built_in,.swagger-section pre .css .tag,.swagger-section pre .go .typename,.swagger-section pre .id,.swagger-section pre .javadoctag,.swagger-section pre .keyword,.swagger-section pre .markdown .strong,.swagger-section pre .phpdoc,.swagger-section pre .request,.swagger-section pre .smalltalk .class,.swagger-section pre .status,.swagger-section pre .tex .command,.swagger-section pre .title,.swagger-section pre .winutils,.swagger-section pre .yardoctag{font-weight:700}.swagger-section pre .markdown .emphasis{font-style:italic}.swagger-section pre .nginx .built_in{font-weight:400}.swagger-section pre .coffeescript .javascript,.swagger-section pre .javascript .xml,.swagger-section pre .tex .formula,.swagger-section pre .xml .cdata,.swagger-section pre .xml .css,.swagger-section pre .xml .javascript,.swagger-section pre .xml .vbscript{opacity:.5}.swagger-section .hljs{display:block;overflow-x:auto;padding:.5em;background:#f0f0f0}.swagger-section .hljs,.swagger-section .hljs-subst{color:#444}.swagger-section .hljs-attribute,.swagger-section .hljs-doctag,.swagger-section .hljs-keyword,.swagger-section .hljs-meta-keyword,.swagger-section .hljs-name,.swagger-section .hljs-selector-tag{font-weight:700}.swagger-section .hljs-addition,.swagger-section .hljs-built_in,.swagger-section .hljs-bullet,.swagger-section .hljs-code,.swagger-section .hljs-literal{color:#1f811f}.swagger-section .hljs-link,.swagger-section .hljs-regexp,.swagger-section .hljs-selector-attr,.swagger-section .hljs-selector-pseudo,.swagger-section .hljs-symbol,.swagger-section .hljs-template-variable,.swagger-section .hljs-variable{color:#bc6060}.swagger-section .hljs-deletion,.swagger-section .hljs-number,.swagger-section .hljs-quote,.swagger-section .hljs-selector-class,.swagger-section .hljs-selector-id,.swagger-section .hljs-string,.swagger-section .hljs-template-tag,.swagger-section .hljs-type{color:#800}.swagger-section .hljs-section,.swagger-section .hljs-title{color:#800;font-weight:700}.swagger-section .hljs-comment{color:#888}.swagger-section .hljs-meta{color:#2b6ea1}.swagger-section .hljs-emphasis{font-style:italic}.swagger-section .hljs-strong{font-weight:700}.swagger-section .swagger-ui-wrap{line-height:1;font-family:Droid Sans,sans-serif;min-width:760px;max-width:960px;margin-left:auto;margin-right:auto}.swagger-section .swagger-ui-wrap b,.swagger-section .swagger-ui-wrap strong{font-family:Droid Sans,sans-serif;font-weight:700}.swagger-section .swagger-ui-wrap blockquote,.swagger-section .swagger-ui-wrap q{quotes:none}.swagger-section .swagger-ui-wrap p{line-height:1.4em;padding:0 0 10px;color:#333}.swagger-section .swagger-ui-wrap blockquote:after,.swagger-section .swagger-ui-wrap blockquote:before,.swagger-section .swagger-ui-wrap q:after,.swagger-section .swagger-ui-wrap q:before{content:none}.swagger-section .swagger-ui-wrap .heading_with_menu h1,.swagger-section .swagger-ui-wrap .heading_with_menu h2,.swagger-section .swagger-ui-wrap .heading_with_menu h3,.swagger-section .swagger-ui-wrap .heading_with_menu h4,.swagger-section .swagger-ui-wrap .heading_with_menu h5,.swagger-section .swagger-ui-wrap .heading_with_menu h6{display:block;clear:none;float:left;-ms-box-sizing:border-box;box-sizing:border-box;width:60%}.swagger-section .swagger-ui-wrap table{border-collapse:collapse;border-spacing:0}.swagger-section .swagger-ui-wrap table thead tr th{padding:5px;font-size:.9em;color:#666;border-bottom:1px solid #999}.swagger-section .swagger-ui-wrap table tbody tr:last-child td{border-bottom:none}.swagger-section .swagger-ui-wrap table tbody tr.offset{background-color:#f0f0f0}.swagger-section .swagger-ui-wrap table tbody tr td{padding:6px;font-size:.9em;border-bottom:1px solid #ccc;vertical-align:top;line-height:1.3em}.swagger-section .swagger-ui-wrap ol{margin:0 0 10px;padding:0 0 0 18px;list-style-type:decimal}.swagger-section .swagger-ui-wrap ol li{padding:5px 0;font-size:.9em;color:#333}.swagger-section .swagger-ui-wrap ol,.swagger-section .swagger-ui-wrap ul{list-style:none}.swagger-section .swagger-ui-wrap h1 a,.swagger-section .swagger-ui-wrap h2 a,.swagger-section .swagger-ui-wrap h3 a,.swagger-section .swagger-ui-wrap h4 a,.swagger-section .swagger-ui-wrap h5 a,.swagger-section .swagger-ui-wrap h6 a{text-decoration:none}.swagger-section .swagger-ui-wrap h1 a:hover,.swagger-section .swagger-ui-wrap h2 a:hover,.swagger-section .swagger-ui-wrap h3 a:hover,.swagger-section .swagger-ui-wrap h4 a:hover,.swagger-section .swagger-ui-wrap h5 a:hover,.swagger-section .swagger-ui-wrap h6 a:hover{text-decoration:underline}.swagger-section .swagger-ui-wrap h1 span.divider,.swagger-section .swagger-ui-wrap h2 span.divider,.swagger-section .swagger-ui-wrap h3 span.divider,.swagger-section .swagger-ui-wrap h4 span.divider,.swagger-section .swagger-ui-wrap h5 span.divider,.swagger-section .swagger-ui-wrap h6 span.divider{color:#aaa}.swagger-section .swagger-ui-wrap a{color:#547f00}.swagger-section .swagger-ui-wrap a img{border:none}.swagger-section .swagger-ui-wrap article,.swagger-section .swagger-ui-wrap aside,.swagger-section .swagger-ui-wrap details,.swagger-section .swagger-ui-wrap figcaption,.swagger-section .swagger-ui-wrap figure,.swagger-section .swagger-ui-wrap footer,.swagger-section .swagger-ui-wrap header,.swagger-section .swagger-ui-wrap hgroup,.swagger-section .swagger-ui-wrap menu,.swagger-section .swagger-ui-wrap nav,.swagger-section .swagger-ui-wrap section,.swagger-section .swagger-ui-wrap summary{display:block}.swagger-section .swagger-ui-wrap pre{font-family:Anonymous Pro,Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace;background-color:#fcf6db;border:1px solid #e5e0c6;padding:10px}.swagger-section .swagger-ui-wrap pre code{line-height:1.6em;background:none}.swagger-section .swagger-ui-wrap .content>.content-type>div>label{clear:both;display:block;color:#0f6ab4;font-size:1.1em;margin:0;padding:15px 0 5px}.swagger-section .swagger-ui-wrap .content pre{font-size:12px;margin-top:5px;padding:5px}.swagger-section .swagger-ui-wrap .icon-btn{cursor:pointer}.swagger-section .swagger-ui-wrap .info_title{padding-bottom:10px;font-weight:700;font-size:25px}.swagger-section .swagger-ui-wrap .footer{margin-top:20px}.swagger-section .swagger-ui-wrap div.big p,.swagger-section .swagger-ui-wrap p.big{font-size:1em;margin-bottom:10px}.swagger-section .swagger-ui-wrap form.fullwidth ol li.numeric input,.swagger-section .swagger-ui-wrap form.fullwidth ol li.string input,.swagger-section .swagger-ui-wrap form.fullwidth ol li.text textarea,.swagger-section .swagger-ui-wrap form.fullwidth ol li.url input{width:500px!important}.swagger-section .swagger-ui-wrap .info_license,.swagger-section .swagger-ui-wrap .info_tos{padding-bottom:5px}.swagger-section .swagger-ui-wrap .message-fail{color:#c00}.swagger-section .swagger-ui-wrap .info_email,.swagger-section .swagger-ui-wrap .info_name,.swagger-section .swagger-ui-wrap .info_url{padding-bottom:5px}.swagger-section .swagger-ui-wrap .info_description{padding-bottom:10px;font-size:15px}.swagger-section .swagger-ui-wrap .markdown ol li,.swagger-section .swagger-ui-wrap .markdown ul li{padding:3px 0;line-height:1.4em;color:#333}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input,.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input,.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input{display:block;padding:4px;width:auto;clear:both}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input.title,.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input.title,.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input.title{font-size:1.3em}.swagger-section .swagger-ui-wrap table.fullwidth{width:100%}.swagger-section .swagger-ui-wrap .model-signature{font-family:Droid Sans,sans-serif;font-size:1em;line-height:1.5em}.swagger-section .swagger-ui-wrap .model-signature .signature-nav a{text-decoration:none;color:#aaa}.swagger-section .swagger-ui-wrap .model-signature .signature-nav a:hover{text-decoration:underline;color:#000}.swagger-section .swagger-ui-wrap .model-signature .signature-nav .selected{color:#000;text-decoration:none}.swagger-section .swagger-ui-wrap .model-signature .propType{color:#55a}.swagger-section .swagger-ui-wrap .model-signature pre:hover{background-color:#ffd}.swagger-section .swagger-ui-wrap .model-signature pre{font-size:.85em;line-height:1.2em;overflow:auto;height:200px;resize:vertical;cursor:pointer}.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav{display:block;min-width:230px;margin:0;padding:0}.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li:last-child{padding-right:0;border-right:none}.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li{float:left;margin:0 5px 5px 0;padding:2px 5px 2px 0;border-right:1px solid #ddd}.swagger-section .swagger-ui-wrap .model-signature .propOpt{color:#555}.swagger-section .swagger-ui-wrap .model-signature .snippet small{font-size:.75em}.swagger-section .swagger-ui-wrap .model-signature .propOptKey{font-style:italic}.swagger-section .swagger-ui-wrap .model-signature .description .strong{font-weight:700;color:#000;font-size:.9em}.swagger-section .swagger-ui-wrap .model-signature .description div{font-size:.9em;line-height:1.5em;margin-left:1em}.swagger-section .swagger-ui-wrap .model-signature .description .stronger{font-weight:700;color:#000}.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper{border-spacing:0;position:absolute;background-color:#fff;border:1px solid #bbb;display:none;font-size:11px;max-width:400px;line-height:30px;color:#000;padding:5px;margin-left:10px}.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper th{text-align:center;background-color:#eee;border:1px solid #bbb;font-size:11px;color:#666;font-weight:700;padding:5px;line-height:15px}.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper .optionName{font-weight:700}.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown>p:first-child,.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown>p:last-child{display:inline}.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown>p:not(:first-child):before{display:block;content:''}.swagger-section .swagger-ui-wrap .model-signature .description span:last-of-type.propDesc.markdown>p:only-child{margin-right:-3px}.swagger-section .swagger-ui-wrap .model-signature .propName{font-weight:700}.swagger-section .swagger-ui-wrap .model-signature .signature-container{clear:both}.swagger-section .swagger-ui-wrap .body-textarea{width:300px;height:100px;border:1px solid #aaa}.swagger-section .swagger-ui-wrap .markdown li code,.swagger-section .swagger-ui-wrap .markdown p code{font-family:Anonymous Pro,Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace;background-color:#f0f0f0;color:#000;padding:1px 3px}.swagger-section .swagger-ui-wrap .required{font-weight:700}.swagger-section .swagger-ui-wrap .editor_holder{font-family:Anonymous Pro,Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace;font-size:.9em}.swagger-section .swagger-ui-wrap .editor_holder label{font-weight:400!important}.swagger-section .swagger-ui-wrap .editor_holder label.required{font-weight:700!important}.swagger-section .swagger-ui-wrap input.parameter{width:300px;border:1px solid #aaa}.swagger-section .swagger-ui-wrap h1{color:#000;font-size:1.5em;line-height:1.3em;padding:10px 0;font-family:Droid Sans,sans-serif;font-weight:700}.swagger-section .swagger-ui-wrap .heading_with_menu{float:none;clear:both;overflow:hidden;display:block}.swagger-section .swagger-ui-wrap .heading_with_menu ul{display:block;clear:none;float:right;-ms-box-sizing:border-box;box-sizing:border-box;margin-top:10px}.swagger-section .swagger-ui-wrap h2{color:#000;font-size:1.3em;padding:10px 0}.swagger-section .swagger-ui-wrap h2 a{color:#000}.swagger-section .swagger-ui-wrap h2 span.sub{font-size:.7em;color:#999;font-style:italic}.swagger-section .swagger-ui-wrap h2 span.sub a{color:#777}.swagger-section .swagger-ui-wrap span.weak{color:#666}.swagger-section .swagger-ui-wrap .message-success{color:#89bf04}.swagger-section .swagger-ui-wrap caption,.swagger-section .swagger-ui-wrap td,.swagger-section .swagger-ui-wrap th{text-align:left;font-weight:400;vertical-align:middle}.swagger-section .swagger-ui-wrap .code{font-family:Anonymous Pro,Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.text textarea{font-family:Droid Sans,sans-serif;height:250px;padding:4px;display:block;clear:both}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.select select{display:block;clear:both}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean{float:none;clear:both;overflow:hidden;display:block}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean label{display:block;float:left;clear:none;margin:0;padding:0}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean input{display:block;float:left;clear:none;margin:0 5px 0 0}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.required label{color:#000}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label{display:block;clear:both;width:auto;padding:0 0 3px;color:#666}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label abbr{padding-left:3px;color:#888}.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li p.inline-hints{margin-left:0;font-style:italic;font-size:.9em;margin:0}.swagger-section .swagger-ui-wrap form.formtastic fieldset.buttons{margin:0;padding:0}.swagger-section .swagger-ui-wrap span.blank,.swagger-section .swagger-ui-wrap span.empty{color:#888;font-style:italic}.swagger-section .swagger-ui-wrap .markdown h3{color:#547f00}.swagger-section .swagger-ui-wrap .markdown h4{color:#666}.swagger-section .swagger-ui-wrap .markdown pre{font-family:Anonymous Pro,Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace;background-color:#fcf6db;border:1px solid #e5e0c6;padding:10px;margin:0 0 10px}.swagger-section .swagger-ui-wrap .markdown pre code{line-height:1.6em;overflow:auto}.swagger-section .swagger-ui-wrap div.gist{margin:20px 0 25px!important}.swagger-section .swagger-ui-wrap ul#resources{font-family:Droid Sans,sans-serif;font-size:.9em}.swagger-section .swagger-ui-wrap ul#resources li.resource{border-bottom:1px solid #ddd}.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading h2 a,.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading h2 a{color:#000}.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading ul.options li a,.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading ul.options li a{color:#555}.swagger-section .swagger-ui-wrap ul#resources li.resource:last-child{border-bottom:none}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading{border:1px solid transparent;float:none;clear:both;overflow:hidden;display:block}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options{overflow:hidden;padding:0;display:block;clear:none;float:right;margin:14px 10px 0 0}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li{float:left;clear:none;margin:0;padding:2px 10px;border-right:1px solid #ddd;color:#666;font-size:.9em}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a{color:#aaa;text-decoration:none}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover{text-decoration:underline;color:#000}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a.active,.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:active,.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover{text-decoration:underline}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.first,.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:first-child{padding-left:0}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:last-child{padding-right:0;border-right:none}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options.first,.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options:first-child{padding-left:0}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2{color:#999;padding-left:0;display:block;clear:none;float:left;font-family:Droid Sans,sans-serif;font-weight:700}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a{color:#999}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover{color:#000}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation{float:none;clear:both;overflow:hidden;display:block;margin:0 0 10px;padding:0}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading{float:none;clear:both;overflow:hidden;display:block;margin:0;padding:0}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3{display:block;clear:none;float:left;width:auto;margin:0;padding:0;line-height:1.1em;color:#000}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path{padding-left:10px}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a{color:#000;text-decoration:none}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a.toggleOperation.deprecated{text-decoration:line-through}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a:hover{text-decoration:underline}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.http_method a{text-transform:uppercase;text-decoration:none;color:#fff;display:inline-block;width:50px;font-size:.7em;text-align:center;padding:7px 0 4px;border-radius:2px}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span{margin:0;padding:0}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options{overflow:hidden;padding:0;display:block;clear:none;float:right;margin:6px 10px 0 0}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li{float:left;clear:none;margin:0;padding:2px 10px;font-size:.9em}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a{text-decoration:none}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a .markdown p{color:inherit;padding:0;line-height:inherit}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a .nickname{color:#aaa;padding:0;line-height:inherit}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li.access{color:#000}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content{border-top:none;padding:10px;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:0 0 20px}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h4{font-size:1.1em;margin:0;padding:15px 0 5px}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header{float:none;clear:both;overflow:hidden;display:block}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header a{padding:4px 0 0 10px;display:inline-block;font-size:.9em}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header input.submit{display:block;clear:none;float:left;padding:6px 8px}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header span.response_throbber{background-image:url(../images/throbber.gif);width:128px;height:16px;display:block;clear:none;float:right}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form input[type=text].error{outline:2px solid #000;outline-color:#c00}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form select[name=parameterContentType]{max-width:300px}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.response div.block pre{font-family:Anonymous Pro,Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace;padding:10px;font-size:.9em;max-height:400px;overflow-y:auto}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading{background-color:#f9f2e9;border:1px solid #f0e0ca}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a{background-color:#c5862b}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#f0e0ca;color:#c5862b}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a{color:#c5862b}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content{background-color:#faf5ee;border:1px solid #f0e0ca}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4{color:#c5862b}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a{color:#dcb67f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading{background-color:#fcffcd;border:1px solid #000;border-color:#ffd20f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a{text-transform:uppercase;background-color:#ffd20f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#ffd20f;color:#ffd20f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a{color:#ffd20f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content{background-color:#fcffcd;border:1px solid #000;border-color:#ffd20f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4{color:#ffd20f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a{color:#6fc992}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading{background-color:#f5e8e8;border:1px solid #e8c6c7}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a{text-transform:uppercase;background-color:#a41e22}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#e8c6c7;color:#a41e22}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a{color:#a41e22}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content{background-color:#f7eded;border:1px solid #e8c6c7}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4{color:#a41e22}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a{color:#c8787a}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading{background-color:#e7f6ec;border:1px solid #c3e8d1}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a{background-color:#10a54a}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#c3e8d1;color:#10a54a}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a{color:#10a54a}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content{background-color:#ebf7f0;border:1px solid #c3e8d1}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4{color:#10a54a}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a{color:#6fc992}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading{background-color:#fce9e3;border:1px solid #f5d5c3}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a{background-color:#d38042}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#f0cecb;color:#d38042}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a{color:#d38042}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content{background-color:#faf0ef;border:1px solid #f0cecb}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4{color:#d38042}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a{color:#dcb67f}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading{background-color:#e7f0f7;border:1px solid #c3d9ec}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a{background-color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#c3d9ec;color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a{color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content{background-color:#ebf3f9;border:1px solid #c3d9ec}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4{color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a{color:#6fa5d2}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading{background-color:#e7f0f7;border:1px solid #c3d9ec}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading h3 span.http_method a{background-color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li{border-right:1px solid #ddd;border-right-color:#c3d9ec;color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li a{color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content{background-color:#ebf3f9;border:1px solid #c3d9ec}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content h4{color:#0f6ab4}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content div.sandbox_header a{color:#6fa5d2}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content{border-top:none}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child{padding-right:0;border-right:none}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a.active,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:active,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:hover{text-decoration:underline}.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations.first,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations:first-child,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li.first,.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li:first-child{padding-left:0}.swagger-section .swagger-ui-wrap p#colophon{margin:0 15px 40px;padding:10px 0;font-size:.8em;border-top:1px solid #ddd;font-family:Droid Sans,sans-serif;color:#999;font-style:italic}.swagger-section .swagger-ui-wrap p#colophon a{text-decoration:none;color:#547f00}.swagger-section .swagger-ui-wrap h3{color:#000;font-size:1.1em;padding:10px 0}.swagger-section .swagger-ui-wrap .markdown ol,.swagger-section .swagger-ui-wrap .markdown ul{font-family:Droid Sans,sans-serif;margin:5px 0 10px;padding:0 0 0 18px;list-style-type:disc}.swagger-section .swagger-ui-wrap form.form_box{background-color:#ebf3f9;border:1px solid #c3d9ec;padding:10px}.swagger-section .swagger-ui-wrap form.form_box label{color:#0f6ab4!important}.swagger-section .swagger-ui-wrap form.form_box input[type=submit]{display:block;padding:10px}.swagger-section .swagger-ui-wrap form.form_box p.weak{font-size:.8em}.swagger-section .swagger-ui-wrap form.form_box p{font-size:.9em;padding:0 0 15px;color:#7e7b6d}.swagger-section .swagger-ui-wrap form.form_box p a{color:#646257}.swagger-section .swagger-ui-wrap form.form_box p strong{color:#000}.swagger-section .swagger-ui-wrap .operation-status td.markdown>p:last-child{padding-bottom:0}.swagger-section .title{font-style:bold}.swagger-section .secondary_form{display:none}.swagger-section .main_image{display:block;margin-left:auto;margin-right:auto}.swagger-section .oauth_body{margin-left:100px;margin-right:100px}.swagger-section .oauth_submit{text-align:center;display:inline-block}.swagger-section .authorize-wrapper{margin:15px 0 10px}.swagger-section .authorize-wrapper_operation{float:right}.swagger-section .authorize__btn:hover{text-decoration:underline;cursor:pointer}.swagger-section .authorize__btn_operation:hover .authorize-scopes{display:block}.swagger-section .authorize-scopes{position:absolute;margin-top:20px;background:#fff;border:1px solid #ccc;border-radius:5px;display:none;font-size:13px;max-width:300px;line-height:30px;color:#000;padding:5px}.swagger-section .authorize-scopes .authorize__scope{text-decoration:none}.swagger-section .authorize__btn_operation{height:18px;vertical-align:middle;display:inline-block;background:url(../images/explorer_icons.png) no-repeat}.swagger-section .authorize__btn_operation_login{background-position:0 0;width:18px;margin-top:-6px;margin-left:4px}.swagger-section .authorize__btn_operation_logout{background-position:-30px 0;width:18px;margin-top:-6px;margin-left:4px}.swagger-section #auth_container{color:#fff;display:inline-block;border:none;padding:5px;width:87px;height:13px}.swagger-section #auth_container .authorize__btn{color:#fff}.swagger-section .auth_container{padding:0 0 10px;margin-bottom:5px;border-bottom:1px solid #ccc;font-size:.9em}.swagger-section .auth_container .auth__title{color:#547f00;font-size:1.2em}.swagger-section .auth_container .basic_auth__label{display:inline-block;width:60px}.swagger-section .auth_container .auth__description{color:#999;margin-bottom:5px}.swagger-section .auth_container .auth__button{margin-top:10px;height:30px}.swagger-section .auth_container .key_auth__field{margin:5px 0}.swagger-section .auth_container .key_auth__label{display:inline-block;width:60px}.swagger-section .api-popup-dialog{position:absolute;display:none}.swagger-section .api-popup-dialog-wrapper{z-index:2;width:500px;background:#fff;padding:20px;border:1px solid #ccc;border-radius:5px;font-size:13px;color:#777;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.swagger-section .api-popup-dialog-shadow{position:fixed;top:0;left:0;width:100%;height:100%;opacity:.2;background-color:gray;z-index:1}.swagger-section .api-popup-dialog .api-popup-title{font-size:24px;padding:10px 0}.swagger-section .api-popup-dialog .error-msg{padding-left:5px;padding-bottom:5px}.swagger-section .api-popup-dialog .api-popup-content{max-height:500px;overflow-y:auto}.swagger-section .api-popup-dialog .api-popup-authbtn,.swagger-section .api-popup-dialog .api-popup-cancel{height:30px}.swagger-section .api-popup-scopes{padding:10px 20px}.swagger-section .api-popup-scopes li{padding:5px 0;line-height:20px}.swagger-section .api-popup-scopes li input{position:relative;top:2px}.swagger-section .api-popup-scopes .api-scope-desc{padding-left:20px;font-style:italic}.swagger-section .api-popup-actions{padding-top:10px}.swagger-section fieldset{padding-bottom:10px;padding-left:20px}.swagger-section .access,.swagger-section .auth{float:right}.swagger-section .api-ic{height:18px;vertical-align:middle;display:inline-block;background:url(../images/explorer_icons.png) no-repeat}.swagger-section .api-ic .api_information_panel{position:relative;margin-top:20px;margin-left:-5px;background:#fff;border:1px solid #ccc;border-radius:5px;display:none;font-size:13px;max-width:300px;line-height:30px;color:#000;padding:5px}.swagger-section .api-ic .api_information_panel p .api-msg-enabled{color:green}.swagger-section .api-ic .api_information_panel p .api-msg-disabled{color:red}.swagger-section .api-ic:hover .api_information_panel{position:absolute;display:block}.swagger-section .ic-info{background-position:0 0;width:18px;margin-top:-6px;margin-left:4px}.swagger-section .ic-warning{background-position:-60px 0;width:18px;margin-top:-6px;margin-left:4px}.swagger-section .ic-error{background-position:-30px 0;width:18px;margin-top:-6px;margin-left:4px}.swagger-section .ic-off{background-position:-90px 0;width:58px;margin-top:-4px;cursor:pointer}.swagger-section .ic-on{background-position:-160px 0;width:58px;margin-top:-4px;cursor:pointer}.swagger-section #header{background-color:#89bf04;padding:9px 14px 19px;height:23px;min-width:775px}.swagger-section #input_baseUrl{width:400px}.swagger-section #api_selector{display:block;clear:none;float:right}.swagger-section #api_selector .input{display:inline-block;clear:none;margin:0 10px 0 0}.swagger-section #api_selector input{font-size:.9em;padding:3px;margin:0}.swagger-section #input_apiKey{width:200px}.swagger-section #auth_container .authorize__btn,.swagger-section #explore{display:block;text-decoration:none;font-weight:700;padding:6px 8px;font-size:.9em;color:#fff;background-color:#547f00;border-radius:4px}.swagger-section #auth_container .authorize__btn:hover,.swagger-section #explore:hover{background-color:#547f00}.swagger-section #header #logo{font-size:1.5em;font-weight:700;text-decoration:none;color:#fff}.swagger-section #header #logo .logo__img{display:block;float:left;margin-top:2px}.swagger-section #header #logo .logo__title{display:inline-block;padding:5px 0 0 10px}.swagger-section #content_message{margin:10px 15px;font-style:italic;color:#999}.swagger-section #message-bar{min-height:30px;text-align:center;padding-top:10px}.swagger-section .swagger-collapse:before{content:"-"}.swagger-section .swagger-expand:before{content:"+"}.swagger-section .error{outline-color:#c00;background-color:#f2dede} \ No newline at end of file diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/css/style.css b/src/ServiceStack.Api.OpenApi/swagger-ui/css/style.css new file mode 100644 index 00000000000..52907e46365 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/css/style.css @@ -0,0 +1 @@ +.swagger-section #header a#logo{font-size:1.5em;font-weight:700;text-decoration:none;padding:20px 0 20px 40px}#text-head{font-size:80px;font-family:Roboto,sans-serif;color:#fff;float:right;margin-right:20%}.navbar-fixed-top .navbar-brand,.navbar-fixed-top .navbar-nav,.navbar-header{height:auto}.navbar-inverse{background-color:#000;border-color:#000}#navbar-brand{margin-left:20%}.navtext{font-size:10px}.h1,h1{font-size:60px}.navbar-default .navbar-header .navbar-brand{color:#a2dfee}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a{color:#393939;font-family:Arvo,serif;font-size:1.5em}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover{color:#000}.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2{color:#525252;padding-left:0;display:block;clear:none;float:left;font-family:Arvo,serif;font-weight:700}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#0a0a0a}.container1{width:1500px;margin:auto;margin-top:0;background-repeat:no-repeat;background-position:-40px -20px;margin-bottom:210px}.container-inner{width:1200px;margin:auto;background-color:hsla(192,8%,88%,.75);padding-bottom:40px;padding-top:40px;border-radius:15px}.header-content{padding:0;width:1000px}.title1{font-size:80px;font-family:Vollkorn,serif;color:#404040;text-align:center;padding-top:40px;padding-bottom:100px}#icon{margin-top:-18px}.subtext{font-size:25px;font-style:italic;color:#08b;text-align:right;padding-right:250px}.bg-primary{background-color:#00468b}.navbar-default .nav>li>a,.navbar-default .nav>li>a:focus,.navbar-default .nav>li>a:focus:hover,.navbar-default .nav>li>a:hover{color:#08b}.text-faded{font-size:25px;font-family:Vollkorn,serif}.section-heading{font-family:Vollkorn,serif;font-size:45px;padding-bottom:10px}hr{border-color:#00468b;padding-bottom:10px}.description{margin-top:20px;padding-bottom:200px}.description li{font-family:Vollkorn,serif;font-size:25px;color:#525252;margin-left:28%;padding-top:5px}.gap{margin-top:200px}.troubleshootingtext{color:hsla(0,0%,100%,.7);padding-left:30%}.troubleshootingtext li{list-style-type:circle;font-size:25px;padding-bottom:5px}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1}.block.response_body.json:hover{cursor:pointer}.backdrop{color:blue}#myModal{height:100%}.modal-backdrop{bottom:0;position:fixed}.curl{padding:10px;font-family:Anonymous Pro,Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace;font-size:.9em;max-height:400px;margin-top:5px;overflow-y:auto;background-color:#fcf6db;border:1px solid #e5e0c6;border-radius:4px}.curl_title{font-size:1.1em;margin:0;padding:15px 0 5px;font-family:Open Sans,Helvetica Neue,Arial,sans-serif;font-weight:500;line-height:1.1}.footer{display:none}.swagger-section .swagger-ui-wrap h2{padding:0}h2{margin:0;margin-bottom:5px}.markdown p,.swagger-section .swagger-ui-wrap .code{font-size:15px;font-family:Arvo,serif}.swagger-section .swagger-ui-wrap b{font-family:Arvo,serif}#signin:hover{cursor:pointer}.dropdown-menu{padding:15px}.navbar-right .dropdown-menu{left:0;right:auto}#signinbutton{width:100%;height:32px;font-size:13px;font-weight:700;color:#08b}.navbar-default .nav>li .details{color:#000;text-transform:none;font-size:15px;font-weight:400;font-family:Open Sans,sans-serif;font-style:italic;line-height:20px;top:-2px}.navbar-default .nav>li .details:hover{color:#000}#signout{width:100%;height:32px;font-size:13px;font-weight:700;color:#08b} \ No newline at end of file diff --git a/lib/ServiceStack.Client.dll.lastcodeanalysissucceeded b/src/ServiceStack.Api.OpenApi/swagger-ui/css/typography.css similarity index 100% rename from lib/ServiceStack.Client.dll.lastcodeanalysissucceeded rename to src/ServiceStack.Api.OpenApi/swagger-ui/css/typography.css diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/fonts/DroidSans-Bold.ttf b/src/ServiceStack.Api.OpenApi/swagger-ui/fonts/DroidSans-Bold.ttf new file mode 100644 index 00000000000..036c4d135bf Binary files /dev/null and b/src/ServiceStack.Api.OpenApi/swagger-ui/fonts/DroidSans-Bold.ttf differ diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/fonts/DroidSans.ttf b/src/ServiceStack.Api.OpenApi/swagger-ui/fonts/DroidSans.ttf new file mode 100644 index 00000000000..e517a0c5b9d Binary files /dev/null and b/src/ServiceStack.Api.OpenApi/swagger-ui/fonts/DroidSans.ttf differ diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/images/collapse.gif b/src/ServiceStack.Api.OpenApi/swagger-ui/images/collapse.gif new file mode 100644 index 00000000000..8843e8ce5a4 Binary files /dev/null and b/src/ServiceStack.Api.OpenApi/swagger-ui/images/collapse.gif differ diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/images/expand.gif b/src/ServiceStack.Api.OpenApi/swagger-ui/images/expand.gif new file mode 100644 index 00000000000..477bf13718d Binary files /dev/null and b/src/ServiceStack.Api.OpenApi/swagger-ui/images/expand.gif differ diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/images/explorer_icons.png b/src/ServiceStack.Api.OpenApi/swagger-ui/images/explorer_icons.png new file mode 100644 index 00000000000..be43b273940 Binary files /dev/null and b/src/ServiceStack.Api.OpenApi/swagger-ui/images/explorer_icons.png differ diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/images/favicon-16x16.png b/src/ServiceStack.Api.OpenApi/swagger-ui/images/favicon-16x16.png new file mode 100644 index 00000000000..0f7e13b0d99 Binary files /dev/null and b/src/ServiceStack.Api.OpenApi/swagger-ui/images/favicon-16x16.png differ diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/images/favicon-32x32.png b/src/ServiceStack.Api.OpenApi/swagger-ui/images/favicon-32x32.png new file mode 100644 index 00000000000..b0a3352ffd3 Binary files /dev/null and b/src/ServiceStack.Api.OpenApi/swagger-ui/images/favicon-32x32.png differ diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/images/favicon.ico b/src/ServiceStack.Api.OpenApi/swagger-ui/images/favicon.ico new file mode 100644 index 00000000000..8b60bcf06a7 Binary files /dev/null and b/src/ServiceStack.Api.OpenApi/swagger-ui/images/favicon.ico differ diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/images/logo_small.png b/src/ServiceStack.Api.OpenApi/swagger-ui/images/logo_small.png new file mode 100644 index 00000000000..0e071cd228e Binary files /dev/null and b/src/ServiceStack.Api.OpenApi/swagger-ui/images/logo_small.png differ diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/images/logo_small_swagger.png b/src/ServiceStack.Api.OpenApi/swagger-ui/images/logo_small_swagger.png new file mode 100644 index 00000000000..ce3908e3f27 Binary files /dev/null and b/src/ServiceStack.Api.OpenApi/swagger-ui/images/logo_small_swagger.png differ diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/images/pet_store_api.png b/src/ServiceStack.Api.OpenApi/swagger-ui/images/pet_store_api.png new file mode 100644 index 00000000000..1192ad8cd6a Binary files /dev/null and b/src/ServiceStack.Api.OpenApi/swagger-ui/images/pet_store_api.png differ diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/images/throbber.gif b/src/ServiceStack.Api.OpenApi/swagger-ui/images/throbber.gif new file mode 100644 index 00000000000..06393889242 Binary files /dev/null and b/src/ServiceStack.Api.OpenApi/swagger-ui/images/throbber.gif differ diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/images/wordnik_api.png b/src/ServiceStack.Api.OpenApi/swagger-ui/images/wordnik_api.png new file mode 100644 index 00000000000..dc0ddab138f Binary files /dev/null and b/src/ServiceStack.Api.OpenApi/swagger-ui/images/wordnik_api.png differ diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/index.html b/src/ServiceStack.Api.OpenApi/swagger-ui/index.html new file mode 100644 index 00000000000..14232f9f4e7 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/index.html @@ -0,0 +1,108 @@ + + + + + + Swagger UI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
       
      +
      + + diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/ca.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/ca.js new file mode 100644 index 00000000000..f8c815aa92c --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/ca.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Advertència: Obsolet", + "Implementation Notes":"Notes d'implementació", + "Response Class":"Classe de la Resposta", + "Status":"Estatus", + "Parameters":"Paràmetres", + "Parameter":"Paràmetre", + "Value":"Valor", + "Description":"Descripció", + "Parameter Type":"Tipus del Paràmetre", + "Data Type":"Tipus de la Dada", + "Response Messages":"Missatges de la Resposta", + "HTTP Status Code":"Codi d'Estatus HTTP", + "Reason":"Raó", + "Response Model":"Model de la Resposta", + "Request URL":"URL de la Sol·licitud", + "Response Body":"Cos de la Resposta", + "Response Code":"Codi de la Resposta", + "Response Headers":"Capçaleres de la Resposta", + "Hide Response":"Amagar Resposta", + "Try it out!":"Prova-ho!", + "Show/Hide":"Mostrar/Amagar", + "List Operations":"Llista Operacions", + "Expand Operations":"Expandir Operacions", + "Raw":"Cru", + "can't parse JSON. Raw result":"no puc analitzar el JSON. Resultat cru", + "Example Value":"Valor d'Exemple", + "Model Schema":"Esquema del Model", + "Model":"Model", + "apply":"aplicar", + "Username":"Nom d'usuari", + "Password":"Contrasenya", + "Terms of service":"Termes del servei", + "Created by":"Creat per", + "See more at":"Veure més en", + "Contact the developer":"Contactar amb el desenvolupador", + "api version":"versió de la api", + "Response Content Type":"Tipus de Contingut de la Resposta", + "fetching resource":"recollint recurs", + "fetching resource list":"recollins llista de recursos", + "Explore":"Explorant", + "Show Swagger Petstore Example Apis":"Mostrar API d'Exemple Swagger Petstore", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"No es pot llegir del servidor. Potser no teniu la configuració de control d'accés apropiada.", + "Please specify the protocol for":"Si us plau, especifiqueu el protocol per a", + "Can't read swagger JSON from":"No es pot llegir el JSON de swagger des de", + "Finished Loading Resource Information. Rendering Swagger UI":"Finalitzada la càrrega del recurs informatiu. Renderitzant Swagger UI", + "Unable to read api":"No es pot llegir l'api", + "from path":"des de la ruta", + "server returned":"el servidor ha retornat" +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/el.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/el.js new file mode 100644 index 00000000000..fcd1ffdd5a9 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/el.js @@ -0,0 +1,56 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Προειδοποίηση: Έχει αποσυρθεί", + "Implementation Notes":"Σημειώσεις Υλοποίησης", + "Response Class":"Απόκριση", + "Status":"Κατάσταση", + "Parameters":"Παράμετροι", + "Parameter":"Παράμετρος", + "Value":"Τιμή", + "Description":"Περιγραφή", + "Parameter Type":"Τύπος Παραμέτρου", + "Data Type":"Τύπος Δεδομένων", + "Response Messages":"Μηνύματα Απόκρισης", + "HTTP Status Code":"Κωδικός Κατάστασης HTTP", + "Reason":"Αιτιολογία", + "Response Model":"Μοντέλο Απόκρισης", + "Request URL":"URL Αιτήματος", + "Response Body":"Σώμα Απόκρισης", + "Response Code":"Κωδικός Απόκρισης", + "Response Headers":"Επικεφαλίδες Απόκρισης", + "Hide Response":"Απόκρυψη Απόκρισης", + "Headers":"Επικεφαλίδες", + "Try it out!":"Δοκιμάστε το!", + "Show/Hide":"Εμφάνιση/Απόκρυψη", + "List Operations":"Λίστα Λειτουργιών", + "Expand Operations":"Ανάπτυξη Λειτουργιών", + "Raw":"Ακατέργαστο", + "can't parse JSON. Raw result":"αδυναμία ανάλυσης JSON. Ακατέργαστο αποτέλεσμα", + "Example Value":"Παράδειγμα Τιμής", + "Model Schema":"Σχήμα Μοντέλου", + "Model":"Μοντέλο", + "Click to set as parameter value":"Πατήστε για να θέσετε τιμή παραμέτρου", + "apply":"εφαρμογή", + "Username":"Όνομα χρήση", + "Password":"Κωδικός πρόσβασης", + "Terms of service":"Όροι χρήσης", + "Created by":"Δημιουργήθηκε από", + "See more at":"Δείτε περισσότερα στο", + "Contact the developer":"Επικοινωνήστε με τον προγραμματιστή", + "api version":"έκδοση api", + "Response Content Type":"Τύπος Περιεχομένου Απόκρισης", + "Parameter content type:":"Τύπος περιεχομένου παραμέτρου:", + "fetching resource":"παραλαβή πόρου", + "fetching resource list":"παραλαβή λίστας πόρων", + "Explore":"Εξερεύνηση", + "Show Swagger Petstore Example Apis":"Εμφάνιση Api Δειγμάτων Petstore του Swagger", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Αδυναμία ανάγνωσης από τον εξυπηρετητή. Μπορεί να μην έχει κατάλληλες ρυθμίσεις για access-control-origin.", + "Please specify the protocol for":"Παρακαλώ προσδιορίστε το πρωτόκολλο για", + "Can't read swagger JSON from":"Αδυναμία ανάγνωσης swagger JSON από", + "Finished Loading Resource Information. Rendering Swagger UI":"Ολοκλήρωση Φόρτωσης Πληροφορικών Πόρου. Παρουσίαση Swagger UI", + "Unable to read api":"Αδυναμία ανάγνωσης api", + "from path":"από το μονοπάτι", + "server returned":"ο εξυπηρετηρής επέστρεψε" +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/en.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/en.js new file mode 100644 index 00000000000..918313665db --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/en.js @@ -0,0 +1,56 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Warning: Deprecated", + "Implementation Notes":"Implementation Notes", + "Response Class":"Response Class", + "Status":"Status", + "Parameters":"Parameters", + "Parameter":"Parameter", + "Value":"Value", + "Description":"Description", + "Parameter Type":"Parameter Type", + "Data Type":"Data Type", + "Response Messages":"Response Messages", + "HTTP Status Code":"HTTP Status Code", + "Reason":"Reason", + "Response Model":"Response Model", + "Request URL":"Request URL", + "Response Body":"Response Body", + "Response Code":"Response Code", + "Response Headers":"Response Headers", + "Hide Response":"Hide Response", + "Headers":"Headers", + "Try it out!":"Try it out!", + "Show/Hide":"Show/Hide", + "List Operations":"List Operations", + "Expand Operations":"Expand Operations", + "Raw":"Raw", + "can't parse JSON. Raw result":"can't parse JSON. Raw result", + "Example Value":"Example Value", + "Model Schema":"Model Schema", + "Model":"Model", + "Click to set as parameter value":"Click to set as parameter value", + "apply":"apply", + "Username":"Username", + "Password":"Password", + "Terms of service":"Terms of service", + "Created by":"Created by", + "See more at":"See more at", + "Contact the developer":"Contact the developer", + "api version":"api version", + "Response Content Type":"Response Content Type", + "Parameter content type:":"Parameter content type:", + "fetching resource":"fetching resource", + "fetching resource list":"fetching resource list", + "Explore":"Explore", + "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Can't read from server. It may not have the appropriate access-control-origin settings.", + "Please specify the protocol for":"Please specify the protocol for", + "Can't read swagger JSON from":"Can't read swagger JSON from", + "Finished Loading Resource Information. Rendering Swagger UI":"Finished Loading Resource Information. Rendering Swagger UI", + "Unable to read api":"Unable to read api", + "from path":"from path", + "server returned":"server returned" +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/es.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/es.js new file mode 100644 index 00000000000..13fa015e6df --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/es.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Advertencia: Obsoleto", + "Implementation Notes":"Notas de implementación", + "Response Class":"Clase de la Respuesta", + "Status":"Status", + "Parameters":"Parámetros", + "Parameter":"Parámetro", + "Value":"Valor", + "Description":"Descripción", + "Parameter Type":"Tipo del Parámetro", + "Data Type":"Tipo del Dato", + "Response Messages":"Mensajes de la Respuesta", + "HTTP Status Code":"Código de Status HTTP", + "Reason":"Razón", + "Response Model":"Modelo de la Respuesta", + "Request URL":"URL de la Solicitud", + "Response Body":"Cuerpo de la Respuesta", + "Response Code":"Código de la Respuesta", + "Response Headers":"Encabezados de la Respuesta", + "Hide Response":"Ocultar Respuesta", + "Try it out!":"Pruébalo!", + "Show/Hide":"Mostrar/Ocultar", + "List Operations":"Listar Operaciones", + "Expand Operations":"Expandir Operaciones", + "Raw":"Crudo", + "can't parse JSON. Raw result":"no puede parsear el JSON. Resultado crudo", + "Example Value":"Valor de Ejemplo", + "Model Schema":"Esquema del Modelo", + "Model":"Modelo", + "apply":"aplicar", + "Username":"Nombre de usuario", + "Password":"Contraseña", + "Terms of service":"Términos de Servicio", + "Created by":"Creado por", + "See more at":"Ver más en", + "Contact the developer":"Contactar al desarrollador", + "api version":"versión de la api", + "Response Content Type":"Tipo de Contenido (Content Type) de la Respuesta", + "fetching resource":"buscando recurso", + "fetching resource list":"buscando lista del recurso", + "Explore":"Explorar", + "Show Swagger Petstore Example Apis":"Mostrar Api Ejemplo de Swagger Petstore", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"No se puede leer del servidor. Tal vez no tiene la configuración de control de acceso de origen (access-control-origin) apropiado.", + "Please specify the protocol for":"Por favor, especificar el protocola para", + "Can't read swagger JSON from":"No se puede leer el JSON de swagger desde", + "Finished Loading Resource Information. Rendering Swagger UI":"Finalizada la carga del recurso de Información. Mostrando Swagger UI", + "Unable to read api":"No se puede leer la api", + "from path":"desde ruta", + "server returned":"el servidor retornó" +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/fr.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/fr.js new file mode 100644 index 00000000000..388dff14bac --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/fr.js @@ -0,0 +1,54 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Avertissement : Obsolète", + "Implementation Notes":"Notes d'implémentation", + "Response Class":"Classe de la réponse", + "Status":"Statut", + "Parameters":"Paramètres", + "Parameter":"Paramètre", + "Value":"Valeur", + "Description":"Description", + "Parameter Type":"Type du paramètre", + "Data Type":"Type de données", + "Response Messages":"Messages de la réponse", + "HTTP Status Code":"Code de statut HTTP", + "Reason":"Raison", + "Response Model":"Modèle de réponse", + "Request URL":"URL appelée", + "Response Body":"Corps de la réponse", + "Response Code":"Code de la réponse", + "Response Headers":"En-têtes de la réponse", + "Hide Response":"Cacher la réponse", + "Headers":"En-têtes", + "Try it out!":"Testez !", + "Show/Hide":"Afficher/Masquer", + "List Operations":"Liste des opérations", + "Expand Operations":"Développer les opérations", + "Raw":"Brut", + "can't parse JSON. Raw result":"impossible de décoder le JSON. Résultat brut", + "Example Value":"Exemple la valeur", + "Model Schema":"Définition du modèle", + "Model":"Modèle", + "apply":"appliquer", + "Username":"Nom d'utilisateur", + "Password":"Mot de passe", + "Terms of service":"Conditions de service", + "Created by":"Créé par", + "See more at":"Voir plus sur", + "Contact the developer":"Contacter le développeur", + "api version":"version de l'api", + "Response Content Type":"Content Type de la réponse", + "fetching resource":"récupération de la ressource", + "fetching resource list":"récupération de la liste de ressources", + "Explore":"Explorer", + "Show Swagger Petstore Example Apis":"Montrer les Apis de l'exemple Petstore de Swagger", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Impossible de lire à partir du serveur. Il se peut que les réglages access-control-origin ne soient pas appropriés.", + "Please specify the protocol for":"Veuillez spécifier un protocole pour", + "Can't read swagger JSON from":"Impossible de lire le JSON swagger à partir de", + "Finished Loading Resource Information. Rendering Swagger UI":"Chargement des informations terminé. Affichage de Swagger UI", + "Unable to read api":"Impossible de lire l'api", + "from path":"à partir du chemin", + "server returned":"réponse du serveur" +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/geo.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/geo.js new file mode 100644 index 00000000000..609c20d9c86 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/geo.js @@ -0,0 +1,56 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"ყურადღება: აღარ გამოიყენება", + "Implementation Notes":"იმპლემენტაციის აღწერა", + "Response Class":"რესპონს კლასი", + "Status":"სტატუსი", + "Parameters":"პარამეტრები", + "Parameter":"პარამეტრი", + "Value":"მნიშვნელობა", + "Description":"აღწერა", + "Parameter Type":"პარამეტრის ტიპი", + "Data Type":"მონაცემის ტიპი", + "Response Messages":"პასუხი", + "HTTP Status Code":"HTTP სტატუსი", + "Reason":"მიზეზი", + "Response Model":"რესპონს მოდელი", + "Request URL":"მოთხოვნის URL", + "Response Body":"პასუხის სხეული", + "Response Code":"პასუხის კოდი", + "Response Headers":"პასუხის ჰედერები", + "Hide Response":"დამალე პასუხი", + "Headers":"ჰედერები", + "Try it out!":"ცადე !", + "Show/Hide":"გამოჩენა/დამალვა", + "List Operations":"ოპერაციების სია", + "Expand Operations":"ოპერაციები ვრცლად", + "Raw":"ნედლი", + "can't parse JSON. Raw result":"JSON-ის დამუშავება ვერ მოხერხდა. ნედლი პასუხი", + "Example Value":"მაგალითი", + "Model Schema":"მოდელის სტრუქტურა", + "Model":"მოდელი", + "Click to set as parameter value":"პარამეტრისთვის მნიშვნელობის მისანიჭებლად, დააკლიკე", + "apply":"გამოყენება", + "Username":"მოხმარებელი", + "Password":"პაროლი", + "Terms of service":"მომსახურების პირობები", + "Created by":"შექმნა", + "See more at":"ნახე ვრცლად", + "Contact the developer":"დაუკავშირდი დეველოპერს", + "api version":"api ვერსია", + "Response Content Type":"პასუხის კონტენტის ტიპი", + "Parameter content type:":"პარამეტრის კონტენტის ტიპი:", + "fetching resource":"რესურსების მიღება", + "fetching resource list":"რესურსების სიის მიღება", + "Explore":"ნახვა", + "Show Swagger Petstore Example Apis":"ნახე Swagger Petstore სამაგალითო Api", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"სერვერთან დაკავშირება ვერ ხერხდება. შეამოწმეთ access-control-origin.", + "Please specify the protocol for":"მიუთითეთ პროტოკოლი", + "Can't read swagger JSON from":"swagger JSON წაკითხვა ვერ მოხერხდა", + "Finished Loading Resource Information. Rendering Swagger UI":"რესურსების ჩატვირთვა სრულდება. Swagger UI რენდერდება", + "Unable to read api":"api წაკითხვა ვერ მოხერხდა", + "from path":"მისამართიდან", + "server returned":"სერვერმა დააბრუნა" +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/it.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/it.js new file mode 100644 index 00000000000..8529c2a90bc --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/it.js @@ -0,0 +1,52 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Attenzione: Deprecato", + "Implementation Notes":"Note di implementazione", + "Response Class":"Classe della risposta", + "Status":"Stato", + "Parameters":"Parametri", + "Parameter":"Parametro", + "Value":"Valore", + "Description":"Descrizione", + "Parameter Type":"Tipo di parametro", + "Data Type":"Tipo di dato", + "Response Messages":"Messaggi della risposta", + "HTTP Status Code":"Codice stato HTTP", + "Reason":"Motivo", + "Response Model":"Modello di risposta", + "Request URL":"URL della richiesta", + "Response Body":"Corpo della risposta", + "Response Code":"Oggetto della risposta", + "Response Headers":"Intestazioni della risposta", + "Hide Response":"Nascondi risposta", + "Try it out!":"Provalo!", + "Show/Hide":"Mostra/Nascondi", + "List Operations":"Mostra operazioni", + "Expand Operations":"Espandi operazioni", + "Raw":"Grezzo (raw)", + "can't parse JSON. Raw result":"non è possibile parsare il JSON. Risultato grezzo (raw).", + "Model Schema":"Schema del modello", + "Model":"Modello", + "apply":"applica", + "Username":"Nome utente", + "Password":"Password", + "Terms of service":"Condizioni del servizio", + "Created by":"Creato da", + "See more at":"Informazioni aggiuntive:", + "Contact the developer":"Contatta lo sviluppatore", + "api version":"versione api", + "Response Content Type":"Tipo di contenuto (content type) della risposta", + "fetching resource":"recuperando la risorsa", + "fetching resource list":"recuperando lista risorse", + "Explore":"Esplora", + "Show Swagger Petstore Example Apis":"Mostra le api di esempio di Swagger Petstore", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Non è possibile leggere dal server. Potrebbe non avere le impostazioni di controllo accesso origine (access-control-origin) appropriate.", + "Please specify the protocol for":"Si prega di specificare il protocollo per", + "Can't read swagger JSON from":"Impossibile leggere JSON swagger da:", + "Finished Loading Resource Information. Rendering Swagger UI":"Lettura informazioni risorse termianta. Swagger UI viene mostrata", + "Unable to read api":"Impossibile leggere la api", + "from path":"da cartella", + "server returned":"il server ha restituito" +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/ja.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/ja.js new file mode 100644 index 00000000000..1cbeb374ac1 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/ja.js @@ -0,0 +1,56 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"警告: 廃止予定", + "Implementation Notes":"実装メモ", + "Response Class":"レスポンスクラス", + "Status":"ステータス", + "Parameters":"パラメータ群", + "Parameter":"パラメータ", + "Value":"値", + "Description":"説明", + "Parameter Type":"パラメータタイプ", + "Data Type":"データタイプ", + "Response Messages":"レスポンスメッセージ", + "HTTP Status Code":"HTTPステータスコード", + "Reason":"理由", + "Response Model":"レスポンスモデル", + "Request URL":"リクエストURL", + "Response Body":"レスポンスボディ", + "Response Code":"レスポンスコード", + "Response Headers":"レスポンスヘッダ", + "Hide Response":"レスポンスを隠す", + "Headers":"ヘッダ", + "Try it out!":"実際に実行!", + "Show/Hide":"表示/非表示", + "List Operations":"操作一覧", + "Expand Operations":"操作の展開", + "Raw":"未加工", + "can't parse JSON. Raw result":"JSONへ解釈できません. 未加工の結果", + "Example Value":"値の例", + "Model Schema":"モデルスキーマ", + "Model":"モデル", + "Click to set as parameter value":"パラメータ値と設定するにはクリック", + "apply":"実行", + "Username":"ユーザ名", + "Password":"パスワード", + "Terms of service":"サービス利用規約", + "Created by":"Created by", + "See more at":"詳細を見る", + "Contact the developer":"開発者に連絡", + "api version":"APIバージョン", + "Response Content Type":"レスポンス コンテンツタイプ", + "Parameter content type:":"パラメータコンテンツタイプ:", + "fetching resource":"リソースの取得", + "fetching resource list":"リソース一覧の取得", + "Explore":"調査", + "Show Swagger Petstore Example Apis":"SwaggerペットストアAPIの表示", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"サーバから読み込めません. 適切なaccess-control-origin設定を持っていない可能性があります.", + "Please specify the protocol for":"プロトコルを指定してください", + "Can't read swagger JSON from":"次からswagger JSONを読み込めません", + "Finished Loading Resource Information. Rendering Swagger UI":"リソース情報の読み込みが完了しました. Swagger UIを描画しています", + "Unable to read api":"APIを読み込めません", + "from path":"次のパスから", + "server returned":"サーバからの返答" +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/ko-kr.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/ko-kr.js new file mode 100644 index 00000000000..03c7626d7f9 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/ko-kr.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"경고:폐기예정됨", + "Implementation Notes":"구현 노트", + "Response Class":"응답 클래스", + "Status":"상태", + "Parameters":"매개변수들", + "Parameter":"매개변수", + "Value":"값", + "Description":"설명", + "Parameter Type":"매개변수 타입", + "Data Type":"데이터 타입", + "Response Messages":"응답 메세지", + "HTTP Status Code":"HTTP 상태 코드", + "Reason":"원인", + "Response Model":"응답 모델", + "Request URL":"요청 URL", + "Response Body":"응답 본문", + "Response Code":"응답 코드", + "Response Headers":"응답 헤더", + "Hide Response":"응답 숨기기", + "Headers":"헤더", + "Try it out!":"써보기!", + "Show/Hide":"보이기/숨기기", + "List Operations":"목록 작업", + "Expand Operations":"전개 작업", + "Raw":"원본", + "can't parse JSON. Raw result":"JSON을 파싱할수 없음. 원본결과:", + "Model Schema":"모델 스키마", + "Model":"모델", + "apply":"적용", + "Username":"사용자 이름", + "Password":"암호", + "Terms of service":"이용약관", + "Created by":"작성자", + "See more at":"추가정보:", + "Contact the developer":"개발자에게 문의", + "api version":"api버전", + "Response Content Type":"응답Content Type", + "fetching resource":"리소스 가져오기", + "fetching resource list":"리소스 목록 가져오기", + "Explore":"탐색", + "Show Swagger Petstore Example Apis":"Swagger Petstore 예제 보기", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"서버로부터 읽어들일수 없습니다. access-control-origin 설정이 올바르지 않을수 있습니다.", + "Please specify the protocol for":"다음을 위한 프로토콜을 정하세요", + "Can't read swagger JSON from":"swagger JSON 을 다음으로 부터 읽을수 없습니다", + "Finished Loading Resource Information. Rendering Swagger UI":"리소스 정보 불러오기 완료. Swagger UI 랜더링", + "Unable to read api":"api를 읽을 수 없습니다.", + "from path":"다음 경로로 부터", + "server returned":"서버 응답함." +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/pl.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/pl.js new file mode 100644 index 00000000000..ce41e91799d --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/pl.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Uwaga: Wycofane", + "Implementation Notes":"Uwagi Implementacji", + "Response Class":"Klasa Odpowiedzi", + "Status":"Status", + "Parameters":"Parametry", + "Parameter":"Parametr", + "Value":"Wartość", + "Description":"Opis", + "Parameter Type":"Typ Parametru", + "Data Type":"Typ Danych", + "Response Messages":"Wiadomości Odpowiedzi", + "HTTP Status Code":"Kod Statusu HTTP", + "Reason":"Przyczyna", + "Response Model":"Model Odpowiedzi", + "Request URL":"URL Wywołania", + "Response Body":"Treść Odpowiedzi", + "Response Code":"Kod Odpowiedzi", + "Response Headers":"Nagłówki Odpowiedzi", + "Hide Response":"Ukryj Odpowiedź", + "Headers":"Nagłówki", + "Try it out!":"Wypróbuj!", + "Show/Hide":"Pokaż/Ukryj", + "List Operations":"Lista Operacji", + "Expand Operations":"Rozwiń Operacje", + "Raw":"Nieprzetworzone", + "can't parse JSON. Raw result":"nie można przetworzyć pliku JSON. Nieprzetworzone dane", + "Model Schema":"Schemat Modelu", + "Model":"Model", + "apply":"użyj", + "Username":"Nazwa użytkownika", + "Password":"Hasło", + "Terms of service":"Warunki używania", + "Created by":"Utworzone przez", + "See more at":"Zobacz więcej na", + "Contact the developer":"Kontakt z deweloperem", + "api version":"wersja api", + "Response Content Type":"Typ Zasobu Odpowiedzi", + "fetching resource":"ładowanie zasobu", + "fetching resource list":"ładowanie listy zasobów", + "Explore":"Eksploruj", + "Show Swagger Petstore Example Apis":"Pokaż Przykładowe Api Swagger Petstore", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Brak połączenia z serwerem. Może on nie mieć odpowiednich ustawień access-control-origin.", + "Please specify the protocol for":"Proszę podać protokół dla", + "Can't read swagger JSON from":"Nie można odczytać swagger JSON z", + "Finished Loading Resource Information. Rendering Swagger UI":"Ukończono Ładowanie Informacji o Zasobie. Renderowanie Swagger UI", + "Unable to read api":"Nie można odczytać api", + "from path":"ze ścieżki", + "server returned":"serwer zwrócił" +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/pt.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/pt.js new file mode 100644 index 00000000000..f2e7c13d413 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/pt.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Aviso: Depreciado", + "Implementation Notes":"Notas de Implementação", + "Response Class":"Classe de resposta", + "Status":"Status", + "Parameters":"Parâmetros", + "Parameter":"Parâmetro", + "Value":"Valor", + "Description":"Descrição", + "Parameter Type":"Tipo de parâmetro", + "Data Type":"Tipo de dados", + "Response Messages":"Mensagens de resposta", + "HTTP Status Code":"Código de status HTTP", + "Reason":"Razão", + "Response Model":"Modelo resposta", + "Request URL":"URL requisição", + "Response Body":"Corpo da resposta", + "Response Code":"Código da resposta", + "Response Headers":"Cabeçalho da resposta", + "Headers":"Cabeçalhos", + "Hide Response":"Esconder resposta", + "Try it out!":"Tente agora!", + "Show/Hide":"Mostrar/Esconder", + "List Operations":"Listar operações", + "Expand Operations":"Expandir operações", + "Raw":"Cru", + "can't parse JSON. Raw result":"Falha ao analisar JSON. Resulto cru", + "Model Schema":"Modelo esquema", + "Model":"Modelo", + "apply":"Aplicar", + "Username":"Usuário", + "Password":"Senha", + "Terms of service":"Termos do serviço", + "Created by":"Criado por", + "See more at":"Veja mais em", + "Contact the developer":"Contate o desenvolvedor", + "api version":"Versão api", + "Response Content Type":"Tipo de conteúdo da resposta", + "fetching resource":"busca recurso", + "fetching resource list":"buscando lista de recursos", + "Explore":"Explorar", + "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Não é possível ler do servidor. Pode não ter as apropriadas configurações access-control-origin", + "Please specify the protocol for":"Por favor especifique o protocolo", + "Can't read swagger JSON from":"Não é possível ler o JSON Swagger de", + "Finished Loading Resource Information. Rendering Swagger UI":"Carregar informação de recurso finalizada. Renderizando Swagger UI", + "Unable to read api":"Não foi possível ler api", + "from path":"do caminho", + "server returned":"servidor retornou" +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/ru.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/ru.js new file mode 100644 index 00000000000..592744e957f --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/ru.js @@ -0,0 +1,56 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Предупреждение: Устарело", + "Implementation Notes":"Заметки", + "Response Class":"Пример ответа", + "Status":"Статус", + "Parameters":"Параметры", + "Parameter":"Параметр", + "Value":"Значение", + "Description":"Описание", + "Parameter Type":"Тип параметра", + "Data Type":"Тип данных", + "HTTP Status Code":"HTTP код", + "Reason":"Причина", + "Response Model":"Структура ответа", + "Request URL":"URL запроса", + "Response Body":"Тело ответа", + "Response Code":"HTTP код ответа", + "Response Headers":"Заголовки ответа", + "Hide Response":"Спрятать ответ", + "Headers":"Заголовки", + "Response Messages":"Что может прийти в ответ", + "Try it out!":"Попробовать!", + "Show/Hide":"Показать/Скрыть", + "List Operations":"Операции кратко", + "Expand Operations":"Операции подробно", + "Raw":"В сыром виде", + "can't parse JSON. Raw result":"Не удается распарсить ответ:", + "Example Value":"Пример", + "Model Schema":"Структура", + "Model":"Описание", + "Click to set as parameter value":"Нажмите, чтобы испльзовать в качестве значения параметра", + "apply":"применить", + "Username":"Имя пользователя", + "Password":"Пароль", + "Terms of service":"Условия использования", + "Created by":"Разработано", + "See more at":"Еще тут", + "Contact the developer":"Связаться с разработчиком", + "api version":"Версия API", + "Response Content Type":"Content Type ответа", + "Parameter content type:":"Content Type параметра:", + "fetching resource":"Получение ресурса", + "fetching resource list":"Получение ресурсов", + "Explore":"Показать", + "Show Swagger Petstore Example Apis":"Показать примеры АПИ", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Не удается получить ответ от сервера. Возможно, проблема с настройками доступа", + "Please specify the protocol for":"Пожалуйста, укажите протокол для", + "Can't read swagger JSON from":"Не получается прочитать swagger json из", + "Finished Loading Resource Information. Rendering Swagger UI":"Загрузка информации о ресурсах завершена. Рендерим", + "Unable to read api":"Не удалось прочитать api", + "from path":"по адресу", + "server returned":"сервер сказал" +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/tr.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/tr.js new file mode 100644 index 00000000000..16426a9c34b --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/tr.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Uyarı: Deprecated", + "Implementation Notes":"Gerçekleştirim Notları", + "Response Class":"Dönen Sınıf", + "Status":"Statü", + "Parameters":"Parametreler", + "Parameter":"Parametre", + "Value":"Değer", + "Description":"Açıklama", + "Parameter Type":"Parametre Tipi", + "Data Type":"Veri Tipi", + "Response Messages":"Dönüş Mesajı", + "HTTP Status Code":"HTTP Statü Kodu", + "Reason":"Gerekçe", + "Response Model":"Dönüş Modeli", + "Request URL":"İstek URL", + "Response Body":"Dönüş İçeriği", + "Response Code":"Dönüş Kodu", + "Response Headers":"Dönüş Üst Bilgileri", + "Hide Response":"Dönüşü Gizle", + "Headers":"Üst Bilgiler", + "Try it out!":"Dene!", + "Show/Hide":"Göster/Gizle", + "List Operations":"Operasyonları Listele", + "Expand Operations":"Operasyonları Aç", + "Raw":"Ham", + "can't parse JSON. Raw result":"JSON çözümlenemiyor. Ham sonuç", + "Model Schema":"Model Şema", + "Model":"Model", + "apply":"uygula", + "Username":"Kullanıcı Adı", + "Password":"Parola", + "Terms of service":"Servis şartları", + "Created by":"Oluşturan", + "See more at":"Daha fazlası için", + "Contact the developer":"Geliştirici ile İletişime Geçin", + "api version":"api versiyon", + "Response Content Type":"Dönüş İçerik Tipi", + "fetching resource":"kaynak getiriliyor", + "fetching resource list":"kaynak listesi getiriliyor", + "Explore":"Keşfet", + "Show Swagger Petstore Example Apis":"Swagger Petstore Örnek Api'yi Gör", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Sunucudan okuma yapılamıyor. Sunucu access-control-origin ayarlarınızı kontrol edin.", + "Please specify the protocol for":"Lütfen istenen adres için protokol belirtiniz", + "Can't read swagger JSON from":"Swagger JSON bu kaynaktan okunamıyor", + "Finished Loading Resource Information. Rendering Swagger UI":"Kaynak baglantısı tamamlandı. Swagger UI gösterime hazırlanıyor", + "Unable to read api":"api okunamadı", + "from path":"yoldan", + "server returned":"sunucuya dönüldü" +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/translator.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/translator.js new file mode 100644 index 00000000000..ffb879f9a27 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/translator.js @@ -0,0 +1,39 @@ +'use strict'; + +/** + * Translator for documentation pages. + * + * To enable translation you should include one of language-files in your index.html + * after . + * For example - + * + * If you wish to translate some new texts you should do two things: + * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. + * 2. Mark that text it templates this way New Phrase or . + * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. + * + */ +window.SwaggerTranslator = { + + _words:[], + + translate: function(sel) { + var $this = this; + sel = sel || '[data-sw-translate]'; + + $(sel).each(function() { + $(this).html($this._tryTranslate($(this).html())); + + $(this).val($this._tryTranslate($(this).val())); + $(this).attr('title', $this._tryTranslate($(this).attr('title'))); + }); + }, + + _tryTranslate: function(word) { + return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word; + }, + + learn: function(wordsMap) { + this._words = wordsMap; + } +}; diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lang/zh-cn.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/zh-cn.js new file mode 100644 index 00000000000..3af61ad6e4c --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lang/zh-cn.js @@ -0,0 +1,56 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"警告:已过时", + "Implementation Notes":"实现备注", + "Response Class":"响应类", + "Status":"状态", + "Parameters":"参数", + "Parameter":"参数", + "Value":"值", + "Description":"描述", + "Parameter Type":"参数类型", + "Data Type":"数据类型", + "Response Messages":"响应消息", + "HTTP Status Code":"HTTP状态码", + "Reason":"原因", + "Response Model":"响应模型", + "Request URL":"请求URL", + "Response Body":"响应体", + "Response Code":"响应码", + "Response Headers":"响应头", + "Hide Response":"隐藏响应", + "Headers":"头", + "Try it out!":"试一下!", + "Show/Hide":"显示/隐藏", + "List Operations":"显示操作", + "Expand Operations":"展开操作", + "Raw":"原始", + "can't parse JSON. Raw result":"无法解析JSON. 原始结果", + "Example Value":"示例", + "Click to set as parameter value":"点击设置参数", + "Model Schema":"模型架构", + "Model":"模型", + "apply":"应用", + "Username":"用户名", + "Password":"密码", + "Terms of service":"服务条款", + "Created by":"创建者", + "See more at":"查看更多:", + "Contact the developer":"联系开发者", + "api version":"api版本", + "Response Content Type":"响应Content Type", + "Parameter content type:":"参数类型:", + "fetching resource":"正在获取资源", + "fetching resource list":"正在获取资源列表", + "Explore":"浏览", + "Show Swagger Petstore Example Apis":"显示 Swagger Petstore 示例 Apis", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"无法从服务器读取。可能没有正确设置access-control-origin。", + "Please specify the protocol for":"请指定协议:", + "Can't read swagger JSON from":"无法读取swagger JSON于", + "Finished Loading Resource Information. Rendering Swagger UI":"已加载资源信息。正在渲染Swagger UI", + "Unable to read api":"无法读取api", + "from path":"从路径", + "server returned":"服务器返回" +}); diff --git a/src/ServiceStack.Api.OpenApi/swagger-ui/lib/backbone-min.js b/src/ServiceStack.Api.OpenApi/swagger-ui/lib/backbone-min.js new file mode 100644 index 00000000000..8eff02e9842 --- /dev/null +++ b/src/ServiceStack.Api.OpenApi/swagger-ui/lib/backbone-min.js @@ -0,0 +1 @@ +!function(t,e){if("function"==typeof define&&define.amd)define(["underscore","jquery","exports"],function(i,n,s){t.Backbone=e(t,s,i,n)});else if("undefined"!=typeof exports){var i=require("underscore");e(t,exports,i)}else t.Backbone=e(t,{},t._,t.jQuery||t.Zepto||t.ender||t.$)}(this,function(t,e,i,n){var s=t.Backbone,r=[],a=(r.push,r.slice);r.splice;e.VERSION="1.1.2",e.$=n,e.noConflict=function(){return t.Backbone=s,this},e.emulateHTTP=!1,e.emulateJSON=!1;var o=e.Events={on:function(t,e,i){if(!c(this,"on",t,[e,i])||!e)return this;this._events||(this._events={});var n=this._events[t]||(this._events[t]=[]);return n.push({callback:e,context:i,ctx:i||this}),this},once:function(t,e,n){if(!c(this,"once",t,[e,n])||!e)return this;var s=this,r=i.once(function(){s.off(t,r),e.apply(this,arguments)});return r._callback=e,this.on(t,r,n)},off:function(t,e,n){var s,r,a,o,h,u,l,d;if(!this._events||!c(this,"off",t,[e,n]))return this;if(!t&&!e&&!n)return this._events=void 0,this;for(o=t?[t]:i.keys(this._events),h=0,u=o.length;h").attr(t);this.setElement(n,!1)}}}),e.sync=function(t,n,s){var r=E[t];i.defaults(s||(s={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var a={type:r,dataType:"json"};if(s.url||(a.url=i.result(n,"url")||j()),null!=s.data||!n||"create"!==t&&"update"!==t&&"patch"!==t||(a.contentType="application/json",a.data=JSON.stringify(s.attrs||n.toJSON(s))),s.emulateJSON&&(a.contentType="application/x-www-form-urlencoded",a.data=a.data?{model:a.data}:{}),s.emulateHTTP&&("PUT"===r||"DELETE"===r||"PATCH"===r)){a.type="POST",s.emulateJSON&&(a.data._method=r);var o=s.beforeSend;s.beforeSend=function(t){if(t.setRequestHeader("X-HTTP-Method-Override",r),o)return o.apply(this,arguments)}}"GET"===a.type||s.emulateJSON||(a.processData=!1),"PATCH"===a.type&&x&&(a.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")});var h=s.xhr=e.ajax(i.extend(a,s));return n.trigger("request",n,h,s),h};var x=!("undefined"==typeof window||!window.ActiveXObject||window.XMLHttpRequest&&(new XMLHttpRequest).dispatchEvent),E={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var k=e.Router=function(t){t||(t={}),t.routes&&(this.routes=t.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},T=/\((.*?)\)/g,$=/(\(\?)?:\w+/g,S=/\*\w+/g,H=/[\-{}\[\]+?.,\\\^$|#\s]/g;i.extend(k.prototype,o,{initialize:function(){},route:function(t,n,s){i.isRegExp(t)||(t=this._routeToRegExp(t)),i.isFunction(n)&&(s=n,n=""),s||(s=this[n]);var r=this;return e.history.route(t,function(i){var a=r._extractParameters(t,i);r.execute(s,a),r.trigger.apply(r,["route:"+n].concat(a)),r.trigger("route",n,a),e.history.trigger("route",r,n,a)}),this},execute:function(t,e){t&&t.apply(this,e)},navigate:function(t,i){return e.history.navigate(t,i),this},_bindRoutes:function(){if(this.routes){this.routes=i.result(this,"routes");for(var t,e=i.keys(this.routes);null!=(t=e.pop());)this.route(t,this.routes[t])}},_routeToRegExp:function(t){return t=t.replace(H,"\\$&").replace(T,"(?:$1)?").replace($,function(t,e){return e?t:"([^/?]+)"}).replace(S,"([^?]*?)"),new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var n=t.exec(e).slice(1);return i.map(n,function(t,e){return e===n.length-1?t||null:t?decodeURIComponent(t):null})}});var A=e.History=function(){this.handlers=[],i.bindAll(this,"checkUrl"),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)},I=/^[#\/]|\s+$/g,N=/^\/+|\/+$/g,R=/msie [\w.]+/,O=/\/$/,P=/#.*$/;A.started=!1,i.extend(A.prototype,o,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getFragment:function(t,e){if(null==t)if(this._hasPushState||!this._wantsHashChange||e){t=decodeURI(this.location.pathname+this.location.search);var i=this.root.replace(O,"");t.indexOf(i)||(t=t.slice(i.length))}else t=this.getHash();return t.replace(I,"")},start:function(t){if(A.started)throw new Error("Backbone.history has already been started");A.started=!0,this.options=i.extend({root:"/"},this.options,t),this.root=this.options.root,this._wantsHashChange=this.options.hashChange!==!1,this._wantsPushState=!!this.options.pushState,this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var n=this.getFragment(),s=document.documentMode,r=R.exec(navigator.userAgent.toLowerCase())&&(!s||s<=7);if(this.root=("/"+this.root+"/").replace(N,"/"),r&&this._wantsHashChange){var a=e.$('', + generic: '' + }; + + $(document).bindHandlers({ + announce: function (msg) { + $("#announce").html(msg).fadeIn('fast'); + setTimeout(function () { $("#announce").fadeOut('slow'); }, 2000); + }, + toggle: function () { + $(this).toggle(); + }, + sendCommand: function () { + $("#txtMsg").val($(this).html()).focus(); + }, + privateMsg: function () { + $txtMsg.val("@@" + this.innerHTML + " ").focus(); + }, + removeReceiver: function (name) { + delete $.ss.eventReceivers[name]; + }, + addReceiver: function (name) { + $.ss.eventReceivers[name] = window[name]; + }, + toggleExamples: function () { + var willHide = this.innerHTML == "hide"; + $(this).html(willHide ? "show" : "hide").parent().css({ height: willHide ? '25px' : 'auto' }); + }, + changeChannel: function (channel) { + $("[data-channel]").removeClass('selected'); + $("[data-channel=" + channel + "]").addClass('selected'); + $("#txtMsg").focus(); + }, + startListening: function() { $.ss.reconnectServerEvents(); } + }).on('customEvent', function (e, msg, msgEvent) { + addEntry({ msg: "[event " + e.type + " message: " + msg + "]", cls: "event", channel: msgEvent.channel }); + }); + $.ss.handlers["changeChannel"](channels[channels.length-1]); + + function addEntry(o) { + console.log("addEntry", o); + var id = "u_" + o.userId + ""; + var skipUser = $("#log .msg:last-child b").hasClass(id); + var inactive = $(createUser($.extend(o, { displayName: o.userName }))).html(); + var user = o.userId && !skipUser ? "" + ($("#users ." + id).html() || inactive) + "" : " "; + var time = "" + $.ss.tfmt12(new Date()) + ""; + var highlight = o.msg.indexOf(activeSub.displayName.replace(" ", "")) >= 0 ? "highlight " : ""; + var filter = o.channel ? "=" + o.channel : ""; + $("#logs [data-channel" + filter + "]").append("
      " + + user + time + "
      " + o.msg + "
      " + "
      ").scrollTop(1E10); + } + function createUser(user) { + return "
      " + user.displayName + "
      "; + } + + var msgHistory = [], historyIndex = -1; + function postMsg() { + var msg = $txtMsg.val(), parts, to = null; + msgHistory.push(msg); + + if (msg[0] == "@@") { + parts = $.ss.splitOnFirst(msg, " "); + var toName = parts[0].substring(1); + if (toName == "me") { + to = activeSub.userId; + } else { + var matches = $.grep($("#users .user span"), + function (x) { return x.innerHTML.replace(" ", "").toLowerCase() === toName.toLowerCase(); }); + to = matches.length > 0 ? matches[0].getAttribute("data-id") : null; + } + msg = parts[1]; + } + if (!msg || !activeSub) return; + var onError = function (e) { + if (e.responseJSON && e.responseJSON.responseStatus) + $.ss.handlers["announce"](e.responseJSON.responseStatus.message); + }; + var channel = selectedChannel(); + if (msg[0] == "/") { + parts = $.ss.splitOnFirst(msg, " "); + $.post("/channels/" + channel + "/raw", { from: activeSub.id, toUserId: to, message: parts[1], selector: parts[0].substring(1) }, function () { }).fail(onError); + } else { + $.post("/channels/" + channel + "/chat", { from: activeSub.id, toUserId: to, message: msg, selector: "cmd.chat" }, function () { }).fail(onError); + } + $txtMsg.val(""); + } + $("#btnSend").click(postMsg); + + $txtMsg.keydown(function (e) { + var keycode = (e.keyCode ? e.keyCode : e.which); + if ($.ss.getSelection()) { + if (keycode == '9' || keycode == '13' || keycode == '32' || keycode == '39') { + this.value += " "; + if (this.setSelectionRange) this.setSelectionRange(this.value.length, this.value.length); + return false; + } + } + if (keycode == '13') { //enter + postMsg(); + } else if (keycode == '38') { //up arrow + historyIndex = Math.min(++historyIndex, msgHistory.length); + $txtMsg.val(msgHistory[msgHistory.length - 1 - historyIndex]); + return false; + } + else if (keycode == '40') { //down arrow + historyIndex = Math.max(--historyIndex, -1); + $txtMsg.val(msgHistory[msgHistory.length - 1 - historyIndex]); + } else { + historyIndex = -1; + } + }).keyup(function (e) { + if (!$.ss.getSelection() && this.value[0] == '@@' && this.value.indexOf(' ') < 0) { + var partialVal = this.value.substring(1); + var matchingNames = $.grep($("#users .user span") + .map(function () { return this.innerHTML.replace(" ", ""); }), function (x) { + return x.substring(0, partialVal.length).toLowerCase() === partialVal.toLowerCase() + && x.toLowerCase() != activeSub.displayName.toLowerCase(); + }); + + if (matchingNames.length > 0) { + this.value += matchingNames[0].substring(partialVal.length); + if (this.setSelectionRange) this.setSelectionRange(partialVal.length + 1, this.value.length); + return false; + } + } + }); + + + + \ No newline at end of file diff --git a/tests/ChatSelfHost/wwwroot/default.css b/tests/ChatSelfHost/wwwroot/default.css new file mode 100644 index 00000000000..b7ff3a9e50d --- /dev/null +++ b/tests/ChatSelfHost/wwwroot/default.css @@ -0,0 +1,249 @@ +body { + font: 16px Arial; + overflow: hidden; + padding: 0; + margin: 0; + color: #444; + background: url(https://servicestack.net/img/slide/image01.jpg) no-repeat left center fixed; + background-size: cover; + -webkit-background-size: cover; +} +::-webkit-scrollbar { + width: 6px; +} +::-webkit-scrollbar-button { + width: 6px; + height: 0px; +} +::-webkit-scrollbar-track { + background: #e6e6e6; + border: thin solid lightgray; + border-top: none; + box-shadow: 0px 0px 3px #dfdfdf inset; +} +::-webkit-scrollbar-thumb { + background: #666; + border: thin solid gray; + border-top: none; +} +::-webkit-scrollbar-thumb:hover { + background:#7d7d7d; +} +#top { + z-index: 1; + position: fixed; + top: 0; + width: 100%; + height: 40px; + background: #212121; + opacity: .80; +} +ul { + padding: 0; + margin: 0; + position: absolute; + top: 10px; + left: 10px; + list-style: none; +} +li { + display: block; + float: left; + padding: 4px 30px; + text-align: center; + background: #fff; + font-size: 18px; + cursor: pointer; + margin: 0 5px 0 0; + opacity: .5; +} +a img { + border: none; +} +#channels li.selected { + opacity: .9; +} +li:hover { + opacity: .8; +} +#announce { + z-index: 3; + display: none; + position: absolute; + top: 40px; + line-height: 50px; + width: 100%; + background: #ffc; + text-align: center; + box-shadow: 0px 2px 3px rgba(100, 100, 100, 0.75); +} +#tv { + z-index: 2; + position: absolute; + display: none; + text-align: center; + width: 85%; + top: 40px; +} +#right { + z-index: 1; + position: absolute; + top: 40px; + right: 0; + width: 18%; + min-width: 200px; + height: 100%; + color: #666; + background: #fff; + opacity: .85; + border-left: 1px solid #212121; +} +#examples { + position: fixed; + bottom: 10px; + right: .5%; + width: 17%; + min-width: 190px; + font-size: 12px; + background: #fcfcfc; + overflow: hidden; +} +#examples h4 { + margin: 0; + padding: 5px 10px; + background: #f1f1f1; +} +#examples a { + color: #428bca; + text-decoration: none; + font-size: 13px; +} +#examples a:hover { + color: #2a6496; +} +#examples div { + white-space: nowrap; + overflow: hidden; + cursor: pointer; + padding: 0 5px; + line-height: 28px; +} +#examples div:hover { + background: #ffe; + color: #222; +} +#examples span { + color: #999; + cursor: pointer; +} +#logs { + position: fixed; + left: -2px; + bottom: 50px; + width: 82%; + max-height: 100%; + overflow-y: auto; +} +#logs .channel { + background: #fff; + opacity: .85; + display: none; +} +#logs .channel.selected { + display: block; +} +#users .channel { + display: none; +} +#users .channel.selected { + display: block; +} + +#bottom { + position: fixed; + bottom: 0; + height: 49px; + width: 82%; + background: #212121; + opacity: .80; +} +#bottom input { + font-size: 16px; + margin: 6px 0 0 6px; + padding: 4px 8px; + width: 77%; +} +#bottom button { + padding: 4px 8px; +} +.open div { + color: green; +} +.error div { + color: red; +} +.event div { + color: blue; +} +#social { + float: right; + padding: 5px; +} +#social a { + display: inline-block; + width: 77px; + height: 20px; + margin: 5px 5px 0 0; +} +.twitter { background: url(/img/twitter_normal.png) no-repeat; } +.facebook { background: url(/img/facebook_normal.png) no-repeat; } +.github { background: url(/img/github_normal.png) no-repeat; } +#welcome { + float: left; + margin: 0 5px 0 0; + color: #f1f1f1; +} +#welcome span { + line-height: 24px; +} +#welcome img { + height: 24px; + margin: 0 0 0 5px; + vertical-align: bottom; +} +.user img { + height: 24px; + margin: 2px 5px 0 5px; + vertical-align: bottom; +} +.user span { + cursor: pointer; +} +.private { + color: red; +} +.msg { + border-top: 1px solid #eee; +} +.msg b, .msg div, .msg i { + line-height: 30px; + height: 30px; + display: inline-block; + padding: 0 0 0 10px; + font-style: normal; + font-weight: normal; +} +.msg b { + width: 200px; + background: #fafafa; +} +.msg div { +} +.msg i { + color: #999; + float: right; + padding: 0 10px 0 0; +} +.msg.highlight { + background: #ffc; +} diff --git a/tests/ChatSelfHost/wwwroot/img/bg.jpg b/tests/ChatSelfHost/wwwroot/img/bg.jpg new file mode 100644 index 00000000000..ad28842d2c6 Binary files /dev/null and b/tests/ChatSelfHost/wwwroot/img/bg.jpg differ diff --git a/tests/ChatSelfHost/wwwroot/img/facebook_normal.png b/tests/ChatSelfHost/wwwroot/img/facebook_normal.png new file mode 100644 index 00000000000..b32d1948e58 Binary files /dev/null and b/tests/ChatSelfHost/wwwroot/img/facebook_normal.png differ diff --git a/tests/ChatSelfHost/wwwroot/img/favicon.png b/tests/ChatSelfHost/wwwroot/img/favicon.png new file mode 100644 index 00000000000..08e81b4cf92 Binary files /dev/null and b/tests/ChatSelfHost/wwwroot/img/favicon.png differ diff --git a/tests/ChatSelfHost/wwwroot/img/github_normal.png b/tests/ChatSelfHost/wwwroot/img/github_normal.png new file mode 100644 index 00000000000..68f69c869c6 Binary files /dev/null and b/tests/ChatSelfHost/wwwroot/img/github_normal.png differ diff --git a/tests/ChatSelfHost/wwwroot/img/no-profile64.png b/tests/ChatSelfHost/wwwroot/img/no-profile64.png new file mode 100644 index 00000000000..3cdf91c9957 Binary files /dev/null and b/tests/ChatSelfHost/wwwroot/img/no-profile64.png differ diff --git a/tests/ChatSelfHost/wwwroot/img/twitter_normal.png b/tests/ChatSelfHost/wwwroot/img/twitter_normal.png new file mode 100644 index 00000000000..82d9fbde087 Binary files /dev/null and b/tests/ChatSelfHost/wwwroot/img/twitter_normal.png differ diff --git a/tests/ChatSelfHost/wwwroot/jquery-2.1.1.min.js b/tests/ChatSelfHost/wwwroot/jquery-2.1.1.min.js new file mode 100644 index 00000000000..e5ace116b6f --- /dev/null +++ b/tests/ChatSelfHost/wwwroot/jquery-2.1.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
      ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b) +},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"
      ","
      "],col:[2,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n(" - - - diff --git a/tests/PclTest.SL5.Web/PclTest.SL5TestPage.html b/tests/PclTest.SL5.Web/PclTest.SL5TestPage.html deleted file mode 100644 index e4ab250c544..00000000000 --- a/tests/PclTest.SL5.Web/PclTest.SL5TestPage.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - PclTest.SL5 - - - - - -
      -
      - - - - - - - - Get Microsoft Silverlight - -
      -
      - - diff --git a/tests/PclTest.SL5.Web/Properties/AssemblyInfo.cs b/tests/PclTest.SL5.Web/Properties/AssemblyInfo.cs deleted file mode 100644 index b45b9c7446a..00000000000 --- a/tests/PclTest.SL5.Web/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("PclTest.SL5.Web")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("PclTest.SL5.Web")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("84e1fed0-ab76-4db7-9fc0-b3eb8b1f6568")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tests/PclTest.SL5.Web/Silverlight.js b/tests/PclTest.SL5.Web/Silverlight.js deleted file mode 100644 index 80ff39708f6..00000000000 --- a/tests/PclTest.SL5.Web/Silverlight.js +++ /dev/null @@ -1,2 +0,0 @@ -//v2.0.30511.0 -if(!window.Silverlight)window.Silverlight={};Silverlight._silverlightCount=0;Silverlight.__onSilverlightInstalledCalled=false;Silverlight.fwlinkRoot="http://go2.microsoft.com/fwlink/?LinkID=";Silverlight.__installationEventFired=false;Silverlight.onGetSilverlight=null;Silverlight.onSilverlightInstalled=function(){window.location.reload(false)};Silverlight.isInstalled=function(b){if(b==undefined)b=null;var a=false,m=null;try{var i=null,j=false;if(window.ActiveXObject)try{i=new ActiveXObject("AgControl.AgControl");if(b===null)a=true;else if(i.IsVersionSupported(b))a=true;i=null}catch(l){j=true}else j=true;if(j){var k=navigator.plugins["Silverlight Plug-In"];if(k)if(b===null)a=true;else{var h=k.description;if(h==="1.0.30226.2")h="2.0.30226.2";var c=h.split(".");while(c.length>3)c.pop();while(c.length<4)c.push(0);var e=b.split(".");while(e.length>4)e.pop();var d,g,f=0;do{d=parseInt(e[f]);g=parseInt(c[f]);f++}while(f");delete a.id;delete a.width;delete a.height;for(var c in a)if(a[c])b.push('');b.push("");return b.join("")};Silverlight.createObjectEx=function(b){var a=b,c=Silverlight.createObject(a.source,a.parentElement,a.id,a.properties,a.events,a.initParams,a.context);if(a.parentElement==null)return c};Silverlight.buildPromptHTML=function(b){var a="",d=Silverlight.fwlinkRoot,c=b.version;if(b.alt)a=b.alt;else{if(!c)c="";a="Get Microsoft Silverlight";a=a.replace("{1}",c);a=a.replace("{2}",d+"108181")}return a};Silverlight.getSilverlight=function(e){if(Silverlight.onGetSilverlight)Silverlight.onGetSilverlight();var b="",a=String(e).split(".");if(a.length>1){var c=parseInt(a[0]);if(isNaN(c)||c<2)b="1.0";else b=a[0]+"."+a[1]}var d="";if(b.match(/^\d+\056\d+$/))d="&v="+b;Silverlight.followFWLink("149156"+d)};Silverlight.followFWLink=function(a){top.location=Silverlight.fwlinkRoot+String(a)};Silverlight.HtmlAttributeEncode=function(c){var a,b="";if(c==null)return null;for(var d=0;d96&&a<123||a>64&&a<91||a>43&&a<58&&a!=47||a==95)b=b+String.fromCharCode(a);else b=b+"&#"+a+";"}return b};Silverlight.default_error_handler=function(e,b){var d,c=b.ErrorType;d=b.ErrorCode;var a="\nSilverlight error message \n";a+="ErrorCode: "+d+"\n";a+="ErrorType: "+c+" \n";a+="Message: "+b.ErrorMessage+" \n";if(c=="ParserError"){a+="XamlFile: "+b.xamlFile+" \n";a+="Line: "+b.lineNumber+" \n";a+="Position: "+b.charPosition+" \n"}else if(c=="RuntimeError"){if(b.lineNumber!=0){a+="Line: "+b.lineNumber+" \n";a+="Position: "+b.charPosition+" \n"}a+="MethodName: "+b.methodName+" \n"}alert(a)};Silverlight.__cleanup=function(){for(var a=Silverlight._silverlightCount-1;a>=0;a--)window["__slEvent"+a]=null;Silverlight._silverlightCount=0;if(window.removeEventListener)window.removeEventListener("unload",Silverlight.__cleanup,false);else window.detachEvent("onunload",Silverlight.__cleanup)};Silverlight.__getHandlerName=function(b){var a="";if(typeof b=="string")a=b;else if(typeof b=="function"){if(Silverlight._silverlightCount==0)if(window.addEventListener)window.addEventListener("onunload",Silverlight.__cleanup,false);else window.attachEvent("onunload",Silverlight.__cleanup);var c=Silverlight._silverlightCount++;a="__slEvent"+c;window[a]=b}else a=null;return a};Silverlight.onRequiredVersionAvailable=function(){};Silverlight.onRestartRequired=function(){};Silverlight.onUpgradeRequired=function(){};Silverlight.onInstallRequired=function(){};Silverlight.IsVersionAvailableOnError=function(d,a){var b=false;try{if(a.ErrorCode==8001&&!Silverlight.__installationEventFired){Silverlight.onUpgradeRequired();Silverlight.__installationEventFired=true}else if(a.ErrorCode==8002&&!Silverlight.__installationEventFired){Silverlight.onRestartRequired();Silverlight.__installationEventFired=true}else if(a.ErrorCode==5014||a.ErrorCode==2106){if(Silverlight.__verifySilverlight2UpgradeSuccess(a.getHost()))b=true}else b=true}catch(c){}return b};Silverlight.IsVersionAvailableOnLoad=function(b){var a=false;try{if(Silverlight.__verifySilverlight2UpgradeSuccess(b.getHost()))a=true}catch(c){}return a};Silverlight.__verifySilverlight2UpgradeSuccess=function(d){var c=false,b="2.0.31005",a=null;try{if(d.IsVersionSupported(b+".99")){a=Silverlight.onRequiredVersionAvailable;c=true}else if(d.IsVersionSupported(b+".0"))a=Silverlight.onRestartRequired;else a=Silverlight.onUpgradeRequired;if(a&&!Silverlight.__installationEventFired){a();Silverlight.__installationEventFired=true}}catch(e){}return c} \ No newline at end of file diff --git a/tests/PclTest.SL5.Web/Web.Debug.config b/tests/PclTest.SL5.Web/Web.Debug.config deleted file mode 100644 index 2e302f9f954..00000000000 --- a/tests/PclTest.SL5.Web/Web.Debug.config +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/tests/PclTest.SL5.Web/Web.Release.config b/tests/PclTest.SL5.Web/Web.Release.config deleted file mode 100644 index c35844462ba..00000000000 --- a/tests/PclTest.SL5.Web/Web.Release.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/tests/PclTest.SL5.Web/Web.config b/tests/PclTest.SL5.Web/Web.config deleted file mode 100644 index 83d659159a2..00000000000 --- a/tests/PclTest.SL5.Web/Web.config +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - diff --git a/tests/PclTest.SL5/App.xaml b/tests/PclTest.SL5/App.xaml deleted file mode 100644 index f93b18fa2a5..00000000000 --- a/tests/PclTest.SL5/App.xaml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/tests/PclTest.SL5/App.xaml.cs b/tests/PclTest.SL5/App.xaml.cs deleted file mode 100644 index 5e4a7b61d7a..00000000000 --- a/tests/PclTest.SL5/App.xaml.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Animation; -using System.Windows.Shapes; - -namespace PclTest.SL5 -{ - public partial class App : Application - { - - public App() - { - this.Startup += this.Application_Startup; - this.Exit += this.Application_Exit; - this.UnhandledException += this.Application_UnhandledException; - - InitializeComponent(); - } - - private void Application_Startup(object sender, StartupEventArgs e) - { - this.RootVisual = new MainPage(); - } - - private void Application_Exit(object sender, EventArgs e) - { - - } - - private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) - { - // If the app is running outside of the debugger then report the exception using - // the browser's exception mechanism. On IE this will display it a yellow alert - // icon in the status bar and Firefox will display a script error. - if (!System.Diagnostics.Debugger.IsAttached) - { - - // NOTE: This will allow the application to continue running after an exception has been thrown - // but not handled. - // For production applications this error handling should be replaced with something that will - // report the error to the website and stop the application. - e.Handled = true; - Deployment.Current.Dispatcher.BeginInvoke(delegate { ReportErrorToDOM(e); }); - } - } - - private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e) - { - try - { - string errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace; - errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n"); - - System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight Application " + errorMsg + "\");"); - } - catch (Exception) - { - } - } - } -} diff --git a/tests/PclTest.SL5/MainPage.xaml b/tests/PclTest.SL5/MainPage.xaml deleted file mode 100644 index cfc29cceed3..00000000000 --- a/tests/PclTest.SL5/MainPage.xaml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - + @@ -254,7 +255,12 @@

      /contacts/_layout.html

      {pageHtml}"; + + public static StringDictionary BundledJsFiles => new StringDictionary { + { "dir/js/default.js", "function fn(){ }" }, + { "dir/lib/js/a.js", "function a(){ }" }, + { "dir/lib/js/b.js", "function b(){ }" }, + { "dir/lib/js/c.js", "function c(){ }" }, + { "dir/contacts/_layout.html", "{{ ['/dir/lib/js','/dir/js/default.js'] | bundleJs({disk:false,out:'/dir/js/bundle.js'}) }}

      /contacts/_layout.html

      {{page}}" }, + { "dir/contacts/index.html", "

      /contacts/index.html

      " }, + { "dir/contacts/_id/edit.html", "

      /_id/edit.html {{id}}

      " }, + { "dir/contacts/edit/_id.html", "

      /edit/_id.html {{id}}

      " }, + }; + + public static StringDictionary BundledJsExpected => new StringDictionary { + { "dir/contacts/", BundledJsPageHtml("

      /contacts/index.html

      ") }, + { "dir/contacts/1/edit", BundledJsPageHtml("

      /_id/edit.html 1

      ") }, + { "dir/contacts/edit/1", BundledJsPageHtml("

      /edit/_id.html 1

      ") }, + }; + + public static string ExpectedBundleJs = "function a(){};\n\nfunction b(){};\n\nfunction c(){};\n\nfunction fn(){};"; + + [Test] + public void Can_get_Routing_Page_after_in_Memory_js_Bundle() + { + var fs = appHost.VirtualFileSources.GetFileSystemVirtualFiles(); + BundledJsFiles.ForEach(fs.WriteFile); + + foreach (var entry in BundledJsExpected) + { + entry.Key.Print(); + var html = Config.ListeningOn.CombineWith(entry.Key).GetStringFromUrl(accept: MimeTypes.Html); + Assert.That(html.NormalizeNewLines(), Is.EqualTo(entry.Value)); + } + + var memFs = appHost.VirtualFileSources.GetMemoryVirtualFiles(); + var bundleJs = memFs.GetFile("dir/js/bundle.js")?.ReadAllText(); + Assert.That(bundleJs, Is.Not.Null); + $"\nbundle.js:\n{bundleJs}".Print(); + Assert.That(bundleJs.NormalizeNewLines(), Is.EqualTo(ExpectedBundleJs)); + + bundleJs = Config.ListeningOn.CombineWith("/dir/js/bundle.js").GetStringFromUrl(); + Assert.That(bundleJs.NormalizeNewLines(), Is.EqualTo(ExpectedBundleJs)); + } + + public static string ExpectedOnDiskBundleJs = "function a(){ }\nfunction b(){ }\nfunction c(){ }\nfunction fn(){ }"; + + [Test] + public void Can_get_Routing_Page_after_on_disk_js_Bundle() + { + var fs = appHost.VirtualFileSources.GetFileSystemVirtualFiles(); + var files = BundledJsFiles; + files["dir/contacts/_layout.html"] = files["dir/contacts/_layout.html"] + .Replace("disk:false", "disk:true,minify:false"); + files.ForEach(fs.WriteFile); + + foreach (var entry in BundledJsExpected) + { + entry.Key.Print(); + var html = Config.ListeningOn.CombineWith(entry.Key).GetStringFromUrl(accept: MimeTypes.Html); + Assert.That(html.NormalizeNewLines(), Is.EqualTo(entry.Value)); + } + + var bundleJs = fs.GetFile("dir/js/bundle.js")?.ReadAllText(); + Assert.That(bundleJs, Is.Not.Null); + $"\nbundle.js:\n{bundleJs}".Print(); + Assert.That(bundleJs.NormalizeNewLines(), Is.EqualTo(ExpectedOnDiskBundleJs)); + + bundleJs = Config.ListeningOn.CombineWith("/dir/js/bundle.js").GetStringFromUrl(); + Assert.That(bundleJs.NormalizeNewLines(), Is.EqualTo(ExpectedOnDiskBundleJs)); + } + + static string BundledCssPageHtml(string pageHtml) => $"

      /contacts/_layout.html

      {pageHtml}"; + + public static StringDictionary BundledCssFiles => new StringDictionary { + { "dir/css/default.css", "body { }" }, + { "dir/lib/css/a.css", ".a { }" }, + { "dir/lib/css/b.css", ".b { }" }, + { "dir/lib/css/c.css", ".c { }" }, + { "dir/contacts/_layout.html", "{{ ['/dir/lib/css','/dir/css/default.css'] | bundleCss({disk:false,out:'/dir/css/bundle.css'}) }}

      /contacts/_layout.html

      {{page}}" }, + { "dir/contacts/index.html", "

      /contacts/index.html

      " }, + { "dir/contacts/_id/edit.html", "

      /_id/edit.html {{id}}

      " }, + { "dir/contacts/edit/_id.html", "

      /edit/_id.html {{id}}

      " }, + }; + + public static StringDictionary BundledCssExpected => new StringDictionary { + { "dir/contacts/", BundledCssPageHtml("

      /contacts/index.html

      ") }, + { "dir/contacts/1/edit", BundledCssPageHtml("

      /_id/edit.html 1

      ") }, + { "dir/contacts/edit/1", BundledCssPageHtml("

      /edit/_id.html 1

      ") }, + }; + + public static string ExpectedBundleCss = ".a{}\n.b{}\n.c{}\nbody{}"; + + [Test] + public void Can_get_Routing_Page_after_in_Memory_css_Bundle() + { + var fs = appHost.VirtualFileSources.GetFileSystemVirtualFiles(); + BundledCssFiles.ForEach(fs.WriteFile); + + foreach (var entry in BundledCssExpected) + { + entry.Key.Print(); + var html = Config.ListeningOn.CombineWith(entry.Key).GetStringFromUrl(accept: MimeTypes.Html); + Assert.That(html.NormalizeNewLines(), Is.EqualTo(entry.Value)); + } + + var memFs = appHost.VirtualFileSources.GetMemoryVirtualFiles(); + var bundleCss = memFs.GetFile("dir/css/bundle.css")?.ReadAllText(); + Assert.That(bundleCss, Is.Not.Null); + $"\nbundle.css:\n{bundleCss}".Print(); + Assert.That(bundleCss.NormalizeNewLines(), Is.EqualTo(ExpectedBundleCss)); + + bundleCss = Config.ListeningOn.CombineWith("/dir/css/bundle.css").GetStringFromUrl(); + Assert.That(bundleCss.NormalizeNewLines(), Is.EqualTo(ExpectedBundleCss)); + } + + public static string ExpectedOnDiskBundleCss = ".a { }\n.b { }\n.c { }\nbody { }"; + + [Test] + public void Can_get_Routing_Page_after_on_disk_css_Bundle() + { + var fs = appHost.VirtualFileSources.GetFileSystemVirtualFiles(); + var files = BundledCssFiles; + files["dir/contacts/_layout.html"] = files["dir/contacts/_layout.html"] + .Replace("disk:false", "disk:true,minify:false"); + files.ForEach(fs.WriteFile); + + foreach (var entry in BundledCssExpected) + { + entry.Key.Print(); + var html = Config.ListeningOn.CombineWith(entry.Key).GetStringFromUrl(accept: MimeTypes.Html); + Assert.That(html.NormalizeNewLines(), Is.EqualTo(entry.Value)); + } + + var bundleCss = fs.GetFile("dir/css/bundle.css")?.ReadAllText(); + Assert.That(bundleCss, Is.Not.Null); + $"\nbundle.js:\n{bundleCss}".Print(); + Assert.That(bundleCss.NormalizeNewLines(), Is.EqualTo(ExpectedOnDiskBundleCss)); + + bundleCss = Config.ListeningOn.CombineWith("/dir/css/bundle.css").GetStringFromUrl(); + Assert.That(bundleCss.NormalizeNewLines(), Is.EqualTo(ExpectedOnDiskBundleCss)); + } + + } +} \ No newline at end of file diff --git a/tests/ServiceStack.WebHost.Endpoints.Tests/RuntimeAttributeTests.cs b/tests/ServiceStack.WebHost.Endpoints.Tests/RuntimeAttributeTests.cs index 9020312b4aa..df6f103ee0f 100644 --- a/tests/ServiceStack.WebHost.Endpoints.Tests/RuntimeAttributeTests.cs +++ b/tests/ServiceStack.WebHost.Endpoints.Tests/RuntimeAttributeTests.cs @@ -1,11 +1,13 @@ -// Copyright (c) Service Stack LLC. All Rights Reserved. +// Copyright (c) ServiceStack, Inc. All Rights Reserved. // License: https://raw.github.com/ServiceStack/ServiceStack/master/license.txt using System; using Funq; using NUnit.Framework; +using ServiceStack.Api.Swagger; using ServiceStack.Auth; +using ServiceStack.DataAnnotations; using ServiceStack.Host; using ServiceStack.Web; @@ -37,7 +39,7 @@ public class RuntimeAttributeTests { private ServiceStackHost appHost; - [TestFixtureSetUp] + [OneTimeSetUp] public void OnTestFixtureSetUp() { appHost = new RuntimeAttributeAppHost() @@ -45,7 +47,7 @@ public void OnTestFixtureSetUp() .Start(Config.ListeningOn); } - [TestFixtureTearDown] + [OneTimeTearDown] public void OnTestFixtureTearDown() { appHost.Dispose(); @@ -54,9 +56,7 @@ public void OnTestFixtureTearDown() public class RuntimeAttributeAppHost : AppSelfHostBase { public RuntimeAttributeAppHost() - : base(typeof(RuntimeAttributeTests).Name, typeof(RuntimeAttributeAppHost).Assembly) {} - - public override void Configure(Container container) + : base(typeof(RuntimeAttributeTests).Name, typeof (RuntimeAttributeAppHost).Assembly) { typeof(RuntimeAttributes) .AddAttributes(new RuntimeAttributeRequestFilter()); @@ -65,6 +65,12 @@ public override void Configure(Container container) .AddAttributes(new RouteAttribute("/custom-register")) .AddAttributes(new RestrictAttribute(RequestAttributes.Json)); + typeof(SwaggerResource) + .AddAttributes(new ExcludeAttribute(Feature.Soap)); + } + + public override void Configure(Container container) + { this.RegisterService("/register"); Plugins.Add(new AuthFeature(() => new AuthUserSession(), @@ -77,8 +83,7 @@ public override void Configure(Container container) [Test] public void Does_add_CustomAttributes_to_when_added_in_AppHost_constructor() { - string contentType; - var restPath = RestHandler.FindMatchingRestPath("GET", "/custom-register", out contentType); + var restPath = RestHandler.FindMatchingRestPath("GET", "/custom-register", out _); Assert.That(restPath, Is.Not.Null); Assert.That(restPath.RequestType, Is.EqualTo(typeof(Register))); diff --git a/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/BAK_CompatTemplateTests.cs b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/BAK_CompatTemplateTests.cs new file mode 100644 index 00000000000..63004044caf --- /dev/null +++ b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/BAK_CompatTemplateTests.cs @@ -0,0 +1,773 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using NUnit.Framework; +using ServiceStack.Caching; +using ServiceStack.Configuration; +using ServiceStack.Data; +using ServiceStack.DataAnnotations; +using ServiceStack.IO; +using ServiceStack.OrmLite; +using ServiceStack.OrmLite.Sqlite; +using ServiceStack.Redis; +using ServiceStack.Script; +using ServiceStack.Templates; +using ServiceStack.Testing; +using ServiceStack.Text; + +namespace ServiceStack.WebHost.Endpoints.Tests.ScriptTests +{ + public class TemplateDbFiltersAsync : ScriptMethods + { + private IDbConnectionFactory dbFactory; + public IDbConnectionFactory DbFactory + { + get => dbFactory ?? (dbFactory = Context.Container.Resolve()); + set => dbFactory = value; + } + + public async Task OpenDbConnectionAsync(ScriptScopeContext scope, Dictionary options) + { + if (options != null) + { + if (options.TryGetValue("connectionString", out var connectionString)) + return options.TryGetValue("providerName", out var providerName) + ? await DbFactory.OpenDbConnectionStringAsync((string)connectionString, (string)providerName) + : await DbFactory.OpenDbConnectionStringAsync((string)connectionString); + + if (options.TryGetValue("namedConnection", out var namedConnection)) + return await DbFactory.OpenDbConnectionAsync((string)namedConnection); + } + + if (scope.PageResult != null && scope.PageResult.Args.TryGetValue("__dbinfo", out var oDbInfo) && oDbInfo is ConnectionInfo dbInfo) // Keywords.DbInfo + return await DbFactory.OpenDbConnectionAsync(dbInfo); + + return await DbFactory.OpenAsync(); + } + + async Task exec(Func> fn, ScriptScopeContext scope, object options) + { + try + { + using (var db = await OpenDbConnectionAsync(scope, options as Dictionary)) + { + var result = await fn(db); + return result; + } + } + catch (Exception ex) + { + throw new StopFilterExecutionException(scope, options, ex); + } + } + + public Task dbSelect(TemplateScopeContext scope, string sql) => + exec(db => db.SqlListAsync>(sql), scope, null); + + public Task dbSelect(TemplateScopeContext scope, string sql, Dictionary args) => + exec(db => db.SqlListAsync>(sql, args), scope, null); + + public Task dbSingle(TemplateScopeContext scope, string sql) => + exec(db => db.SingleAsync>(sql), scope, null); + + public Task dbSingle(TemplateScopeContext scope, string sql, Dictionary args) => + exec(db => db.SingleAsync>(sql, args), scope, null); + + public Task dbScalar(ScriptScopeContext scope, string sql) => + exec(db => db.ScalarAsync(sql), scope, null); + + public string sqlLimit(int? offset, int? limit) => padCondition(OrmLiteConfig.DialectProvider.SqlLimit(offset, limit)); + public string sqlLimit(int? limit) => padCondition(OrmLiteConfig.DialectProvider.SqlLimit(null, limit)); + private string padCondition(string text) => string.IsNullOrEmpty(text) ? "" : " " + text; + } + + public class TemplateRedisFilters : TemplateFilter + { + private IRedisClientsManager redisManager; + public IRedisClientsManager RedisManager + { + get => redisManager ?? (redisManager = Context.Container.Resolve()); + set => redisManager = value; + } + + T exec(Func fn, TemplateScopeContext scope, object options) + { + try + { + using (var redis = RedisManager.GetClient()) + { + return fn(redis); + } + } + catch (Exception ex) + { + throw new StopFilterExecutionException(scope, options, ex); + } + } + + public Dictionary redisConnection(TemplateScopeContext scope) => exec(r => new Dictionary + { + { "host", r.Host }, + { "port", r.Port }, + { "db", r.Db }, + }, scope, null); + } + + class Post + { + [AutoIncrement] + public int Id { get; set; } + public string Title { get; set; } + public string Content { get; set; } + public DateTime Created { get; set; } + public string CreatedBy { get; set; } + public DateTime Modified { get; set; } + public string ModifiedBy { get; set; } + } + + [TestFixture] + public class BAK_CompatTemplateTests + { + [Test] + public void BAK_Filters_evaluates_async_results() + { + OrmLiteConfig.BeforeExecFilter = cmd => cmd.GetDebugString().Print(); + + var context = new TemplateContext + { + TemplateFilters = { new TemplateDbFiltersAsync() }, + Args = { + ["objectCount"] = Task.FromResult((object)1) + } + }; + context.Container.AddSingleton(() => new OrmLiteConnectionFactory(":memory:", SqliteOrmLiteDialectProvider.Instance)); + context.Init(); + + using (var db = context.Container.Resolve().Open()) + { + db.DropAndCreateTable(); + db.Insert(new Post { Title = "The Title", Content = "The Content", Created = DateTime.Now, Modified = DateTime.Now }); + } + + context.VirtualFiles.WriteFile("objectCount.html", "{{ objectCount | assignTo: count }}{{ count }}"); + context.VirtualFiles.WriteFile("dbCount.html", "{{ dbScalar(`SELECT COUNT(*) FROM Post`) | assignTo: count }}{{ count }}"); + + Assert.That(new PageResult(context.GetPage("objectCount")).Result, Is.EqualTo("1")); + Assert.That(new PageResult(context.GetPage("dbCount")).Result, Is.EqualTo("1")); + + OrmLiteConfig.BeforeExecFilter = null; + } + + [Test] + public void BAK_Can_pass_filter_by_argument_to_partial() + { + var context = new TemplateContext + { + TemplateFilters = + { + new TemplateRedisFilters { RedisManager = new RedisManagerPool() }, + } + }.Init(); + + context.VirtualFiles.WriteFile("page-argument.html", "{{ 'partial-argument' | partial({ redis: redisConnection }) }}"); + context.VirtualFiles.WriteFile("partial-argument.html", "{{ redis.host }}, {{ redis.port }}"); + + var output = new PageResult(context.GetPage("page-argument")).Result; + + Assert.That(output, Is.EqualTo("localhost, 6379")); + } + + [Test] + public void BAK_Can_include_plugins_into_new_eval_context() + { + var context = new TemplateContext { + TemplateBlocks = { new EvalScriptBlock() }, + Plugins = { new MarkdownTemplatePlugin() }, + Args = { + ["evalContent"] = "{{#markdown}}# Heading{{/markdown}}", + } + }.Init(); + + Assert.Throws(() => + context.EvaluateTemplate("{{#eval}}{{evalContent}}{{/eval}}")); + Assert.Throws(() => + context.EvaluateTemplate("{{ evalContent | evalTemplate}}")); + + Assert.That(context.EvaluateTemplate("{{#eval {use:{plugins:'MarkdownTemplatePlugin'} }}{{evalContent}}{{/eval}}"), + Is.EqualTo("

      Heading

      \n")); + + Assert.That(context.EvaluateTemplate("{{ evalContent | evalTemplate({use:{plugins:'MarkdownTemplatePlugin'}}) | raw }}"), + Is.EqualTo("

      Heading

      \n")); + } + + [Test] + public void BAK_Can_include_filter_into_new_eval_context() + { + var context = new TemplateContext { + TemplateBlocks = { new EvalScriptBlock() }, + TemplateFilters = { new TemplateInfoFilters() }, + Args = { + ["evalContent"] = "{{envServerUserAgent}}", + } + }.Init(); + + Assert.That(context.EvaluateTemplate("{{#eval}}{{evalContent}}{{/eval}}"), + Does.Not.Contain("ServiceStack")); + Assert.That(context.EvaluateTemplate("{{ evalContent | evalTemplate}}"), + Does.Not.Contain("ServiceStack")); + + Assert.That(context.EvaluateTemplate("{{#eval {use:{filters:'TemplateInfoFilters'}}{{evalContent}}{{/eval}}"), + Does.Contain("ServiceStack")); + + Assert.That(context.EvaluateTemplate("{{ evalContent | evalTemplate({use:{filters:'TemplateInfoFilters'}}) }}"), + Does.Contain("ServiceStack")); + } + + [Test] + public void BAK_Installation() + { + var context = new TemplateContext().Init(); + var dynamicPage = context.OneTimePage("The time is now: {{ now | dateFormat('HH:mm:ss') }}"); + var output = new PageResult(dynamicPage).Result; + Assert.That(output, Does.StartWith("The time is now: ")); + + output = context.EvaluateTemplate("The time is now: {{ now | dateFormat('HH:mm:ss') }}"); + Assert.That(output, Does.StartWith("The time is now: ")); + } + + [Test] + public async Task BAK_Introduction() + { + var context = new TemplateContext().Init(); + var output = context.EvaluateTemplate("{{ 12.34 | currency }}"); + Assert.That(output, Is.EqualTo("$12.34")); + + context.VirtualFiles.WriteFile("_layout.html", "I am the Layout: {{ page }}"); + context.VirtualFiles.WriteFile("page.html", "I am the Page"); + var page = context.GetPage("page"); + output = await new PageResult(page).RenderToStringAsync(); + output = new PageResult(page).Result; + Assert.That(output, Is.EqualTo("I am the Layout: I am the Page")); + } + + [Test] + public void BAK_Arguments() + { + var context = new TemplateContext { + Args = { + ["arg"] = 1 + } + }.Init(); + + context.VirtualFiles.WriteFile("_layout.html", @" + +layout args: {{ arg }}, {{ arg2 }} +

      {{ page }}

      "); + + context.VirtualFiles.WriteFile("page.html", @" + +page arg: {{ arg }}"); + + var output = new PageResult(context.GetPage("page")).Result; + output.Print(); + + Assert.That(output.NormalizeNewLines(), Is.EqualTo(@"layout args: 3, 2 +

      page arg: 3

      ".NormalizeNewLines())); + + var result = new PageResult(context.GetPage("page")) { + Args = { + ["arg"] = 4 + } + }; + output = result.Result; + Assert.That(output.NormalizeNewLines(), Is.EqualTo(@"layout args: 4, 2 +

      page arg: 4

      ".NormalizeNewLines())); + } + + public class TemplateNoopBlock : TemplateBlock + { + public override string Name => "noop"; + + public override Task WriteAsync(TemplateScopeContext scope, PageBlockFragment block, CancellationToken ct) + => Task.CompletedTask; + } + + public class TemplateBoldBlock : TemplateBlock + { + public override string Name => "bold"; + + public override async Task WriteAsync( + TemplateScopeContext scope, PageBlockFragment block, CancellationToken token) + { + await scope.OutputStream.WriteAsync("", token); + await WriteBodyAsync(scope, block, token); + await scope.OutputStream.WriteAsync("", token); + } + } + + [Test] + public void BAK_Blocks() + { + var context = new TemplateContext { + TemplateBlocks = { new TemplateNoopBlock() }, + }.Init(); + + context = new TemplateContext + { + ScanTypes = { typeof(TemplateNoopBlock) } + }; + context.Container.AddSingleton(() => new MemoryCacheClient()); + context.Init(); + + context = new TemplateContext + { + ScanAssemblies = { typeof(TemplateNoopBlock).Assembly } + }.Init(); + + var output = context.EvaluateTemplate("BEFORE {{#noop}}BETWEEN{{/noop}} AFTER"); + Assert.That(output, Is.EqualTo("BEFORE AFTER")); + + context = new TemplateContext { + TemplateBlocks = { new TemplateBoldBlock() }, + }.Init(); + + output = context.EvaluateTemplate("{{#bold}}This text will be bold{{/bold}}"); + Assert.That(output, Is.EqualTo("This text will be bold")); + } + + class MyFilter : TemplateFilter + { + public string echo(string text) => $"{text} {text}"; + public double squared(double value) => value * value; + public string greetArg(string key) => $"Hello {Context.Args[key]}"; + + public ICacheClient Cache { get; set; } //injected dependency + public string fromCache(string key) => Cache.Get(key); + + public async Task includeFile(TemplateScopeContext scope, string virtualPath) + { + var file = scope.Context.VirtualFiles.GetFile(virtualPath); + if (file == null) + throw new FileNotFoundException($"includeFile '{virtualPath}' was not found"); + + using (var reader = file.OpenRead()) + { + await reader.CopyToAsync(scope.OutputStream); + } + } + } + + [Test] + public void BAK_Filters() + { + var context = new TemplateContext + { + Args = + { + ["contextArg"] = "foo" + }, + TemplateFilters = { new MyFilter() } + }.Init(); + + var output = context.EvaluateTemplate("

      {{ 'contextArg' | greetArg }}

      "); + Assert.That(output, Is.EqualTo("

      Hello foo

      ")); + + output = new PageResult(context.OneTimePage("

      {{ 'hello' | echo }}

      ")) + { + TemplateFilters = { new MyFilter() } + }.Result; + Assert.That(output, Is.EqualTo("

      hello hello

      ")); + + context = new TemplateContext + { + ScanTypes = { typeof(MyFilter) } + }; + context.Container.AddSingleton(() => new MemoryCacheClient()); + context.Container.Resolve().Set("key", "foo"); + context.Init(); + + output = context.EvaluateTemplate("

      {{ 'key' | fromCache }}

      "); + Assert.That(output, Is.EqualTo("

      foo

      ")); + + context = new TemplateContext + { + Plugins = { new MarkdownTemplatePlugin() }, + ScanAssemblies = { typeof(MyFilter).Assembly } + }.Init(); + context.VirtualFiles.WriteFile("doc.md", "# Hello"); + + output = context.EvaluateTemplate("{{ 'doc.md' | includeFile | markdown }}"); + Assert.That(output.Trim(), Is.EqualTo("

      Hello

      ")); + } + + [Test] + public void BAK_DefaultFilters() + { + var context = new TemplateContext { + Args = { + [TemplateConstants.DefaultDateFormat] = "yyyy-MM-dd HH:mm:ss" + } + }.Init(); + } + + [Test] + public void BAK_ServiceStackFilters() + { + using (new BasicAppHost().Init()) + { + var context = new TemplatePagesFeature + { + TemplateFilters = { new TemplateInfoFilters() } + }.Init(); + + var plugin = new TemplatePagesFeature { + MetadataDebugAdminRole = RoleNames.AllowAnon + }; + + plugin = new TemplatePagesFeature { + MetadataDebugAdminRole = RoleNames.AllowAnyUser, // Allow Authenticated Users + }; + } + } + + [Test] + public void BAK_DatabaseFilters() + { + var context = new TemplateContext { + TemplateFilters = { + new TemplateDbFiltersAsync() + } + }.Init(); + } + + [Test] + public void BAK_RedisFilters() + { + var context = new TemplateContext { + TemplateFilters = { + new TemplateRedisFilters() + } + }.Init(); + } + + [Test] + public void BAK_ErrorHandling() + { + var context = new TemplateContext { + SkipExecutingFiltersIfError = true + }; + + context = new TemplateContext { + RenderExpressionExceptions = true + }.Init(); + } + + public class MarkdownPageFormat : PageFormat + { + private static readonly MarkdownDeep.Markdown markdown = new MarkdownDeep.Markdown(); + + public MarkdownPageFormat() + { + Extension = "md"; + ContentType = MimeTypes.MarkdownText; + } + + public static async Task TransformToHtml(Stream markdownStream) + { + using (var reader = new StreamReader(markdownStream)) + { + var md = await reader.ReadToEndAsync(); + var html = markdown.Transform(md); + return MemoryStreamFactory.GetStream(html.ToUtf8Bytes()); + } + } + } + + [Test] + public async Task BAK_Transformers() + { + var context = new TemplateContext { + PageFormats = { new MarkdownPageFormat() } + }.Init(); + + context.VirtualFiles.WriteFile("_layout.md", @" +The Header + +{{ page }}"); + + context.VirtualFiles.WriteFile("page.md", @" +## {{ title }} + +The Content"); + + var result = new PageResult(context.GetPage("page")) + { + Args = { {"title", "The Title"} }, + ContentType = MimeTypes.Html, + OutputTransformers = { MarkdownPageFormat.TransformToHtml }, + }; + + var html = await result.RenderToStringAsync(); + Assert.That(html.NormalizeNewLines(), Is.EqualTo("

      The Header

      \n

      The Title

      \n

      The Content

      \n".NormalizeNewLines())); + + + context = new TemplateContext { + PageFormats = { new MarkdownPageFormat() } + }.Init(); + + context.VirtualFiles.WriteFile("_layout.html", @" + + {{ title }} + + + {{ page }} +"); + + context.VirtualFiles.WriteFile("page.md", @" +## Transformers + +The Content"); + + result = new PageResult(context.GetPage("page")) + { + Args = { {"title", "The Title"} }, + ContentType = MimeTypes.Html, + PageTransformers = { MarkdownPageFormat.TransformToHtml }, + }; + + html = await result.RenderToStringAsync(); + Assert.That(html.NormalizeNewLines(), Is.EqualTo(@" + The Title + + +

      Transformers

      +

      The Content

      + +".NormalizeNewLines())); + + + context = new TemplateContext + { + TemplateFilters = { new TemplateProtectedFilters() }, + FilterTransformers = + { + ["markdown"] = MarkdownPageFormat.TransformToHtml + } + }.Init(); + + context.VirtualFiles.WriteFile("doc.md", @"## The Heading + +The Content"); + + context.VirtualFiles.WriteFile("page.html", @" +
      + {{ 'doc.md' | includeFile | markdown }} +
      "); + + html = new PageResult(context.GetPage("page")).Result; + Assert.That(html.NormalizeNewLines(), Is.EqualTo(@"
      +

      The Heading

      +

      The Content

      + +
      ".NormalizeNewLines())); + } + + [Route("/BAK_customers/{Id}")] + public class ViewCustomer + { + public string Id { get; set; } + } + + public class CustomerServices : Service + { + public ITemplatePages Pages { get; set; } + + public object Any(ViewCustomer request) => + new PageResult(Pages.GetPage("examples/customer")) { + Model = QueryData.GetCustomer(request.Id) + }; + + public object Get(ViewCustomer request) => + new PageResult(Request.GetPage("examples/customer")) { + Model = QueryData.GetCustomer(request.Id) + }; + } + + [Test] + public void BAK_ModelViewController() + { + using (var appHost = new BasicAppHost { + ConfigureAppHost = host => { + host.Plugins.Add(new TemplatePagesFeature()); + host.Container.AddTransient(); + } + }.Init()) + { + var service = appHost.Container.Resolve(); + Assert.That(service.Pages, Is.Not.Null); + } + } + + [Page("BAK_products")] + [PageArg("title", "Products")] + public class ProductsPage : TemplateCodePage + { + string render(Product[] products) => $@" + + + + + + + + + {products.OrderBy(x => x.Category).ThenBy(x => x.ProductName).Map(x => $@" + + + + + ").Join("")} +
      CategoryNamePrice
      {x.Category}{x.ProductName.HtmlEncode()}{x.UnitPrice:C}
      "; + } + + [Route("/BAK_products/view")] + public class ViewProducts + { + public string Id { get; set; } + } + + public class ProductsServices : Service + { + public object Any(ViewProducts request) => + new PageResult(Request.GetCodePage("products")) { + Args = { + ["products"] = QueryData.Products + } + }; + } + + [Page("BAK_navLinks")] + public class NavLinksPartial : TemplateCodePage + { + string render(string PathInfo, Dictionary links) => $@" + "; + + string GetClass(string pathInfo, string url) => url == pathInfo ? "active" : ""; + } + + [Test] + public void BAK_CodePages() + { + } + + [Test] + public void BAK_Sandbox() + { + var context = new TemplateContext { + ExcludeFiltersNamed = { "partial", "selectPartial" } + }.Init(); + + context = new TemplateContext { + MaxQuota = 1000 + }.Init(); + } + + public class MarkdownTemplatePlugin : ITemplatePlugin + { + public bool RegisterPageFormat { get; set; } = true; + + public void Register(ScriptContext context) + { + if (RegisterPageFormat) + context.PageFormats.Add(new MarkdownPageFormat()); + + context.FilterTransformers["markdown"] = MarkdownPageFormat.TransformToHtml; + + context.ScriptMethods.Add(new MarkdownTemplateFilter()); + + context.ScriptBlocks.Add(new TemplateMarkdownBlock()); + } + } + + [Test] + public void BAK_APIReference() + { + ScriptContext context = new TemplateContext { + Plugins = { new MarkdownTemplatePlugin { RegisterPageFormat = false } } + }.Init(); + + context = new TemplateContext() + .RemovePlugins(x => x is DefaultScriptBlocks) // Remove default blocks + .RemovePlugins(x => x is HtmlScriptBlocks) // Remove all html blocks + .Init(); + + context = new TemplateContext { + OnAfterPlugins = ctx => ctx.RemoveBlocks(x => x.Name == "capture") + } + .Init(); + + context = new TemplateContext { + MaxQuota = 10000, + Args = { + [TemplateConstants.DefaultCulture] = CultureInfo.CurrentCulture, + [TemplateConstants.DefaultDateFormat] = "yyyy-MM-dd", + [TemplateConstants.DefaultDateTimeFormat] = "u", + [TemplateConstants.DefaultTimeFormat] = "h\\:mm\\:ss", + [TemplateConstants.DefaultFileCacheExpiry] = TimeSpan.FromMinutes(1), + [TemplateConstants.DefaultUrlCacheExpiry] = TimeSpan.FromMinutes(1), + [TemplateConstants.DefaultIndent] = "\t", + [TemplateConstants.DefaultNewLine] = Environment.NewLine, + [TemplateConstants.DefaultJsConfig] = "excludetypeinfo", + [TemplateConstants.DefaultStringComparison] = StringComparison.Ordinal, + [TemplateConstants.DefaultTableClassName] = "table", + [TemplateConstants.DefaultErrorClassName] = "alert alert-danger", + } + }.Init(); + + var page = context.EmptyPage; + new PageResult(page) { Layout = "custom-layout" }; + new PageResult(page) { + TemplateFilters = {new MyFilter()} + }; + new PageResult(page) { + ContentType = MimeTypes.Html, + OutputTransformers = {MarkdownPageFormat.TransformToHtml}, + }; + new PageResult(page) { + ContentType = MimeTypes.Html, + PageTransformers = {MarkdownPageFormat.TransformToHtml}, + }; + new PageResult(page) { + FilterTransformers = { + ["markdown"] = MarkdownPageFormat.TransformToHtml + } + }; + new PageResult(page) { + ExcludeFiltersNamed = {"partial", "selectPartial"} + }; + new PageResult(page) { + Options = { + [HttpHeaders.XPoweredBy] = "ServiceStack Templates" + } + }; + new PageResult(page) { + ContentType = "text/plain" + }; + } + + } +} \ No newline at end of file diff --git a/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/BinaryExpressionTests.cs b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/BinaryExpressionTests.cs new file mode 100644 index 00000000000..2483bf3d10f --- /dev/null +++ b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/BinaryExpressionTests.cs @@ -0,0 +1,351 @@ +using System.Collections.Generic; +using NUnit.Framework; +using ServiceStack.Script; + +namespace ServiceStack.WebHost.Endpoints.Tests.ScriptTests +{ + public class BinaryExpressionTests + { + [Test] + public void Does_parse_basic_binary_expressions() + { + JsToken expr; + + "1 + 2".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsBinaryExpression(new JsLiteral(1), JsAddition.Operator, new JsLiteral(2)))); + + "1 - 2".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsBinaryExpression(new JsLiteral(1), JsSubtraction.Operator, new JsLiteral(2)))); + + "1 * 2".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsBinaryExpression(new JsLiteral(1), JsMultiplication.Operator, new JsLiteral(2)))); + + "1 / 2".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsBinaryExpression(new JsLiteral(1), JsDivision.Operator, new JsLiteral(2)))); + + "1 & 2".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsBinaryExpression(new JsLiteral(1), JsBitwiseAnd.Operator, new JsLiteral(2)))); + + "1 | 2".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsBinaryExpression(new JsLiteral(1), JsBitwiseOr.Operator, new JsLiteral(2)))); + + "1 ^ 2".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsBinaryExpression(new JsLiteral(1), JsBitwiseXOr.Operator, new JsLiteral(2)))); + + "1 << 2".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsBinaryExpression(new JsLiteral(1), JsBitwiseLeftShift.Operator, new JsLiteral(2)))); + + "1 >> 2".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsBinaryExpression(new JsLiteral(1), JsBitwiseRightShift.Operator, new JsLiteral(2)))); + } + + [Test] + public void Does_parse_composite_binary_expressions() + { + JsToken expr; + + "1 + 2 + 3".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo( + new JsBinaryExpression( + new JsBinaryExpression(new JsLiteral(1), JsAddition.Operator, new JsLiteral(2)), + JsAddition.Operator, + new JsLiteral(3) + ) + )); + + "1 + 2 + 3 + 4".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo( + new JsBinaryExpression( + new JsBinaryExpression( + new JsBinaryExpression(new JsLiteral(1), JsAddition.Operator, new JsLiteral(2)), + JsAddition.Operator, + new JsLiteral(3)), + JsAddition.Operator, + new JsLiteral(4) + ) + )); + } + + [Test] + public void Does_parse_binary_expressions_with_precedence() + { + JsToken expr; + + "1 + 2 * 3".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo( + new JsBinaryExpression( + new JsLiteral(1), + JsAddition.Operator, + new JsBinaryExpression(new JsLiteral(2), JsMultiplication.Operator, new JsLiteral(3)) + ) + )); + + "1 + 2 * 3 - 4".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo( + new JsBinaryExpression( + new JsBinaryExpression( + new JsLiteral(1), + JsAddition.Operator, + new JsBinaryExpression(new JsLiteral(2), JsMultiplication.Operator, new JsLiteral(3))), + JsSubtraction.Operator, + new JsLiteral(4) + ) + )); + + "1 + 2 * 3 - 4 / 5".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo( + new JsBinaryExpression( + new JsBinaryExpression( + new JsLiteral(1), + JsAddition.Operator, + new JsBinaryExpression(new JsLiteral(2), JsMultiplication.Operator, new JsLiteral(3))), + JsSubtraction.Operator, + new JsBinaryExpression(new JsLiteral(4), JsDivision.Operator, new JsLiteral(5))) + ) + ); + } + + [Test] + public void Does_parse_binary_expression_with_brackets() + { + JsToken expr; + + "(1 + 2)".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo( + new JsBinaryExpression(new JsLiteral(1), JsAddition.Operator, new JsLiteral(2)) + )); + + "(1 + 2) * 3".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo( + new JsBinaryExpression( + new JsBinaryExpression(new JsLiteral(1), JsAddition.Operator, new JsLiteral(2)), + JsMultiplication.Operator, + new JsLiteral(3) + ) + )); + + "(1 + 2) * (3 - 4)".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo( + new JsBinaryExpression( + new JsBinaryExpression(new JsLiteral(1), JsAddition.Operator, new JsLiteral(2)), + JsMultiplication.Operator, + new JsBinaryExpression(new JsLiteral(3), JsSubtraction.Operator, new JsLiteral(4)) + ) + )); + + "(1 + 2) * ((3 - 4) / 5)".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo( + new JsBinaryExpression( + new JsBinaryExpression(new JsLiteral(1), JsAddition.Operator, new JsLiteral(2)), + JsMultiplication.Operator, + new JsBinaryExpression( + new JsBinaryExpression(new JsLiteral(3), JsSubtraction.Operator, new JsLiteral(4)), + JsDivision.Operator, + new JsLiteral(5) + ) + ) + )); + } + + [Test] + public void Does_parse_logical_expressions() + { + JsToken expr; + + "!(true || false)".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo( + new JsUnaryExpression( + JsNot.Operator, + new JsLogicalExpression(new JsLiteral(true), JsOr.Operator, new JsLiteral(false)) + ) + )); + } + + [Test] + public void Does_parse_binary_and_logical_expressions() + { + JsToken expr; + + "[1 + 2 * 3 > one && 1 * 2 < ten]".ParseJsExpression(out expr); + + Assert.That(expr, Is.EqualTo( + new JsArrayExpression( + new JsLogicalExpression( + new JsBinaryExpression( + new JsBinaryExpression( + new JsLiteral(1), + JsAddition.Operator, + new JsBinaryExpression( + new JsLiteral(2), + JsMultiplication.Operator, + new JsLiteral(3) + ) + ), + JsGreaterThan.Operator, + new JsIdentifier("one") + ), + JsAnd.Operator, + new JsBinaryExpression( + new JsBinaryExpression( + new JsLiteral(1), + JsMultiplication.Operator, + new JsLiteral(2) + ), + JsLessThan.Operator, + new JsIdentifier("ten") + ) + ) + )) + ); + } + + [Test] + public void Does_parse_unary_expression() + { + JsToken expr; + + "-1".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsUnaryExpression(JsMinus.Operator, new JsLiteral(1)))); + "+1".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsUnaryExpression(JsPlus.Operator, new JsLiteral(1)))); + "!true".ParseJsExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsUnaryExpression(JsNot.Operator, new JsLiteral(true)))); + } + + [Test] + public void Does_evaluate_templates_with_expressions() + { + var context = new ScriptContext().Init(); + + Assert.That(context.EvaluateScript("{{ 1 + 2 }}"), Is.EqualTo("3")); + Assert.That(context.EvaluateScript("{{ 1 - 2 }}"), Is.EqualTo("-1")); + Assert.That(context.EvaluateScript("{{ 1 * 2 }}"), Is.EqualTo("2")); + Assert.That(context.EvaluateScript("{{ 1 / 2 }}"), Is.EqualTo("0.5")); + Assert.That(context.EvaluateScript("{{ 1 / 2.0 }}"), Is.EqualTo("0.5")); + Assert.That(context.EvaluateScript("{{ 1 & 2 }}"), Is.EqualTo("0")); + //Needs to be in brackets so it's not considered as different filter expressions + Assert.That(context.EvaluateScript("{{ (1 | 2) }}"), Is.EqualTo("3")); + Assert.That(context.EvaluateScript("{{ 1 ^ 2 }}"), Is.EqualTo("3")); + Assert.That(context.EvaluateScript("{{ 1 << 2 }}"), Is.EqualTo("4")); + Assert.That(context.EvaluateScript("{{ 1 >> 2 }}"), Is.EqualTo("0")); + + Assert.That(context.EvaluateScript("{{ 1 + 2 + 3 }}"), Is.EqualTo("6")); + Assert.That(context.EvaluateScript("{{ 1 + 2 + 3 + 4 }}"), Is.EqualTo("10")); + + Assert.That(context.EvaluateScript("{{ 1 + 2 * 3 }}"), Is.EqualTo("7")); + Assert.That(context.EvaluateScript("{{ 1 + 2 * 3 - 4 }}"), Is.EqualTo("3")); + Assert.That(context.EvaluateScript("{{ 1 + 2 * 3 - 4 / 5 }}"), Is.EqualTo("6.2")); + Assert.That(context.EvaluateScript("{{ 1 + 2 * 3 - 4 / 5.0 }}"), Is.EqualTo("6.2")); + + Assert.That(context.EvaluateScript("{{ (1 + 2) }}"), Is.EqualTo("3")); + Assert.That(context.EvaluateScript("{{ (1 + 2) * 3 }}"), Is.EqualTo("9")); + Assert.That(context.EvaluateScript("{{ (1 + 2) * (3 - 4) }}"), Is.EqualTo("-3")); + Assert.That(context.EvaluateScript("{{ (1 + 2) * ((3 - 4) / 5.0) }}"), Is.EqualTo("-0.6")); + } + + [Test] + public void Does_evaluate_binary_expressions_with_filters() + { + var context = new ScriptContext().Init(); + + Assert.That(context.EvaluateScript("{{ 1 + 2 * 3 | add(3) }}"), Is.EqualTo("10")); + Assert.That(context.EvaluateScript("{{ (1 | 2) | add(3) }}"), Is.EqualTo("6")); + + Assert.That(context.EvaluateScript("{{ add(1 + 2 * 3, 4) | add(-5) }}"), Is.EqualTo("6")); + + Assert.That(context.EvaluateScript("{{ [1+2,1+2*3] | sum }}"), Is.EqualTo("10")); + Assert.That(context.EvaluateScript("{{ {a:1+2*3} | get('a') }}"), Is.EqualTo("7")); + } + + [Test] + public void Does_evaluate_binary_and_logical_expressions() + { + var context = new ScriptContext { + Args = { + ["one"] = 1, + ["ten"] = 10, + }, + }.Init(); + + Assert.That(context.EvaluateScript("{{ [1 + 2 * 3 > one && 1 * 2 < ten] | get(0) }}"), Is.EqualTo("True")); + } + + private static ScriptContext CreateContext() + { + var context = new ScriptContext { + Args = { + ["a"] = null, + ["b"] = 2, + ["empty"] = "", + ["f"] = false, + ["zero"] = 0, + ["t"] = true, + ["one"] = 1, + ["obj"] = new Dictionary(), + ["array"] = new List(), + } + }.Init(); + return context; + } + + [Test] + public void Does_evaluate_Coalescing_expressions() + { + var context = CreateContext(); + + Assert.That(context.EvaluateScript("{{ null ?? 1 }}"), Is.EqualTo("1")); + Assert.That(context.EvaluateScript("{{ a ?? 1 }}"), Is.EqualTo("1")); + Assert.That(context.EvaluateScript("{{ '' ?? 1 }}"), Is.EqualTo("1")); + Assert.That(context.EvaluateScript("{{ empty ?? 1 }}"), Is.EqualTo("1")); + Assert.That(context.EvaluateScript("{{ false ?? 1 }}"), Is.EqualTo("1")); + Assert.That(context.EvaluateScript("{{ f ?? 1 }}"), Is.EqualTo("1")); + Assert.That(context.EvaluateScript("{{ 0 ?? 1 }}"), Is.EqualTo("1")); + Assert.That(context.EvaluateScript("{{ zero ?? 1 }}"), Is.EqualTo("1")); + + Assert.That(context.EvaluateScript("{{ true ?? 1 }}"), Is.EqualTo("True")); + Assert.That(context.EvaluateScript("{{ t ?? 1 }}"), Is.EqualTo("True")); + Assert.That(context.EvaluateScript("{{ b ?? 1 }}"), Is.EqualTo("2")); + Assert.That(context.EvaluateScript("{{ 2 ?? 1 }}"), Is.EqualTo("2")); + Assert.That(context.EvaluateScript("{{ 1 ?? 2 }}"), Is.EqualTo("1")); + Assert.That(context.EvaluateScript("{{ one ?? 2 }}"), Is.EqualTo("1")); + + Assert.That(context.EvaluateScript("{{ 0 ?? 2 > 1 ? 'Y' : 'N' }}"), Is.EqualTo("Y")); + Assert.That(context.EvaluateScript("{{ 2 ?? 0 > 1 ? 'Y' : 'N' }}"), Is.EqualTo("Y")); + } + + [Test] + public void Does_use_truthy_for_logical_expression() + { + var context = CreateContext(); + + Assert.That(context.EvaluateScript("{{#if null}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if a}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if unknown}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if 0}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if ''}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if empty}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if false}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + + Assert.That(context.EvaluateScript("{{#if a && true}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if a && t}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if true && a}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if unknown && true}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if true && unknown}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if empty && true}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if true && empty}}f{{else}}t{{/if}}"), Is.EqualTo("t")); + + Assert.That(context.EvaluateScript("{{#if a || true}}t{{else}}f{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if true || a}}t{{else}}f{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if unknown || true}}t{{else}}f{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if true || unknown}}t{{else}}f{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if empty || true}}t{{else}}f{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if true || empty}}t{{else}}f{{/if}}"), Is.EqualTo("t")); + + Assert.That(context.EvaluateScript("{{#if {} && true}}t{{else}}f{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if obj && true}}t{{else}}f{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if [] && true}}t{{else}}f{{/if}}"), Is.EqualTo("t")); + Assert.That(context.EvaluateScript("{{#if array && true}}t{{else}}f{{/if}}"), Is.EqualTo("t")); + } + + } +} \ No newline at end of file diff --git a/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/CachingTests.cs b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/CachingTests.cs new file mode 100644 index 00000000000..5da37df3949 --- /dev/null +++ b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/CachingTests.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using NUnit.Framework; +using ServiceStack.Script; + +namespace ServiceStack.WebHost.Endpoints.Tests.ScriptTests +{ + public class CachingTests + { + [Test] + public void Can_use_ReadOnlyMemory_as_Dictionary_key() + { + var i = 0; + var map = new ConcurrentDictionary,int>(); + var key = "key".AsMemory(); + map.GetOrAdd(key, _ => ++i); + map.GetOrAdd(key, _ => ++i); + + Assert.That(i, Is.EqualTo(1)); + Assert.That(map.Count, Is.EqualTo(1)); + + map.GetOrAdd("key".AsMemory(), _ => ++i); + map.GetOrAdd("key".AsMemory(), _ => ++i); + Assert.That(i, Is.EqualTo(1)); + Assert.That(map.Count, Is.EqualTo(1)); + } + + [Test] + public void Cant_use_ReadOnlyMemory_from_different_string_as_Dictionary_Key() + { + var i = 0; + var map = new ConcurrentDictionary, int>(); + var key = "key".AsMemory(); + map.GetOrAdd("1key".AsMemory().Slice(1), _ => ++i); + map.GetOrAdd("2key".AsMemory().Slice(1), _ => ++i); + + Assert.That("1key".AsMemory().Slice(1).ToString(), Is.EqualTo("key")); + Assert.That("2key".AsMemory().Slice(1).ToString(), Is.EqualTo("key")); + + Assert.That(i, Is.EqualTo(2)); + Assert.That(map.Count, Is.EqualTo(2)); + } + + [Test] + public void Unique_Template_Should_Be_Cached_Only_Once() + { + var context = new ScriptContext + { + ScriptBlocks = { new EvalScriptBlock() }, + Args = { + ["templates"] = new List { + "1. {{income ?? 1000}} - {{expenses}}", + "2. {{income ?? 2000}} - {{expenses}}", + "3. {{income ?? 3000}} - {{expenses}}", + } + } + }.Init(); + + 10000.Times(() => + { + var result = context.EvaluateScript(@"{{#each templates}}{{index}}{{/each}}"); + Assert.That(result, Is.EqualTo("012")); + }); + + Assert.That(context.Cache.Count, Is.EqualTo(1)); + } + } +} \ No newline at end of file diff --git a/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/CallExpressionTests.cs b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/CallExpressionTests.cs new file mode 100644 index 00000000000..5e0d23953cd --- /dev/null +++ b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/CallExpressionTests.cs @@ -0,0 +1,79 @@ +using System; +using NUnit.Framework; +using ServiceStack.Script; + +namespace ServiceStack.WebHost.Endpoints.Tests.ScriptTests +{ + public class CallExpressionTests + { + [Test] + public void Does_parse_call_expression() + { + JsCallExpression expr; + + "a".AsSpan().ParseJsCallExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsCallExpression(new JsIdentifier("a")))); + "a()".AsSpan().ParseJsCallExpression(out expr); + Assert.That(expr, Is.EqualTo(new JsCallExpression(new JsIdentifier("a")))); + } + + [Test] + public void Can_parse_expressions_with_methods() + { + JsToken token; + + "mod(it,3) != 0".ParseJsExpression(out token); + Assert.That(token, Is.EqualTo( + new JsBinaryExpression( + new JsCallExpression( + new JsIdentifier("mod"), + new JsIdentifier("it"), + new JsLiteral(3) + ), + JsNotEquals.Operator, + new JsLiteral(0) + ) + )); + + "{ a: add(it % add(it + 1, 1 | it)) }".ParseJsExpression(out token); + Assert.That(token, Is.EqualTo(new JsObjectExpression( + new JsProperty( + new JsIdentifier("a"), + new JsCallExpression( + new JsIdentifier("add"), + new JsBinaryExpression( + new JsIdentifier("it"), + JsMod.Operator, + new JsCallExpression( + new JsIdentifier("add"), + new JsBinaryExpression( + new JsIdentifier("it"), + JsAddition.Operator, + new JsLiteral(1) + ), + new JsBinaryExpression( + new JsLiteral(1), + JsBitwiseOr.Operator, + new JsIdentifier("it") + ) + ) + ) + ) + ) + ))); + } + + [Test] + public void Does_evaluate_nested_call_expressions() + { + var context = new ScriptContext { + Args = { + ["it"] = 10 + } + }.Init(); + + Assert.That(context.EvaluateScript("{{ { a: add(it % 3,1) * 2, b: 2 * 3 + incr(4 + decr(5)) } |> values |> sum |> currency }}"), + Is.EqualTo("$19.00")); + } + } +} \ No newline at end of file diff --git a/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/CodeTests.cs b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/CodeTests.cs new file mode 100644 index 00000000000..d72e3569fb2 --- /dev/null +++ b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/CodeTests.cs @@ -0,0 +1,228 @@ +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using ServiceStack.Configuration; +using ServiceStack.IO; +using ServiceStack.Script; + +namespace ServiceStack.WebHost.Endpoints.Tests.ScriptTests +{ + [Page("foreach-code")] + public class ForEachCodeExample : SharpCodePage + { + public string render(string title, string[] items) => $@" +

      {title}

      +
        + {items.Map(x => $"
      • {x}
      • ").Join("")} +
      +"; + } + + [Page("dir/foreach-code")] + [PageArg("title", "Dir foreach code")] + public class DirForEachCodeExample : SharpCodePage + { + public string render(string title, string[] items) => $@" +

      {title}

      +
        + {items.Map(x => $"
      • {x}
      • ").Join("")} +
      +"; + } + + [Page("codepage-dep")] + public class CodePageWithDep : SharpCodePage + { + public IAppSettings AppSettings { get; set; } + + public string render(string key, string content) => $@" +

      {AppSettings.GetString(key)}

      +

      + {content} +

      +"; + } + + public class CodeTests + { + [Test] + public void Can_remove_TemplateContext_defaults() + { + var context = new ScriptContext() + .RemoveFilters(x => true) + .RemoveBlocks(x => true) + .RemovePlugins(x => true) + .Init(); + + Assert.That(context.ScriptMethods.Count, Is.EqualTo(0)); + Assert.That(context.ScriptBlocks.Count, Is.EqualTo(0)); + Assert.That(context.Plugins.Count, Is.EqualTo(0)); + } + + [Test] + public void Can_remove_individual_blocks() + { + var context = new ScriptContext { + OnAfterPlugins = ctx => ctx.RemoveBlocks(x => x.Name == "capture") + } + .Init(); + + Assert.That(context.ScriptBlocks.Any(x => x is CaptureScriptBlock), Is.False); + } + + [Test] + public void Can_execute_CodePage() + { + var context = new ScriptContext + { + Args = + { + ["items"] = new[] {"A", "B", "C"} + }, + ScanTypes = {typeof(ForEachCodeExample)} + }.Init(); + + var page = context.GetCodePage("foreach-code"); + var html = new PageResult(page) + { + Args = + { + ["title"] = "For each code" + } + }.Result; + + Assert.That(html.NormalizeNewLines(), Is.EqualTo(@" +

      For each code

      +
        +
      • A
      • B
      • C
      • +
      +".NormalizeNewLines())); + } + + private static void WriteLayouts(ScriptContext context) + { + context.VirtualFiles.WriteFile("_layout.html", @" + + +{{ page }} + + +"); + + context.VirtualFiles.WriteFile("dir/_layout.html", @" + + +{{ page }} + + +"); + } + + [Test] + public void Can_execute_CodePage_with_Layout() + { + var context = new ScriptContext + { + Args = + { + ["items"] = new[] {"A", "B", "C"} + }, + ScanTypes = {typeof(ForEachCodeExample)} + }.Init(); + + WriteLayouts(context); + + var page = context.GetCodePage("foreach-code"); + var html = new PageResult(page) + { + Args = + { + ["title"] = "For each code" + } + }.Result; + + Assert.That(html.NormalizeNewLines(), Is.EqualTo(@" + + + +

      For each code

      +
        +
      • A
      • B
      • C
      • +
      + + + +".NormalizeNewLines())); + } + + [Test] + public void Can_execute_nested_CodePage_with_Layout() + { + var context = new ScriptContext + { + Args = + { + ["items"] = new[] {"A", "B", "C"} + }, + ScanTypes = {typeof(DirForEachCodeExample)} + }.Init(); + + WriteLayouts(context); + + var page = context.GetCodePage("dir/foreach-code"); + var html = new PageResult(page).Result; + + Assert.That(html.NormalizeNewLines(), Is.EqualTo(@" + + + +

      Dir foreach code

      +
        +
      • A
      • B
      • C
      • +
      + + + +".NormalizeNewLines())); + } + + [Test] + public void Can_execute_CodePage_with_Dep() + { + var context = new ScriptContext + { + ScanTypes = {typeof(CodePageWithDep)} + }.Init(); + + WriteLayouts(context); + + context.Container.AddSingleton(() => new SimpleAppSettings(new Dictionary { + ["foo"] = "bar" + })); + + var page = context.GetCodePage("codepage-dep"); + page.Args["content"] = "The Content"; + + var html = new PageResult(page) + { + Args = + { + ["key"] = "foo" + } + }.Result; + + Assert.That(html.NormalizeNewLines(), Is.EqualTo(@" + + + +

      bar

      +

      + The Content +

      + + + +".NormalizeNewLines())); + } + } +} \ No newline at end of file diff --git a/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/CustomScriptMethodsTests.cs b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/CustomScriptMethodsTests.cs new file mode 100644 index 00000000000..22d328f892d --- /dev/null +++ b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/CustomScriptMethodsTests.cs @@ -0,0 +1,53 @@ +using System; +using NUnit.Framework; +using ServiceStack.Script; + +namespace ServiceStack.WebHost.Endpoints.Tests.ScriptTests +{ + public class CustomScriptMethodsTests + { + [Flags] + public enum Options + { + None = 0, + Option1 = 1, + Option2 = 1 << 1, + Option4 = 1 << 2, + } + + public class EnumFilter : ScriptMethods + { + public bool hasOptionsFlag(Options source, Options value) => source.HasFlag(value); + } + + [Test] + public void Can_access_flag_enums() + { + var context = new ScriptContext + { + ScriptMethods = {new EnumFilter()}, + Args = + { + ["options0"] = Options.None, + ["options1"] = Options.Option1, + ["options2"] = Options.Option2, + ["options4"] = Options.Option4, + ["options3"] = (Options.Option1 | Options.Option2) + } + }.Init(); + + Assert.That(context.EvaluateScript(@"{{ hasOptionsFlag(options3, 'Option1') }}"), + Is.EqualTo("True")); + + Assert.That(context.EvaluateScript(@"{{ hasFlag(options3, 'Option1') }},{{ hasFlag(options3, 1) }},{{ hasFlag(options3, options1) }}"), + Is.EqualTo("True,True,True")); + Assert.That(context.EvaluateScript(@"{{ hasFlag(options3, 'Option4') }},{{ hasFlag(options3, 4) }},{{ hasFlag(options3, options4) }}"), + Is.EqualTo("False,False,False")); + + Assert.That(context.EvaluateScript(@"{{ isEnum(options1, 'Option1') }},{{ isEnum(options1, 1) }},{{ isEnum(options1, options1) }}"), + Is.EqualTo("True,True,True")); + Assert.That(context.EvaluateScript(@"{{ isEnum(options3, 'Option1') }},{{ isEnum(options3, 1) }},{{ isEnum(options3, options1) }}"), + Is.EqualTo("False,False,False")); + } + } +} \ No newline at end of file diff --git a/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/DefaultScriptsTests.cs b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/DefaultScriptsTests.cs new file mode 100644 index 00000000000..6e474859094 --- /dev/null +++ b/tests/ServiceStack.WebHost.Endpoints.Tests/ScriptTests/DefaultScriptsTests.cs @@ -0,0 +1,2121 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Globalization; +using System.Threading.Tasks; +using NUnit.Framework; +using ServiceStack.IO; +using ServiceStack.Logging; +using ServiceStack.Script; +using ServiceStack.Text; + +namespace ServiceStack.WebHost.Endpoints.Tests.ScriptTests +{ + public class DefaultScriptsTests + { + public ScriptContext CreateContext(Dictionary args = null) + { + var context = new ScriptContext + { + Args = + { + ["foo"] = "bar", + ["intVal"] = 1, + ["doubleVal"] = 2.2 + } + }.Init(); + + args.Each((key,val) => context.Args[key] = val); + + return context; + } + + [Test] + public async Task Does_default_filter_raw() + { + var context = CreateContext(); + context.VirtualFiles.WriteFile("page.html", "

      {{ '