@snabcentr/client-core 3.20.0 → 3.21.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.
- package/catalog/services/sc-catalog-redirect.service.d.ts +1 -1
- package/esm2022/auth/services/sc-auth.service.mjs +3 -2
- package/esm2022/catalog/services/sc-catalog-redirect.service.mjs +3 -3
- package/esm2022/public-api.mjs +2 -1
- package/esm2022/ssr-cache/classes/index.mjs +2 -0
- package/esm2022/ssr-cache/classes/sc-ssr-response-cache.mjs +100 -0
- package/esm2022/ssr-cache/index.mjs +6 -0
- package/esm2022/ssr-cache/interfaces/index.mjs +3 -0
- package/esm2022/ssr-cache/interfaces/sc-i-ssr-response-cache-settings.mjs +2 -0
- package/esm2022/ssr-cache/interfaces/sc-i-ssr-response-cache-stats.mjs +2 -0
- package/esm2022/ssr-cache/internal/is-ssr-response-cacheable.mjs +25 -0
- package/esm2022/ssr-cache/internal/sc-i-ssr-cached-response.mjs +2 -0
- package/esm2022/ssr-cache/sc-ssr-response-cache.backend.mjs +71 -0
- package/esm2022/ssr-cache/sc-ssr-response-cache.providers.mjs +12 -0
- package/esm2022/ssr-cache/tokens/index.mjs +3 -0
- package/esm2022/ssr-cache/tokens/sc-ssr-response-cache-settings.mjs +8 -0
- package/esm2022/ssr-cache/tokens/sc-ssr-response-cache.mjs +13 -0
- package/fesm2022/snabcentr-client-core.mjs +222 -7
- package/fesm2022/snabcentr-client-core.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/release_notes.tmp +3 -3
- package/ssr-cache/classes/index.d.ts +1 -0
- package/ssr-cache/classes/sc-ssr-response-cache.d.ts +59 -0
- package/ssr-cache/index.d.ts +5 -0
- package/ssr-cache/interfaces/index.d.ts +2 -0
- package/ssr-cache/interfaces/sc-i-ssr-response-cache-settings.d.ts +17 -0
- package/ssr-cache/interfaces/sc-i-ssr-response-cache-stats.d.ts +17 -0
- package/ssr-cache/internal/is-ssr-response-cacheable.d.ts +14 -0
- package/ssr-cache/internal/sc-i-ssr-cached-response.d.ts +16 -0
- package/ssr-cache/sc-ssr-response-cache.backend.d.ts +42 -0
- package/ssr-cache/sc-ssr-response-cache.providers.d.ts +6 -0
- package/ssr-cache/tokens/index.d.ts +2 -0
- package/ssr-cache/tokens/sc-ssr-response-cache-settings.d.ts +6 -0
- package/ssr-cache/tokens/sc-ssr-response-cache.d.ts +6 -0
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
package/release_notes.tmp
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
## 3.
|
|
1
|
+
## 3.21.0 (2026-09-16)
|
|
2
2
|
|
|
3
|
-
###
|
|
3
|
+
### changed (1 change)
|
|
4
4
|
|
|
5
|
-
- [#
|
|
5
|
+
- [#13636: Доработаны механизмы кэширования ответов при SSR](web_soft/libs/angular/snabcentr-client-core-lib@0ccbbc51fd20fe700e5ab833a1135c4a8eb254a4) ([merge request](web_soft/libs/angular/snabcentr-client-core-lib!345))
|
|
6
6
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sc-ssr-response-cache';
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { HttpResponse } from '@angular/common/http';
|
|
2
|
+
import { ScISsrResponseCacheStats } from '../interfaces/sc-i-ssr-response-cache-stats';
|
|
3
|
+
/**
|
|
4
|
+
* Кэш ответов API, один на процесс: переживает пересоздание инжектора между SSR-рендерами.
|
|
5
|
+
* Одинаковые одновременные запросы склеиваются, при переполнении вытесняется самая давняя запись.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ScSsrResponseCache {
|
|
8
|
+
/**
|
|
9
|
+
* Максимальное количество записей в кэше.
|
|
10
|
+
*/
|
|
11
|
+
private readonly maxEntries;
|
|
12
|
+
/**
|
|
13
|
+
* Закэшированные ответы по ключу запроса.
|
|
14
|
+
*/
|
|
15
|
+
private readonly entries;
|
|
16
|
+
/**
|
|
17
|
+
* Выполняемые запросы по ключу запроса.
|
|
18
|
+
*/
|
|
19
|
+
private readonly pending;
|
|
20
|
+
/**
|
|
21
|
+
* Количество запросов, отданных без обращения к API.
|
|
22
|
+
*/
|
|
23
|
+
private hits;
|
|
24
|
+
/**
|
|
25
|
+
* Количество запросов, выполненных к API.
|
|
26
|
+
*/
|
|
27
|
+
private misses;
|
|
28
|
+
/**
|
|
29
|
+
* Инициализирует экземпляр класса {@link ScSsrResponseCache}.
|
|
30
|
+
*
|
|
31
|
+
* @param maxEntries Максимальное количество записей в кэше.
|
|
32
|
+
*/
|
|
33
|
+
constructor(maxEntries?: number);
|
|
34
|
+
/**
|
|
35
|
+
* Возвращает ответ из кэша, при отсутствии или устаревании загружает и кэширует. Ошибка загрузки не кэшируется.
|
|
36
|
+
*
|
|
37
|
+
* @param key Ключ запроса.
|
|
38
|
+
* @param lifeTime Время жизни ответа (мс).
|
|
39
|
+
* @param loader Функция загрузки ответа.
|
|
40
|
+
*/
|
|
41
|
+
getOrLoad(key: string, lifeTime: number, loader: () => Promise<HttpResponse<unknown>>): Promise<HttpResponse<unknown>>;
|
|
42
|
+
/**
|
|
43
|
+
* Возвращает статистику работы кэша.
|
|
44
|
+
*/
|
|
45
|
+
getStats(): ScISsrResponseCacheStats;
|
|
46
|
+
/**
|
|
47
|
+
* Возвращает актуальную запись или `null`.
|
|
48
|
+
*
|
|
49
|
+
* @param key Ключ запроса.
|
|
50
|
+
*/
|
|
51
|
+
private get;
|
|
52
|
+
/**
|
|
53
|
+
* Сохраняет запись, при переполнении вытесняя самую давнюю.
|
|
54
|
+
*
|
|
55
|
+
* @param key Ключ запроса.
|
|
56
|
+
* @param entry Запись кэша.
|
|
57
|
+
*/
|
|
58
|
+
private set;
|
|
59
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Настройки кэша ответов API, общего для всех SSR-рендеров.
|
|
3
|
+
*/
|
|
4
|
+
export interface ScISsrResponseCacheSettings {
|
|
5
|
+
/**
|
|
6
|
+
* Адреса API относительно `apiUrl`, ответы на которые кэшируются: точное совпадение (`/news`) или префикс с `*` (`/references/*`).
|
|
7
|
+
*/
|
|
8
|
+
readonly endpoints: string[];
|
|
9
|
+
/**
|
|
10
|
+
* Время жизни закэшированного ответа (мс). При значении `0` кэш выключен.
|
|
11
|
+
*/
|
|
12
|
+
readonly lifeTime: number;
|
|
13
|
+
/**
|
|
14
|
+
* Время ожидания ответа API (мс), чтобы зависший запрос не блокировал адрес для всех рендеров. `0`: без ограничения.
|
|
15
|
+
*/
|
|
16
|
+
readonly loadTimeout: number;
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Статистика работы кэша ответов API между SSR-рендерами.
|
|
3
|
+
*/
|
|
4
|
+
export interface ScISsrResponseCacheStats {
|
|
5
|
+
/**
|
|
6
|
+
* Количество записей в кэше.
|
|
7
|
+
*/
|
|
8
|
+
readonly size: number;
|
|
9
|
+
/**
|
|
10
|
+
* Количество запросов, отданных без обращения к API: из кэша или из уже выполняющегося запроса.
|
|
11
|
+
*/
|
|
12
|
+
readonly hits: number;
|
|
13
|
+
/**
|
|
14
|
+
* Количество запросов, выполненных к API.
|
|
15
|
+
*/
|
|
16
|
+
readonly misses: number;
|
|
17
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { HttpRequest } from '@angular/common/http';
|
|
2
|
+
import { ScIApiKeys } from '../../config/sc-i-api-keys';
|
|
3
|
+
import { ScISsrResponseCacheSettings } from '../interfaces/sc-i-ssr-response-cache-settings';
|
|
4
|
+
/**
|
|
5
|
+
* Возвращает признак, что ответ можно кэшировать между SSR-рендерами: GET за JSON без ключей доступа по адресам из настроек.
|
|
6
|
+
*
|
|
7
|
+
* @param request Данные запроса.
|
|
8
|
+
* @param settings Настройки кэша.
|
|
9
|
+
* @param apiUrl Адрес API.
|
|
10
|
+
* @param apiKeys Названия заголовков ключей доступа к API.
|
|
11
|
+
*
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare function isSsrResponseCacheable(request: HttpRequest<unknown>, settings: ScISsrResponseCacheSettings, apiUrl: string, apiKeys: ScIApiKeys): boolean;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { HttpResponse } from '@angular/common/http';
|
|
2
|
+
/**
|
|
3
|
+
* Ответ API, закэшированный между SSR-рендерами.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export interface ScISsrCachedResponse {
|
|
8
|
+
/**
|
|
9
|
+
* Момент времени (мс), после которого ответ считается устаревшим.
|
|
10
|
+
*/
|
|
11
|
+
readonly expiresAt: number;
|
|
12
|
+
/**
|
|
13
|
+
* Закэшированный ответ на запрос.
|
|
14
|
+
*/
|
|
15
|
+
readonly response: HttpResponse<unknown>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { HttpBackend, HttpEvent, HttpRequest } from '@angular/common/http';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Обработчик запросов с кэшем ответов API между SSR-рендерами.
|
|
6
|
+
*
|
|
7
|
+
* Стоит на уровне {@link HttpBackend}, ниже перехватчиков: ответ из кэша проходит через перенос в браузер,
|
|
8
|
+
* а проверка ключей доступа видит итоговые заголовки. Отдаёт только итоговый {@link HttpResponse};
|
|
9
|
+
* запрос не отменяется при отписке рендера, а ограничен `loadTimeout` из настроек.
|
|
10
|
+
*/
|
|
11
|
+
export declare class ScSsrResponseCacheBackend implements HttpBackend {
|
|
12
|
+
/**
|
|
13
|
+
* Штатный обработчик, выполняющий запросы к API.
|
|
14
|
+
*/
|
|
15
|
+
private readonly backend;
|
|
16
|
+
/**
|
|
17
|
+
* Кэш ответов API.
|
|
18
|
+
*/
|
|
19
|
+
private readonly cache;
|
|
20
|
+
/**
|
|
21
|
+
* Настройки кэша.
|
|
22
|
+
*/
|
|
23
|
+
private readonly settings;
|
|
24
|
+
/**
|
|
25
|
+
* Адрес API.
|
|
26
|
+
*/
|
|
27
|
+
private readonly apiUrl;
|
|
28
|
+
/**
|
|
29
|
+
* Названия заголовков ключей доступа к API.
|
|
30
|
+
*/
|
|
31
|
+
private readonly apiKeys;
|
|
32
|
+
/** @inheritDoc */
|
|
33
|
+
handle(request: HttpRequest<unknown>): Observable<HttpEvent<unknown>>;
|
|
34
|
+
/**
|
|
35
|
+
* Выполняет запрос к API и возвращает его ответ.
|
|
36
|
+
*
|
|
37
|
+
* @param request Данные запроса.
|
|
38
|
+
*/
|
|
39
|
+
private load;
|
|
40
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ScSsrResponseCacheBackend, never>;
|
|
41
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ScSsrResponseCacheBackend>;
|
|
42
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { EnvironmentProviders } from '@angular/core';
|
|
2
|
+
/**
|
|
3
|
+
* Возвращает провайдеры кэша ответов API между SSR-рендерами.
|
|
4
|
+
* Подключать только в серверной конфигурации после `provideHttpClient()`: подменяют {@link HttpBackend}.
|
|
5
|
+
*/
|
|
6
|
+
export declare function provideSsrResponseCache(): EnvironmentProviders;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { ScISsrResponseCacheSettings } from '../interfaces/sc-i-ssr-response-cache-settings';
|
|
3
|
+
/**
|
|
4
|
+
* Токен настроек кэша ответов API между SSR-рендерами. По умолчанию кэш выключен.
|
|
5
|
+
*/
|
|
6
|
+
export declare const SC_SSR_RESPONSE_CACHE_SETTINGS: InjectionToken<ScISsrResponseCacheSettings>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { ScSsrResponseCache } from '../classes/sc-ssr-response-cache';
|
|
3
|
+
/**
|
|
4
|
+
* Токен кэша ответов API между SSR-рендерами. По умолчанию один экземпляр на процесс, можно переопределить провайдером.
|
|
5
|
+
*/
|
|
6
|
+
export declare const SC_SSR_RESPONSE_CACHE: InjectionToken<ScSsrResponseCache>;
|