Showing preview only (4,316K chars total). Download the full file or copy to clipboard to get everything.
Repository: VirtoCommerce/vc-storefront
Branch: dev
Commit: 5242024b5236
Files: 451
Total size: 4.0 MB
Directory structure:
gitextract_go6x876s/
├── .deployment/
│ └── storefront-app/
│ └── argoDeploy.json
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE.md
│ ├── pull_request_template.md
│ └── workflows/
│ ├── deploy.yml
│ ├── main.yml
│ ├── msteams.yml
│ ├── pr-ci.yml
│ ├── pr-deploy.yml
│ ├── release-branch.yml
│ └── release.yml
├── .gitignore
├── .nuke
├── CONTRIBUTING.md
├── Directory.Build.props
├── LICENSE
├── README.md
├── VirtoCommerce.LiquidThemeEngine/
│ ├── Converters/
│ │ └── CountryConverter.cs
│ ├── Exceptions/
│ │ └── SaasCompileException.cs
│ ├── Extensions/
│ │ ├── GraphQLResponseExtensions.cs
│ │ ├── StringExtensions.cs
│ │ └── UriExtensions.cs
│ ├── Filters/
│ │ ├── ArrayFilters.cs
│ │ ├── CommerceFilters.cs
│ │ ├── CommonFilters.cs
│ │ ├── DynamicDataSourceFilters.cs
│ │ ├── FeatureFilter.cs
│ │ ├── HtmlFilters.cs
│ │ ├── MathFilters.cs
│ │ ├── MoneyFilters.cs
│ │ ├── StandardFilters.cs
│ │ ├── StringFilters.cs
│ │ ├── TranslationFilter.cs
│ │ └── UrlFilters.cs
│ ├── ILiquidThemeEngine.cs
│ ├── ILiquidViewEngine.cs
│ ├── ISassFileManager.cs
│ ├── JsonConverters/
│ │ └── MutablePagedListAsArrayJsonConverter.cs
│ ├── LiquidThemeEngineOptions.cs
│ ├── LiquidThemedView.cs
│ ├── LiquidThemedViewEngine.cs
│ ├── Objects/
│ │ ├── Paginate.cs
│ │ └── Part.cs
│ ├── SassFileManager.cs
│ ├── Scriban/
│ │ └── WorkContextConverter.cs
│ ├── SettingsManager.cs
│ ├── ShopifyLiquidThemeEngine.cs
│ ├── ThemeEngineCacheRegion.cs
│ └── VirtoCommerce.LiquidThemeEngine.csproj
├── VirtoCommerce.Storefront/
│ ├── .bowerrc
│ ├── AutoRestClients/
│ │ ├── !readme.txt
│ │ ├── CatalogModuleApi.cs
│ │ ├── ContentModuleApi.cs
│ │ ├── CoreModuleApi.cs
│ │ ├── CustomerModuleApi.cs
│ │ ├── NotificationsModuleApi.cs
│ │ ├── PlatformModuleApi.cs
│ │ ├── SitemapsModuleApi.cs
│ │ ├── StoreModuleApi.cs
│ │ └── array-in-query-fix.yml
│ ├── Caching/
│ │ ├── Redis/
│ │ │ ├── RedisCachingMessage.cs
│ │ │ ├── RedisCachingOptions.cs
│ │ │ └── RedisStorefrontMemoryCache.cs
│ │ ├── ServiceCollectionExtensions.cs
│ │ └── StorefrontMemoryCache.cs
│ ├── Connected Services/
│ │ └── Application Insights/
│ │ └── ConnectedService.json
│ ├── Controllers/
│ │ ├── AccountController.cs
│ │ ├── Api/
│ │ │ ├── ApiAccountController.cs
│ │ │ ├── ApiBlogController.cs
│ │ │ ├── ApiCommonController.cs
│ │ │ ├── ApiStaticContentController.cs
│ │ │ └── ApiThemeController.cs
│ │ ├── AssetController.cs
│ │ ├── CommonController.cs
│ │ ├── DesignerPreviewController.cs
│ │ ├── ErrorController.cs
│ │ ├── HomeController.cs
│ │ ├── SitemapController.cs
│ │ └── StorefrontControllerBase.cs
│ ├── DependencyInjection/
│ │ └── ServiceCollectionExtension.cs
│ ├── Domain/
│ │ ├── Common/
│ │ │ ├── AddressConverter.cs
│ │ │ ├── ContactUsFormConverter.cs
│ │ │ ├── CurrencyConverter.cs
│ │ │ ├── DynamicPropertyConverter.cs
│ │ │ ├── NotificationConverter.cs
│ │ │ ├── SeoInfoConverter.cs
│ │ │ ├── SettingConverter.cs
│ │ │ └── ToolsConverter.cs
│ │ ├── ContentBlobProviders/
│ │ │ ├── AzureBlobContentOptions.cs
│ │ │ ├── AzureBlobContentProvider.cs
│ │ │ ├── BlobConnectionString.cs
│ │ │ ├── ContentBlobCacheRegion.cs
│ │ │ ├── FileSystemBlobContentOptions.cs
│ │ │ └── FileSystemContentBlobProvider.cs
│ │ ├── Countries/
│ │ │ ├── CountriesWorkContextBuilderExtensions.cs
│ │ │ ├── FileSystemCountriesOptions.cs
│ │ │ └── FileSystemCountriesService.cs
│ │ ├── CurrencyService.cs
│ │ ├── Customer/
│ │ │ ├── CutomerCacheRegion.cs
│ │ │ ├── Handlers/
│ │ │ │ └── SecurityEventsHandler.cs
│ │ │ ├── MemberConverter.cs
│ │ │ └── MemberService.cs
│ │ ├── IWorkContextBuilder.cs
│ │ ├── Security/
│ │ │ ├── AnonymousUserForStoreAuthorizationRequirement.cs
│ │ │ ├── CanEditOrganizationResourceAuthorizationHandler.cs
│ │ │ ├── CanImpersonateAuthorizationHandler.cs
│ │ │ ├── CanReadContentItemAuthorizationHandler.cs
│ │ │ ├── CustomCookieAuthenticationEvents.cs
│ │ │ ├── CustomSignInManager.cs
│ │ │ ├── CustomUserManager.cs
│ │ │ ├── Notifications/
│ │ │ │ ├── ChangePhoneNumberSmsNotification.cs
│ │ │ │ ├── EmailConfirmationNotification.cs
│ │ │ │ ├── RegistrationEmailNotification.cs
│ │ │ │ ├── RegistrationInvitationNotification.cs
│ │ │ │ ├── RemindUserNameNotification.cs
│ │ │ │ ├── ResetPasswordEmailNotification.cs
│ │ │ │ ├── ResetPasswordSmsNotification.cs
│ │ │ │ ├── TwoFactorEmailNotification.cs
│ │ │ │ └── TwoFactorSmsNotification.cs
│ │ │ ├── OnlyRegisteredUserAuthorizationHandler.cs
│ │ │ ├── PermissionAuthorizationHandler.cs
│ │ │ ├── PermissionAuthorizationPolicyProvider.cs
│ │ │ ├── PermissionAuthorizationRequirement.cs
│ │ │ ├── PollingApiUserChangeToken.cs
│ │ │ ├── SecurityCacheRegion.cs
│ │ │ ├── SecurityConverter.cs
│ │ │ ├── SecurityWorkContextBuilderExtensions.cs
│ │ │ └── UserStoreStub.cs
│ │ ├── SeoInfoService.cs
│ │ ├── SpaRouteService.cs
│ │ ├── StaticContent/
│ │ │ ├── LinkListConverter.cs
│ │ │ ├── LinkListServiceImpl.cs
│ │ │ ├── MarkdownContentLoader.cs
│ │ │ ├── PageBuilderContentLoader.cs
│ │ │ ├── StaticContentCacheRegion.cs
│ │ │ ├── StaticContentItemFactory.cs
│ │ │ ├── StaticContentLoader.cs
│ │ │ ├── StaticContentLoaderFactory.cs
│ │ │ ├── StaticContentService.cs
│ │ │ └── StaticContentWorkContextBuilderExtensions.cs
│ │ ├── Stores/
│ │ │ ├── SelectCurrentCurrencyPolicy.cs
│ │ │ ├── SelectCurrentLanguagePolicy.cs
│ │ │ ├── SelectCurrentStorePolicy.cs
│ │ │ ├── StoreCacheRegion.cs
│ │ │ ├── StoreConverter.cs
│ │ │ ├── StoreService.cs
│ │ │ └── StoreWorkContextBuilderExtensions.cs
│ │ ├── WorkContextAccessor.cs
│ │ └── WorkContextBuilder.cs
│ ├── Extensions/
│ │ ├── ClaimsPrincipalExtensions.cs
│ │ ├── HostingEnviromentExtension.cs
│ │ ├── ObjectExtensions.cs
│ │ ├── PathStringExtensions.cs
│ │ ├── QueryCollectionExtensions.cs
│ │ └── SeoExtensions.cs
│ ├── Filters/
│ │ ├── AngularAntiforgeryCookieResultFilterAttribute.cs
│ │ └── AnonymousUserForStoreAuthorizationFilter.cs
│ ├── IISUrlRewrite.xml
│ ├── Infrastructure/
│ │ ├── ApiAuthMode.cs
│ │ ├── ApiChangesWatcher.cs
│ │ ├── ApplicationInsights/
│ │ │ ├── ServiceCollectionExtension.cs
│ │ │ ├── SnapshotCollectorTelemetryProcessorFactory.cs
│ │ │ └── UserTelemetryInitializer.cs
│ │ ├── Autorest/
│ │ │ ├── ApiKeySecretAuthHandler.cs
│ │ │ ├── AuthenticationHandlerFactory.cs
│ │ │ ├── BaseAuthHandler.cs
│ │ │ ├── ClientCredentialsAuthHandler.cs
│ │ │ ├── EmptyServiceClientCredentials.cs
│ │ │ └── UserPasswordAuthHandler.cs
│ │ ├── BlobChangeToken.cs
│ │ ├── BlobChangesWatcher.cs
│ │ ├── Exceptions/
│ │ │ ├── NoStoresException.cs
│ │ │ └── NoThemeException.cs
│ │ ├── HealthCheck/
│ │ │ └── PlatformConnectionHealthChecker.cs
│ │ ├── HmacUtility.cs
│ │ ├── IApiChangesWatcher.cs
│ │ ├── IBlobChangesWatcher.cs
│ │ ├── PlatformEndpointOptions.cs
│ │ ├── PollingApiChangeToken.cs
│ │ ├── RequireHttpsOptions.cs
│ │ ├── StorefrontOptions.cs
│ │ ├── StorefrontUrlBuilder.cs
│ │ └── Swagger/
│ │ ├── ApiExplorerApiControllersConvention.cs
│ │ ├── ArrayInQueryParametersFilter.cs
│ │ ├── AuthResponsesOperationFilter.cs
│ │ ├── ConsumeFromBodyFilter.cs
│ │ ├── EnumSchemaFilter.cs
│ │ ├── FileResponseTypeFilter.cs
│ │ ├── FileUploadOperationFilter.cs
│ │ ├── NewtonsoftJsonIgnoreFilter.cs
│ │ ├── OptionalParametersFilter.cs
│ │ ├── SwaggerFileResponseAttribute.cs
│ │ ├── SwaggerOptionalAttribute.cs
│ │ └── UploadFileAttribute.cs
│ ├── Middleware/
│ │ ├── NoLiquidThemeMiddleware.cs
│ │ ├── StoreMaintenanceMiddleware.cs
│ │ └── WorkContextBuildMiddleware.cs
│ ├── Models/
│ │ ├── NoThemeViewModel.cs
│ │ └── ResetCacheModel.cs
│ ├── Program.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── Routing/
│ │ ├── ISlugRouteService.cs
│ │ ├── MapStorefrontRouteBuilderExtension.cs
│ │ ├── RoutingCacheRegion.cs
│ │ ├── SlugRoute.cs
│ │ ├── SlugRouteResponse.cs
│ │ ├── SlugRouteService.cs
│ │ ├── StorefrontApiRouteAttribute.cs
│ │ ├── StorefrontRoute.cs
│ │ └── StorefrontRouteAttribute.cs
│ ├── Startup.cs
│ ├── Views/
│ │ ├── Common/
│ │ │ ├── Maintenance.cshtml
│ │ │ └── NoTheme.cshtml
│ │ ├── Error/
│ │ │ ├── 404.cshtml
│ │ │ ├── 500.cshtml
│ │ │ ├── AccessDenied.cshtml
│ │ │ ├── Error.cshtml
│ │ │ └── NoStore.cshtml
│ │ ├── Shared/
│ │ │ ├── _Layout.cshtml
│ │ │ └── _ValidationScriptsPartial.cshtml
│ │ ├── _ViewImports.cshtml
│ │ └── _ViewStart.cshtml
│ ├── VirtoCommerce.Storefront.csproj
│ ├── appsettings.Development.json
│ ├── appsettings.Production.json
│ ├── appsettings.json
│ ├── bower.json
│ ├── bundleconfig.json
│ ├── bundleconfig.json.bindings
│ ├── web.config
│ └── wwwroot/
│ ├── countries.json
│ ├── css/
│ │ └── site.css
│ ├── js/
│ │ └── site.js
│ └── lib/
│ ├── bootstrap/
│ │ ├── .bower.json
│ │ ├── LICENSE
│ │ └── dist/
│ │ ├── css/
│ │ │ ├── bootstrap-theme.css
│ │ │ └── bootstrap.css
│ │ └── js/
│ │ ├── bootstrap.js
│ │ └── npm.js
│ ├── jquery/
│ │ ├── .bower.json
│ │ ├── LICENSE.txt
│ │ └── dist/
│ │ └── jquery.js
│ ├── jquery-validation/
│ │ ├── .bower.json
│ │ ├── LICENSE.md
│ │ └── dist/
│ │ ├── additional-methods.js
│ │ └── jquery.validate.js
│ └── jquery-validation-unobtrusive/
│ ├── .bower.json
│ └── jquery.validate.unobtrusive.js
├── VirtoCommerce.Storefront.Model/
│ ├── Address.cs
│ ├── AddressType.cs
│ ├── AmountType.cs
│ ├── Attachment.cs
│ ├── BankCardInfo.cs
│ ├── Caching/
│ │ └── IStorefrontMemoryCache.cs
│ ├── Common/
│ │ ├── AnonymousComparer.cs
│ │ ├── ArrayExtensions.cs
│ │ ├── AsyncLock.cs
│ │ ├── Breadcrumb.cs
│ │ ├── Bus/
│ │ │ ├── IHandlerRegistrar.cs
│ │ │ └── InProcessBus.cs
│ │ ├── Caching/
│ │ │ ├── CacheCancellableTokensRegistry.cs
│ │ │ ├── CacheKey.cs
│ │ │ ├── CancellableCacheRegion.cs
│ │ │ ├── GlobalCacheRegion.cs
│ │ │ ├── ICacheKey.cs
│ │ │ ├── MemoryCacheExtensions.cs
│ │ │ └── TokenCancelledEventArgs.cs
│ │ ├── CollectionExtensions.cs
│ │ ├── DefaultableDictionary.cs
│ │ ├── DynamicPropertyExtension.cs
│ │ ├── EmptyDisposable.cs
│ │ ├── Entity.cs
│ │ ├── EntryState.cs
│ │ ├── EnumUtility.cs
│ │ ├── EnumerableExtension.cs
│ │ ├── EventThrottlingExtensions.cs
│ │ ├── Events/
│ │ │ ├── DomainEvent.cs
│ │ │ ├── ICancellableEventHandler.cs
│ │ │ ├── IEvent.cs
│ │ │ ├── IEventHandler.cs
│ │ │ └── IEventPublisher.cs
│ │ ├── Exceptions/
│ │ │ └── StorefrontException.cs
│ │ ├── GenericSearchResult.cs
│ │ ├── GeoPoint.cs
│ │ ├── IAccessibleByIndexKey.cs
│ │ ├── IEntity.cs
│ │ ├── IHasBreadcrumbs.cs
│ │ ├── IHasQueryKeyValues.cs
│ │ ├── IMutablePagedList.cs
│ │ ├── IQueryableExtensions.cs
│ │ ├── IStorefrontUrlBuilder.cs
│ │ ├── IValueObject.cs
│ │ ├── LocalizationExtensions.cs
│ │ ├── Messages/
│ │ │ ├── ICancellableHandler.cs
│ │ │ ├── IHandler.cs
│ │ │ └── IMessage.cs
│ │ ├── Money/
│ │ │ ├── Currency.cs
│ │ │ ├── IConvertible.cs
│ │ │ └── Money.cs
│ │ ├── MutablePagedList.cs
│ │ ├── MutablePagedListExtensions.cs
│ │ ├── Notifications/
│ │ │ ├── EmailNotificationBase.cs
│ │ │ ├── NotificationBase.cs
│ │ │ └── SmsNotificationBase.cs
│ │ ├── NumericRange.cs
│ │ ├── ObjectExtensions.cs
│ │ ├── PagedSearchCriteria.cs
│ │ ├── PathUtils.cs
│ │ ├── ReflectionExtension.cs
│ │ ├── SettingsExtension.cs
│ │ ├── SortInfo.cs
│ │ ├── Specifications/
│ │ │ └── ISpecification.cs
│ │ ├── StreamExtensions.cs
│ │ ├── StringExtensions.cs
│ │ ├── TreeNode.cs
│ │ ├── TypeExtensions.cs
│ │ └── ValueObject.cs
│ ├── ContactForm.cs
│ ├── Country.cs
│ ├── CountryRegion.cs
│ ├── Customer/
│ │ ├── Contact.cs
│ │ ├── Member.cs
│ │ ├── Organization.cs
│ │ ├── OrganizationContactsSearchCriteria.cs
│ │ ├── SecurityAccount.cs
│ │ └── Services/
│ │ └── IMemberService.cs
│ ├── DynamicProperty.cs
│ ├── DynamicPropertyDictionaryItem.cs
│ ├── DynamicPropertyName.cs
│ ├── EditorialReview.cs
│ ├── Features/
│ │ ├── Exceptions/
│ │ │ └── FeaturesException.cs
│ │ ├── Feature.cs
│ │ ├── FeatureExtensions.cs
│ │ ├── FeaturesAgent.cs
│ │ └── IFeaturesAgent.cs
│ ├── Form.cs
│ ├── FormError.cs
│ ├── ICountriesService.cs
│ ├── ICurrencyService.cs
│ ├── IHasLanguage.cs
│ ├── IHasSettings.cs
│ ├── ISeoInfoService.cs
│ ├── ISpaRouteService.cs
│ ├── IWorkContextAccessor.cs
│ ├── Image.cs
│ ├── Interaction/
│ │ ├── Client.cs
│ │ ├── Page.cs
│ │ ├── UserEvent.cs
│ │ └── UserSession.cs
│ ├── Language.cs
│ ├── LinkList/
│ │ ├── CategoryMenuLink.cs
│ │ ├── MenuLink.cs
│ │ ├── MenuLinkList.cs
│ │ ├── ProductMenuLink.cs
│ │ └── Services/
│ │ └── ILinkListService.cs
│ ├── LocalizedString.cs
│ ├── LoginProvider.cs
│ ├── Security/
│ │ ├── AccountState.cs
│ │ ├── ChangePassword.cs
│ │ ├── ChangeTwoFactorAuthenticationModel.cs
│ │ ├── ChangeTwoFactorAuthenticationResult.cs
│ │ ├── ConfirmEmailModel.cs
│ │ ├── CustomSignInResult.cs
│ │ ├── Events/
│ │ │ ├── UserDeletedEvent.cs
│ │ │ ├── UserLoginEvent.cs
│ │ │ └── UserRegisteredEvent.cs
│ │ ├── ExternalUserLoginInfo.cs
│ │ ├── ForgotPassword.cs
│ │ ├── ForgotPasswordModel.cs
│ │ ├── Login.cs
│ │ ├── OrganizationRegistration.cs
│ │ ├── OrganizationUserRegistration.cs
│ │ ├── PasswordChangeResult.cs
│ │ ├── RemovePhoneNumberResult.cs
│ │ ├── ResetPassword.cs
│ │ ├── ResetPasswordByCodeModel.cs
│ │ ├── ResetPasswordModel.cs
│ │ ├── Role.cs
│ │ ├── SecurityConstants.cs
│ │ ├── SecurityErrorDescriber.cs
│ │ ├── Specifications/
│ │ │ ├── CanUserLoginToStoreSpecification.cs
│ │ │ ├── IsUserLockedByRequiredEmailVerificationSpecification.cs
│ │ │ ├── IsUserLockedOutSpecification.cs
│ │ │ ├── IsUserPasswordExpiredSpecification.cs
│ │ │ ├── IsUserSuspendedSpecification.cs
│ │ │ └── IsUserTemporaryLockedOutSpecification.cs
│ │ ├── UpdatePhoneNumberModel.cs
│ │ ├── UpdatePhoneNumberResult.cs
│ │ ├── User.cs
│ │ ├── UserActionIdentityResult.cs
│ │ ├── UserRegistration.cs
│ │ ├── UserRegistrationByInvitation.cs
│ │ ├── UserSearchResult.cs
│ │ ├── UserUpdateInfo.cs
│ │ ├── UsersInvitation.cs
│ │ ├── ValidateTokenModel.cs
│ │ ├── VerifyCodeViewModel.cs
│ │ └── VerifyPhoneNumberModel.cs
│ ├── SeoInfo.cs
│ ├── SeoLinksType.cs
│ ├── SettingEntry.cs
│ ├── SlugInfoRequest.cs
│ ├── SlugInfoResult.cs
│ ├── SlugRoutingData.cs
│ ├── SpaThemeContext.cs
│ ├── StaticContent/
│ │ ├── Blog.cs
│ │ ├── BlogArticle.cs
│ │ ├── BlogSearchCriteria.cs
│ │ ├── ContentInThemeSearchCriteria.cs
│ │ ├── ContentItem.cs
│ │ ├── ContentPage.cs
│ │ ├── IContentBlobProvider.cs
│ │ ├── IStaticContentItemFactory.cs
│ │ ├── IStaticContentLoader.cs
│ │ ├── IStaticContentLoaderFactory.cs
│ │ ├── IStaticContentService.cs
│ │ └── StaticContentSearchCriteria.cs
│ ├── StorefrontNotification.cs
│ ├── StorefrontNotificationType.cs
│ ├── Stores/
│ │ ├── IStoreService.cs
│ │ ├── Store.cs
│ │ └── StoreStatus.cs
│ ├── SwaggerCustomSchemaIdAttribute.cs
│ ├── Term.cs
│ ├── TermExtensions.cs
│ ├── VirtoCommerce.Storefront.Model.csproj
│ └── WorkContext.cs
├── VirtoCommerce.Storefront.Tests/
│ ├── Features/
│ │ ├── CustomServiceCollection.cs
│ │ ├── FeaturesAgentTests.cs
│ │ └── Samples/
│ │ ├── empty_data.json
│ │ ├── empty_file.json
│ │ ├── full_data.json
│ │ ├── full_data_with_conflicts.json
│ │ ├── full_data_with_disabled_feature.json
│ │ ├── full_data_without_replaces.json
│ │ └── test_data.json
│ ├── JsonConverterTests.cs
│ ├── LiquidThemeEngine/
│ │ └── ShopifyLiquidThemeEngineTests.cs
│ ├── Model/
│ │ └── MoneyOperationTests.cs
│ ├── ResponseCaching/
│ │ └── ResponseCachingTests.cs
│ ├── Routing/
│ │ ├── Infrastructure/
│ │ │ ├── DummyAntiforgery.cs
│ │ │ ├── RoutingDataResult.cs
│ │ │ └── RoutingTestingActionFilter.cs
│ │ └── PathStringExtensionsTests.cs
│ ├── Scriban/
│ │ ├── ScribanTests.cs
│ │ └── test.liquid
│ ├── ValueObjectTests.cs
│ └── VirtoCommerce.Storefront.Tests.csproj
├── VirtoCommerce.Storefront.sln
└── azuredeploy.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .deployment/storefront-app/argoDeploy.json
================================================
{
"artifactKey": "docker.pkg.github.com/virtocommerce/vc-storefront/storefront",
"deployRepo": "vc-deploy-dev",
"cmPath": "storefront-app/resources/kustomization.yaml",
"dev": {
"deployAppName": "storefront-dev",
"deployBranch": "dev",
"environmentId" : "dev",
"environmentName" : "Development",
"environmentType" : "staging",
"environmentUrl" : "https://st-storefront.dev.govirto.com/"
},
"qa": {
"deployAppName": "storefront-qa",
"deployBranch": "qa",
"environmentId" : "qa",
"environmentName" : "QA",
"environmentType" : "testing",
"environmentUrl" : "https://st-storefront.qa.govirto.com/"
},
"prod": {
"deployAppName": "storefront-demo",
"deployBranch": "demo",
"environmentId" : "demo",
"environmentName" : "Demo",
"environmentType" : "production",
"environmentUrl" : "https://st-storefront.demo.govirto.com/"
}
}
================================================
FILE: .editorconfig
================================================
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 4
end_of_line = crlf
trim_trailing_whitespace = true
insert_final_newline = true
# Project files
[*.csproj]
indent_size = 2
# JSON files
[*.json]
indent_size = 2
# Dotnet code style settings
[*.{cs,vb}]
# Sort using and Import directives with System.* appearing first
dotnet_sort_system_directives_first = true
# Avoid "this." and "Me." if not necessary
dotnet_style_qualification_for_field = false:suggestion
dotnet_style_qualification_for_property = false:suggestion
dotnet_style_qualification_for_method = false:suggestion
dotnet_style_qualification_for_event = false:suggestion
# Use language keywords instead of framework type names for type references
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
dotnet_style_predefined_type_for_member_access = true:suggestion
# Use explicit accessibility modifiers
dotnet_style_require_accessibility_modifiers = true:suggestion
# Suggest more modern language features when available
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_prefer_inferred_tuple_names = true:suggestion
dotnet_prefer_inferred_anonymous_type_member_names = true:suggestion
# CSharp code style settings
[*.cs]
# Prefer curly braces even for one line of code
csharp_prefer_braces = true:suggestion
# Prefer "var" everywhere
csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = true:suggestion
# Prefer method-like constructs to have a block body
csharp_style_expression_bodied_methods = false:none
csharp_style_expression_bodied_constructors = false:none
csharp_style_expression_bodied_operators = false:none
# Prefer property-like constructs to have an expression-body
csharp_style_expression_bodied_properties = true:none
csharp_style_expression_bodied_indexers = true:none
csharp_style_expression_bodied_accessors = true:none
# Suggest more modern language features when available
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
csharp_style_throw_expression = true:suggestion
csharp_style_conditional_delegate_call = true:suggestion
csharp_prefer_simple_default_expression = true:suggestion
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_style_pattern_local_over_anonymous_function = true:suggestion
# Newline settings
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_indent_labels = flush_left
csharp_space_after_cast = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_preserve_single_line_statements = false
csharp_preserve_single_line_blocks = true
================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
*.bat text eol=crlf
*.cmd text eol=crlf
*.config text eol=crlf
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
Please provide detailed information about your issue, thank you!
Version info:
- Browser version:
- Platform version:
- Storefront version:
### Expected behavior
### Actual behavior
### Steps to reproduce
1.
2.
3.
================================================
FILE: .github/pull_request_template.md
================================================
Description:
--
QA-test:
Demo-test:
Download artifact URL:
================================================
FILE: .github/workflows/deploy.yml
================================================
# v1.3.0
name: VC deployment
on:
workflow_dispatch:
inputs:
artifactUrl:
description: 'Full link to artifact docker image or artifact download url'
required: true
deployEnvironment:
description: 'Deployment environment type. Allowed values: dev, qa, prod'
required: true
default: 'dev'
deployConfigPath:
description: 'Full path to argoDeploy.json'
required: true
default: 'argoDeploy.json'
jiraKeys:
description: 'Deployed artifact Jira keys (for cycle time report)'
required: false
default: ''
jobs:
cd:
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.REPO_TOKEN }}
CLOUD_INSTANCE_BASE_URL: ${{secrets.CLOUD_INSTANCE_BASE_URL}}
CLIENT_ID: ${{secrets.CLIENT_ID}}
CLIENT_SECRET: ${{secrets.CLIENT_SECRET}}
SLEEP_TIME: '5m'
ARGO_SERVER: 'argo.govirto.com'
steps:
- name: Install vc-build
run: |
dotnet tool install --global VirtoCommerce.GlobalTool
- name: Set Output
id: app-name
run: |
if [ ${{ github.ref }} == 'refs/heads/master' ]; then
echo "IS master branch"
echo "APP=vcptcore-qa" >> $GITHUB_OUTPUT
elif [ ${{ github.ref }} == 'refs/heads/dev' ]; then
echo "IS dev branch"
echo "APP=vcst-dev" >> $GITHUB_OUTPUT
fi
- name: Read deployment config
uses: VirtoCommerce/vc-github-actions/get-deploy-param@master
id: deployConfig
with:
envName: ${{ github.event.inputs.deployEnvironment }}
deployConfigPath: ${{ github.event.inputs.deployConfigPath }}
- name: Start deployment
uses: VirtoCommerce/vc-github-actions/gh-deployments@master
id: deployment
with:
step: start
token: ${{ secrets.GITHUB_TOKEN }}
env: ${{ steps.deployConfig.outputs.environmentName }}
no_override: false
- name: Update vcptcore-qa environment
if: ${{ github.ref == 'refs/heads/master' }}
run: |
vc-build CloudEnvSetParameter -EnvironmentName ${{ steps.app-name.outputs.APP }} -CloudToken ${{ secrets.VCPTCORE_PLATFORM_TOKEN }} -HelmParameters storefront.image.tag=${{ github.event.inputs.artifactUrl }}
- name: Update vcst-dev environment
if: ${{ github.ref == 'refs/heads/dev' }}
run: |
vc-build CloudEnvSetParameter -EnvironmentName ${{ steps.app-name.outputs.APP }} -CloudToken ${{ secrets.VCST_PLATFORM_TOKEN }} -HelmParameters storefront.image.tag=${{ github.event.inputs.artifactUrl }}
- name: DEPLOY_STATE::successful
if: success()
run: echo "DEPLOY_STATE=successful" >> $GITHUB_ENV
- name: DEPLOY_STATE::failed
if: failure()
run: echo "DEPLOY_STATE=failed" >> $GITHUB_ENV
- name: Update GitHub deployment status
uses: VirtoCommerce/vc-github-actions/gh-deployments@master
if: always()
with:
step: finish
token: ${{ secrets.GITHUB_TOKEN }}
status: ${{ job.status }}
deployment_id: ${{ steps.deployment.outputs.deployment_id }}
- name: Push Deployment Info to Jira
if: ${{ env.CLOUD_INSTANCE_BASE_URL != 0 && env.CLIENT_ID != 0 && env.CLIENT_SECRET != 0 && github.event.inputs.jiraKeys != '' && always() }}
id: push_deployment_info_to_jira
uses: VirtoCommerce/jira-upload-deployment-info@master
env:
CLOUD_INSTANCE_BASE_URL: ${{secrets.CLOUD_INSTANCE_BASE_URL}}
CLIENT_ID: ${{secrets.CLIENT_ID}}
CLIENT_SECRET: ${{secrets.CLIENT_SECRET}}
with:
cloud-instance-base-url: ${{ secrets.CLOUD_INSTANCE_BASE_URL }}
client-id: ${{ secrets.CLIENT_ID }}
client-secret: ${{ secrets.CLIENT_SECRET }}
deployment-sequence-number: ${{ github.run_id }}
update-sequence-number: ${{ github.run_id }}
issue-keys: ${{ github.event.inputs.jiraKeys }}
display-name: ${{ steps.deployConfig.outputs.deployAppName }}
url: ${{ steps.deployConfig.outputs.environmentUrl }}
description: 'Deployment to the ${{ steps.deployConfig.outputs.environmentName }} environment'
last-updated: '${{github.event.head_commit.timestamp}}'
state: '${{ env.DEPLOY_STATE }}'
pipeline-id: '${{ github.repository }} ${{ github.workflow }}'
pipeline-display-name: 'Workflow: ${{ github.workflow }} (#${{ github.run_number }})'
pipeline-url: '${{github.event.repository.html_url}}/actions/runs/${{github.run_id}}'
environment-id: ${{ steps.deployConfig.outputs.environmentId }}
environment-display-name: ${{ steps.deployConfig.outputs.environmentName }}
environment-type: ${{ steps.deployConfig.outputs.environmentType }}
================================================
FILE: .github/workflows/main.yml
================================================
# v1.2.1
name: Storefront CI
on:
workflow_dispatch:
inputs:
forceLatest:
description: "Flag to set dev-linux-latest flag on workflow_dispatch event. Allowed values true or false."
required: false
default: "false"
push:
paths-ignore:
- '.github/**'
- 'docs/**'
- 'build/**'
- 'README.md'
- 'LICENSE'
- '**/argoDeploy.json'
branches: [ master, dev ]
jobs:
ci:
if: ${{ github.actor != 'dependabot[bot]' && (github.event.pull_request.head.repo.full_name == github.repository || github.event.pull_request.head.repo.full_name == '') }} # Check that PR not from forked repo and not from Dependabot
runs-on: ubuntu-latest
env:
CLOUD_INSTANCE_BASE_URL: ${{secrets.CLOUD_INSTANCE_BASE_URL}}
CLIENT_ID: ${{secrets.CLIENT_ID}}
CLIENT_SECRET: ${{secrets.CLIENT_SECRET}}
SONAR_TOKEN: ${{secrets.SONAR_TOKEN}}
GITHUB_TOKEN: ${{ secrets.REPO_TOKEN }}
NUGET_KEY: ${{ secrets.NUGET_KEY }}
BLOB_SAS: ${{ secrets.BLOB_TOKEN }}
IMAGE_NAME: 'storefront'
PACKAGE_SERVER: 'ghcr.io'
PUBLISH_TO_DOCKER: 'true'
UPDATE_LATEST_TAG: 'true'
VERSION_SUFFIX: ''
BUILD_STATE: 'failed'
RELEASE_STATUS: 'false'
BUILD_DOCKER: 'false'
outputs:
artifactUrl: ${{ steps.image.outputs.taggedVersion }}
jira-keys: ${{ steps.jira_keys.outputs.jira-keys }}
steps:
- name: Set up Node 20
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Set up Java 17
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- name: Set variables
if: ${{ github.event_name == 'workflow_dispatch' }}
run: |
echo "PUBLISH_TO_DOCKER=false" >> $GITHUB_ENV
echo "UPDATE_LATEST_TAG=${{ github.event.inputs.forceLatest }}" >> $GITHUB_ENV
- name: Set RELEASE_STATUS
if: ${{ github.ref == 'refs/heads/master' && github.event_name == 'push' }}
run: |
echo "RELEASE_STATUS=true" >> $GITHUB_ENV
- name: Set BUILD_DOCKER
if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/dev-dockerenv' || github.event_name == 'pull_request' || (github.event_name == 'workflow_dispatch' && github.ref != 'refs/heads/master') }}
run: |
echo "BUILD_DOCKER=true" >> $GITHUB_ENV
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install VirtoCommerce.GlobalTool
uses: VirtoCommerce/vc-github-actions/setup-vcbuild@master
- name: Install dotnet-sonarscanner
run: dotnet tool install --global dotnet-sonarscanner
- name: Get Image Version
uses: VirtoCommerce/vc-github-actions/get-image-version@master
id: image
- name: Get changelog
id: changelog
uses: VirtoCommerce/vc-github-actions/changelog-generator@master
- name: Set VERSION_SUFFIX variable
run: |
if [ '${{ github.event_name }}' = 'workflow_dispatch' ]; then
echo "VERSION_SUFFIX=${{ steps.image.outputs.fullSuffix }}" >> $GITHUB_ENV
else
echo "VERSION_SUFFIX=${{ steps.image.outputs.suffix }}" >> $GITHUB_ENV
fi;
- name: Add version suffix
if: ${{ github.ref != 'refs/heads/master' }}
uses: VirtoCommerce/vc-github-actions/add-version-suffix@master
with:
versionSuffix: ${{ env.VERSION_SUFFIX }}
- name: SonarCloud Begin
uses: VirtoCommerce/vc-github-actions/sonar-scanner-begin@master
- name: Build
run: vc-build Compile
- name: Unit Tests
run: vc-build Test -TestsFilter "Category=Unit|Category=CI" -skip
- name: BUILD_STATE::successful
if: success()
run: echo "BUILD_STATE=successful" >> $GITHUB_ENV
- name: SonarCloud End
uses: VirtoCommerce/vc-github-actions/sonar-scanner-end@master
- name: Quality Gate
uses: VirtoCommerce/vc-github-actions/sonar-quality-gate@master
with:
login: ${{secrets.SONAR_TOKEN}}
- name: Packaging
run: vc-build Compress -skip Clean+Restore+Compile+Test
- name: Set artifactUrl value
id: artifactUrl
run: |
echo "DOCKER_URL=${{ env.PACKAGE_SERVER }}/${{github.repository_owner }}/${{ env.IMAGE_NAME }}:${{ steps.image.outputs.taggedVersion }}" >> $GITHUB_OUTPUT
- name: Build Docker Image
if: ${{ env.BUILD_DOCKER == 'true' }}
id: dockerBuild
uses: VirtoCommerce/vc-github-actions/build-docker-image@master
with:
tag: ${{ steps.image.outputs.taggedVersion }}
imageName: ${{ env.IMAGE_NAME }}
dockerFiles: 'https://raw.githubusercontent.com/VirtoCommerce/vc-docker/feat/net8/linux/storefront/Dockerfile'
- name: Publish Github Release
if: ${{ github.ref == 'refs/heads/master' }}
with:
changelog: ${{ steps.changelog.outputs.changelog }}
uses: VirtoCommerce/vc-github-actions/publish-github-release@master
- name: Docker Login
if: ${{ env.BUILD_DOCKER == 'true' }}
uses: docker/login-action@v3
with:
registry: ${{ env.PACKAGE_SERVER }}
username: $GITHUB_ACTOR
password: ${{ secrets.GITHUB_TOKEN }}
- name: Publish Docker Image
if: ${{ env.BUILD_DOCKER == 'true' }}
uses: VirtoCommerce/vc-github-actions/publish-docker-image@master
with:
image: ${{ steps.dockerBuild.outputs.imageName }}
tag: ${{ steps.image.outputs.taggedVersion }}
docker_user: ${{ secrets.DOCKER_USERNAME }}
docker_token: ${{ secrets.DOCKER_TOKEN }}
docker_hub: ${{ env.PUBLISH_TO_DOCKER }}
update_latest: ${{ env.UPDATE_LATEST_TAG }}
- name: Publish to SaaS ACR
if: ${{ github.ref == 'refs/heads/master' }}
run: |
docker login virtopaasregistrymain.azurecr.io -u VirtoPaaSRegistryMain -p ${{secrets.ACR_PASSWORD}}
docker tag ghcr.io/virtocommerce/${{ env.IMAGE_NAME }}:${{ steps.image.outputs.taggedVersion }} virtopaasregistrymain.azurecr.io/saas/${{ env.IMAGE_NAME }}:${{ steps.image.outputs.taggedVersion }}
docker push virtopaasregistrymain.azurecr.io/saas/${{ env.IMAGE_NAME }}:${{ steps.image.outputs.taggedVersion }}
- name: Publish to ACR
run: |
docker login virtopaasregistrymain.azurecr.io -u vcst-token -p ${{ secrets.VCST_ACR_DOCKER_PASSWORD }}
docker tag ghcr.io/virtocommerce/${{ env.IMAGE_NAME }}:${{ steps.image.outputs.taggedVersion }} virtopaasregistrymain.azurecr.io/vcst/${{ env.IMAGE_NAME }}:${{ steps.image.outputs.taggedVersion }}
docker push virtopaasregistrymain.azurecr.io/vcst/${{ env.IMAGE_NAME }}:${{ steps.image.outputs.taggedVersion }}
- name: Add link to PR
if: ${{ github.event_name == 'pull_request' }}
uses: VirtoCommerce/vc-github-actions/publish-artifact-link@master
with:
artifactUrl: ${{ steps.artifactUrl.outputs.DOCKER_URL }}
- name: Parse Jira Keys from All Commits
uses: VirtoCommerce/vc-github-actions/get-jira-keys@master
if: always()
id: jira_keys
with:
release: ${{ env.RELEASE_STATUS }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Push Build Info to Jira
if: ${{ env.CLOUD_INSTANCE_BASE_URL != 0 && env.CLIENT_ID != 0 && env.CLIENT_SECRET != 0 && steps.jira_keys.outputs.jira-keys != '' && always() }}
id: push_build_info_to_jira
uses: VirtoCommerce/jira-upload-build-info@master
with:
cloud-instance-base-url: '${{ secrets.CLOUD_INSTANCE_BASE_URL }}'
client-id: '${{ secrets.CLIENT_ID }}'
client-secret: '${{ secrets.CLIENT_SECRET }}'
pipeline-id: '${{ github.repository }} ${{ github.workflow }}'
build-number: ${{ github.run_number }}
build-display-name: 'Workflow: ${{ github.workflow }} (#${{ github.run_number }})'
build-state: '${{ env.BUILD_STATE }}'
build-url: '${{github.event.repository.url}}/actions/runs/${{github.run_id}}'
update-sequence-number: '${{ github.run_id }}'
last-updated: '${{github.event.head_commit.timestamp}}'
issue-keys: '${{ steps.jira_keys.outputs.jira-keys }}'
commit-id: '${{ github.sha }}'
repo-url: '${{ github.event.repository.url }}'
build-ref-url: '${{ github.event.repository.url }}/actions/runs/${{ github.run_id }}'
- name: Confirm Jira Build Output
if: success()
run: |
echo "Jira Upload Build Info response: ${{ steps.push_build_info_to_jira.outputs.response }}"
deploy:
if: ${{ (github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/master') && (github.event_name == 'push' || github.event_name == 'workflow_dispatch')}}
needs: ci
runs-on: ubuntu-latest
env:
CONFIG_PATH: '.deployment/storefront-app/argoDeploy.json'
steps:
- name: Set deployment environment
id: deployEnv
run: |
if [ '${{ github.ref }}' = 'refs/heads/master' ]; then
echo "NAME=prod" >> $GITHUB_OUTPUT
else
echo "NAME=dev" >> $GITHUB_OUTPUT
fi;
- name: Invoke Module deployment workflow
uses: benc-uk/workflow-dispatch@v1
with:
workflow: VC deployment
token: ${{ secrets.REPO_TOKEN }}
inputs: '{ "artifactUrl": "${{ needs.ci.outputs.artifactUrl }}", "deployEnvironment": "${{ steps.deployEnv.outputs.NAME }}", "deployConfigPath": "${{ env.CONFIG_PATH }}", "jiraKeys":"${{ needs.ci.outputs.jira-keys }}" }'
================================================
FILE: .github/workflows/msteams.yml
================================================
name: Send message to Teams (regression PR)
on:
pull_request:
branches:
[regression]
jobs:
notify:
runs-on: ubuntu-latest
steps:
- name: Send a message to Microsoft Teams
uses: VirtoCommerce/vc-github-actions/msteams-send-message@master
with:
body: '{
"@type": "MessageCard",
"@context": "http://schema.org/extensions",
"themeColor": "0076D7",
"summary": "On ${{github.repository}} repository",
"sections": [
{
"activityTitle": "Regression PR created/updated",
"activitySubtitle": "By [${{ github.event.pull_request.user.login }}](${{ github.event.pull_request.user.url }}) on **[${{github.repository}}](${{github.server_url}}/${{github.repository}})** repository",
"activityImage":"${{ github.event.pull_request.user.avatar_url }}",
"facts": [
{
"name": "Repository",
"value": "[${{github.repository}}](${{github.server_url}}/${{github.repository}})"
},
{
"name": "Pull request",
"value": "[${{ github.event.pull_request.number }}](${{ github.event.pull_request._links.html.href }})"
},
{
"name": "Pull request title",
"value": "${{ github.event.pull_request.title }}"
}
],
"markdown": true
}
],
"potentialAction": [ {
"@type": "OpenUri",
"name": "View Pull Request",
"targets": [{
"os": "default",
"uri": "${{ github.event.pull_request._links.html.href }}"
}]
}]
}' # the body of the message
webhook_uri: ${{ secrets.PLATFORM_TEAMS_URI }}
================================================
FILE: .github/workflows/pr-ci.yml
================================================
# v3.800.4
name: PR build
on:
workflow_dispatch:
pull_request:
branches: [ master, dev ]
paths-ignore:
- '.github/**'
- 'docs/**'
- 'build/**'
- 'README.md'
- 'LICENSE'
- '**/argoDeploy.json'
jobs:
test:
uses: VirtoCommerce/.github/.github/workflows/test-and-sonar.yml@v3.800.4
secrets:
sonarToken: ${{ secrets.SONAR_TOKEN }}
build:
uses: VirtoCommerce/.github/.github/workflows/build.yml@v3.800.4
with:
uploadDocker: 'true'
imageName: 'storefront'
dockerFiles: 'https://raw.githubusercontent.com/VirtoCommerce/vc-docker/feat/net8/linux/storefront/Dockerfile'
secrets:
envPAT: ${{ secrets.REPO_TOKEN }}
================================================
FILE: .github/workflows/pr-deploy.yml
================================================
# v3.800.4
name: PR deploy
on:
pull_request:
branches: [ master, dev ]
types: [ labeled ]
jobs:
get-deployment-data:
if: ${{ github.event.label.name == 'deploy-qa' }}
runs-on: ubuntu-latest
env:
ARTIFACT_NAME: ${{ github.event.repository.name }}
DOCKER_CACHE_KEY: ''
DOCKER_TAR: 'image.tar'
outputs:
dockerShortKey: ${{ steps.cache-key.outputs.dockerShortKey }}
dockerFullKey: ${{ steps.cache-key.outputs.dockerFullKey }}
packageShortKey: ${{ steps.cache-key.outputs.packageShortKey }}
packageFullKey: ${{ steps.cache-key.outputs.packageFullKey }}
dockerTar: ${{ env.DOCKER_TAR }}
jiraKey: ${{ steps.jiraKey.outputs.qaTaskNumber }}
steps:
- uses: actions/checkout@v4
- name: Get Artifact Version
uses: VirtoCommerce/vc-github-actions/get-image-version@master
id: artifactVer
- name: Get cache key
uses: VirtoCommerce/vc-github-actions/cache-get-key@master
id: cache-key
with:
runnerOs: ${{ runner.os }}
artifactName: ${{ env.ARTIFACT_NAME }}
- name: Gets Jira key from PR body
id: jiraKey
uses: VirtoCommerce/vc-github-actions/pr-body-get-link@master
with:
skipArtifactUrl: 'true'
githubToken: ${{ secrets.REPO_TOKEN }}
publish:
needs:
get-deployment-data
uses: VirtoCommerce/.github/.github/workflows/publish-docker.yml@v3.800.4
with:
fullKey: ${{ needs.get-deployment-data.outputs.dockerFullKey }}
shortKey: '${{ needs.get-deployment-data.outputs.dockerShortKey }}-'
dockerTar: ${{ needs.get-deployment-data.outputs.dockerTar }}
secrets:
envPAT: ${{ secrets.GITHUB_TOKEN }}
dockerUser: ${{ secrets.DOCKER_USERNAME }}
dockerToken: ${{ secrets.DOCKER_TOKEN }}
deploy:
needs:
[publish, get-deployment-data]
uses: VirtoCommerce/.github/.github/workflows/deploy.yml@v3.800.4
with:
argoServer: 'argo.govirto.com'
artifactUrl: ${{ needs.publish.outputs.imagePath }}
matrix: '{"include":[{"envName": "qa", "confPath": ".deployment/storefront-app/argoDeploy.json"}]}'
taskNumber: ${{ needs.get-deployment-data.outputs.jiraKey }}
forceCommit: false
secrets:
envPAT: ${{ secrets.REPO_TOKEN }}
argoLogin: ${{ secrets.ARGOCD_LOGIN }}
argoPassword: ${{ secrets.ARGOCD_PASSWORD }}
comment-publish:
if: ${{ always() && github.event.label.name == 'deploy-qa' }}
needs:
publish
env:
MESSAGE_BODY: ':x: Docker image publish filed.'
runs-on: ubuntu-latest
steps:
- name: Set MESSAGE_BODY
if: ${{ needs.publish.result == 'success' }}
run: |
echo "MESSAGE_BODY=:heavy_check_mark: Docker image ${{ needs.publish.outputs.imagePath }} published" >> $GITHUB_ENV
- name: Add link to PR
if: ${{ needs.publish.result == 'success' }}
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
uses: VirtoCommerce/vc-github-actions/publish-artifact-link@master
with:
artifactUrl: ${{ needs.publish.outputs.imagePath }}
- uses: actions/github-script@v7
if: ${{ !(contains('skipped, cancelled', needs.publish.result )) }}
with:
#github-token: ${{secrets.GITHUB_TOKEN}}
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '${{ env.MESSAGE_BODY }}'
})
comment-deploy:
if: ${{ always() && github.event.label.name == 'deploy-qa' }}
needs:
[ deploy, publish ]
runs-on: ubuntu-latest
env:
MESSAGE_BODY: ':x: QA deployment failed.'
steps:
- name: Set MESSAGE_BODY
if: ${{ needs.deploy.result == 'success' }}
run: |
echo "MESSAGE_BODY=:heavy_check_mark: Docker image ${{ needs.publish.outputs.imagePath }} deployed to QA" >> $GITHUB_ENV
- uses: actions/github-script@v7
if: ${{ !(contains('skipped, cancelled', needs.deploy.result )) }}
with:
#github-token: ${{secrets.GITHUB_TOKEN}}
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '${{ env.MESSAGE_BODY }}'
})
================================================
FILE: .github/workflows/release-branch.yml
================================================
# v3.800.5
name: Release - branch
on:
workflow_dispatch:
inputs:
incrementVersion:
description: 'Increment automatically minor\patch version before release created. If "none" version will not be incremented.'
required: true
default: 'none'
type: choice
options:
- none
jobs:
test:
uses: VirtoCommerce/.github/.github/workflows/test-and-sonar.yml@v3.800.2
secrets:
sonarToken: ${{ secrets.SONAR_TOKEN }}
build:
uses: VirtoCommerce/.github/.github/workflows/build.yml@v3.800.2
with:
uploadPackage: 'true'
uploadDocker: 'true'
eventName: ${{ github.event_name }}
imageName: 'storefront'
dockerFiles: 'https://raw.githubusercontent.com/VirtoCommerce/vc-docker/feat/net8/linux/storefront/Dockerfile'
forceVersionSuffix: 'false'
secrets:
envPAT: ${{ secrets.REPO_TOKEN }}
get-metadata:
runs-on: ubuntu-latest
env:
DOCKER_CACHE_KEY: ''
DOCKER_TAR: 'image.tar'
outputs:
dockerShortKey: ${{ steps.cache-key.outputs.dockerShortKey }}
dockerFullKey: ${{ steps.cache-key.outputs.dockerFullKey }}
packageShortKey: ${{ steps.cache-key.outputs.packageShortKey }}
packageFullKey: ${{ steps.cache-key.outputs.packageFullKey }}
dockerTar: ${{ env.DOCKER_TAR }}
changelog: ${{ steps.changelog.outputs.changelog }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get Changelog
id: changelog
uses: VirtoCommerce/vc-github-actions/changelog-generator@master
- name: Get Artifact Version
uses: VirtoCommerce/vc-github-actions/get-image-version@master
id: artifactVer
- name: Get cache key
uses: VirtoCommerce/vc-github-actions/cache-get-key@master
id: cache-key
with:
runnerOs: ${{ runner.os }}
artifactName: ${{ github.event.repository.name }}
publish-docker:
needs:
[build, test, get-metadata]
uses: VirtoCommerce/.github/.github/workflows/publish-docker.yml@v3.800.2
with:
fullKey: ${{ needs.get-metadata.outputs.dockerFullKey }}
shortKey: '${{ needs.get-metadata.outputs.dockerShortKey }}-'
dockerTar: ${{ needs.get-metadata.outputs.dockerTar }}
publishToDocker: 'true'
secrets:
envPAT: ${{ secrets.GITHUB_TOKEN }}
dockerUser: ${{ secrets.DOCKER_USERNAME }}
dockerToken: ${{ secrets.DOCKER_TOKEN }}
publish-github-release:
needs:
[build, test, get-metadata]
uses: VirtoCommerce/.github/.github/workflows/publish-github.yml@v3.800.2
with:
fullKey: ${{ needs.get-metadata.outputs.packageFullKey }}
shortKey: '${{ needs.get-metadata.outputs.packageShortKey }}-'
changeLog: '${{ needs.get-metadata.outputs.changeLog }}'
forceNuget: false
secrets:
envPAT: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/release.yml
================================================
# v1.0.0
name: Release - Quick release
on:
workflow_dispatch:
jobs:
release:
uses: VirtoCommerce/.github/.github/workflows/release.yml@v3.800.2
secrets:
envPAT: ${{ secrets.REPO_TOKEN }}
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
project.fragment.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush
.cr/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/
/VirtoCommerce.Storefront/wwwroot/cms-content
.vscode
VirtoCommerce.Storefront/wwwroot/js/designer.bundle.js*
================================================
FILE: .nuke
================================================
VirtoCommerce.Storefront.sln
================================================
FILE: CONTRIBUTING.md
================================================
Contributing
-----------
We welcome & recognize contributors to Virto Commerce. There are many benefits available for our contributers, from special licensing to project involvement and access to private repositories. Follow the guide below to contribute:
1. Before starting work on a new contribution, take a moment and search the commits and issues for similar proposals.
2. Fork the Virto Commerce repository into your account according to <a href="https://help.github.com/articles/fork-a-repo/">GitHub Fork a Repo</a> document.
3. Make your changes. Use `dev` branch because it contains the latest stable code. We also recommend you test your code before contributing.
4. Once ready to commit your changes, create a pull request to `dev` branch according to <a href="https://help.github.com/articles/creating-a-pull-request/">GitHub Create a Pull Request</a>.
5. Once received, the Virto Commerce development team will review your contribution and if approved, will pull your request to the appropriate branch.
================================================
FILE: Directory.Build.props
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project>
<!-- These properties will be shared for all projects -->
<PropertyGroup>
<Product>VirtoCommerce</Product>
<Copyright>Copyright © 2011-2024 Virto Commerce. All rights reserved</Copyright>
<Authors>VirtoCommerce</Authors>
</PropertyGroup>
<PropertyGroup>
<VersionPrefix>8.3.0</VersionPrefix>
<VersionSuffix>
</VersionSuffix>
<VersionSuffix Condition=" '$(VersionSuffix)' != '' AND '$(BuildNumber)' != '' ">$(VersionSuffix)-$(BuildNumber)</VersionSuffix>
</PropertyGroup>
</Project>
================================================
FILE: LICENSE
================================================
Copyright (c) Virto Solutions LTD. All rights reserved.
Licensed under the Virto Commerce Open Software License (the "License"); you
may not use this file except in compliance with the License. You may
obtain a copy of the License at
https://virtocommerce.com/open-source-license
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
================================================
FILE: README.md
================================================
# Virto Commerce Storefront Kit
[](https://github.com/VirtoCommerce/vc-storefront/actions?query=workflow%3A"Storefront+CI") [](https://sonarcloud.io/dashboard?id=VirtoCommerce_vc-storefront) [](https://sonarcloud.io/dashboard?id=VirtoCommerce_vc-storefront) [](https://sonarcloud.io/dashboard?id=VirtoCommerce_vc-storefront) [](https://sonarcloud.io/dashboard?id=VirtoCommerce_vc-storefront) [](https://sonarcloud.io/api/project_badges/measure?project=VirtoCommerce_vc-storefront&branch=dev&metric=ncloc) 
[](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FVirtoCommerce%2Fvc-storefront%2Fmaster%2Fazuredeploy.json)
The Virto Commerce Storefront Kit is the official online shopping website based on the Virto Commerce Platform, written on ASP.NET 8. The website serves as a client application for the VC Platform and communicates solely through public APIs.
The Storefront Kit enables the creation of multiple distinct stores (websites) on top of the Virto Commerce Platform. Each store may have its own theme with specific layouts, yet still be based on the same catalog and customer data. This allows for versatile store configurations, such as:
* Different designs for various product categories.
* Regional-specific sites offering tailored product sets.
* Integration with multiple touchpoints for a true omnichannel experience.
## Key features
- Launch and host e-commerce themes on top of the Virto Commerce Platform.
- XAPI Gateway.
- Caching mechanism.
- Multi-store support.
- Multi-theme support.
- Server-side rendering.
And more.
## Architecture
For detailed information about the Virto Storefront Architecture, please refer to our [developer guide](https://docs.virtocommerce.org/storefront/developer-guide/)
## Technologies and frameworks used
- ASP.NET 8
- ASP.NET Identity Core
## Setup
For detailed setup information, please refer to [Quick Start](https://docs.virtocommerce.org/storefront/developer-guide/getting-started/quickstart-on-windows/) to deploy and run.
## Themes
### B2B Theme
View [B2B theme on GitHub](https://github.com/VirtoCommerce/vc-theme-b2b-vue).

### FAQ
#### Running the Storefront only on HTTP schema
- In order to run the platform only at HTTP schema in production mode, it's enough to pass only HTTP URLs in `--urls` argument of the `dotnet` command.
```console
dotnet VirtoCommerce.Storefront.dll --urls=http://localhost:5002
```
#### Running the Platform on HTTPS schema
- Install and trust HTTPS certificate
Run to trust the .NET Core SDK HTTPS development certificate:
```console
dotnet dev-certs https --trust
```
Read more about [enforcing HTTPS in ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-3.0&tabs=visual-studio#trust)
```console
dotnet VirtoCommerce.Storefront.dll --urls=https://localhost:4302/
```
- Trust the .Net Core Development Self-Signed Certificate. More details on trusting the self-signed certificate can be found [here](https://blogs.msdn.microsoft.com/robert_mcmurray/2013/11/15/how-to-trust-the-iis-express-self-signed-certificate/)
#### Forward the scheme for Linux and non-IIS reverse proxies
Apps that call UseHttpsRedirection and UseHsts put a site into an infinite loop if deployed to an Azure Linux App Service, Azure Linux virtual machine (VM), Linux container or behind any other reverse proxy besides IIS. TLS is terminated by the reverse proxy, and Kestrel isn't made aware of the correct request scheme. OAuth and OIDC also fail in this configuration because they generate incorrect redirects. UseIISIntegration adds and configures Forwarded Headers Middleware when running behind IIS, but there's no matching automatic configuration for Linux (Apache or Nginx integration).
To forward the scheme from the proxy in non-IIS scenarios, set `ASPNETCORE_FORWARDEDHEADERS_ENABLED` environment variable to `true`.
For more details on how it works, see the Microsoft [documentation](https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-5.0#forward-the-scheme-for-linux-and-non-iis-reverse-proxies).
## References
- Virto Commerce Documentation: https://docs.virtocommerce.org
- Home: https://virtocommerce.com
- Community: https://www.virtocommerce.org
- [Download Latest Release](https://github.com/VirtoCommerce/vc-storefront/releases/latest)
## License
Copyright (c) Virto Solutions LTD. All rights reserved.
Licensed under the Virto Commerce Open Software License (the "License"); you
may not use this file except in compliance with the License. You may
obtain a copy of the License at
<http://virtocommerce.com/opensourcelicense>
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Converters/CountryConverter.cs
================================================
using System.Globalization;
using System.Linq;
using System.Web;
using Newtonsoft.Json;
using VirtoCommerce.Storefront.Model;
namespace VirtoCommerce.LiquidThemeEngine.Converters
{
public static class CountryConverter
{
public static string ToOptionTag(this Country country)
{
var regions = "[]";
if (country.Regions != null)
{
regions = JsonConvert.SerializeObject(country.Regions.Select(r => r.Name));
}
return string.Format(CultureInfo.InvariantCulture, "<option value=\"{0}\" data-provinces=\"{1}\">{0}</option>",
HttpUtility.HtmlAttributeEncode(country.Name),
HttpUtility.HtmlAttributeEncode(regions)
);
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Exceptions/SaasCompileException.cs
================================================
using System;
using System.IO;
using System.Runtime.Serialization;
namespace DotLiquid.ViewEngine.Exceptions
{
[Serializable]
public class SaasCompileException : Exception
{
[Obsolete(DiagnosticId = "SYSLIB0051")]
protected SaasCompileException(SerializationInfo info, StreamingContext context) : base(info, context)
{
SassLine = info.GetString("SassLine");
}
public override string Message
{
get
{
return base.Message + "\n\r" + this.ToString();
}
}
public string SassLine
{
get;
private set;
}
public override string ToString()
{
return String.Format("Line: {0}\n\rCompiler error: {1}", SassLine, _innerException != null ? _innerException.ToString() : "");
}
private Exception _innerException;
public SaasCompileException(string filename, string sass, Exception innerException) : base("Failed to compile sass file \"" + filename + "\"")
{
_innerException = innerException;
if (innerException.Message.StartsWith("stdin"))
{
var lineNumber = Int32.Parse(innerException.Message.Split(':')[1]);
this.SassLine = ReadLine(sass, lineNumber);
}
}
private static string ReadLine(string text, int lineNumber)
{
var reader = new StringReader(text);
string line;
int currentLineNumber = 0;
do
{
currentLineNumber += 1;
line = reader.ReadLine();
}
while (line != null && currentLineNumber < lineNumber);
return (currentLineNumber == lineNumber) ? line : string.Empty;
}
[Obsolete(DiagnosticId = "SYSLIB0051")]
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info, context);
info.AddValue("SassLine", SassLine);
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Extensions/GraphQLResponseExtensions.cs
================================================
using System;
using GraphQL;
using Newtonsoft.Json;
using VirtoCommerce.Storefront.Model.Common;
using VirtoCommerce.Storefront.Model.Common.Exceptions;
namespace VirtoCommerce.LiquidThemeEngine.Extensions
{
public static class GraphQLResponseExtensions
{
public static void ThrowIfHasErrors(this IGraphQLResponse response)
{
if (response == null)
{
throw new ArgumentNullException(nameof(response));
}
if (!response.Errors.IsNullOrEmpty())
{
throw new StorefrontException(JsonConvert.SerializeObject(response.Errors, Formatting.Indented));
}
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Extensions/StringExtensions.cs
================================================
using System.Globalization;
namespace DotLiquid.ViewEngine.Extensions
{
public static class StringExtensions
{
public static string TrimQuotes(this string input)
{
return input.Trim('\'', '\"');
}
public static CultureInfo TryGetCultureInfo(this string languageCode)
{
try
{
return !string.IsNullOrEmpty(languageCode) ? CultureInfo.CreateSpecificCulture(languageCode) : null;
}
catch
{
return null;
}
}
public static int SafeParseInt(this string input, int defaultValue = default)
{
return int.TryParse(input, out var result) ? result : defaultValue;
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Extensions/UriExtensions.cs
================================================
using System;
using System.Linq;
using System.Web;
using VirtoCommerce.Storefront.Model.Common;
namespace VirtoCommerce.LiquidThemeEngine.Extensions
{
public static class UriExtensions
{
/// <summary>
/// Sets the given parameter value in the query string.
/// </summary>
/// <param name="url"></param>
/// <param name="name">Name of the parameter to set.</param>
/// <param name="value">Value for the parameter to set. Pass null to remove the parameter with given name.</param>
/// <returns>Url with given parameter value.</returns>
public static Uri SetQueryParameter(this Uri url, string name, string value)
{
var qs = HttpUtility.ParseQueryString(url.Query);
if (value != null)
{
qs[name] = value;
}
else
{
qs.Remove(name);
}
var result = new UriBuilder(url)
{
Query = string.Join("&", qs.AllKeys.Select(key => string.Join("=", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(qs[key]))))
};
return result.Uri;
}
public static Uri SetQueryParameters(this Uri uri, IHasQueryKeyValues hasQueryKeyValues)
{
if (uri == null)
{
throw new ArgumentNullException(nameof(uri));
}
if (hasQueryKeyValues == null)
{
throw new ArgumentNullException(nameof(hasQueryKeyValues));
}
foreach (var keyValue in hasQueryKeyValues.GetQueryKeyValues())
{
uri = uri.SetQueryParameter(keyValue.Key, keyValue.Value);
}
return uri;
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Filters/ArrayFilters.cs
================================================
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using VirtoCommerce.Storefront.Model.Common;
namespace VirtoCommerce.LiquidThemeEngine.Filters
{
public static partial class ArrayFilters
{
public static object Tree(object input, string propName, string titlePropName, string delimiter, string sortByPropName)
{
var tree = new List<TreeNode>();
var enumerable = input as IEnumerable;
if (enumerable != null)
{
var elementType = enumerable.GetType().GetEnumerableType();
var propInfo = elementType.GetProperty(propName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
var titlePropInfo = elementType.GetProperty(titlePropName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
var sortByPropInfo = elementType.GetProperty(sortByPropName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
if (propInfo != null)
{
var charDelimiter = delimiter.ToCharArray();
foreach (var element in enumerable)
{
var path = propInfo.GetValue(element) as string;
var parts = path.Split(charDelimiter);
for (var i = parts.Length; i > 0; i--)
{
path = string.Join(delimiter, parts.Take(i));
var treeNode = tree.FirstOrDefault(n => n.Path == path);
if (treeNode == null)
{
tree.Add(new TreeNode
{
Level = i,
ParentPath = string.Join(delimiter, parts.Take(Math.Max(0, i - 1))),
Path = path,
Priority = sortByPropInfo != null ? sortByPropInfo.GetValue(element) as int? : null,
Title = titlePropInfo != null ? titlePropInfo.GetValue(element) as string : null
});
}
}
}
foreach (var treeNode in tree.OrderBy(n => n.Priority))
{
if (!string.IsNullOrEmpty(treeNode.ParentPath))
{
var parent = tree.FirstOrDefault(n => n.Path == treeNode.ParentPath);
if (parent != null)
{
treeNode.Parent = parent;
parent.Children.Add(treeNode);
}
}
treeNode.AllChildren = tree.Where(n => n.Path.StartsWith(treeNode.Path + delimiter)).ToList();
}
}
}
return tree;
}
/// <summary>
/// Filter the elements of an array by a given condition
/// {% assign sorted = pages | where:"propName","==","value" %}
/// </summary>
/// <param name="input"></param>
/// <param name="sort"></param>
/// <returns></returns>
public static object Where(object input, string propName, string op, string value)
{
var retVal = input;
var enumerable = retVal as IEnumerable;
if (enumerable != null)
{
var queryable = enumerable.AsQueryable();
var elementType = enumerable.GetType().GetEnumerableType();
var paramX = Expression.Parameter(elementType, "x");
var propInfo = elementType.GetProperty(propName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
var left = Expression.Property(paramX, propInfo);
var objValue = ParseString(value);
var right = Expression.Constant(objValue);
BinaryExpression binaryOp;
if (op.EqualsInvariant("=="))
binaryOp = Expression.Equal(left, right);
else if (op.EqualsInvariant("!="))
binaryOp = Expression.NotEqual(left, right);
else if (op.EqualsInvariant(">"))
binaryOp = Expression.GreaterThan(left, right);
else if (op.EqualsInvariant(">="))
binaryOp = Expression.GreaterThanOrEqual(left, right);
else if (op.EqualsInvariant("=<"))
binaryOp = Expression.LessThan(left, right);
else if (op.EqualsInvariant("contains"))
{
Expression expr = null;
if (propInfo.PropertyType == typeof(string))
{
var containsMethod = typeof(string).GetMethods().First(x => x.Name == "Contains");
expr = Expression.Call(left, containsMethod, right);
}
else
{
var containsMethod = typeof(Enumerable).GetMethods().First(x => x.Name == "Contains" && x.GetParameters().Count() == 2).MakeGenericMethod(new Type[] { objValue.GetType() });
expr = Expression.Call(containsMethod, left, right);
}
//where(x=> x.Tags.Contains(y))
binaryOp = Expression.Equal(expr, Expression.Constant(true));
}
else
binaryOp = Expression.LessThanOrEqual(left, right);
var delegateType = typeof(Func<,>).MakeGenericType(elementType, typeof(bool));
//Construct Func<T, bool> = (x) => x.propName == value expression
var lambda = Expression.Lambda(delegateType, binaryOp, paramX);
//Find Queryable.Where(Expression<Func<TSource, bool>>) method
var whereMethod = typeof(Queryable).GetMethods()
.Where(x => x.Name == "Where")
.Select(x => new { M = x, P = x.GetParameters() })
.Where(x => x.P.Length == 2
&& x.P[0].ParameterType.IsGenericType
&& x.P[0].ParameterType.GetGenericTypeDefinition() == typeof(IQueryable<>)
&& x.P[1].ParameterType.IsGenericType
&& x.P[1].ParameterType.GetGenericTypeDefinition() == typeof(Expression<>))
.Select(x => new { x.M, A = x.P[1].ParameterType.GetGenericArguments() })
.Where(x => x.A[0].IsGenericType
&& x.A[0].GetGenericTypeDefinition() == typeof(Func<,>))
.Select(x => new { x.M, A = x.A[0].GetGenericArguments() })
.Where(x => x.A[0].IsGenericParameter
&& x.A[1] == typeof(bool))
.Select(x => x.M)
.SingleOrDefault();
retVal = whereMethod.MakeGenericMethod(elementType).Invoke(null, new object[] { queryable, lambda });
}
return retVal;
}
/// <summary>
/// Sorts the elements of an array by a given attribute of an element in the array.
/// {% assign sorted = pages | sort:"date:desc;name" %}
/// </summary>
/// <param name="input"></param>
/// <param name="sort"></param>
/// <returns></returns>
public static object SortList(object input, string sort)
{
var retVal = input;
IEnumerable enumerable = retVal as IEnumerable;
IMutablePagedList muttablePagedList = input as IMutablePagedList;
var sortInfos = SortInfo.Parse(sort).ToList();
if (muttablePagedList != null)
{
muttablePagedList.Slice(muttablePagedList.PageNumber, muttablePagedList.PageSize, sortInfos);
}
if (enumerable != null)
{
//Queryable.Cast<T>(input).OrderBySortInfos(sortInfos) call by reflection
var queryable = enumerable.AsQueryable();
var elementType = enumerable.GetType().GetEnumerableType();
MethodInfo castMethodInfo = typeof(Queryable).GetMethods().First(x => x.Name == "Cast" && x.IsGenericMethod);
castMethodInfo = castMethodInfo.MakeGenericMethod(new Type[] { elementType });
var genericQueryable = castMethodInfo.Invoke(null, new object[] { queryable });
var orderBySortInfosMethodInfo = typeof(IQueryableExtensions).GetMethod("OrderBySortInfos");
orderBySortInfosMethodInfo = orderBySortInfosMethodInfo.MakeGenericMethod(new Type[] { elementType });
retVal = orderBySortInfosMethodInfo.Invoke(null, new object[] { genericQueryable, sortInfos.ToArray() });
}
return retVal;
}
private static object ParseString(string str)
{
int intValue;
double doubleValue;
char charValue;
bool boolValue;
TimeSpan timespan;
DateTime dateTime;
// Place checks higher if if-else statement to give higher priority to type.
if (int.TryParse(str, out intValue))
return intValue;
else if (double.TryParse(str, out doubleValue))
return doubleValue;
else if (TimeSpan.TryParse(str, out timespan))
return timespan;
else if (DateTime.TryParse(str, out dateTime))
return dateTime;
else if (char.TryParse(str, out charValue))
return charValue;
else if (bool.TryParse(str, out boolValue))
return boolValue;
return str;
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Filters/CommerceFilters.cs
================================================
using System;
using System.Globalization;
using System.Linq;
using System.Threading;
namespace VirtoCommerce.LiquidThemeEngine.Filters
{
public static partial class CommerceFilters
{
#region Static Fields
private static readonly Lazy<CultureInfo[]> _cultures = new Lazy<CultureInfo[]>(
CreateCultures,
LazyThreadSafetyMode.ExecutionAndPublication);
#endregion
#region Public Properties
public static CultureInfo[] Cultures
{
get
{
return _cultures.Value;
}
}
#endregion
#region Public Methods and Operators
/// <summary>
/// Return the three letter ISO currency code for the current thread.
/// </summary>
/// <returns>current currency code in String</returns>
public static string CurrentCurrencyCode()
{
return new RegionInfo(Thread.CurrentThread.CurrentCulture.Name).ISOCurrencySymbol;
}
public static string CurrentCurrencyCode(string cultureName)
{
return new RegionInfo(cultureName).ISOCurrencySymbol;
}
/// <summary>
/// Return the object which represents the place and language which matches the currency code which
/// the database is able to support. Fall back to Current Thread's culture if the currencyCode we requested doesn't
/// match.
/// </summary>
/// <param name="currencyCode">the currency code to be matched for the culture</param>
/// >
/// <returns>CultureInfo object</returns>
public static CultureInfo EffectiveCulture(string currencyCode)
{
var retVal = CultureInfo.CurrentCulture;
if (!CurrentCurrencyCode().Equals(currencyCode, StringComparison.OrdinalIgnoreCase))
{
// Find currency culture
var info =
Cultures.FirstOrDefault(
i =>
new RegionInfo(i.Name).ISOCurrencySymbol.Equals(
currencyCode,
StringComparison.OrdinalIgnoreCase));
retVal = info ?? retVal;
}
//.NET for swiss currency returns Fr where normally it should be CHF
if (retVal.Name.Equals("de-CH", StringComparison.InvariantCultureIgnoreCase))
{
retVal.NumberFormat.CurrencySymbol = "CHF";
}
return retVal;
}
/// <summary>
/// Attempt to format the currency based on the browser's locale, but if that currency
/// is not in the database, then fallback to current thread's culture.
/// </summary>
/// <param name="amount">the amount to be formated</param>
/// <param name="currencyCode">
/// currency code which will be used to find the
/// effective culture
/// </param>
/// <returns>Formatted currency in String</returns>
public static string FormatCurrency(decimal amount, string currencyCode)
{
return string.Format(EffectiveCulture(currencyCode), "{0:c}", amount);
}
#endregion
#region Methods
private static CultureInfo[] CreateCultures()
{
return CultureInfo.GetCultures(CultureTypes.SpecificCultures);
}
#endregion
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Filters/CommonFilters.cs
================================================
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Text.Encodings.Web;
using DotLiquid.ViewEngine.Extensions;
using Microsoft.AspNetCore.Antiforgery;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using PagedList.Core;
using Scriban;
using Scriban.Runtime;
using Scriban.Syntax;
using VirtoCommerce.LiquidThemeEngine.Extensions;
using VirtoCommerce.LiquidThemeEngine.JsonConverters;
using VirtoCommerce.LiquidThemeEngine.Objects;
using VirtoCommerce.Storefront.Model.Common;
namespace VirtoCommerce.LiquidThemeEngine.Filters
{
public static partial class CommonFilters
{
private static readonly string[] _poweredLinks = {
"<a href=\"http://virtocommerce.com\" rel=\"nofollow\" target=\"_blank\">.NET ecommerce platform</a> by Virto",
"<a href=\"http://virtocommerce.com/shopping-cart\" rel=\"nofollow\" target=\"_blank\">Shopping Cart</a> by Virto",
"<a href=\"http://virtocommerce.com/shopping-cart\" rel=\"nofollow\" target=\"_blank\">.NET Shopping Cart</a> by Virto",
"<a href=\"http://virtocommerce.com/shopping-cart\" rel=\"nofollow\" target=\"_blank\">ASP.NET Shopping Cart</a> by Virto",
"<a href=\"http://virtocommerce.com\" rel=\"nofollow\" target=\"_blank\">.NET ecommerce</a> by Virto",
"<a href=\"http://virtocommerce.com\" rel=\"nofollow\" target=\"_blank\">.NET ecommerce framework</a> by Virto",
"<a href=\"http://virtocommerce.com\" rel=\"nofollow\" target=\"_blank\">ASP.NET ecommerce</a> by Virto Commerce",
"<a href=\"http://virtocommerce.com\" rel=\"nofollow\" target=\"_blank\">ASP.NET ecommerce platform</a> by Virto",
"<a href=\"http://virtocommerce.com\" rel=\"nofollow\" target=\"_blank\">ASP.NET ecommerce framework</a> by Virto",
"<a href=\"http://virtocommerce.com\" rel=\"nofollow\" target=\"_blank\">Enterprise ecommerce</a> by Virto",
"<a href=\"http://virtocommerce.com\" rel=\"nofollow\" target=\"_blank\">Enterprise ecommerce platform</a> by Virto",
};
private static readonly JsonSerializerSettings _jsonSerializerSettings = new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
ContractResolver = new DefaultContractResolver
{
NamingStrategy = new CamelCaseNamingStrategy(),
},
Converters = new List<JsonConverter>
{
new MutablePagedListAsArrayJsonConverter(),
},
};
public static object Default(object input, object value)
{
return input ?? value;
}
public static string Json(object input)
{
var serializedString = input != null ? JsonConvert.SerializeObject(input, _jsonSerializerSettings) : null;
return serializedString;
}
public static object ParseJson(string input)
{
var result = input != null ? JsonConvert.DeserializeObject(input, _jsonSerializerSettings) : null;
return result;
}
public static string PoweredBy(string signature)
{
var hashCode = (uint)signature.GetHashCode();
return _poweredLinks[hashCode % _poweredLinks.Length];
}
public static string Render(TemplateContext context, string input)
{
if (input == null)
{
return null;
}
var themeEngine = (ShopifyLiquidThemeEngine)context.TemplateLoader;
var result = themeEngine.RenderTemplateAsync(input, null, context.CurrentGlobal).GetAwaiter().GetResult();
return result;
}
public static string Antiforgery(TemplateContext context)
{
var themeEngine = (ShopifyLiquidThemeEngine)context.TemplateLoader;
var httpContext = themeEngine.HttpContext;
var antiforgery = httpContext.RequestServices.GetService<IAntiforgery>();
var htmlContent = antiforgery.GetHtml(httpContext);
var writer = new StringWriter();
htmlContent.WriteTo(writer, HtmlEncoder.Default);
return writer.ToString();
}
public static string Layout(TemplateContext context, string layout)
{
if (!string.IsNullOrEmpty(layout))
{
var layoutSetter = (Action<string>)context.GetValue(new ScriptVariableGlobal("layout_setter"));
layoutSetter(layout);
}
return null;
}
public static Paginate Paginate(TemplateContext context, object source, int pageSize = 20, string filterJson = null)
{
var pagedList = source as IPagedList;
var requestUrl = context.GetValue(new ScriptVariableGlobal("request_url")) as Uri;
var pageNumber = context.GetValue(new ScriptVariableGlobal("page_number"))?.ToString().SafeParseInt(1) ?? 1;
var effectivePageSize = context.GetValue(new ScriptVariableGlobal("page_size"))?.ToString().SafeParseInt(pageSize) ?? pageSize;
var @params = new NameValueCollection();
if (!string.IsNullOrEmpty(filterJson))
{
var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(filterJson);
foreach (var pair in values)
{
@params.Add(pair.Key, pair.Value);
}
}
switch (source)
{
case IMutablePagedList mutablePagedList:
mutablePagedList.Slice(pageNumber, effectivePageSize, mutablePagedList.SortInfos, @params);
pagedList = mutablePagedList;
break;
case ScriptObject scriptObject when scriptObject.Keys.Contains("total_count"):
pagedList = new StaticPagedList<object>(Array.Empty<object>(), pageNumber, effectivePageSize, scriptObject["total_count"].ToString().SafeParseInt(0));
break;
case ICollection collection:
pagedList = new PagedList<object>(collection.OfType<object>().AsQueryable(), pageNumber, effectivePageSize);
break;
}
if (pagedList == null)
{
return null;
}
var result = new Paginate(pagedList);
for (var i = 1; i <= pagedList.PageCount; i++)
{
var page = i > 1 ? i.ToString() : null;
var part = new Part
{
IsLink = i != pagedList.PageNumber,
Title = i.ToString(),
Url = requestUrl != null ? requestUrl.SetQueryParameter("page", page).ToString() : i.ToString()
};
result.Parts.Add(part);
}
return result;
}
public static string Setting(TemplateContext context, string key)
{
var themeEngine = (ShopifyLiquidThemeEngine)context.TemplateLoader;
var settings = themeEngine.GetSettings();
settings.TryGetValue(key, out var result);
return result?.ToString();
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Filters/DynamicDataSourceFilters.cs
================================================
using System.Collections;
using System.Collections.Generic;
using System.Dynamic;
using System.IO;
using System.Linq;
using System.Text;
using GraphQL;
using Scriban;
using Scriban.Runtime;
using VirtoCommerce.LiquidThemeEngine.Extensions;
using VirtoCommerce.Storefront.Model.Common;
namespace VirtoCommerce.LiquidThemeEngine.Filters
{
public static class DataSourceFilter
{
public static ScriptObject GraphqlDataSource(TemplateContext context, string fileName)
{
var themeAdaptor = (ShopifyLiquidThemeEngine)context.TemplateLoader;
var query = themeAdaptor.GetAssetStreamAsync(Path.Combine("graphql", fileName)).GetAwaiter().GetResult().ReadToString();
var graphQLRequest = new GraphQLRequest(query);
var response = themeAdaptor.GraphQLClient.SendQueryAsync<ExpandoObject>(graphQLRequest).GetAwaiter().GetResult();
response.ThrowIfHasErrors();
var result = BuildScriptObject(response.Data);
return result;
}
private static ScriptObject BuildScriptObject(ExpandoObject expando)
{
var dict = (IDictionary<string, object>)expando;
var scriptObject = new ScriptObject();
foreach (var kv in dict)
{
var renamedKey = GraphQLMemberRenamer.Rename(kv.Key);
if (kv.Value is ExpandoObject expandoValue)
{
scriptObject.Add(renamedKey, BuildScriptObject(expandoValue));
}
else if (kv.Value is IList array)
{
var firstValue = array.Count > 0 ? array[0] : null;
if (firstValue is ExpandoObject expandoObj)
{
scriptObject.Add(renamedKey, array.OfType<ExpandoObject>().Select(x => BuildScriptObject(x)).ToArray());
}
else
{
scriptObject.Add(renamedKey, array);
}
}
else
{
scriptObject.Add(renamedKey, kv.Value);
}
}
return scriptObject;
}
private class GraphQLMemberRenamer
{
protected GraphQLMemberRenamer()
{
}
/// <summary>
/// Renames a camel/pascalcase member to a lowercase and `_` name. e.g `ThisIsAnExample` becomes `this_is_an_example`.
/// </summary>
/// <param name="member">The member to rename</param>
/// <returns>The member name renamed</returns>
public static string Rename(string name)
{
var builder = new StringBuilder();
var previousUpper = false;
for (var i = 0; i < name.Length; i++)
{
var c = name[i];
if (char.IsUpper(c))
{
if (i > 0 && !previousUpper)
{
builder.Append("_");
}
builder.Append(char.ToLowerInvariant(c));
previousUpper = true;
}
else
{
builder.Append(c);
previousUpper = false;
}
}
return builder.ToString();
}
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Filters/FeatureFilter.cs
================================================
using System.Collections.Generic;
using global::Scriban;
using Newtonsoft.Json.Linq;
namespace VirtoCommerce.LiquidThemeEngine.Filters
{
public static class FeatureFilter
{
public static bool IsFeatureActive(TemplateContext context, string key, params object[] variables)
{
if (string.IsNullOrEmpty(key))
{
return false;
}
if (context.TemplateLoader is ShopifyLiquidThemeEngine themeEngine)
{
return themeEngine.IsFeatureActive(key);
}
return false;
}
public static string IsFeaturesActive(TemplateContext context, string key, params object[] featureNames)
{
if (!string.IsNullOrEmpty(key))
{
return string.Empty;
}
switch (context.TemplateLoader)
{
case ShopifyLiquidThemeEngine themeEngine:
{
var featuresStateJsonObject = BuildFeaturesStateJsonObject(themeEngine, featureNames);
return featuresStateJsonObject.ToString();
}
default:
return string.Empty;
}
}
private static JObject BuildFeaturesStateJsonObject(ShopifyLiquidThemeEngine themeEngine, IEnumerable<object> featureNames)
{
var result = new JObject();
foreach (string featureName in featureNames)
{
var featureActive = themeEngine.IsFeatureActive(featureName);
result.Add(featureName, featureActive);
}
return result;
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Filters/HtmlFilters.cs
================================================
namespace VirtoCommerce.LiquidThemeEngine.Filters
{
/// <summary>
/// https://docs.shopify.com/themes/liquid-documentation/filters/html-filters
/// </summary>
public static partial class HtmlFilters
{
/// <summary>
/// Generates a script tag.
/// {{ 'shop.js' | asset_url | script_tag }}
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string ScriptTag(string input)
{
return string.Format("<script src=\"{0}\"></script>", input);
}
/// <summary>
/// Generates async script tag.
/// {{ 'shop.js' | asset_url | script_tag_async }}
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string ScriptTagAsync(string input)
{
return string.Format("<script async src=\"{0}\"></script>", input);
}
/// <summary>
/// Generates defer script tag.
/// {{ 'shop.js' | asset_url | script_tag_defer }}
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string ScriptTagDefer(string input)
{
return string.Format("<script defer src=\"{0}\"></script>", input);
}
/// <summary>
/// Generates module script tag.
/// {{ 'shop.js' | asset_url | script_tag_module }}
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string ScriptTagModule(string input)
{
return string.Format("<script type=\"module\" crossorigin src=\"{0}\"></script>", input);
}
/// <summary>
/// Generates a stylesheet tag.
/// {{ 'shop.css' | asset_url | stylesheet_tag }}
/// </summary>
/// <param name="input"></param>
/// <param name="media"></param>
/// <returns></returns>
public static string StylesheetTag(string input, string media = "all")
{
return string.Format("<link rel=\"stylesheet\" href=\"{0}\" media=\"{1}\">", input, media);
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Filters/MathFilters.cs
================================================
using System;
using System.Globalization;
namespace VirtoCommerce.LiquidThemeEngine.Filters
{
public static partial class MathFilters
{
public static object Round(object input, int digits = 0)
{
if (input != null)
{
input = Math.Round(Convert.ToDouble(input, CultureInfo.InvariantCulture), digits);
}
return input;
}
public static object Ceil(object input)
{
if (input != null)
{
input = Math.Ceiling(Convert.ToDouble(input, CultureInfo.InvariantCulture));
}
return input;
}
public static object Floor(object input)
{
if (input != null)
{
input = Math.Floor(Convert.ToDouble(input, CultureInfo.InvariantCulture));
}
return input;
}
public static object Abs(object input)
{
if (input != null)
{
input = Math.Abs(Convert.ToDouble(input, CultureInfo.InvariantCulture));
}
return input;
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Filters/MoneyFilters.cs
================================================
using System;
using System.Globalization;
using Scriban;
using VirtoCommerce.Storefront.Model.Common;
namespace VirtoCommerce.LiquidThemeEngine.Filters
{
/// <summary>
/// https://docs.shopify.com/themes/liquid-documentation/filters/money-filters
/// </summary>
public static partial class MoneyFilters
{
/// <summary>
/// Formats the price based on the shop's HTML without currency setting.
/// {{ 145 | money }}
/// </summary>
/// <param name="input"></param>
/// <param name="currencyCode"></param>
/// <returns></returns>
public static string Money(TemplateContext context, object input, string currencyCode = null)
{
var money = GetMoney(context, input, currencyCode);
return money == null ? null : money.ToString();
}
public static string MoneyWithoutDecimalPart(TemplateContext context, object input, string currencyCode = null)
{
var money = GetMoney(context, input, currencyCode);
return money == null ? null : money.FormattedAmountWithoutPoint;
}
public static string MoneyWithCurrency(TemplateContext context, object input, string currencyCode = null)
{
return Money(context, input, currencyCode);
}
public static string MoneyWithoutCurrency(TemplateContext context, object input, string currencyCode = null)
{
var money = GetMoney(context, input, currencyCode);
return money == null ? null : money.FormattedAmountWithoutCurrency;
}
private static Money GetMoney(TemplateContext context, object input, string currencyCode = null)
{
if (input == null)
{
return null;
}
var themeEngine = (ShopifyLiquidThemeEngine)context.TemplateLoader;
if (input is Money money)
{
return money;
}
else
{
var amount = Convert.ToDecimal(input, CultureInfo.InvariantCulture);
var currency = currencyCode == null ? themeEngine.WorkContext.CurrentCurrency : new Currency(themeEngine.WorkContext.CurrentLanguage, currencyCode);
return new Money(amount, currency);
}
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Filters/StandardFilters.cs
================================================
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Net;
using System.Text.RegularExpressions;
using System.Xml.XPath;
using Scriban;
using VirtoCommerce.Storefront.Model.Common;
namespace VirtoCommerce.LiquidThemeEngine.Filters
{
public static partial class StandardFilters
{
/// <summary>
/// Return the size of an array or of an string
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static int Size(object input)
{
if (input is string str)
{
return str.Length;
}
return input is IEnumerable enumerable ? enumerable.Cast<object>().Count() : 0;
}
/// <summary>
/// Return a Part of a String
/// </summary>
/// <param name="input"></param>
/// <param name="start"></param>
/// <param name="len"></param>
/// <returns></returns>
public static string Slice(string input, int start, int len = 1)
{
if (input == null || start > input.Length)
{
return null;
}
if (start < 0)
{
start += input.Length;
}
if (start + len > input.Length)
{
len = input.Length - start;
}
return input.Substring(start, len);
}
/// <summary>
/// convert a input string to DOWNCASE
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string Downcase(string input)
{
return input == null ? input : input.ToLower();
}
/// <summary>
/// convert a input string to UPCASE
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string Upcase(string input)
{
return input == null
? input
: input.ToUpper();
}
/// <summary>
/// capitalize words in the input sentence
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string Capitalize(string input)
{
if (input.IsNullOrWhiteSpace())
{
return input;
}
return string.IsNullOrEmpty(input)
? input
: CultureInfo.CurrentCulture.TextInfo.ToTitleCase(input);
}
public static string Escape(string input)
{
if (string.IsNullOrEmpty(input))
{
return input;
}
try
{
return WebUtility.HtmlEncode(input);
}
catch
{
return input;
}
}
public static string H(string input)
{
return Escape(input);
}
/// <summary>
/// Truncates a string down to x characters
/// </summary>
/// <param name="input"></param>
/// <param name="length"></param>
/// <param name="truncateString"></param>
/// <returns></returns>
public static string Truncate(string input, int length = 50, string truncateString = "...")
{
if (string.IsNullOrEmpty(input))
{
return input;
}
var l = length - truncateString.Length;
var startIndex = l < 0 ? 0 : l;
return input.Length > length
? input.Substring(0, startIndex) + truncateString
: input;
}
public static string Truncatewords(string input, int words = 15, string truncateString = "...")
{
if (string.IsNullOrEmpty(input))
{
return input;
}
var wordList = input.Split(' ').ToList();
var l = words < 0 ? 0 : words;
return wordList.Count > l
? string.Join(" ", wordList.Take(l).ToArray()) + truncateString
: input;
}
/// <summary>
/// Split input string into an array of substrings separated by given pattern.
/// </summary>
/// <param name="input"></param>
/// <param name="pattern"></param>
/// <returns></returns>
public static string[] Split(string input, string pattern)
{
return input.IsNullOrWhiteSpace()
? new[] { input }
: input.Split(new[] { pattern }, StringSplitOptions.RemoveEmptyEntries);
}
public static string StripHtml(object input)
{
if (input == null)
{
return string.Empty;
}
var inputString = input.ToString();
return inputString.IsNullOrWhiteSpace()
? inputString
: Regex.Replace(inputString, @"<.*?>", string.Empty);
}
/// <summary>
/// Remove all newlines from the string
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string StripNewlines(string input)
{
return input.IsNullOrWhiteSpace()
? input
: Regex.Replace(input, @"(\r?\n)", string.Empty);
}
/// <summary>
/// Join elements of the array with a certain character between them
/// </summary>
/// <param name="input"></param>
/// <param name="glue"></param>
/// <returns></returns>
public static string Join(IEnumerable input, string glue = " ")
{
if (input == null)
{
return null;
}
var castInput = input.Cast<object>();
return string.Join(glue, castInput);
}
/// <summary>
/// Sort elements of the array
/// provide optional property with which to sort an array of hashes or drops
/// </summary>
/// <param name="input"></param>
/// <param name="property"></param>
/// <returns></returns>
public static IEnumerable Sort(object input, string property = null)
{
var ary = input is IEnumerable enumerable ? enumerable.Flatten().Cast<object>().ToList() : new List<object>(new[] { input });
if (!ary.Any())
{
return ary;
}
if (string.IsNullOrEmpty(property))
{
ary.Sort();
}
else if ((ary.All(o => o is IDictionary)) && ((IDictionary)ary.First()).Contains(property))
{
ary.Sort((a, b) => Comparer.Default.Compare(((IDictionary)a)[property], ((IDictionary)b)[property]));
}
else if (ary.All(o => o.RespondTo(property)))
{
ary.Sort((a, b) => Comparer.Default.Compare(a.Send(property), b.Send(property)));
}
return ary;
}
/// <summary>
/// Map/collect on a given property
/// </summary>
/// <param name="input"></param>
/// <param name="property"></param>
/// <returns></returns>
public static IEnumerable Map(IEnumerable input, string property)
{
if (input == null)
{
return input;
}
var ary = input.Cast<object>().ToList();
if (!ary.Any())
{
return ary;
}
if ((ary.All(o => o is IDictionary)) && ((IDictionary)ary.First()).Contains(property))
{
return ary.Select(e => ((IDictionary)e)[property]);
}
return ary.All(o => o.RespondTo(property)) ? ary.Select(e => e.Send(property)) : ary;
}
/// <summary>
/// Replace occurrences of a string with another
/// </summary>
/// <param name="input"></param>
/// <param name="string"></param>
/// <param name="replacement"></param>
/// <returns></returns>
public static string Replace(object input, string @string, string replacement = "")
{
if (input == null)
{
return null;
}
if (string.IsNullOrEmpty(input.ToString()) || string.IsNullOrEmpty(@string))
{
return input.ToString();
}
input = input.ToString().Replace(@string, replacement);
return input.ToString();
}
/// <summary>
/// Replace the first occurence of a string with another
/// </summary>
/// <param name="input"></param>
/// <param name="string"></param>
/// <param name="replacement"></param>
/// <returns></returns>
public static string ReplaceFirst(string input, string @string, string replacement = "")
{
if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(@string))
{
return input;
}
var doneReplacement = false;
return Regex.Replace(input, @string, m =>
{
if (doneReplacement)
{
return m.Value;
}
doneReplacement = true;
return replacement;
});
}
/// <summary>
/// Remove a substring
/// </summary>
/// <param name="input"></param>
/// <param name="string"></param>
/// <returns></returns>
public static string Remove(string input, string @string)
{
return input.IsNullOrWhiteSpace()
? input
: input.Replace(@string, string.Empty);
}
/// <summary>
/// Remove the first occurrence of a substring
/// </summary>
/// <param name="input"></param>
/// <param name="string"></param>
/// <returns></returns>
public static string RemoveFirst(string input, string @string)
{
return input.IsNullOrWhiteSpace()
? input
: ReplaceFirst(input, @string, string.Empty);
}
/// <summary>
/// Add one string to another
/// </summary>
/// <param name="input"></param>
/// <param name="string"></param>
/// <returns></returns>
public static string Append(object input, object @string)
{
return input + @string.ToSafeString();
}
/// <summary>
/// Prepend a string to another
/// </summary>
/// <param name="input"></param>
/// <param name="string"></param>
/// <returns></returns>
public static string Prepend(object input, object @string)
{
return @string.ToSafeString() + input;
}
/// <summary>
/// Add <br /> tags in front of all newlines in input string
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string NewlineToBr(string input)
{
return input.IsNullOrWhiteSpace()
? input
: Regex.Replace(input, @"(\r?\n)", "<br />$1");
}
/// <summary>
/// Formats a date using a .NET date format string
/// </summary>
/// <param name="input"></param>
/// <param name="format"></param>
/// <returns></returns>
public static string Date(TemplateContext context, object input, string format)
{
if (input == null)
{
return null;
}
if (format.IsNullOrWhiteSpace())
{
return input.ToString();
}
switch (format)
{
case "long":
format = "f";
break;
}
var result = input.ToString();
DateTime date;
var dateParsed = false;
if (input.ToString().Equals("now", StringComparison.OrdinalIgnoreCase))
{
date = DateTime.Now;
dateParsed = true;
}
else if (DateTime.TryParse(input.ToString(), out date))
{
dateParsed = true;
}
if (Regex.IsMatch(format, @"^[\w\d_\-]+$"))
{
var key = string.Concat("date_formats.", format);
var newFormat = TranslationFilter.T(context, key);
if (!newFormat.IsNullOrEmpty() && newFormat != key)
{
format = newFormat;
}
}
if (dateParsed)
{
var themeEngine = (ShopifyLiquidThemeEngine)context.TemplateLoader;
TryFormatDateTime(date, format, out result, CultureInfo.GetCultureInfo(themeEngine.WorkContext.CurrentLanguage.CultureName));
}
return result;
}
/// <summary>
/// Get the first element of the passed in array
///
/// Example:
/// {{ product.images | first | to_img }}
/// </summary>
/// <param name="array"></param>
/// <returns></returns>
public static object First(IEnumerable array)
{
return array?.Cast<object>().FirstOrDefault();
}
/// <summary>
/// Get the last element of the passed in array
///
/// Example:
/// {{ product.images | last | to_img }}
/// </summary>
/// <param name="array"></param>
/// <returns></returns>
public static object Last(IEnumerable array)
{
return array?.Cast<object>().LastOrDefault();
}
/// <summary>
/// Addition
/// </summary>
/// <param name="input"></param>
/// <param name="operand"></param>
/// <returns></returns>
public static object Plus(object input, object operand)
{
return DoMathsOperation(input, operand, Expression.Add);
}
/// <summary>
/// Subtraction
/// </summary>
/// <param name="input"></param>
/// <param name="operand"></param>
/// <returns></returns>
public static object Minus(object input, object operand)
{
return DoMathsOperation(input, operand, Expression.Subtract);
}
/// <summary>
/// Multiplication
/// </summary>
/// <param name="input"></param>
/// <param name="operand"></param>
/// <returns></returns>
public static object Times(object input, object operand)
{
return DoMathsOperation(input, operand, Expression.Multiply);
}
/// <summary>
/// Division
/// </summary>
/// <param name="input"></param>
/// <param name="operand"></param>
/// <returns></returns>
public static object DividedBy(object input, object operand)
{
return DoMathsOperation(input, operand, Expression.Divide);
}
public static object Modulo(object input, object operand)
{
return DoMathsOperation(input, operand, Expression.Modulo);
}
private static object DoMathsOperation(object input, object operand, Func<Expression, Expression, BinaryExpression> operation)
{
input = input.ToNumber();
operand = operand.ToNumber();
return input == null || operand == null
? null
: ExpressionUtility.CreateExpression(operation, input.GetType(), operand.GetType(), input.GetType(), true)
.DynamicInvoke(input, operand);
}
private static void TryFormatDateTime(DateTime input, string format, out string formated, IFormatProvider formatProvider = null)
{
if (format == null)
{
throw new ArgumentNullException(nameof(input));
}
formated = null;
try
{
formated = input.ToString(format, formatProvider);
}
catch
{
//Swallow any exception
}
}
}
/// <summary>
/// Some of this code was taken from http://www.yoda.arachsys.com/csharp/miscutil/usage/genericoperators.html.
/// General purpose Expression utilities
/// </summary>
internal static class ExpressionUtility
{
/// <summary>
/// Create a function delegate representing a binary operation
/// </summary>
/// <param name="body">Body factory</param>
/// <param name="leftType"></param>
/// <param name="rightType"></param>
/// <param name="resultType"></param>
/// <param name="castArgsToResultOnFailure">
/// If no matching operation is possible, attempt to convert
/// TArg1 and TArg2 to TResult for a match? For example, there is no
/// "decimal operator /(decimal, int)", but by converting TArg2 (int) to
/// TResult (decimal) a match is found.
/// </param>
/// <returns>Compiled function delegate</returns>
public static Delegate CreateExpression(Func<Expression, Expression, BinaryExpression> body,
Type leftType, Type rightType, Type resultType, bool castArgsToResultOnFailure)
{
var lhs = Expression.Parameter(leftType, "lhs");
var rhs = Expression.Parameter(rightType, "rhs");
Expression lhsExpression = lhs;
Expression rhsExpression = rhs;
UpdateVisit(ref lhsExpression, ref rhsExpression);
try
{
try
{
return Expression.Lambda(body(lhsExpression, rhsExpression), lhs, rhs).Compile();
}
catch (InvalidOperationException)
{
if (castArgsToResultOnFailure && !( // if we show retry
leftType == resultType && // and the args aren't
rightType == resultType))
{
// already "TValue, TValue, TValue"...
// convert both lhs and rhs to TResult (as appropriate)
var castLhs = leftType == resultType ? lhs : (Expression)Expression.Convert(lhs, resultType);
var castRhs = rightType == resultType ? rhs : (Expression)Expression.Convert(rhs, resultType);
return Expression.Lambda(body(castLhs, castRhs), lhs, rhs).Compile();
}
throw;
}
}
catch (Exception ex)
{
var msg = ex.Message; // avoid capture of ex itself
return (Action)(delegate
{ throw new InvalidOperationException(msg); });
}
}
private static void UpdateVisit(ref Expression left, ref Expression right)
{
var leftTypeCode = Type.GetTypeCode(left.Type);
var rightTypeCode = Type.GetTypeCode(right.Type);
if (leftTypeCode == rightTypeCode)
{
return;
}
if (leftTypeCode > rightTypeCode && leftTypeCode != TypeCode.String)
{
right = Expression.Convert(right, left.Type);
}
else
{
left = Expression.Convert(left, right.Type);
}
}
}
internal static class ObjectExtensionMethods
{
public static bool RespondTo(this object value, string member, bool ensureNoParameters = true)
{
if (value == null)
{
throw new ArgumentNullException("value");
}
var type = value.GetType();
var methodInfo = type.GetMethod(member);
if (methodInfo != null && (!ensureNoParameters || !methodInfo.GetParameters().Any()))
{
return true;
}
var propertyInfo = type.GetProperty(member);
return propertyInfo != null && propertyInfo.CanRead;
}
public static object Send(this object value, string member, object[] parameters = null)
{
if (value == null)
{
throw new ArgumentNullException("value");
}
var type = value.GetType();
var methodInfo = type.GetMethod(member);
if (methodInfo != null)
{
return methodInfo.Invoke(value, parameters);
}
var propertyInfo = type.GetProperty(member);
return propertyInfo?.GetValue(value, null);
}
}
internal static class StringExtensions
{
public static bool IsNullOrWhiteSpace(this string s)
{
return string.IsNullOrEmpty(s) || s.Trim().Length == 0;
}
public static string ToSafeString(this object s)
{
return s == null ? "" : s.ToString();
}
public static object ToNumber(this object s)
{
if (s is double)
{
return s;
}
else if (s is float)
{
return s;
}
else if (s is decimal)
{
return s;
}
else if (s is int)
{
return s;
}
else if (s is Money money)
{
return money.Amount;
}
else if (s is string)
{
var match = Regex.Match(s as string, string.Format("(?-mix:{0})", @"^([+-]?\d[\d\.|\,]+)$"));
if (match.Success)
{
// For cultures with "," as the decimal separator, allow
// both "," and "." to be used as the separator.
// First try to parse using current culture.
if (float.TryParse(match.Groups[1].Value, out var result))
{
return result;
}
// If that fails, try to parse using invariant culture.
return float.Parse(match.Groups[1].Value, CultureInfo.InvariantCulture);
}
match = Regex.Match(s as string, string.Format("(?-mix:{0})", @"^([+-]?\d+).*$"));
if (match.Success)
{
return Convert.ToInt32(match.Groups[1].Value);
}
}
return 0;
}
private static double Evaluate(string expression)
{
var xsltExpression =
string.Format("number({0})",
new Regex(@"([\+\-\*])").Replace(expression, " ${1} ")
.Replace("/", " div ")
.Replace("%", " mod "));
return (double)new XPathDocument
(new StringReader("<r/>"))
.CreateNavigator()
.Evaluate(xsltExpression);
}
}
internal static class EnumerableExtensionMethods
{
public static IEnumerable Flatten(this IEnumerable array)
{
foreach (var item in array)
{
if (item is string)
{
yield return item;
}
else if (item is IEnumerable enumerableItem)
{
foreach (var subItem in Flatten(enumerableItem))
{
yield return subItem;
}
}
else
{
yield return item;
}
}
}
public static void EachWithIndex(this IEnumerable<object> array, Action<object, int> callback)
{
var index = 0;
foreach (var item in array)
{
callback(item, index);
++index;
}
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Filters/StringFilters.cs
================================================
using System.Security.Cryptography;
using System.Text;
using VirtoCommerce.Storefront.Model.Common;
namespace VirtoCommerce.LiquidThemeEngine.Filters
{
/// <summary>
/// String filters are used to manipulate outputs and variables of the string type.
/// https://docs.shopify.com/themes/liquid-documentation/filters/string-filters
/// </summary>
public static partial class StringFilters
{
/// <summary>
/// Converts a string into CamelCase.
/// {{ 'coming-soon' | camelcase }}
/// Result - ComingSoon
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string Camelize(string input)
{
if (string.IsNullOrEmpty(input))
{
return input;
}
var result = new StringBuilder();
var strArray = input.Split(separator: '_', '-');
foreach (var word in strArray)
{
result.Append(word.Substring(0, 1).ToUpper() + word.Substring(1));
}
return result.ToString();
}
public static string Handle(string input)
{
return Handleize(input);
}
/// <summary>
/// Formats a string into a handle.
/// Input
///{{ '100% M & Ms!!!' | handleize }}
/// Output
/// 100-m-ms
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string Handleize(string input)
{
if (string.IsNullOrEmpty(input))
{
return input;
}
return input.Handelize();
}
/// <summary>
/// Converts a string into an MD5 hash.
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string Md5(string input)
{
if (string.IsNullOrEmpty(input))
{
return input;
}
byte[] hash;
using (var md5 = MD5.Create())
{
hash = md5.ComputeHash(Encoding.UTF8.GetBytes(input));
}
return hash.ToHex(upperCase: false);
}
/// <summary>
/// Outputs the singular or plural version of a string based on the value of a number. The first parameter is the singular string and the second parameter is the plural string.
/// </summary>
/// <param name="input"></param>
/// <param name="singular"></param>
/// <param name="plural"></param>
/// <returns></returns>
public static string Pluralize(int input, string singular, string plural)
{
return input == 1 ? singular : plural;
}
/// <summary>
/// Strips tabs, spaces, and newlines (all whitespace) from the left and right side of a string.
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string Strip(string input)
{
if (string.IsNullOrEmpty(input))
{
return input;
}
return input.Trim();
}
public static string Format(object input, string format)
{
if (input == null)
return null;
else if (string.IsNullOrWhiteSpace(format))
return input.ToString();
return string.Format("{0:" + format + "}", input);
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Filters/TranslationFilter.cs
================================================
using Scriban;
using VirtoCommerce.Storefront.Model.Common;
namespace VirtoCommerce.LiquidThemeEngine.Filters
{
/// <summary>
/// Filter used for localization
/// </summary>
public static partial class TranslationFilter
{
public static string T(TemplateContext context, string key, params object[] variables)
{
var result = key;
var themeAdaptor = (ShopifyLiquidThemeEngine)context.TemplateLoader;
var localization = themeAdaptor.ReadLocalization();
if (localization != null)
{
//Backward compatibility "" | t returns entire localization JSON
if (string.IsNullOrEmpty(key))
{
result = localization.ToString();
}
else if (key.IsValidJsonPath())
{
result = (localization.SelectToken(key, errorWhenNoMatch: false) ?? key).ToString();
if (!variables.IsNullOrEmpty())
{
result = string.Format(result, variables);
}
}
}
return result;
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Filters/UrlFilters.cs
================================================
using System;
using System.Linq;
using Scriban;
using VirtoCommerce.LiquidThemeEngine.Extensions;
using VirtoCommerce.Storefront.Model.Common;
using VirtoCommerce.Storefront.Model.Stores;
using storefrontModel = VirtoCommerce.Storefront.Model;
namespace VirtoCommerce.LiquidThemeEngine.Filters
{
/// <summary>
/// https://docs.shopify.com/themes/liquid-documentation/filters/url-filters
/// </summary>
public static partial class UrlFilters
{
public static string SizeImageLink(string input, string size)
{
if (input != null)
{
input = input.AddSuffixToFileUrl("_" + size.TrimStart('_'));
}
return input;
}
/// <summary>
/// Returns the URL of an image. Accepts an image size as a parameter. The img_url filter can be used on the following objects:
/// product, variant, line item, collection, image
/// </summary>
/// <param name="input"></param>
/// <param name="type"></param>
/// <returns></returns>
public static string ImgUrl(object input, string type = null)
{
if (input == null)
{
return null;
}
var retVal = input.ToString();
if (!string.IsNullOrEmpty(retVal))
{
if (!string.IsNullOrEmpty(type))
{
retVal = retVal.AddSuffixToFileUrl(string.Format("_{0}", type));
}
retVal = retVal.RemoveLeadingUriScheme();
}
return retVal;
}
/// <summary>
/// Generates an HTML link. The first parameter is the URL of the link, and the optional second parameter is the title of the link.
/// </summary>
/// <param name="input"></param>
/// <param name="link"></param>
/// <param name="title"></param>
/// <returns></returns>
public static string LinkTo(object input, string link, string title = "")
{
return string.Format("<a href=\"{0}\" title=\"{1}\">{2}</a>", link, title, input);
}
/// <summary>
/// Returns the URL of a file in the "assets" folder of a theme.
/// {{ 'shop.css' | asset_url }}
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string AssetUrl(TemplateContext context, string input)
{
string retVal = null;
if (input != null)
{
var themeAdaptor = (ShopifyLiquidThemeEngine)context.TemplateLoader;
retVal = themeAdaptor.GetAssetAbsoluteUrl(input);
}
return retVal;
}
/// <summary>
/// Returns the URL of a file in the "assets/static" folder of a theme.
/// {{ 'shop.css' | static_asset_url }}
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string StaticAssetUrl(TemplateContext context, string input)
{
string retVal = null;
if (input != null)
{
var themeAdaptor = (ShopifyLiquidThemeEngine)context.TemplateLoader;
retVal = themeAdaptor.GetAssetAbsoluteUrl("static/" + input.TrimStart('/'));
}
return retVal;
}
/// <summary>
/// Returns the URL of a file.
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string FileUrl(TemplateContext context, string input)
{
return AssetUrl(context, input);
}
/// <summary>
/// Method for switching between multiple stores
/// </summary>
/// <param name="input"></param>
/// <param name="storeId"></param>
/// <param name="languageCode"></param>
/// <returns></returns>
public static string StoreAbsoluteUrl(TemplateContext context, string input, string storeId = null, string languageCode = null)
{
var themeAdaptor = (ShopifyLiquidThemeEngine)context.TemplateLoader;
Store store = null;
if (!string.IsNullOrEmpty(storeId))
{
store = themeAdaptor.WorkContext.AllStores.FirstOrDefault(x => string.Equals(x.Id, storeId, StringComparison.InvariantCultureIgnoreCase));
}
store = store ?? themeAdaptor.WorkContext.CurrentStore;
var retVal = AbsoluteUrl(context, input, storeId, languageCode);
var isHttps = themeAdaptor.WorkContext.RequestUrl.Scheme == Uri.UriSchemeHttps;
//If store has defined url need redirect to it
if (isHttps)
{
retVal = string.IsNullOrEmpty(store.SecureUrl) ? retVal : store.SecureUrl;
}
else
{
retVal = string.IsNullOrEmpty(store.Url) ? retVal : store.Url;
}
return retVal;
}
public static string FullUrl(TemplateContext context, string input, string storeId = null, string languageCode = null)
{
var absoluteUrl = AbsoluteUrl(context, input, storeId, languageCode);
var themeEngine = (ShopifyLiquidThemeEngine)context.TemplateLoader;
var workContext = themeEngine.WorkContext;
var fullUrl = new Uri(workContext.RequestUrl, absoluteUrl);
return fullUrl.AbsoluteUri;
}
/// <summary>
/// Get app absolute storefront url with specified store and language
/// </summary>
/// <param name="input"></param>
/// <param name="storeId"></param>
/// <param name="languageCode"></param>
/// <returns></returns>
public static string AbsoluteUrl(TemplateContext context, string input, string storeId = null, string languageCode = null)
{
if (input == null)
{
return string.Empty;
}
var themeAdaptor = (ShopifyLiquidThemeEngine)context.TemplateLoader;
Store store = null;
storefrontModel.Language language = null;
if (!string.IsNullOrEmpty(storeId))
{
store = themeAdaptor.WorkContext.AllStores.FirstOrDefault(x => string.Equals(x.Id, storeId, StringComparison.InvariantCultureIgnoreCase));
}
store = store ?? themeAdaptor.WorkContext.CurrentStore;
if (!string.IsNullOrEmpty(languageCode))
{
language = store.Languages.FirstOrDefault(x => string.Equals(x.CultureName, languageCode, StringComparison.InvariantCultureIgnoreCase));
}
language = language ?? themeAdaptor.WorkContext.CurrentLanguage;
var retVal = themeAdaptor.UrlBuilder.ToAppAbsolute(input, store, language);
return retVal;
}
public static string ProductImgUrl(object input, string type = null)
{
return ImgUrl(input, type);
}
/// <summary>
/// Appends hash of file content as file version to invalidate browser cache when file changed.
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string AppendVersion(TemplateContext context, string input)
{
if (input == null)
{
return string.Empty;
}
var themeAdaptor = (ShopifyLiquidThemeEngine)context.TemplateLoader;
var basePath = themeAdaptor.GetAssetAbsoluteUrl("");
var relativePath = input.StartsWith(basePath) ? input.Remove(0, basePath.Length) : input;
var hash = themeAdaptor.GetAssetHash(relativePath);
return input.Contains('?') ? $"{input}&v={hash}" : $"{input}?v={hash}";
}
/// <summary>
/// Generates an relative url with query string that contains serialized ProductSearchCriteria as parameters
/// and add a new given aggregation item value to terms parameter
/// </summary>
/// <param name="context"></param>
/// <param name="aggregationItem">aggregation item</param>
/// <returns>example: /collection?terms=color:Red</returns>
public static string AddTermUrl(TemplateContext context, string facetName, string term)
{
var themeAdaptor = (ShopifyLiquidThemeEngine)context.TemplateLoader;
var result = themeAdaptor.WorkContext.RequestUrl.SetQueryParameter("filter", $"{facetName}:{term}");
return result?.PathAndQuery;
}
/// <summary>
/// Generates an relative url with query string that contains serialized ProductSearchCriteria as parameters
/// and remove a given aggregation item value from terms parameter
/// </summary>
/// <param name="context"></param>
/// <param name="aggregationItem">aggregation item</param>
/// <returns>example: /collection</returns>
public static string RemoveTermUrl(TemplateContext context, string facetName, string term)
{
var themeAdaptor = (ShopifyLiquidThemeEngine)context.TemplateLoader;
var result = themeAdaptor.WorkContext.RequestUrl.SetQueryParameter("filter", null);
return result?.PathAndQuery;
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/ILiquidThemeEngine.cs
================================================
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
namespace VirtoCommerce.LiquidThemeEngine
{
public interface ILiquidThemeEngine
{
IEnumerable<string> DiscoveryPaths { get; }
string ResolveTemplatePath(string templateName);
ValueTask<string> RenderTemplateByNameAsync(string templateName, object context);
ValueTask<string> RenderTemplateAsync(string templateContent, string templatePath, object context);
IDictionary<string, object> GetSettings(string defaultValue = null);
JObject ReadLocalization();
Task<Stream> GetAssetStreamAsync(string filePath);
string GetAssetHash(string filePath);
string GetAssetAbsoluteUrl(string assetName);
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/ILiquidViewEngine.cs
================================================
using Microsoft.AspNetCore.Mvc.ViewEngines;
namespace VirtoCommerce.LiquidThemeEngine
{
public interface ILiquidViewEngine : IViewEngine
{
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/ISassFileManager.cs
================================================
using LibSassHost;
namespace VirtoCommerce.LiquidThemeEngine
{
public interface ISassFileManager : IFileManager
{
string CurrentDirectory { get; set; }
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/JsonConverters/MutablePagedListAsArrayJsonConverter.cs
================================================
using System;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using VirtoCommerce.Storefront.Model.Common;
namespace VirtoCommerce.LiquidThemeEngine.JsonConverters
{
/// <summary>
///This converter is designed to force serialize all derived types from IMutablePagedLists as array.
///Because the main type MutablePagedList<> also derived from IDitionary that causes the default Json serializer to tries to serialize as a dictionary first.
/// </summary>
public class MutablePagedListAsArrayJsonConverter : JsonConverter
{
private readonly JsonSerializerSettings _jsonSettings;
public MutablePagedListAsArrayJsonConverter()
{
}
public MutablePagedListAsArrayJsonConverter(JsonSerializerSettings jsonSettings)
{
_jsonSettings = jsonSettings;
}
public override bool CanConvert(Type objectType)
{
return typeof(IMutablePagedList).IsAssignableFrom(objectType);
}
public override bool CanWrite => true;
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (_jsonSettings != null)
{
serializer = JsonSerializer.Create(_jsonSettings);
}
var toListMethod = typeof(Enumerable).GetMethod("ToList");
var constructedToList = toListMethod.MakeGenericMethod(value.GetType().GetGenericArguments()[0]);
var list = constructedToList.Invoke(null, new object[] { value });
//Force serialize MutablePagedList type as array, instead of dictionary
var result = JArray.FromObject(list, serializer);
result.WriteTo(writer);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/LiquidThemeEngineOptions.cs
================================================
using System;
using System.Collections.Generic;
namespace VirtoCommerce.LiquidThemeEngine
{
public class LiquidThemeEngineOptions
{
public string DefaultLayout { get; set; } = "theme";
public IList<string> TemplatesDiscoveryFolders { get; set; } = new List<string>() { "templates", "snippets", "layout", "assets" };
public string ThemesAssetsRelativeUrl { get; set; } = "~/themes/assets";
public bool RethrowLiquidRenderErrors { get; set; } = false;
/// <summary>
/// The path to the base theme that will be used to discover the theme resources not found by the path of theme for current store.
/// This parameter can be used for theme inheritance logic.
/// Example values:
/// Electronics/default -> wwwroot/cms-content/Themes/Electronics/default
/// default-> wwwroot/cms-content/Themes/default
/// </summary>
public string BaseThemePath { get; set; }
/// <summary>
/// Original description:
/// The name of the base theme that will be used to discover the theme resources not found by the path of theme for current store.
/// This parameter can be used for theme inheritance logic.
/// Example values: default_theme -> wwwroot/cms-content/default_theme
///
/// How it actually worked:
/// Storefront used this parameter as a store name, i.e. Electronics -> wwwroot/cms-content/Themes/Electronics/default
/// </summary>
[Obsolete("Obsolete. Use BaseThemePath instead.")]
public string BaseThemeName { get; set; }
/// <summary>
/// Set to true if you want to merge current theme settings with base theme settings instead of placement
/// </summary>
public bool MergeBaseSettings { get; set; }
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/LiquidThemedView.cs
================================================
using System;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewEngines;
using VirtoCommerce.LiquidThemeEngine.Scriban;
using VirtoCommerce.Storefront.Model;
using VirtoCommerce.Storefront.Model.Common;
namespace VirtoCommerce.LiquidThemeEngine
{
public class LiquidThemedView : IView
{
private readonly ILiquidThemeEngine _liquidThemeEngine;
private readonly string _viewName;
private readonly bool _isMainPage;
private readonly IWorkContextAccessor _workContextAccessor;
private readonly IStorefrontUrlBuilder _urlBuilder;
public LiquidThemedView(IWorkContextAccessor workContextAccessor, IStorefrontUrlBuilder urlBuilder, ILiquidThemeEngine themeEngine, string viewName, string path, bool isMainPage)
{
if (string.IsNullOrEmpty(viewName))
{
throw new ArgumentNullException(nameof(viewName));
}
_workContextAccessor = workContextAccessor;
_urlBuilder = urlBuilder;
_liquidThemeEngine = themeEngine ?? throw new ArgumentNullException(nameof(themeEngine));
_viewName = viewName;
_isMainPage = isMainPage;
Path = path;
}
public string Path { get; private set; }
#region IView members
public virtual Task RenderAsync(ViewContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
return RenderInternalAsync(context);
}
#endregion
protected virtual async Task RenderInternalAsync(ViewContext context)
{
var workContext = _workContextAccessor.WorkContext;
//Set current template
workContext.Template = _viewName;
workContext.Version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
var formErrors = context.ViewData.ModelState.Where(x => x.Value.Errors.Any())
.SelectMany(x => x.Value.Errors.Select(y => new FormError { Code = x.Key.PascalToKebabCase(), Description = y.ErrorMessage })).ToList();
if (workContext.Form == null)
{
workContext.Form = new Form();
}
workContext.Form.PostedSuccessfully = !string.Equals(context.HttpContext.Request.Method, "GET", StringComparison.InvariantCultureIgnoreCase);
if (formErrors.Any())
{
workContext.Form.Errors.AddRange(formErrors);
workContext.Form.PostedSuccessfully = false;
}
//Add settings to context
workContext.Settings = _liquidThemeEngine.GetSettings();
if (string.IsNullOrEmpty(_workContextAccessor.WorkContext.ErrorMessage))
{
workContext.ErrorMessage = workContext.Form.Errors.FirstOrDefault()?.Description;
}
var scriptObject = workContext.ToScriptObject();
var result = await _liquidThemeEngine.RenderTemplateByNameAsync(_viewName, scriptObject);
// don't use layouts for partial views when masterViewName is not specified
if (_isMainPage)
{
var masterViewName = workContext.Layout ?? "theme";
var headerTemplate = _liquidThemeEngine.ResolveTemplatePath("content_header") == null ? "" : await _liquidThemeEngine.RenderTemplateByNameAsync("content_header", scriptObject);
//add special placeholder 'content_for_layout' to content it will be replaced in master page by main content
scriptObject.Add("content_for_layout", result);
scriptObject.Add("content_for_header", headerTemplate);
result = await _liquidThemeEngine.RenderTemplateByNameAsync(masterViewName, scriptObject);
}
await context.Writer.WriteAsync(result);
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/LiquidThemedViewEngine.cs
================================================
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ViewEngines;
using VirtoCommerce.Storefront.Model;
using VirtoCommerce.Storefront.Model.Common;
namespace VirtoCommerce.LiquidThemeEngine
{
public class LiquidThemedViewEngine : ILiquidViewEngine
{
private readonly ILiquidThemeEngine _themeEngine;
private readonly IWorkContextAccessor _workContextAccessor;
private readonly IStorefrontUrlBuilder _urlBuilder;
public LiquidThemedViewEngine(IWorkContextAccessor workContextAccessor, IStorefrontUrlBuilder urlBuilder, ILiquidThemeEngine themeEngine)
{
_themeEngine = themeEngine;
_workContextAccessor = workContextAccessor;
_urlBuilder = urlBuilder;
}
#region IViewEngine members
public ViewEngineResult FindView(ActionContext context, string viewName, bool isMainPage)
{
return InnerGetView(viewName, isMainPage);
}
public ViewEngineResult GetView(string executingFilePath, string viewPath, bool isMainPage)
{
return InnerGetView(viewPath, isMainPage);
}
#endregion
protected ViewEngineResult InnerGetView(string view, bool isMainPage)
{
var searchedLocations = Enumerable.Empty<string>();
//Do not handle without a set WorkContext
if (_workContextAccessor.WorkContext != null)
{
var path = _themeEngine.ResolveTemplatePath(view);
if (!string.IsNullOrEmpty(path))
{
return ViewEngineResult.Found(view, new LiquidThemedView(_workContextAccessor, _urlBuilder, _themeEngine, view, path, isMainPage));
}
searchedLocations = _themeEngine.DiscoveryPaths.ToArray();
}
return ViewEngineResult.NotFound(view, searchedLocations);
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Objects/Paginate.cs
================================================
using System;
using System.Collections.Generic;
using PagedList.Core;
using VirtoCommerce.Storefront.Model.Common;
namespace VirtoCommerce.LiquidThemeEngine.Objects
{
/// <summary>
/// https://docs.shopify.com/themes/liquid-documentation/objects/paginate
/// The paginate tag's navigation is built using the attributes of the paginate object. You can also use the default_pagination filter for a quicker alternative.
/// </summary>
public partial class Paginate : ValueObject
{
private readonly IPagedList _pagedList;
public Paginate(IPagedList pagedList)
{
_pagedList = pagedList;
Parts = new List<Part>();
}
/// <summary>
/// Returns the number of the current page.
/// </summary>
public int CurrentPage
{
get
{
return _pagedList.PageNumber;
}
}
/// <summary>
/// Returns the total number of items that are on the pages previous to the current one. For example, if you are paginating by 5 and are on the third page, paginate.current_offset would return 10.
/// </summary>
public int CurrentOffset
{
get
{
return _pagedList.FirstItemOnPage;
}
}
/// <summary>
/// Returns the total number of items to be paginated. For example, if you are paginating a collection of 120 products, paginate.items would return 120.
/// </summary>
public int Items
{
get
{
return _pagedList.TotalItemCount;
}
}
/// <summary>
/// Returns the number of items displayed per page.
/// </summary>
public int PageSize
{
get
{
return _pagedList.PageSize;
}
}
/// <summary>
/// Returns the part variable for the Next link in the pagination navigation.
/// </summary>
public Part Next
{
get
{
Part retVal = null;
if (!_pagedList.IsLastPage)
{
retVal = Parts[CurrentPage];
}
return retVal;
}
}
/// <summary>
/// Returns the part variable for the Previous link in the pagination navigation.
/// </summary>
public Part Previous
{
get
{
Part retVal = null;
if (!_pagedList.IsFirstPage)
{
retVal = Parts[Math.Min(Parts.Count - 1, Math.Max(0, CurrentPage - 2))];
}
return retVal;
}
}
/// <summary>
/// Returns the number of pages created by the pagination tag.
/// </summary>
public int Pages
{
get
{
return _pagedList.PageCount;
}
}
/// <summary>
/// Returns an array of all parts of the pagination. A part is a component used to build the navigation for the pagination.
/// </summary>
public List<Part> Parts { get; set; }
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Objects/Part.cs
================================================
using VirtoCommerce.Storefront.Model.Common;
namespace VirtoCommerce.LiquidThemeEngine.Objects
{
/// <summary>
/// https://docs.shopify.com/themes/liquid-documentation/objects/part
/// Each part returned by the paginate.parts array represents a link in the pagination's navigation.
/// </summary>
public partial class Part : ValueObject
{
/// <summary>
/// Returns true if the part is a link, returns false if it is not.
/// </summary>
public bool IsLink { get; set; }
/// <summary>
/// Returns the title of the part.
/// </summary>
public string Title { get; set; }
/// <summary>
/// Returns the URL of the part.
/// </summary>
public string Url { get; set; }
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/SassFileManager.cs
================================================
using System;
using System.IO;
using VirtoCommerce.Storefront.Model.Common;
using VirtoCommerce.Storefront.Model.StaticContent;
namespace VirtoCommerce.LiquidThemeEngine
{
public class SassFileManager : ISassFileManager
{
private readonly IContentBlobProvider _contentBlobProvider;
public bool SupportsConversionToAbsolutePath { get; } = false;
public string CurrentDirectory { get; set; }
public SassFileManager(IContentBlobProvider contentBlobProvider)
{
_contentBlobProvider = contentBlobProvider;
}
public string GetCurrentDirectory() => CurrentDirectory;
public bool FileExists(string path)
{
// Workaround for directories
if (string.IsNullOrEmpty(Path.GetExtension(path)))
{
return false;
}
return _contentBlobProvider.PathExists(path);
}
public bool IsAbsolutePath(string path)
{
return Path.GetDirectoryName(path).StartsWith(CurrentDirectory);
}
public string ToAbsolutePath(string path)
{
throw new NotImplementedException();
}
public string ReadFile(string path)
{
return _contentBlobProvider.OpenRead(path).ReadToString();
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/Scriban/WorkContextConverter.cs
================================================
using System;
using Scriban.Runtime;
using VirtoCommerce.LiquidThemeEngine.Filters;
using VirtoCommerce.Storefront.Model;
namespace VirtoCommerce.LiquidThemeEngine.Scriban
{
public static class WorkContextConverter
{
public static ScriptObject ToScriptObject(this WorkContext workContext)
{
var scriptObject = new ScriptObject();
scriptObject.Import(workContext);
scriptObject.Import(typeof(CommonFilters));
scriptObject.Import(typeof(CommerceFilters));
scriptObject.Import(typeof(TranslationFilter));
scriptObject.Import(typeof(UrlFilters));
scriptObject.Import(typeof(MoneyFilters));
scriptObject.Import(typeof(HtmlFilters));
scriptObject.Import(typeof(StringFilters));
scriptObject.Import(typeof(ArrayFilters));
scriptObject.Import(typeof(MathFilters));
scriptObject.Import(typeof(StandardFilters));
scriptObject.Import(typeof(FeatureFilter));
scriptObject.Import(typeof(DataSourceFilter));
scriptObject.SetValue("context", scriptObject, true);
scriptObject.SetValue("blank", EmptyScriptObject.Default, true);
//Store special layout setter action in the context, it is allows to set the WorkContext.Layout property from template during rendering in the CommonFilters.Layout function
Action<string> layoutSetter = (layout) => workContext.Layout = layout;
scriptObject.Add("layout_setter", layoutSetter);
return scriptObject;
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/SettingsManager.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json.Linq;
using VirtoCommerce.Storefront.Model.Common.Exceptions;
namespace VirtoCommerce.LiquidThemeEngine
{
public static class SettingsManager
{
public class Settings
{
public Preset CurrentPreset { get; set; }
public IList<Preset> Presets { get; set; } = new List<Preset>();
}
public class Preset
{
public string Name { get; set; }
public JObject Json { get; set; }
}
public static JObject Merge(JObject baseJson, JObject currentJson)
{
if (baseJson == null)
{
throw new ArgumentNullException(nameof(baseJson));
}
if (currentJson == null)
{
throw new ArgumentNullException(nameof(currentJson));
}
var baseSettings = ReadSettings(baseJson);
var currentSettings = ReadSettings(currentJson);
//Change the current preset for base doc according to head preset value if it specified
if (!string.IsNullOrEmpty(currentSettings.CurrentPreset.Name))
{
baseSettings.CurrentPreset = baseSettings.Presets.FirstOrDefault(x => x.Name == currentSettings.CurrentPreset.Name);
}
var result = baseSettings.CurrentPreset?.Json ?? new JObject();
result.Merge(currentSettings.CurrentPreset.Json, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Merge });
return result;
}
public static Settings ReadSettings(JObject json)
{
var result = new Settings
{
CurrentPreset = new Preset
{
Json = json
}
};
if (json.GetValue("presets") is JObject presetsJson)
{
var allPresetsJsonProperties = presetsJson.Children().Cast<JProperty>().ToList();
foreach (var presetJsonProperty in allPresetsJsonProperties)
{
var preset = new Preset
{
Name = presetJsonProperty.Name,
Json = presetJsonProperty.Value as JObject
};
result.Presets.Add(preset);
}
}
var currentPresetJsonToken = json.GetValue("current");
if (currentPresetJsonToken is JValue currentPresetJsonValue)
{
var presetName = currentPresetJsonValue.Value.ToString();
var currentPresetJson = result.Presets.FirstOrDefault(x => x.Name == presetName)?.Json;
if (currentPresetJson == null && result.Presets.Any())
{
throw new StorefrontException($"Setting preset with name '{presetName}' not found");
}
result.CurrentPreset.Name = presetName;
result.CurrentPreset.Json = currentPresetJson ?? json;
}
if (currentPresetJsonToken is JObject)
{
result.CurrentPreset.Json = currentPresetJsonToken as JObject;
}
return result;
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/ShopifyLiquidThemeEngine.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using DotLiquid.ViewEngine.Exceptions;
using GraphQL.Client.Abstractions;
using LibSassHost;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Scriban;
using Scriban.Parsing;
using Scriban.Runtime;
using VirtoCommerce.LiquidThemeEngine.Scriban;
using VirtoCommerce.Storefront.Model;
using VirtoCommerce.Storefront.Model.Caching;
using VirtoCommerce.Storefront.Model.Common;
using VirtoCommerce.Storefront.Model.Common.Caching;
using VirtoCommerce.Storefront.Model.Common.Exceptions;
using VirtoCommerce.Storefront.Model.Features;
using VirtoCommerce.Storefront.Model.StaticContent;
namespace VirtoCommerce.LiquidThemeEngine
{
/// <summary>
/// Shopify compliant theme folder structure and all methods for rendering
/// assets - storages for css, images and other assets
/// config - contains theme configuration
/// layout - master pages and layouts
/// locales - localization resources
/// snippets - snippets - partial views
/// templates - view templates
/// </summary>
public class ShopifyLiquidThemeEngine : ILiquidThemeEngine, ITemplateLoader
{
private readonly LiquidThemeEngineOptions _options;
private static readonly Regex _isLiquid = new Regex("[{}|]", RegexOptions.Compiled);
private const string _liquidTemplateFormat = "{0}.liquid";
private readonly IWorkContextAccessor _workContextAccessor;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IStorefrontMemoryCache _memoryCache;
private readonly IContentBlobProvider _themeBlobProvider;
private readonly ISassFileManager _sassFileManager;
private readonly IFeaturesAgent _featuresAgent;
private readonly IGraphQLClient _graphQLClient;
public ShopifyLiquidThemeEngine(
IStorefrontMemoryCache memoryCache
, IWorkContextAccessor workContextAccessor
, IHttpContextAccessor httpContextAccessor
, IStorefrontUrlBuilder storeFrontUrlBuilder
, IContentBlobProvider contentBlobProvider
, ISassFileManager sassFileManager
, IOptions<LiquidThemeEngineOptions> options
, IFeaturesAgent featuresAgent
, IGraphQLClient graphQLClient)
{
_workContextAccessor = workContextAccessor;
_httpContextAccessor = httpContextAccessor;
UrlBuilder = storeFrontUrlBuilder;
_options = options.Value;
_memoryCache = memoryCache;
_themeBlobProvider = contentBlobProvider;
_sassFileManager = sassFileManager;
_featuresAgent = featuresAgent;
_graphQLClient = graphQLClient;
SassCompiler.FileManager = sassFileManager;
}
/// <summary>
/// Main work context
/// </summary>
public WorkContext WorkContext => _workContextAccessor.WorkContext;
/// <summary>
/// Current HttpContext
/// </summary>
public HttpContext HttpContext => _httpContextAccessor.HttpContext;
public IGraphQLClient GraphQLClient => _graphQLClient;
/// <summary>
/// Store url builder
/// </summary>
public IStorefrontUrlBuilder UrlBuilder { get; }
/// <summary>
/// Default master view name
/// </summary>
public string MasterViewName => _options.DefaultLayout;
/// <summary>
/// Current theme name
/// </summary>
public string CurrentThemeName => !string.IsNullOrEmpty(WorkContext.CurrentStore.ThemeName) ? WorkContext.CurrentStore.ThemeName : "default";
public string CurrentThemeSettingPath => Path.Combine(CurrentThemePath, "config", GetSettingsFilePath());
public string CurrentThemeLocalePath => Path.Combine(CurrentThemePath, "locales");
/// <summary>
/// The path for current theme
/// </summary>
private string CurrentThemePath => Path.Combine("Themes", WorkContext.CurrentStore.Id, CurrentThemeName);
//Relative path to the discovery of theme resources that weren't found by the current path.
private string BaseThemePath
{
get
{
if (!string.IsNullOrEmpty(_options.BaseThemePath))
{
return Path.Combine("Themes", _options.BaseThemePath);
}
#pragma warning disable 618
// We need to use obsolete value here for backward compatibility.
return !string.IsNullOrEmpty(_options.BaseThemeName) ? Path.Combine("Themes", _options.BaseThemeName, "default") : null;
#pragma warning restore 618
}
}
private string BaseThemeSettingPath => BaseThemePath != null ? Path.Combine(BaseThemePath, "config", "settings_data.json") : null;
public string BaseThemeLocalePath => BaseThemePath != null ? Path.Combine(BaseThemePath, "locales") : null;
#region ITemplateLoader members
public string GetPath(TemplateContext context, SourceSpan callerSpan, string templateName)
{
return ResolveTemplatePath(templateName);
}
public string Load(TemplateContext context, SourceSpan callerSpan, string templatePath)
{
var content = ReadTemplateByPath(templatePath);
return content;
}
public ValueTask<string> LoadAsync(TemplateContext context, SourceSpan callerSpan, string templatePath)
{
return new ValueTask<string>(Load(context, callerSpan, templatePath));
}
#endregion
#region ILiquidThemeEngine Members
public IEnumerable<string> DiscoveryPaths
{
get
{
var retVal = Enumerable.Empty<string>();
if (WorkContext.CurrentStore != null)
{
retVal = _options.TemplatesDiscoveryFolders.Select(x => Path.Combine(CurrentThemePath, x));
if (BaseThemePath != null)
{
retVal = retVal.Concat(_options.TemplatesDiscoveryFolders.Select(x => Path.Combine(BaseThemePath, x)));
}
}
return retVal;
}
}
/// <summary>
/// Return stream for requested asset file (used for search current and base themes assets)
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public async Task<Stream> GetAssetStreamAsync(string filePath)
{
Stream retVal = null;
var filePathWithoutExtension = Path.Combine(Path.GetDirectoryName(filePath), Path.GetFileNameWithoutExtension(filePath));
var searchPatterns = new[] { filePath, string.Format(_liquidTemplateFormat, filePathWithoutExtension), string.Format(_liquidTemplateFormat, filePath), filePathWithoutExtension };
string currentThemeFilePath = null;
//try to search in current store theme
if (_themeBlobProvider.PathExists(Path.Combine(CurrentThemePath, "assets")))
{
currentThemeFilePath = searchPatterns.SelectMany(x => _themeBlobProvider.Search(Path.Combine(CurrentThemePath, "assets"), x, true)).FirstOrDefault();
}
//If not found by current theme path try find them by base path if it is defined
if (currentThemeFilePath == null && BaseThemePath != null)
{
currentThemeFilePath = searchPatterns.SelectMany(x => _themeBlobProvider.Search(Path.Combine(BaseThemePath, "assets"), x, true)).FirstOrDefault();
}
if (currentThemeFilePath != null)
{
retVal = _themeBlobProvider.OpenRead(currentThemeFilePath);
filePath = currentThemeFilePath;
}
if (retVal != null && filePath.EndsWith(".liquid"))
{
var context = WorkContext.Clone() as WorkContext;
context.Settings = GetSettings("''");
var templateContent = retVal.ReadToString();
retVal.Dispose();
var template = await RenderTemplateAsync(templateContent, filePath, context.ToScriptObject());
retVal = new MemoryStream(Encoding.UTF8.GetBytes(template));
}
if (retVal != null && (filePath.Contains(".scss.") && filePath.EndsWith(".liquid") || filePath.EndsWith(".scss")))
{
var content = retVal.ReadToString();
retVal.Dispose();
try
{
//handle scss resources
_sassFileManager.CurrentDirectory = Path.GetDirectoryName(filePath);
var result = SassCompiler.Compile(content);
content = result.CompiledContent;
retVal = new MemoryStream(Encoding.UTF8.GetBytes(content));
}
catch (Exception ex)
{
throw new SaasCompileException(filePath, content, ex);
}
}
return retVal;
}
/// <summary>
/// Return hash of requested asset (used for file versioning)
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public string GetAssetHash(string filePath)
{
var cacheKey = CacheKey.With(GetType(), "GetAssetHash", filePath);
return _memoryCache.GetOrCreateExclusive(cacheKey, (cacheEntry) =>
{
cacheEntry.AddExpirationToken(new CompositeChangeToken(new[] { ThemeEngineCacheRegion.CreateChangeToken(), _themeBlobProvider.Watch(filePath), _themeBlobProvider.Watch(CurrentThemeSettingPath) }));
using var stream = GetAssetStreamAsync(filePath).GetAwaiter().GetResult();
if (stream == null)
{
throw new StorefrontException($"Theme resource for path '{filePath}' not found");
}
var hashAlgorithm = SHA256.Create();
return WebEncoders.Base64UrlEncode(hashAlgorithm.ComputeHash(stream));
});
}
/// <summary>
/// resolve template path by it name
/// </summary>
/// <param name="templateName"></param>
/// <returns></returns>
public string ResolveTemplatePath(string templateName)
{
if (WorkContext.CurrentStore == null)
{
return null;
}
var liquidTemplateFileName = string.Format(_liquidTemplateFormat, templateName);
//If not found by current theme path try find them by base path if it is defined
var curentThemeDiscoveryPaths = _options.TemplatesDiscoveryFolders.Select(x => Path.Combine(CurrentThemePath, x, liquidTemplateFileName));
if (BaseThemePath != null)
{
curentThemeDiscoveryPaths = curentThemeDiscoveryPaths.Concat(_options.TemplatesDiscoveryFolders.Select(x => Path.Combine(BaseThemePath, x, liquidTemplateFileName)));
}
//Try to find template in current theme folder
return curentThemeDiscoveryPaths.FirstOrDefault(x => _themeBlobProvider.PathExists(x));
}
/// <summary>
/// Render template by name and with passed context (parameters)
/// </summary>
/// <param name="templateName"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public ValueTask<string> RenderTemplateByNameAsync(string templateName, object context)
{
if (string.IsNullOrEmpty(templateName))
{
throw new ArgumentNullException(nameof(templateName));
}
return RenderTemplateByNameInternalAsync(templateName, context);
}
private async ValueTask<string> RenderTemplateByNameInternalAsync(string templateName, object context)
{
var templatePath = ResolveTemplatePath(templateName);
if (string.IsNullOrEmpty(templatePath))
{
throw new FileNotFoundException($"The template '{templateName}' was not found. The following locations were searched:<br/>{string.Join("<br/>", DiscoveryPaths)}");
}
var templateContent = ReadTemplateByPath(templatePath);
var retVal = await RenderTemplateAsync(templateContent, templatePath, context);
return retVal;
}
/// <summary>
/// Render template by content and parameters
/// </summary>
/// <param name="templateContent"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public ValueTask<string> RenderTemplateAsync(string templateContent, string templatePath, object context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
if (!(context is IScriptObject scriptObject))
{
throw new StorefrontException($"{nameof(context)} must implement IScriptObject");
}
if (string.IsNullOrEmpty(templateContent))
{
return new ValueTask<string>(templateContent);
}
var isLiquidTemplate = _isLiquid.Match(templateContent);
if (!isLiquidTemplate.Success)
{
return new ValueTask<string>(templateContent);
}
var cacheKey = CacheKey.With(GetType(), "ParseTemplate", templatePath ?? templateContent);
var parsedTemplate = _memoryCache.GetOrCreate(cacheKey, (cacheItem) =>
{
if (!string.IsNullOrEmpty(templatePath))
{
cacheItem.AddExpirationToken(new CompositeChangeToken(new[] { ThemeEngineCacheRegion.CreateChangeToken(), _themeBlobProvider.Watch(templatePath) }));
}
else
{
cacheItem.AddExpirationToken(ThemeEngineCacheRegion.CreateChangeToken());
}
return Template.ParseLiquid(templateContent, templatePath);
});
if (parsedTemplate.HasErrors)
{
throw new InvalidOperationException(string.Join("\n", parsedTemplate.Messages));
}
var templateContext = new TemplateContext()
{
TemplateLoader = this,
EnableRelaxedMemberAccess = true,
NewLine = Environment.NewLine,
TemplateLoaderLexerOptions = new LexerOptions
{
Mode = ScriptMode.Default,
Lang = ScriptLang.Liquid
}
};
templateContext.PushGlobal(scriptObject);
var result = parsedTemplate.Render(templateContext);
return new ValueTask<string>(result);
}
/// <summary>
/// Read shopify theme settings from 'config' folder
/// </summary>
/// <param name="defaultValue"></param>
/// <returns></returns>
public IDictionary<string, object> GetSettings(string defaultValue = null)
{
var cacheKey = CacheKey.With(GetType(), "GetSettings", CurrentThemeSettingPath, defaultValue);
return _memoryCache.GetOrCreateExclusive(cacheKey, cacheItem =>
{
cacheItem.AddExpirationToken(new CompositeChangeToken(new[] { ThemeEngineCacheRegion.CreateChangeToken(), _themeBlobProvider.Watch(CurrentThemeSettingPath) }));
var baseThemeSettings = new JObject();
var currentThemeSettings = InnerGetAllSettings(_themeBlobProvider, CurrentThemeSettingPath);
//Try to load settings from base theme path and merge them with resources for local theme
if ((_options.MergeBaseSettings || currentThemeSettings == null) && !string.IsNullOrEmpty(BaseThemeSettingPath))
{
cacheItem.AddExpirationToken(new CompositeChangeToken(new[] { ThemeEngineCacheRegion.CreateChangeToken(), _themeBlobProvider.Watch(BaseThemeSettingPath) }));
baseThemeSettings = InnerGetAllSettings(_themeBlobProvider, BaseThemeSettingPath);
}
var result = _options.MergeBaseSettings
? SettingsManager.Merge(baseThemeSettings, currentThemeSettings ?? new JObject())
: SettingsManager.ReadSettings(currentThemeSettings ?? new JObject()).CurrentPreset.Json;
return result.ToObject<Dictionary<string, object>>().ToDictionary(x => x.Key, x => x.Value).WithDefaultValue(defaultValue);
});
}
/// <summary>
/// Read localization resources
/// </summary>
/// <returns></returns>
public JObject ReadLocalization()
{
var cacheKey = CacheKey.With(GetType(), "ReadLocalization", CurrentThemeLocalePath, WorkContext.CurrentLanguage.CultureName);
return _memoryCache.GetOrCreateExclusive(cacheKey, (cacheItem) =>
{
var result = new JObject();
cacheItem.AddExpirationToken(new CompositeChangeToken(new[] { ThemeEngineCacheRegion.CreateChangeToken(), _themeBlobProvider.Watch(CurrentThemeLocalePath + "/*") }));
//Try to load localization resources from base theme path and merge them with resources for local theme
if (BaseThemeLocalePath != null)
{
cacheItem.AddExpirationToken(new CompositeChangeToken(new[] { ThemeEngineCacheRegion.CreateChangeToken(), _themeBlobProvider.Watch(BaseThemeLocalePath + "/*") }));
result = InnerReadLocalization(_themeBlobProvider, BaseThemeLocalePath, WorkContext.CurrentLanguage) ?? new JObject();
}
result.Merge(InnerReadLocalization(_themeBlobProvider, CurrentThemeLocalePath, WorkContext.CurrentLanguage) ?? new JObject(), new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Merge });
return result;
});
}
/// <summary>
/// Get relative url for assets (assets folder)
/// </summary>
/// <param name="assetName"></param>
/// <returns></returns>
public string GetAssetAbsoluteUrl(string assetName)
{
const char delimiter = '/';
return UrlBuilder.ToAppAbsolute(_options.ThemesAssetsRelativeUrl.TrimEnd(delimiter) + delimiter + assetName.TrimStart(delimiter), WorkContext.CurrentStore, WorkContext.CurrentLanguage);
}
#endregion
private static JObject InnerReadLocalization(IContentBlobProvider themeBlobProvider, string localePath, Language language)
{
JObject retVal = null;
if (themeBlobProvider.PathExists(localePath))
{
JObject localeJson = null;
JObject defaultJson = null;
foreach (var languageName in new[] { language.CultureName, language.TwoLetterLanguageName })
{
var currentLocalePath = Path.Combine(localePath, string.Concat(languageName, ".json"));
if (themeBlobProvider.PathExists(currentLocalePath))
{
using var stream = themeBlobProvider.OpenRead(currentLocalePath);
localeJson = JsonConvert.DeserializeObject<dynamic>(stream.ReadToString());
break;
}
}
var localeDefaultPath = themeBlobProvider.Search(localePath, "*.default.json", false).FirstOrDefault();
if (localeDefaultPath != null && themeBlobProvider.PathExists(localeDefaultPath))
{
using var stream = themeBlobProvider.OpenRead(localeDefaultPath);
defaultJson = JsonConvert.DeserializeObject<dynamic>(stream.ReadToString());
}
//Need merge default and requested localization json to resulting object
retVal = defaultJson ?? localeJson;
if (defaultJson != null && localeJson != null)
{
retVal.Merge(localeJson, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Merge });
}
}
return retVal;
}
private static JObject InnerGetAllSettings(IContentBlobProvider themeBlobProvider, string settingsPath)
{
if (settingsPath == null)
{
throw new ArgumentNullException(nameof(settingsPath));
}
var result = new JObject();
if (themeBlobProvider.PathExists(settingsPath))
{
using var stream = themeBlobProvider.OpenRead(settingsPath);
result = JsonConvert.DeserializeObject<JObject>(stream.ReadToString());
}
return result;
}
private string ReadTemplateByPath(string templatePath)
{
if (string.IsNullOrEmpty(templatePath))
{
throw new ArgumentNullException(nameof(templatePath));
}
var cacheKey = CacheKey.With(GetType(), "ReadTemplateByName", templatePath);
return _memoryCache.GetOrCreateExclusive(cacheKey, (cacheItem) =>
{
cacheItem.AddExpirationToken(new CompositeChangeToken(new[] { ThemeEngineCacheRegion.CreateChangeToken(), _themeBlobProvider.Watch(templatePath) }));
using var stream = _themeBlobProvider.OpenRead(templatePath);
return stream.ReadToString();
});
}
private string GetSettingsFilePath()
{
var prefix = _httpContextAccessor.HttpContext.Request.Query["preview_mode"];
return prefix.ToString().IsNullOrEmpty() ? "settings_data.json" : $"drafts\\{prefix}_settings_data.json";
}
public bool IsFeatureActive(string featureName)
{
var cacheKey = CacheKey.With(GetType(), nameof(IsFeatureActive), featureName);
return _memoryCache.GetOrCreateExclusive(cacheKey, cacheEntry =>
{
var changeToken = ThemeEngineCacheRegion.CreateChangeToken();
var watchChangeToken = _themeBlobProvider.Watch(CurrentThemeSettingPath);
var tokens = new[]
{
changeToken, watchChangeToken
};
var compositeChangeToken = new CompositeChangeToken(tokens);
cacheEntry.AddExpirationToken(compositeChangeToken);
var settingJObject = InnerGetAllSettings(_themeBlobProvider, CurrentThemeSettingPath);
var result = _featuresAgent.IsActive(featureName, settingJObject);
return result;
});
}
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/ThemeEngineCacheRegion.cs
================================================
using VirtoCommerce.Storefront.Model.Common.Caching;
namespace VirtoCommerce.LiquidThemeEngine
{
public class ThemeEngineCacheRegion : CancellableCacheRegion<ThemeEngineCacheRegion>
{
}
}
================================================
FILE: VirtoCommerce.LiquidThemeEngine/VirtoCommerce.LiquidThemeEngine.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Description>The storefront implementation of the Virto Commerce platform.</Description>
<PackageLicenseUrl>https://virtocommerce.com/open-source-license</PackageLicenseUrl>
<PackageProjectUrl>https://github.com/VirtoCommerce/vc-storefront-core</PackageProjectUrl>
<PackageIconUrl>https://virtocommerce.com/themes/assets/logo.jpg</PackageIconUrl>
<RepositoryUrl>https://github.com/VirtoCommerce/vc-storefront-core</RepositoryUrl>
<IsPackable>False</IsPackable>
<OutputType>Library</OutputType>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="GraphQL.Client" Version="6.0.3" />
<PackageReference Include="LibSassHost" Version="1.4.0" />
<PackageReference Include="LibSassHost.Native.linux-x64" Version="1.4.0" />
<PackageReference Include="LibSassHost.Native.osx-x64" Version="1.4.0" />
<PackageReference Include="LibSassHost.Native.win-x64" Version="1.4.0" />
<PackageReference Include="LibSassHost.Native.win-x86" Version="1.4.0" />
<PackageReference Include="Nito.AsyncEx" Version="5.1.2" />
<PackageReference Include="PagedList.Core" Version="1.17.4" />
<PackageReference Include="Scriban" Version="5.9.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\VirtoCommerce.Storefront.Model\VirtoCommerce.Storefront.Model.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="Properties\" />
<Folder Include="Util\" />
</ItemGroup>
</Project>
================================================
FILE: VirtoCommerce.Storefront/.bowerrc
================================================
{
"directory": "wwwroot/lib"
}
================================================
FILE: VirtoCommerce.Storefront/AutoRestClients/!readme.txt
================================================
See there, how to generate AutoRest-generated clients with the Platform v.3:
https://github.com/VirtoCommerce/vc-platform/blob/dev/docs/developer-guide/using-autorest-with-v3.md
Simplest example to refresh all clients:
$modules = @('Platform', 'Cart', 'Catalog', 'Content', 'Core', 'Customer', 'Inventory', 'Marketing', 'Notifications', 'Orders', 'Payment', 'Pricing', 'Shipping', 'Sitemaps', 'Store', 'Subscription', 'Tax')
$modules.ForEach( { autoRest VirtoCommerce.Storefront\AutoRestClients\array-in-query-fix.yml --version=3.0.6274 --v3 --debug --input-file=http://localhost:10645/docs/VirtoCommerce.$_/swagger.json --output-folder=.\VirtoCommerce.Storefront\AutoRestClients --output-file=$_`ModuleApi.cs --namespace=VirtoCommerce.Storefront.AutoRestClients.$_`ModuleApi --override-client-name=$_`ModuleClient --add-credentials --csharp })
================================================
FILE: VirtoCommerce.Storefront/AutoRestClients/CatalogModuleApi.cs
================================================
// <auto-generated>
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
// </auto-generated>
namespace VirtoCommerce.Storefront.AutoRestClients.CatalogModuleApi
{
using Microsoft.Rest;
using Microsoft.Rest.Serialization;
using Models;
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
public partial class CatalogModuleClient : ServiceClient<CatalogModuleClient>, ICatalogModuleClient
{
/// <summary>
/// The base URI of the service.
/// </summary>
public System.Uri BaseUri { get; set; }
/// <summary>
/// Gets or sets json serialization settings.
/// </summary>
public JsonSerializerSettings SerializationSettings { get; private set; }
/// <summary>
/// Gets or sets json deserialization settings.
/// </summary>
public JsonSerializerSettings DeserializationSettings { get; private set; }
/// <summary>
/// Subscription credentials which uniquely identify client subscription.
/// </summary>
public ServiceClientCredentials Credentials { get; private set; }
/// <summary>
/// Gets the ICatalogModuleAssociations.
/// </summary>
public virtual ICatalogModuleAssociations CatalogModuleAssociations { get; private set; }
/// <summary>
/// Gets the ICatalogModuleCatalogs.
/// </summary>
public virtual ICatalogModuleCatalogs CatalogModuleCatalogs { get; private set; }
/// <summary>
/// Gets the ICatalogModuleCategories.
/// </summary>
public virtual ICatalogModuleCategories CatalogModuleCategories { get; private set; }
/// <summary>
/// Gets the ICatalogModuleIndexedSearch.
/// </summary>
public virtual ICatalogModuleIndexedSearch CatalogModuleIndexedSearch { get; private set; }
/// <summary>
/// Gets the ICatalogModuleListEntry.
/// </summary>
public virtual ICatalogModuleListEntry CatalogModuleListEntry { get; private set; }
/// <summary>
/// Gets the ICatalogModuleProducts.
/// </summary>
public virtual ICatalogModuleProducts CatalogModuleProducts { get; private set; }
/// <summary>
/// Gets the ICatalogModuleProperties.
/// </summary>
public virtual ICatalogModuleProperties CatalogModuleProperties { get; private set; }
/// <summary>
/// Gets the ICatalogModulePropertyDictionaryItems.
/// </summary>
public virtual ICatalogModulePropertyDictionaryItems CatalogModulePropertyDictionaryItems { get; private set; }
/// <summary>
/// Initializes a new instance of the CatalogModuleClient class.
/// </summary>
/// <param name='httpClient'>
/// HttpClient to be used
/// </param>
/// <param name='disposeHttpClient'>
/// True: will dispose the provided httpClient on calling CatalogModuleClient.Dispose(). False: will not dispose provided httpClient</param>
protected CatalogModuleClient(HttpClient httpClient, bool disposeHttpClient) : base(httpClient, disposeHttpClient)
{
Initialize();
}
/// <summary>
/// Initializes a new instance of the CatalogModuleClient class.
/// </summary>
/// <param name='handlers'>
/// Optional. The delegating handlers to add to the http client pipeline.
/// </param>
protected CatalogModuleClient(params DelegatingHandler[] handlers) : base(handlers)
{
Initialize();
}
/// <summary>
/// Initializes a new instance of the CatalogModuleClient class.
/// </summary>
/// <param name='rootHandler'>
/// Optional. The http client handler used to handle http transport.
/// </param>
/// <param name='handlers'>
/// Optional. The delegating handlers to add to the http client pipeline.
/// </param>
protected CatalogModuleClient(HttpClientHandler rootHandler, params DelegatingHandler[] handlers) : base(rootHandler, handlers)
{
Initialize();
}
/// <summary>
/// Initializes a new instance of the CatalogModuleClient class.
/// </summary>
/// <param name='baseUri'>
/// Optional. The base URI of the service.
/// </param>
/// <param name='handlers'>
/// Optional. The delegating handlers to add to the http client pipeline.
/// </param>
/// <exception cref="System.ArgumentNullException">
/// Thrown when a required parameter is null
/// </exception>
protected CatalogModuleClient(System.Uri baseUri, params DelegatingHandler[] handlers) : this(handlers)
{
if (baseUri == null)
{
throw new System.ArgumentNullException("baseUri");
}
BaseUri = baseUri;
}
/// <summary>
/// Initializes a new instance of the CatalogModuleClient class.
/// </summary>
/// <param name='baseUri'>
/// Optional. The base URI of the service.
/// </param>
/// <param name='rootHandler'>
/// Optional. The http client handler used to handle http transport.
/// </param>
/// <param name='handlers'>
/// Optional. The delegating handlers to add to the http client pipeline.
/// </param>
/// <exception cref="System.ArgumentNullException">
/// Thrown when a required parameter is null
/// </exception>
protected CatalogModuleClient(System.Uri baseUri, HttpClientHandler rootHandler, params DelegatingHandler[] handlers) : this(rootHandler, handlers)
{
if (baseUri == null)
{
throw new System.ArgumentNullException("baseUri");
}
BaseUri = baseUri;
}
/// <summary>
/// Initializes a new instance of the CatalogModuleClient class.
/// </summary>
/// <param name='credentials'>
/// Required. Subscription credentials which uniquely identify client subscription.
/// </param>
/// <param name='handlers'>
/// Optional. The delegating handlers to add to the http client pipeline.
/// </param>
/// <exception cref="System.ArgumentNullException">
/// Thrown when a required parameter is null
/// </exception>
public CatalogModuleClient(ServiceClientCredentials credentials, params DelegatingHandler[] handlers) : this(handlers)
{
if (credentials == null)
{
throw new System.ArgumentNullException("credentials");
}
Credentials = credentials;
if (Credentials != null)
{
Credentials.InitializeServiceClient(this);
}
}
/// <summary>
/// Initializes a new instance of the CatalogModuleClient class.
/// </summary>
/// <param name='credentials'>
/// Required. Subscription credentials which uniquely identify client subscription.
/// </param>
/// <param name='httpClient'>
/// HttpClient to be used
/// </param>
/// <param name='disposeHttpClient'>
/// True: will dispose the provided httpClient on calling CatalogModuleClient.Dispose(). False: will not dispose provided httpClient</param>
/// <exception cref="System.ArgumentNullException">
/// Thrown when a required parameter is null
/// </exception>
public CatalogModuleClient(ServiceClientCredentials credentials, HttpClient httpClient, bool disposeHttpClient) : this(httpClient, disposeHttpClient)
{
if (credentials == null)
{
throw new System.ArgumentNullException("credentials");
}
Credentials = credentials;
if (Credentials != null)
{
Credentials.InitializeServiceClient(this);
}
}
/// <summary>
/// Initializes a new instance of the CatalogModuleClient class.
/// </summary>
/// <param name='credentials'>
/// Required. Subscription credentials which uniquely identify client subscription.
/// </param>
/// <param name='rootHandler'>
/// Optional. The http client handler used to handle http transport.
/// </param>
/// <param name='handlers'>
/// Optional. The delegating handlers to add to the http client pipeline.
/// </param>
/// <exception cref="System.ArgumentNullException">
/// Thrown when a required parameter is null
/// </exception>
public CatalogModuleClient(ServiceClientCredentials credentials, HttpClientHandler rootHandler, params DelegatingHandler[] handlers) : this(rootHandler, handlers)
{
if (credentials == null)
{
throw new System.ArgumentNullException("credentials");
}
Credentials = credentials;
if (Credentials != null)
{
Credentials.InitializeServiceClient(this);
}
}
/// <summary>
/// Initializes a new instance of the CatalogModuleClient class.
/// </summary>
/// <param name='baseUri'>
/// Optional. The base URI of the service.
/// </param>
/// <param name='credentials'>
/// Required. Subscription credentials which uniquely identify client subscription.
/// </param>
/// <param name='handlers'>
/// Optional. The delegating handlers to add to the http client pipeline.
/// </param>
/// <exception cref="System.ArgumentNullException">
/// Thrown when a required parameter is null
/// </exception>
public CatalogModuleClient(System.Uri baseUri, ServiceClientCredentials credentials, params DelegatingHandler[] handlers) : this(handlers)
{
if (baseUri == null)
{
throw new System.ArgumentNullException("baseUri");
}
if (credentials == null)
{
throw new System.ArgumentNullException("credentials");
}
BaseUri = baseUri;
Credentials = credentials;
if (Credentials != null)
{
Credentials.InitializeServiceClient(this);
}
}
/// <summary>
/// Initializes a new instance of the CatalogModuleClient class.
/// </summary>
/// <param name='baseUri'>
/// Optional. The base URI of the service.
/// </param>
/// <param name='credentials'>
/// Required. Subscription credentials which uniquely identify client subscription.
/// </param>
/// <param name='rootHandler'>
/// Optional. The http client handler used to handle http transport.
/// </param>
/// <param name='handlers'>
/// Optional. The delegating handlers to add to the http client pipeline.
/// </param>
/// <exception cref="System.ArgumentNullException">
/// Thrown when a required parameter is null
/// </exception>
public CatalogModuleClient(System.Uri baseUri, ServiceClientCredentials credentials, HttpClientHandler rootHandler, params DelegatingHandler[] handlers) : this(rootHandler, handlers)
{
if (baseUri == null)
{
throw new System.ArgumentNullException("baseUri");
}
if (credentials == null)
{
throw new System.ArgumentNullException("credentials");
}
BaseUri = baseUri;
Credentials = credentials;
if (Credentials != null)
{
Credentials.InitializeServiceClient(this);
}
}
/// <summary>
/// An optional partial-method to perform custom initialization.
///</summary>
partial void CustomInitialize();
/// <summary>
/// Initializes client properties.
/// </summary>
private void Initialize()
{
CatalogModuleAssociations = new CatalogModuleAssociations(this);
CatalogModuleCatalogs = new CatalogModuleCatalogs(this);
CatalogModuleCategories = new CatalogModuleCategories(this);
CatalogModuleIndexedSearch = new CatalogModuleIndexedSearch(this);
CatalogModuleListEntry = new CatalogModuleListEntry(this);
CatalogModuleProducts = new CatalogModuleProducts(this);
CatalogModuleProperties = new CatalogModuleProperties(this);
CatalogModulePropertyDictionaryItems = new CatalogModulePropertyDictionaryItems(this);
BaseUri = new System.Uri("http://localhost");
SerializationSettings = new JsonSerializerSettings
{
Formatting = Newtonsoft.Json.Formatting.Indented,
DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc,
NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore,
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize,
ContractResolver = new ReadOnlyJsonContractResolver(),
Converters = new List<JsonConverter>
{
new Iso8601TimeSpanConverter()
}
};
DeserializationSettings = new JsonSerializerSettings
{
DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc,
NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore,
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize,
ContractResolver = new ReadOnlyJsonContractResolver(),
Converters = new List<JsonConverter>
{
new Iso8601TimeSpanConverter()
}
};
CustomInitialize();
}
}
}
// <auto-generated>
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
// </auto-generated>
namespace VirtoCommerce.Storefront.AutoRestClients.CatalogModuleApi
{
using Microsoft.Rest;
using Microsoft.Rest.Serialization;
using Models;
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
/// <summary>
/// </summary>
public partial interface ICatalogModuleClient : System.IDisposable
{
/// <summary>
/// The base URI of the service.
/// </summary>
System.Uri BaseUri { get; set; }
/// <summary>
/// Gets or sets json serialization settings.
/// </summary>
JsonSerializerSettings SerializationSettings { get; }
/// <summary>
/// Gets or sets json deserialization settings.
/// </summary>
JsonSerializerSettings DeserializationSettings { get; }
/// <summary>
/// Subscription credentials which uniquely identify client
/// subscription.
/// </summary>
ServiceClientCredentials Credentials { get; }
/// <summary>
/// Gets the ICatalogModuleAssociations.
/// </summary>
ICatalogModuleAssociations CatalogModuleAssociations { get; }
/// <summary>
/// Gets the ICatalogModuleCatalogs.
/// </summary>
ICatalogModuleCatalogs CatalogModuleCatalogs { get; }
/// <summary>
/// Gets the ICatalogModuleCategories.
/// </summary>
ICatalogModuleCategories CatalogModuleCategories { get; }
/// <summary>
/// Gets the ICatalogModuleIndexedSearch.
/// </summary>
ICatalogModuleIndexedSearch CatalogModuleIndexedSearch { get; }
/// <summary>
/// Gets the ICatalogModuleListEntry.
/// </summary>
ICatalogModuleListEntry CatalogModuleListEntry { get; }
/// <summary>
/// Gets the ICatalogModuleProducts.
/// </summary>
ICatalogModuleProducts CatalogModuleProducts { get; }
/// <summary>
/// Gets the ICatalogModuleProperties.
/// </summary>
ICatalogModuleProperties CatalogModuleProperties { get; }
/// <summary>
/// Gets the ICatalogModulePropertyDictionaryItems.
/// </summary>
ICatalogModulePropertyDictionaryItems CatalogModulePropertyDictionaryItems { get; }
}
}
// <auto-generated>
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
// </auto-generated>
namespace VirtoCommerce.Storefront.AutoRestClients.CatalogModuleApi
{
using Microsoft.Rest;
using Microsoft.Rest.Serialization;
using Models;
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
/// <summary>
/// CatalogModuleAssociations operations.
/// </summary>
public partial class CatalogModuleAssociations : IServiceOperations<CatalogModuleClient>, ICatalogModuleAssociations
{
/// <summary>
/// Initializes a new instance of the CatalogModuleAssociations class.
/// </summary>
/// <param name='client'>
/// Reference to the service client.
/// </param>
/// <exception cref="System.ArgumentNullException">
/// Thrown when a required parameter is null
/// </exception>
public CatalogModuleAssociations(CatalogModuleClient client)
{
if (client == null)
{
throw new System.ArgumentNullException("client");
}
Client = client;
}
/// <summary>
/// Gets a reference to the CatalogModuleClient
/// </summary>
public CatalogModuleClient Client { get; private set; }
/// <summary>
/// Returns list of associations for specified product
/// </summary>
/// <remarks>
/// Returns list of associations for specified product
/// </remarks>
/// <param name='productId'>
/// Owner product id
/// </param>
/// <param name='customHeaders'>
/// Headers that will be added to request.
/// </param>
/// <param name='cancellationToken'>
/// The cancellation token.
/// </param>
/// <exception cref="HttpOperationException">
/// Thrown when the operation returned an invalid status code
/// </exception>
/// <exception cref="SerializationException">
/// Thrown when unable to deserialize the response
/// </exception>
/// <exception cref="ValidationException">
/// Thrown when a required parameter is null
/// </exception>
/// <exception cref="System.ArgumentNullException">
/// Thrown when a required parameter is null
/// </exception>
/// <return>
/// A response object containing the response body and response headers.
/// </return>
public async Task<HttpOperationResponse<IList<ProductAssociation>>> GetAllAssociationsWithHttpMessagesAsync(string productId, Dictionary<string, List<string>> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
{
if (productId == null)
{
throw new ValidationException(ValidationRules.CannotBeNull, "productId");
}
// Tracing
bool _shouldTrace = ServiceClientTracing.IsEnabled;
string _invocationId = null;
if (_shouldTrace)
{
_invocationId = ServiceClientTracing.NextInvocationId.ToString();
Dictionary<string, object> tracingParameters = new Dictionary<string, object>();
tracingParameters.Add("productId", productId);
tracingParameters.Add("cancellationToken", cancellationToken);
ServiceClientTracing.Enter(_invocationId, this, "GetAllAssociations", tracingParameters);
}
// Construct URL
var _baseUrl = Client.BaseUri.AbsoluteUri;
var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "api/catalog/products/associations/{productId}").ToString();
_url = _url.Replace("{productId}", System.Uri.EscapeDataString(productId));
// Create HTTP transport objects
var _httpRequest = new HttpRequestMessage();
HttpResponseMessage _httpResponse = null;
_httpRequest.Method = new HttpMethod("GET");
_httpRequest.RequestUri = new System.Uri(_url);
// Set Headers
if (customHeaders != null)
{
foreach(var _header in customHeaders)
{
if (_httpRequest.Headers.Contains(_header.Key))
{
_httpRequest.Headers.Remove(_header.Key);
}
_httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
}
}
// Serialize Request
string _requestContent = null;
// Set Credentials
if (Client.Credentials != null)
{
cancellationToken.ThrowIfCancellationRequested();
await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
}
// Send Request
if (_shouldTrace)
{
ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
}
cancellationToken.ThrowIfCancellationRequested();
_httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
if (_shouldTrace)
{
ServiceClientTracing.
gitextract_go6x876s/ ├── .deployment/ │ └── storefront-app/ │ └── argoDeploy.json ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE.md │ ├── pull_request_template.md │ └── workflows/ │ ├── deploy.yml │ ├── main.yml │ ├── msteams.yml │ ├── pr-ci.yml │ ├── pr-deploy.yml │ ├── release-branch.yml │ └── release.yml ├── .gitignore ├── .nuke ├── CONTRIBUTING.md ├── Directory.Build.props ├── LICENSE ├── README.md ├── VirtoCommerce.LiquidThemeEngine/ │ ├── Converters/ │ │ └── CountryConverter.cs │ ├── Exceptions/ │ │ └── SaasCompileException.cs │ ├── Extensions/ │ │ ├── GraphQLResponseExtensions.cs │ │ ├── StringExtensions.cs │ │ └── UriExtensions.cs │ ├── Filters/ │ │ ├── ArrayFilters.cs │ │ ├── CommerceFilters.cs │ │ ├── CommonFilters.cs │ │ ├── DynamicDataSourceFilters.cs │ │ ├── FeatureFilter.cs │ │ ├── HtmlFilters.cs │ │ ├── MathFilters.cs │ │ ├── MoneyFilters.cs │ │ ├── StandardFilters.cs │ │ ├── StringFilters.cs │ │ ├── TranslationFilter.cs │ │ └── UrlFilters.cs │ ├── ILiquidThemeEngine.cs │ ├── ILiquidViewEngine.cs │ ├── ISassFileManager.cs │ ├── JsonConverters/ │ │ └── MutablePagedListAsArrayJsonConverter.cs │ ├── LiquidThemeEngineOptions.cs │ ├── LiquidThemedView.cs │ ├── LiquidThemedViewEngine.cs │ ├── Objects/ │ │ ├── Paginate.cs │ │ └── Part.cs │ ├── SassFileManager.cs │ ├── Scriban/ │ │ └── WorkContextConverter.cs │ ├── SettingsManager.cs │ ├── ShopifyLiquidThemeEngine.cs │ ├── ThemeEngineCacheRegion.cs │ └── VirtoCommerce.LiquidThemeEngine.csproj ├── VirtoCommerce.Storefront/ │ ├── .bowerrc │ ├── AutoRestClients/ │ │ ├── !readme.txt │ │ ├── CatalogModuleApi.cs │ │ ├── ContentModuleApi.cs │ │ ├── CoreModuleApi.cs │ │ ├── CustomerModuleApi.cs │ │ ├── NotificationsModuleApi.cs │ │ ├── PlatformModuleApi.cs │ │ ├── SitemapsModuleApi.cs │ │ ├── StoreModuleApi.cs │ │ └── array-in-query-fix.yml │ ├── Caching/ │ │ ├── Redis/ │ │ │ ├── RedisCachingMessage.cs │ │ │ ├── RedisCachingOptions.cs │ │ │ └── RedisStorefrontMemoryCache.cs │ │ ├── ServiceCollectionExtensions.cs │ │ └── StorefrontMemoryCache.cs │ ├── Connected Services/ │ │ └── Application Insights/ │ │ └── ConnectedService.json │ ├── Controllers/ │ │ ├── AccountController.cs │ │ ├── Api/ │ │ │ ├── ApiAccountController.cs │ │ │ ├── ApiBlogController.cs │ │ │ ├── ApiCommonController.cs │ │ │ ├── ApiStaticContentController.cs │ │ │ └── ApiThemeController.cs │ │ ├── AssetController.cs │ │ ├── CommonController.cs │ │ ├── DesignerPreviewController.cs │ │ ├── ErrorController.cs │ │ ├── HomeController.cs │ │ ├── SitemapController.cs │ │ └── StorefrontControllerBase.cs │ ├── DependencyInjection/ │ │ └── ServiceCollectionExtension.cs │ ├── Domain/ │ │ ├── Common/ │ │ │ ├── AddressConverter.cs │ │ │ ├── ContactUsFormConverter.cs │ │ │ ├── CurrencyConverter.cs │ │ │ ├── DynamicPropertyConverter.cs │ │ │ ├── NotificationConverter.cs │ │ │ ├── SeoInfoConverter.cs │ │ │ ├── SettingConverter.cs │ │ │ └── ToolsConverter.cs │ │ ├── ContentBlobProviders/ │ │ │ ├── AzureBlobContentOptions.cs │ │ │ ├── AzureBlobContentProvider.cs │ │ │ ├── BlobConnectionString.cs │ │ │ ├── ContentBlobCacheRegion.cs │ │ │ ├── FileSystemBlobContentOptions.cs │ │ │ └── FileSystemContentBlobProvider.cs │ │ ├── Countries/ │ │ │ ├── CountriesWorkContextBuilderExtensions.cs │ │ │ ├── FileSystemCountriesOptions.cs │ │ │ └── FileSystemCountriesService.cs │ │ ├── CurrencyService.cs │ │ ├── Customer/ │ │ │ ├── CutomerCacheRegion.cs │ │ │ ├── Handlers/ │ │ │ │ └── SecurityEventsHandler.cs │ │ │ ├── MemberConverter.cs │ │ │ └── MemberService.cs │ │ ├── IWorkContextBuilder.cs │ │ ├── Security/ │ │ │ ├── AnonymousUserForStoreAuthorizationRequirement.cs │ │ │ ├── CanEditOrganizationResourceAuthorizationHandler.cs │ │ │ ├── CanImpersonateAuthorizationHandler.cs │ │ │ ├── CanReadContentItemAuthorizationHandler.cs │ │ │ ├── CustomCookieAuthenticationEvents.cs │ │ │ ├── CustomSignInManager.cs │ │ │ ├── CustomUserManager.cs │ │ │ ├── Notifications/ │ │ │ │ ├── ChangePhoneNumberSmsNotification.cs │ │ │ │ ├── EmailConfirmationNotification.cs │ │ │ │ ├── RegistrationEmailNotification.cs │ │ │ │ ├── RegistrationInvitationNotification.cs │ │ │ │ ├── RemindUserNameNotification.cs │ │ │ │ ├── ResetPasswordEmailNotification.cs │ │ │ │ ├── ResetPasswordSmsNotification.cs │ │ │ │ ├── TwoFactorEmailNotification.cs │ │ │ │ └── TwoFactorSmsNotification.cs │ │ │ ├── OnlyRegisteredUserAuthorizationHandler.cs │ │ │ ├── PermissionAuthorizationHandler.cs │ │ │ ├── PermissionAuthorizationPolicyProvider.cs │ │ │ ├── PermissionAuthorizationRequirement.cs │ │ │ ├── PollingApiUserChangeToken.cs │ │ │ ├── SecurityCacheRegion.cs │ │ │ ├── SecurityConverter.cs │ │ │ ├── SecurityWorkContextBuilderExtensions.cs │ │ │ └── UserStoreStub.cs │ │ ├── SeoInfoService.cs │ │ ├── SpaRouteService.cs │ │ ├── StaticContent/ │ │ │ ├── LinkListConverter.cs │ │ │ ├── LinkListServiceImpl.cs │ │ │ ├── MarkdownContentLoader.cs │ │ │ ├── PageBuilderContentLoader.cs │ │ │ ├── StaticContentCacheRegion.cs │ │ │ ├── StaticContentItemFactory.cs │ │ │ ├── StaticContentLoader.cs │ │ │ ├── StaticContentLoaderFactory.cs │ │ │ ├── StaticContentService.cs │ │ │ └── StaticContentWorkContextBuilderExtensions.cs │ │ ├── Stores/ │ │ │ ├── SelectCurrentCurrencyPolicy.cs │ │ │ ├── SelectCurrentLanguagePolicy.cs │ │ │ ├── SelectCurrentStorePolicy.cs │ │ │ ├── StoreCacheRegion.cs │ │ │ ├── StoreConverter.cs │ │ │ ├── StoreService.cs │ │ │ └── StoreWorkContextBuilderExtensions.cs │ │ ├── WorkContextAccessor.cs │ │ └── WorkContextBuilder.cs │ ├── Extensions/ │ │ ├── ClaimsPrincipalExtensions.cs │ │ ├── HostingEnviromentExtension.cs │ │ ├── ObjectExtensions.cs │ │ ├── PathStringExtensions.cs │ │ ├── QueryCollectionExtensions.cs │ │ └── SeoExtensions.cs │ ├── Filters/ │ │ ├── AngularAntiforgeryCookieResultFilterAttribute.cs │ │ └── AnonymousUserForStoreAuthorizationFilter.cs │ ├── IISUrlRewrite.xml │ ├── Infrastructure/ │ │ ├── ApiAuthMode.cs │ │ ├── ApiChangesWatcher.cs │ │ ├── ApplicationInsights/ │ │ │ ├── ServiceCollectionExtension.cs │ │ │ ├── SnapshotCollectorTelemetryProcessorFactory.cs │ │ │ └── UserTelemetryInitializer.cs │ │ ├── Autorest/ │ │ │ ├── ApiKeySecretAuthHandler.cs │ │ │ ├── AuthenticationHandlerFactory.cs │ │ │ ├── BaseAuthHandler.cs │ │ │ ├── ClientCredentialsAuthHandler.cs │ │ │ ├── EmptyServiceClientCredentials.cs │ │ │ └── UserPasswordAuthHandler.cs │ │ ├── BlobChangeToken.cs │ │ ├── BlobChangesWatcher.cs │ │ ├── Exceptions/ │ │ │ ├── NoStoresException.cs │ │ │ └── NoThemeException.cs │ │ ├── HealthCheck/ │ │ │ └── PlatformConnectionHealthChecker.cs │ │ ├── HmacUtility.cs │ │ ├── IApiChangesWatcher.cs │ │ ├── IBlobChangesWatcher.cs │ │ ├── PlatformEndpointOptions.cs │ │ ├── PollingApiChangeToken.cs │ │ ├── RequireHttpsOptions.cs │ │ ├── StorefrontOptions.cs │ │ ├── StorefrontUrlBuilder.cs │ │ └── Swagger/ │ │ ├── ApiExplorerApiControllersConvention.cs │ │ ├── ArrayInQueryParametersFilter.cs │ │ ├── AuthResponsesOperationFilter.cs │ │ ├── ConsumeFromBodyFilter.cs │ │ ├── EnumSchemaFilter.cs │ │ ├── FileResponseTypeFilter.cs │ │ ├── FileUploadOperationFilter.cs │ │ ├── NewtonsoftJsonIgnoreFilter.cs │ │ ├── OptionalParametersFilter.cs │ │ ├── SwaggerFileResponseAttribute.cs │ │ ├── SwaggerOptionalAttribute.cs │ │ └── UploadFileAttribute.cs │ ├── Middleware/ │ │ ├── NoLiquidThemeMiddleware.cs │ │ ├── StoreMaintenanceMiddleware.cs │ │ └── WorkContextBuildMiddleware.cs │ ├── Models/ │ │ ├── NoThemeViewModel.cs │ │ └── ResetCacheModel.cs │ ├── Program.cs │ ├── Properties/ │ │ └── launchSettings.json │ ├── Routing/ │ │ ├── ISlugRouteService.cs │ │ ├── MapStorefrontRouteBuilderExtension.cs │ │ ├── RoutingCacheRegion.cs │ │ ├── SlugRoute.cs │ │ ├── SlugRouteResponse.cs │ │ ├── SlugRouteService.cs │ │ ├── StorefrontApiRouteAttribute.cs │ │ ├── StorefrontRoute.cs │ │ └── StorefrontRouteAttribute.cs │ ├── Startup.cs │ ├── Views/ │ │ ├── Common/ │ │ │ ├── Maintenance.cshtml │ │ │ └── NoTheme.cshtml │ │ ├── Error/ │ │ │ ├── 404.cshtml │ │ │ ├── 500.cshtml │ │ │ ├── AccessDenied.cshtml │ │ │ ├── Error.cshtml │ │ │ └── NoStore.cshtml │ │ ├── Shared/ │ │ │ ├── _Layout.cshtml │ │ │ └── _ValidationScriptsPartial.cshtml │ │ ├── _ViewImports.cshtml │ │ └── _ViewStart.cshtml │ ├── VirtoCommerce.Storefront.csproj │ ├── appsettings.Development.json │ ├── appsettings.Production.json │ ├── appsettings.json │ ├── bower.json │ ├── bundleconfig.json │ ├── bundleconfig.json.bindings │ ├── web.config │ └── wwwroot/ │ ├── countries.json │ ├── css/ │ │ └── site.css │ ├── js/ │ │ └── site.js │ └── lib/ │ ├── bootstrap/ │ │ ├── .bower.json │ │ ├── LICENSE │ │ └── dist/ │ │ ├── css/ │ │ │ ├── bootstrap-theme.css │ │ │ └── bootstrap.css │ │ └── js/ │ │ ├── bootstrap.js │ │ └── npm.js │ ├── jquery/ │ │ ├── .bower.json │ │ ├── LICENSE.txt │ │ └── dist/ │ │ └── jquery.js │ ├── jquery-validation/ │ │ ├── .bower.json │ │ ├── LICENSE.md │ │ └── dist/ │ │ ├── additional-methods.js │ │ └── jquery.validate.js │ └── jquery-validation-unobtrusive/ │ ├── .bower.json │ └── jquery.validate.unobtrusive.js ├── VirtoCommerce.Storefront.Model/ │ ├── Address.cs │ ├── AddressType.cs │ ├── AmountType.cs │ ├── Attachment.cs │ ├── BankCardInfo.cs │ ├── Caching/ │ │ └── IStorefrontMemoryCache.cs │ ├── Common/ │ │ ├── AnonymousComparer.cs │ │ ├── ArrayExtensions.cs │ │ ├── AsyncLock.cs │ │ ├── Breadcrumb.cs │ │ ├── Bus/ │ │ │ ├── IHandlerRegistrar.cs │ │ │ └── InProcessBus.cs │ │ ├── Caching/ │ │ │ ├── CacheCancellableTokensRegistry.cs │ │ │ ├── CacheKey.cs │ │ │ ├── CancellableCacheRegion.cs │ │ │ ├── GlobalCacheRegion.cs │ │ │ ├── ICacheKey.cs │ │ │ ├── MemoryCacheExtensions.cs │ │ │ └── TokenCancelledEventArgs.cs │ │ ├── CollectionExtensions.cs │ │ ├── DefaultableDictionary.cs │ │ ├── DynamicPropertyExtension.cs │ │ ├── EmptyDisposable.cs │ │ ├── Entity.cs │ │ ├── EntryState.cs │ │ ├── EnumUtility.cs │ │ ├── EnumerableExtension.cs │ │ ├── EventThrottlingExtensions.cs │ │ ├── Events/ │ │ │ ├── DomainEvent.cs │ │ │ ├── ICancellableEventHandler.cs │ │ │ ├── IEvent.cs │ │ │ ├── IEventHandler.cs │ │ │ └── IEventPublisher.cs │ │ ├── Exceptions/ │ │ │ └── StorefrontException.cs │ │ ├── GenericSearchResult.cs │ │ ├── GeoPoint.cs │ │ ├── IAccessibleByIndexKey.cs │ │ ├── IEntity.cs │ │ ├── IHasBreadcrumbs.cs │ │ ├── IHasQueryKeyValues.cs │ │ ├── IMutablePagedList.cs │ │ ├── IQueryableExtensions.cs │ │ ├── IStorefrontUrlBuilder.cs │ │ ├── IValueObject.cs │ │ ├── LocalizationExtensions.cs │ │ ├── Messages/ │ │ │ ├── ICancellableHandler.cs │ │ │ ├── IHandler.cs │ │ │ └── IMessage.cs │ │ ├── Money/ │ │ │ ├── Currency.cs │ │ │ ├── IConvertible.cs │ │ │ └── Money.cs │ │ ├── MutablePagedList.cs │ │ ├── MutablePagedListExtensions.cs │ │ ├── Notifications/ │ │ │ ├── EmailNotificationBase.cs │ │ │ ├── NotificationBase.cs │ │ │ └── SmsNotificationBase.cs │ │ ├── NumericRange.cs │ │ ├── ObjectExtensions.cs │ │ ├── PagedSearchCriteria.cs │ │ ├── PathUtils.cs │ │ ├── ReflectionExtension.cs │ │ ├── SettingsExtension.cs │ │ ├── SortInfo.cs │ │ ├── Specifications/ │ │ │ └── ISpecification.cs │ │ ├── StreamExtensions.cs │ │ ├── StringExtensions.cs │ │ ├── TreeNode.cs │ │ ├── TypeExtensions.cs │ │ └── ValueObject.cs │ ├── ContactForm.cs │ ├── Country.cs │ ├── CountryRegion.cs │ ├── Customer/ │ │ ├── Contact.cs │ │ ├── Member.cs │ │ ├── Organization.cs │ │ ├── OrganizationContactsSearchCriteria.cs │ │ ├── SecurityAccount.cs │ │ └── Services/ │ │ └── IMemberService.cs │ ├── DynamicProperty.cs │ ├── DynamicPropertyDictionaryItem.cs │ ├── DynamicPropertyName.cs │ ├── EditorialReview.cs │ ├── Features/ │ │ ├── Exceptions/ │ │ │ └── FeaturesException.cs │ │ ├── Feature.cs │ │ ├── FeatureExtensions.cs │ │ ├── FeaturesAgent.cs │ │ └── IFeaturesAgent.cs │ ├── Form.cs │ ├── FormError.cs │ ├── ICountriesService.cs │ ├── ICurrencyService.cs │ ├── IHasLanguage.cs │ ├── IHasSettings.cs │ ├── ISeoInfoService.cs │ ├── ISpaRouteService.cs │ ├── IWorkContextAccessor.cs │ ├── Image.cs │ ├── Interaction/ │ │ ├── Client.cs │ │ ├── Page.cs │ │ ├── UserEvent.cs │ │ └── UserSession.cs │ ├── Language.cs │ ├── LinkList/ │ │ ├── CategoryMenuLink.cs │ │ ├── MenuLink.cs │ │ ├── MenuLinkList.cs │ │ ├── ProductMenuLink.cs │ │ └── Services/ │ │ └── ILinkListService.cs │ ├── LocalizedString.cs │ ├── LoginProvider.cs │ ├── Security/ │ │ ├── AccountState.cs │ │ ├── ChangePassword.cs │ │ ├── ChangeTwoFactorAuthenticationModel.cs │ │ ├── ChangeTwoFactorAuthenticationResult.cs │ │ ├── ConfirmEmailModel.cs │ │ ├── CustomSignInResult.cs │ │ ├── Events/ │ │ │ ├── UserDeletedEvent.cs │ │ │ ├── UserLoginEvent.cs │ │ │ └── UserRegisteredEvent.cs │ │ ├── ExternalUserLoginInfo.cs │ │ ├── ForgotPassword.cs │ │ ├── ForgotPasswordModel.cs │ │ ├── Login.cs │ │ ├── OrganizationRegistration.cs │ │ ├── OrganizationUserRegistration.cs │ │ ├── PasswordChangeResult.cs │ │ ├── RemovePhoneNumberResult.cs │ │ ├── ResetPassword.cs │ │ ├── ResetPasswordByCodeModel.cs │ │ ├── ResetPasswordModel.cs │ │ ├── Role.cs │ │ ├── SecurityConstants.cs │ │ ├── SecurityErrorDescriber.cs │ │ ├── Specifications/ │ │ │ ├── CanUserLoginToStoreSpecification.cs │ │ │ ├── IsUserLockedByRequiredEmailVerificationSpecification.cs │ │ │ ├── IsUserLockedOutSpecification.cs │ │ │ ├── IsUserPasswordExpiredSpecification.cs │ │ │ ├── IsUserSuspendedSpecification.cs │ │ │ └── IsUserTemporaryLockedOutSpecification.cs │ │ ├── UpdatePhoneNumberModel.cs │ │ ├── UpdatePhoneNumberResult.cs │ │ ├── User.cs │ │ ├── UserActionIdentityResult.cs │ │ ├── UserRegistration.cs │ │ ├── UserRegistrationByInvitation.cs │ │ ├── UserSearchResult.cs │ │ ├── UserUpdateInfo.cs │ │ ├── UsersInvitation.cs │ │ ├── ValidateTokenModel.cs │ │ ├── VerifyCodeViewModel.cs │ │ └── VerifyPhoneNumberModel.cs │ ├── SeoInfo.cs │ ├── SeoLinksType.cs │ ├── SettingEntry.cs │ ├── SlugInfoRequest.cs │ ├── SlugInfoResult.cs │ ├── SlugRoutingData.cs │ ├── SpaThemeContext.cs │ ├── StaticContent/ │ │ ├── Blog.cs │ │ ├── BlogArticle.cs │ │ ├── BlogSearchCriteria.cs │ │ ├── ContentInThemeSearchCriteria.cs │ │ ├── ContentItem.cs │ │ ├── ContentPage.cs │ │ ├── IContentBlobProvider.cs │ │ ├── IStaticContentItemFactory.cs │ │ ├── IStaticContentLoader.cs │ │ ├── IStaticContentLoaderFactory.cs │ │ ├── IStaticContentService.cs │ │ └── StaticContentSearchCriteria.cs │ ├── StorefrontNotification.cs │ ├── StorefrontNotificationType.cs │ ├── Stores/ │ │ ├── IStoreService.cs │ │ ├── Store.cs │ │ └── StoreStatus.cs │ ├── SwaggerCustomSchemaIdAttribute.cs │ ├── Term.cs │ ├── TermExtensions.cs │ ├── VirtoCommerce.Storefront.Model.csproj │ └── WorkContext.cs ├── VirtoCommerce.Storefront.Tests/ │ ├── Features/ │ │ ├── CustomServiceCollection.cs │ │ ├── FeaturesAgentTests.cs │ │ └── Samples/ │ │ ├── empty_data.json │ │ ├── empty_file.json │ │ ├── full_data.json │ │ ├── full_data_with_conflicts.json │ │ ├── full_data_with_disabled_feature.json │ │ ├── full_data_without_replaces.json │ │ └── test_data.json │ ├── JsonConverterTests.cs │ ├── LiquidThemeEngine/ │ │ └── ShopifyLiquidThemeEngineTests.cs │ ├── Model/ │ │ └── MoneyOperationTests.cs │ ├── ResponseCaching/ │ │ └── ResponseCachingTests.cs │ ├── Routing/ │ │ ├── Infrastructure/ │ │ │ ├── DummyAntiforgery.cs │ │ │ ├── RoutingDataResult.cs │ │ │ └── RoutingTestingActionFilter.cs │ │ └── PathStringExtensionsTests.cs │ ├── Scriban/ │ │ ├── ScribanTests.cs │ │ └── test.liquid │ ├── ValueObjectTests.cs │ └── VirtoCommerce.Storefront.Tests.csproj ├── VirtoCommerce.Storefront.sln └── azuredeploy.json
Showing preview only (362K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3318 symbols across 382 files)
FILE: VirtoCommerce.LiquidThemeEngine/Converters/CountryConverter.cs
class CountryConverter (line 9) | public static class CountryConverter
method ToOptionTag (line 11) | public static string ToOptionTag(this Country country)
FILE: VirtoCommerce.LiquidThemeEngine/Exceptions/SaasCompileException.cs
class SaasCompileException (line 7) | [Serializable]
method SaasCompileException (line 10) | [Obsolete(DiagnosticId = "SYSLIB0051")]
method ToString (line 30) | public override string ToString()
method SaasCompileException (line 38) | public SaasCompileException(string filename, string sass, Exception in...
method ReadLine (line 48) | private static string ReadLine(string text, int lineNumber)
method GetObjectData (line 65) | [Obsolete(DiagnosticId = "SYSLIB0051")]
FILE: VirtoCommerce.LiquidThemeEngine/Extensions/GraphQLResponseExtensions.cs
class GraphQLResponseExtensions (line 9) | public static class GraphQLResponseExtensions
method ThrowIfHasErrors (line 11) | public static void ThrowIfHasErrors(this IGraphQLResponse response)
FILE: VirtoCommerce.LiquidThemeEngine/Extensions/StringExtensions.cs
class StringExtensions (line 5) | public static class StringExtensions
method TrimQuotes (line 7) | public static string TrimQuotes(this string input)
method TryGetCultureInfo (line 12) | public static CultureInfo TryGetCultureInfo(this string languageCode)
method SafeParseInt (line 24) | public static int SafeParseInt(this string input, int defaultValue = d...
FILE: VirtoCommerce.LiquidThemeEngine/Extensions/UriExtensions.cs
class UriExtensions (line 8) | public static class UriExtensions
method SetQueryParameter (line 17) | public static Uri SetQueryParameter(this Uri url, string name, string ...
method SetQueryParameters (line 38) | public static Uri SetQueryParameters(this Uri uri, IHasQueryKeyValues ...
FILE: VirtoCommerce.LiquidThemeEngine/Filters/ArrayFilters.cs
class ArrayFilters (line 11) | public static partial class ArrayFilters
method Tree (line 13) | public static object Tree(object input, string propName, string titleP...
method Where (line 77) | public static object Where(object input, string propName, string op, s...
method SortList (line 160) | public static object SortList(object input, string sort)
method ParseString (line 189) | private static object ParseString(string str)
FILE: VirtoCommerce.LiquidThemeEngine/Filters/CommerceFilters.cs
class CommerceFilters (line 8) | public static partial class CommerceFilters
method CurrentCurrencyCode (line 31) | public static string CurrentCurrencyCode()
method CurrentCurrencyCode (line 36) | public static string CurrentCurrencyCode(string cultureName)
method EffectiveCulture (line 50) | public static CultureInfo EffectiveCulture(string currencyCode)
method FormatCurrency (line 85) | public static string FormatCurrency(decimal amount, string currencyCode)
method CreateCultures (line 94) | private static CultureInfo[] CreateCultures()
FILE: VirtoCommerce.LiquidThemeEngine/Filters/CommonFilters.cs
class CommonFilters (line 25) | public static partial class CommonFilters
method Default (line 54) | public static object Default(object input, object value)
method Json (line 59) | public static string Json(object input)
method ParseJson (line 65) | public static object ParseJson(string input)
method PoweredBy (line 71) | public static string PoweredBy(string signature)
method Render (line 77) | public static string Render(TemplateContext context, string input)
method Antiforgery (line 88) | public static string Antiforgery(TemplateContext context)
method Layout (line 99) | public static string Layout(TemplateContext context, string layout)
method Paginate (line 109) | public static Paginate Paginate(TemplateContext context, object source...
method Setting (line 164) | public static string Setting(TemplateContext context, string key)
FILE: VirtoCommerce.LiquidThemeEngine/Filters/DynamicDataSourceFilters.cs
class DataSourceFilter (line 15) | public static class DataSourceFilter
method GraphqlDataSource (line 17) | public static ScriptObject GraphqlDataSource(TemplateContext context, ...
method BuildScriptObject (line 29) | private static ScriptObject BuildScriptObject(ExpandoObject expando)
class GraphQLMemberRenamer (line 63) | private class GraphQLMemberRenamer
method GraphQLMemberRenamer (line 65) | protected GraphQLMemberRenamer()
method Rename (line 73) | public static string Rename(string name)
FILE: VirtoCommerce.LiquidThemeEngine/Filters/FeatureFilter.cs
class FeatureFilter (line 7) | public static class FeatureFilter
method IsFeatureActive (line 9) | public static bool IsFeatureActive(TemplateContext context, string key...
method IsFeaturesActive (line 24) | public static string IsFeaturesActive(TemplateContext context, string ...
method BuildFeaturesStateJsonObject (line 45) | private static JObject BuildFeaturesStateJsonObject(ShopifyLiquidTheme...
FILE: VirtoCommerce.LiquidThemeEngine/Filters/HtmlFilters.cs
class HtmlFilters (line 6) | public static partial class HtmlFilters
method ScriptTag (line 14) | public static string ScriptTag(string input)
method ScriptTagAsync (line 25) | public static string ScriptTagAsync(string input)
method ScriptTagDefer (line 36) | public static string ScriptTagDefer(string input)
method ScriptTagModule (line 47) | public static string ScriptTagModule(string input)
method StylesheetTag (line 59) | public static string StylesheetTag(string input, string media = "all")
FILE: VirtoCommerce.LiquidThemeEngine/Filters/MathFilters.cs
class MathFilters (line 6) | public static partial class MathFilters
method Round (line 8) | public static object Round(object input, int digits = 0)
method Ceil (line 17) | public static object Ceil(object input)
method Floor (line 26) | public static object Floor(object input)
method Abs (line 35) | public static object Abs(object input)
FILE: VirtoCommerce.LiquidThemeEngine/Filters/MoneyFilters.cs
class MoneyFilters (line 11) | public static partial class MoneyFilters
method Money (line 20) | public static string Money(TemplateContext context, object input, stri...
method MoneyWithoutDecimalPart (line 26) | public static string MoneyWithoutDecimalPart(TemplateContext context, ...
method MoneyWithCurrency (line 32) | public static string MoneyWithCurrency(TemplateContext context, object...
method MoneyWithoutCurrency (line 36) | public static string MoneyWithoutCurrency(TemplateContext context, obj...
method GetMoney (line 41) | private static Money GetMoney(TemplateContext context, object input, s...
FILE: VirtoCommerce.LiquidThemeEngine/Filters/StandardFilters.cs
class StandardFilters (line 16) | public static partial class StandardFilters
method Size (line 23) | public static int Size(object input)
method Slice (line 40) | public static string Slice(string input, int start, int len = 1)
method Downcase (line 65) | public static string Downcase(string input)
method Upcase (line 75) | public static string Upcase(string input)
method Capitalize (line 87) | public static string Capitalize(string input)
method Escape (line 99) | public static string Escape(string input)
method H (line 116) | public static string H(string input)
method Truncate (line 128) | public static string Truncate(string input, int length = 50, string tr...
method Truncatewords (line 144) | public static string Truncatewords(string input, int words = 15, strin...
method Split (line 165) | public static string[] Split(string input, string pattern)
method StripHtml (line 172) | public static string StripHtml(object input)
method StripNewlines (line 191) | public static string StripNewlines(string input)
method Join (line 204) | public static string Join(IEnumerable input, string glue = " ")
method Sort (line 223) | public static IEnumerable Sort(object input, string property = null)
method Map (line 254) | public static IEnumerable Map(IEnumerable input, string property)
method Replace (line 282) | public static string Replace(object input, string @string, string repl...
method ReplaceFirst (line 305) | public static string ReplaceFirst(string input, string @string, string...
method Remove (line 331) | public static string Remove(string input, string @string)
method RemoveFirst (line 344) | public static string RemoveFirst(string input, string @string)
method Append (line 357) | public static string Append(object input, object @string)
method Prepend (line 368) | public static string Prepend(object input, object @string)
method NewlineToBr (line 378) | public static string NewlineToBr(string input)
method Date (line 391) | public static string Date(TemplateContext context, object input, strin...
method First (line 449) | public static object First(IEnumerable array)
method Last (line 462) | public static object Last(IEnumerable array)
method Plus (line 473) | public static object Plus(object input, object operand)
method Minus (line 485) | public static object Minus(object input, object operand)
method Times (line 496) | public static object Times(object input, object operand)
method DividedBy (line 509) | public static object DividedBy(object input, object operand)
method Modulo (line 514) | public static object Modulo(object input, object operand)
method DoMathsOperation (line 519) | private static object DoMathsOperation(object input, object operand, F...
method TryFormatDateTime (line 530) | private static void TryFormatDateTime(DateTime input, string format, o...
class ExpressionUtility (line 554) | internal static class ExpressionUtility
method CreateExpression (line 570) | public static Delegate CreateExpression(Func<Expression, Expression, B...
method UpdateVisit (line 610) | private static void UpdateVisit(ref Expression left, ref Expression ri...
class ObjectExtensionMethods (line 631) | internal static class ObjectExtensionMethods
method RespondTo (line 633) | public static bool RespondTo(this object value, string member, bool en...
method Send (line 652) | public static object Send(this object value, string member, object[] p...
class StringExtensions (line 672) | internal static class StringExtensions
method IsNullOrWhiteSpace (line 674) | public static bool IsNullOrWhiteSpace(this string s)
method ToSafeString (line 679) | public static string ToSafeString(this object s)
method ToNumber (line 684) | public static object ToNumber(this object s)
method Evaluate (line 734) | private static double Evaluate(string expression)
class EnumerableExtensionMethods (line 749) | internal static class EnumerableExtensionMethods
method Flatten (line 751) | public static IEnumerable Flatten(this IEnumerable array)
method EachWithIndex (line 773) | public static void EachWithIndex(this IEnumerable<object> array, Actio...
FILE: VirtoCommerce.LiquidThemeEngine/Filters/StringFilters.cs
class StringFilters (line 11) | public static partial class StringFilters
method Camelize (line 21) | public static string Camelize(string input)
method Handle (line 39) | public static string Handle(string input)
method Handleize (line 54) | public static string Handleize(string input)
method Md5 (line 69) | public static string Md5(string input)
method Pluralize (line 92) | public static string Pluralize(int input, string singular, string plural)
method Strip (line 103) | public static string Strip(string input)
method Format (line 113) | public static string Format(object input, string format)
FILE: VirtoCommerce.LiquidThemeEngine/Filters/TranslationFilter.cs
class TranslationFilter (line 9) | public static partial class TranslationFilter
method T (line 11) | public static string T(TemplateContext context, string key, params obj...
FILE: VirtoCommerce.LiquidThemeEngine/Filters/UrlFilters.cs
class UrlFilters (line 14) | public static partial class UrlFilters
method SizeImageLink (line 16) | public static string SizeImageLink(string input, string size)
method ImgUrl (line 32) | public static string ImgUrl(object input, string type = null)
method LinkTo (line 61) | public static string LinkTo(object input, string link, string title = "")
method AssetUrl (line 72) | public static string AssetUrl(TemplateContext context, string input)
method StaticAssetUrl (line 89) | public static string StaticAssetUrl(TemplateContext context, string in...
method FileUrl (line 105) | public static string FileUrl(TemplateContext context, string input)
method StoreAbsoluteUrl (line 117) | public static string StoreAbsoluteUrl(TemplateContext context, string ...
method FullUrl (line 142) | public static string FullUrl(TemplateContext context, string input, st...
method AbsoluteUrl (line 161) | public static string AbsoluteUrl(TemplateContext context, string input...
method ProductImgUrl (line 187) | public static string ProductImgUrl(object input, string type = null)
method AppendVersion (line 197) | public static string AppendVersion(TemplateContext context, string input)
method AddTermUrl (line 219) | public static string AddTermUrl(TemplateContext context, string facetN...
method RemoveTermUrl (line 233) | public static string RemoveTermUrl(TemplateContext context, string fac...
FILE: VirtoCommerce.LiquidThemeEngine/ILiquidThemeEngine.cs
type ILiquidThemeEngine (line 8) | public interface ILiquidThemeEngine
method ResolveTemplatePath (line 11) | string ResolveTemplatePath(string templateName);
method RenderTemplateByNameAsync (line 12) | ValueTask<string> RenderTemplateByNameAsync(string templateName, objec...
method RenderTemplateAsync (line 13) | ValueTask<string> RenderTemplateAsync(string templateContent, string t...
method GetSettings (line 14) | IDictionary<string, object> GetSettings(string defaultValue = null);
method ReadLocalization (line 15) | JObject ReadLocalization();
method GetAssetStreamAsync (line 16) | Task<Stream> GetAssetStreamAsync(string filePath);
method GetAssetHash (line 17) | string GetAssetHash(string filePath);
method GetAssetAbsoluteUrl (line 18) | string GetAssetAbsoluteUrl(string assetName);
FILE: VirtoCommerce.LiquidThemeEngine/ILiquidViewEngine.cs
type ILiquidViewEngine (line 5) | public interface ILiquidViewEngine : IViewEngine
FILE: VirtoCommerce.LiquidThemeEngine/ISassFileManager.cs
type ISassFileManager (line 5) | public interface ISassFileManager : IFileManager
FILE: VirtoCommerce.LiquidThemeEngine/JsonConverters/MutablePagedListAsArrayJsonConverter.cs
class MutablePagedListAsArrayJsonConverter (line 13) | public class MutablePagedListAsArrayJsonConverter : JsonConverter
method MutablePagedListAsArrayJsonConverter (line 17) | public MutablePagedListAsArrayJsonConverter()
method MutablePagedListAsArrayJsonConverter (line 22) | public MutablePagedListAsArrayJsonConverter(JsonSerializerSettings jso...
method CanConvert (line 26) | public override bool CanConvert(Type objectType)
method WriteJson (line 32) | public override void WriteJson(JsonWriter writer, object value, JsonSe...
method ReadJson (line 46) | public override object ReadJson(JsonReader reader, Type objectType, ob...
FILE: VirtoCommerce.LiquidThemeEngine/LiquidThemeEngineOptions.cs
class LiquidThemeEngineOptions (line 6) | public class LiquidThemeEngineOptions
FILE: VirtoCommerce.LiquidThemeEngine/LiquidThemedView.cs
class LiquidThemedView (line 13) | public class LiquidThemedView : IView
method LiquidThemedView (line 20) | public LiquidThemedView(IWorkContextAccessor workContextAccessor, ISto...
method RenderAsync (line 37) | public virtual Task RenderAsync(ViewContext context)
method RenderInternalAsync (line 48) | protected virtual async Task RenderInternalAsync(ViewContext context)
FILE: VirtoCommerce.LiquidThemeEngine/LiquidThemedViewEngine.cs
class LiquidThemedViewEngine (line 9) | public class LiquidThemedViewEngine : ILiquidViewEngine
method LiquidThemedViewEngine (line 14) | public LiquidThemedViewEngine(IWorkContextAccessor workContextAccessor...
method FindView (line 23) | public ViewEngineResult FindView(ActionContext context, string viewNam...
method GetView (line 28) | public ViewEngineResult GetView(string executingFilePath, string viewP...
method InnerGetView (line 34) | protected ViewEngineResult InnerGetView(string view, bool isMainPage)
FILE: VirtoCommerce.LiquidThemeEngine/Objects/Paginate.cs
class Paginate (line 12) | public partial class Paginate : ValueObject
method Paginate (line 16) | public Paginate(IPagedList pagedList)
FILE: VirtoCommerce.LiquidThemeEngine/Objects/Part.cs
class Part (line 9) | public partial class Part : ValueObject
FILE: VirtoCommerce.LiquidThemeEngine/SassFileManager.cs
class SassFileManager (line 8) | public class SassFileManager : ISassFileManager
method SassFileManager (line 16) | public SassFileManager(IContentBlobProvider contentBlobProvider)
method GetCurrentDirectory (line 21) | public string GetCurrentDirectory() => CurrentDirectory;
method FileExists (line 23) | public bool FileExists(string path)
method IsAbsolutePath (line 33) | public bool IsAbsolutePath(string path)
method ToAbsolutePath (line 38) | public string ToAbsolutePath(string path)
method ReadFile (line 43) | public string ReadFile(string path)
FILE: VirtoCommerce.LiquidThemeEngine/Scriban/WorkContextConverter.cs
class WorkContextConverter (line 8) | public static class WorkContextConverter
method ToScriptObject (line 10) | public static ScriptObject ToScriptObject(this WorkContext workContext)
FILE: VirtoCommerce.LiquidThemeEngine/SettingsManager.cs
class SettingsManager (line 9) | public static class SettingsManager
class Settings (line 11) | public class Settings
class Preset (line 18) | public class Preset
method Merge (line 25) | public static JObject Merge(JObject baseJson, JObject currentJson)
method ReadSettings (line 48) | public static Settings ReadSettings(JObject json)
FILE: VirtoCommerce.LiquidThemeEngine/ShopifyLiquidThemeEngine.cs
class ShopifyLiquidThemeEngine (line 42) | public class ShopifyLiquidThemeEngine : ILiquidThemeEngine, ITemplateLoader
method ShopifyLiquidThemeEngine (line 55) | public ShopifyLiquidThemeEngine(
method GetPath (line 135) | public string GetPath(TemplateContext context, SourceSpan callerSpan, ...
method Load (line 140) | public string Load(TemplateContext context, SourceSpan callerSpan, str...
method LoadAsync (line 146) | public ValueTask<string> LoadAsync(TemplateContext context, SourceSpan...
method GetAssetStreamAsync (line 176) | public async Task<Stream> GetAssetStreamAsync(string filePath)
method GetAssetHash (line 242) | public string GetAssetHash(string filePath)
method ResolveTemplatePath (line 264) | public string ResolveTemplatePath(string templateName)
method RenderTemplateByNameAsync (line 289) | public ValueTask<string> RenderTemplateByNameAsync(string templateName...
method RenderTemplateByNameInternalAsync (line 299) | private async ValueTask<string> RenderTemplateByNameInternalAsync(stri...
method RenderTemplateAsync (line 317) | public ValueTask<string> RenderTemplateAsync(string templateContent, s...
method GetSettings (line 382) | public IDictionary<string, object> GetSettings(string defaultValue = n...
method ReadLocalization (line 412) | public JObject ReadLocalization()
method GetAssetAbsoluteUrl (line 436) | public string GetAssetAbsoluteUrl(string assetName)
method InnerReadLocalization (line 444) | private static JObject InnerReadLocalization(IContentBlobProvider them...
method InnerGetAllSettings (line 484) | private static JObject InnerGetAllSettings(IContentBlobProvider themeB...
method ReadTemplateByPath (line 503) | private string ReadTemplateByPath(string templatePath)
method GetSettingsFilePath (line 519) | private string GetSettingsFilePath()
method IsFeatureActive (line 525) | public bool IsFeatureActive(string featureName)
FILE: VirtoCommerce.LiquidThemeEngine/ThemeEngineCacheRegion.cs
class ThemeEngineCacheRegion (line 5) | public class ThemeEngineCacheRegion : CancellableCacheRegion<ThemeEngine...
FILE: VirtoCommerce.Storefront.Model/Address.cs
class Address (line 9) | public partial class Address : ValueObject
method ToString (line 63) | public override string ToString()
method GetEqualityComponents (line 70) | protected override IEnumerable<object> GetEqualityComponents()
FILE: VirtoCommerce.Storefront.Model/AddressType.cs
type AddressType (line 5) | [Flags]
FILE: VirtoCommerce.Storefront.Model/AmountType.cs
type AmountType (line 3) | public enum AmountType
FILE: VirtoCommerce.Storefront.Model/Attachment.cs
class Attachment (line 5) | public partial class Attachment
FILE: VirtoCommerce.Storefront.Model/BankCardInfo.cs
class BankCardInfo (line 6) | public partial class BankCardInfo
FILE: VirtoCommerce.Storefront.Model/Caching/IStorefrontMemoryCache.cs
type IStorefrontMemoryCache (line 6) | public interface IStorefrontMemoryCache : IMemoryCache
method GetDefaultCacheEntryOptions (line 8) | MemoryCacheEntryOptions GetDefaultCacheEntryOptions();
FILE: VirtoCommerce.Storefront.Model/Common/AnonymousComparer.cs
class AnonymousComparer (line 16) | public static class AnonymousComparer
class Comparer (line 20) | private class Comparer<T> : IComparer<T>
method Comparer (line 24) | public Comparer(Func<T, T, int> compare)
method Compare (line 29) | public int Compare(T x, T y)
method Create (line 36) | public static IComparer<T> Create<T>(Func<T, T, int> compare)
method Create (line 51) | public static IEqualityComparer<T> Create<T, TKey>(Func<T, TKey> compa...
method Create (line 90) | public static IEqualityComparer<T> Create<T>(Func<T, T, bool> equals, ...
class EqualityComparer (line 105) | private class EqualityComparer<T> : IEqualityComparer<T>
method EqualityComparer (line 110) | public EqualityComparer(Func<T, T, bool> equals, Func<T, int> getHas...
method Equals (line 116) | public bool Equals(T x, T y)
method GetHashCode (line 121) | public int GetHashCode(T obj)
FILE: VirtoCommerce.Storefront.Model/Common/ArrayExtensions.cs
class ArrayExtensions (line 5) | public static class ArrayExtensions
method ToHex (line 7) | public static string ToHex(this byte[] bytes, bool upperCase)
FILE: VirtoCommerce.Storefront.Model/Common/AsyncLock.cs
class AsyncLock (line 6) | public static class AsyncLock
method GetLockByKey (line 10) | public static Nito.AsyncEx.AsyncLock GetLockByKey(string key)
FILE: VirtoCommerce.Storefront.Model/Common/Breadcrumb.cs
class Breadcrumb (line 3) | public abstract class Breadcrumb : ValueObject
method Breadcrumb (line 5) | protected Breadcrumb(string type)
FILE: VirtoCommerce.Storefront.Model/Common/Bus/IHandlerRegistrar.cs
type IHandlerRegistrar (line 8) | public interface IHandlerRegistrar
method RegisterHandler (line 10) | void RegisterHandler<T>(Func<T, CancellationToken, Task> handler) wher...
FILE: VirtoCommerce.Storefront.Model/Common/Bus/InProcessBus.cs
class InProcessBus (line 11) | public class InProcessBus : IEventPublisher, IHandlerRegistrar
method RegisterHandler (line 15) | public void RegisterHandler<T>(Func<T, CancellationToken, Task> handle...
method Publish (line 25) | public async Task Publish<T>(T @event, CancellationToken cancellationT...
FILE: VirtoCommerce.Storefront.Model/Common/Caching/CacheCancellableTokensRegistry.cs
class CacheCancellableTokensRegistry (line 11) | public static class CacheCancellableTokensRegistry
method CreateChangeToken (line 17) | public static IChangeToken CreateChangeToken(string tokenKey)
method TryCancelToken (line 23) | public static bool TryCancelToken(string tokenKey, bool raiseEvent = t...
method TriggerOnCancel (line 40) | private static void TriggerOnCancel(string tokenKey)
FILE: VirtoCommerce.Storefront.Model/Common/Caching/CacheKey.cs
class CacheKey (line 5) | public static class CacheKey
method With (line 7) | public static string With(params string[] keys)
method With (line 12) | public static string With(Type ownerType, params string[] keys)
FILE: VirtoCommerce.Storefront.Model/Common/Caching/CancellableCacheRegion.cs
class CancellableCacheRegion (line 10) | public class CancellableCacheRegion<T>
method CancellableCacheRegion (line 14) | protected CancellableCacheRegion()
method CreateChangeTokenForKey (line 18) | public static IChangeToken CreateChangeTokenForKey(string key)
method CreateChangeToken (line 27) | public static IChangeToken CreateChangeToken()
method ExpireTokenForKey (line 32) | public static void ExpireTokenForKey(string key)
method ExpireRegion (line 40) | public static void ExpireRegion()
method GenerateRegionTokenKey (line 45) | private static string GenerateRegionTokenKey(string key = null)
FILE: VirtoCommerce.Storefront.Model/Common/Caching/GlobalCacheRegion.cs
class GlobalCacheRegion (line 3) | public class GlobalCacheRegion : CancellableCacheRegion<GlobalCacheRegion>
FILE: VirtoCommerce.Storefront.Model/Common/Caching/ICacheKey.cs
type ICacheKey (line 3) | public interface ICacheKey
method GetCacheKey (line 5) | string GetCacheKey();
FILE: VirtoCommerce.Storefront.Model/Common/Caching/MemoryCacheExtensions.cs
class MemoryCacheExtensions (line 9) | public static class MemoryCacheExtensions
method GetOrCreateExclusiveAsync (line 12) | public static async Task<TItem> GetOrCreateExclusiveAsync<TItem>(this ...
method GetOrCreateExclusive (line 32) | public static TItem GetOrCreateExclusive<TItem>(this IMemoryCache cach...
FILE: VirtoCommerce.Storefront.Model/Common/Caching/TokenCancelledEventArgs.cs
class TokenCancelledEventArgs (line 5) | public sealed class TokenCancelledEventArgs : EventArgs
method TokenCancelledEventArgs (line 7) | public TokenCancelledEventArgs(string tokenKey)
method ToString (line 13) | public override string ToString()
FILE: VirtoCommerce.Storefront.Model/Common/CollectionExtensions.cs
class CollectionExtensions (line 10) | public static class CollectionExtensions
method AddRange (line 20) | public static ICollection<T> AddRange<T>(this ICollection<T> collectio...
method AddDistinct (line 40) | public static void AddDistinct<T>(this ICollection<T> obj, params T[] ...
method AddDistinct (line 45) | public static void AddDistinct<T>(this ICollection<T> obj, IEqualityCo...
method Replace (line 69) | public static void Replace<T>(this ICollection<T> obj, IEnumerable<T> ...
method Patch (line 80) | public static void Patch<T>(this ICollection<T> source, ICollection<T>...
method Patch (line 86) | public static void Patch<T>(this ICollection<T> source, ICollection<T>...
method CompareTo (line 107) | public static void CompareTo<T>(this ICollection<T> source, ICollectio...
FILE: VirtoCommerce.Storefront.Model/Common/DefaultableDictionary.cs
class DefaultableDictionaryExtensions (line 6) | public static class DefaultableDictionaryExtensions
method WithDefaultValue (line 8) | public static IDictionary<TKey, TValue> WithDefaultValue<TValue, TKey>...
class DefaultableDictionary (line 17) | public class DefaultableDictionary<TKey, TValue> : IDictionary<TKey, TVa...
method DefaultableDictionary (line 22) | public DefaultableDictionary(IDictionary<TKey, TValue> dictionary, TVa...
method GetEnumerator (line 28) | public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
method GetEnumerator (line 33) | IEnumerator IEnumerable.GetEnumerator()
method Add (line 38) | public void Add(KeyValuePair<TKey, TValue> item)
method Clear (line 43) | public void Clear()
method Contains (line 48) | public bool Contains(KeyValuePair<TKey, TValue> item)
method CopyTo (line 53) | public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)
method Remove (line 58) | public bool Remove(KeyValuePair<TKey, TValue> item)
method ContainsKey (line 73) | public bool ContainsKey(TKey key)
method Add (line 78) | public void Add(TKey key, TValue value)
method Remove (line 83) | public bool Remove(TKey key)
method TryGetValue (line 88) | public bool TryGetValue(TKey key, out TValue value)
FILE: VirtoCommerce.Storefront.Model/Common/DynamicPropertyExtension.cs
class DynamicPropertiesExtensions (line 7) | public static class DynamicPropertiesExtensions
method GetDynamicPropertyValue (line 9) | public static string GetDynamicPropertyValue(this IEnumerable<DynamicP...
method GetDynamicPropertyDictValue (line 28) | public static DynamicPropertyDictionaryItem GetDynamicPropertyDictValu...
method GetDynamicPropertyArrayValues (line 45) | public static string[] GetDynamicPropertyArrayValues(this IEnumerable<...
FILE: VirtoCommerce.Storefront.Model/Common/EmptyDisposable.cs
class EmptyDisposable (line 5) | public sealed class EmptyDisposable : IDisposable
method Dispose (line 9) | public void Dispose()
FILE: VirtoCommerce.Storefront.Model/Common/Entity.cs
class Entity (line 5) | public abstract class Entity : ValueObject, IEntity
method IsTransient (line 9) | public bool IsTransient()
method GetEqualityComponents (line 14) | protected override IEnumerable<object> GetEqualityComponents()
FILE: VirtoCommerce.Storefront.Model/Common/EntryState.cs
type EntryState (line 3) | public enum EntryState
FILE: VirtoCommerce.Storefront.Model/Common/EnumUtility.cs
class EnumUtility (line 5) | public static class EnumUtility
method SafeParse (line 7) | public static T SafeParse<T>(string value, T defaultValue)
FILE: VirtoCommerce.Storefront.Model/Common/EnumerableExtension.cs
class EnumerableExtensions (line 7) | public static class EnumerableExtensions
method IsNullOrEmpty (line 12) | public static bool IsNullOrEmpty<T>(this IEnumerable<T> data)
method GetOrderIndependentHashCode (line 17) | public static int GetOrderIndependentHashCode<T>(this IEnumerable<T> s...
method Apply (line 33) | public static void Apply<T>(this IEnumerable<T> items, Action<T> action)
method Apply (line 46) | public static void Apply<T>(this List<T> items, Action<T> action)
FILE: VirtoCommerce.Storefront.Model/Common/EventThrottlingExtensions.cs
class EventThrottlingExtensions (line 7) | public static class EventThrottlingExtensions
method Throttle (line 9) | public static FileSystemEventHandler Throttle(this FileSystemEventHand...
FILE: VirtoCommerce.Storefront.Model/Common/Events/DomainEvent.cs
class DomainEvent (line 5) | public class DomainEvent : IEvent
method DomainEvent (line 7) | public DomainEvent()
FILE: VirtoCommerce.Storefront.Model/Common/Events/ICancellableEventHandler.cs
type ICancellableEventHandler (line 5) | public interface ICancellableEventHandler<in T> : ICancellableHandler<T>...
FILE: VirtoCommerce.Storefront.Model/Common/Events/IEvent.cs
type IEvent (line 6) | public interface IEvent : IMessage
FILE: VirtoCommerce.Storefront.Model/Common/Events/IEventHandler.cs
type IEventHandler (line 6) | public interface IEventHandler<in T> : IHandler<T> where T : IEvent
FILE: VirtoCommerce.Storefront.Model/Common/Events/IEventPublisher.cs
type IEventPublisher (line 6) | public interface IEventPublisher
method Publish (line 8) | Task Publish<T>(T @event, CancellationToken cancellationToken = defaul...
FILE: VirtoCommerce.Storefront.Model/Common/Exceptions/StorefrontException.cs
class StorefrontException (line 6) | [Serializable]
method StorefrontException (line 11) | [Obsolete(DiagnosticId = "SYSLIB0051")]
method StorefrontException (line 17) | public StorefrontException()
method StorefrontException (line 22) | public StorefrontException(string message)
method StorefrontException (line 26) | public StorefrontException(string message, string view)
method StorefrontException (line 31) | public StorefrontException(string message, Exception innerException, s...
method GetObjectData (line 37) | [Obsolete(DiagnosticId = "SYSLIB0051")]
FILE: VirtoCommerce.Storefront.Model/Common/GenericSearchResult.cs
class GenericSearchResult (line 5) | public class GenericSearchResult<T>
method GenericSearchResult (line 7) | public GenericSearchResult()
FILE: VirtoCommerce.Storefront.Model/Common/GeoPoint.cs
class GeoPoint (line 7) | public class GeoPoint : ValueObject
method GeoPoint (line 10) | public GeoPoint()
method GeoPoint (line 15) | public GeoPoint(double latitude, double longitude)
method IsValidLatitude (line 37) | public static bool IsValidLatitude(double latitude)
method IsValidLongitude (line 47) | public static bool IsValidLongitude(double longitude)
method ToString (line 52) | public override string ToString()
method Parse (line 57) | public static GeoPoint Parse(string value)
method TryParse (line 67) | public static GeoPoint TryParse(string value)
FILE: VirtoCommerce.Storefront.Model/Common/IAccessibleByIndexKey.cs
type IAccessibleByIndexKey (line 6) | public interface IAccessibleByIndexKey
FILE: VirtoCommerce.Storefront.Model/Common/IEntity.cs
type IEntity (line 3) | public interface IEntity
FILE: VirtoCommerce.Storefront.Model/Common/IHasBreadcrumbs.cs
type IHasBreadcrumbs (line 5) | public interface IHasBreadcrumbs
method GetBreadcrumbs (line 7) | IEnumerable<Breadcrumb> GetBreadcrumbs();
FILE: VirtoCommerce.Storefront.Model/Common/IHasQueryKeyValues.cs
type IHasQueryKeyValues (line 5) | public interface IHasQueryKeyValues
method GetQueryKeyValues (line 7) | IEnumerable<KeyValuePair<string, string>> GetQueryKeyValues();
FILE: VirtoCommerce.Storefront.Model/Common/IMutablePagedList.cs
type IMutablePagedList (line 10) | public interface IMutablePagedList : IPagedList
method Slice (line 21) | void Slice(int pageNumber, int pageSize, IEnumerable<SortInfo> sortInf...
type IMutablePagedList (line 24) | public interface IMutablePagedList<out T> : IMutablePagedList, IPagedLis...
method Slice (line 21) | void Slice(int pageNumber, int pageSize, IEnumerable<SortInfo> sortInf...
FILE: VirtoCommerce.Storefront.Model/Common/IQueryableExtensions.cs
class IQueryableExtensions (line 8) | public static class IQueryableExtensions
method OrderBy (line 10) | public static IOrderedQueryable<T> OrderBy<T>(this IQueryable<T> sourc...
method OrderByDescending (line 14) | public static IOrderedQueryable<T> OrderByDescending<T>(this IQueryabl...
method ThenBy (line 18) | public static IOrderedQueryable<T> ThenBy<T>(this IOrderedQueryable<T>...
method ThenByDescending (line 22) | public static IOrderedQueryable<T> ThenByDescending<T>(this IOrderedQu...
method OrderBySortInfos (line 28) | public static IOrderedQueryable<T> OrderBySortInfos<T>(this IQueryable...
method ThenBySortInfos (line 42) | public static IOrderedQueryable<T> ThenBySortInfos<T>(this IOrderedQue...
method ApplyOrder (line 62) | public static IOrderedQueryable<T> ApplyOrder<T>(IQueryable<T> source,...
FILE: VirtoCommerce.Storefront.Model/Common/IStorefrontUrlBuilder.cs
type IStorefrontUrlBuilder (line 5) | public interface IStorefrontUrlBuilder
method ToAppAbsolute (line 7) | string ToAppAbsolute(string virtualPath);
method ToAppAbsolute (line 8) | string ToAppAbsolute(string virtualPath, Store store, Language language);
method ToStoreAbsolute (line 9) | string ToStoreAbsolute(string virtualPath, Store store = null, Languag...
method ToAppRelative (line 10) | string ToAppRelative(string virtualPath);
method ToAppRelative (line 11) | string ToAppRelative(string virtualPath, Store store, Language language);
method ToLocalPath (line 12) | string ToLocalPath(string virtualPath);
FILE: VirtoCommerce.Storefront.Model/Common/IValueObject.cs
type IValueObject (line 3) | public interface IValueObject
FILE: VirtoCommerce.Storefront.Model/Common/LocalizationExtensions.cs
class LocalizationExtensions (line 8) | public static class LocalizationExtensions
method FindWithLanguage (line 24) | public static T FindWithLanguage<T>(this IEnumerable<T> items, Languag...
method FindWithLanguage (line 36) | public static TValue FindWithLanguage<T, TValue>(this IEnumerable<T> i...
method GetLocalizedStringsForLanguage (line 53) | public static IEnumerable<LocalizedString> GetLocalizedStringsForLangu...
method GetCurrencySymbol (line 67) | public static string GetCurrencySymbol(this string ISOCurrencySymbol)
FILE: VirtoCommerce.Storefront.Model/Common/Messages/ICancellableHandler.cs
type ICancellableHandler (line 6) | public interface ICancellableHandler<in T> where T : IMessage
method Handle (line 8) | Task Handle(T message, CancellationToken token = default(CancellationT...
FILE: VirtoCommerce.Storefront.Model/Common/Messages/IHandler.cs
type IHandler (line 5) | public interface IHandler<in T> where T : IMessage
method Handle (line 7) | Task Handle(T message);
FILE: VirtoCommerce.Storefront.Model/Common/Messages/IMessage.cs
type IMessage (line 3) | public interface IMessage
FILE: VirtoCommerce.Storefront.Model/Common/Money/Currency.cs
class Currency (line 11) | public class Currency : ValueObject
method Currency (line 14) | static Currency()
method Currency (line 33) | protected Currency()
method Currency (line 37) | public Currency(Language language, string code, string name, string sy...
method Currency (line 53) | public Currency(Language language, string code)
method Initialize (line 101) | private void Initialize()
method GetHashCode (line 131) | public override int GetHashCode()
method Equals (line 136) | public override bool Equals(object obj)
method GetEqualityComponents (line 146) | protected override IEnumerable<object> GetEqualityComponents()
FILE: VirtoCommerce.Storefront.Model/Common/Money/IConvertible.cs
type IConvertible (line 3) | public interface IConvertible<out T>
method ConvertTo (line 5) | T ConvertTo(Currency currency);
FILE: VirtoCommerce.Storefront.Model/Common/Money/Money.cs
class Money (line 36) | public sealed class Money : IComparable<Money>, IEquatable<Money>, IComp...
method Money (line 40) | public Money()
method Money (line 44) | public Money(Currency currency)
method Money (line 49) | public Money(double amount, Currency currency)
method Money (line 54) | public Money(decimal amount, Currency currency)
method GetHashCode (line 129) | public override int GetHashCode()
method Equals (line 134) | public override bool Equals(object obj)
method Equals (line 139) | public bool Equals(Money other)
method CompareTo (line 198) | public int CompareTo(object obj)
method CompareTo (line 213) | public int CompareTo(Money other)
method ToString (line 351) | public override string ToString()
method ToString (line 356) | public string ToString(bool showDecimalDigits, bool showCurrencySymbol)
method ConvertTo (line 389) | public Money ConvertTo(Currency currency)
method Clone (line 401) | public object Clone()
FILE: VirtoCommerce.Storefront.Model/Common/MutablePagedList.cs
class MutablePagedList (line 10) | public sealed class MutablePagedList<T> : PagedListMetaData, IMutablePag...
method MutablePagedList (line 17) | public MutablePagedList(IEnumerable<T> superSet, int pageNumber, int p...
method MutablePagedList (line 24) | public MutablePagedList(IEnumerable<T> superSet)
method MutablePagedList (line 29) | public MutablePagedList(Func<int, int, IEnumerable<SortInfo>, IPagedLi...
method MutablePagedList (line 34) | public MutablePagedList(Func<int, int, IEnumerable<SortInfo>, NameValu...
method Slice (line 58) | public void Slice(int pageNumber, int pageSize, IEnumerable<SortInfo> ...
method GetEnumerator (line 104) | public IEnumerator<T> GetEnumerator()
method GetEnumerator (line 114) | IEnumerator IEnumerable.GetEnumerator()
method GetMetaData (line 148) | public IPagedList GetMetaData()
method Add (line 179) | public int Add(object value)
method CanWrite (line 184) | public bool CanWrite(string member)
method Clear (line 189) | public void Clear()
method Contains (line 195) | public bool Contains(object value)
method CopyTo (line 201) | public void CopyTo(Array array, int index)
method IndexOf (line 207) | public int IndexOf(object value)
method Insert (line 217) | public void Insert(int index, object value)
method Remove (line 222) | public void Remove(object value)
method RemoveAt (line 227) | public void RemoveAt(int index)
method Add (line 232) | public void Add(object key, object value)
method GetEnumerator (line 277) | IDictionaryEnumerator IDictionary.GetEnumerator()
method TryGetValue (line 285) | private bool TryGetValue(object key, out object value)
method ReloadPagedData (line 316) | private void ReloadPagedData()
FILE: VirtoCommerce.Storefront.Model/Common/MutablePagedListExtensions.cs
class MutablePagedListExtensions (line 3) | public static class MutablePagedListExtensions
method GetTotalCount (line 11) | public static int GetTotalCount<T>(this IMutablePagedList<T> list)
FILE: VirtoCommerce.Storefront.Model/Common/Notifications/EmailNotificationBase.cs
class EmailNotificationBase (line 5) | public abstract class EmailNotificationBase : NotificationBase
method EmailNotificationBase (line 7) | protected EmailNotificationBase(string storeId, Language language)
method GetNotificationParameters (line 14) | public override IEnumerable<KeyValuePair<string, string>> GetNotificat...
FILE: VirtoCommerce.Storefront.Model/Common/Notifications/NotificationBase.cs
class NotificationBase (line 5) | public abstract class NotificationBase : ValueObject
method NotificationBase (line 7) | protected NotificationBase(string storeId, Language language)
method GetNotificationParameters (line 19) | public virtual IEnumerable<KeyValuePair<string, string>> GetNotificati...
FILE: VirtoCommerce.Storefront.Model/Common/Notifications/SmsNotificationBase.cs
class SmsNotificationBase (line 3) | public abstract class SmsNotificationBase : NotificationBase
method SmsNotificationBase (line 5) | protected SmsNotificationBase(string storeId, Language language)
FILE: VirtoCommerce.Storefront.Model/Common/NumericRange.cs
class NumericRange (line 3) | public class NumericRange : ValueObject
FILE: VirtoCommerce.Storefront.Model/Common/ObjectExtensions.cs
class ObjectExtensions (line 7) | public static class ObjectExtensions
method CopyFrom (line 9) | public static void CopyFrom(this object obj, NameValueCollection source)
FILE: VirtoCommerce.Storefront.Model/Common/PagedSearchCriteria.cs
class PagedSearchCriteria (line 6) | public class PagedSearchCriteria : ValueObject
method PagedSearchCriteria (line 8) | public PagedSearchCriteria(IDictionary<string, string> queryString, in...
method GetQueryKeyValues (line 25) | public virtual IEnumerable<KeyValuePair<string, string>> GetQueryKeyVa...
FILE: VirtoCommerce.Storefront.Model/Common/PathUtils.cs
class PathUtils (line 7) | public static class PathUtils
method HasInvalidPathChars (line 15) | public static bool HasInvalidPathChars(string path)
method HasInvalidFilterChars (line 20) | public static bool HasInvalidFilterChars(string path)
method EnsureTrailingSlash (line 25) | public static string EnsureTrailingSlash(string path)
method PathNavigatesAboveRoot (line 36) | public static bool PathNavigatesAboveRoot(string path)
FILE: VirtoCommerce.Storefront.Model/Common/ReflectionExtension.cs
class ReflectionExtension (line 9) | public static class ReflectionExtension
method GetTypePropsRecursively (line 11) | public static IEnumerable<PropertyInfo> GetTypePropsRecursively(this T...
method IteratePropsInner (line 16) | private static IEnumerable<PropertyInfo> IteratePropsInner(Type baseTy...
method ListTypesOrSelf (line 33) | public static Type ListTypesOrSelf(Type type)
method GetEnumerableType (line 38) | public static Type GetEnumerableType(this Type type)
method IsAssignableFromGenericList (line 43) | public static bool IsAssignableFromGenericList(this Type type)
method GetFlatObjectsListWithInterface (line 48) | public static T[] GetFlatObjectsListWithInterface<T>(this object obj, ...
method AsDictionary (line 96) | public static IDictionary<string, object> AsDictionary(this object sou...
FILE: VirtoCommerce.Storefront.Model/Common/SettingsExtension.cs
class SettingsExtension (line 8) | public static class SettingsExtension
method GetSettingValue (line 10) | public static T GetSettingValue<T>(this IEnumerable<SettingEntry> sett...
FILE: VirtoCommerce.Storefront.Model/Common/SortInfo.cs
type SortDirection (line 10) | public enum SortDirection
class SortInfo (line 22) | public sealed class SortInfo : ValueObject
method ToString (line 24) | public override string ToString()
method ToString (line 28) | public static string ToString(IEnumerable<SortInfo> sortInfos)
method Parse (line 36) | public static IEnumerable<SortInfo> Parse(string sortExpr)
FILE: VirtoCommerce.Storefront.Model/Common/Specifications/ISpecification.cs
type ISpecification (line 3) | public interface ISpecification<in T>
method IsSatisfiedBy (line 5) | bool IsSatisfiedBy(T obj);
FILE: VirtoCommerce.Storefront.Model/Common/StreamExtensions.cs
class StreamExtensions (line 7) | public static class StreamExtensions
method CopyTo (line 9) | public static void CopyTo(this Stream fromStream, Stream toStream)
method ReadFully (line 28) | public static byte[] ReadFully(this Stream stream)
method ReadToString (line 40) | public static string ReadToString(this Stream stream)
method ReadToStringAsync (line 47) | public static async Task<string> ReadToStringAsync(this Stream stream)
FILE: VirtoCommerce.Storefront.Model/Common/StringExtensions.cs
class StringExtensions (line 10) | public static class StringExtensions
method PascalToKebabCase (line 18) | public static string PascalToKebabCase(this string name)
method IsValidJsonPath (line 29) | public static bool IsValidJsonPath(this string input)
method IsValidEmail (line 38) | public static bool IsValidEmail(this string input)
method JoinWithoutWhitespaces (line 47) | public static string JoinWithoutWhitespaces(this IEnumerable<string> i...
method Decamelize (line 63) | public static string Decamelize(this string str, char spacer = '_')
method EqualsInvariant (line 91) | public static bool EqualsInvariant(this string str1, string str2)
method FilePathHasMaskChars (line 96) | public static bool FilePathHasMaskChars(this string path)
method AddIfNotContains (line 101) | public static string AddIfNotContains(this string inputStr, string str...
method FitsMask (line 112) | public static bool FitsMask(this string fileName, string fileMask)
method ToNullableInt (line 118) | public static int? ToNullableInt(this string str)
method SplitIntoTuple (line 127) | public static Tuple<string, string, string> SplitIntoTuple(this string...
method RemoveAccent (line 138) | public static string RemoveAccent(this string txt)
method Handelize (line 144) | public static string Handelize(this string phrase)
method RemoveLeadingUriScheme (line 162) | public static string RemoveLeadingUriScheme(this string str)
method ReplaceLastOccurrence (line 175) | public static string ReplaceLastOccurrence(this string source, string ...
method AddSuffixToFileUrl (line 193) | public static string AddSuffixToFileUrl(this string originalFileUrl, s...
FILE: VirtoCommerce.Storefront.Model/Common/TreeNode.cs
class TreeNode (line 6) | public partial class TreeNode
FILE: VirtoCommerce.Storefront.Model/Common/TypeExtensions.cs
class TypeExtensions (line 10) | public static class TypeExtensions
method GetTypeInheritanceChainTo (line 12) | public static Type[] GetTypeInheritanceChainTo(this Type type, Type to...
method PrettyPrint (line 29) | public static string PrettyPrint(this Type type)
method GetCacheKey (line 47) | public static string GetCacheKey(this Type type)
method PrettyPrintRecursive (line 52) | private static string PrettyPrintRecursive(Type type, int depth)
method FriendlyId (line 71) | public static string FriendlyId(this Type type, bool fullyQualified = ...
method FullNameSansTypeParameters (line 92) | public static string FullNameSansTypeParameters(this Type type)
FILE: VirtoCommerce.Storefront.Model/Common/ValueObject.cs
class ValueObject (line 10) | public abstract class ValueObject : IValueObject, ICacheKey, ICloneable
method Equals (line 14) | public override bool Equals(object obj)
method GetHashCode (line 35) | public override int GetHashCode()
method ToString (line 55) | public override string ToString()
FILE: VirtoCommerce.Storefront.Model/ContactForm.cs
class ContactForm (line 6) | public partial class ContactForm : ValueObject
method ContactForm (line 8) | public ContactForm()
FILE: VirtoCommerce.Storefront.Model/Country.cs
class Country (line 3) | public partial class Country
FILE: VirtoCommerce.Storefront.Model/CountryRegion.cs
class CountryRegion (line 3) | public partial class CountryRegion
FILE: VirtoCommerce.Storefront.Model/Customer/Contact.cs
class Contact (line 8) | public partial class Contact : Member
FILE: VirtoCommerce.Storefront.Model/Customer/Member.cs
class Member (line 9) | public class Member : Entity
method ToString (line 40) | public override string ToString()
FILE: VirtoCommerce.Storefront.Model/Customer/Organization.cs
class Organization (line 7) | public partial class Organization : Member
FILE: VirtoCommerce.Storefront.Model/Customer/OrganizationContactsSearchCriteria.cs
class OrganizationContactsSearchCriteria (line 6) | public class OrganizationContactsSearchCriteria : PagedSearchCriteria
method OrganizationContactsSearchCriteria (line 11) | public OrganizationContactsSearchCriteria()
method OrganizationContactsSearchCriteria (line 16) | public OrganizationContactsSearchCriteria(IDictionary<string, string> ...
FILE: VirtoCommerce.Storefront.Model/Customer/SecurityAccount.cs
class SecurityAccount (line 6) | public class SecurityAccount : Entity
FILE: VirtoCommerce.Storefront.Model/Customer/Services/IMemberService.cs
type IMemberService (line 7) | public interface IMemberService
method GetContactByIdAsync (line 9) | Task<Contact> GetContactByIdAsync(string contactId);
method CreateContactAsync (line 10) | Task<Contact> CreateContactAsync(Contact contact);
method UpdateContactAsync (line 11) | Task UpdateContactAsync(Contact contact);
method UpdateContactAddressesAsync (line 12) | Task UpdateContactAddressesAsync(string contactId, IList<Address> addr...
method DeleteContactAsync (line 13) | Task DeleteContactAsync(string contactId);
method SearchOrganizationContacts (line 15) | IPagedList<Contact> SearchOrganizationContacts(OrganizationContactsSea...
method SearchOrganizationContactsAsync (line 16) | Task<IPagedList<Contact>> SearchOrganizationContactsAsync(Organization...
method GetOrganizationByIdAsync (line 18) | Task<Organization> GetOrganizationByIdAsync(string organizationId);
method CreateOrganizationAsync (line 19) | Task<Organization> CreateOrganizationAsync(Organization organization);
method UpdateOrganizationAsync (line 20) | Task UpdateOrganizationAsync(Organization organization);
FILE: VirtoCommerce.Storefront.Model/DynamicProperty.cs
class DynamicProperty (line 6) | public partial class DynamicProperty : Entity, IAccessibleByIndexKey
FILE: VirtoCommerce.Storefront.Model/DynamicPropertyDictionaryItem.cs
class DynamicPropertyDictionaryItem (line 6) | public partial class DynamicPropertyDictionaryItem : Entity
FILE: VirtoCommerce.Storefront.Model/DynamicPropertyName.cs
class DynamicPropertyName (line 3) | public partial class DynamicPropertyName
FILE: VirtoCommerce.Storefront.Model/EditorialReview.cs
class EditorialReview (line 5) | public partial class EditorialReview : LocalizedString, IAccessibleByInd...
FILE: VirtoCommerce.Storefront.Model/Features/Exceptions/FeaturesException.cs
class FeaturesException (line 6) | [Serializable]
method FeaturesException (line 9) | [Obsolete(DiagnosticId = "SYSLIB0051")]
method FeaturesException (line 14) | public FeaturesException(string message)
method FeaturesException (line 19) | public FeaturesException(string message, Exception exception)
FILE: VirtoCommerce.Storefront.Model/Features/Feature.cs
class Feature (line 5) | public class Feature
method ToString (line 17) | public override string ToString()
FILE: VirtoCommerce.Storefront.Model/Features/FeatureExtensions.cs
class FeatureExtensions (line 8) | public static class FeatureExtensions
method AnyConflictWith (line 10) | public static bool AnyConflictWith(this IReadOnlyCollection<Feature> f...
method AnyInactive (line 15) | public static bool AnyInactive(this IEnumerable<Feature> features)
method AnyReplacedBy (line 20) | public static bool AnyReplacedBy(this IReadOnlyCollection<Feature> fea...
method GetFeature (line 25) | public static Feature GetFeature(this IReadOnlyCollection<Feature> fea...
method GetReferenceFeatures (line 37) | public static IEnumerable<Feature> GetReferenceFeatures(
FILE: VirtoCommerce.Storefront.Model/Features/FeaturesAgent.cs
class FeaturesAgent (line 10) | public class FeaturesAgent : IFeaturesAgent
method FeaturesAgent (line 14) | public FeaturesAgent(string featuresBranchToken = "features")
method IsActive (line 19) | public bool IsActive(string featureName, JObject jObject)
method GetFeatures (line 47) | private List<Feature> GetFeatures(JObject jObject)
FILE: VirtoCommerce.Storefront.Model/Features/IFeaturesAgent.cs
type IFeaturesAgent (line 5) | public interface IFeaturesAgent
method IsActive (line 7) | bool IsActive(string featureName, JObject jObject);
FILE: VirtoCommerce.Storefront.Model/Form.cs
class Form (line 10) | public partial class Form : IDictionary
method Form (line 14) | public Form()
method Form (line 19) | private Form(IDictionary<string, object> dict)
method FromObject (line 26) | public static Form FromObject(object obj)
method Add (line 41) | public void Add(object key, object value)
method Clear (line 46) | public void Clear()
method Contains (line 51) | public bool Contains(object key)
method GetEnumerator (line 56) | public IDictionaryEnumerator GetEnumerator()
method Remove (line 61) | public void Remove(object key)
method CopyTo (line 66) | public void CopyTo(Array array, int index)
method GetEnumerator (line 71) | IEnumerator IEnumerable.GetEnumerator()
method TryGetValue (line 116) | private bool TryGetValue(object key, out object value)
FILE: VirtoCommerce.Storefront.Model/FormError.cs
class FormError (line 5) | public class FormError : ValueObject, IAccessibleByIndexKey
method ToString (line 12) | public override string ToString()
FILE: VirtoCommerce.Storefront.Model/ICountriesService.cs
type ICountriesService (line 6) | public interface ICountriesService
method GetCountriesAsync (line 8) | Task<IList<Country>> GetCountriesAsync();
FILE: VirtoCommerce.Storefront.Model/ICurrencyService.cs
type ICurrencyService (line 6) | public interface ICurrencyService
method GetAllCurrenciesAsync (line 8) | Task<Currency[]> GetAllCurrenciesAsync(Language language);
FILE: VirtoCommerce.Storefront.Model/IHasLanguage.cs
type IHasLanguage (line 3) | public interface IHasLanguage
FILE: VirtoCommerce.Storefront.Model/IHasSettings.cs
type IHasSettings (line 5) | public interface IHasSettings
FILE: VirtoCommerce.Storefront.Model/ISeoInfoService.cs
type ISeoInfoService (line 7) | public interface ISeoInfoService
method GetSeoInfosBySlug (line 9) | Task<SeoInfo[]> GetSeoInfosBySlug(string slug);
method GetBestMatchingSeoInfos (line 11) | Task<SeoInfo[]> GetBestMatchingSeoInfos(string slug, Store store, stri...
method GetContentItem (line 13) | ContentItem GetContentItem(string slug, WorkContext context);
FILE: VirtoCommerce.Storefront.Model/ISpaRouteService.cs
type ISpaRouteService (line 5) | public interface ISpaRouteService
method IsSpaRoute (line 7) | Task<bool> IsSpaRoute(string route);
FILE: VirtoCommerce.Storefront.Model/IWorkContextAccessor.cs
type IWorkContextAccessor (line 3) | public interface IWorkContextAccessor
FILE: VirtoCommerce.Storefront.Model/Image.cs
class Image (line 6) | public partial class Image : ValueObject
method GetEqualityComponents (line 30) | protected override IEnumerable<object> GetEqualityComponents()
FILE: VirtoCommerce.Storefront.Model/Interaction/Client.cs
class Client (line 3) | public class Client
FILE: VirtoCommerce.Storefront.Model/Interaction/Page.cs
class Page (line 3) | public class Page
FILE: VirtoCommerce.Storefront.Model/Interaction/UserEvent.cs
class UserEvent (line 5) | public class UserEvent
FILE: VirtoCommerce.Storefront.Model/Interaction/UserSession.cs
class UserSession (line 5) | public class UserSession
FILE: VirtoCommerce.Storefront.Model/Language.cs
class Language (line 10) | public partial class Language : ValueObject
method Language (line 12) | private Language()
method Language (line 17) | public Language(string cultureName)
method GetEqualityComponents (line 74) | protected override IEnumerable<object> GetEqualityComponents()
FILE: VirtoCommerce.Storefront.Model/LinkList/CategoryMenuLink.cs
class CategoryMenuLink (line 6) | public class CategoryMenuLink : MenuLink
FILE: VirtoCommerce.Storefront.Model/LinkList/MenuLink.cs
class MenuLink (line 8) | public class MenuLink : Entity, IAccessibleByIndexKey
FILE: VirtoCommerce.Storefront.Model/LinkList/MenuLinkList.cs
class MenuLinkList (line 10) | public class MenuLinkList : Entity, IHasLanguage, IAccessibleByIndexKey
FILE: VirtoCommerce.Storefront.Model/LinkList/ProductMenuLink.cs
class ProductMenuLink (line 6) | public class ProductMenuLink : MenuLink
FILE: VirtoCommerce.Storefront.Model/LinkList/Services/ILinkListService.cs
type IMenuLinkListService (line 7) | public interface IMenuLinkListService
method LoadAllStoreLinkLists (line 9) | IList<MenuLinkList> LoadAllStoreLinkLists(Store store, Language langua...
method LoadAllStoreLinkListsAsync (line 10) | Task<IList<MenuLinkList>> LoadAllStoreLinkListsAsync(Store store, Lang...
FILE: VirtoCommerce.Storefront.Model/LocalizedString.cs
class LocalizedString (line 3) | public class LocalizedString : IHasLanguage
method LocalizedString (line 5) | public LocalizedString()
method LocalizedString (line 10) | public LocalizedString(Language language, string value)
FILE: VirtoCommerce.Storefront.Model/LoginProvider.cs
class LoginProvider (line 5) | public class LoginProvider
FILE: VirtoCommerce.Storefront.Model/Security/AccountState.cs
type AccountState (line 3) | public enum AccountState
FILE: VirtoCommerce.Storefront.Model/Security/ChangePassword.cs
class ChangePassword (line 5) | public partial class ChangePassword : ValueObject
FILE: VirtoCommerce.Storefront.Model/Security/ChangeTwoFactorAuthenticationModel.cs
class ChangeTwoFactorAuthenticationModel (line 3) | public class ChangeTwoFactorAuthenticationModel
FILE: VirtoCommerce.Storefront.Model/Security/ChangeTwoFactorAuthenticationResult.cs
class ChangeTwoFactorAuthenticationResult (line 5) | public class ChangeTwoFactorAuthenticationResult
FILE: VirtoCommerce.Storefront.Model/Security/ConfirmEmailModel.cs
class ConfirmEmailModel (line 5) | public class ConfirmEmailModel
FILE: VirtoCommerce.Storefront.Model/Security/CustomSignInResult.cs
class CustomSignInResult (line 3) | public class CustomSignInResult : Microsoft.AspNetCore.Identity.SignInRe...
FILE: VirtoCommerce.Storefront.Model/Security/Events/UserDeletedEvent.cs
class UserDeletedEvent (line 5) | public class UserDeletedEvent : DomainEvent
method UserDeletedEvent (line 7) | public UserDeletedEvent(WorkContext workContext, User user)
FILE: VirtoCommerce.Storefront.Model/Security/Events/UserLoginEvent.cs
class UserLoginEvent (line 8) | public partial class UserLoginEvent : DomainEvent
method UserLoginEvent (line 10) | public UserLoginEvent(WorkContext workContext, User user)
FILE: VirtoCommerce.Storefront.Model/Security/Events/UserRegisteredEvent.cs
class UserRegisteredEvent (line 5) | public class UserRegisteredEvent : DomainEvent
method UserRegisteredEvent (line 7) | public UserRegisteredEvent(WorkContext workContext, User user, UserReg...
FILE: VirtoCommerce.Storefront.Model/Security/ExternalUserLoginInfo.cs
class ExternalUserLoginInfo (line 6) | public class ExternalUserLoginInfo : ValueObject
method GetEqualityComponents (line 25) | protected override IEnumerable<object> GetEqualityComponents()
FILE: VirtoCommerce.Storefront.Model/Security/ForgotPassword.cs
class ForgotPassword (line 6) | public partial class ForgotPassword : ValueObject
FILE: VirtoCommerce.Storefront.Model/Security/ForgotPasswordModel.cs
class ForgotPasswordModel (line 5) | public class ForgotPasswordModel
FILE: VirtoCommerce.Storefront.Model/Security/Login.cs
class Login (line 6) | public partial class Login
FILE: VirtoCommerce.Storefront.Model/Security/OrganizationRegistration.cs
class OrganizationRegistration (line 3) | public partial class OrganizationRegistration : UserRegistration
FILE: VirtoCommerce.Storefront.Model/Security/OrganizationUserRegistration.cs
class OrganizationUserRegistration (line 5) | public partial class OrganizationUserRegistration : UserRegistration
FILE: VirtoCommerce.Storefront.Model/Security/PasswordChangeResult.cs
class PasswordChangeResult (line 5) | public class PasswordChangeResult
FILE: VirtoCommerce.Storefront.Model/Security/RemovePhoneNumberResult.cs
class RemovePhoneNumberResult (line 5) | public class RemovePhoneNumberResult
FILE: VirtoCommerce.Storefront.Model/Security/ResetPassword.cs
class ResetPassword (line 6) | public partial class ResetPassword
FILE: VirtoCommerce.Storefront.Model/Security/ResetPasswordByCodeModel.cs
class ResetPasswordByCodeModel (line 6) | public class ResetPasswordByCodeModel
FILE: VirtoCommerce.Storefront.Model/Security/ResetPasswordModel.cs
class ResetPasswordModel (line 5) | public class ResetPasswordModel
FILE: VirtoCommerce.Storefront.Model/Security/Role.cs
class Role (line 6) | public class Role : Entity
FILE: VirtoCommerce.Storefront.Model/Security/SecurityConstants.cs
class SecurityConstants (line 5) | public static class SecurityConstants
class Claims (line 9) | public static class Claims
class Roles (line 17) | public static class Roles
class Permissions (line 58) | public static class Permissions
FILE: VirtoCommerce.Storefront.Model/Security/SecurityErrorDescriber.cs
class SecurityErrorDescriber (line 5) | public static partial class SecurityErrorDescriber
method UsernameOrEmailIsRequired (line 7) | public static FormError UsernameOrEmailIsRequired()
method LoginFailed (line 15) | public static FormError LoginFailed()
method UserNotFound (line 24) | public static FormError UserNotFound()
method UserCannotLoginInStore (line 32) | public static FormError UserCannotLoginInStore()
method PhoneNumberNotFound (line 41) | public static FormError PhoneNumberNotFound()
method AccountIsBlocked (line 50) | public static FormError AccountIsBlocked()
method EmailVerificationIsRequired (line 59) | public static FormError EmailVerificationIsRequired()
method OperationFailed (line 68) | public static FormError OperationFailed()
method ResetPasswordIsTurnedOff (line 77) | public static FormError ResetPasswordIsTurnedOff()
method InvalidToken (line 86) | public static FormError InvalidToken()
method InvalidUrl (line 94) | public static FormError InvalidUrl()
method ResetPasswordInvalidData (line 102) | public static FormError ResetPasswordInvalidData()
method PasswordAndConfirmPasswordDoesNotMatch (line 110) | public static FormError PasswordAndConfirmPasswordDoesNotMatch()
method InvitationHasAreadyBeenUsed (line 118) | public static FormError InvitationHasAreadyBeenUsed()
method PhoneNumberVerificationFailed (line 126) | public static FormError PhoneNumberVerificationFailed()
method ErrorSendNotification (line 134) | public static FormError ErrorSendNotification(string error)
method UserIsLockedOut (line 142) | public static FormError UserIsLockedOut()
method UserIsTemporaryLockedOut (line 150) | public static FormError UserIsTemporaryLockedOut()
method PasswordExpired (line 158) | public static FormError PasswordExpired(string userId)
FILE: VirtoCommerce.Storefront.Model/Security/Specifications/CanUserLoginToStoreSpecification.cs
class CanUserLoginToStoreSpecification (line 9) | public class CanUserLoginToStoreSpecification : ISpecification<Store>
method CanUserLoginToStoreSpecification (line 12) | public CanUserLoginToStoreSpecification(User user)
method IsSatisfiedBy (line 16) | public virtual bool IsSatisfiedBy(Store obj)
FILE: VirtoCommerce.Storefront.Model/Security/Specifications/IsUserLockedByRequiredEmailVerificationSpecification.cs
class IsUserLockedByRequiredEmailVerificationSpecification (line 7) | public class IsUserLockedByRequiredEmailVerificationSpecification : ISpe...
method IsUserLockedByRequiredEmailVerificationSpecification (line 11) | public IsUserLockedByRequiredEmailVerificationSpecification(User user)
method IsSatisfiedBy (line 16) | public virtual bool IsSatisfiedBy(Store store)
FILE: VirtoCommerce.Storefront.Model/Security/Specifications/IsUserLockedOutSpecification.cs
class IsUserLockedOutSpecification (line 5) | public class IsUserLockedOutSpecification : ISpecification<User>
method IsSatisfiedBy (line 7) | public virtual bool IsSatisfiedBy(User obj)
FILE: VirtoCommerce.Storefront.Model/Security/Specifications/IsUserPasswordExpiredSpecification.cs
class IsUserPasswordExpiredSpecification (line 5) | public class IsUserPasswordExpiredSpecification : ISpecification<User>
method IsSatisfiedBy (line 7) | public virtual bool IsSatisfiedBy(User obj)
FILE: VirtoCommerce.Storefront.Model/Security/Specifications/IsUserSuspendedSpecification.cs
class IsUserSuspendedSpecification (line 5) | public class IsUserSuspendedSpecification : ISpecification<User>
method IsSatisfiedBy (line 7) | public bool IsSatisfiedBy(User obj)
FILE: VirtoCommerce.Storefront.Model/Security/Specifications/IsUserTemporaryLockedOutSpecification.cs
class IsUserTemporaryLockedOutSpecification (line 6) | public class IsUserTemporaryLockedOutSpecification : ISpecification<User>
method IsSatisfiedBy (line 8) | public virtual bool IsSatisfiedBy(User user)
FILE: VirtoCommerce.Storefront.Model/Security/UpdatePhoneNumberModel.cs
class UpdatePhoneNumberModel (line 6) | public class UpdatePhoneNumberModel
FILE: VirtoCommerce.Storefront.Model/Security/UpdatePhoneNumberResult.cs
class UpdatePhoneNumberResult (line 3) | public class UpdatePhoneNumberResult
FILE: VirtoCommerce.Storefront.Model/Security/User.cs
class User (line 11) | public partial class User : Entity
method User (line 13) | public User()
FILE: VirtoCommerce.Storefront.Model/Security/UserActionIdentityResult.cs
class UserActionIdentityResult (line 7) | public class UserActionIdentityResult
method Instance (line 39) | public static UserActionIdentityResult Instance(IdentityResult identit...
method Failed (line 55) | public static UserActionIdentityResult Failed(params IdentityError[] e...
method Failed (line 65) | public static UserActionIdentityResult Failed(params FormError[] errors)
method ToString (line 83) | public override string ToString()
FILE: VirtoCommerce.Storefront.Model/Security/UserRegistration.cs
class UserRegistration (line 7) | public partial class UserRegistration
FILE: VirtoCommerce.Storefront.Model/Security/UserRegistrationByInvitation.cs
class UserRegistrationByInvitation (line 6) | public partial class UserRegistrationByInvitation : UserRegistration
FILE: VirtoCommerce.Storefront.Model/Security/UserSearchResult.cs
class UserSearchResult (line 5) | public class UserSearchResult : GenericSearchResult<User>
FILE: VirtoCommerce.Storefront.Model/Security/UserUpdateInfo.cs
class UserUpdateInfo (line 6) | public partial class UserUpdateInfo : Entity
FILE: VirtoCommerce.Storefront.Model/Security/UsersInvitation.cs
class UsersInvitation (line 7) | public partial class UsersInvitation : ValueObject
FILE: VirtoCommerce.Storefront.Model/Security/ValidateTokenModel.cs
class ValidateTokenModel (line 5) | public partial class ValidateTokenModel
FILE: VirtoCommerce.Storefront.Model/Security/VerifyCodeViewModel.cs
class VerifyCodeViewModel (line 5) | public class VerifyCodeViewModel
FILE: VirtoCommerce.Storefront.Model/Security/VerifyPhoneNumberModel.cs
class VerifyPhoneNumberModel (line 6) | public class VerifyPhoneNumberModel
FILE: VirtoCommerce.Storefront.Model/SeoInfo.cs
class SeoInfo (line 8) | public partial class SeoInfo : ValueObject, IHasLanguage
FILE: VirtoCommerce.Storefront.Model/SeoLinksType.cs
type SeoLinksType (line 6) | public enum SeoLinksType
FILE: VirtoCommerce.Storefront.Model/SettingEntry.cs
class SettingEntry (line 6) | public partial class SettingEntry : IAccessibleByIndexKey
method SettingEntry (line 8) | public SettingEntry()
FILE: VirtoCommerce.Storefront.Model/SlugInfoRequest.cs
class SlugInfoRequest (line 5) | public class SlugInfoRequest
FILE: VirtoCommerce.Storefront.Model/SlugInfoResult.cs
class SlugInfoResult (line 5) | public class SlugInfoResult
FILE: VirtoCommerce.Storefront.Model/SlugRoutingData.cs
class SlugRoutingData (line 3) | public class SlugRoutingData
FILE: VirtoCommerce.Storefront.Model/SpaThemeContext.cs
class SpaThemeContext (line 7) | public class SpaThemeContext
method Create (line 21) | public static SpaThemeContext Create(WorkContext workContext, IStorefr...
FILE: VirtoCommerce.Storefront.Model/StaticContent/Blog.cs
class Blog (line 5) | public partial class Blog : ContentItem
method Blog (line 7) | public Blog()
FILE: VirtoCommerce.Storefront.Model/StaticContent/BlogArticle.cs
class BlogArticle (line 7) | public partial class BlogArticle : ContentItem
method LoadContent (line 23) | public override void LoadContent(string content, IDictionary<string, I...
FILE: VirtoCommerce.Storefront.Model/StaticContent/BlogSearchCriteria.cs
class BlogSearchCriteria (line 7) | public partial class BlogSearchCriteria : PagedSearchCriteria
method BlogSearchCriteria (line 11) | public BlogSearchCriteria()
method BlogSearchCriteria (line 16) | public BlogSearchCriteria(IDictionary<string, string> queryString)
method Parse (line 26) | protected virtual void Parse(NameValueCollection queryString)
FILE: VirtoCommerce.Storefront.Model/StaticContent/ContentInThemeSearchCriteria.cs
class ContentInThemeSearchCriteria (line 6) | public class ContentInThemeSearchCriteria
FILE: VirtoCommerce.Storefront.Model/StaticContent/ContentItem.cs
class ContentItem (line 8) | public abstract class ContentItem : IHasLanguage, IAccessibleByIndexKey
method ContentItem (line 10) | protected ContentItem()
method LoadContent (line 83) | public virtual void LoadContent(string content, IDictionary<string, IE...
method ToString (line 161) | public override string ToString()
FILE: VirtoCommerce.Storefront.Model/StaticContent/ContentPage.cs
class ContentPage (line 6) | public partial class ContentPage : ContentItem
method LoadContent (line 10) | public override void LoadContent(string content, IDictionary<string, I...
FILE: VirtoCommerce.Storefront.Model/StaticContent/IContentBlobProvider.cs
type IContentBlobProvider (line 10) | public interface IContentBlobProvider
method PathExists (line 17) | bool PathExists(string path);
method OpenRead (line 23) | Stream OpenRead(string path);
method OpenWrite (line 29) | Stream OpenWrite(string path);
method Search (line 38) | IEnumerable<string> Search(string path, string searchPattern, bool rec...
method Watch (line 45) | IChangeToken Watch(string path);
FILE: VirtoCommerce.Storefront.Model/StaticContent/IStaticContentItemFactory.cs
type IStaticContentItemFactory (line 3) | public interface IStaticContentItemFactory
method GetItemFromPath (line 5) | ContentItem GetItemFromPath(string path);
FILE: VirtoCommerce.Storefront.Model/StaticContent/IStaticContentLoader.cs
type IStaticContentLoader (line 5) | public interface IStaticContentLoader
method ReadMetaData (line 7) | void ReadMetaData(string content, IDictionary<string, IEnumerable<stri...
method PrepareContent (line 8) | string PrepareContent(string content);
FILE: VirtoCommerce.Storefront.Model/StaticContent/IStaticContentLoaderFactory.cs
type IStaticContentLoaderFactory (line 3) | public interface IStaticContentLoaderFactory
method CreateLoader (line 5) | IStaticContentLoader CreateLoader(ContentItem contentItem);
FILE: VirtoCommerce.Storefront.Model/StaticContent/IStaticContentService.cs
type IStaticContentService (line 9) | public interface IStaticContentService
method LoadStoreStaticContent (line 11) | IEnumerable<ContentItem> LoadStoreStaticContent(Store store, string ty...
FILE: VirtoCommerce.Storefront.Model/StaticContent/StaticContentSearchCriteria.cs
class StaticContentSearchCriteria (line 3) | public partial class StaticContentSearchCriteria
FILE: VirtoCommerce.Storefront.Model/StorefrontNotification.cs
class StorefrontNotification (line 3) | public partial class StorefrontNotification
FILE: VirtoCommerce.Storefront.Model/StorefrontNotificationType.cs
type StorefrontNotificationType (line 3) | public enum StorefrontNotificationType
FILE: VirtoCommerce.Storefront.Model/Stores/IStoreService.cs
type IStoreService (line 6) | public interface IStoreService
method GetAllStoresAsync (line 8) | Task<Store[]> GetAllStoresAsync();
method GetStoreByIdAsync (line 9) | Task<Store> GetStoreByIdAsync(string id, Currency currency = null);
FILE: VirtoCommerce.Storefront.Model/Stores/Store.cs
class Store (line 10) | public partial class Store : Entity, IHasSettings
method Store (line 14) | public Store()
method IsStoreUrl (line 161) | public bool IsStoreUrl(Uri url)
FILE: VirtoCommerce.Storefront.Model/Stores/StoreStatus.cs
type StoreStatus (line 3) | public enum StoreStatus
FILE: VirtoCommerce.Storefront.Model/SwaggerCustomSchemaIdAttribute.cs
class SwaggerSchemaIdAttribute (line 6) | [AttributeUsage(AttributeTargets.Class, Inherited = false)]
method SwaggerSchemaIdAttribute (line 11) | public SwaggerSchemaIdAttribute(string id)
FILE: VirtoCommerce.Storefront.Model/Term.cs
class Term (line 5) | public partial class Term : ValueObject
FILE: VirtoCommerce.Storefront.Model/TermExtensions.cs
class TermExtensions (line 7) | public static class TermExtensions
method ToTerms (line 10) | public static IEnumerable<Term> ToTerms(this string input)
method ToStrings (line 28) | public static List<string> ToStrings(this IEnumerable<Term> terms)
FILE: VirtoCommerce.Storefront.Model/WorkContext.cs
class WorkContext (line 14) | public class WorkContext : IDisposable, ICloneable
method WorkContext (line 16) | public WorkContext()
method Dispose (line 226) | public void Dispose()
method Dispose (line 232) | protected virtual void Dispose(bool disposing)
method Clone (line 240) | public object Clone()
FILE: VirtoCommerce.Storefront.Tests/Features/CustomServiceCollection.cs
class CustomServiceCollection (line 7) | public class CustomServiceCollection : ServiceCollection
method CustomServiceCollection (line 9) | public CustomServiceCollection()
FILE: VirtoCommerce.Storefront.Tests/Features/FeaturesAgentTests.cs
class FeaturesAgentTests (line 14) | public class FeaturesAgentTests
method IsActive_FeatureStatus_ShouldBeExpected (line 16) | [Theory]
method IsActive_FeatureWithoutReplaces_ShouldBeActive (line 51) | [Theory]
method IsActive_FeatureWithConflicts_ShouldBeInactive (line 71) | [Theory]
method IsActive_OrdersBrowsing_ShouldBeInactive (line 91) | [Fact]
method ReadSettingsFile (line 109) | private static JObject ReadSettingsFile(string defaultFileName = "test...
FILE: VirtoCommerce.Storefront.Tests/JsonConverterTests.cs
class JsonConverterTests (line 9) | public class JsonConverterTests
method SerializeUser (line 11) | [Fact]
FILE: VirtoCommerce.Storefront.Tests/LiquidThemeEngine/ShopifyLiquidThemeEngineTests.cs
class ShopifyLiquidThemeEngineTests (line 21) | public sealed class ShopifyLiquidThemeEngineTests : IDisposable
type DefaultThemeType (line 23) | private enum DefaultThemeType
method Settings_Without_Inheritance_Flat (line 96) | [Fact]
method Settings_Without_Inheritance_Presets (line 103) | [Fact]
method Settings_Without_Inheritance_Presets_And_Current_Object (line 110) | [Fact]
method Check_Without_Inheritance (line 117) | private void Check_Without_Inheritance()
method Settings_Inheritance_Backward_Compatibility_Base_Theme_Name (line 126) | [Fact]
method Settings_Inheritance_Backward_Compatibility_Base_Theme_Path_Without_Merge (line 139) | [Fact]
method Check_Inheritance_Backward_Compatibility (line 150) | private void Check_Inheritance_Backward_Compatibility(LiquidThemeEngin...
method Settings_Inheritance_Both_Are_Flat (line 159) | [Fact]
method Settings_Inheritance_Base_Has_Preset_Current_Is_Flat (line 166) | [Fact]
method Settings_Inheritance_Current_Select_Preset_From_Base (line 173) | [Fact]
method Check_Colors_In_Merged_Settings (line 180) | private void Check_Colors_In_Merged_Settings(bool isDarkPreset = false)
method InitializeStreams (line 193) | private void InitializeStreams(DefaultThemeType defaultThemeType, bool...
method InitializeStream (line 210) | private static void InitializeStream<T>(StreamWriter writer, out Strea...
method GetWorkContextAccessor (line 261) | private static IWorkContextAccessor GetWorkContextAccessor(bool useThe...
method GetThemeEngine (line 287) | private ShopifyLiquidThemeEngine GetThemeEngine(bool useThemesInherita...
method Dispose (line 293) | public void Dispose()
FILE: VirtoCommerce.Storefront.Tests/Model/MoneyOperationTests.cs
class MoneyOperationTests (line 7) | [Trait("Category", "CI")]
method TestGettingMoneyProperties (line 13) | [Theory]
FILE: VirtoCommerce.Storefront.Tests/ResponseCaching/ResponseCachingTests.cs
class AppTestFixture (line 22) | public class AppTestFixture : WebApplicationFactory<Startup>
method CreateHostBuilder (line 24) | protected override IHostBuilder CreateHostBuilder()
class ResponseCachingTests (line 35) | [Trait("Category", "CI")]
method ResponseCachingTests (line 39) | public ResponseCachingTests(AppTestFixture factory)
method AssertCachedResponseAsync (line 81) | private static async Task AssertCachedResponseAsync(HttpResponseMessag...
method Dispose (line 94) | public void Dispose()
FILE: VirtoCommerce.Storefront.Tests/Routing/Infrastructure/DummyAntiforgery.cs
class DummyAntiforgery (line 10) | public class DummyAntiforgery : IAntiforgery
method GetAndStoreTokens (line 17) | public AntiforgeryTokenSet GetAndStoreTokens(HttpContext httpContext)
method GetTokens (line 23) | public AntiforgeryTokenSet GetTokens(HttpContext httpContext)
method IsRequestValidAsync (line 29) | public Task<bool> IsRequestValidAsync(HttpContext httpContext)
method ValidateRequestAsync (line 35) | public Task ValidateRequestAsync(HttpContext httpContext)
method SetCookieTokenAndHeader (line 41) | public void SetCookieTokenAndHeader(HttpContext httpContext)
FILE: VirtoCommerce.Storefront.Tests/Routing/Infrastructure/RoutingDataResult.cs
class RoutingDataResult (line 10) | public class RoutingDataResult
method RoutingDataResult (line 20) | public RoutingDataResult(string controllerTypeName, string controllerM...
FILE: VirtoCommerce.Storefront.Tests/Routing/Infrastructure/RoutingTestingActionFilter.cs
class RoutingTestingActionFilter (line 11) | public class RoutingTestingActionFilter : IActionFilter
method OnActionExecuting (line 14) | public void OnActionExecuting(ActionExecutingContext context)
method OnActionExecuted (line 24) | public void OnActionExecuted(ActionExecutedContext context)
FILE: VirtoCommerce.Storefront.Tests/Routing/PathStringExtensionsTests.cs
class PathStringExtensionsTests (line 8) | [Trait("Category", "CI")]
method TrimStorePath_NoStoreUrls_DoesNothing (line 11) | [Theory]
method TrimStorePath_NoPathInStoreUrl_DoesNothing (line 28) | [Theory]
method TrimStorePath_NoPathInStoreSecureUrl_DoesNothing (line 45) | [Theory]
method TrimStorePath_PathInStoreUrl_TrimsFirstOccurrenceFromBeginning (line 62) | [Theory]
method TrimStorePath_PathInStoreSecureUrl_TrimsFirstOccurrenceFromBeginning (line 79) | [Theory]
FILE: VirtoCommerce.Storefront.Tests/Scriban/ScribanTests.cs
class ScribanTests (line 9) | public class ScribanTests
method LiquidRawBlock_ParsingError (line 14) | [Fact]
method Function_With_Context_And_Params_Throw_Overflow_Exception (line 51) | [Fact]
class TestContext (line 105) | public class TestContext
class Tag (line 109) | public class Tag
class MyFunctions (line 116) | public static class MyFunctions
method T (line 118) | public static string T(object input, params object[] variables)
method A (line 123) | public static string A(TemplateContext context, object input, string c...
method B (line 127) | public static string B(object input)
FILE: VirtoCommerce.Storefront.Tests/ValueObjectTests.cs
class ValueObjectTests (line 8) | [Trait("Category", "Unit")]
class ComplexObject (line 11) | public class ComplexObject : ValueObject
method ObjectsWithTheSameValuesShouldBeEqual (line 19) | [Fact]
method ObjectsWithDifferentValuesShouldNotBeEqual (line 38) | [Fact]
method ObjectsWithDifferentValuesShouldHaveDifferentCacheKeys (line 61) | [Fact]
method GetObjectsWithDifferentValues (line 73) | private static IList<ComplexObject> GetObjectsWithDifferentValues()
FILE: VirtoCommerce.Storefront/AutoRestClients/CatalogModuleApi.cs
class CatalogModuleClient (line 20) | public partial class CatalogModuleClient : ServiceClient<CatalogModuleCl...
method CatalogModuleClient (line 90) | protected CatalogModuleClient(HttpClient httpClient, bool disposeHttpC...
method CatalogModuleClient (line 101) | protected CatalogModuleClient(params DelegatingHandler[] handlers) : b...
method CatalogModuleClient (line 115) | protected CatalogModuleClient(HttpClientHandler rootHandler, params De...
method CatalogModuleClient (line 132) | protected CatalogModuleClient(System.Uri baseUri, params DelegatingHan...
method CatalogModuleClient (line 156) | protected CatalogModuleClient(System.Uri baseUri, HttpClientHandler ro...
method CatalogModuleClient (line 177) | public CatalogModuleClient(ServiceClientCredentials credentials, param...
method CatalogModuleClient (line 204) | public CatalogModuleClient(ServiceClientCredentials credentials, HttpC...
method CatalogModuleClient (line 232) | public CatalogModuleClient(ServiceClientCredentials credentials, HttpC...
method CatalogModuleClient (line 260) | public CatalogModuleClient(System.Uri baseUri, ServiceClientCredential...
method CatalogModuleClient (line 296) | public CatalogModuleClient(System.Uri baseUri, ServiceClientCredential...
method CustomInitialize (line 317) | partial void CustomInitialize();
method Initialize (line 321) | private void Initialize()
type ICatalogModuleClient (line 382) | public partial interface ICatalogModuleClient : System.IDisposable
class CatalogModuleAssociations (line 472) | public partial class CatalogModuleAssociations : IServiceOperations<Cata...
method CatalogModuleAssociations (line 483) | public CatalogModuleAssociations(CatalogModuleClient client)
method GetAllAssociationsWithHttpMessagesAsync (line 527) | public async Task<HttpOperationResponse<IList<ProductAssociation>>> Ge...
method UpdateAssociationsWithHttpMessagesAsync (line 662) | public async Task<HttpOperationResponse> UpdateAssociationsWithHttpMes...
method DeleteWithHttpMessagesAsync (line 780) | public async Task<HttpOperationResponse> DeleteWithHttpMessagesAsync(I...
method SearchWithHttpMessagesAsync (line 903) | public async Task<HttpOperationResponse<ProductAssociationSearchResult...
type ICatalogModuleAssociations (line 1042) | public partial interface ICatalogModuleAssociations
method GetAllAssociationsWithHttpMessagesAsync (line 1068) | Task<HttpOperationResponse<IList<ProductAssociation>>> GetAllAssociati...
method UpdateAssociationsWithHttpMessagesAsync (line 1087) | Task<HttpOperationResponse> UpdateAssociationsWithHttpMessagesAsync(IL...
method DeleteWithHttpMessagesAsync (line 1106) | Task<HttpOperationResponse> DeleteWithHttpMessagesAsync(IList<string> ...
method SearchWithHttpMessagesAsync (line 1127) | Task<HttpOperationResponse<ProductAssociationSearchResult>> SearchWith...
class CatalogModuleAssociationsExtensions (line 1152) | public static partial class CatalogModuleAssociationsExtensions
method GetAllAssociations (line 1166) | public static IList<ProductAssociation> GetAllAssociations(this ICatal...
method GetAllAssociationsAsync (line 1186) | public static async Task<IList<ProductAssociation>> GetAllAssociations...
method UpdateAssociations (line 1206) | public static void UpdateAssociations(this ICatalogModuleAssociations ...
method UpdateAssociationsAsync (line 1226) | public static async Task UpdateAssociationsAsync(this ICatalogModuleAs...
method Delete (line 1243) | public static void Delete(this ICatalogModuleAssociations operations, ...
method DeleteAsync (line 1263) | public static async Task DeleteAsync(this ICatalogModuleAssociations o...
method Search (line 1279) | public static ProductAssociationSearchResult Search(this ICatalogModul...
method SearchAsync (line 1298) | public static async Task<ProductAssociationSearchResult> SearchAsync(t...
class CatalogModuleCatalogs (line 1332) | public partial class CatalogModuleCatalogs : IServiceOperations<CatalogM...
method CatalogModuleCatalogs (line 1343) | public CatalogModuleCatalogs(CatalogModuleClient client)
method SearchCatalogsWithHttpMessagesAsync (line 1374) | public async Task<HttpOperationResponse<CatalogSearchResult>> SearchCa...
method GetCatalogWithHttpMessagesAsync (line 1519) | public async Task<HttpOperationResponse<Catalog>> GetCatalogWithHttpMe...
method DeleteCatalogWithHttpMessagesAsync (line 1660) | public async Task<HttpOperationResponse> DeleteCatalogWithHttpMessages...
method GetNewCatalogWithHttpMessagesAsync (line 1777) | public async Task<HttpOperationResponse<Catalog>> GetNewCatalogWithHtt...
method GetNewVirtualCatalogWithHttpMessagesAsync (line 1903) | public async Task<HttpOperationResponse<Catalog>> GetNewVirtualCatalog...
method CreateCatalogWithHttpMessagesAsync (line 2035) | public async Task<HttpOperationResponse<Catalog>> CreateCatalogWithHtt...
method UpdateCatalogWithHttpMessagesAsync (line 2171) | public async Task<HttpOperationResponse> UpdateCatalogWithHttpMessages...
type ICatalogModuleCatalogs (line 2292) | public partial interface ICatalogModuleCatalogs
method SearchCatalogsWithHttpMessagesAsync (line 2308) | Task<HttpOperationResponse<CatalogSearchResult>> SearchCatalogsWithHtt...
method GetCatalogWithHttpMessagesAsync (line 2333) | Task<HttpOperationResponse<Catalog>> GetCatalogWithHttpMessagesAsync(s...
method DeleteCatalogWithHttpMessagesAsync (line 2355) | Task<HttpOperationResponse> DeleteCatalogWithHttpMessagesAsync(string ...
method GetNewCatalogWithHttpMessagesAsync (line 2374) | Task<HttpOperationResponse<Catalog>> GetNewCatalogWithHttpMessagesAsyn...
method GetNewVirtualCatalogWithHttpMessagesAsync (line 2390) | Task<HttpOperationResponse<Catalog>> GetNewVirtualCatalogWithHttpMessa...
method CreateCatalogWithHttpMessagesAsync (line 2412) | Task<HttpOperationResponse<Catalog>> CreateCatalogWithHttpMessagesAsyn...
method UpdateCatalogWithHttpMessagesAsync (line 2431) | Task<HttpOperationResponse> UpdateCatalogWithHttpMessagesAsync(Catalog...
class CatalogModuleCatalogsExtensions (line 2456) | public static partial class CatalogModuleCatalogsExtensions
method SearchCatalogs (line 2463) | public static CatalogSearchResult SearchCatalogs(this ICatalogModuleCa...
method SearchCatalogsAsync (line 2476) | public static async Task<CatalogSearchResult> SearchCatalogsAsync(this...
method GetCatalog (line 2496) | public static Catalog GetCatalog(this ICatalogModuleCatalogs operation...
method GetCatalogAsync (line 2516) | public static async Task<Catalog> GetCatalogAsync(this ICatalogModuleC...
method DeleteCatalog (line 2536) | public static void DeleteCatalog(this ICatalogModuleCatalogs operation...
method DeleteCatalogAsync (line 2556) | public static async Task DeleteCatalogAsync(this ICatalogModuleCatalog...
method GetNewCatalog (line 2570) | public static Catalog GetNewCatalog(this ICatalogModuleCatalogs operat...
method GetNewCatalogAsync (line 2587) | public static async Task<Catalog> GetNewCatalogAsync(this ICatalogModu...
method GetNewVirtualCatalog (line 2601) | public static Catalog GetNewVirtualCatalog(this ICatalogModuleCatalogs...
method GetNewVirtualCatalogAsync (line 2615) | public static async Task<Catalog> GetNewVirtualCatalogAsync(this ICata...
method CreateCatalog (line 2635) | public static Catalog CreateCatalog(this ICatalogModuleCatalogs operat...
method CreateCatalogAsync (line 2655) | public static async Task<Catalog> CreateCatalogAsync(this ICatalogModu...
method UpdateCatalog (line 2675) | public static void UpdateCatalog(this ICatalogModuleCatalogs operation...
method UpdateCatalogAsync (line 2695) | public static async Task UpdateCatalogAsync(this ICatalogModuleCatalog...
class CatalogModuleCategories (line 2726) | public partial class CatalogModuleCategories : IServiceOperations<Catalo...
method CatalogModuleCategories (line 2737) | public CatalogModuleCategories(CatalogModuleClient client)
method GetCategoryWithHttpMessagesAsync (line 2778) | public async Task<HttpOperationResponse<Category>> GetCategoryWithHttp...
method GetCategoriesByIdsAsyncWithHttpMessagesAsync (line 2916) | public async Task<HttpOperationResponse<IList<Category>>> GetCategorie...
method CreateOrUpdateCategoryWithHttpMessagesAsync (line 3070) | public async Task<HttpOperationResponse> CreateOrUpdateCategoryWithHtt...
method DeleteCategoryWithHttpMessagesAsync (line 3185) | public async Task<HttpOperationResponse> DeleteCategoryWithHttpMessage...
method GetCategoriesByPlentyIdsWithHttpMessagesAsync (line 3309) | public async Task<HttpOperationResponse<IList<Category>>> GetCategorie...
method GetNewCategoryWithHttpMessagesAsync (line 3464) | public async Task<HttpOperationResponse<Category>> GetNewCategoryWithH...
type ICatalogModuleCategories (line 3612) | public partial interface ICatalogModuleCategories
method GetCategoryWithHttpMessagesAsync (line 3635) | Task<HttpOperationResponse<Category>> GetCategoryWithHttpMessagesAsync...
method GetCategoriesByIdsAsyncWithHttpMessagesAsync (line 3657) | Task<HttpOperationResponse<IList<Category>>> GetCategoriesByIdsAsyncWi...
method CreateOrUpdateCategoryWithHttpMessagesAsync (line 3677) | Task<HttpOperationResponse> CreateOrUpdateCategoryWithHttpMessagesAsyn...
method DeleteCategoryWithHttpMessagesAsync (line 3693) | Task<HttpOperationResponse> DeleteCategoryWithHttpMessagesAsync(IList<...
method GetCategoriesByPlentyIdsWithHttpMessagesAsync (line 3715) | Task<HttpOperationResponse<IList<Category>>> GetCategoriesByPlentyIdsW...
method GetNewCategoryWithHttpMessagesAsync (line 3740) | Task<HttpOperationResponse<Category>> GetNewCategoryWithHttpMessagesAs...
class CatalogModuleCategoriesExtensions (line 3765) | public static partial class CatalogModuleCategoriesExtensions
method GetCategory (line 3776) | public static Category GetCategory(this ICatalogModuleCategories opera...
method GetCategoryAsync (line 3793) | public static async Task<Category> GetCategoryAsync(this ICatalogModul...
method GetCategoriesByIdsAsync (line 3813) | public static IList<Category> GetCategoriesByIdsAsync(this ICatalogMod...
method GetCategoriesByIdsAsyncAsync (line 3833) | public static async Task<IList<Category>> GetCategoriesByIdsAsyncAsync...
method CreateOrUpdateCategory (line 3853) | public static void CreateOrUpdateCategory(this ICatalogModuleCategorie...
method CreateOrUpdateCategoryAsync (line 3873) | public static async Task CreateOrUpdateCategoryAsync(this ICatalogModu...
method DeleteCategory (line 3887) | public static void DeleteCategory(this ICatalogModuleCategories operat...
method DeleteCategoryAsync (line 3904) | public static async Task DeleteCategoryAsync(this ICatalogModuleCatego...
method GetCategoriesByPlentyIds (line 3921) | public static IList<Category> GetCategoriesByPlentyIds(this ICatalogMo...
method GetCategoriesByPlentyIdsAsync (line 3941) | public static async Task<IList<Category>> GetCategoriesByPlentyIdsAsyn...
method GetNewCategory (line 3961) | public static Category GetNewCategory(this ICatalogModuleCategories op...
method GetNewCategoryAsync (line 3981) | public static async Task<Category> GetNewCategoryAsync(this ICatalogMo...
class CatalogModuleIndexedSearch (line 4015) | public partial class CatalogModuleIndexedSearch : IServiceOperations<Cat...
method CatalogModuleIndexedSearch (line 4026) | public CatalogModuleIndexedSearch(CatalogModuleClient client)
method SearchProductsWithHttpMessagesAsync (line 4057) | public async Task<HttpOperationResponse<ProductIndexedSearchResult>> S...
method SearchCategoriesWithHttpMessagesAsync (line 4189) | public async Task<HttpOperationResponse<CategoryIndexedSearchResult>> ...
type ICatalogModuleIndexedSearch (line 4328) | public partial interface ICatalogModuleIndexedSearch
method SearchProductsWithHttpMessagesAsync (line 4344) | Task<HttpOperationResponse<ProductIndexedSearchResult>> SearchProducts...
method SearchCategoriesWithHttpMessagesAsync (line 4359) | Task<HttpOperationResponse<CategoryIndexedSearchResult>> SearchCategor...
class CatalogModuleIndexedSearchExtensions (line 4384) | public static partial class CatalogModuleIndexedSearchExtensions
method SearchProducts (line 4391) | public static ProductIndexedSearchResult SearchProducts(this ICatalogM...
method SearchProductsAsync (line 4404) | public static async Task<ProductIndexedSearchResult> SearchProductsAsy...
method SearchCategories (line 4417) | public static CategoryIndexedSearchResult SearchCategories(this ICatal...
method SearchCategoriesAsync (line 4430) | public static async Task<CategoryIndexedSearchResult> SearchCategories...
class CatalogModuleListEntry (line 4464) | public partial class CatalogModuleListEntry : IServiceOperations<Catalog...
method CatalogModuleListEntry (line 4475) | public CatalogModuleListEntry(CatalogModuleClient client)
method ListItemsSearchAsyncWithHttpMessagesAsync (line 4510) | public async Task<HttpOperationResponse<ListEntrySearchResult>> ListIt...
method CreateLinksWithHttpMessagesAsync (line 4643) | public async Task<HttpOperationResponse> CreateLinksWithHttpMessagesAs...
method BulkCreateLinksWithHttpMessagesAsync (line 4757) | public async Task<HttpOperationResponse> BulkCreateLinksWithHttpMessag...
method DeleteLinksWithHttpMessagesAsync (line 4872) | public async Task<HttpOperationResponse> DeleteLinksWithHttpMessagesAs...
method MoveWithHttpMessagesAsync (line 4987) | public async Task<HttpOperationResponse> MoveWithHttpMessagesAsync(Lis...
type ICatalogModuleListEntry (line 5108) | public partial interface ICatalogModuleListEntry
method ListItemsSearchAsyncWithHttpMessagesAsync (line 5128) | Task<HttpOperationResponse<ListEntrySearchResult>> ListItemsSearchAsyn...
method CreateLinksWithHttpMessagesAsync (line 5145) | Task<HttpOperationResponse> CreateLinksWithHttpMessagesAsync(IList<Cat...
method BulkCreateLinksWithHttpMessagesAsync (line 5160) | Task<HttpOperationResponse> BulkCreateLinksWithHttpMessagesAsync(BulkL...
method DeleteLinksWithHttpMessagesAsync (line 5177) | Task<HttpOperationResponse> DeleteLinksWithHttpMessagesAsync(IList<Cat...
method MoveWithHttpMessagesAsync (line 5193) | Task<HttpOperationResponse> MoveWithHttpMessagesAsync(ListEntriesMoveR...
class CatalogModuleListEntryExtensions (line 5218) | public static partial class CatalogModuleListEntryExtensions
method ListItemsSearchAsync (line 5229) | public static ListEntrySearchResult ListItemsSearchAsync(this ICatalog...
method ListItemsSearchAsyncAsync (line 5246) | public static async Task<ListEntrySearchResult> ListItemsSearchAsyncAs...
method CreateLinks (line 5263) | public static void CreateLinks(this ICatalogModuleListEntry operations...
method CreateLinksAsync (line 5280) | public static async Task CreateLinksAsync(this ICatalogModuleListEntry...
method BulkCreateLinks (line 5293) | public static void BulkCreateLinks(this ICatalogModuleListEntry operat...
method BulkCreateLinksAsync (line 5309) | public static async Task BulkCreateLinksAsync(this ICatalogModuleListE...
method DeleteLinks (line 5323) | public static void DeleteLinks(this ICatalogModuleListEntry operations...
method DeleteLinksAsync (line 5340) | public static async Task DeleteLinksAsync(this ICatalogModuleListEntry...
method Move (line 5354) | public static void Move(this ICatalogModuleListEntry operations, ListE...
method MoveAsync (line 5371) | public static async Task MoveAsync(this ICatalogModuleListEntry operat...
class CatalogModuleProducts (line 5402) | public partial class CatalogModuleProducts : IServiceOperations<CatalogM...
method CatalogModuleProducts (line 5413) | public CatalogModuleProducts(CatalogModuleClient client)
method GetProductByIdWithHttpMessagesAsync (line 5457) | public async Task<HttpOperationResponse<CatalogProduct>> GetProductByI...
method GetProductByIdsWithHttpMessagesAsync (line 5605) | public async Task<HttpOperationResponse<IList<CatalogProduct>>> GetPro...
method SaveProductWithHttpMessagesAsync (line 5759) | public async Task<HttpOperationResponse<CatalogProduct>> SaveProductWi...
method DeleteProductWithHttpMessagesAsync (line 5892) | public async Task<HttpOperationResponse> DeleteProductWithHttpMessages...
method GetProductByPlentyIdsWithHttpMessagesAsync (line 6016) | public async Task<HttpOperationResponse<IList<CatalogProduct>>> GetPro...
method GetNewProductByCatalogWithHttpMessagesAsync (line 6171) | public async Task<HttpOperationResponse<CatalogProduct>> GetNewProduct...
method GetNewProductByCatalogAndCategoryWithHttpMessagesAsync (line 6318) | public async Task<HttpOperationResponse<CatalogProduct>> GetNewProduct...
method GetNewVariationWithHttpMessagesAsync (line 6465) | public async Task<HttpOperationResponse<CatalogProduct>> GetNewVariati...
method CloneProductWithHttpMessagesAsync (line 6602) | public async Task<HttpOperationResponse<CatalogProduct>> CloneProductW...
method SaveProductsWithHttpMessagesAsync (line 6734) | public async Task<HttpOperationResponse> SaveProductsWithHttpMessagesA...
type ICatalogModuleProducts (line 6855) | public partial interface ICatalogModuleProducts
method GetProductByIdWithHttpMessagesAsync (line 6881) | Task<HttpOperationResponse<CatalogProduct>> GetProductByIdWithHttpMess...
method GetProductByIdsWithHttpMessagesAsync (line 6903) | Task<HttpOperationResponse<IList<CatalogProduct>>> GetProductByIdsWith...
method SaveProductWithHttpMessagesAsync (line 6922) | Task<HttpOperationResponse<CatalogProduct>> SaveProductWithHttpMessage...
method DeleteProductWithHttpMessagesAsync (line 6938) | Task<HttpOperationResponse> DeleteProductWithHttpMessagesAsync(IList<s...
method GetProductByPlentyIdsWithHttpMessagesAsync (line 6960) | Task<HttpOperationResponse<IList<CatalogProduct>>> GetProductByPlentyI...
method GetNewProductByCatalogWithHttpMessagesAsync (line 6985) | Task<HttpOperationResponse<CatalogProduct>> GetNewProductByCatalogWith...
method GetNewProductByCatalogAndCategoryWithHttpMessagesAsync (line 7013) | Task<HttpOperationResponse<CatalogProduct>> GetNewProductByCatalogAndC...
method GetNewVariationWithHttpMessagesAsync (line 7035) | Task<HttpOperationResponse<CatalogProduct>> GetNewVariationWithHttpMes...
method CloneProductWithHttpMessagesAsync (line 7053) | Task<HttpOperationResponse<CatalogProduct>> CloneProductWithHttpMessag...
method SaveProductsWithHttpMessagesAsync (line 7069) | Task<HttpOperationResponse> SaveProductsWithHttpMessagesAsync(IList<Ca...
class CatalogModuleProductsExtensions (line 7094) | public static partial class CatalogModuleProductsExtensions
method GetProductById (line 7108) | public static CatalogProduct GetProductById(this ICatalogModuleProduct...
method GetProductByIdAsync (line 7128) | public static async Task<CatalogProduct> GetProductByIdAsync(this ICat...
method GetProductByIds (line 7148) | public static IList<CatalogProduct> GetProductByIds(this ICatalogModul...
method GetProductByIdsAsync (line 7168) | public static async Task<IList<CatalogProduct>> GetProductByIdsAsync(t...
method SaveProduct (line 7185) | public static CatalogProduct SaveProduct(this ICatalogModuleProducts o...
method SaveProductAsync (line 7202) | public static async Task<CatalogProduct> SaveProductAsync(this ICatalo...
method DeleteProduct (line 7219) | public static void DeleteProduct(this ICatalogModuleProducts operation...
method DeleteProductAsync (line 7236) | public static async Task DeleteProductAsync(this ICatalogModuleProduct...
method GetProductByPlentyIds (line 7253) | public static IList<CatalogProduct> GetProductByPlentyIds(this ICatalo...
method GetProductByPlentyIdsAsync (line 7273) | public static async Task<IList<CatalogProduct>> GetProductByPlentyIdsA...
method GetNewProductByCatalog (line 7293) | public static CatalogProduct GetNewProductByCatalog(this ICatalogModul...
method GetNewProductByCatalogAsync (line 7313) | public static async Task<CatalogProduct> GetNewProductByCatalogAsync(t...
method GetNewProductByCatalogAndCategory (line 7336) | public static CatalogProduct GetNewProductByCatalogAndCategory(this IC...
method GetNewProductByCatalogAndCategoryAsync (line 7359) | public static async Task<CatalogProduct> GetNewProductByCatalogAndCate...
method GetNewVariation (line 7376) | public static CatalogProduct GetNewVariation(this ICatalogModuleProduc...
method GetNewVariationAsync (line 7393) | public static async Task<CatalogProduct> GetNewVariationAsync(this ICa...
method CloneProduct (line 7406) | public static CatalogProduct CloneProduct(this ICatalogModuleProducts ...
method CloneProductAsync (line 7419) | public static async Task<CatalogProduct> CloneProductAsync(this ICatal...
method SaveProducts (line 7436) | public static void SaveProducts(this ICatalogModuleProducts operations...
method SaveProductsAsync (line 7453) | public static async Task SaveProductsAsync(this ICatalogModuleProducts...
class CatalogModuleProperties (line 7484) | public partial class CatalogModuleProperties : IServiceOperations<Catalo...
method CatalogModuleProperties (line 7495) | public CatalogModuleProperties(CatalogModuleClient client)
method GetPropertyWithHttpMessagesAsync (line 7536) | public async Task<HttpOperationResponse<Property>> GetPropertyWithHttp...
method GetNewCatalogPropertyWithHttpMessagesAsync (line 7677) | public async Task<HttpOperationResponse<Property>> GetNewCatalogProper...
method GetNewCategoryPropertyWithHttpMessagesAsync (line 7818) | public async Task<HttpOperationResponse<Property>> GetNewCategoryPrope...
method SavePropertyWithHttpMessagesAsync (line 7954) | public async Task<HttpOperationResponse> SavePropertyWithHttpMessagesA...
method DeletePropertyWithHttpMessagesAsync (line 8072) | public async Task<HttpOperationResponse> DeletePropertyWithHttpMessage...
type ICatalogModuleProperties (line 8201) | public partial interface ICatalogModuleProperties
method GetPropertyWithHttpMessagesAsync (line 8224) | Task<HttpOperationResponse<Property>> GetPropertyWithHttpMessagesAsync...
method GetNewCatalogPropertyWithHttpMessagesAsync (line 8246) | Task<HttpOperationResponse<Property>> GetNewCatalogPropertyWithHttpMes...
method GetNewCategoryPropertyWithHttpMessagesAsync (line 8268) | Task<HttpOperationResponse<Property>> GetNewCategoryPropertyWithHttpMe...
method SavePropertyWithHttpMessagesAsync (line 8288) | Task<HttpOperationResponse> SavePropertyWithHttpMessagesAsync(Property...
method DeletePropertyWithHttpMessagesAsync (line 8307) | Task<HttpOperationResponse> DeletePropertyWithHttpMessagesAsync(string...
class CatalogModulePropertiesExtensions (line 8332) | public static partial class CatalogModulePropertiesExtensions
method GetProperty (line 8343) | public static Property GetProperty(this ICatalogModuleProperties opera...
method GetPropertyAsync (line 8360) | public static async Task<Property> GetPropertyAsync(this ICatalogModul...
method GetNewCatalogProperty (line 8377) | public static Property GetNewCatalogProperty(this ICatalogModuleProper...
method GetNewCatalogPropertyAsync (line 8394) | public static async Task<Property> GetNewCatalogPropertyAsync(this ICa...
method GetNewCategoryProperty (line 8411) | public static Property GetNewCategoryProperty(this ICatalogModulePrope...
method GetNewCategoryPropertyAsync (line 8428) | public static async Task<Property> GetNewCategoryPropertyAsync(this IC...
method SaveProperty (line 8449) | public static void SaveProperty(this ICatalogModuleProperties operatio...
method SavePropertyAsync (line 8470) | public static async Task SavePropertyAsync(this ICatalogModuleProperti...
method DeleteProperty (line 8487) | public static void DeleteProperty(this ICatalogModuleProperties operat...
method DeletePropertyAsync (line 8507) | public static async Task DeletePropertyAsync(this ICatalogModuleProper...
class CatalogModulePropertyDictionaryItems (line 8538) | public partial class CatalogModulePropertyDictionaryItems : IServiceOper...
method CatalogModulePropertyDictionaryItems (line 8549) | public CatalogModulePropertyDictionaryItems(CatalogModuleClient client)
method SearchPropertyDictionaryItemsWithHttpMessagesAsync (line 8584) | public async Task<HttpOperationResponse<IList<PropertyDictionaryItem>>...
method SaveChangesWithHttpMessagesAsync (line 8716) | public async Task<HttpOperationResponse> SaveChangesWithHttpMessagesAs...
method DeletePropertyDictionaryItemsWithHttpMessagesAsync (line 8831) | public async Task<HttpOperationResponse> DeletePropertyDictionaryItems...
type ICatalogModulePropertyDictionaryItems (line 8955) | public partial interface ICatalogModulePropertyDictionaryItems
method SearchPropertyDictionaryItemsWithHttpMessagesAsync (line 8975) | Task<HttpOperationResponse<IList<PropertyDictionaryItem>>> SearchPrope...
method SaveChangesWithHttpMessagesAsync (line 8990) | Task<HttpOperationResponse> SaveChangesWithHttpMessagesAsync(IList<Pro...
method DeletePropertyDictionaryItemsWithHttpMessagesAsync (line 9006) | Task<HttpOperationResponse> DeletePropertyDictionaryItemsWithHttpMessa...
class CatalogModulePropertyDictionaryItemsExtensions (line 9031) | public static partial class CatalogModulePropertyDictionaryItemsExtensions
method SearchPropertyDictionaryItems (line 9042) | public static IList<PropertyDictionaryItem> SearchPropertyDictionaryIt...
method SearchPropertyDictionaryItemsAsync (line 9059) | public static async Task<IList<PropertyDictionaryItem>> SearchProperty...
method SaveChanges (line 9075) | public static void SaveChanges(this ICatalogModulePropertyDictionaryIt...
method SaveChangesAsync (line 9091) | public static async Task SaveChangesAsync(this ICatalogModulePropertyD...
method DeletePropertyDictionaryItems (line 9105) | public static void DeletePropertyDictionaryItems(this ICatalogModulePr...
method DeletePropertyDictionaryItemsAsync (line 9122) | public static async Task DeletePropertyDictionaryItemsAsync(this ICata...
class SeoInfo (line 9148) | public partial class SeoInfo
method SeoInfo (line 9153) | public SeoInfo()
method SeoInfo (line 9170) | public SeoInfo(string name = default(string), string semanticUrl = def...
method CustomInit (line 9194) | partial void CustomInit();
class Image (line 9305) | public partial class Image
method Image (line 9310) | public Image()
method Image (line 9325) | public Image(int? sortOrder = default(int?), byte[] binaryData = defau...
method CustomInit (line 9350) | partial void CustomInit();
class ProductAssociation (line 9463) | public partial class ProductAssociation
method ProductAssociation (line 9468) | public ProductAssociation()
method ProductAssociation (line 9488) | public ProductAssociation(string type = default(string), int? priority...
method CustomInit (line 9509) | partial void CustomInit();
class PropertyValue (line 9606) | public partial class PropertyValue
method PropertyValue (line 9611) | public PropertyValue()
method PropertyValue (line 9622) | public PropertyValue(string propertyName = default(string), string pro...
method CustomInit (line 9645) | partial void CustomInit();
class PropertyAttribute (line 9745) | public partial class PropertyAttribute
method PropertyAttribute (line 9750) | public PropertyAttribute()
method PropertyAttribute (line 9758) | public PropertyAttribute(string propertyId = default(string), string v...
method CustomInit (line 9774) | partial void CustomInit();
class PropertyDisplayName (line 9837) | public partial class PropertyDisplayName
method PropertyDisplayName (line 9842) | public PropertyDisplayName()
method PropertyDisplayName (line 9850) | public PropertyDisplayName(string name = default(string), string langu...
method CustomInit (line 9860) | partial void CustomInit();
class PropertyValidationRule (line 9896) | public partial class PropertyValidationRule
method PropertyValidationRule (line 9901) | public PropertyValidationRule()
method PropertyValidationRule (line 9915) | public PropertyValidationRule(bool? isUnique = default(bool?), int? ch...
method CustomInit (line 9929) | partial void CustomInit();
class Property (line 9986) | public partial class Property
method Property (line 9991) | public Property()
method Property (line 10017) | public Property(bool? isReadOnly = default(bool?), bool? isManageable ...
method CustomInit (line 10050) | partial void CustomInit();
class CategoryLink (line 10213) | public partial class CategoryLink
method CategoryLink (line 10218) | public CategoryLink()
method CategoryLink (line 10232) | public CategoryLink(string entryId = default(string), string listEntry...
method CustomInit (line 10247) | partial void CustomInit();
class OutlineItem (line 10311) | public partial class OutlineItem
method OutlineItem (line 10316) | public OutlineItem()
method OutlineItem (line 10330) | public OutlineItem(string id = default(string), string seoObjectType =...
method CustomInit (line 10343) | partial void CustomInit();
class Outline (line 10401) | public partial class Outline
method Outline (line 10406) | public Outline()
method Outline (line 10415) | public Outline(IList<OutlineItem> items = default(IList<OutlineItem>))
method CustomInit (line 10424) | partial void CustomInit();
class Category (line 10453) | public partial class Category
method Category (line 10458) | public Category()
method Category (line 10473) | public Category(string catalogId = default(string), string parentId = ...
method CustomInit (line 10507) | partial void CustomInit();
class Asset (line 10666) | public partial class Asset
method Asset (line 10671) | public Asset()
method Asset (line 10686) | public Asset(string mimeType = default(string), long? size = default(l...
method CustomInit (line 10713) | partial void CustomInit();
class EditorialReview (line 10836) | public partial class EditorialReview
method EditorialReview (line 10841) | public EditorialReview()
method EditorialReview (line 10849) | public EditorialReview(string content = default(string), string review...
method CustomInit (line 10866) | partial void CustomInit();
class Variation (line 10934) | public partial class Variation
method Variation (line 10939) | public Variation()
method Variation (line 10967) | public Variation(string code = default(string), string manufacturerPar...
method CustomInit (line 11030) | partial void CustomInit();
class CatalogProduct (line 11344) | public partial class CatalogProduct
method CatalogProduct (line 11349) | public CatalogProduct()
method CatalogProduct (line 11377) | public CatalogProduct(string code = default(string), string manufactur...
method CustomInit (line 11440) | partial void CustomInit();
class PropertyDictionaryItemLocalizedValue (line 11754) | public partial class PropertyDictionaryItemLocalizedValue
method PropertyDictionaryItemLocalizedValue (line 11760) | public PropertyDictionaryItemLocalizedValue()
method PropertyDictionaryItemLocalizedValue (line 11769) | public PropertyDictionaryItemLocalizedValue(string languageCode = defa...
method CustomInit (line 11779) | partial void CustomInit();
class PropertyDictionaryItem (line 11812) | public partial class PropertyDictionaryItem
method PropertyDictionaryItem (line 11817) | public PropertyDictionaryItem()
method PropertyDictionaryItem (line 11825) | public PropertyDictionaryItem(string propertyId = default(string), str...
method CustomInit (line 11838) | partial void CustomInit();
class SortInfo (line 11886) | public partial class SortInfo
method SortInfo (line 11891) | public SortInfo()
method SortInfo (line 11901) | public SortInfo(string sortColumn = default(string), string sortDirect...
method CustomInit (line 11911) | partial void CustomInit();
class ProductAssociationSearchCriteria (line 11945) | public partial class ProductAssociationSearchCriteria
method ProductAssociationSearchCriteria (line 11951) | public ProductAssociationSearchCriteria()
method ProductAssociationSearchCriteria (line 11960) | public ProductAssociationSearchCriteria(string group = default(string)...
method CustomInit (line 11981) | partial void CustomInit();
class ProductAssociationSearchResult (line 12069) | public partial class ProductAssociationSearchResult
method ProductAssociationSearchResult (line 12075) | public ProductAssociationSearchResult()
method ProductAssociationSearchResult (line 12084) | public ProductAssociationSearchResult(int? totalCount = default(int?),...
method CustomInit (line 12094) | partial void CustomInit();
class CatalogSearchCriteria (line 12127) | public partial class CatalogSearchCriteria
method CatalogSearchCriteria (line 12132) | public CatalogSearchCriteria()
method CatalogSearchCriteria (line 12140) | public CatalogSearchCriteria(IList<string> catalogIds = default(IList<...
method CustomInit (line 12160) | partial void CustomInit();
class CatalogLanguage (line 12243) | public partial class CatalogLanguage
method CatalogLanguage (line 12248) | public CatalogLanguage()
method CatalogLanguage (line 12256) | public CatalogLanguage(string catalogId = default(string), bool? isDef...
method CustomInit (line 12268) | partial void CustomInit();
class Catalog (line 12311) | public partial class Catalog
method Catalog (line 12316) | public Catalog()
method Catalog (line 12324) | public Catalog(string name = default(string), bool? isVirtual = defaul...
method CustomInit (line 12343) | partial void CustomInit();
class CatalogSearchResult (line 12421) | public partial class CatalogSearchResult
method CatalogSearchResult (line 12426) | public CatalogSearchResult()
method CatalogSearchResult (line 12434) | public CatalogSearchResult(int? totalCount = default(int?), IList<Cata...
method CustomInit (line 12444) | partial void CustomInit();
class NumericRange (line 12477) | public partial class NumericRange
method NumericRange (line 12482) | public NumericRange()
method NumericRange (line 12490) | public NumericRange(double? lower = default(double?), double? upper = ...
method CustomInit (line 12502) | partial void CustomInit();
class GeoPoint (line 12545) | public partial class GeoPoint
method GeoPoint (line 12550) | public GeoPoint()
method GeoPoint (line 12558) | public GeoPoint(double? latitude = default(double?), double? longitude...
method CustomInit (line 12568) | partial void CustomInit();
class GeoDistanceFilter (line 12601) | public partial class GeoDistanceFilter
method GeoDistanceFilter (line 12606) | public GeoDistanceFilter()
method GeoDistanceFilter (line 12614) | public GeoDistanceFilter(string fieldName = default(string), GeoPoint ...
method CustomInit (line 12625) | partial void CustomInit();
class ProductIndexedSearchCriteria (line 12663) | public partial class ProductIndexedSearchCriteria
method ProductIndexedSearchCriteria (line 12669) | public ProductIndexedSearchCriteria()
method ProductIndexedSearchCriteria (line 12712) | public ProductIndexedSearchCriteria(string objectType = default(string...
method CustomInit (line 12752) | partial void CustomInit();
class AggregationLabel (line 12966) | public partial class AggregationLabel
method AggregationLabel (line 12971) | public AggregationLabel()
method AggregationLabel (line 12979) | public AggregationLabel(string language = default(string), string labe...
method CustomInit (line 12989) | partial void CustomInit();
class AggregationItem (line 13022) | public partial class AggregationItem
method AggregationItem (line 13027) | public AggregationItem()
method AggregationItem (line 13045) | public AggregationItem(object value = default(object), int? count = de...
method CustomInit (line 13059) | partial void CustomInit();
class Aggregation (line 13118) | public partial class Aggregation
method Aggregation (line 13123) | public Aggregation()
method Aggregation (line 13139) | public Aggregation(string aggregationType = default(string), string fi...
method CustomInit (line 13151) | partial void CustomInit();
class ProductIndexedSearchResult (line 13198) | public partial class ProductIndexedSearchResult
method ProductIndexedSearchResult (line 13203) | public ProductIndexedSearchResult()
method ProductIndexedSearchResult (line 13211) | public ProductIndexedSearchResult(long? totalCount = default(long?), I...
method CustomInit (line 13222) | partial void CustomInit();
class CategoryIndexedSearchCriteria (line 13260) | public partial class CategoryIndexedSearchCriteria
method CategoryIndexedSearchCriteria (line 13266) | public CategoryIndexedSearchCriteria()
method CategoryIndexedSearchCriteria (line 13289) | public CategoryIndexedSearchCriteria(string objectType = default(strin...
method CustomInit (line 13317) | partial void CustomInit();
class CategoryIndexedSearchResult (line 13453) | public partial class CategoryIndexedSearchResult
method CategoryIndexedSearchResult (line 13459) | public CategoryIndexedSearchResult()
method CategoryIndexedSearchResult (line 13468) | public CategoryIndexedSearchResult(long? totalCount = default(long?), ...
method CustomInit (line 13479) | partial void CustomInit();
class CatalogListEntrySearchCriteria (line 13517) | public partial class CatalogListEntrySearchCriteria
method CatalogListEntrySearchCriteria (line 13523) | public CatalogListEntrySearchCriteria()
method CatalogListEntrySearchCriteria (line 13540) | public CatalogListEntrySearchCriteria(string code = default(string), s...
method CustomInit (line 13575) | partial void CustomInit();
class ListEntryBase (line 13742) | public partial class ListEntryBase
method ListEntryBase (line 13747) | public ListEntryBase()
method ListEntryBase (line 13766) | public ListEntryBase(string type = default(string), bool? isActive = d...
method CustomInit (line 13790) | partial void CustomInit();
class ListEntrySearchResult (line 13902) | public partial class ListEntrySearchResult
method ListEntrySearchResult (line 13907) | public ListEntrySearchResult()
method ListEntrySearchResult (line 13916) | public ListEntrySearchResult(IList<ListEntryBase> listEntries = defaul...
method CustomInit (line 13927) | partial void CustomInit();
class BulkLinkCreationRequest (line 13969) | public partial class BulkLinkCreationRequest
method BulkLinkCreationRequest (line 13974) | public BulkLinkCreationRequest()
method BulkLinkCreationRequest (line 13986) | public BulkLinkCreationRequest(CatalogListEntrySearchCriteria searchCr...
method CustomInit (line 13997) | partial void CustomInit();
class ListEntriesMoveRequest (line 14040) | public partial class ListEntriesMoveRequest
method ListEntriesMoveRequest (line 14045) | public ListEntriesMoveRequest()
method ListEntriesMoveRequest (line 14053) | public ListEntriesMoveRequest(string catalog = default(string), string...
method CustomInit (line 14065) | partial void CustomInit();
class PropertyDictionaryItemSearchCriteria (line 14111) | public partial class PropertyDictionaryItemSearchCriteria
method PropertyDictionaryItemSearchCriteria (line 14117) | public PropertyDictionaryItemSearchCriteria()
method PropertyDictionaryItemSearchCriteria (line 14126) | public PropertyDictionaryItemSearchCriteria(IList<string> propertyIds ...
method CustomInit (line 14147) | partial void CustomInit();
FILE: VirtoCommerce.Storefront/AutoRestClients/ContentModuleApi.cs
class ContentModuleClient (line 20) | public partial class ContentModuleClient : ServiceClient<ContentModuleCl...
method ContentModuleClient (line 60) | protected ContentModuleClient(HttpClient httpClient, bool disposeHttpC...
method ContentModuleClient (line 71) | protected ContentModuleClient(params DelegatingHandler[] handlers) : b...
method ContentModuleClient (line 85) | protected ContentModuleClient(HttpClientHandler rootHandler, params De...
method ContentModuleClient (line 102) | protected ContentModuleClient(System.Uri baseUri, params DelegatingHan...
method ContentModuleClient (line 126) | protected ContentModuleClient(System.Uri baseUri, HttpClientHandler ro...
method ContentModuleClient (line 147) | public ContentModuleClient(ServiceClientCredentials credentials, param...
method ContentModuleClient (line 174) | public ContentModuleClient(ServiceClientCredentials credentials, HttpC...
method ContentModuleClient (line 202) | public ContentModuleClient(ServiceClientCredentials credentials, HttpC...
method ContentModuleClient (line 230) | public ContentModuleClient(System.Uri baseUri, ServiceClientCredential...
method ContentModuleClient (line 266) | public ContentModuleClient(System.Uri baseUri, ServiceClientCredential...
method CustomInitialize (line 287) | partial void CustomInitialize();
method Initialize (line 291) | private void Initialize()
type IContentModuleClient (line 346) | public partial interface IContentModuleClient : System.IDisposable
class Content (line 406) | public partial class Content : IServiceOperations<ContentModuleClient>, ...
method Content (line 417) | public Content(ContentModuleClient client)
method GetStoreContentStatsWithHttpMessagesAsync (line 454) | public async Task<HttpOperationResponse<ContentStatistic>> GetStoreCon...
method DeleteContentWithHttpMessagesAsync (line 592) | public async Task<HttpOperationResponse> DeleteContentWithHttpMessages...
method GetContentItemDataStreamWithHttpMessagesAsync (line 731) | public async Task<HttpOperationResponse<byte[]>> GetContentItemDataStr...
method UploadContentWithHttpMessagesAsync (line 890) | public async Task<HttpOperationResponse<IList<ContentItem>>> UploadCon...
method SearchContentWithHttpMessagesAsync (line 1054) | public async Task<HttpOperationResponse<IList<ContentItem>>> SearchCon...
method MoveContentWithHttpMessagesAsync (line 1215) | public async Task<HttpOperationResponse> MoveContentWithHttpMessagesAs...
method CopyContentWithHttpMessagesAsync (line 1348) | public async Task<HttpOperationResponse> CopyContentWithHttpMessagesAs...
method UnpackWithHttpMessagesAsync (line 1479) | public async Task<HttpOperationResponse> UnpackWithHttpMessagesAsync(s...
method CreateContentFolderWithHttpMessagesAsync (line 1620) | public async Task<HttpOperationResponse> CreateContentFolderWithHttpMe...
type IContent (line 1753) | public partial interface IContent
method GetStoreContentStatsWithHttpMessagesAsync (line 1772) | Task<HttpOperationResponse<ContentStatistic>> GetStoreContentStatsWith...
method DeleteContentWithHttpMessagesAsync (line 1791) | Task<HttpOperationResponse> DeleteContentWithHttpMessagesAsync(string ...
method GetContentItemDataStreamWithHttpMessagesAsync (line 1813) | Task<HttpOperationResponse<byte[]>> GetContentItemDataStreamWithHttpMe...
method UploadContentWithHttpMessagesAsync (line 1837) | Task<HttpOperationResponse<IList<ContentItem>>> UploadContentWithHttpM...
method SearchContentWithHttpMessagesAsync (line 1861) | Task<HttpOperationResponse<IList<ContentItem>>> SearchContentWithHttpM...
method MoveContentWithHttpMessagesAsync (line 1882) | Task<HttpOperationResponse> MoveContentWithHttpMessagesAsync(string co...
method CopyContentWithHttpMessagesAsync (line 1896) | Task<HttpOperationResponse> CopyContentWithHttpMessagesAsync(string sr...
method UnpackWithHttpMessagesAsync (line 1917) | Task<HttpOperationResponse> UnpackWithHttpMessagesAsync(string content...
method CreateContentFolderWithHttpMessagesAsync (line 1936) | Task<HttpOperationResponse> CreateContentFolderWithHttpMessagesAsync(s...
class ContentExtensions (line 1961) | public static partial class ContentExtensions
method GetStoreContentStats (line 1968) | public static ContentStatistic GetStoreContentStats(this IContent oper...
method GetStoreContentStatsAsync (line 1981) | public static async Task<ContentStatistic> GetStoreContentStatsAsync(t...
method DeleteContent (line 1998) | public static void DeleteContent(this IContent operations, string cont...
method DeleteContentAsync (line 2015) | public static async Task DeleteContentAsync(this IContent operations, ...
method GetContentItemDataStream (line 2029) | public static byte[] GetContentItemDataStream(this IContent operations...
method GetContentItemDataStreamAsync (line 2046) | public static async Task<byte[]> GetContentItemDataStreamAsync(this IC...
method UploadContent (line 2065) | public static IList<ContentItem> UploadContent(this IContent operation...
method UploadContentAsync (line 2084) | public static async Task<IList<ContentItem>> UploadContentAsync(this I...
method SearchContent (line 2103) | public static IList<ContentItem> SearchContent(this IContent operation...
method SearchContentAsync (line 2122) | public static async Task<IList<ContentItem>> SearchContentAsync(this I...
method MoveContent (line 2141) | public static void MoveContent(this IContent operations, string conten...
method MoveContentAsync (line 2160) | public static async Task MoveContentAsync(this IContent operations, st...
method CopyContent (line 2172) | public static void CopyContent(this IContent operations, string srcPat...
method CopyContentAsync (line 2187) | public static async Task CopyContentAsync(this IContent operations, st...
method Unpack (line 2203) | public static void Unpack(this IContent operations, string contentType...
method UnpackAsync (line 2222) | public static async Task UnpackAsync(this IContent operations, string ...
method CreateContentFolder (line 2236) | public static void CreateContentFolder(this IContent operations, strin...
method CreateContentFolderAsync (line 2253) | public static async Task CreateContentFolderAsync(this IContent operat...
class Menu (line 2284) | public partial class Menu : IServiceOperations<ContentModuleClient>, IMenu
method Menu (line 2295) | public Menu(ContentModuleClient client)
method GetListsWithHttpMessagesAsync (line 2332) | public async Task<HttpOperationResponse<IList<MenuLinkList>>> GetLists...
method UpdateMenuLinkListWithHttpMessagesAsync (line 2468) | public async Task<HttpOperationResponse> UpdateMenuLinkListWithHttpMes...
method DeleteMenuLinkListsWithHttpMessagesAsync (line 2593) | public async Task<HttpOperationResponse> DeleteMenuLinkListsWithHttpMe...
method GetListWithHttpMessagesAsync (line 2724) | public async Task<HttpOperationResponse<MenuLinkList>> GetListWithHttp...
method CheckNameWithHttpMessagesAsync (line 2873) | public async Task<HttpOperationResponse<bool?>> CheckNameWithHttpMessa...
type IMenu (line 3031) | public partial interface IMenu
method GetListsWithHttpMessagesAsync (line 3050) | Task<HttpOperationResponse<IList<MenuLinkList>>> GetListsWithHttpMessa...
method UpdateMenuLinkListWithHttpMessagesAsync (line 3067) | Task<HttpOperationResponse> UpdateMenuLinkListWithHttpMessagesAsync(st...
method DeleteMenuLinkListsWithHttpMessagesAsync (line 3084) | Task<HttpOperationResponse> DeleteMenuLinkListsWithHttpMessagesAsync(s...
method GetListWithHttpMessagesAsync (line 3104) | Task<HttpOperationResponse<MenuLinkList>> GetListWithHttpMessagesAsync...
method CheckNameWithHttpMessagesAsync (line 3128) | Task<HttpOperationResponse<bool?>> CheckNameWithHttpMessagesAsync(stri...
class MenuExtensions (line 3153) | public static partial class MenuExtensions
method GetLists (line 3160) | public static IList<MenuLinkList> GetLists(this IMenu operations, stri...
method GetListsAsync (line 3173) | public static async Task<IList<MenuLinkList>> GetListsAsync(this IMenu...
method UpdateMenuLinkList (line 3188) | public static void UpdateMenuLinkList(this IMenu operations, string st...
method UpdateMenuLinkListAsync (line 3203) | public static async Task UpdateMenuLinkListAsync(this IMenu operations...
method DeleteMenuLinkLists (line 3215) | public static void DeleteMenuLinkLists(this IMenu operations, string s...
method DeleteMenuLinkListsAsync (line 3230) | public static async Task DeleteMenuLinkListsAsync(this IMenu operation...
method GetList (line 3242) | public static MenuLinkList GetList(this IMenu operations, string store...
method GetListAsync (line 3257) | public static async Task<MenuLinkList> GetListAsync(this IMenu operati...
method CheckName (line 3276) | public static bool? CheckName(this IMenu operations, string storeId, s...
method CheckNameAsync (line 3295) | public static async Task<bool?> CheckNameAsync(this IMenu operations, ...
class ContentItem (line 3324) | public partial class ContentItem
method ContentItem (line 3329) | public ContentItem()
method ContentItem (line 3337) | public ContentItem(string name = default(string), string type = defaul...
method CustomInit (line 3352) | partial void CustomInit();
class MenuLink (line 3410) | public partial class MenuLink
method MenuLink (line 3415) | public MenuLink()
method MenuLink (line 3423) | public MenuLink(string title = default(string), string url = default(s...
method CustomInit (line 3445) | partial void CustomInit();
class MenuLinkList (line 3538) | public partial class MenuLinkList
method MenuLinkList (line 3543) | public MenuLinkList()
method MenuLinkList (line 3551) | public MenuLinkList(string name = default(string), string storeId = de...
method CustomInit (line 3570) | partial void CustomInit();
class ContentStatistic (line 3648) | public partial class ContentStatistic
method ContentStatistic (line 3653) | public ContentStatistic()
method ContentStatistic (line 3661) | public ContentStatistic(string activeThemeName = default(string), int?...
method CustomInit (line 3673) | partial void CustomInit();
class ContentFolder (line 3716) | public partial class ContentFolder
method ContentFolder (line 3721) | public ContentFolder()
method ContentFolder (line 3729) | public ContentFolder(string name = default(string), string type = defa...
method CustomInit (line 3744) | partial void CustomInit();
FILE: VirtoCommerce.Storefront/AutoRestClients/CoreModuleApi.cs
class CoreModuleClient (line 20) | public partial class CoreModuleClient : ServiceClient<CoreModuleClient>,...
method CoreModuleClient (line 55) | protected CoreModuleClient(HttpClient httpClient, bool disposeHttpClie...
method CoreModuleClient (line 66) | protected CoreModuleClient(params DelegatingHandler[] handlers) : base...
method CoreModuleClient (line 80) | protected CoreModuleClient(HttpClientHandler rootHandler, params Deleg...
method CoreModuleClient (line 97) | protected CoreModuleClient(System.Uri baseUri, params DelegatingHandle...
method CoreModuleClient (line 121) | protected CoreModuleClient(System.Uri baseUri, HttpClientHandler rootH...
method CoreModuleClient (line 142) | public CoreModuleClient(ServiceClientCredentials credentials, params D...
method CoreModuleClient (line 169) | public CoreModuleClient(ServiceClientCredentials credentials, HttpClie...
method CoreModuleClient (line 197) | public CoreModuleClient(ServiceClientCredentials credentials, HttpClie...
method CoreModuleClient (line 225) | public CoreModuleClient(System.Uri baseUri, ServiceClientCredentials c...
method CoreModuleClient (line 261) | public CoreModuleClient(System.Uri baseUri, ServiceClientCredentials c...
method CustomInitialize (line 282) | partial void CustomInitialize();
method Initialize (line 286) | private void Initialize()
type ICoreModuleClient (line 340) | public partial interface ICoreModuleClient : System.IDisposable
class Commerce (line 395) | public partial class Commerce : IServiceOperations<CoreModuleClient>, IC...
method Commerce (line 406) | public Commerce(CoreModuleClient client)
method BatchUpdateSeoInfosWithHttpMessagesAsync (line 437) | public async Task<HttpOperationResponse> BatchUpdateSeoInfosWithHttpMe...
method GetSeoDuplicatesWithHttpMessagesAsync (line 553) | public async Task<HttpOperationResponse<IList<SeoInfo>>> GetSeoDuplica...
method GetSeoInfoBySlugWithHttpMessagesAsync (line 703) | public async Task<HttpOperationResponse<IList<SeoInfo>>> GetSeoInfoByS...
method GetAllCurrenciesWithHttpMessagesAsync (line 835) | public async Task<HttpOperationResponse<IList<Currency>>> GetAllCurren...
method CreateCurrencyWithHttpMessagesAsync (line 961) | public async Task<HttpOperationResponse> CreateCurrencyWithHttpMessage...
method UpdateCurrencyWithHttpMessagesAsync (line 1076) | public async Task<HttpOperationResponse> UpdateCurrencyWithHttpMessage...
method DeleteCurrenciesWithHttpMessagesAsync (line 1191) | public async Task<HttpOperationResponse> DeleteCurrenciesWithHttpMessa...
method GetAllPackageTypesWithHttpMessagesAsync (line 1309) | public async Task<HttpOperationResponse<IList<PackageType>>> GetAllPac...
method UpdatePackageTypeWithHttpMessagesAsync (line 1435) | public async Task<HttpOperationResponse> UpdatePackageTypeWithHttpMess...
method CreatePackageTypeWithHttpMessagesAsync (line 1550) | public async Task<HttpOperationResponse> CreatePackageTypeWithHttpMess...
method DeletePackageTypesWithHttpMessagesAsync (line 1665) | public async Task<HttpOperationResponse> DeletePackageTypesWithHttpMes...
method ValidateAddressWithHttpMessagesAsync (line 1786) | public async Task<HttpOperationResponse<bool?>> ValidateAddressWithHtt...
type ICommerce (line 1925) | public partial interface ICommerce
method BatchUpdateSeoInfosWithHttpMessagesAsync (line 1941) | Task<HttpOperationResponse> BatchUpdateSeoInfosWithHttpMessagesAsync(I...
method GetSeoDuplicatesWithHttpMessagesAsync (line 1958) | Task<HttpOperationResponse<IList<SeoInfo>>> GetSeoDuplicatesWithHttpMe...
method GetSeoInfoBySlugWithHttpMessagesAsync (line 1980) | Task<HttpOperationResponse<IList<SeoInfo>>> GetSeoInfoBySlugWithHttpMe...
method GetAllCurrenciesWithHttpMessagesAsync (line 1996) | Task<HttpOperationResponse<IList<Currency>>> GetAllCurrenciesWithHttpM...
method CreateCurrencyWithHttpMessagesAsync (line 2012) | Task<HttpOperationResponse> CreateCurrencyWithHttpMessagesAsync(Curren...
method UpdateCurrencyWithHttpMessagesAsync (line 2028) | Task<HttpOperationResponse> UpdateCurrencyWithHttpMessagesAsync(Curren...
method DeleteCurrenciesWithHttpMessagesAsync (line 2044) | Task<HttpOperationResponse> DeleteCurrenciesWithHttpMessagesAsync(ILis...
method GetAllPackageTypesWithHttpMessagesAsync (line 2060) | Task<HttpOperationResponse<IList<PackageType>>> GetAllPackageTypesWith...
method UpdatePackageTypeWithHttpMessagesAsync (line 2076) | Task<HttpOperationResponse> UpdatePackageTypeWithHttpMessagesAsync(Pac...
method CreatePackageTypeWithHttpMessagesAsync (line 2092) | Task<HttpOperationResponse> CreatePackageTypeWithHttpMessagesAsync(Pac...
method DeletePackageTypesWithHttpMessagesAsync (line 2108) | Task<HttpOperationResponse> DeletePackageTypesWithHttpMessagesAsync(IL...
method ValidateAddressWithHttpMessagesAsync (line 2127) | Task<HttpOperationResponse<bool?>> ValidateAddressWithHttpMessagesAsyn...
class CommerceExtensions (line 2152) | public static partial class CommerceExtensions
method BatchUpdateSeoInfos (line 2162) | public static void BatchUpdateSeoInfos(this ICommerce operations, ILis...
method BatchUpdateSeoInfosAsync (line 2178) | public static async Task BatchUpdateSeoInfosAsync(this ICommerce opera...
method GetSeoDuplicates (line 2190) | public static IList<SeoInfo> GetSeoDuplicates(this ICommerce operation...
method GetSeoDuplicatesAsync (line 2205) | public static async Task<IList<SeoInfo>> GetSeoDuplicatesAsync(this IC...
method GetSeoInfoBySlug (line 2222) | public static IList<SeoInfo> GetSeoInfoBySlug(this ICommerce operation...
method GetSeoInfoBySlugAsync (line 2239) | public static async Task<IList<SeoInfo>> GetSeoInfoBySlugAsync(this IC...
method GetAllCurrencies (line 2253) | public static IList<Currency> GetAllCurrencies(this ICommerce operations)
method GetAllCurrenciesAsync (line 2267) | public static async Task<IList<Currency>> GetAllCurrenciesAsync(this I...
method CreateCurrency (line 2284) | public static void CreateCurrency(this ICommerce operations, Currency ...
method CreateCurrencyAsync (line 2301) | public static async Task CreateCurrencyAsync(this ICommerce operations...
method UpdateCurrency (line 2315) | public static void UpdateCurrency(this ICommerce operations, Currency ...
method UpdateCurrencyAsync (line 2332) | public static async Task UpdateCurrencyAsync(this ICommerce operations...
method DeleteCurrencies (line 2346) | public static void DeleteCurrencies(this ICommerce operations, IList<s...
method DeleteCurrenciesAsync (line 2363) | public static async Task DeleteCurrenciesAsync(this ICommerce operatio...
method GetAllPackageTypes (line 2374) | public static IList<PackageType> GetAllPackageTypes(this ICommerce ope...
method GetAllPackageTypesAsync (line 2388) | public static async Task<IList<PackageType>> GetAllPackageTypesAsync(t...
method UpdatePackageType (line 2405) | public static void UpdatePackageType(this ICommerce operations, Packag...
method UpdatePackageTypeAsync (line 2422) | public static async Task UpdatePackageTypeAsync(this ICommerce operati...
method CreatePackageType (line 2436) | public static void CreatePackageType(this ICommerce operations, Packag...
method CreatePackageTypeAsync (line 2453) | public static async Task CreatePackageTypeAsync(this ICommerce operati...
method DeletePackageTypes (line 2467) | public static void DeletePackageTypes(this ICommerce operations, IList...
method DeletePackageTypesAsync (line 2484) | public static async Task DeletePackageTypesAsync(this ICommerce operat...
method ValidateAddress (line 2498) | public static bool? ValidateAddress(this ICommerce operations, Address...
method ValidateAddressAsync (line 2515) | public static async Task<bool?> ValidateAddressAsync(this ICommerce op...
class SeoInfo (line 2544) | public partial class SeoInfo
method SeoInfo (line 2549) | public SeoInfo()
method SeoInfo (line 2566) | public SeoInfo(string name = default(string), string semanticUrl = def...
method CustomInit (line 2590) | partial void CustomInit();
class NumberFormatInfo (line 2701) | public partial class NumberFormatInfo
method NumberFormatInfo (line 2706) | public NumberFormatInfo()
method NumberFormatInfo (line 2716) | public NumberFormatInfo(int? currencyDecimalDigits = default(int?), st...
method CustomInit (line 2752) | partial void CustomInit();
class Currency (line 2920) | public partial class Currency
method Currency (line 2925) | public Currency()
method Currency (line 2941) | public Currency(string code = default(string), string cultureName = de...
method CustomInit (line 2958) | partial void CustomInit();
class PackageType (line 3036) | public partial class PackageType
method PackageType (line 3041) | public PackageType()
method PackageType (line 3050) | public PackageType(string name = default(string), double? length = def...
method CustomInit (line 3064) | partial void CustomInit();
class Address (line 3118) | public partial class Address
method Address (line 3123) | public Address()
method Address (line 3133) | public Address(string addressType = default(string), string key = defa...
method CustomInit (line 3159) | partial void CustomInit();
FILE: VirtoCommerce.Storefront/AutoRestClients/CustomerModuleApi.cs
class CustomerModuleClient (line 20) | public partial class CustomerModuleClient : ServiceClient<CustomerModule...
method CustomerModuleClient (line 55) | protected CustomerModuleClient(HttpClient httpClient, bool disposeHttp...
method CustomerModuleClient (line 66) | protected CustomerModuleClient(params DelegatingHandler[] handlers) : ...
method CustomerModuleClient (line 80) | protected CustomerModuleClient(HttpClientHandler rootHandler, params D...
method CustomerModuleClient (line 97) | protected CustomerModuleClient(System.Uri baseUri, params DelegatingHa...
method CustomerModuleClient (line 121) | protected CustomerModuleClient(System.Uri baseUri, HttpClientHandler r...
method CustomerModuleClient (line 142) | public CustomerModuleClient(ServiceClientCredentials credentials, para...
method CustomerModuleClient (line 169) | public CustomerModuleClient(ServiceClientCredentials credentials, Http...
method CustomerModuleClient (line 197) | public CustomerModuleClient(ServiceClientCredentials credentials, Http...
method CustomerModuleClient (line 225) | public CustomerModuleClient(System.Uri baseUri, ServiceClientCredentia...
method CustomerModuleClient (line 261) | public CustomerModuleClient(System.Uri baseUri, ServiceClientCredentia...
method CustomInitialize (line 282) | partial void CustomInitialize();
method Initialize (line 286) | private void Initialize()
type ICustomerModuleClient (line 340) | public partial interface ICustomerModuleClient : System.IDisposable
class CustomerModule (line 395) | public partial class CustomerModule : IServiceOperations<CustomerModuleC...
method CustomerModule (line 406) | public CustomerModule(CustomerModuleClient client)
method ListOrganizationsWithHttpMessagesAsync (line 441) | public async Task<HttpOperationResponse<IList<Organization>>> ListOrga...
method SearchMemberWithHttpMessagesAsync (line 574) | public async Task<HttpOperationResponse<MemberSearchResult>> SearchMem...
method GetMemberByIdWithHttpMessagesAsync (line 722) | public async Task<HttpOperationResponse<Member>> GetMemberByIdWithHttp...
method GetMembersByIdsWithHttpMessagesAsync (line 872) | public async Task<HttpOperationResponse<IList<Member>>> GetMembersById...
method CreateMemberWithHttpMessagesAsync (line 1042) | public async Task<HttpOperationResponse<Member>> CreateMemberWithHttpM...
method UpdateMemberWithHttpMessagesAsync (line 1176) | public async Task<HttpOperationResponse> UpdateMemberWithHttpMessagesA...
method DeleteMembersWithHttpMessagesAsync (line 1294) | public async Task<HttpOperationResponse> DeleteMembersWithHttpMessages...
method BulkCreateMembersWithHttpMessagesAsync (line 1416) | public async Task<HttpOperationResponse<IList<Member>>> BulkCreateMemb...
method BulkUpdateMembersWithHttpMessagesAsync (line 1550) | public async Task<HttpOperationResponse> BulkUpdateMembersWithHttpMess...
method BulkDeleteMembersBySearchCriteriaWithHttpMessagesAsync (line 1669) | public async Task<HttpOperationResponse> BulkDeleteMembersBySearchCrit...
method ResizeIconWithHttpMessagesAsync (line 1780) | public async Task<HttpOperationResponse> ResizeIconWithHttpMessagesAsy...
method CreateContactWithHttpMessagesAsync (line 1897) | public async Task<HttpOperationResponse<Contact>> CreateContactWithHtt...
method UpdateContactWithHttpMessagesAsync (line 2029) | public async Task<HttpOperationResponse> UpdateContactWithHttpMessages...
method DeleteContactsWithHttpMessagesAsync (line 2147) | public async Task<HttpOperationResponse> DeleteContactsWithHttpMessage...
method GetContactsByIdsWithHttpMessagesAsync (line 2268) | public async Task<HttpOperationResponse<IList<Contact>>> GetContactsBy...
method BulkCreateContactsWithHttpMessagesAsync (line 2416) | public async Task<HttpOperationResponse<IList<Contact>>> BulkCreateCon...
method BulkUpdateContactsWithHttpMessagesAsync (line 2548) | public async Task<HttpOperationResponse> BulkUpdateContactsWithHttpMes...
method CreateOrganizationWithHttpMessagesAsync (line 2665) | public async Task<HttpOperationResponse<Organization>> CreateOrganizat...
method UpdateOrganizationWithHttpMessagesAsync (line 2797) | public async Task<HttpOperationResponse> UpdateOrganizationWithHttpMes...
method DeleteOrganizationsWithHttpMessagesAsync (line 2915) | public async Task<HttpOperationResponse> DeleteOrganizationsWithHttpMe...
method GetOrganizationsByIdsWithHttpMessagesAsync (line 3036) | public async Task<HttpOperationResponse<IList<Organization>>> GetOrgan...
method BulkCreateOrganizationsWithHttpMessagesAsync (line 3181) | public async Task<HttpOperationResponse> BulkCreateOrganizationsWithHt...
method BulkUpdateOrganizationsWithHttpMessagesAsync (line 3295) | public async Task<HttpOperationResponse> BulkUpdateOrganizationsWithHt...
method GetOrganizationByIdWithHttpMessagesAsync (line 3419) | public async Task<HttpOperationResponse<Organization>> GetOrganization...
method SearchOrganizationsWithHttpMessagesAsync (line 3558) | public async Task<HttpOperationResponse<OrganizationSearchResult>> Sea...
method GetContactByIdWithHttpMessagesAsync (line 3700) | public async Task<HttpOperationResponse<Contact>> GetContactByIdWithHt...
method SearchContactsWithHttpMessagesAsync (line 3839) | public async Task<HttpOperationResponse<ContactSearchResult>> SearchCo...
method GetVendorByIdWithHttpMessagesAsync (line 3981) | public async Task<HttpOperationResponse<Vendor>> GetVendorByIdWithHttp...
method GetVendorsByIdsWithHttpMessagesAsync (line 4116) | public async Task<HttpOperationResponse<IList<Vendor>>> GetVendorsById...
method SearchVendorsWithHttpMessagesAsync (line 4269) | public async Task<HttpOperationResponse<VendorSearchResult>> SearchVen...
method UpdateAddessesWithHttpMessagesAsync (line 4400) | public async Task<HttpOperationResponse> UpdateAddessesWithHttpMessage...
method CreateEmployeeWithHttpMessagesAsync (line 4527) | public async Task<HttpOperationResponse<Employee>> CreateEmployeeWithH...
method GetEmployeesByIdsWithHttpMessagesAsync (line 4663) | public async Task<HttpOperationResponse<IList<Employee>>> GetEmployees...
method BulkCreateEmployeesWithHttpMessagesAsync (line 4811) | public async Task<HttpOperationResponse<IList<Employee>>> BulkCreateEm...
method GetMemberOrganizationsWithHttpMessagesAsync (line 4953) | public async Task<HttpOperationResponse<IList<Organization>>> GetMembe...
type ICustomerModule (line 5091) | public partial interface ICustomerModule
method ListOrganizationsWithHttpMessagesAsync (line 5111) | Task<HttpOperationResponse<IList<Organization>>> ListOrganizationsWith...
method SearchMemberWithHttpMessagesAsync (line 5134) | Task<HttpOperationResponse<MemberSearchResult>> SearchMemberWithHttpMe...
method GetMemberByIdWithHttpMessagesAsync (line 5162) | Task<HttpOperationResponse<Member>> GetMemberByIdWithHttpMessagesAsync...
method GetMembersByIdsWithHttpMessagesAsync (line 5181) | Task<HttpOperationResponse<IList<Member>>> GetMembersByIdsWithHttpMess...
method CreateMemberWithHttpMessagesAsync (line 5201) | Task<HttpOperationResponse<Member>> CreateMemberWithHttpMessagesAsync(...
method UpdateMemberWithHttpMessagesAsync (line 5218) | Task<HttpOperationResponse> UpdateMemberWithHttpMessagesAsync(Member b...
method DeleteMembersWithHttpMessagesAsync (line 5237) | Task<HttpOperationResponse> DeleteMembersWithHttpMessagesAsync(IList<s...
method BulkCreateMembersWithHttpMessagesAsync (line 5258) | Task<HttpOperationResponse<IList<Member>>> BulkCreateMembersWithHttpMe...
method BulkUpdateMembersWithHttpMessagesAsync (line 5275) | Task<HttpOperationResponse> BulkUpdateMembersWithHttpMessagesAsync(ILi...
method BulkDeleteMembersBySearchCriteriaWithHttpMessagesAsync (line 5295) | Task<HttpOperationResponse> BulkDeleteMembersBySearchCriteriaWithHttpM...
method ResizeIconWithHttpMessagesAsync (line 5307) | Task<HttpOperationResponse> ResizeIconWithHttpMessagesAsync(IconResize...
method CreateContactWithHttpMessagesAsync (line 5325) | Task<HttpOperationResponse<Contact>> CreateContactWithHttpMessagesAsyn...
method UpdateContactWithHttpMessagesAsync (line 5340) | Task<HttpOperationResponse> UpdateContactWithHttpMessagesAsync(Contact...
method DeleteContactsWithHttpMessagesAsync (line 5359) | Task<HttpOperationResponse> DeleteContactsWithHttpMessagesAsync(IList<...
method GetContactsByIdsWithHttpMessagesAsync (line 5378) | Task<HttpOperationResponse<IList<Contact>>> GetContactsByIdsWithHttpMe...
method BulkCreateContactsWithHttpMessagesAsync (line 5396) | Task<HttpOperationResponse<IList<Contact>>> BulkCreateContactsWithHttp...
method BulkUpdateContactsWithHttpMessagesAsync (line 5411) | Task<HttpOperationResponse> BulkUpdateContactsWithHttpMessagesAsync(IL...
method CreateOrganizationWithHttpMessagesAsync (line 5429) | Task<HttpOperationResponse<Organization>> CreateOrganizationWithHttpMe...
method UpdateOrganizationWithHttpMessagesAsync (line 5444) | Task<HttpOperationResponse> UpdateOrganizationWithHttpMessagesAsync(Or...
method DeleteOrganizationsWithHttpMessagesAsync (line 5463) | Task<HttpOperationResponse> DeleteOrganizationsWithHttpMessagesAsync(I...
method GetOrganizationsByIdsWithHttpMessagesAsync (line 5482) | Task<HttpOperationResponse<IList<Organization>>> GetOrganizationsByIds...
method BulkCreateOrganizationsWithHttpMessagesAsync (line 5497) | Task<HttpOperationResponse> BulkCreateOrganizationsWithHttpMessagesAsy...
method BulkUpdateOrganizationsWithHttpMessagesAsync (line 5512) | Task<HttpOperationResponse> BulkUpdateOrganizationsWithHttpMessagesAsy...
method GetOrganizationByIdWithHttpMessagesAsync (line 5534) | Task<HttpOperationResponse<Organization>> GetOrganizationByIdWithHttpM...
method SearchOrganizationsWithHttpMessagesAsync (line 5557) | Task<HttpOperationResponse<OrganizationSearchResult>> SearchOrganizati...
method GetContactByIdWithHttpMessagesAsync (line 5579) | Task<HttpOperationResponse<Contact>> GetContactByIdWithHttpMessagesAsy...
method SearchContactsWithHttpMessagesAsync (line 5602) | Task<HttpOperationResponse<ContactSearchResult>> SearchContactsWithHtt...
method GetVendorByIdWithHttpMessagesAsync (line 5624) | Task<HttpOperationResponse<Vendor>> GetVendorByIdWithHttpMessagesAsync...
method GetVendorsByIdsWithHttpMessagesAsync (line 5643) | Task<HttpOperationResponse<IList<Vendor>>> GetVendorsByIdsWithHttpMess...
method SearchVendorsWithHttpMessagesAsync (line 5666) | Task<HttpOperationResponse<VendorSearchResult>> SearchVendorsWithHttpM...
method UpdateAddessesWithHttpMessagesAsync (line 5680) | Task<HttpOperationResponse> UpdateAddessesWithHttpMessagesAsync(IList<...
method CreateEmployeeWithHttpMessagesAsync (line 5698) | Task<HttpOperationResponse<Employee>> CreateEmployeeWithHttpMessagesAs...
method GetEmployeesByIdsWithHttpMessagesAsync (line 5717) | Task<HttpOperationResponse<IList<Employee>>> GetEmployeesByIdsWithHttp...
method BulkCreateEmployeesWithHttpMessagesAsync (line 5735) | Task<HttpOperationResponse<IList<Employee>>> BulkCreateEmployeesWithHt...
method GetMemberOrganizationsWithHttpMessagesAsync (line 5757) | Task<HttpOperationResponse<IList<Organization>>> GetMemberOrganization...
class CustomerModuleExtensions (line 5782) | public static partial class CustomerModuleExtensions
method ListOrganizations (line 5793) | public static IList<Organization> ListOrganizations(this ICustomerModu...
method ListOrganizationsAsync (line 5810) | public static async Task<IList<Organization>> ListOrganizationsAsync(t...
method SearchMember (line 5831) | public static MemberSearchResult SearchMember(this ICustomerModule ope...
method SearchMemberAsync (line 5852) | public static async Task<MemberSearchResult> SearchMemberAsync(this IC...
method GetMemberById (line 5875) | public static Member GetMemberById(this ICustomerModule operations, st...
method GetMemberByIdAsync (line 5898) | public static async Task<Member> GetMemberByIdAsync(this ICustomerModu...
method GetMembersByIds (line 5915) | public static IList<Member> GetMembersByIds(this ICustomerModule opera...
method GetMembersByIdsAsync (line 5932) | public static async Task<IList<Member>> GetMembersByIdsAsync(this ICus...
method CreateMember (line 5950) | public static Member CreateMember(this ICustomerModule operations, Mem...
method CreateMemberAsync (line 5968) | public static async Task<Member> CreateMemberAsync(this ICustomerModul...
method UpdateMember (line 5986) | public static void UpdateMember(this ICustomerModule operations, Membe...
method UpdateMemberAsync (line 6004) | public static async Task UpdateMemberAsync(this ICustomerModule operat...
method DeleteMembers (line 6021) | public static void DeleteMembers(this ICustomerModule operations, ILis...
method DeleteMembersAsync (line 6041) | public static async Task DeleteMembersAsync(this ICustomerModule opera...
method BulkCreateMembers (line 6056) | public static IList<Member> BulkCreateMembers(this ICustomerModule ope...
method BulkCreateMembersAsync (line 6074) | public static async Task<IList<Member>> BulkCreateMembersAsync(this IC...
method BulkUpdateMembers (line 6092) | public static void BulkUpdateMembers(this ICustomerModule operations, ...
method BulkUpdateMembersAsync (line 6110) | public static async Task BulkUpdateMembersAsync(this ICustomerModule o...
method BulkDeleteMembersBySearchCriteria (line 6128) | public static void BulkDeleteMembersBySearchCriteria(this ICustomerMod...
method BulkDeleteMembersBySearchCriteriaAsync (line 6149) | public static async Task BulkDeleteMembersBySearchCriteriaAsync(this I...
method ResizeIcon (line 6159) | public static void ResizeIcon(this ICustomerModule operations, IconRes...
method ResizeIconAsync (line 6172) | public static async Task ResizeIconAsync(this ICustomerModule operatio...
method CreateContact (line 6185) | public static Contact CreateContact(this ICustomerModule operations, C...
method CreateContactAsync (line 6201) | public static async Task<Contact> CreateContactAsync(this ICustomerMod...
method UpdateContact (line 6217) | public static void UpdateContact(this ICustomerModule operations, Cont...
method UpdateContactAsync (line 6233) | public static async Task UpdateContactAsync(this ICustomerModule opera...
method DeleteContacts (line 6250) | public static void DeleteContacts(this ICustomerModule operations, ILi...
method DeleteContactsAsync (line 6270) | public static async Task DeleteContactsAsync(this ICustomerModule oper...
method GetContactsByIds (line 6284) | public static IList<Contact> GetContactsByIds(this ICustomerModule ope...
method GetContactsByIdsAsync (line 6301) | public static async Task<IList<Contact>> GetContactsByIdsAsync(this IC...
method BulkCreateContacts (line 6317) | public static IList<Contact> BulkCreateContacts(this ICustomerModule o...
method BulkCreateContactsAsync (line 6333) | public static async Task<IList<Contact>> BulkCreateContactsAsync(this ...
method BulkUpdateContacts (line 6349) | public static void BulkUpdateContacts(this ICustomerModule operations,...
method BulkUpdateContactsAsync (line 6365) | public static async Task BulkUpdateContactsAsync(this ICustomerModule ...
method CreateOrganization (line 6378) | public static Organization CreateOrganization(this ICustomerModule ope...
method CreateOrganizationAsync (line 6394) | public static async Task<Organization> CreateOrganizationAsync(this IC...
method UpdateOrganization (line 6410) | public static void UpdateOrganization(this ICustomerModule operations,...
method UpdateOrganizationAsync (line 6426) | public static async Task UpdateOrganizationAsync(this ICustomerModule ...
method DeleteOrganizations (line 6443) | public static void DeleteOrganizations(this ICustomerModule operations...
method DeleteOrganizationsAsync (line 6463) | public static async Task DeleteOrganizationsAsync(this ICustomerModule...
method GetOrganizationsByIds (line 6477) | public static IList<Organization> GetOrganizationsByIds(this ICustomer...
method GetOrganizationsByIdsAsync (line 6494) | public static async Task<IList<Organization>> GetOrganizationsByIdsAsy...
method BulkCreateOrganizations (line 6510) | public static void BulkCreateOrganizations(this ICustomerModule operat...
method BulkCreateOrganizationsAsync (line 6526) | public static async Task BulkCreateOrganizationsAsync(this ICustomerMo...
method BulkUpdateOrganizations (line 6539) | public static void BulkUpdateOrganizations(this ICustomerModule operat...
method BulkUpdateOrganizationsAsync (line 6555) | public static async Task BulkUpdateOrganizationsAsync(this ICustomerMo...
method GetOrganizationById (line 6569) | public static Organization GetOrganizationById(this ICustomerModule op...
method GetOrganizationByIdAsync (line 6586) | public static async Task<Organization> GetOrganizationByIdAsync(this I...
method SearchOrganizations (line 6607) | public static OrganizationSearchResult SearchOrganizations(this ICusto...
method SearchOrganizationsAsync (line 6628) | public static async Task<OrganizationSearchResult> SearchOrganizations...
method GetContactById (line 6645) | public static Contact GetContactById(this ICustomerModule operations, ...
method GetContactByIdAsync (line 6662) | public static async Task<Contact> GetContactByIdAsync(this ICustomerMo...
method SearchContacts (line 6683) | public static ContactSearchResult SearchContacts(this ICustomerModule ...
method SearchContactsAsync (line 6704) | public static async Task<ContactSearchResult> SearchContactsAsync(this...
method GetVendorById (line 6721) | public static Vendor GetVendorById(this ICustomerModule operations, st...
method GetVendorByIdAsync (line 6738) | public static async Task<Vendor> GetVendorByIdAsync(this ICustomerModu...
method GetVendorsByIds (line 6755) | public static IList<Vendor> GetVendorsByIds(this ICustomerModule opera...
method GetVendorsByIdsAsync (line 6772) | public static async Task<IList<Vendor>> GetVendorsByIdsAsync(this ICus...
method SearchVendors (line 6793) | public static VendorSearchResult SearchVendors(this ICustomerModule op...
method SearchVendorsAsync (line 6814) | public static async Task<VendorSearchResult> SearchVendorsAsync(this I...
method UpdateAddesses (line 6829) | public static void UpdateAddesses(this ICustomerModule operations, ILi...
method UpdateAddessesAsync (line 6844) | public static async Task UpdateAddessesAsync(this ICustomerModule oper...
method CreateEmployee (line 6857) | public static Employee CreateEmployee(this ICustomerModule operations,...
method CreateEmployeeAsync (line 6873) | public static async Task<Employee> CreateEmployeeAsync(this ICustomerM...
method GetEmployeesByIds (line 6890) | public static IList<Employee> GetEmployeesByIds(this ICustomerModule o...
method GetEmployeesByIdsAsync (line 6907) | public static async Task<IList<Employee>> GetEmployeesByIdsAsync(this ...
method BulkCreateEmployees (line 6923) | public static IList<Employee> BulkCreateEmployees(this ICustomerModule...
method BulkCreateEmployeesAsync (line 6939) | public static async Task<IList<Employee>> BulkCreateEmployeesAsync(thi...
method GetMemberOrganizations (line 6956) | public static IList<Organization> GetMemberOrganizations(this ICustome...
method GetMemberOrganizationsAsync (line 6973) | public static async Task<IList<Organization>> GetMemberOrganizationsAs...
class CustomerAddress (line 7002) | public partial class CustomerAddress
method CustomerAddress (line 7007) | public CustomerAddress()
method CustomerAddress (line 7017) | public CustomerAddress(string addressType = default(string), string ke...
method CustomInit (line 7046) | partial void CustomInit();
class Note (line 7176) | public partial class Note
method Note (line 7181) | public Note()
method Note (line 7189) | public Note(string title = default(string), string body = default(stri...
method CustomInit (line 7205) | partial void CustomInit();
class DynamicPropertyObjectValue (line 7268) | public partial class DynamicPropertyObjectValue
method DynamicPropertyObjectValue (line 7273) | public DynamicPropertyObjectValue()
method DynamicPropertyObjectValue (line 7284) | public DynamicPropertyObjectValue(string objectType = default(string),...
method CustomInit (line 7300) | partial void CustomInit();
class DynamicPropertyName (line 7366) | public partial class DynamicPropertyName
method DynamicPropertyName (line 7371) | public DynamicPropertyName()
method DynamicPropertyName (line 7379) | public DynamicPropertyName(string locale = default(string), string nam...
method CustomInit (line 7389) | partial void CustomInit();
class DynamicObjectProperty (line 7422) | public partial class DynamicObjectProperty
method DynamicObjectProperty (line 7427) | public DynamicObjectProperty()
method DynamicObjectProperty (line 7438) | public DynamicObjectProperty(string objectId = default(string), IList<...
method CustomInit (line 7463) | partial void CustomInit();
class SeoInfo (line 7574) | public partial class SeoInfo
method SeoInfo (line 7579) | public SeoInfo()
method SeoInfo (line 7596) | public SeoInfo(string name = default(string), string semanticUrl = def...
method CustomInit (line 7620) | partial void CustomInit();
class Organization (line 7731) | public partial class Organization
method Organization (line 7736) | public Organization()
method Organization (line 7744) | public Organization(string description = default(string), string busin...
method CustomInit (line 7775) | partial void CustomInit();
class Member (line 7913) | public partial class Member
method Member (line 7918) | public Member()
method Member (line 7926) | public Member(string name = default(string), string memberType = defau...
method CustomInit (line 7953) | partial void CustomInit();
class PermissionScope (line 8071) | public partial class PermissionScope
method PermissionScope (line 8076) | public PermissionScope()
method PermissionScope (line 8084) | public PermissionScope(string type = default(string), string label = d...
method CustomInit (line 8095) | partial void CustomInit();
class Permission (line 8133) | public partial class Permission
method Permission (line 8138) | public Permission()
method Permission (line 8146) | public Permission(string id = default(string), string name = default(s...
method CustomInit (line 8160) | partial void CustomInit();
class Role (line 8213) | public partial class Role
method Role (line 8218) | public Role()
method Role (line 8226) | public Role(string description = default(string), IList<Permission> pe...
method CustomInit (line 8240) | partial void CustomInit();
class ApplicationUserLogin (line 8293) | public partial class ApplicationUserLogin
method ApplicationUserLogin (line 8298) | public ApplicationUserLogin()
method ApplicationUserLogin (line 8306) | public ApplicationUserLogin(string loginProvider = default(string), st...
method CustomInit (line 8316) | partial void CustomInit();
class ApplicationUser (line 8349) | public partial class ApplicationUser
method ApplicationUser (line 8354) | public ApplicationUser()
method ApplicationUser (line 8364) | public ApplicationUser(string storeId = default(string), string member...
method CustomInit (line 8406) | partial void CustomInit();
class Contact (line 8601) | public partial class Contact
method Contact (line 8606) | public Contact()
method Contact (line 8614) | public Contact(string salutation = default(string), string fullName = ...
method CustomInit (line 8660) | partial void CustomInit();
class Vendor (line 8873) | public partial class Vendor
method Vendor (line 8878) | public Vendor()
method Vendor (line 8886) | public Vendor(string description = default(string), string siteUrl = d...
method CustomInit (line 8918) | partial void CustomInit();
class Employee (line 9061) | public partial class Employee
method Employee (line 9066) | public Employee()
method Employee (line 9074) | public Employee(string salutation = default(string), string fullName =...
method CustomInit (line 9114) | partial void CustomInit();
class ContactSearchResult (line 9297) | public partial class ContactSearchResult
method ContactSearchResult (line 9302) | public ContactSearchResult()
method ContactSearchResult (line 9310) | public ContactSearchResult(int? totalCount = default(int?), IList<Cont...
method CustomInit (line 9320) | partial void CustomInit();
class IconResizeRequest (line 9353) | public partial class IconResizeRequest
method IconResizeRequest (line 9358) | public IconResizeRequest()
method IconResizeRequest (line 9366) | public IconResizeRequest(string url = default(string), int? width = de...
method CustomInit (line 9377) | partial void CustomInit();
class MemberSearchResult (line 9415) | public partial class MemberSearchResult
method MemberSearchResult (line 9420) | public MemberSearchResult()
method MemberSearchResult (line 9428) | public MemberSearchResult(int? totalCount = default(int?), IList<Membe...
method CustomInit (line 9438) | partial void CustomInit();
class SortInfo (line 9471) | public partial class SortInfo
method SortInfo (line 9476) | public SortInfo()
method SortInfo (line 9486) | public SortInfo(string sortColumn = default(string), string sortDirect...
method CustomInit (line 9496) | partial void CustomInit();
class MembersSearchCriteria (line 9530) | public partial class MembersSearchCriteria
method MembersSearchCriteria (line 9535) | public MembersSearchCriteria()
method MembersSearchCriteria (line 9543) | public MembersSearchCriteria(string memberType = default(string), ILis...
method CustomInit (line 9569) | partial void CustomInit();
class OrganizationSearchResult (line 9682) | public partial class OrganizationSearchResult
method OrganizationSearchResult (line 9687) | public OrganizationSearchResult()
method OrganizationSearchResult (line 9695) | public OrganizationSearchResult(int? totalCount = default(int?), IList...
method CustomInit (line 9705) | partial void CustomInit();
class StringIdentityUserRole (line 9738) | public partial class StringIdentityUserRole
method StringIdentityUserRole (line 9743) | public StringIdentityUserRole()
method StringIdentityUserRole (line 9751) | public StringIdentityUserRole(string userId = default(string), string ...
method CustomInit (line 9761) | partial void CustomInit();
class VendorSearchResult (line 9794) | public partial class VendorSearchResult
method VendorSearchResult (line 9799) | public VendorSearchResult()
method VendorSearchResult (line 9807) | public VendorSearchResult(IList<Vendor> vendors = default(IList<Vendor...
method CustomInit (line 9818) | partial void CustomInit();
FILE: VirtoCommerce.Storefront/AutoRestClients/NotificationsModuleApi.cs
class NotificationsModuleClient (line 20) | public partial class NotificationsModuleClient : ServiceClient<Notificat...
method NotificationsModuleClient (line 55) | protected NotificationsModuleClient(HttpClient httpClient, bool dispos...
method NotificationsModuleClient (line 66) | protected NotificationsModuleClient(params DelegatingHandler[] handler...
method NotificationsModuleClient (line 80) | protected NotificationsModuleClient(HttpClientHandler rootHandler, par...
method NotificationsModuleClient (line 97) | protected NotificationsModuleClient(System.Uri baseUri, params Delegat...
method NotificationsModuleClient (line 121) | protected NotificationsModuleClient(System.Uri baseUri, HttpClientHand...
method NotificationsModuleClient (line 142) | public NotificationsModuleClient(ServiceClientCredentials credentials,...
method NotificationsModuleClient (line 169) | public NotificationsModuleClient(ServiceClientCredentials credentials,...
method NotificationsModuleClient (line 197) | public NotificationsModuleClient(ServiceClientCredentials credentials,...
method NotificationsModuleClient (line 225) | public NotificationsModuleClient(System.Uri baseUri, ServiceClientCred...
method NotificationsModuleClient (line 261) | public NotificationsModuleClient(System.Uri baseUri, ServiceClientCred...
method CustomInitialize (line 282) | partial void CustomInitialize();
method Initialize (line 286) | private void Initialize()
type INotificationsModuleClient (line 340) | public partial interface INotificationsModuleClient : System.IDisposable
class Notifications (line 395) | public partial class Notifications : IServiceOperations<NotificationsMod...
method Notifications (line 406) | public Notifications(NotificationsModuleClient client)
method GetNotificationsWithHttpMessagesAsync (line 441) | public async Task<HttpOperationResponse<NotificationSearchResult>> Get...
method GetNotificationByTypeIdWithHttpMessagesAsync (line 597) | public async Task<HttpOperationResponse<Notification>> GetNotification...
method UpdateNotificationWithHttpMessagesAsync (line 752) | public async Task<HttpOperationResponse> UpdateNotificationWithHttpMes...
method RenderingTemplateWithHttpMessagesAsync (line 883) | public async Task<HttpOperationResponse> RenderingTemplateWithHttpMess...
method SendNotificationWithHttpMessagesAsync (line 1012) | public async Task<HttpOperationResponse<NotificationSendResult>> SendN...
method ScheduleSendNotificationWithHttpMessagesAsync (line 1144) | public async Task<HttpOperationResponse> ScheduleSendNotificationWithH...
method SendNotificationByRequestWithHttpMessagesAsync (line 1270) | public async Task<HttpOperationResponse<NotificationSendResult>> SendN...
method GetNotificationJournalWithHttpMessagesAsync (line 1411) | public async Task<HttpOperationResponse<NotificationMessageSearchResul...
method GetObjectNotificationJournalWithHttpMessagesAsync (line 1549) | public async Task<HttpOperationResponse<NotificationMessage>> GetObjec...
type INotifications (line 1687) | public partial interface INotifications
method GetNotificationsWithHttpMessagesAsync (line 1707) | Task<HttpOperationResponse<NotificationSearchResult>> GetNotifications...
method GetNotificationByTypeIdWithHttpMessagesAsync (line 1743) | Task<HttpOperationResponse<Notification>> GetNotificationByTypeIdWithH...
method UpdateNotificationWithHttpMessagesAsync (line 1764) | Task<HttpOperationResponse> UpdateNotificationWithHttpMessagesAsync(st...
method RenderingTemplateWithHttpMessagesAsync (line 1787) | Task<HttpOperationResponse> RenderingTemplateWithHttpMessagesAsync(str...
method SendNotificationWithHttpMessagesAsync (line 1805) | Task<HttpOperationResponse<NotificationSendResult>> SendNotificationWi...
method ScheduleSendNotificationWithHttpMessagesAsync (line 1820) | Task<HttpOperationResponse> ScheduleSendNotificationWithHttpMessagesAs...
method SendNotificationByRequestWithHttpMessagesAsync (line 1848) | Task<HttpOperationResponse<NotificationSendResult>> SendNotificationBy...
method GetNotificationJournalWithHttpMessagesAsync (line 1872) | Task<HttpOperationResponse<NotificationMessageSearchResult>> GetNotifi...
method GetObjectNotificationJournalWithHttpMessagesAsync (line 1890) | Task<HttpOperationResponse<NotificationMessage>> GetObjectNotification...
class NotificationsExtensions (line 1915) | public static partial class NotificationsExtensions
method GetNotifications (line 1926) | public static NotificationSearchResult GetNotifications(this INotifica...
method GetNotificationsAsync (line 1943) | public static async Task<NotificationSearchResult> GetNotificationsAsy...
method GetNotificationByTypeId (line 1974) | public static Notification GetNotificationByTypeId(this INotifications...
method GetNotificationByTypeIdAsync (line 2005) | public static async Task<Notification> GetNotificationByTypeIdAsync(th...
method UpdateNotification (line 2024) | public static void UpdateNotification(this INotifications operations, ...
method UpdateNotificationAsync (line 2043) | public static async Task UpdateNotificationAsync(this INotifications o...
method RenderingTemplate (line 2061) | public static void RenderingTemplate(this INotifications operations, s...
method RenderingTemplateAsync (line 2082) | public static async Task RenderingTemplateAsync(this INotifications op...
method SendNotification (line 2095) | public static NotificationSendResult SendNotification(this INotificati...
method SendNotificationAsync (line 2111) | public static async Task<NotificationSendResult> SendNotificationAsync...
method ScheduleSendNotification (line 2127) | public static void ScheduleSendNotification(this INotifications operat...
method ScheduleSendNotificationAsync (line 2143) | public static async Task ScheduleSendNotificationAsync(this INotificat...
method SendNotificationByRequest (line 2165) | public static NotificationSendResult SendNotificationByRequest(this IN...
method SendNotificationByRequestAsync (line 2190) | public static async Task<NotificationSendResult> SendNotificationByReq...
method GetNotificationJournal (line 2212) | public static NotificationMessageSearchResult GetNotificationJournal(t...
method GetNotificationJournalAsync (line 2234) | public static async Task<NotificationMessageSearchResult> GetNotificat...
method GetObjectNotificationJournal (line 2247) | public static NotificationMessage GetObjectNotificationJournal(this IN...
method GetObjectNotificationJournalAsync (line 2260) | public static async Task<NotificationMessage> GetObjectNotificationJou...
class SortInfo (line 2289) | public partial class SortInfo
method SortInfo (line 2294) | public SortInfo()
method SortInfo (line 2304) | public SortInfo(string sortColumn = default(string), string sortDirect...
method CustomInit (line 2314) | partial void CustomInit();
class NotificationSearchCriteria (line 2351) | public partial class NotificationSearchCriteria
method NotificationSearchCriteria (line 2356) | public NotificationSearchCriteria()
method NotificationSearchCriteria (line 2367) | public NotificationSearchCriteria(string notificationType = default(st...
method CustomInit (line 2390) | partial void CustomInit();
class TenantIdentity (line 2491) | public partial class TenantIdentity
method TenantIdentity (line 2496) | public TenantIdentity()
method TenantIdentity (line 2504) | public TenantIdentity(string id = default(string), string type = defau...
method CustomInit (line 2516) | partial void CustomInit();
class NotificationTemplate (line 2562) | public partial class NotificationTemplate
method NotificationTemplate (line 2567) | public NotificationTemplate()
method NotificationTemplate (line 2578) | public NotificationTemplate(string languageCode = default(string), str...
method CustomInit (line 2596) | partial void CustomInit();
class Notification (line 2674) | public partial class Notification
method Notification (line 2679) | public Notification()
method Notification (line 2695) | public Notification(TenantIdentity tenantIdentity = default(TenantIden...
method CustomInit (line 2716) | partial void CustomInit();
class NotificationSearchResult (line 2811) | public partial class NotificationSearchResult
method NotificationSearchResult (line 2816) | public NotificationSearchResult()
method NotificationSearchResult (line 2824) | public NotificationSearchResult(int? totalCount = default(int?), IList...
method CustomInit (line 2834) | partial void CustomInit();
class NotificationTemplateRequest (line 2867) | public partial class NotificationTemplateRequest
method NotificationTemplateRequest (line 2873) | public NotificationTemplateRequest()
method NotificationTemplateRequest (line 2882) | public NotificationTemplateRequest(string text = default(string), Noti...
method CustomInit (line 2892) | partial void CustomInit();
class NotificationSendResult (line 2928) | public partial class NotificationSendResult
method NotificationSendResult (line 2933) | public NotificationSendResult()
method NotificationSendResult (line 2941) | public NotificationSendResult(string errorMessage = default(string), b...
method CustomInit (line 2951) | partial void CustomInit();
class NotificationParameter (line 2984) | public partial class NotificationParameter
method NotificationParameter (line 2989) | public NotificationParameter()
method NotificationParameter (line 2999) | public NotificationParameter(string parameterName = default(string), s...
method CustomInit (line 3014) | partial void CustomInit();
class NotificationRequest (line 3074) | public partial class NotificationRequest
method NotificationRequest (line 3079) | public NotificationRequest()
method NotificationRequest (line 3087) | public NotificationRequest(string type = default(string), string objec...
method CustomInit (line 3100) | partial void CustomInit();
class NotificationMessageSearchCriteria (line 3148) | public partial class NotificationMessageSearchCriteria
method NotificationMessageSearchCriteria (line 3154) | public NotificationMessageSearchCriteria()
method NotificationMessageSearchCriteria (line 3163) | public NotificationMessageSearchCriteria(string notificationType = def...
method CustomInit (line 3183) | partial void CustomInit();
class NotificationMessage (line 3269) | public partial class NotificationMessage
method NotificationMessage (line 3274) | public NotificationMessage()
method NotificationMessage (line 3292) | public NotificationMessage(string kind = default(string), TenantIdenti...
method CustomInit (line 3315) | partial void CustomInit();
class NotificationMessageSearchResult (line 3421) | public partial class NotificationMessageSearchResult
method NotificationMessageSearchResult (line 3427) | public NotificationMessageSearchResult()
method NotificationMessageSearchResult (line 3436) | public NotificationMessageSearchResult(int? totalCount = default(int?)...
method CustomInit (line 3446) | partial void CustomInit();
FILE: VirtoCommerce.Storefront/AutoRestClients/PlatformModuleApi.cs
class PlatformModuleClient (line 28) | public partial class PlatformModuleClient : ServiceClient<PlatformModule...
method PlatformModuleClient (line 118) | protected PlatformModuleClient(HttpClient httpClient, bool disposeHttp...
method PlatformModuleClient (line 129) | protected PlatformModuleClient(params DelegatingHandler[] handlers) : ...
method PlatformModuleClient (line 143) | protected PlatformModuleClient(HttpClientHandler rootHandler, params D...
method PlatformModuleClient (line 160) | protected PlatformModuleClient(System.Uri baseUri, params DelegatingHa...
method PlatformModuleClient (line 184) | protected PlatformModuleClient(System.Uri baseUri, HttpClientHandler r...
method PlatformModuleClient (line 205) | public PlatformModuleClient(ServiceClientCredentials credentials, para...
method PlatformModuleClient (line 232) | public PlatformModuleClient(ServiceClientCredentials credentials, Http...
method PlatformModuleClient (line 260) | public PlatformModuleClient(ServiceClientCredentials credentials, Http...
method PlatformModuleClient (line 288) | public PlatformModuleClient(System.Uri baseUri, ServiceClientCredentia...
method PlatformModuleClient (line 324) | public PlatformModuleClient(System.Uri baseUri, ServiceClientCredentia...
method CustomInitialize (line 345) | partial void CustomInitialize();
method Initialize (line 349) | private void Initialize()
type IPlatformModuleClient (line 420) | public partial interface IPlatformModuleClient : System.IDisposable
class Authorization (line 530) | public partial class Authorization : IServiceOperations<PlatformModuleCl...
method Authorization (line 541) | public Authorization(PlatformModuleClient client)
method ExchangeWithHttpMessagesAsync (line 578) | public async Task<HttpOperationResponse<OpenIddictResponse>> ExchangeW...
type IAuthorization (line 743) | public partial interface IAuthorization
method ExchangeWithHttpMessagesAsync (line 762) | Task<HttpOperationResponse<OpenIddictResponse>> ExchangeWithHttpMessag...
class AuthorizationExtensions (line 787) | public static partial class AuthorizationExtensions
method Exchange (line 794) | public static OpenIddictResponse Exchange(this IAuthorization operatio...
method ExchangeAsync (line 807) | public static async Task<OpenIddictResponse> ExchangeAsync(this IAutho...
class ExternalSignIn (line 841) | public partial class ExternalSignIn : IServiceOperations<PlatformModuleC...
method ExternalSignIn (line 852) | public ExternalSignIn(PlatformModuleClient client)
method SignInWithHttpMessagesAsync (line 882) | public async Task<HttpOperationResponse> SignInWithHttpMessagesAsync(s...
method SignOutWithHttpMessagesAsync (line 1001) | public async Task<HttpOperationResponse> SignOutWithHttpMessagesAsync(...
method SignInCallbackWithHttpMessagesAsync (line 1115) | public async Task<HttpOperationResponse> SignInCallbackWithHttpMessage...
method GetExternalLoginProvidersWithHttpMessagesAsync (line 1230) | public async Task<HttpOperationResponse<IList<ExternalSignInProviderIn...
type IExternalSignIn (line 1362) | public partial interface IExternalSignIn
method SignInWithHttpMessagesAsync (line 1377) | Task<HttpOperationResponse> SignInWithHttpMessagesAsync(string authent...
method SignOutWithHttpMessagesAsync (line 1389) | Task<HttpOperationResponse> SignOutWithHttpMessagesAsync(string authen...
method SignInCallbackWithHttpMessagesAsync (line 1401) | Task<HttpOperationResponse> SignInCallbackWithHttpMessagesAsync(string...
method GetExternalLoginProvidersWithHttpMessagesAsync (line 1414) | Task<HttpOperationResponse<IList<ExternalSignInProviderInfo>>> GetExte...
class ExternalSignInExtensions (line 1439) | public static partial class ExternalSignInExtensions
method SignIn (line 1448) | public static void SignIn(this IExternalSignIn operations, string auth...
method SignInAsync (line 1463) | public static async Task SignInAsync(this IExternalSignIn operations, ...
method SignOut (line 1473) | public static void SignOut(this IExternalSignIn operations, string aut...
method SignOutAsync (line 1486) | public static async Task SignOutAsync(this IExternalSignIn operations,...
method SignInCallback (line 1496) | public static void SignInCallback(this IExternalSignIn operations, str...
method SignInCallbackAsync (line 1509) | public static async Task SignInCallbackAsync(this IExternalSignIn oper...
method GetExternalLoginProviders (line 1517) | public static IList<ExternalSignInProviderInfo> GetExternalLoginProvid...
method GetExternalLoginProvidersAsync (line 1528) | public static async Task<IList<ExternalSignInProviderInfo>> GetExterna...
class Apps (line 1562) | public partial class Apps : IServiceOperations<PlatformModuleClient>, IApps
method Apps (line 1573) | public Apps(PlatformModuleClient client)
method GetAppsWithHttpMessagesAsync (line 1605) | public async Task<HttpOperationResponse<IList<AppDescriptor>>> GetApps...
type IApps (line 1737) | public partial interface IApps
method GetAppsWithHttpMessagesAsync (line 1754) | Task<HttpOperationResponse<IList<AppDescriptor>>> GetAppsWithHttpMessa...
class AppsExtensions (line 1779) | public static partial class AppsExtensions
method GetApps (line 1787) | public static IList<AppDescriptor> GetApps(this IApps operations)
method GetAppsAsync (line 1801) | public static async Task<IList<AppDescriptor>> GetAppsAsync(this IApps...
class ChangeLog (line 1835) | public partial class ChangeLog : IServiceOperations<PlatformModuleClient...
method ChangeLog (line 1846) | public ChangeLog(PlatformModuleClient client)
method ForceChangesWithHttpMessagesAsync (line 1877) | public async Task<HttpOperationResponse> ForceChangesWithHttpMessagesA...
method ResetPlatformCacheWithHttpMessagesAsync (line 1989) | public async Task<HttpOperationResponse> ResetPlatformCacheWithHttpMes...
method GetLastModifiedDateWithHttpMessagesAsync (line 2101) | public async Task<HttpOperationResponse<LastModifiedResponse>> GetLast...
method GetChangedEntitiesWithHttpMessagesAsync (line 2236) | public async Task<HttpOperationResponse<ChangedEntitiesResponse>> GetC...
method ResetChangedEntitiesWithHttpMessagesAsync (line 2365) | public async Task<HttpOperationResponse> ResetChangedEntitiesWithHttpM...
method SearchChangesWithHttpMessagesAsync (line 2479) | public async Task<HttpOperationResponse<ChangeLogSearchResult>> Search...
method SearchTypeChangeHistoryWithHttpMessagesAsync (line 2621) | public async Task<HttpOperationResponse<IList<OperationLog>>> SearchTy...
type IChangeLog (line 2774) | public partial interface IChangeLog
method ForceChangesWithHttpMessagesAsync (line 2790) | Task<HttpOperationResponse> ForceChangesWithHttpMessagesAsync(string s...
method ResetPlatformCacheWithHttpMessagesAsync (line 2800) | Task<HttpOperationResponse> ResetPlatformCacheWithHttpMessagesAsync(Di...
method GetLastModifiedDateWithHttpMessagesAsync (line 2820) | Task<HttpOperationResponse<LastModifiedResponse>> GetLastModifiedDateW...
method GetChangedEntitiesWithHttpMessagesAsync (line 2835) | Task<HttpOperationResponse<ChangedEntitiesResponse>> GetChangedEntitie...
method ResetChangedEntitiesWithHttpMessagesAsync (line 2847) | Task<HttpOperationResponse> ResetChangedEntitiesWithHttpMessagesAsync(...
method SearchChangesWithHttpMessagesAsync (line 2862) | Task<HttpOperationResponse<ChangeLogSearchResult>> SearchChangesWithHt...
method SearchTypeChangeHistoryWithHttpMessagesAsync (line 2884) | Task<HttpOperationResponse<IList<OperationLog>>> SearchTypeChangeHisto...
class ChangeLogExtensions (line 2909) | public static partial class ChangeLogExtensions
method ForceChanges (line 2919) | public static void ForceChanges(this IChangeLog operations, string sco...
method ForceChangesAsync (line 2935) | public static async Task ForceChangesAsync(this IChangeLog operations,...
method ResetPlatformCache (line 2943) | public static void ResetPlatformCache(this IChangeLog operations)
method ResetPlatformCacheAsync (line 2954) | public static async Task ResetPlatformCacheAsync(this IChangeLog opera...
method GetLastModifiedDate (line 2969) | public static LastModifiedResponse GetLastModifiedDate(this IChangeLog...
method GetLastModifiedDateAsync (line 2987) | public static async Task<LastModifiedResponse> GetLastModifiedDateAsyn...
method GetChangedEntities (line 3000) | public static ChangedEntitiesResponse GetChangedEntities(this IChangeL...
method GetChangedEntitiesAsync (line 3013) | public static async Task<ChangedEntitiesResponse> GetChangedEntitiesAs...
method ResetChangedEntities (line 3026) | public static void ResetChangedEntities(this IChangeLog operations, IL...
method ResetChangedEntitiesAsync (line 3039) | public static async Task ResetChangedEntitiesAsync(this IChangeLog ope...
method SearchChanges (line 3049) | public static ChangeLogSearchResult SearchChanges(this IChangeLog oper...
method SearchChangesAsync (line 3062) | public static async Task<ChangeLogSearchResult> SearchChangesAsync(thi...
method SearchTypeChangeHistory (line 3079) | public static IList<OperationLog> SearchTypeChangeHistory(this IChange...
method SearchTypeChangeHistoryAsync (line 3096) | public static async Task<IList<OperationLog>> SearchTypeChangeHistoryA...
class Diagnostics (line 3130) | public partial class Diagnostics : IServiceOperations<PlatformModuleClie...
method Diagnostics (line 3141) | public Diagnostics(PlatformModuleClient client)
method GetSystemInfoWithHttpMessagesAsync (line 3170) | public async Task<HttpOperationResponse<SystemInfo>> GetSystemInfoWith...
method GetModulesErrorsWithHttpMessagesAsync (line 3296) | public async Task<HttpOperationResponse<IList<ModuleDescriptor>>> GetM...
type IDiagnostics (line 3428) | public partial interface IDiagnostics
method GetSystemInfoWithHttpMessagesAsync (line 3442) | Task<HttpOperationResponse<SystemInfo>> GetSystemInfoWithHttpMessagesA...
method GetModulesErrorsWithHttpMessagesAsync (line 3458) | Task<HttpOperationResponse<IList<ModuleDescriptor>>> GetModulesErrorsW...
class DiagnosticsExtensions (line 3483) | public static partial class DiagnosticsExtensions
method GetSystemInfo (line 3488) | public static SystemInfo GetSystemInfo(this IDiagnostics operations)
method GetSystemInfoAsync (line 3499) | public static async Task<SystemInfo> GetSystemInfoAsync(this IDiagnost...
method GetModulesErrors (line 3513) | public static IList<ModuleDescriptor> GetModulesErrors(this IDiagnosti...
method GetModulesErrorsAsync (line 3527) | public static async Task<IList<ModuleDescriptor>> GetModulesErrorsAsyn...
class DynamicProperties (line 3561) | public partial class DynamicProperties : IServiceOperations<PlatformModu...
method DynamicProperties (line 3572) | public DynamicProperties(PlatformModuleClient client)
method GetObjectTypesWithHttpMessagesAsync (line 3604) | public async Task<HttpOperationResponse<IList<string>>> GetObjectTypes...
method SearchDynamicPropertiesWithHttpMessagesAsync (line 3732) | public async Task<HttpOperationResponse<DynamicPropertySearchResult>> ...
method CreatePropertyAsyncWithHttpMessagesAsync (line 3867) | public async Task<HttpOperationResponse<DynamicProperty>> CreateProper...
method UpdatePropertyAsyncWithHttpMessagesAsync (line 3999) | public async Task<HttpOperationResponse> UpdatePropertyAsyncWithHttpMe...
method DeletePropertyAsyncWithHttpMessagesAsync (line 4113) | public async Task<HttpOperationResponse> DeletePropertyAsyncWithHttpMe...
method ExposeDynamicObjectPropertyWithHttpMessagesAsync (line 4231) | public async Task<HttpOperationResponse<DynamicObjectProperty>> Expose...
method SearchDictionaryItemsWithHttpMessagesAsync (line 4359) | public async Task<HttpOperationResponse<DynamicPropertyDictionaryItemS...
method SaveDictionaryItemsAsyncWithHttpMessagesAsync (line 4495) | public async Task<HttpOperationResponse> SaveDictionaryItemsAsyncWithH...
method DeleteDictionaryItemAsyncWithHttpMessagesAsync (line 4610) | public async Task<HttpOperationResponse> DeleteDictionaryItemAsyncWith...
type IDynamicProperties (line 4734) | public partial interface IDynamicProperties
method GetObjectTypesWithHttpMessagesAsync (line 4751) | Task<HttpOperationResponse<IList<string>>> GetObjectTypesWithHttpMessa...
method SearchDynamicPropertiesWithHttpMessagesAsync (line 4769) | Task<HttpOperationResponse<DynamicPropertySearchResult>> SearchDynamic...
method CreatePropertyAsyncWithHttpMessagesAsync (line 4787) | Task<HttpOperationResponse<DynamicProperty>> CreatePropertyAsyncWithHt...
method UpdatePropertyAsyncWithHttpMessagesAsync (line 4802) | Task<HttpOperationResponse> UpdatePropertyAsyncWithHttpMessagesAsync(D...
method DeletePropertyAsyncWithHttpMessagesAsync (line 4817) | Task<HttpOperationResponse> DeletePropertyAsyncWithHttpMessagesAsync(I...
method ExposeDynamicObjectPropertyWithHttpMessagesAsync (line 4834) | Task<HttpOperationResponse<DynamicObjectProperty>> ExposeDynamicObject...
method SearchDictionaryItemsWithHttpMessagesAsync (line 4852) | Task<HttpOperationResponse<DynamicPropertyDictionaryItemSearchResult>>...
method SaveDictionaryItemsAsyncWithHttpMessagesAsync (line 4871) | Task<HttpOperationResponse> SaveDictionaryItemsAsyncWithHttpMessagesAs...
method DeleteDictionaryItemAsyncWithHttpMessagesAsync (line 4887) | Task<HttpOperationResponse> DeleteDictionaryItemAsyncWithHttpMessagesA...
class DynamicPropertiesExtensions (line 4912) | public static partial class DynamicPropertiesExtensions
method GetObjectTypes (line 4920) | public static IList<string> GetObjectTypes(this IDynamicProperties ope...
method GetObjectTypesAsync (line 4934) | public static async Task<IList<string>> GetObjectTypesAsync(this IDyna...
method SearchDynamicProperties (line 4950) | public static DynamicPropertySearchResult SearchDynamicProperties(this...
method SearchDynamicPropertiesAsync (line 4966) | public static async Task<DynamicPropertySearchResult> SearchDynamicPro...
method CreatePropertyAsync (line 4982) | public static DynamicProperty CreatePropertyAsync(this IDynamicPropert...
method CreatePropertyAsyncAsync (line 4998) | public static async Task<DynamicProperty> CreatePropertyAsyncAsync(thi...
method UpdatePropertyAsync (line 5014) | public static void UpdatePropertyAsync(this IDynamicProperties operati...
method UpdatePropertyAsyncAsync (line 5030) | public static async Task UpdatePropertyAsyncAsync(this IDynamicPropert...
method DeletePropertyAsync (line 5043) | public static void DeletePropertyAsync(this IDynamicProperties operati...
method DeletePropertyAsyncAsync (line 5059) | public static async Task DeletePropertyAsyncAsync(this IDynamicPropert...
method ExposeDynamicObjectProperty (line 5070) | public static DynamicObjectProperty ExposeDynamicObjectProperty(this I...
method ExposeDynamicObjectPropertyAsync (line 5084) | public static async Task<DynamicObjectProperty> ExposeDynamicObjectPro...
method SearchDictionaryItems (line 5100) | public static DynamicPropertyDictionaryItemSearchResult SearchDictiona...
method SearchDictionaryItemsAsync (line 5116) | public static async Task<DynamicPropertyDictionaryItemSearchResult> Se...
method SaveDictionaryItemsAsync (line 5136) | public static void SaveDictionaryItemsAsync(this IDynamicProperties op...
method SaveDictionaryItemsAsyncAsync (line 5156) | public static async Task SaveDictionaryItemsAsyncAsync(this IDynamicPr...
method DeleteDictionaryItemAsync (line 5170) | public static void DeleteDictionaryItemAsync(this IDynamicProperties o...
method DeleteDictionaryItemAsyncAsync (line 5187) | public static async Task DeleteDictionaryItemAsyncAsync(this IDynamicP...
class Jobs (line 5218) | public partial class Jobs : IServiceOperations<PlatformModuleClient>, IJobs
method Jobs (line 5229) | public Jobs(PlatformModuleClient client)
method GetStatusWithHttpMessagesAsync (line 5270) | public async Task<HttpOperationResponse<Job>> GetStatusWithHttpMessage...
type IJobs (line 5408) | public partial interface IJobs
method GetStatusWithHttpMessagesAsync (line 5431) | Task<HttpOperationResponse<Job>> GetStatusWithHttpMessagesAsync(string...
class JobsExtensions (line 5456) | public static partial class JobsExtensions
method GetStatus (line 5467) | public static Job GetStatus(this IJobs operations, string id)
method GetStatusAsync (line 5484) | public static async Task<Job> GetStatusAsync(this IJobs operations, st...
class Modules (line 5518) | public partial class Modules : IServiceOperations<PlatformModuleClient>,...
method Modules (line 5529) | public Modules(PlatformModuleClient client)
method ReloadModulesWithHttpMessagesAsync (line 5558) | public async Task<HttpOperationResponse> ReloadModulesWithHttpMessages...
method GetModulesWithHttpMessagesAsync (line 5666) | public async Task<HttpOperationResponse<IList<ModuleDescriptor>>> GetM...
method GetDependingModulesWithHttpMessagesAsync (line 5795) |
Condensed preview — 451 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,436K chars).
[
{
"path": ".deployment/storefront-app/argoDeploy.json",
"chars": 1001,
"preview": "{\n \"artifactKey\": \"docker.pkg.github.com/virtocommerce/vc-storefront/storefront\",\n \"deployRepo\": \"vc-deploy-dev\",\n"
},
{
"path": ".editorconfig",
"chars": 3531,
"preview": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 4\nend_of_line = crlf\ntrim_trailing_whitespace = true"
},
{
"path": ".gitattributes",
"chars": 2588,
"preview": "###############################################################################\n# Set default behavior to automatically "
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 222,
"preview": "Please provide detailed information about your issue, thank you!\n\nVersion info: \n- Browser version: \n- Platform version:"
},
{
"path": ".github/pull_request_template.md",
"chars": 68,
"preview": "Description: \n\n\n--\n\nQA-test: \n\nDemo-test: \n\nDownload artifact URL: \n"
},
{
"path": ".github/workflows/deploy.yml",
"chars": 4787,
"preview": "# v1.3.0\n\nname: VC deployment\non:\n workflow_dispatch:\n inputs:\n artifactUrl:\n description: 'Full link to"
},
{
"path": ".github/workflows/main.yml",
"chars": 9571,
"preview": "# v1.2.1\nname: Storefront CI\n\non:\n workflow_dispatch:\n inputs:\n forceLatest:\n description: \"Flag to set "
},
{
"path": ".github/workflows/msteams.yml",
"chars": 1799,
"preview": "name: Send message to Teams (regression PR)\n\non:\n pull_request:\n branches:\n [regression]\n \njobs:\n notify:\n"
},
{
"path": ".github/workflows/pr-ci.yml",
"chars": 708,
"preview": "# v3.800.4\nname: PR build\n\non:\n workflow_dispatch:\n pull_request:\n branches: [ master, dev ]\n paths-ignore:\n "
},
{
"path": ".github/workflows/pr-deploy.yml",
"chars": 4379,
"preview": "# v3.800.4\nname: PR deploy\n\non:\n pull_request:\n branches: [ master, dev ]\n types: [ labeled ]\n\njobs:\n\n get-deplo"
},
{
"path": ".github/workflows/release-branch.yml",
"chars": 2895,
"preview": "# v3.800.5\nname: Release - branch\n\non:\n workflow_dispatch:\n inputs:\n incrementVersion:\n description: 'In"
},
{
"path": ".github/workflows/release.yml",
"chars": 207,
"preview": "# v1.0.0\nname: Release - Quick release\n\non:\n workflow_dispatch:\n\njobs:\n release:\n uses: VirtoCommerce/.github/.gith"
},
{
"path": ".gitignore",
"chars": 4529,
"preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User"
},
{
"path": ".nuke",
"chars": 28,
"preview": "VirtoCommerce.Storefront.sln"
},
{
"path": "CONTRIBUTING.md",
"chars": 1016,
"preview": "Contributing\n-----------\nWe welcome & recognize contributors to Virto Commerce. There are many benefits available for ou"
},
{
"path": "Directory.Build.props",
"chars": 568,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project>\n <!-- These properties will be shared for all projects -->\n <Property"
},
{
"path": "LICENSE",
"chars": 491,
"preview": "Copyright (c) Virto Solutions LTD. All rights reserved.\n\nLicensed under the Virto Commerce Open Software License (the \""
},
{
"path": "README.md",
"chars": 5858,
"preview": "# Virto Commerce Storefront Kit\n\n[ AutoRest Code Generator.\n// Changes may cause incorrect behavior "
},
{
"path": "VirtoCommerce.Storefront/AutoRestClients/ContentModuleApi.cs",
"chars": 160998,
"preview": "// <auto-generated>\n// Code generated by Microsoft (R) AutoRest Code Generator.\n// Changes may cause incorrect behavior "
},
{
"path": "VirtoCommerce.Storefront/AutoRestClients/CoreModuleApi.cs",
"chars": 136122,
"preview": "// <auto-generated>\n// Code generated by Microsoft (R) AutoRest Code Generator.\n// Changes may cause incorrect behavior "
},
{
"path": "VirtoCommerce.Storefront/AutoRestClients/CustomerModuleApi.cs",
"chars": 410744,
"preview": "// <auto-generated>\n// Code generated by Microsoft (R) AutoRest Code Generator.\n// Changes may cause incorrect behavior "
},
{
"path": "VirtoCommerce.Storefront/AutoRestClients/NotificationsModuleApi.cs",
"chars": 141239,
"preview": "// <auto-generated>\n// Code generated by Microsoft (R) AutoRest Code Generator.\n// Changes may cause incorrect behavior "
},
{
"path": "VirtoCommerce.Storefront/AutoRestClients/PlatformModuleApi.cs",
"chars": 947371,
"preview": "// <auto-generated>\n// Code generated by Microsoft (R) AutoRest Code Generator.\n// Changes may cause incorrect behavior "
},
{
"path": "VirtoCommerce.Storefront/AutoRestClients/SitemapsModuleApi.cs",
"chars": 133231,
"preview": "// <auto-generated>\n// Code generated by Microsoft (R) AutoRest Code Generator.\n// Changes may cause incorrect behavior "
},
{
"path": "VirtoCommerce.Storefront/AutoRestClients/StoreModuleApi.cs",
"chars": 134508,
"preview": "// <auto-generated>\n// Code generated by Microsoft (R) AutoRest Code Generator.\n// Changes may cause incorrect behavior "
},
{
"path": "VirtoCommerce.Storefront/AutoRestClients/array-in-query-fix.yml",
"chars": 223,
"preview": "directive:\n- from: swagger-document\n where: $.paths.*.get.parameters[?(@.schema.type === \"array\")]\n transform: | \n "
},
{
"path": "VirtoCommerce.Storefront/Caching/Redis/RedisCachingMessage.cs",
"chars": 756,
"preview": "using System;\nusing System.Linq;\n\nnamespace VirtoCommerce.Storefront.Caching.Redis\n{\n internal class RedisCachingMess"
},
{
"path": "VirtoCommerce.Storefront/Caching/Redis/RedisCachingOptions.cs",
"chars": 665,
"preview": "using System;\nusing StackExchange.Redis;\n\nnamespace VirtoCommerce.Storefront.Caching.Redis\n{\n public class RedisCachi"
},
{
"path": "VirtoCommerce.Storefront/Caching/Redis/RedisStorefrontMemoryCache.cs",
"chars": 7048,
"preview": "using System;\nusing System.Linq;\nusing Microsoft.Extensions.Caching.Memory;\nusing Microsoft.Extensions.Logging;\nusing Mi"
},
{
"path": "VirtoCommerce.Storefront/Caching/ServiceCollectionExtensions.cs",
"chars": 1045,
"preview": "using System;\nusing Microsoft.Extensions.DependencyInjection;\nusing StackExchange.Redis;\nusing VirtoCommerce.Storefront."
},
{
"path": "VirtoCommerce.Storefront/Caching/StorefrontMemoryCache.cs",
"chars": 4102,
"preview": "using System;\nusing Microsoft.Extensions.Caching.Memory;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions."
},
{
"path": "VirtoCommerce.Storefront/Connected Services/Application Insights/ConnectedService.json",
"chars": 214,
"preview": "{\n \"ProviderId\": \"Microsoft.ApplicationInsights.ConnectedService.ConnectedServiceProvider\",\n \"Version\": \"8.8.712.1\",\n "
},
{
"path": "VirtoCommerce.Storefront/Controllers/AccountController.cs",
"chars": 4958,
"preview": "using System;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Identit"
},
{
"path": "VirtoCommerce.Storefront/Controllers/Api/ApiAccountController.cs",
"chars": 22021,
"preview": "using System;\nusing System.Linq;\nusing System.Net;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorizatio"
},
{
"path": "VirtoCommerce.Storefront/Controllers/Api/ApiBlogController.cs",
"chars": 2173,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.AspNetCore.Mvc;\nusing VirtoCommerce.S"
},
{
"path": "VirtoCommerce.Storefront/Controllers/Api/ApiCommonController.cs",
"chars": 5135,
"preview": "using System;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Autho"
},
{
"path": "VirtoCommerce.Storefront/Controllers/Api/ApiStaticContentController.cs",
"chars": 3470,
"preview": "using System.Linq;\nusing System.Net.Mime;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing VirtoCo"
},
{
"path": "VirtoCommerce.Storefront/Controllers/Api/ApiThemeController.cs",
"chars": 1221,
"preview": "using Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing VirtoCommerce.LiquidThemeE"
},
{
"path": "VirtoCommerce.Storefront/Controllers/AssetController.cs",
"chars": 4250,
"preview": "using System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing Micros"
},
{
"path": "VirtoCommerce.Storefront/Controllers/CommonController.cs",
"chars": 5479,
"preview": "using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft"
},
{
"path": "VirtoCommerce.Storefront/Controllers/DesignerPreviewController.cs",
"chars": 1405,
"preview": "using Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Mvc;\nusing VirtoCommerce.Storefront.Infrastructure;"
},
{
"path": "VirtoCommerce.Storefront/Controllers/ErrorController.cs",
"chars": 4052,
"preview": "using System.Linq;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Diagno"
},
{
"path": "VirtoCommerce.Storefront/Controllers/HomeController.cs",
"chars": 319,
"preview": "using Microsoft.AspNetCore.Mvc;\nusing VirtoCommerce.Storefront.Infrastructure;\n\nnamespace VirtoCommerce.Storefront.Contr"
},
{
"path": "VirtoCommerce.Storefront/Controllers/SitemapController.cs",
"chars": 3022,
"preview": "using System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\nusing VirtoCommerce.LiquidT"
},
{
"path": "VirtoCommerce.Storefront/Controllers/StorefrontControllerBase.cs",
"chars": 1231,
"preview": "using Microsoft.AspNetCore.Mvc;\nusing VirtoCommerce.Storefront.Model;\nusing VirtoCommerce.Storefront.Model.Common;\n\nname"
},
{
"path": "VirtoCommerce.Storefront/DependencyInjection/ServiceCollectionExtension.cs",
"chars": 12986,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System"
},
{
"path": "VirtoCommerce.Storefront/Domain/Common/AddressConverter.cs",
"chars": 3977,
"preview": "using System;\nusing System.Linq;\nusing VirtoCommerce.Storefront.Model;\nusing coreDto = VirtoCommerce.Storefront.AutoRest"
},
{
"path": "VirtoCommerce.Storefront/Domain/Common/ContactUsFormConverter.cs",
"chars": 802,
"preview": "using System.Linq;\nusing VirtoCommerce.Storefront.AutoRestClients.StoreModuleApi.Models;\nusing VirtoCommerce.Storefront."
},
{
"path": "VirtoCommerce.Storefront/Domain/Common/CurrencyConverter.cs",
"chars": 626,
"preview": "using VirtoCommerce.Storefront.Model;\nusing VirtoCommerce.Storefront.Model.Common;\nusing coreDto = VirtoCommerce.Storefr"
},
{
"path": "VirtoCommerce.Storefront/Domain/Common/DynamicPropertyConverter.cs",
"chars": 4302,
"preview": "using System.Globalization;\nusing System.Linq;\nusing Newtonsoft.Json.Linq;\nusing VirtoCommerce.Storefront.Model;\nusing p"
},
{
"path": "VirtoCommerce.Storefront/Domain/Common/NotificationConverter.cs",
"chars": 872,
"preview": "using System.Linq;\nusing VirtoCommerce.Storefront.AutoRestClients.NotificationsModuleApi.Models;\nusing VirtoCommerce.Sto"
},
{
"path": "VirtoCommerce.Storefront/Domain/Common/SeoInfoConverter.cs",
"chars": 899,
"preview": "using VirtoCommerce.Storefront.Model;\nusing coreDto = VirtoCommerce.Storefront.AutoRestClients.CoreModuleApi.Models;\n\nna"
},
{
"path": "VirtoCommerce.Storefront/Domain/Common/SettingConverter.cs",
"chars": 832,
"preview": "using System.Linq;\nusing VirtoCommerce.Storefront.Model;\nusing platformDto = VirtoCommerce.Storefront.AutoRestClients.Pl"
},
{
"path": "VirtoCommerce.Storefront/Domain/Common/ToolsConverter.cs",
"chars": 1691,
"preview": "using System.Linq;\nusing VirtoCommerce.Storefront.Model;\nusing VirtoCommerce.Storefront.Model.Common;\nusing VirtoCommerc"
},
{
"path": "VirtoCommerce.Storefront/Domain/ContentBlobProviders/AzureBlobContentOptions.cs",
"chars": 498,
"preview": "using System;\nusing Microsoft.WindowsAzure.Storage.Blob;\n\nnamespace VirtoCommerce.Storefront.Domain\n{\n public class A"
},
{
"path": "VirtoCommerce.Storefront/Domain/ContentBlobProviders/AzureBlobContentProvider.cs",
"chars": 10156,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing "
},
{
"path": "VirtoCommerce.Storefront/Domain/ContentBlobProviders/BlobConnectionString.cs",
"chars": 2451,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace VirtoCommerce.Storefron"
},
{
"path": "VirtoCommerce.Storefront/Domain/ContentBlobProviders/ContentBlobCacheRegion.cs",
"chars": 201,
"preview": "using VirtoCommerce.Storefront.Model.Common.Caching;\n\nnamespace VirtoCommerce.Storefront.Domain\n{\n public class Conte"
},
{
"path": "VirtoCommerce.Storefront/Domain/ContentBlobProviders/FileSystemBlobContentOptions.cs",
"chars": 170,
"preview": "namespace VirtoCommerce.Storefront.Domain\n{\n public class FileSystemBlobContentOptions\n {\n //The root path "
},
{
"path": "VirtoCommerce.Storefront/Domain/ContentBlobProviders/FileSystemContentBlobProvider.cs",
"chars": 5700,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Microsoft.Extensions.Caching.M"
},
{
"path": "VirtoCommerce.Storefront/Domain/Countries/CountriesWorkContextBuilderExtensions.cs",
"chars": 891,
"preview": "using System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Microsoft.Extensions.DependencyInjection;\nusing Vi"
},
{
"path": "VirtoCommerce.Storefront/Domain/Countries/FileSystemCountriesOptions.cs",
"chars": 147,
"preview": "namespace VirtoCommerce.Storefront.Domain\n{\n public class FileSystemCountriesOptions\n {\n public string File"
},
{
"path": "VirtoCommerce.Storefront/Domain/Countries/FileSystemCountriesService.cs",
"chars": 2703,
"preview": "using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.Exte"
},
{
"path": "VirtoCommerce.Storefront/Domain/CurrencyService.cs",
"chars": 1455,
"preview": "using System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.Extensions.Caching.Memory;\nusing VirtoCommerce.Storefro"
},
{
"path": "VirtoCommerce.Storefront/Domain/Customer/CutomerCacheRegion.cs",
"chars": 722,
"preview": "using System;\nusing Microsoft.Extensions.Primitives;\nusing VirtoCommerce.Storefront.Model.Common.Caching;\n\nnamespace Vir"
},
{
"path": "VirtoCommerce.Storefront/Domain/Customer/Handlers/SecurityEventsHandler.cs",
"chars": 845,
"preview": "using System.Threading.Tasks;\nusing VirtoCommerce.Storefront.Model.Common.Events;\nusing VirtoCommerce.Storefront.Model.C"
},
{
"path": "VirtoCommerce.Storefront/Domain/Customer/MemberConverter.cs",
"chars": 10784,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing VirtoCommerce.Storefront.Common;\nusing VirtoCom"
},
{
"path": "VirtoCommerce.Storefront/Domain/Customer/MemberService.cs",
"chars": 7367,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.Extensi"
},
{
"path": "VirtoCommerce.Storefront/Domain/IWorkContextBuilder.cs",
"chars": 253,
"preview": "using Microsoft.AspNetCore.Http;\nusing VirtoCommerce.Storefront.Model;\n\nnamespace VirtoCommerce.Storefront.Domain\n{\n "
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/AnonymousUserForStoreAuthorizationRequirement.cs",
"chars": 1180,
"preview": "using System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing VirtoCommerce.Storefront.Model;\n\nnamespace"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/CanEditOrganizationResourceAuthorizationHandler.cs",
"chars": 1456,
"preview": "using System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing VirtoCommerce.Storefront.Model;\nusing Virt"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/CanImpersonateAuthorizationHandler.cs",
"chars": 1408,
"preview": "using System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing VirtoCommerce.Storefront.AutoRestClients.S"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/CanReadContentItemAuthorizationHandler.cs",
"chars": 1356,
"preview": "using System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing VirtoCommerce.Storefront.Model;\nusing Virt"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/CustomCookieAuthenticationEvents.cs",
"chars": 1723,
"preview": "using System.Net;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authentication;\nusing Microsoft.AspNetCore.Au"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/CustomSignInManager.cs",
"chars": 1160,
"preview": "using System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authentication;\nusing Microsoft.AspNetCore.Http;\nusing Microsof"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/CustomUserManager.cs",
"chars": 4425,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing Micros"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/Notifications/ChangePhoneNumberSmsNotification.cs",
"chars": 793,
"preview": "using System.Collections.Generic;\nusing VirtoCommerce.Storefront.Model;\nusing VirtoCommerce.Storefront.Model.Common.Noti"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/Notifications/EmailConfirmationNotification.cs",
"chars": 768,
"preview": "using System.Collections.Generic;\nusing System.Linq;\nusing VirtoCommerce.Storefront.Model;\nusing VirtoCommerce.Storefron"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/Notifications/RegistrationEmailNotification.cs",
"chars": 1038,
"preview": "using System.Collections.Generic;\nusing System.Linq;\nusing VirtoCommerce.Storefront.Model;\nusing VirtoCommerce.Storefron"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/Notifications/RegistrationInvitationNotification.cs",
"chars": 796,
"preview": "using System.Collections.Generic;\nusing System.Linq;\nusing VirtoCommerce.Storefront.Model;\nusing VirtoCommerce.Storefron"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/Notifications/RemindUserNameNotification.cs",
"chars": 778,
"preview": "using System.Collections.Generic;\nusing System.Linq;\nusing VirtoCommerce.Storefront.Model;\nusing VirtoCommerce.Storefron"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/Notifications/ResetPasswordEmailNotification.cs",
"chars": 770,
"preview": "using System.Collections.Generic;\nusing System.Linq;\nusing VirtoCommerce.Storefront.Model;\nusing VirtoCommerce.Storefron"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/Notifications/ResetPasswordSmsNotification.cs",
"chars": 786,
"preview": "using System.Collections.Generic;\nusing VirtoCommerce.Storefront.Model;\nusing VirtoCommerce.Storefront.Model.Common.Noti"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/Notifications/TwoFactorEmailNotification.cs",
"chars": 783,
"preview": "using System.Collections.Generic;\nusing VirtoCommerce.Storefront.Model;\nusing VirtoCommerce.Storefront.Model.Common.Noti"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/Notifications/TwoFactorSmsNotification.cs",
"chars": 777,
"preview": "using System.Collections.Generic;\nusing VirtoCommerce.Storefront.Model;\nusing VirtoCommerce.Storefront.Model.Common.Noti"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/OnlyRegisteredUserAuthorizationHandler.cs",
"chars": 1301,
"preview": "using System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing VirtoCommerce.Storefront.Model;\n\nnamespace"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/PermissionAuthorizationHandler.cs",
"chars": 830,
"preview": "using System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing VirtoCommerce.Storefront.Model.Security;\n\n"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/PermissionAuthorizationPolicyProvider.cs",
"chars": 2861,
"preview": "using System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsof"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/PermissionAuthorizationRequirement.cs",
"chars": 237,
"preview": "using Microsoft.AspNetCore.Authorization;\n\nnamespace VirtoCommerce.Storefront.Domain.Security\n{\n public class Permiss"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/PollingApiUserChangeToken.cs",
"chars": 3371,
"preview": "using System;\nusing System.Linq;\nusing System.Threading;\nusing Microsoft.Extensions.Primitives;\nusing VirtoCommerce.Stor"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/SecurityCacheRegion.cs",
"chars": 715,
"preview": "using System;\nusing Microsoft.Extensions.Primitives;\nusing VirtoCommerce.Storefront.Model.Common.Caching;\n\nnamespace Vir"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/SecurityConverter.cs",
"chars": 6389,
"preview": "using System.Linq;\nusing Microsoft.AspNetCore.Identity;\nusing VirtoCommerce.Storefront.Model.Common;\nusing VirtoCommerce"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/SecurityWorkContextBuilderExtensions.cs",
"chars": 3010,
"preview": "using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Identity;\nusing Microsoft.Exte"
},
{
"path": "VirtoCommerce.Storefront/Domain/Security/UserStoreStub.cs",
"chars": 20111,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Claims;\nusing System.Threading;"
},
{
"path": "VirtoCommerce.Storefront/Domain/SeoInfoService.cs",
"chars": 2153,
"preview": "using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing VirtoCommerce.Storefront.AutoRestClients.CoreModule"
},
{
"path": "VirtoCommerce.Storefront/Domain/SpaRouteService.cs",
"chars": 3342,
"preview": "using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing System"
},
{
"path": "VirtoCommerce.Storefront/Domain/StaticContent/LinkListConverter.cs",
"chars": 1922,
"preview": "using System.Linq;\nusing VirtoCommerce.Storefront.Model;\nusing VirtoCommerce.Storefront.Model.Common;\nusing contentDto ="
},
{
"path": "VirtoCommerce.Storefront/Domain/StaticContent/LinkListServiceImpl.cs",
"chars": 2608,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.Extensi"
},
{
"path": "VirtoCommerce.Storefront/Domain/StaticContent/MarkdownContentLoader.cs",
"chars": 507,
"preview": "using Markdig;\n\nnamespace VirtoCommerce.Storefront.Domain\n{\n public class MarkdownContentLoader : StaticContentLoader"
},
{
"path": "VirtoCommerce.Storefront/Domain/StaticContent/PageBuilderContentLoader.cs",
"chars": 851,
"preview": "using System.Collections.Generic;\nusing System.Linq;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing VirtoComme"
},
{
"path": "VirtoCommerce.Storefront/Domain/StaticContent/StaticContentCacheRegion.cs",
"chars": 205,
"preview": "using VirtoCommerce.Storefront.Model.Common.Caching;\n\nnamespace VirtoCommerce.Storefront.Domain\n{\n public class Stati"
},
{
"path": "VirtoCommerce.Storefront/Domain/StaticContent/StaticContentItemFactory.cs",
"chars": 1544,
"preview": "using System.IO;\nusing System.Text.RegularExpressions;\nusing VirtoCommerce.Storefront.Model.Common;\nusing VirtoCommerce."
},
{
"path": "VirtoCommerce.Storefront/Domain/StaticContent/StaticContentLoader.cs",
"chars": 2503,
"preview": "using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing VirtoC"
},
{
"path": "VirtoCommerce.Storefront/Domain/StaticContent/StaticContentLoaderFactory.cs",
"chars": 877,
"preview": "using System.IO;\nusing Markdig;\nusing VirtoCommerce.Storefront.Model.Common;\nusing VirtoCommerce.Storefront.Model.Static"
},
{
"path": "VirtoCommerce.Storefront/Domain/StaticContent/StaticContentService.cs",
"chars": 7062,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Microsoft.Extensions.Caching.M"
},
{
"path": "VirtoCommerce.Storefront/Domain/StaticContent/StaticContentWorkContextBuilderExtensions.cs",
"chars": 6373,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.Extensi"
},
{
"path": "VirtoCommerce.Storefront/Domain/Stores/SelectCurrentCurrencyPolicy.cs",
"chars": 1334,
"preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Claims;\nusing Microsoft.AspNetCore.Http;\nusin"
},
{
"path": "VirtoCommerce.Storefront/Domain/Stores/SelectCurrentLanguagePolicy.cs",
"chars": 1204,
"preview": "using System;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing Microsoft.AspNetCore.Http;\nusing VirtoComme"
},
{
"path": "VirtoCommerce.Storefront/Domain/Stores/SelectCurrentStorePolicy.cs",
"chars": 1272,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.ApplicationInsights.AspNetCore.Extens"
},
{
"path": "VirtoCommerce.Storefront/Domain/Stores/StoreCacheRegion.cs",
"chars": 189,
"preview": "using VirtoCommerce.Storefront.Model.Common.Caching;\n\nnamespace VirtoCommerce.Storefront.Domain\n{\n public class Store"
},
{
"path": "VirtoCommerce.Storefront/Domain/Stores/StoreConverter.cs",
"chars": 5061,
"preview": "using System;\nusing System.Linq;\nusing VirtoCommerce.Storefront.Common;\nusing VirtoCommerce.Storefront.Model;\nusing Virt"
},
{
"path": "VirtoCommerce.Storefront/Domain/Stores/StoreService.cs",
"chars": 3409,
"preview": "using System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.Extensions.Caching.Memory;\nusing Microsoft.Extensions.O"
},
{
"path": "VirtoCommerce.Storefront/Domain/Stores/StoreWorkContextBuilderExtensions.cs",
"chars": 4457,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Encodings.Web;\nusing System.Threadi"
},
{
"path": "VirtoCommerce.Storefront/Domain/WorkContextAccessor.cs",
"chars": 734,
"preview": "using Microsoft.AspNetCore.Http;\nusing VirtoCommerce.Storefront.Model;\n\nnamespace VirtoCommerce.Storefront.Domain\n{\n "
},
{
"path": "VirtoCommerce.Storefront/Domain/WorkContextBuilder.cs",
"chars": 1638,
"preview": "using System.Linq;\nusing Microsoft.ApplicationInsights.AspNetCore.Extensions;\nusing Microsoft.AspNetCore.Http;\nusing Vir"
},
{
"path": "VirtoCommerce.Storefront/Extensions/ClaimsPrincipalExtensions.cs",
"chars": 545,
"preview": "using System.Security.Claims;\n\nnamespace VirtoCommerce.Storefront.Extensions\n{\n public static class ClaimsPrincipalEx"
},
{
"path": "VirtoCommerce.Storefront/Extensions/HostingEnviromentExtension.cs",
"chars": 609,
"preview": "using System.IO;\nusing Microsoft.AspNetCore.Hosting;\n\nnamespace VirtoCommerce.Storefront.Extensions\n{\n public static "
},
{
"path": "VirtoCommerce.Storefront/Extensions/ObjectExtensions.cs",
"chars": 538,
"preview": "using Newtonsoft.Json.Linq;\n\nnamespace VirtoCommerce.Storefront.Common\n{\n public static class ObjectExtensions\n {\n"
},
{
"path": "VirtoCommerce.Storefront/Extensions/PathStringExtensions.cs",
"chars": 4134,
"preview": "using System;\nusing System.Text.RegularExpressions;\nusing Microsoft.AspNetCore.Http;\nusing VirtoCommerce.Storefront.Mode"
},
{
"path": "VirtoCommerce.Storefront/Extensions/QueryCollectionExtensions.cs",
"chars": 671,
"preview": "using System;\nusing System.Collections.Specialized;\nusing Microsoft.AspNetCore.Http;\n\nnamespace VirtoCommerce.Storefront"
},
{
"path": "VirtoCommerce.Storefront/Extensions/SeoExtensions.cs",
"chars": 3010,
"preview": "using System.Collections.Generic;\nusing System.Linq;\nusing VirtoCommerce.Storefront.Domain;\nusing VirtoCommerce.Storefro"
},
{
"path": "VirtoCommerce.Storefront/Filters/AngularAntiforgeryCookieResultFilterAttribute.cs",
"chars": 2381,
"preview": "using Microsoft.AspNetCore.Antiforgery;\nusing Microsoft.AspNetCore.Diagnostics;\nusing Microsoft.AspNetCore.Http;\nusing M"
},
{
"path": "VirtoCommerce.Storefront/Filters/AnonymousUserForStoreAuthorizationFilter.cs",
"chars": 2921,
"preview": "using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft"
},
{
"path": "VirtoCommerce.Storefront/IISUrlRewrite.xml",
"chars": 152,
"preview": "<rewrite>\n <rewriteMaps>\n <!-- Write maps here -->\n </rewriteMaps>\n <rules>\n <!-- Write rules h"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/ApiAuthMode.cs",
"chars": 372,
"preview": "namespace VirtoCommerce.Storefront.Infrastructure\n{\n public enum ApiAuthMode\n {\n /// <summary>\n /// "
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/ApiChangesWatcher.cs",
"chars": 707,
"preview": "using Microsoft.Extensions.Options;\nusing Microsoft.Extensions.Primitives;\nusing VirtoCommerce.Storefront.AutoRestClient"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/ApplicationInsights/ServiceCollectionExtension.cs",
"chars": 863,
"preview": "using Microsoft.ApplicationInsights.AspNetCore;\nusing Microsoft.ApplicationInsights.Extensibility;\nusing Microsoft.Appli"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/ApplicationInsights/SnapshotCollectorTelemetryProcessorFactory.cs",
"chars": 1129,
"preview": "using System;\nusing Microsoft.ApplicationInsights.AspNetCore;\nusing Microsoft.ApplicationInsights.Extensibility;\nusing M"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/ApplicationInsights/UserTelemetryInitializer.cs",
"chars": 1237,
"preview": "using Microsoft.ApplicationInsights.AspNetCore.TelemetryInitializers;\nusing Microsoft.ApplicationInsights.Channel;\nusing"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Autorest/ApiKeySecretAuthHandler.cs",
"chars": 1625,
"preview": "using System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Security.Cryptography;\nusing System.Threading.Tasks;\n"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Autorest/AuthenticationHandlerFactory.cs",
"chars": 1507,
"preview": "using System;\nusing System.Net.Http;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Options;"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Autorest/BaseAuthHandler.cs",
"chars": 3767,
"preview": "using System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Http;\nusing Virt"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Autorest/ClientCredentialsAuthHandler.cs",
"chars": 3816,
"preview": "using System;\nusing System.Net;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Threading;\nusing Syst"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Autorest/EmptyServiceClientCredentials.cs",
"chars": 239,
"preview": "using Microsoft.Rest;\n\nnamespace VirtoCommerce.Storefront.Infrastructure.Autorest\n{\n public class EmptyServiceClientC"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Autorest/UserPasswordAuthHandler.cs",
"chars": 3948,
"preview": "using System;\nusing System.Net;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Threading;\nusing Syst"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/BlobChangeToken.cs",
"chars": 5729,
"preview": "using System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Thr"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/BlobChangesWatcher.cs",
"chars": 1235,
"preview": "using System.Threading;\nusing Microsoft.Extensions.Options;\nusing Microsoft.Extensions.Primitives;\nusing Microsoft.Windo"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Exceptions/NoStoresException.cs",
"chars": 531,
"preview": "using System;\nusing System.Runtime.Serialization;\nusing VirtoCommerce.Storefront.Model.Common.Exceptions;\n\nnamespace Vir"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Exceptions/NoThemeException.cs",
"chars": 516,
"preview": "using System;\nusing System.Runtime.Serialization;\nusing VirtoCommerce.Storefront.Model.Common.Exceptions;\n\nnamespace Vir"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/HealthCheck/PlatformConnectionHealthChecker.cs",
"chars": 967,
"preview": "using System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.Extensions.Diagnostics.HealthChecks;\nusing VirtoCo"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/HmacUtility.cs",
"chars": 5211,
"preview": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Security.Cryptography;\nusing System.Text;\n\nnam"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/IApiChangesWatcher.cs",
"chars": 188,
"preview": "using Microsoft.Extensions.Primitives;\n\nnamespace VirtoCommerce.Storefront.Infrastructure\n{\n public interface IApiCha"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/IBlobChangesWatcher.cs",
"chars": 204,
"preview": "using Microsoft.Extensions.Primitives;\n\nnamespace VirtoCommerce.Storefront.Infrastructure\n{\n public interface IBlobCh"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/PlatformEndpointOptions.cs",
"chars": 919,
"preview": "using System;\n\nnamespace VirtoCommerce.Storefront.Infrastructure\n{\n public class PlatformEndpointOptions\n {\n "
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/PollingApiChangeToken.cs",
"chars": 3203,
"preview": "using System;\nusing System.Threading;\nusing Microsoft.Extensions.Primitives;\nusing VirtoCommerce.Storefront.AutoRestClie"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/RequireHttpsOptions.cs",
"chars": 323,
"preview": "namespace VirtoCommerce.Storefront.Infrastructure\n{\n public class RequireHttpsOptions\n {\n public bool Enabl"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/StorefrontOptions.cs",
"chars": 1330,
"preview": "using System;\nusing System.Collections.Generic;\nusing VirtoCommerce.LiquidThemeEngine;\nusing VirtoCommerce.Storefront.Mo"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/StorefrontUrlBuilder.cs",
"chars": 6141,
"preview": "using System;\nusing System.Linq;\nusing System.Web;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Http;\n"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Swagger/ApiExplorerApiControllersConvention.cs",
"chars": 569,
"preview": "using System;\nusing Microsoft.AspNetCore.Mvc.ApplicationModels;\n\nnamespace VirtoCommerce.Storefront.Infrastructure.Swagg"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Swagger/ArrayInQueryParametersFilter.cs",
"chars": 854,
"preview": "using System.Linq;\nusing Microsoft.OpenApi.Models;\nusing Swashbuckle.AspNetCore.SwaggerGen;\n\nnamespace VirtoCommerce.Sto"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Swagger/AuthResponsesOperationFilter.cs",
"chars": 729,
"preview": "using System.Linq;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.OpenApi.Models;\nusing Swashbuckle.AspNetCor"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Swagger/ConsumeFromBodyFilter.cs",
"chars": 770,
"preview": "using Microsoft.OpenApi.Models;\nusing Swashbuckle.AspNetCore.SwaggerGen;\n\nnamespace VirtoCommerce.Storefront.Infrastruct"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Swagger/EnumSchemaFilter.cs",
"chars": 870,
"preview": "using System;\nusing Microsoft.OpenApi.Any;\nusing Microsoft.OpenApi.Models;\nusing Swashbuckle.AspNetCore.SwaggerGen;\n\nnam"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Swagger/FileResponseTypeFilter.cs",
"chars": 2014,
"preview": "using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing Microsoft.OpenApi.Models;\n"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Swagger/FileUploadOperationFilter.cs",
"chars": 2060,
"preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing Microsoft.OpenApi.Models;\nusing Swas"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Swagger/NewtonsoftJsonIgnoreFilter.cs",
"chars": 994,
"preview": "using System.Linq;\nusing Microsoft.OpenApi.Models;\nusing Swashbuckle.AspNetCore.SwaggerGen;\n\nnamespace VirtoCommerce.Sto"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Swagger/OptionalParametersFilter.cs",
"chars": 1148,
"preview": "using System.Linq;\nusing Microsoft.AspNetCore.Mvc.Controllers;\nusing Microsoft.OpenApi.Models;\nusing Swashbuckle.AspNetC"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Swagger/SwaggerFileResponseAttribute.cs",
"chars": 390,
"preview": "using System;\n\nnamespace VirtoCommerce.Storefront.Infrastructure.Swagger\n{\n /// <summary>\n /// Mark with this attr"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Swagger/SwaggerOptionalAttribute.cs",
"chars": 211,
"preview": "using System;\n\nnamespace VirtoCommerce.Storefront.Infrastructure.Swagger\n{\n [AttributeUsage(AttributeTargets.Paramete"
},
{
"path": "VirtoCommerce.Storefront/Infrastructure/Swagger/UploadFileAttribute.cs",
"chars": 1059,
"preview": "using System;\n\nnamespace VirtoCommerce.Storefront.Infrastructure.Swagger\n{\n /// <summary> \n /// Use this attribute"
},
{
"path": "VirtoCommerce.Storefront/Middleware/NoLiquidThemeMiddleware.cs",
"chars": 1372,
"preview": "using System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Http;\nusing VirtoCommerce.LiquidThemeEngine;"
},
{
"path": "VirtoCommerce.Storefront/Middleware/StoreMaintenanceMiddleware.cs",
"chars": 976,
"preview": "using System.Threading.Tasks;\nusing Microsoft.AspNetCore.Http;\nusing VirtoCommerce.Storefront.Model;\nusing VirtoCommerce"
},
{
"path": "VirtoCommerce.Storefront/Middleware/WorkContextBuildMiddleware.cs",
"chars": 3444,
"preview": "using System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Diagnostics;\nusing Microsoft."
},
{
"path": "VirtoCommerce.Storefront/Models/NoThemeViewModel.cs",
"chars": 300,
"preview": "using System.Collections.Generic;\n\nnamespace VirtoCommerce.Storefront.Models\n{\n public class NoThemeViewModel\n {\n "
},
{
"path": "VirtoCommerce.Storefront/Models/ResetCacheModel.cs",
"chars": 656,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnam"
}
]
// ... and 251 more files (download for full content)
About this extraction
This page contains the full source code of the VirtoCommerce/vc-storefront GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 451 files (4.0 MB), approximately 1.1M tokens, and a symbol index with 3318 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.