@tramvai/module-page-render-mode 7.5.3 → 7.11.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.
Files changed (35) hide show
  1. package/lib/PageRenderWrapper.browser.js +4 -4
  2. package/lib/PageRenderWrapper.d.ts +1 -1
  3. package/lib/PageRenderWrapper.es.js +4 -4
  4. package/lib/PageRenderWrapper.js +3 -3
  5. package/lib/browser.js +27 -3
  6. package/lib/private-tokens.browser.js +9 -0
  7. package/lib/private-tokens.d.ts +27 -0
  8. package/lib/private-tokens.es.js +9 -0
  9. package/lib/private-tokens.js +17 -0
  10. package/lib/server.es.js +1 -1
  11. package/lib/server.js +5 -0
  12. package/lib/staticPages/backgroundFetchService.d.ts +9 -7
  13. package/lib/staticPages/backgroundFetchService.es.js +20 -20
  14. package/lib/staticPages/backgroundFetchService.js +20 -20
  15. package/lib/staticPages/fileSystemCache.d.ts +72 -0
  16. package/lib/staticPages/fileSystemCache.es.js +367 -0
  17. package/lib/staticPages/fileSystemCache.js +376 -0
  18. package/lib/staticPages/staticPagesService.d.ts +16 -9
  19. package/lib/staticPages/staticPagesService.es.js +124 -39
  20. package/lib/staticPages/staticPagesService.js +124 -39
  21. package/lib/staticPages.d.ts +410 -155
  22. package/lib/staticPages.es.js +233 -67
  23. package/lib/staticPages.js +232 -70
  24. package/lib/tokens.browser.js +15 -1
  25. package/lib/tokens.d.ts +90 -32
  26. package/lib/tokens.es.js +15 -1
  27. package/lib/tokens.js +19 -0
  28. package/lib/utils/cacheKey.d.ts +4 -6
  29. package/lib/utils/cacheKey.es.js +8 -3
  30. package/lib/utils/cacheKey.js +8 -2
  31. package/lib/utils/getPageRenderMode.browser.js +14 -2
  32. package/lib/utils/getPageRenderMode.d.ts +8 -3
  33. package/lib/utils/getPageRenderMode.es.js +14 -2
  34. package/lib/utils/getPageRenderMode.js +14 -2
  35. package/package.json +16 -14
@@ -1,8 +1,6 @@
1
- export declare const getCacheKey: ({ method, host, path, deviceType, }: {
2
- method: string;
3
- host: string;
4
- path: string;
5
- deviceType: 'desktop' | 'mobile';
1
+ export declare const getCacheKey: ({ pathname, key }: {
2
+ pathname: string;
3
+ key: string;
6
4
  }) => string;
7
- export declare const parseCacheKey: (key: string) => string[];
5
+ export declare const parseCacheKey: (key: string) => [pathname: string, key: string];
8
6
  //# sourceMappingURL=cacheKey.d.ts.map
@@ -1,5 +1,10 @@
1
- const getCacheKey = ({ method, host, path, deviceType, }) => {
2
- return `${method}=${host}=${path}=${deviceType}`;
1
+ // unsafe url symbol, cannot be used in pathname without encoding
2
+ const SEPARATOR = '^';
3
+ const getCacheKey = ({ pathname, key }) => {
4
+ return `${pathname}${SEPARATOR}${key}`;
5
+ };
6
+ const parseCacheKey = (key) => {
7
+ return key.split(SEPARATOR);
3
8
  };
4
9
 
5
- export { getCacheKey };
10
+ export { getCacheKey, parseCacheKey };
@@ -2,8 +2,14 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const getCacheKey = ({ method, host, path, deviceType, }) => {
6
- return `${method}=${host}=${path}=${deviceType}`;
5
+ // unsafe url symbol, cannot be used in pathname without encoding
6
+ const SEPARATOR = '^';
7
+ const getCacheKey = ({ pathname, key }) => {
8
+ return `${pathname}${SEPARATOR}${key}`;
9
+ };
10
+ const parseCacheKey = (key) => {
11
+ return key.split(SEPARATOR);
7
12
  };
8
13
 
9
14
  exports.getCacheKey = getCacheKey;
15
+ exports.parseCacheKey = parseCacheKey;
@@ -1,5 +1,17 @@
1
- const getPageRenderMode = ({ pageService, defaultRenderMode, }) => {
2
- const { pageComponent, pageRenderMode } = pageService.getConfig();
1
+ const getPageRenderMode = ({ requestManager, router, pageService, defaultRenderMode, fileSystemCache, }) => {
2
+ const resolvedRoute = router?.getCurrentRoute() ?? router?.resolve(requestManager.getParsedUrl().pathname);
3
+ // if we can't resolve route, it means that we are on 404 page, or has dynamic routing,
4
+ // so we can't determine render mode by page config or page component property, and should fallback to default render mode
5
+ if (!resolvedRoute) {
6
+ return typeof defaultRenderMode === 'function' ? defaultRenderMode() : defaultRenderMode;
7
+ }
8
+ // fast way for prerendered pages to determine render mode without full route resolving
9
+ if (fileSystemCache &&
10
+ // TODO: refactor for log(1) complexity
11
+ fileSystemCache.staticPages.some((item) => item.path === resolvedRoute.path || item.name === resolvedRoute.name)) {
12
+ return 'static';
13
+ }
14
+ const { pageComponent, pageRenderMode } = (pageService.getCurrentRoute() ? pageService.getConfig() : resolvedRoute.config) ?? {};
3
15
  const { renderMode } = pageService.getComponent(pageComponent) ?? {};
4
16
  const mode = pageRenderMode || renderMode || defaultRenderMode;
5
17
  return typeof mode === 'function' ? mode() : mode;
@@ -1,9 +1,14 @@
1
1
  import type { ExtractDependencyType } from '@tinkoff/dippy';
2
2
  import type { TramvaiRenderMode } from '@tramvai/tokens-render';
3
- import type { PAGE_SERVICE_TOKEN } from '@tramvai/tokens-router';
3
+ import type { PAGE_SERVICE_TOKEN, ROUTER_TOKEN } from '@tramvai/tokens-router';
4
+ import { REQUEST_MANAGER_TOKEN } from '@tramvai/tokens-common';
4
5
  import type { PAGE_RENDER_DEFAULT_MODE } from '../tokens';
5
- export declare const getPageRenderMode: ({ pageService, defaultRenderMode, }: {
6
- pageService: ExtractDependencyType<typeof PAGE_SERVICE_TOKEN>;
6
+ import { STATIC_PAGES_FS_CACHE_TOKEN } from '../private-tokens';
7
+ export declare const getPageRenderMode: ({ requestManager, router, pageService, defaultRenderMode, fileSystemCache, }: {
8
+ requestManager: ExtractDependencyType<typeof REQUEST_MANAGER_TOKEN>;
9
+ router: ExtractDependencyType<typeof ROUTER_TOKEN> | null;
10
+ pageService: ExtractDependencyType<typeof PAGE_SERVICE_TOKEN> | null;
7
11
  defaultRenderMode: ExtractDependencyType<typeof PAGE_RENDER_DEFAULT_MODE>;
12
+ fileSystemCache?: import("../staticPages/fileSystemCache").FileSystemCache | null | undefined;
8
13
  }) => TramvaiRenderMode;
9
14
  //# sourceMappingURL=getPageRenderMode.d.ts.map
@@ -1,5 +1,17 @@
1
- const getPageRenderMode = ({ pageService, defaultRenderMode, }) => {
2
- const { pageComponent, pageRenderMode } = pageService.getConfig();
1
+ const getPageRenderMode = ({ requestManager, router, pageService, defaultRenderMode, fileSystemCache, }) => {
2
+ const resolvedRoute = router?.getCurrentRoute() ?? router?.resolve(requestManager.getParsedUrl().pathname);
3
+ // if we can't resolve route, it means that we are on 404 page, or has dynamic routing,
4
+ // so we can't determine render mode by page config or page component property, and should fallback to default render mode
5
+ if (!resolvedRoute) {
6
+ return typeof defaultRenderMode === 'function' ? defaultRenderMode() : defaultRenderMode;
7
+ }
8
+ // fast way for prerendered pages to determine render mode without full route resolving
9
+ if (fileSystemCache &&
10
+ // TODO: refactor for log(1) complexity
11
+ fileSystemCache.staticPages.some((item) => item.path === resolvedRoute.path || item.name === resolvedRoute.name)) {
12
+ return 'static';
13
+ }
14
+ const { pageComponent, pageRenderMode } = (pageService.getCurrentRoute() ? pageService.getConfig() : resolvedRoute.config) ?? {};
3
15
  const { renderMode } = pageService.getComponent(pageComponent) ?? {};
4
16
  const mode = pageRenderMode || renderMode || defaultRenderMode;
5
17
  return typeof mode === 'function' ? mode() : mode;
@@ -2,8 +2,20 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const getPageRenderMode = ({ pageService, defaultRenderMode, }) => {
6
- const { pageComponent, pageRenderMode } = pageService.getConfig();
5
+ const getPageRenderMode = ({ requestManager, router, pageService, defaultRenderMode, fileSystemCache, }) => {
6
+ const resolvedRoute = router?.getCurrentRoute() ?? router?.resolve(requestManager.getParsedUrl().pathname);
7
+ // if we can't resolve route, it means that we are on 404 page, or has dynamic routing,
8
+ // so we can't determine render mode by page config or page component property, and should fallback to default render mode
9
+ if (!resolvedRoute) {
10
+ return typeof defaultRenderMode === 'function' ? defaultRenderMode() : defaultRenderMode;
11
+ }
12
+ // fast way for prerendered pages to determine render mode without full route resolving
13
+ if (fileSystemCache &&
14
+ // TODO: refactor for log(1) complexity
15
+ fileSystemCache.staticPages.some((item) => item.path === resolvedRoute.path || item.name === resolvedRoute.name)) {
16
+ return 'static';
17
+ }
18
+ const { pageComponent, pageRenderMode } = (pageService.getCurrentRoute() ? pageService.getConfig() : resolvedRoute.config) ?? {};
7
19
  const { renderMode } = pageService.getComponent(pageComponent) ?? {};
8
20
  const mode = pageRenderMode || renderMode || defaultRenderMode;
9
21
  return typeof mode === 'function' ? mode() : mode;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-page-render-mode",
3
- "version": "7.5.3",
3
+ "version": "7.11.0",
4
4
  "description": "Enable different rendering modes for pages",
5
5
  "main": "./lib/server.js",
6
6
  "module": "./lib/server.es.js",
@@ -24,23 +24,25 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@tinkoff/errors": "0.8.1",
27
- "@tinkoff/url": "0.13.1"
27
+ "@tinkoff/url": "0.13.1",
28
+ "p-limit": "^3"
28
29
  },
29
30
  "peerDependencies": {
30
31
  "@tinkoff/dippy": "0.13.2",
32
+ "@tinkoff/router": "0.7.32",
31
33
  "@tinkoff/utils": "^2.1.2",
32
- "@tramvai/core": "7.5.3",
33
- "@tramvai/module-client-hints": "7.5.3",
34
- "@tramvai/module-router": "7.5.3",
35
- "@tramvai/papi": "7.5.3",
36
- "@tramvai/react": "7.5.3",
37
- "@tramvai/tokens-common": "7.5.3",
38
- "@tramvai/tokens-core": "7.5.3",
39
- "@tramvai/tokens-metrics": "7.5.3",
40
- "@tramvai/tokens-render": "7.5.3",
41
- "@tramvai/tokens-router": "7.5.3",
42
- "@tramvai/tokens-server": "7.5.3",
43
- "@tramvai/tokens-server-private": "7.5.3",
34
+ "@tramvai/core": "7.11.0",
35
+ "@tramvai/module-client-hints": "7.11.0",
36
+ "@tramvai/module-router": "7.11.0",
37
+ "@tramvai/papi": "7.11.0",
38
+ "@tramvai/react": "7.11.0",
39
+ "@tramvai/tokens-common": "7.11.0",
40
+ "@tramvai/tokens-core": "7.11.0",
41
+ "@tramvai/tokens-metrics": "7.11.0",
42
+ "@tramvai/tokens-render": "7.11.0",
43
+ "@tramvai/tokens-router": "7.11.0",
44
+ "@tramvai/tokens-server": "7.11.0",
45
+ "@tramvai/tokens-server-private": "7.11.0",
44
46
  "prom-client": "^14.2.0",
45
47
  "react": ">=16.14.0",
46
48
  "tslib": "^2.4.0"