@snabcentr/client-core 4.5.0 → 4.7.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, take, defaultIfEmpty, concatMap, finalize, takeUntil, interval, share, scan } 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, take, defaultIfEmpty, concatMap, finalize, takeUntil, timeout, 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,20 +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
|
-
* Токен для получения данных об ответе на запрос (Express `Response`), доступен только на сервере при SSR.
|
|
271
|
-
*
|
|
272
|
-
* Переходное состояние: `server.ts` приложений сейчас работает на `CommonEngine` из `@angular/ssr/node`,
|
|
273
|
-
* который провайдит этот кастомный токен per-request. `CommonEngine` помечен deprecated; целевой стек —
|
|
274
|
-
* `AngularNodeAppEngine` + `createNodeRequestHandler`. При миграции `server.ts` на этот стек откажитесь от
|
|
275
|
-
* данного токена в пользу нативного `RESPONSE_INIT` (`InjectionToken<ResponseInit | null>` из `@angular/core`):
|
|
276
|
-
* движок провайдит его автоматически и применяет `status`/`headers` к ответу после рендера. До миграции
|
|
277
|
-
* `server.ts` токен остаётся рабочим механизмом SSR-редиректов и менять его не требуется.
|
|
278
|
-
*
|
|
279
|
-
* @deprecated Переходный токен SSR-ответа: при миграции `server.ts` на `AngularNodeAppEngine` будет заменён
|
|
280
|
-
* нативным `RESPONSE_INIT`. Метка-напоминание; до миграции токен остаётся рабочим, удалять/менять не требуется.
|
|
281
|
-
*/
|
|
282
|
-
const RESPONSE = new InjectionToken('RESPONSE');
|
|
283
269
|
|
|
284
270
|
/**
|
|
285
271
|
* Токен внедрения заголовков ключей доступа к API.
|
|
@@ -3585,8 +3571,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
3585
3571
|
* Сервис редиректа на родительскую категорию при недоступности (HTTP 404) товара или категории.
|
|
3586
3572
|
*
|
|
3587
3573
|
* Запрашивает у бэкенда родительскую категорию недоступной сущности и выполняет редирект:
|
|
3588
|
-
* - на сервере (SSR) при доступном
|
|
3589
|
-
* - на сервере без
|
|
3574
|
+
* - на сервере (SSR, RenderMode.Server) при доступном `RESPONSE_INIT` — выставляет HTTP-статус 302 и заголовок `Location` для корректного редиректа поисковых ботов;
|
|
3575
|
+
* - на сервере без `RESPONSE_INIT` (Client/Prerender) — завершает поток ошибкой 404, чтобы отобразилась страница ошибки;
|
|
3590
3576
|
* - в браузере — выполняет полную навигацию на родительскую категорию.
|
|
3591
3577
|
*
|
|
3592
3578
|
* Если родительская категория не найдена, поток также завершается ошибкой {@link HttpErrorResponse},
|
|
@@ -3611,15 +3597,12 @@ class ScCatalogRedirectService {
|
|
|
3611
3597
|
*/
|
|
3612
3598
|
this.isServer = inject(IS_SERVER);
|
|
3613
3599
|
/**
|
|
3614
|
-
*
|
|
3600
|
+
* Инициализатор HTTP-ответа SSR (`status`/`headers`), доступен только при рендере на сервере (RenderMode.Server).
|
|
3615
3601
|
*
|
|
3616
|
-
*
|
|
3617
|
-
*
|
|
3618
|
-
* ничего менять не нужно. Если `server.ts` мигрируют на `AngularNodeAppEngine` + `createNodeRequestHandler`,
|
|
3619
|
-
* замените {@link RESPONSE} на нативный `RESPONSE_INIT` (`InjectionToken<ResponseInit | null>` из `@angular/core`);
|
|
3620
|
-
* см. серверную ветку в {@link redirectToParentCategory$}.
|
|
3602
|
+
* Провайдится движком `@angular/ssr` per-request. Мутации `status`/`headers` до завершения рендера
|
|
3603
|
+
* применяются движком при конструировании финального `Response`. В браузере, при Client/Prerender — `null`.
|
|
3621
3604
|
*/
|
|
3622
|
-
this.
|
|
3605
|
+
this.responseInit = inject(RESPONSE_INIT, { optional: true });
|
|
3623
3606
|
/**
|
|
3624
3607
|
* Документ текущей страницы.
|
|
3625
3608
|
*/
|
|
@@ -3660,22 +3643,17 @@ class ScCatalogRedirectService {
|
|
|
3660
3643
|
const urlTree = this.router.createUrlTree(['/catalog', target]);
|
|
3661
3644
|
const targetUrl = this.router.serializeUrl(urlTree);
|
|
3662
3645
|
if (this.isServer) {
|
|
3663
|
-
// SSR
|
|
3664
|
-
//
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
|
|
3668
|
-
|
|
3669
|
-
this.
|
|
3670
|
-
this.response.status(302);
|
|
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;
|
|
3671
3653
|
return EMPTY;
|
|
3672
3654
|
}
|
|
3673
|
-
// SSR
|
|
3674
|
-
//
|
|
3675
|
-
//
|
|
3676
|
-
// Angular 21 (миграция SSR): этот фолбэк нужен, пока ng serve не исполняет server.ts (он на CommonEngine).
|
|
3677
|
-
// После миграции server.ts на createNodeRequestHandler dev-сервер начнёт исполнять server.ts, и RESPONSE/RESPONSE_INIT
|
|
3678
|
-
// станет доступен в ng serve — тогда эту ветку с throwError(404) можно удалить.
|
|
3655
|
+
// SSR в режиме Client/Prerender (RESPONSE_INIT отсутствует): серверный редирект невозможен —
|
|
3656
|
+
// завершаем потоком ошибки 404, чтобы отрисовалась страница ошибки, а не висел лоадер.
|
|
3679
3657
|
return throwError(() => new HttpErrorResponse({ status: 404 }));
|
|
3680
3658
|
}
|
|
3681
3659
|
// Браузер: поток данных категории (SC_CATEGORY_INFO) завершается ошибкой при 404 и не возобновляется
|
|
@@ -5669,6 +5647,15 @@ const SC_GUEST_PARAMETER_NAME_TOKEN = new InjectionToken('SC_GUEST_PARAMETER_NAM
|
|
|
5669
5647
|
factory: () => '',
|
|
5670
5648
|
});
|
|
5671
5649
|
|
|
5650
|
+
/**
|
|
5651
|
+
* Токен таймаута (мс) HTTP-запросов при серверном рендере (SSR).
|
|
5652
|
+
*
|
|
5653
|
+
* Ограничивает время ожидания ответа бэкенда на сервере, чтобы недоступный или медленный бэкенд
|
|
5654
|
+
* не подвешивал стабилизацию приложения (`ApplicationRef.whenStable`) при серверном рендере и при
|
|
5655
|
+
* извлечении маршрутов во время сборки. Значение задаётся приложением из настроек окружения.
|
|
5656
|
+
*/
|
|
5657
|
+
const SC_SSR_HTTP_TIMEOUT = new InjectionToken('SC_SSR_HTTP_TIMEOUT');
|
|
5658
|
+
|
|
5672
5659
|
/**
|
|
5673
5660
|
* Перехватчик запросов для реализации аутентификации.
|
|
5674
5661
|
*
|
|
@@ -5959,6 +5946,25 @@ function ScDateFormatInterceptor(request, next) {
|
|
|
5959
5946
|
}));
|
|
5960
5947
|
}
|
|
5961
5948
|
|
|
5949
|
+
/**
|
|
5950
|
+
* Перехватчик, ограничивающий время HTTP-запросов при серверном рендере (SSR).
|
|
5951
|
+
*
|
|
5952
|
+
* В браузере не вмешивается. На сервере (в том числе при извлечении маршрутов во время сборки)
|
|
5953
|
+
* обрывает запрос по таймауту {@link SC_SSR_HTTP_TIMEOUT}, чтобы недоступный или медленный бэкенд
|
|
5954
|
+
* не подвешивал стабилизацию приложения (`ApplicationRef.whenStable`). Если токен не задан или
|
|
5955
|
+
* таймаут не положителен, ограничение не применяется.
|
|
5956
|
+
*
|
|
5957
|
+
* @param request HTTP запрос.
|
|
5958
|
+
* @param next Следующий обработчик в цепочке.
|
|
5959
|
+
*/
|
|
5960
|
+
function ScSsrTimeoutInterceptor(request, next) {
|
|
5961
|
+
if (!inject(IS_SERVER)) {
|
|
5962
|
+
return next(request);
|
|
5963
|
+
}
|
|
5964
|
+
const timeoutMs = inject(SC_SSR_HTTP_TIMEOUT, { optional: true }) ?? 0;
|
|
5965
|
+
return timeoutMs > 0 ? next(request).pipe(timeout({ each: timeoutMs })) : next(request);
|
|
5966
|
+
}
|
|
5967
|
+
|
|
5962
5968
|
/**
|
|
5963
5969
|
* Перечисление организационно-правовых форм.
|
|
5964
5970
|
*/
|
|
@@ -8519,5 +8525,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
8519
8525
|
* Generated bundle index. Do not edit.
|
|
8520
8526
|
*/
|
|
8521
8527
|
|
|
8522
|
-
export { CATEGORY_PROVIDERS, EMPTY_CART, IS_BROWSER, IS_RUNNING_ON_TERMINAL, IS_SERVER,
|
|
8528
|
+
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_SSR_HTTP_TIMEOUT, 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, ScSsrTimeoutInterceptor, 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 };
|
|
8523
8529
|
//# sourceMappingURL=snabcentr-client-core.mjs.map
|