@snabcentr/client-core 4.4.0 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as i1 from 'rxjs';
|
|
2
|
-
import { of, startWith as startWith$1, Subject, ReplaySubject, partition, combineLatest, map as map$1, debounceTime, switchMap, tap, filter, shareReplay, distinctUntilChanged, BehaviorSubject, materialize, dematerialize, merge, distinctUntilKeyChanged, skip, first, catchError as catchError$1, throwError, expand, takeWhile, toArray, EMPTY,
|
|
2
|
+
import { of, startWith as startWith$1, Subject, ReplaySubject, partition, combineLatest, map as map$1, debounceTime, switchMap, tap, filter, shareReplay, distinctUntilChanged, BehaviorSubject, materialize, dematerialize, merge, distinctUntilKeyChanged, skip, first, catchError as catchError$1, throwError, expand, takeWhile, toArray, EMPTY, take, defaultIfEmpty, concatMap, finalize, takeUntil, interval, share, scan } from 'rxjs';
|
|
3
3
|
import { map, startWith, catchError } from 'rxjs/operators';
|
|
4
4
|
import { parseISO, parse, isValid, format } from 'date-fns';
|
|
5
5
|
import { isString, isNil, isObject, isDate, isMatch, isArray, get, isNumber, isBoolean } from 'lodash-es';
|
|
6
6
|
import * as i0 from '@angular/core';
|
|
7
|
-
import { InjectionToken, inject, PLATFORM_ID, Inject, Optional, Injectable, EventEmitter, DestroyRef, LOCALE_ID, Pipe, RendererFactory2 } from '@angular/core';
|
|
7
|
+
import { InjectionToken, inject, PLATFORM_ID, Inject, Optional, Injectable, EventEmitter, DestroyRef, LOCALE_ID, Pipe, RESPONSE_INIT, RendererFactory2 } from '@angular/core';
|
|
8
8
|
import { WA_LOCAL_STORAGE, WA_USER_AGENT, WA_WINDOW } from '@ng-web-apis/common';
|
|
9
9
|
import { filterByKey, toValue, WA_STORAGE_EVENT, WaStorageService } from '@ng-web-apis/storage';
|
|
10
10
|
import { isPlatformBrowser, isPlatformServer, DOCUMENT, formatDate } from '@angular/common';
|
|
@@ -266,10 +266,6 @@ const IS_BROWSER = new InjectionToken('IS_BROWSER', {
|
|
|
266
266
|
const IS_SERVER = new InjectionToken('IS_SERVER', {
|
|
267
267
|
factory: () => isPlatformServer(inject(PLATFORM_ID)),
|
|
268
268
|
});
|
|
269
|
-
/**
|
|
270
|
-
* Токен для получения данных об ответе на запрос.
|
|
271
|
-
*/
|
|
272
|
-
const RESPONSE = new InjectionToken('RESPONSE');
|
|
273
269
|
|
|
274
270
|
/**
|
|
275
271
|
* Токен внедрения заголовков ключей доступа к API.
|
|
@@ -3575,10 +3571,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
3575
3571
|
* Сервис редиректа на родительскую категорию при недоступности (HTTP 404) товара или категории.
|
|
3576
3572
|
*
|
|
3577
3573
|
* Запрашивает у бэкенда родительскую категорию недоступной сущности и выполняет редирект:
|
|
3578
|
-
* - на сервере (SSR) — выставляет HTTP-статус 302 и заголовок `Location` для корректного редиректа поисковых ботов;
|
|
3579
|
-
* -
|
|
3574
|
+
* - на сервере (SSR, RenderMode.Server) при доступном `RESPONSE_INIT` — выставляет HTTP-статус 302 и заголовок `Location` для корректного редиректа поисковых ботов;
|
|
3575
|
+
* - на сервере без `RESPONSE_INIT` (Client/Prerender) — завершает поток ошибкой 404, чтобы отобразилась страница ошибки;
|
|
3576
|
+
* - в браузере — выполняет полную навигацию на родительскую категорию.
|
|
3580
3577
|
*
|
|
3581
|
-
* Если родительская категория не найдена, поток завершается ошибкой {@link HttpErrorResponse},
|
|
3578
|
+
* Если родительская категория не найдена, поток также завершается ошибкой {@link HttpErrorResponse},
|
|
3582
3579
|
* чтобы вызывающий код отобразил страницу ошибки.
|
|
3583
3580
|
*/
|
|
3584
3581
|
class ScCatalogRedirectService {
|
|
@@ -3600,9 +3597,16 @@ class ScCatalogRedirectService {
|
|
|
3600
3597
|
*/
|
|
3601
3598
|
this.isServer = inject(IS_SERVER);
|
|
3602
3599
|
/**
|
|
3603
|
-
*
|
|
3600
|
+
* Инициализатор HTTP-ответа SSR (`status`/`headers`), доступен только при рендере на сервере (RenderMode.Server).
|
|
3601
|
+
*
|
|
3602
|
+
* Провайдится движком `@angular/ssr` per-request. Мутации `status`/`headers` до завершения рендера
|
|
3603
|
+
* применяются движком при конструировании финального `Response`. В браузере, при Client/Prerender — `null`.
|
|
3604
|
+
*/
|
|
3605
|
+
this.responseInit = inject(RESPONSE_INIT, { optional: true });
|
|
3606
|
+
/**
|
|
3607
|
+
* Документ текущей страницы.
|
|
3604
3608
|
*/
|
|
3605
|
-
this.
|
|
3609
|
+
this.document = inject(DOCUMENT);
|
|
3606
3610
|
}
|
|
3607
3611
|
/**
|
|
3608
3612
|
* Выполняет редирект на родительскую категорию недоступной категории.
|
|
@@ -3637,13 +3641,30 @@ class ScCatalogRedirectService {
|
|
|
3637
3641
|
return throwError(() => new HttpErrorResponse({ status: 404 }));
|
|
3638
3642
|
}
|
|
3639
3643
|
const urlTree = this.router.createUrlTree(['/catalog', target]);
|
|
3644
|
+
const targetUrl = this.router.serializeUrl(urlTree);
|
|
3640
3645
|
if (this.isServer) {
|
|
3641
|
-
// SSR: выставляем 302 и заголовок Location для корректного редиректа
|
|
3642
|
-
|
|
3643
|
-
this.
|
|
3644
|
-
|
|
3646
|
+
// SSR в режиме сервера (RenderMode.Server): выставляем 302 и заголовок Location для корректного редиректа
|
|
3647
|
+
// поисковых ботов. responseInit.headers — инстанс Headers, заголовок ставим через .set().
|
|
3648
|
+
if (this.responseInit) {
|
|
3649
|
+
this.responseInit.status = 302;
|
|
3650
|
+
const headers = this.responseInit.headers instanceof Headers ? this.responseInit.headers : new Headers(this.responseInit.headers);
|
|
3651
|
+
headers.set('Location', targetUrl);
|
|
3652
|
+
this.responseInit.headers = headers;
|
|
3653
|
+
return EMPTY;
|
|
3654
|
+
}
|
|
3655
|
+
// SSR в режиме Client/Prerender (RESPONSE_INIT отсутствует): серверный редирект невозможен —
|
|
3656
|
+
// завершаем потоком ошибки 404, чтобы отрисовалась страница ошибки, а не висел лоадер.
|
|
3657
|
+
return throwError(() => new HttpErrorResponse({ status: 404 }));
|
|
3645
3658
|
}
|
|
3646
|
-
|
|
3659
|
+
// Браузер: поток данных категории (SC_CATEGORY_INFO) завершается ошибкой при 404 и не возобновляется
|
|
3660
|
+
// при навигации в рамках того же маршрута, поэтому редирект выполняется полной перезагрузкой страницы.
|
|
3661
|
+
// location.replace не добавляет запись в историю, чтобы кнопка «Назад» не возвращала на недоступную страницу.
|
|
3662
|
+
//
|
|
3663
|
+
// Angular 21 (миграция SSR): эту строку апгрейд НЕ снимает — причина в рантайме приложения (мёртвый поток
|
|
3664
|
+
// SC_CATEGORY_INFO при SPA-навигации), а не в SSR. Вернуть SPA-навигацию (router.navigateByUrl) можно только
|
|
3665
|
+
// сделав SC_CATEGORY_INFO устойчивым к 404 (ловить ошибку внутри switchMap) либо унеся редирект в guard + RedirectCommand.
|
|
3666
|
+
this.document.location.replace(targetUrl);
|
|
3667
|
+
return EMPTY;
|
|
3647
3668
|
}));
|
|
3648
3669
|
}
|
|
3649
3670
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScCatalogRedirectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
@@ -8476,5 +8497,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
8476
8497
|
* Generated bundle index. Do not edit.
|
|
8477
8498
|
*/
|
|
8478
8499
|
|
|
8479
|
-
export { CATEGORY_PROVIDERS, EMPTY_CART, IS_BROWSER, IS_RUNNING_ON_TERMINAL, IS_SERVER,
|
|
8500
|
+
export { CATEGORY_PROVIDERS, EMPTY_CART, IS_BROWSER, IS_RUNNING_ON_TERMINAL, IS_SERVER, SC_ACCESS_AUTH_TOKEN_STORAGE_KEY, SC_API_KEYS, SC_AUTH_ADD_HEADER_REQUIRED, SC_AUTH_AS_CLIENT_DEFAULT_OPTIONS, SC_AUTH_AS_CLIENT_OPTIONS, SC_CACHE_LIFETIME, SC_CACHE_SETTINGS, SC_CATALOG_ITEM_PAGE_META, SC_CATALOG_ROOT_PAGE_META, SC_CATEGORY_INFO, SC_COMPANY_INFO, SC_COMPANY_NAME, SC_CONFIGURATOR_COMPONENTS, SC_CONFIGURATOR_SETTINGS, SC_COUNT_FIRST_DISCOUNTED_PRODUCTS, SC_COUNT_LAST_NEWS, SC_DATE_FORMAT, SC_DEFAULT_PAGE_META, SC_FEEDBACK_API, SC_GUEST_ENDPOINTS_TOKEN, SC_GUEST_PARAMETER_NAME_TOKEN, SC_GUEST_TOKEN_STORAGE_KEY, SC_ID_OR_SLUG_IN_ROUTE, SC_IS_HEADER_REQUIRED, SC_IS_HIDDEN_ERROR_ALERT, SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT, SC_IS_LOGOUT_REQUEST, SC_IS_REFRESH_REQUIRED, SC_LINEAR_VALUES, SC_LINEAR_VALUES_TOKEN, SC_MAX_LENGTH_SEARCH_TERM, SC_MIN_LENGTH_SEARCH_TERM, SC_NEXT_PAGE_PAGINATION_CLICK, SC_ORDER_LOADER, SC_ORDER_LOADING, SC_PATH_IMAGE_NOT_FOUND, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS, SC_PRODUCT_PAGINATION_OPTIONS, SC_REFRESH_AUTH_TOKEN_STORAGE_KEY, SC_RELEASE, SC_UPDATE_INTERVAL, SC_URLS, SC_USER_INFO, SC_VACANCIES_DATA_SOURCE, SC_VIRTUAL_CATEGORY_INFO, SC_VIRTUAL_CATEGORY_PROVIDERS, SEARCH_TERM, SEARCH_TERM_PROVIDERS, ScAuthAsClientGuard, ScAuthInterceptor, ScAuthService, ScBanner, ScBannerService, ScCacheInterceptor, ScCacheSettings, ScCachedData, ScCachedItem, ScCart, ScCartService, ScCatalogFilterService, ScCatalogFormat, ScCatalogItem, ScCatalogRedirectService, ScCatalogService, ScCatalogableItem, ScCategory, ScClientType, ScCodedIdentity, ScConfiguratorService, ScContactsService, ScContragentService, ScConvertInterceptor, ScConvertersService, ScDateFormatInterceptor, ScDeletableNamedIdentity, ScDeliveryAddressService, ScDeliveryCost, ScDeliveryType, ScDocumentInfoNode, ScDocumentInfoTypesEnum, ScErrorRequestState, ScErrorsInterceptor, ScFavoriteService, ScFeedbackForms, ScFeedbackService, ScFilesService, ScFrequentlyAskedQuestionsService, ScGuestInterceptor, ScHiddenCatalogableItem, ScIBreadcrumbItem, ScISuggestionType, ScIconTypesEnum, ScIdOrSlugGuard, ScIdOrSlugPipe, ScIdentity, ScImage, ScImageHelper, ScLoadingRequestState, ScLocationsService, ScMediaImageTransformerPipe, ScMimeTypes, ScNamedIdentity, ScNews, ScNewsService, ScNotificationActionTypes, ScNotificationLevelNames, ScNotificationsService, ScOpfList, ScOptionsInterceptor, ScOrder, ScOrderBase, ScOrderDraft, ScOrderDraftShort, ScOrderDraftType, ScOrderDraftsService, ScOrderItem, ScOrderShort, ScOrderStateStatus, ScOrdersService, ScPaginationService, ScPaymentStatus, ScPaymentType, ScPhoneService, ScPrimaryCatalogableItem, ScProduct, ScProductTileType, ScQuestionnaireService, ScQuestionnaireStatusEnum, ScReclamationService, ScReclamationStatus, ScRecommendationService, ScReference, ScReferenceName, ScReferencesService, ScRequestStateStatusEnum, ScRequisitesService, ScRouteKeys, ScSearchService, ScSeoService, ScSocialType, ScSuccessRequestState, ScSuggestionService, ScSum, ScTokenService, ScUIService, ScUTMService, ScUnitsHelper, ScUpdatableNamedIdentity, ScUploadedFile, ScUser, ScUserMetadata, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService, ScUserType, ScVCardService, ScVacanciesList, ScVacanciesService, ScVacancy, ScVerificationService, ScVirtualCategory, ScWarehouseService, SchemaOrgFactory, TERMINAL_PROVIDERS, USER_AGENT_TERMINAL, filterChangedByKey, isExpiredToken, loadingPlaceholder, mapRequestStateToDataOrNull, mapToRequestState, runningOnTerminalFactory, scGetCurrentRoute, scOrderIsLoaded, searchTermFactory };
|
|
8480
8501
|
//# sourceMappingURL=snabcentr-client-core.mjs.map
|