@tramvai/module-client-hints 2.70.1 → 2.72.3
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/lib/browser/matchMedia.browser.js +34 -0
- package/lib/browser.js +12 -104
- package/lib/child-app/module.browser.js +21 -0
- package/lib/child-app/module.es.js +21 -0
- package/lib/child-app/module.js +23 -0
- package/lib/server/readMedia.es.js +48 -0
- package/lib/server/readMedia.js +56 -0
- package/lib/server/userAgent.es.js +65 -0
- package/lib/server/userAgent.js +69 -0
- package/lib/server.es.js +13 -174
- package/lib/server.js +30 -192
- package/lib/shared/constants.browser.js +3 -0
- package/lib/shared/constants.es.js +3 -0
- package/lib/shared/constants.js +7 -0
- package/lib/shared/mediaBreakpoints.browser.js +5 -0
- package/lib/shared/providers.browser.js +9 -0
- package/lib/shared/providers.es.js +9 -0
- package/lib/shared/providers.js +13 -0
- package/lib/shared/stores/media.browser.js +18 -0
- package/lib/shared/stores/media.es.js +18 -0
- package/lib/shared/stores/media.js +23 -0
- package/lib/shared/stores/mediaCheckers.browser.js +11 -0
- package/lib/shared/stores/mediaCheckers.es.js +11 -0
- package/lib/shared/stores/mediaCheckers.js +17 -0
- package/lib/shared/stores/mediaSelectors.browser.js +17 -0
- package/lib/shared/stores/mediaSelectors.es.js +17 -0
- package/lib/shared/stores/mediaSelectors.js +24 -0
- package/lib/shared/stores/userAgent.browser.js +8 -0
- package/lib/shared/stores/userAgent.es.js +8 -0
- package/lib/shared/stores/userAgent.js +13 -0
- package/lib/tokens.browser.js +6 -0
- package/lib/tokens.es.js +6 -0
- package/lib/tokens.js +11 -0
- package/package.json +11 -12
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import debounce from '@tinkoff/utils/function/debounce';
|
|
2
|
+
import { setMedia } from '../shared/stores/media.browser.js';
|
|
3
|
+
import { COOKIE_NAME_MEDIA_INFO } from '../shared/constants.browser.js';
|
|
4
|
+
import { mediaBreakpoints } from '../shared/mediaBreakpoints.browser.js';
|
|
5
|
+
|
|
6
|
+
const isTouch = !!('ontouchstart' in window ||
|
|
7
|
+
(window.DocumentTouch && document instanceof window.DocumentTouch));
|
|
8
|
+
const getMediaInfo = () => ({
|
|
9
|
+
width: window.innerWidth,
|
|
10
|
+
height: window.innerHeight,
|
|
11
|
+
isTouch,
|
|
12
|
+
retina: window.matchMedia(mediaBreakpoints.retina).matches,
|
|
13
|
+
});
|
|
14
|
+
const matchMediaCommand = ({ context, cookieManager, }) => {
|
|
15
|
+
return function matchMedia() {
|
|
16
|
+
const setMediaInfo = () => {
|
|
17
|
+
const media = getMediaInfo();
|
|
18
|
+
cookieManager.set({
|
|
19
|
+
name: COOKIE_NAME_MEDIA_INFO,
|
|
20
|
+
value: JSON.stringify(media),
|
|
21
|
+
});
|
|
22
|
+
return context.dispatch(setMedia({
|
|
23
|
+
...media,
|
|
24
|
+
supposed: false,
|
|
25
|
+
}));
|
|
26
|
+
};
|
|
27
|
+
const debouncedSetMediaInfo = debounce(300, setMediaInfo);
|
|
28
|
+
window.addEventListener('orientationchange', debouncedSetMediaInfo);
|
|
29
|
+
window.addEventListener('resize', debouncedSetMediaInfo);
|
|
30
|
+
return setMediaInfo();
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export { matchMediaCommand };
|
package/lib/browser.js
CHANGED
|
@@ -1,109 +1,17 @@
|
|
|
1
1
|
import { __decorate } from 'tslib';
|
|
2
2
|
import { Module, provide, commandLineListTokens } from '@tramvai/core';
|
|
3
|
-
import {
|
|
3
|
+
import { STORE_TOKEN, CONTEXT_TOKEN } from '@tramvai/tokens-common';
|
|
4
4
|
import { COOKIE_MANAGER_TOKEN } from '@tramvai/tokens-cookie';
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
height: 0,
|
|
16
|
-
width: 0,
|
|
17
|
-
isTouch: false,
|
|
18
|
-
retina: false,
|
|
19
|
-
synchronized: false,
|
|
20
|
-
};
|
|
21
|
-
const MediaStore = createReducer('media', initialState).on(setMedia, (state, media) => {
|
|
22
|
-
return {
|
|
23
|
-
...state,
|
|
24
|
-
...media,
|
|
25
|
-
};
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
const COOKIE_NAME_MEDIA_INFO = 'mediaInfo';
|
|
29
|
-
|
|
30
|
-
const mediaBreakpoints = {
|
|
31
|
-
retina: '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)',
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
const isTouch = !!('ontouchstart' in window ||
|
|
35
|
-
(window.DocumentTouch && document instanceof window.DocumentTouch));
|
|
36
|
-
const getMediaInfo = () => ({
|
|
37
|
-
width: window.innerWidth,
|
|
38
|
-
height: window.innerHeight,
|
|
39
|
-
isTouch,
|
|
40
|
-
retina: window.matchMedia(mediaBreakpoints.retina).matches,
|
|
41
|
-
});
|
|
42
|
-
const matchMediaCommand = ({ context, cookieManager, }) => {
|
|
43
|
-
return function matchMedia() {
|
|
44
|
-
const setMediaInfo = () => {
|
|
45
|
-
const media = getMediaInfo();
|
|
46
|
-
cookieManager.set({
|
|
47
|
-
name: COOKIE_NAME_MEDIA_INFO,
|
|
48
|
-
value: JSON.stringify(media),
|
|
49
|
-
});
|
|
50
|
-
return context.dispatch(setMedia({
|
|
51
|
-
...media,
|
|
52
|
-
supposed: false,
|
|
53
|
-
}));
|
|
54
|
-
};
|
|
55
|
-
const debouncedSetMediaInfo = debounce(300, setMediaInfo);
|
|
56
|
-
window.addEventListener('orientationchange', debouncedSetMediaInfo);
|
|
57
|
-
window.addEventListener('resize', debouncedSetMediaInfo);
|
|
58
|
-
return setMediaInfo();
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
const setUserAgent = createEvent('setUserAgent');
|
|
63
|
-
const UserAgentStore = createReducer('userAgent', null).on(setUserAgent, (state, userAgent) => {
|
|
64
|
-
return userAgent;
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
const providers = [
|
|
68
|
-
{ provide: COMBINE_REDUCERS, multi: true, useValue: [UserAgentStore, MediaStore] },
|
|
69
|
-
];
|
|
70
|
-
|
|
71
|
-
function fromClientHints(media) {
|
|
72
|
-
return !!media.synchronized;
|
|
73
|
-
}
|
|
74
|
-
function isSupposed(media) {
|
|
75
|
-
return !!media.supposed;
|
|
76
|
-
}
|
|
77
|
-
function isRetina(media) {
|
|
78
|
-
return !!media.retina;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function useMedia() {
|
|
82
|
-
return useSelector('media', ({ media }) => media);
|
|
83
|
-
}
|
|
84
|
-
function useFromClientHints() {
|
|
85
|
-
return fromClientHints(useMedia());
|
|
86
|
-
}
|
|
87
|
-
function useIsSupposed() {
|
|
88
|
-
return isSupposed(useMedia());
|
|
89
|
-
}
|
|
90
|
-
function useIsRetina() {
|
|
91
|
-
return isRetina(useMedia());
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
let ClientHintsChildAppModule = class ClientHintsChildAppModule {
|
|
95
|
-
};
|
|
96
|
-
ClientHintsChildAppModule = __decorate([
|
|
97
|
-
Module({
|
|
98
|
-
providers: [
|
|
99
|
-
{
|
|
100
|
-
provide: CHILD_APP_INTERNAL_ROOT_STATE_ALLOWED_STORE_TOKEN,
|
|
101
|
-
multi: true,
|
|
102
|
-
useValue: [MediaStore, UserAgentStore],
|
|
103
|
-
},
|
|
104
|
-
],
|
|
105
|
-
})
|
|
106
|
-
], ClientHintsChildAppModule);
|
|
5
|
+
import { USER_AGENT_TOKEN } from './tokens.browser.js';
|
|
6
|
+
export { PARSER_CLIENT_HINTS_ENABLED, USER_AGENT_TOKEN } from './tokens.browser.js';
|
|
7
|
+
import { matchMediaCommand } from './browser/matchMedia.browser.js';
|
|
8
|
+
import { providers } from './shared/providers.browser.js';
|
|
9
|
+
import { UserAgentStore } from './shared/stores/userAgent.browser.js';
|
|
10
|
+
export { UserAgentStore, setUserAgent } from './shared/stores/userAgent.browser.js';
|
|
11
|
+
export { fromClientHints, isRetina, isSupposed } from './shared/stores/mediaCheckers.browser.js';
|
|
12
|
+
export { useFromClientHints, useIsRetina, useIsSupposed, useMedia } from './shared/stores/mediaSelectors.browser.js';
|
|
13
|
+
export { MediaStore, setMedia } from './shared/stores/media.browser.js';
|
|
14
|
+
export { ClientHintsChildAppModule } from './child-app/module.browser.js';
|
|
107
15
|
|
|
108
16
|
let ClientHintsModule = class ClientHintsModule {
|
|
109
17
|
};
|
|
@@ -133,4 +41,4 @@ ClientHintsModule = __decorate([
|
|
|
133
41
|
})
|
|
134
42
|
], ClientHintsModule);
|
|
135
43
|
|
|
136
|
-
export {
|
|
44
|
+
export { ClientHintsModule };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { __decorate } from 'tslib';
|
|
2
|
+
import { Module } from '@tramvai/core';
|
|
3
|
+
import { CHILD_APP_INTERNAL_ROOT_STATE_ALLOWED_STORE_TOKEN } from '@tramvai/tokens-child-app';
|
|
4
|
+
import { MediaStore } from '../shared/stores/media.browser.js';
|
|
5
|
+
import { UserAgentStore } from '../shared/stores/userAgent.browser.js';
|
|
6
|
+
|
|
7
|
+
let ClientHintsChildAppModule = class ClientHintsChildAppModule {
|
|
8
|
+
};
|
|
9
|
+
ClientHintsChildAppModule = __decorate([
|
|
10
|
+
Module({
|
|
11
|
+
providers: [
|
|
12
|
+
{
|
|
13
|
+
provide: CHILD_APP_INTERNAL_ROOT_STATE_ALLOWED_STORE_TOKEN,
|
|
14
|
+
multi: true,
|
|
15
|
+
useValue: [MediaStore, UserAgentStore],
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
})
|
|
19
|
+
], ClientHintsChildAppModule);
|
|
20
|
+
|
|
21
|
+
export { ClientHintsChildAppModule };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { __decorate } from 'tslib';
|
|
2
|
+
import { Module } from '@tramvai/core';
|
|
3
|
+
import { CHILD_APP_INTERNAL_ROOT_STATE_ALLOWED_STORE_TOKEN } from '@tramvai/tokens-child-app';
|
|
4
|
+
import { MediaStore } from '../shared/stores/media.es.js';
|
|
5
|
+
import { UserAgentStore } from '../shared/stores/userAgent.es.js';
|
|
6
|
+
|
|
7
|
+
let ClientHintsChildAppModule = class ClientHintsChildAppModule {
|
|
8
|
+
};
|
|
9
|
+
ClientHintsChildAppModule = __decorate([
|
|
10
|
+
Module({
|
|
11
|
+
providers: [
|
|
12
|
+
{
|
|
13
|
+
provide: CHILD_APP_INTERNAL_ROOT_STATE_ALLOWED_STORE_TOKEN,
|
|
14
|
+
multi: true,
|
|
15
|
+
useValue: [MediaStore, UserAgentStore],
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
})
|
|
19
|
+
], ClientHintsChildAppModule);
|
|
20
|
+
|
|
21
|
+
export { ClientHintsChildAppModule };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var tslib = require('tslib');
|
|
6
|
+
var core = require('@tramvai/core');
|
|
7
|
+
var tokensChildApp = require('@tramvai/tokens-child-app');
|
|
8
|
+
var media = require('../shared/stores/media.js');
|
|
9
|
+
var userAgent = require('../shared/stores/userAgent.js');
|
|
10
|
+
|
|
11
|
+
exports.ClientHintsChildAppModule = class ClientHintsChildAppModule {
|
|
12
|
+
};
|
|
13
|
+
exports.ClientHintsChildAppModule = tslib.__decorate([
|
|
14
|
+
core.Module({
|
|
15
|
+
providers: [
|
|
16
|
+
{
|
|
17
|
+
provide: tokensChildApp.CHILD_APP_INTERNAL_ROOT_STATE_ALLOWED_STORE_TOKEN,
|
|
18
|
+
multi: true,
|
|
19
|
+
useValue: [media.MediaStore, userAgent.UserAgentStore],
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
})
|
|
23
|
+
], exports.ClientHintsChildAppModule);
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import pathOr from '@tinkoff/utils/object/pathOr';
|
|
2
|
+
import { safeParseJSON } from '@tramvai/safe-strings';
|
|
3
|
+
import { COOKIE_NAME_MEDIA_INFO } from '../shared/constants.es.js';
|
|
4
|
+
import { setMedia } from '../shared/stores/media.es.js';
|
|
5
|
+
import { UserAgentStore } from '../shared/stores/userAgent.es.js';
|
|
6
|
+
|
|
7
|
+
const SUPPOSED_MEDIA = {
|
|
8
|
+
mobile: {
|
|
9
|
+
width: 300,
|
|
10
|
+
height: 500,
|
|
11
|
+
isTouch: true,
|
|
12
|
+
retina: false,
|
|
13
|
+
},
|
|
14
|
+
tablet: {
|
|
15
|
+
width: 600,
|
|
16
|
+
height: 800,
|
|
17
|
+
isTouch: true,
|
|
18
|
+
retina: false,
|
|
19
|
+
},
|
|
20
|
+
desktop: {
|
|
21
|
+
width: 1024,
|
|
22
|
+
height: 768,
|
|
23
|
+
isTouch: false,
|
|
24
|
+
retina: false,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
const readMediaCommand = ({ context, cookieManager, }) => {
|
|
28
|
+
return function readMedia() {
|
|
29
|
+
var _a;
|
|
30
|
+
const mediaInfo = safeParseJSON((_a = cookieManager.get(COOKIE_NAME_MEDIA_INFO)) !== null && _a !== void 0 ? _a : '');
|
|
31
|
+
if (mediaInfo) {
|
|
32
|
+
return context.dispatch(setMedia({
|
|
33
|
+
...mediaInfo,
|
|
34
|
+
supposed: false,
|
|
35
|
+
synchronized: true,
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
const userAgent = context.getState(UserAgentStore);
|
|
39
|
+
const deviceType = pathOr(['device', 'type'], 'desktop', userAgent);
|
|
40
|
+
return context.dispatch(setMedia({
|
|
41
|
+
...SUPPOSED_MEDIA[deviceType],
|
|
42
|
+
supposed: true,
|
|
43
|
+
synchronized: false,
|
|
44
|
+
}));
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export { readMediaCommand };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var pathOr = require('@tinkoff/utils/object/pathOr');
|
|
6
|
+
var safeStrings = require('@tramvai/safe-strings');
|
|
7
|
+
var constants = require('../shared/constants.js');
|
|
8
|
+
var media = require('../shared/stores/media.js');
|
|
9
|
+
var userAgent = require('../shared/stores/userAgent.js');
|
|
10
|
+
|
|
11
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
|
+
|
|
13
|
+
var pathOr__default = /*#__PURE__*/_interopDefaultLegacy(pathOr);
|
|
14
|
+
|
|
15
|
+
const SUPPOSED_MEDIA = {
|
|
16
|
+
mobile: {
|
|
17
|
+
width: 300,
|
|
18
|
+
height: 500,
|
|
19
|
+
isTouch: true,
|
|
20
|
+
retina: false,
|
|
21
|
+
},
|
|
22
|
+
tablet: {
|
|
23
|
+
width: 600,
|
|
24
|
+
height: 800,
|
|
25
|
+
isTouch: true,
|
|
26
|
+
retina: false,
|
|
27
|
+
},
|
|
28
|
+
desktop: {
|
|
29
|
+
width: 1024,
|
|
30
|
+
height: 768,
|
|
31
|
+
isTouch: false,
|
|
32
|
+
retina: false,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
const readMediaCommand = ({ context, cookieManager, }) => {
|
|
36
|
+
return function readMedia() {
|
|
37
|
+
var _a;
|
|
38
|
+
const mediaInfo = safeStrings.safeParseJSON((_a = cookieManager.get(constants.COOKIE_NAME_MEDIA_INFO)) !== null && _a !== void 0 ? _a : '');
|
|
39
|
+
if (mediaInfo) {
|
|
40
|
+
return context.dispatch(media.setMedia({
|
|
41
|
+
...mediaInfo,
|
|
42
|
+
supposed: false,
|
|
43
|
+
synchronized: true,
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
const userAgent$1 = context.getState(userAgent.UserAgentStore);
|
|
47
|
+
const deviceType = pathOr__default["default"](['device', 'type'], 'desktop', userAgent$1);
|
|
48
|
+
return context.dispatch(media.setMedia({
|
|
49
|
+
...SUPPOSED_MEDIA[deviceType],
|
|
50
|
+
supposed: true,
|
|
51
|
+
synchronized: false,
|
|
52
|
+
}));
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
exports.readMediaCommand = readMediaCommand;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { provide, Scope, commandLineListTokens } from '@tramvai/core';
|
|
2
|
+
import { CREATE_CACHE_TOKEN, STORE_TOKEN, RESPONSE_MANAGER_TOKEN, REQUEST_MANAGER_TOKEN } from '@tramvai/tokens-common';
|
|
3
|
+
import { parseClientHints, parseUserAgentHeader } from '@tinkoff/user-agent';
|
|
4
|
+
import { USER_AGENT_TOKEN, PARSER_CLIENT_HINTS_ENABLED } from '../tokens.es.js';
|
|
5
|
+
import { setUserAgent } from '../shared/stores/userAgent.es.js';
|
|
6
|
+
|
|
7
|
+
const userAgentProviders = [
|
|
8
|
+
provide({
|
|
9
|
+
provide: 'userAgentLruCache',
|
|
10
|
+
scope: Scope.SINGLETON,
|
|
11
|
+
useFactory: ({ createCache }) => {
|
|
12
|
+
return createCache('memory', { max: 50 });
|
|
13
|
+
},
|
|
14
|
+
deps: {
|
|
15
|
+
createCache: CREATE_CACHE_TOKEN,
|
|
16
|
+
},
|
|
17
|
+
}),
|
|
18
|
+
provide({
|
|
19
|
+
provide: commandLineListTokens.customerStart,
|
|
20
|
+
multi: true,
|
|
21
|
+
useFactory: ({ store, userAgent }) => {
|
|
22
|
+
return function initUserAgent() {
|
|
23
|
+
return store.dispatch(setUserAgent(userAgent));
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
deps: {
|
|
27
|
+
userAgent: USER_AGENT_TOKEN,
|
|
28
|
+
store: STORE_TOKEN,
|
|
29
|
+
},
|
|
30
|
+
}),
|
|
31
|
+
provide({
|
|
32
|
+
provide: commandLineListTokens.customerStart,
|
|
33
|
+
multi: true,
|
|
34
|
+
useFactory: ({ responseManager }) => {
|
|
35
|
+
return function setClientHintsHeaders() {
|
|
36
|
+
responseManager.setHeader('Accept-CH', 'Sec-CH-UA-Platform-Version, Sec-CH-UA-Arch, Sec-CH-UA-Model');
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
deps: {
|
|
40
|
+
responseManager: RESPONSE_MANAGER_TOKEN,
|
|
41
|
+
},
|
|
42
|
+
}),
|
|
43
|
+
provide({
|
|
44
|
+
provide: USER_AGENT_TOKEN,
|
|
45
|
+
useFactory: ({ requestManager, cache, parserClientHintsEnabled }) => {
|
|
46
|
+
if (parserClientHintsEnabled && requestManager.getHeader('sec-ch-ua')) {
|
|
47
|
+
return parseClientHints(requestManager.getHeaders());
|
|
48
|
+
}
|
|
49
|
+
const userAgentHeader = requestManager.getHeader('user-agent');
|
|
50
|
+
if (cache.has(userAgentHeader)) {
|
|
51
|
+
return cache.get(userAgentHeader);
|
|
52
|
+
}
|
|
53
|
+
const result = parseUserAgentHeader(userAgentHeader);
|
|
54
|
+
cache.set(userAgentHeader, result);
|
|
55
|
+
return result;
|
|
56
|
+
},
|
|
57
|
+
deps: {
|
|
58
|
+
requestManager: REQUEST_MANAGER_TOKEN,
|
|
59
|
+
parserClientHintsEnabled: PARSER_CLIENT_HINTS_ENABLED,
|
|
60
|
+
cache: 'userAgentLruCache',
|
|
61
|
+
},
|
|
62
|
+
}),
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
export { userAgentProviders };
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var core = require('@tramvai/core');
|
|
6
|
+
var tokensCommon = require('@tramvai/tokens-common');
|
|
7
|
+
var userAgent$1 = require('@tinkoff/user-agent');
|
|
8
|
+
var tokens = require('../tokens.js');
|
|
9
|
+
var userAgent = require('../shared/stores/userAgent.js');
|
|
10
|
+
|
|
11
|
+
const userAgentProviders = [
|
|
12
|
+
core.provide({
|
|
13
|
+
provide: 'userAgentLruCache',
|
|
14
|
+
scope: core.Scope.SINGLETON,
|
|
15
|
+
useFactory: ({ createCache }) => {
|
|
16
|
+
return createCache('memory', { max: 50 });
|
|
17
|
+
},
|
|
18
|
+
deps: {
|
|
19
|
+
createCache: tokensCommon.CREATE_CACHE_TOKEN,
|
|
20
|
+
},
|
|
21
|
+
}),
|
|
22
|
+
core.provide({
|
|
23
|
+
provide: core.commandLineListTokens.customerStart,
|
|
24
|
+
multi: true,
|
|
25
|
+
useFactory: ({ store, userAgent: userAgent$1 }) => {
|
|
26
|
+
return function initUserAgent() {
|
|
27
|
+
return store.dispatch(userAgent.setUserAgent(userAgent$1));
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
deps: {
|
|
31
|
+
userAgent: tokens.USER_AGENT_TOKEN,
|
|
32
|
+
store: tokensCommon.STORE_TOKEN,
|
|
33
|
+
},
|
|
34
|
+
}),
|
|
35
|
+
core.provide({
|
|
36
|
+
provide: core.commandLineListTokens.customerStart,
|
|
37
|
+
multi: true,
|
|
38
|
+
useFactory: ({ responseManager }) => {
|
|
39
|
+
return function setClientHintsHeaders() {
|
|
40
|
+
responseManager.setHeader('Accept-CH', 'Sec-CH-UA-Platform-Version, Sec-CH-UA-Arch, Sec-CH-UA-Model');
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
deps: {
|
|
44
|
+
responseManager: tokensCommon.RESPONSE_MANAGER_TOKEN,
|
|
45
|
+
},
|
|
46
|
+
}),
|
|
47
|
+
core.provide({
|
|
48
|
+
provide: tokens.USER_AGENT_TOKEN,
|
|
49
|
+
useFactory: ({ requestManager, cache, parserClientHintsEnabled }) => {
|
|
50
|
+
if (parserClientHintsEnabled && requestManager.getHeader('sec-ch-ua')) {
|
|
51
|
+
return userAgent$1.parseClientHints(requestManager.getHeaders());
|
|
52
|
+
}
|
|
53
|
+
const userAgentHeader = requestManager.getHeader('user-agent');
|
|
54
|
+
if (cache.has(userAgentHeader)) {
|
|
55
|
+
return cache.get(userAgentHeader);
|
|
56
|
+
}
|
|
57
|
+
const result = userAgent$1.parseUserAgentHeader(userAgentHeader);
|
|
58
|
+
cache.set(userAgentHeader, result);
|
|
59
|
+
return result;
|
|
60
|
+
},
|
|
61
|
+
deps: {
|
|
62
|
+
requestManager: tokensCommon.REQUEST_MANAGER_TOKEN,
|
|
63
|
+
parserClientHintsEnabled: tokens.PARSER_CLIENT_HINTS_ENABLED,
|
|
64
|
+
cache: 'userAgentLruCache',
|
|
65
|
+
},
|
|
66
|
+
}),
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
exports.userAgentProviders = userAgentProviders;
|
package/lib/server.es.js
CHANGED
|
@@ -1,178 +1,17 @@
|
|
|
1
1
|
import { __decorate } from 'tslib';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { Module, provide, commandLineListTokens } from '@tramvai/core';
|
|
3
|
+
import { CONTEXT_TOKEN } from '@tramvai/tokens-common';
|
|
4
4
|
import { COOKIE_MANAGER_TOKEN } from '@tramvai/tokens-cookie';
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const initialState = {
|
|
16
|
-
height: 0,
|
|
17
|
-
width: 0,
|
|
18
|
-
isTouch: false,
|
|
19
|
-
retina: false,
|
|
20
|
-
synchronized: false,
|
|
21
|
-
};
|
|
22
|
-
const MediaStore = createReducer('media', initialState).on(setMedia, (state, media) => {
|
|
23
|
-
return {
|
|
24
|
-
...state,
|
|
25
|
-
...media,
|
|
26
|
-
};
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
const setUserAgent = createEvent('setUserAgent');
|
|
30
|
-
const UserAgentStore = createReducer('userAgent', null).on(setUserAgent, (state, userAgent) => {
|
|
31
|
-
return userAgent;
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
const SUPPOSED_MEDIA = {
|
|
35
|
-
mobile: {
|
|
36
|
-
width: 300,
|
|
37
|
-
height: 500,
|
|
38
|
-
isTouch: true,
|
|
39
|
-
retina: false,
|
|
40
|
-
},
|
|
41
|
-
tablet: {
|
|
42
|
-
width: 600,
|
|
43
|
-
height: 800,
|
|
44
|
-
isTouch: true,
|
|
45
|
-
retina: false,
|
|
46
|
-
},
|
|
47
|
-
desktop: {
|
|
48
|
-
width: 1024,
|
|
49
|
-
height: 768,
|
|
50
|
-
isTouch: false,
|
|
51
|
-
retina: false,
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
const readMediaCommand = ({ context, cookieManager, }) => {
|
|
55
|
-
return function readMedia() {
|
|
56
|
-
var _a;
|
|
57
|
-
const mediaInfo = safeParseJSON((_a = cookieManager.get(COOKIE_NAME_MEDIA_INFO)) !== null && _a !== void 0 ? _a : '');
|
|
58
|
-
if (mediaInfo) {
|
|
59
|
-
return context.dispatch(setMedia({
|
|
60
|
-
...mediaInfo,
|
|
61
|
-
supposed: false,
|
|
62
|
-
synchronized: true,
|
|
63
|
-
}));
|
|
64
|
-
}
|
|
65
|
-
const userAgent = context.getState(UserAgentStore);
|
|
66
|
-
const deviceType = pathOr(['device', 'type'], 'desktop', userAgent);
|
|
67
|
-
return context.dispatch(setMedia({
|
|
68
|
-
...SUPPOSED_MEDIA[deviceType],
|
|
69
|
-
supposed: true,
|
|
70
|
-
synchronized: false,
|
|
71
|
-
}));
|
|
72
|
-
};
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
const providers = [
|
|
76
|
-
{ provide: COMBINE_REDUCERS, multi: true, useValue: [UserAgentStore, MediaStore] },
|
|
77
|
-
];
|
|
78
|
-
|
|
79
|
-
const USER_AGENT_TOKEN = createToken('userAgent');
|
|
80
|
-
const PARSER_CLIENT_HINTS_ENABLED = createToken('client-hints parserClientHints enabled');
|
|
81
|
-
|
|
82
|
-
const userAgentProviders = [
|
|
83
|
-
provide({
|
|
84
|
-
provide: 'userAgentLruCache',
|
|
85
|
-
scope: Scope.SINGLETON,
|
|
86
|
-
useFactory: ({ createCache }) => {
|
|
87
|
-
return createCache('memory', { max: 50 });
|
|
88
|
-
},
|
|
89
|
-
deps: {
|
|
90
|
-
createCache: CREATE_CACHE_TOKEN,
|
|
91
|
-
},
|
|
92
|
-
}),
|
|
93
|
-
provide({
|
|
94
|
-
provide: commandLineListTokens.customerStart,
|
|
95
|
-
multi: true,
|
|
96
|
-
useFactory: ({ store, userAgent }) => {
|
|
97
|
-
return function initUserAgent() {
|
|
98
|
-
return store.dispatch(setUserAgent(userAgent));
|
|
99
|
-
};
|
|
100
|
-
},
|
|
101
|
-
deps: {
|
|
102
|
-
userAgent: USER_AGENT_TOKEN,
|
|
103
|
-
store: STORE_TOKEN,
|
|
104
|
-
},
|
|
105
|
-
}),
|
|
106
|
-
provide({
|
|
107
|
-
provide: commandLineListTokens.customerStart,
|
|
108
|
-
multi: true,
|
|
109
|
-
useFactory: ({ responseManager }) => {
|
|
110
|
-
return function setClientHintsHeaders() {
|
|
111
|
-
responseManager.setHeader('Accept-CH', 'Sec-CH-UA-Platform-Version, Sec-CH-UA-Arch, Sec-CH-UA-Model');
|
|
112
|
-
};
|
|
113
|
-
},
|
|
114
|
-
deps: {
|
|
115
|
-
responseManager: RESPONSE_MANAGER_TOKEN,
|
|
116
|
-
},
|
|
117
|
-
}),
|
|
118
|
-
provide({
|
|
119
|
-
provide: USER_AGENT_TOKEN,
|
|
120
|
-
useFactory: ({ requestManager, cache, parserClientHintsEnabled }) => {
|
|
121
|
-
if (parserClientHintsEnabled && requestManager.getHeader('sec-ch-ua')) {
|
|
122
|
-
return parseClientHints(requestManager.getHeaders());
|
|
123
|
-
}
|
|
124
|
-
const userAgentHeader = requestManager.getHeader('user-agent');
|
|
125
|
-
if (cache.has(userAgentHeader)) {
|
|
126
|
-
return cache.get(userAgentHeader);
|
|
127
|
-
}
|
|
128
|
-
const result = parseUserAgentHeader(userAgentHeader);
|
|
129
|
-
cache.set(userAgentHeader, result);
|
|
130
|
-
return result;
|
|
131
|
-
},
|
|
132
|
-
deps: {
|
|
133
|
-
requestManager: REQUEST_MANAGER_TOKEN,
|
|
134
|
-
parserClientHintsEnabled: PARSER_CLIENT_HINTS_ENABLED,
|
|
135
|
-
cache: 'userAgentLruCache',
|
|
136
|
-
},
|
|
137
|
-
}),
|
|
138
|
-
];
|
|
139
|
-
|
|
140
|
-
function fromClientHints(media) {
|
|
141
|
-
return !!media.synchronized;
|
|
142
|
-
}
|
|
143
|
-
function isSupposed(media) {
|
|
144
|
-
return !!media.supposed;
|
|
145
|
-
}
|
|
146
|
-
function isRetina(media) {
|
|
147
|
-
return !!media.retina;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
function useMedia() {
|
|
151
|
-
return useSelector('media', ({ media }) => media);
|
|
152
|
-
}
|
|
153
|
-
function useFromClientHints() {
|
|
154
|
-
return fromClientHints(useMedia());
|
|
155
|
-
}
|
|
156
|
-
function useIsSupposed() {
|
|
157
|
-
return isSupposed(useMedia());
|
|
158
|
-
}
|
|
159
|
-
function useIsRetina() {
|
|
160
|
-
return isRetina(useMedia());
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
let ClientHintsChildAppModule = class ClientHintsChildAppModule {
|
|
164
|
-
};
|
|
165
|
-
ClientHintsChildAppModule = __decorate([
|
|
166
|
-
Module({
|
|
167
|
-
providers: [
|
|
168
|
-
{
|
|
169
|
-
provide: CHILD_APP_INTERNAL_ROOT_STATE_ALLOWED_STORE_TOKEN,
|
|
170
|
-
multi: true,
|
|
171
|
-
useValue: [MediaStore, UserAgentStore],
|
|
172
|
-
},
|
|
173
|
-
],
|
|
174
|
-
})
|
|
175
|
-
], ClientHintsChildAppModule);
|
|
5
|
+
import { readMediaCommand } from './server/readMedia.es.js';
|
|
6
|
+
import { providers } from './shared/providers.es.js';
|
|
7
|
+
import { userAgentProviders } from './server/userAgent.es.js';
|
|
8
|
+
import { PARSER_CLIENT_HINTS_ENABLED } from './tokens.es.js';
|
|
9
|
+
export { PARSER_CLIENT_HINTS_ENABLED, USER_AGENT_TOKEN } from './tokens.es.js';
|
|
10
|
+
export { fromClientHints, isRetina, isSupposed } from './shared/stores/mediaCheckers.es.js';
|
|
11
|
+
export { useFromClientHints, useIsRetina, useIsSupposed, useMedia } from './shared/stores/mediaSelectors.es.js';
|
|
12
|
+
export { MediaStore, setMedia } from './shared/stores/media.es.js';
|
|
13
|
+
export { UserAgentStore, setUserAgent } from './shared/stores/userAgent.es.js';
|
|
14
|
+
export { ClientHintsChildAppModule } from './child-app/module.es.js';
|
|
176
15
|
|
|
177
16
|
let ClientHintsModule = class ClientHintsModule {
|
|
178
17
|
};
|
|
@@ -198,4 +37,4 @@ ClientHintsModule = __decorate([
|
|
|
198
37
|
})
|
|
199
38
|
], ClientHintsModule);
|
|
200
39
|
|
|
201
|
-
export {
|
|
40
|
+
export { ClientHintsModule };
|
package/lib/server.js
CHANGED
|
@@ -6,216 +6,54 @@ var tslib = require('tslib');
|
|
|
6
6
|
var core = require('@tramvai/core');
|
|
7
7
|
var tokensCommon = require('@tramvai/tokens-common');
|
|
8
8
|
var tokensCookie = require('@tramvai/tokens-cookie');
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
var pathOr__default = /*#__PURE__*/_interopDefaultLegacy(pathOr);
|
|
19
|
-
|
|
20
|
-
const COOKIE_NAME_MEDIA_INFO = 'mediaInfo';
|
|
21
|
-
|
|
22
|
-
const setMedia = state.createEvent('setMedia');
|
|
23
|
-
const initialState = {
|
|
24
|
-
height: 0,
|
|
25
|
-
width: 0,
|
|
26
|
-
isTouch: false,
|
|
27
|
-
retina: false,
|
|
28
|
-
synchronized: false,
|
|
29
|
-
};
|
|
30
|
-
const MediaStore = state.createReducer('media', initialState).on(setMedia, (state, media) => {
|
|
31
|
-
return {
|
|
32
|
-
...state,
|
|
33
|
-
...media,
|
|
34
|
-
};
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
const setUserAgent = state.createEvent('setUserAgent');
|
|
38
|
-
const UserAgentStore = state.createReducer('userAgent', null).on(setUserAgent, (state, userAgent) => {
|
|
39
|
-
return userAgent;
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
const SUPPOSED_MEDIA = {
|
|
43
|
-
mobile: {
|
|
44
|
-
width: 300,
|
|
45
|
-
height: 500,
|
|
46
|
-
isTouch: true,
|
|
47
|
-
retina: false,
|
|
48
|
-
},
|
|
49
|
-
tablet: {
|
|
50
|
-
width: 600,
|
|
51
|
-
height: 800,
|
|
52
|
-
isTouch: true,
|
|
53
|
-
retina: false,
|
|
54
|
-
},
|
|
55
|
-
desktop: {
|
|
56
|
-
width: 1024,
|
|
57
|
-
height: 768,
|
|
58
|
-
isTouch: false,
|
|
59
|
-
retina: false,
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
const readMediaCommand = ({ context, cookieManager, }) => {
|
|
63
|
-
return function readMedia() {
|
|
64
|
-
var _a;
|
|
65
|
-
const mediaInfo = safeStrings.safeParseJSON((_a = cookieManager.get(COOKIE_NAME_MEDIA_INFO)) !== null && _a !== void 0 ? _a : '');
|
|
66
|
-
if (mediaInfo) {
|
|
67
|
-
return context.dispatch(setMedia({
|
|
68
|
-
...mediaInfo,
|
|
69
|
-
supposed: false,
|
|
70
|
-
synchronized: true,
|
|
71
|
-
}));
|
|
72
|
-
}
|
|
73
|
-
const userAgent = context.getState(UserAgentStore);
|
|
74
|
-
const deviceType = pathOr__default["default"](['device', 'type'], 'desktop', userAgent);
|
|
75
|
-
return context.dispatch(setMedia({
|
|
76
|
-
...SUPPOSED_MEDIA[deviceType],
|
|
77
|
-
supposed: true,
|
|
78
|
-
synchronized: false,
|
|
79
|
-
}));
|
|
80
|
-
};
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
const providers = [
|
|
84
|
-
{ provide: tokensCommon.COMBINE_REDUCERS, multi: true, useValue: [UserAgentStore, MediaStore] },
|
|
85
|
-
];
|
|
86
|
-
|
|
87
|
-
const USER_AGENT_TOKEN = dippy.createToken('userAgent');
|
|
88
|
-
const PARSER_CLIENT_HINTS_ENABLED = dippy.createToken('client-hints parserClientHints enabled');
|
|
89
|
-
|
|
90
|
-
const userAgentProviders = [
|
|
91
|
-
core.provide({
|
|
92
|
-
provide: 'userAgentLruCache',
|
|
93
|
-
scope: core.Scope.SINGLETON,
|
|
94
|
-
useFactory: ({ createCache }) => {
|
|
95
|
-
return createCache('memory', { max: 50 });
|
|
96
|
-
},
|
|
97
|
-
deps: {
|
|
98
|
-
createCache: tokensCommon.CREATE_CACHE_TOKEN,
|
|
99
|
-
},
|
|
100
|
-
}),
|
|
101
|
-
core.provide({
|
|
102
|
-
provide: core.commandLineListTokens.customerStart,
|
|
103
|
-
multi: true,
|
|
104
|
-
useFactory: ({ store, userAgent }) => {
|
|
105
|
-
return function initUserAgent() {
|
|
106
|
-
return store.dispatch(setUserAgent(userAgent));
|
|
107
|
-
};
|
|
108
|
-
},
|
|
109
|
-
deps: {
|
|
110
|
-
userAgent: USER_AGENT_TOKEN,
|
|
111
|
-
store: tokensCommon.STORE_TOKEN,
|
|
112
|
-
},
|
|
113
|
-
}),
|
|
114
|
-
core.provide({
|
|
115
|
-
provide: core.commandLineListTokens.customerStart,
|
|
116
|
-
multi: true,
|
|
117
|
-
useFactory: ({ responseManager }) => {
|
|
118
|
-
return function setClientHintsHeaders() {
|
|
119
|
-
responseManager.setHeader('Accept-CH', 'Sec-CH-UA-Platform-Version, Sec-CH-UA-Arch, Sec-CH-UA-Model');
|
|
120
|
-
};
|
|
121
|
-
},
|
|
122
|
-
deps: {
|
|
123
|
-
responseManager: tokensCommon.RESPONSE_MANAGER_TOKEN,
|
|
124
|
-
},
|
|
125
|
-
}),
|
|
126
|
-
core.provide({
|
|
127
|
-
provide: USER_AGENT_TOKEN,
|
|
128
|
-
useFactory: ({ requestManager, cache, parserClientHintsEnabled }) => {
|
|
129
|
-
if (parserClientHintsEnabled && requestManager.getHeader('sec-ch-ua')) {
|
|
130
|
-
return userAgent.parseClientHints(requestManager.getHeaders());
|
|
131
|
-
}
|
|
132
|
-
const userAgentHeader = requestManager.getHeader('user-agent');
|
|
133
|
-
if (cache.has(userAgentHeader)) {
|
|
134
|
-
return cache.get(userAgentHeader);
|
|
135
|
-
}
|
|
136
|
-
const result = userAgent.parseUserAgentHeader(userAgentHeader);
|
|
137
|
-
cache.set(userAgentHeader, result);
|
|
138
|
-
return result;
|
|
139
|
-
},
|
|
140
|
-
deps: {
|
|
141
|
-
requestManager: tokensCommon.REQUEST_MANAGER_TOKEN,
|
|
142
|
-
parserClientHintsEnabled: PARSER_CLIENT_HINTS_ENABLED,
|
|
143
|
-
cache: 'userAgentLruCache',
|
|
144
|
-
},
|
|
145
|
-
}),
|
|
146
|
-
];
|
|
147
|
-
|
|
148
|
-
function fromClientHints(media) {
|
|
149
|
-
return !!media.synchronized;
|
|
150
|
-
}
|
|
151
|
-
function isSupposed(media) {
|
|
152
|
-
return !!media.supposed;
|
|
153
|
-
}
|
|
154
|
-
function isRetina(media) {
|
|
155
|
-
return !!media.retina;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
function useMedia() {
|
|
159
|
-
return state.useSelector('media', ({ media }) => media);
|
|
160
|
-
}
|
|
161
|
-
function useFromClientHints() {
|
|
162
|
-
return fromClientHints(useMedia());
|
|
163
|
-
}
|
|
164
|
-
function useIsSupposed() {
|
|
165
|
-
return isSupposed(useMedia());
|
|
166
|
-
}
|
|
167
|
-
function useIsRetina() {
|
|
168
|
-
return isRetina(useMedia());
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
exports.ClientHintsChildAppModule = class ClientHintsChildAppModule {
|
|
172
|
-
};
|
|
173
|
-
exports.ClientHintsChildAppModule = tslib.__decorate([
|
|
174
|
-
core.Module({
|
|
175
|
-
providers: [
|
|
176
|
-
{
|
|
177
|
-
provide: tokensChildApp.CHILD_APP_INTERNAL_ROOT_STATE_ALLOWED_STORE_TOKEN,
|
|
178
|
-
multi: true,
|
|
179
|
-
useValue: [MediaStore, UserAgentStore],
|
|
180
|
-
},
|
|
181
|
-
],
|
|
182
|
-
})
|
|
183
|
-
], exports.ClientHintsChildAppModule);
|
|
9
|
+
var readMedia = require('./server/readMedia.js');
|
|
10
|
+
var providers = require('./shared/providers.js');
|
|
11
|
+
var userAgent$1 = require('./server/userAgent.js');
|
|
12
|
+
var tokens = require('./tokens.js');
|
|
13
|
+
var mediaCheckers = require('./shared/stores/mediaCheckers.js');
|
|
14
|
+
var mediaSelectors = require('./shared/stores/mediaSelectors.js');
|
|
15
|
+
var media = require('./shared/stores/media.js');
|
|
16
|
+
var userAgent = require('./shared/stores/userAgent.js');
|
|
17
|
+
var module$1 = require('./child-app/module.js');
|
|
184
18
|
|
|
185
19
|
exports.ClientHintsModule = class ClientHintsModule {
|
|
186
20
|
};
|
|
187
21
|
exports.ClientHintsModule = tslib.__decorate([
|
|
188
22
|
core.Module({
|
|
189
23
|
providers: [
|
|
190
|
-
...providers,
|
|
191
|
-
...userAgentProviders,
|
|
24
|
+
...providers.providers,
|
|
25
|
+
...userAgent$1.userAgentProviders,
|
|
192
26
|
core.provide({
|
|
193
27
|
provide: core.commandLineListTokens.resolveUserDeps,
|
|
194
28
|
multi: true,
|
|
195
|
-
useFactory: readMediaCommand,
|
|
29
|
+
useFactory: readMedia.readMediaCommand,
|
|
196
30
|
deps: {
|
|
197
31
|
context: tokensCommon.CONTEXT_TOKEN,
|
|
198
32
|
cookieManager: tokensCookie.COOKIE_MANAGER_TOKEN,
|
|
199
33
|
},
|
|
200
34
|
}),
|
|
201
35
|
core.provide({
|
|
202
|
-
provide: PARSER_CLIENT_HINTS_ENABLED,
|
|
36
|
+
provide: tokens.PARSER_CLIENT_HINTS_ENABLED,
|
|
203
37
|
useValue: true,
|
|
204
38
|
}),
|
|
205
39
|
],
|
|
206
40
|
})
|
|
207
41
|
], exports.ClientHintsModule);
|
|
208
42
|
|
|
209
|
-
exports.
|
|
210
|
-
exports.
|
|
211
|
-
exports.
|
|
212
|
-
exports.
|
|
213
|
-
exports.
|
|
214
|
-
exports.
|
|
215
|
-
exports.
|
|
216
|
-
exports.
|
|
217
|
-
exports.
|
|
218
|
-
exports.
|
|
219
|
-
exports.
|
|
220
|
-
exports.
|
|
221
|
-
exports.
|
|
43
|
+
exports.PARSER_CLIENT_HINTS_ENABLED = tokens.PARSER_CLIENT_HINTS_ENABLED;
|
|
44
|
+
exports.USER_AGENT_TOKEN = tokens.USER_AGENT_TOKEN;
|
|
45
|
+
exports.fromClientHints = mediaCheckers.fromClientHints;
|
|
46
|
+
exports.isRetina = mediaCheckers.isRetina;
|
|
47
|
+
exports.isSupposed = mediaCheckers.isSupposed;
|
|
48
|
+
exports.useFromClientHints = mediaSelectors.useFromClientHints;
|
|
49
|
+
exports.useIsRetina = mediaSelectors.useIsRetina;
|
|
50
|
+
exports.useIsSupposed = mediaSelectors.useIsSupposed;
|
|
51
|
+
exports.useMedia = mediaSelectors.useMedia;
|
|
52
|
+
exports.MediaStore = media.MediaStore;
|
|
53
|
+
exports.setMedia = media.setMedia;
|
|
54
|
+
exports.UserAgentStore = userAgent.UserAgentStore;
|
|
55
|
+
exports.setUserAgent = userAgent.setUserAgent;
|
|
56
|
+
Object.defineProperty(exports, 'ClientHintsChildAppModule', {
|
|
57
|
+
enumerable: true,
|
|
58
|
+
get: function () { return module$1.ClientHintsChildAppModule; }
|
|
59
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { COMBINE_REDUCERS } from '@tramvai/tokens-common';
|
|
2
|
+
import { UserAgentStore } from './stores/userAgent.browser.js';
|
|
3
|
+
import { MediaStore } from './stores/media.browser.js';
|
|
4
|
+
|
|
5
|
+
const providers = [
|
|
6
|
+
{ provide: COMBINE_REDUCERS, multi: true, useValue: [UserAgentStore, MediaStore] },
|
|
7
|
+
];
|
|
8
|
+
|
|
9
|
+
export { providers };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { COMBINE_REDUCERS } from '@tramvai/tokens-common';
|
|
2
|
+
import { UserAgentStore } from './stores/userAgent.es.js';
|
|
3
|
+
import { MediaStore } from './stores/media.es.js';
|
|
4
|
+
|
|
5
|
+
const providers = [
|
|
6
|
+
{ provide: COMBINE_REDUCERS, multi: true, useValue: [UserAgentStore, MediaStore] },
|
|
7
|
+
];
|
|
8
|
+
|
|
9
|
+
export { providers };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var tokensCommon = require('@tramvai/tokens-common');
|
|
6
|
+
var userAgent = require('./stores/userAgent.js');
|
|
7
|
+
var media = require('./stores/media.js');
|
|
8
|
+
|
|
9
|
+
const providers = [
|
|
10
|
+
{ provide: tokensCommon.COMBINE_REDUCERS, multi: true, useValue: [userAgent.UserAgentStore, media.MediaStore] },
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
exports.providers = providers;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createEvent, createReducer } from '@tramvai/state';
|
|
2
|
+
|
|
3
|
+
const setMedia = createEvent('setMedia');
|
|
4
|
+
const initialState = {
|
|
5
|
+
height: 0,
|
|
6
|
+
width: 0,
|
|
7
|
+
isTouch: false,
|
|
8
|
+
retina: false,
|
|
9
|
+
synchronized: false,
|
|
10
|
+
};
|
|
11
|
+
const MediaStore = createReducer('media', initialState).on(setMedia, (state, media) => {
|
|
12
|
+
return {
|
|
13
|
+
...state,
|
|
14
|
+
...media,
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export { MediaStore, setMedia };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createEvent, createReducer } from '@tramvai/state';
|
|
2
|
+
|
|
3
|
+
const setMedia = createEvent('setMedia');
|
|
4
|
+
const initialState = {
|
|
5
|
+
height: 0,
|
|
6
|
+
width: 0,
|
|
7
|
+
isTouch: false,
|
|
8
|
+
retina: false,
|
|
9
|
+
synchronized: false,
|
|
10
|
+
};
|
|
11
|
+
const MediaStore = createReducer('media', initialState).on(setMedia, (state, media) => {
|
|
12
|
+
return {
|
|
13
|
+
...state,
|
|
14
|
+
...media,
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export { MediaStore, setMedia };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var state = require('@tramvai/state');
|
|
6
|
+
|
|
7
|
+
const setMedia = state.createEvent('setMedia');
|
|
8
|
+
const initialState = {
|
|
9
|
+
height: 0,
|
|
10
|
+
width: 0,
|
|
11
|
+
isTouch: false,
|
|
12
|
+
retina: false,
|
|
13
|
+
synchronized: false,
|
|
14
|
+
};
|
|
15
|
+
const MediaStore = state.createReducer('media', initialState).on(setMedia, (state, media) => {
|
|
16
|
+
return {
|
|
17
|
+
...state,
|
|
18
|
+
...media,
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
exports.MediaStore = MediaStore;
|
|
23
|
+
exports.setMedia = setMedia;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
function fromClientHints(media) {
|
|
6
|
+
return !!media.synchronized;
|
|
7
|
+
}
|
|
8
|
+
function isSupposed(media) {
|
|
9
|
+
return !!media.supposed;
|
|
10
|
+
}
|
|
11
|
+
function isRetina(media) {
|
|
12
|
+
return !!media.retina;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
exports.fromClientHints = fromClientHints;
|
|
16
|
+
exports.isRetina = isRetina;
|
|
17
|
+
exports.isSupposed = isSupposed;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useSelector } from '@tramvai/state';
|
|
2
|
+
import { fromClientHints, isSupposed, isRetina } from './mediaCheckers.browser.js';
|
|
3
|
+
|
|
4
|
+
function useMedia() {
|
|
5
|
+
return useSelector('media', ({ media }) => media);
|
|
6
|
+
}
|
|
7
|
+
function useFromClientHints() {
|
|
8
|
+
return fromClientHints(useMedia());
|
|
9
|
+
}
|
|
10
|
+
function useIsSupposed() {
|
|
11
|
+
return isSupposed(useMedia());
|
|
12
|
+
}
|
|
13
|
+
function useIsRetina() {
|
|
14
|
+
return isRetina(useMedia());
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { useFromClientHints, useIsRetina, useIsSupposed, useMedia };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useSelector } from '@tramvai/state';
|
|
2
|
+
import { fromClientHints, isSupposed, isRetina } from './mediaCheckers.es.js';
|
|
3
|
+
|
|
4
|
+
function useMedia() {
|
|
5
|
+
return useSelector('media', ({ media }) => media);
|
|
6
|
+
}
|
|
7
|
+
function useFromClientHints() {
|
|
8
|
+
return fromClientHints(useMedia());
|
|
9
|
+
}
|
|
10
|
+
function useIsSupposed() {
|
|
11
|
+
return isSupposed(useMedia());
|
|
12
|
+
}
|
|
13
|
+
function useIsRetina() {
|
|
14
|
+
return isRetina(useMedia());
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { useFromClientHints, useIsRetina, useIsSupposed, useMedia };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var state = require('@tramvai/state');
|
|
6
|
+
var mediaCheckers = require('./mediaCheckers.js');
|
|
7
|
+
|
|
8
|
+
function useMedia() {
|
|
9
|
+
return state.useSelector('media', ({ media }) => media);
|
|
10
|
+
}
|
|
11
|
+
function useFromClientHints() {
|
|
12
|
+
return mediaCheckers.fromClientHints(useMedia());
|
|
13
|
+
}
|
|
14
|
+
function useIsSupposed() {
|
|
15
|
+
return mediaCheckers.isSupposed(useMedia());
|
|
16
|
+
}
|
|
17
|
+
function useIsRetina() {
|
|
18
|
+
return mediaCheckers.isRetina(useMedia());
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
exports.useFromClientHints = useFromClientHints;
|
|
22
|
+
exports.useIsRetina = useIsRetina;
|
|
23
|
+
exports.useIsSupposed = useIsSupposed;
|
|
24
|
+
exports.useMedia = useMedia;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createEvent, createReducer } from '@tramvai/state';
|
|
2
|
+
|
|
3
|
+
const setUserAgent = createEvent('setUserAgent');
|
|
4
|
+
const UserAgentStore = createReducer('userAgent', null).on(setUserAgent, (state, userAgent) => {
|
|
5
|
+
return userAgent;
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
export { UserAgentStore, setUserAgent };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createEvent, createReducer } from '@tramvai/state';
|
|
2
|
+
|
|
3
|
+
const setUserAgent = createEvent('setUserAgent');
|
|
4
|
+
const UserAgentStore = createReducer('userAgent', null).on(setUserAgent, (state, userAgent) => {
|
|
5
|
+
return userAgent;
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
export { UserAgentStore, setUserAgent };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var state = require('@tramvai/state');
|
|
6
|
+
|
|
7
|
+
const setUserAgent = state.createEvent('setUserAgent');
|
|
8
|
+
const UserAgentStore = state.createReducer('userAgent', null).on(setUserAgent, (state, userAgent) => {
|
|
9
|
+
return userAgent;
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
exports.UserAgentStore = UserAgentStore;
|
|
13
|
+
exports.setUserAgent = setUserAgent;
|
package/lib/tokens.es.js
ADDED
package/lib/tokens.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var dippy = require('@tinkoff/dippy');
|
|
6
|
+
|
|
7
|
+
const USER_AGENT_TOKEN = dippy.createToken('userAgent');
|
|
8
|
+
const PARSER_CLIENT_HINTS_ENABLED = dippy.createToken('client-hints parserClientHints enabled');
|
|
9
|
+
|
|
10
|
+
exports.PARSER_CLIENT_HINTS_ENABLED = PARSER_CLIENT_HINTS_ENABLED;
|
|
11
|
+
exports.USER_AGENT_TOKEN = USER_AGENT_TOKEN;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/module-client-hints",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.72.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/server.js",
|
|
6
6
|
"module": "lib/server.es.js",
|
|
@@ -15,22 +15,21 @@
|
|
|
15
15
|
"url": "git@github.com:Tinkoff/tramvai.git"
|
|
16
16
|
},
|
|
17
17
|
"scripts": {
|
|
18
|
-
"build": "tramvai-build --
|
|
19
|
-
"watch": "tsc -w"
|
|
20
|
-
"build-for-publish": "true"
|
|
18
|
+
"build": "tramvai-build --forPublish --preserveModules",
|
|
19
|
+
"watch": "tsc -w"
|
|
21
20
|
},
|
|
22
21
|
"dependencies": {
|
|
23
|
-
"@tinkoff/user-agent": "0.4.
|
|
22
|
+
"@tinkoff/user-agent": "0.4.181",
|
|
24
23
|
"@tinkoff/utils": "^2.1.2",
|
|
25
|
-
"@tramvai/safe-strings": "0.5.
|
|
26
|
-
"@tramvai/tokens-common": "2.
|
|
27
|
-
"@tramvai/tokens-cookie": "2.
|
|
28
|
-
"@tramvai/tokens-child-app": "2.
|
|
24
|
+
"@tramvai/safe-strings": "0.5.7",
|
|
25
|
+
"@tramvai/tokens-common": "2.72.3",
|
|
26
|
+
"@tramvai/tokens-cookie": "2.72.3",
|
|
27
|
+
"@tramvai/tokens-child-app": "2.72.3"
|
|
29
28
|
},
|
|
30
29
|
"peerDependencies": {
|
|
31
|
-
"@tramvai/core": "2.
|
|
32
|
-
"@tramvai/state": "2.
|
|
33
|
-
"@tinkoff/dippy": "0.8.
|
|
30
|
+
"@tramvai/core": "2.72.3",
|
|
31
|
+
"@tramvai/state": "2.72.3",
|
|
32
|
+
"@tinkoff/dippy": "0.8.13",
|
|
34
33
|
"react": ">=16.14.0",
|
|
35
34
|
"react-dom": ">=16.14.0",
|
|
36
35
|
"tslib": "^2.4.0"
|