@sima-land/isomorph 11.0.0-alpha.42 → 11.0.0-alpha.44
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/dist/cjs/package.json +2 -2
- package/dist/cjs/preset/node/handler/utils/index.js +2 -2
- package/dist/cjs/preset/node/handler/utils/index.js.map +1 -1
- package/dist/cjs/utils/web/storage/index.js +17 -18
- package/dist/cjs/utils/web/storage/index.js.map +1 -1
- package/dist/esm/package.json +2 -2
- package/dist/esm/preset/node/handler/utils/index.js +2 -2
- package/dist/esm/preset/node/handler/utils/index.js.map +1 -1
- package/dist/esm/utils/web/storage/index.js +16 -17
- package/dist/esm/utils/web/storage/index.js.map +1 -1
- package/dist/types/preset/node/handler/utils/index.d.ts.map +1 -1
- package/dist/types/utils/web/storage/index.d.ts +2 -3
- package/dist/types/utils/web/storage/index.d.ts.map +1 -1
- package/package.json +11 -2
- package/src/preset/node/handler/utils/index.tsx +2 -2
- package/src/utils/web/storage/index.ts +18 -19
package/dist/cjs/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "commonjs",
|
|
3
3
|
"name": "@sima-land/isomorph",
|
|
4
|
-
"version": "11.0.0-alpha.
|
|
4
|
+
"version": "11.0.0-alpha.44",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@humanwhocodes/env": "^2.2.2",
|
|
7
|
-
"@krutoo/fetch-tools": "^0.0.
|
|
7
|
+
"@krutoo/fetch-tools": "^0.0.11",
|
|
8
8
|
"@opentelemetry/api": "^1.4.1",
|
|
9
9
|
"@opentelemetry/exporter-prometheus": "^0.38.0",
|
|
10
10
|
"@opentelemetry/exporter-trace-otlp-http": "^0.39.1",
|
|
@@ -115,9 +115,9 @@ function getResponseFormat(req) {
|
|
|
115
115
|
* @return Обработчик.
|
|
116
116
|
*/
|
|
117
117
|
function HandlerProvider(getApp) {
|
|
118
|
-
return
|
|
118
|
+
return resolve => {
|
|
119
119
|
const parent = resolve(_di.CURRENT_APP);
|
|
120
|
-
return
|
|
120
|
+
return (req, res, next) => {
|
|
121
121
|
const app = getApp();
|
|
122
122
|
app.attach(parent);
|
|
123
123
|
app.bind(_tokens.KnownToken.Http.Handler.context).toValue({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","require","_di","_tokens","_jsxRuntime","HelmetContext","exports","createContext","resetCSS","RegularHelmet","children","title","assets","useContext","jsxs","jsx","charSet","httpEquiv","content","name","href","rel","dangerouslySetInnerHTML","__html","criticalCss","css","criticalJs","src","js","SpecificExtras","setMeta","meta","_meta","getMeta","getResponseFormat","req","result","header","toLowerCase","includes","HandlerProvider","getApp","
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","require","_di","_tokens","_jsxRuntime","HelmetContext","exports","createContext","resetCSS","RegularHelmet","children","title","assets","useContext","jsxs","jsx","charSet","httpEquiv","content","name","href","rel","dangerouslySetInnerHTML","__html","criticalCss","css","criticalJs","src","js","SpecificExtras","setMeta","meta","_meta","getMeta","getResponseFormat","req","result","header","toLowerCase","includes","HandlerProvider","getApp","resolve","parent","CURRENT_APP","res","next","app","attach","bind","KnownToken","Http","Handler","context","toValue","get","main"],"sources":["../../../../../../src/preset/node/handler/utils/index.tsx"],"sourcesContent":["import { ReactNode, createContext, useContext } from 'react';\nimport { PageAssets } from '../../../isomorphic/types';\nimport { Handler, Request } from 'express';\nimport { Application, CURRENT_APP, Resolve } from '../../../../di';\nimport { KnownToken } from '../../../../tokens';\n\nexport const HelmetContext = createContext<{ title?: string; assets?: PageAssets }>({});\n\nconst resetCSS = `\n* {\n box-sizing: border-box;\n}\nbody {\n font-family: -apple-system,BlinkMacSystemFont,'Source Sans Pro',\"Segoe UI\",Roboto,\"Helvetica Neue\",Ubuntu,Arial,sans-serif;\n margin: 0;\n}\n`;\n\n/**\n * Простой Helmet-компонент.\n * Выведет html, head и body.\n * @param props Свойства.\n * @return Элемент.\n */\nexport function RegularHelmet({ children }: { children?: ReactNode }) {\n const { title, assets } = useContext(HelmetContext);\n\n return (\n <html>\n <head>\n <meta charSet='UTF-8' />\n <meta httpEquiv='X-UA-Compatible' content='IE=edge' />\n <meta name='viewport' content='width=device-width, initial-scale=1' />\n <title>{title ?? 'Document'}</title>\n <link\n href='https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,200;0,300;0,400;0,600;0,700;0,900;1,200;1,300;1,400;1,600;1,700;1,900&display=swap'\n rel='stylesheet'\n />\n <style dangerouslySetInnerHTML={{ __html: resetCSS }} />\n\n {assets?.criticalCss && <link rel='stylesheet' href={assets.criticalCss} />}\n {assets?.css && <link rel='stylesheet' href={assets.css} />}\n {assets?.criticalJs && <script src={assets.criticalJs} />}\n </head>\n <body>\n {children}\n {assets?.js && <script src={assets.js} />}\n </body>\n </html>\n );\n}\n\n/**\n * Специфичные для наших микросервисов дополнительные данные ответа.\n */\nexport class SpecificExtras {\n private _meta: any;\n\n /**\n * Установит мета-данные.\n * @param meta Данные.\n * @return Контекст.\n */\n setMeta(meta: any): this {\n this._meta = meta;\n return this;\n }\n\n /**\n * Вернет установленные мета-данные.\n * @return Данные.\n */\n getMeta(): unknown {\n return this._meta;\n }\n}\n\n/**\n * Определит формат ответа.\n * @param req Запрос.\n * @return Формат.\n */\nexport function getResponseFormat(req: Request): 'html' | 'json' {\n let result: 'html' | 'json' = 'html';\n\n if ((req.header('accept') || '').toLowerCase().includes('application/json')) {\n result = 'json';\n }\n\n return result;\n}\n\n/**\n * Возвращает express-handler, создающий дочернее di-приложение при запросе.\n * @param getApp Должна вернуть di-приложения запроса.\n * @return Обработчик.\n */\nexport function HandlerProvider(getApp: () => Application) {\n return (resolve: Resolve): Handler => {\n const parent = resolve(CURRENT_APP);\n\n return (req, res, next) => {\n const app = getApp();\n\n app.attach(parent);\n app.bind(KnownToken.Http.Handler.context).toValue({ req, res, next });\n app.get(KnownToken.Http.Handler.main)();\n };\n };\n}\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA,IAAAC,GAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAAgD,IAAAG,WAAA,GAAAH,OAAA;AAEzC,MAAMI,aAAa,GAAAC,OAAA,CAAAD,aAAA,gBAAG,IAAAE,oBAAa,EAA0C,CAAC,CAAC,CAAC;AAEvF,MAAMC,QAAQ,GAAI;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,aAAaA,CAAC;EAAEC;AAAmC,CAAC,EAAE;EACpE,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAG,IAAAC,iBAAU,EAACR,aAAa,CAAC;EAEnD,oBACE,IAAAD,WAAA,CAAAU,IAAA;IAAAJ,QAAA,gBACE,IAAAN,WAAA,CAAAU,IAAA;MAAAJ,QAAA,gBACE,IAAAN,WAAA,CAAAW,GAAA;QAAMC,OAAO,EAAC;MAAO,CAAE,CAAC,eACxB,IAAAZ,WAAA,CAAAW,GAAA;QAAME,SAAS,EAAC,iBAAiB;QAACC,OAAO,EAAC;MAAS,CAAE,CAAC,eACtD,IAAAd,WAAA,CAAAW,GAAA;QAAMI,IAAI,EAAC,UAAU;QAACD,OAAO,EAAC;MAAqC,CAAE,CAAC,eACtE,IAAAd,WAAA,CAAAW,GAAA;QAAAL,QAAA,EAAQC,KAAK,IAAI;MAAU,CAAQ,CAAC,eACpC,IAAAP,WAAA,CAAAW,GAAA;QACEK,IAAI,EAAC,yJAA6J;QAClKC,GAAG,EAAC;MAAY,CACjB,CAAC,eACF,IAAAjB,WAAA,CAAAW,GAAA;QAAOO,uBAAuB,EAAE;UAAEC,MAAM,EAAEf;QAAS;MAAE,CAAE,CAAC,EAEvDI,MAAM,EAAEY,WAAW,iBAAI,IAAApB,WAAA,CAAAW,GAAA;QAAMM,GAAG,EAAC,YAAY;QAACD,IAAI,EAAER,MAAM,CAACY;MAAY,CAAE,CAAC,EAC1EZ,MAAM,EAAEa,GAAG,iBAAI,IAAArB,WAAA,CAAAW,GAAA;QAAMM,GAAG,EAAC,YAAY;QAACD,IAAI,EAAER,MAAM,CAACa;MAAI,CAAE,CAAC,EAC1Db,MAAM,EAAEc,UAAU,iBAAI,IAAAtB,WAAA,CAAAW,GAAA;QAAQY,GAAG,EAAEf,MAAM,CAACc;MAAW,CAAE,CAAC;IAAA,CACrD,CAAC,eACP,IAAAtB,WAAA,CAAAU,IAAA;MAAAJ,QAAA,GACGA,QAAQ,EACRE,MAAM,EAAEgB,EAAE,iBAAI,IAAAxB,WAAA,CAAAW,GAAA;QAAQY,GAAG,EAAEf,MAAM,CAACgB;MAAG,CAAE,CAAC;IAAA,CACrC,CAAC;EAAA,CACH,CAAC;AAEX;;AAEA;AACA;AACA;AACO,MAAMC,cAAc,CAAC;EAG1B;AACF;AACA;AACA;AACA;EACEC,OAAOA,CAACC,IAAS,EAAQ;IACvB,IAAI,CAACC,KAAK,GAAGD,IAAI;IACjB,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;EACEE,OAAOA,CAAA,EAAY;IACjB,OAAO,IAAI,CAACD,KAAK;EACnB;AACF;;AAEA;AACA;AACA;AACA;AACA;AAJA1B,OAAA,CAAAuB,cAAA,GAAAA,cAAA;AAKO,SAASK,iBAAiBA,CAACC,GAAY,EAAmB;EAC/D,IAAIC,MAAuB,GAAG,MAAM;EAEpC,IAAI,CAACD,GAAG,CAACE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAEC,WAAW,CAAC,CAAC,CAACC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;IAC3EH,MAAM,GAAG,MAAM;EACjB;EAEA,OAAOA,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASI,eAAeA,CAACC,MAAyB,EAAE;EACzD,OAAQC,OAAgB,IAAc;IACpC,MAAMC,MAAM,GAAGD,OAAO,CAACE,eAAW,CAAC;IAEnC,OAAO,CAACT,GAAG,EAAEU,GAAG,EAAEC,IAAI,KAAK;MACzB,MAAMC,GAAG,GAAGN,MAAM,CAAC,CAAC;MAEpBM,GAAG,CAACC,MAAM,CAACL,MAAM,CAAC;MAClBI,GAAG,CAACE,IAAI,CAACC,kBAAU,CAACC,IAAI,CAACC,OAAO,CAACC,OAAO,CAAC,CAACC,OAAO,CAAC;QAAEnB,GAAG;QAAEU,GAAG;QAAEC;MAAK,CAAC,CAAC;MACrEC,GAAG,CAACQ,GAAG,CAACL,kBAAU,CAACC,IAAI,CAACC,OAAO,CAACI,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;EACH,CAAC;AACH"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.createSafeStorage = createSafeStorage;
|
|
7
7
|
/* eslint-disable require-jsdoc, jsdoc/require-jsdoc */
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -14,10 +14,9 @@ exports.createStorageUtils = createStorageUtils;
|
|
|
14
14
|
* Возвращает объект для безопасной работы с браузерным хранилищем (LocalStorage, SessionStorage).
|
|
15
15
|
* @param getStorage Функция, которая должна вернуть целевое хранилище.
|
|
16
16
|
* @return Объект-обертка для безопасной работы с браузерным хранилищем.
|
|
17
|
-
* @todo Пересмотреть и перенести из browser?
|
|
18
17
|
*/
|
|
19
|
-
function
|
|
20
|
-
|
|
18
|
+
function createSafeStorage(getStorage) {
|
|
19
|
+
const isAvailable = () => {
|
|
21
20
|
try {
|
|
22
21
|
const testKey = `storage_test_key::${Date.now()}`;
|
|
23
22
|
getStorage().setItem(testKey, testKey);
|
|
@@ -26,40 +25,40 @@ function createStorageUtils(getStorage) {
|
|
|
26
25
|
} catch {
|
|
27
26
|
return false;
|
|
28
27
|
}
|
|
29
|
-
}
|
|
30
|
-
|
|
28
|
+
};
|
|
29
|
+
const clear = () => {
|
|
31
30
|
if (isAvailable()) {
|
|
32
31
|
getStorage().clear();
|
|
33
32
|
}
|
|
34
|
-
}
|
|
35
|
-
|
|
33
|
+
};
|
|
34
|
+
const getItem = name => {
|
|
36
35
|
if (isAvailable()) {
|
|
37
36
|
return getStorage().getItem(name);
|
|
38
37
|
}
|
|
39
38
|
return null;
|
|
40
|
-
}
|
|
41
|
-
|
|
39
|
+
};
|
|
40
|
+
const key = index => {
|
|
42
41
|
if (isAvailable()) {
|
|
43
42
|
return getStorage().key(index);
|
|
44
43
|
}
|
|
45
44
|
return null;
|
|
46
|
-
}
|
|
47
|
-
|
|
45
|
+
};
|
|
46
|
+
const removeItem = name => {
|
|
48
47
|
if (isAvailable()) {
|
|
49
48
|
getStorage().removeItem(name);
|
|
50
49
|
}
|
|
51
|
-
}
|
|
52
|
-
|
|
50
|
+
};
|
|
51
|
+
const setItem = (name, value) => {
|
|
53
52
|
if (isAvailable()) {
|
|
54
53
|
getStorage().setItem(name, value);
|
|
55
54
|
}
|
|
56
|
-
}
|
|
57
|
-
|
|
55
|
+
};
|
|
56
|
+
const getLength = () => {
|
|
58
57
|
if (isAvailable()) {
|
|
59
58
|
return getStorage().length;
|
|
60
59
|
}
|
|
61
60
|
return 0;
|
|
62
|
-
}
|
|
61
|
+
};
|
|
63
62
|
return {
|
|
64
63
|
isAvailable,
|
|
65
64
|
clear,
|
|
@@ -68,7 +67,7 @@ function createStorageUtils(getStorage) {
|
|
|
68
67
|
removeItem,
|
|
69
68
|
setItem,
|
|
70
69
|
get length() {
|
|
71
|
-
return
|
|
70
|
+
return getLength();
|
|
72
71
|
}
|
|
73
72
|
};
|
|
74
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["
|
|
1
|
+
{"version":3,"file":"index.js","names":["createSafeStorage","getStorage","isAvailable","testKey","Date","now","setItem","removeItem","clear","getItem","name","key","index","value","getLength","length"],"sources":["../../../../../src/utils/web/storage/index.ts"],"sourcesContent":["/* eslint-disable require-jsdoc, jsdoc/require-jsdoc */\n\n/**\n * Интерфейс объекта-обертки для безопасной работы с WebStorage.\n */\nexport interface SafeStorage extends Storage {\n isAvailable: () => boolean;\n}\n\n/**\n * Возвращает объект для безопасной работы с браузерным хранилищем (LocalStorage, SessionStorage).\n * @param getStorage Функция, которая должна вернуть целевое хранилище.\n * @return Объект-обертка для безопасной работы с браузерным хранилищем.\n */\nexport function createSafeStorage(getStorage: () => Storage): SafeStorage {\n const isAvailable = (): boolean => {\n try {\n const testKey = `storage_test_key::${Date.now()}`;\n\n getStorage().setItem(testKey, testKey);\n getStorage().removeItem(testKey);\n\n return true;\n } catch {\n return false;\n }\n };\n\n const clear = (): void => {\n if (isAvailable()) {\n getStorage().clear();\n }\n };\n\n const getItem = (name: string): string | null => {\n if (isAvailable()) {\n return getStorage().getItem(name);\n }\n\n return null;\n };\n\n const key = (index: number): string | null => {\n if (isAvailable()) {\n return getStorage().key(index);\n }\n\n return null;\n };\n\n const removeItem = (name: string): void => {\n if (isAvailable()) {\n getStorage().removeItem(name);\n }\n };\n\n const setItem = (name: string, value: string): void => {\n if (isAvailable()) {\n getStorage().setItem(name, value);\n }\n };\n\n const getLength = (): number => {\n if (isAvailable()) {\n return getStorage().length;\n }\n\n return 0;\n };\n\n return {\n isAvailable,\n\n clear,\n getItem,\n key,\n removeItem,\n setItem,\n get length() {\n return getLength();\n },\n };\n}\n"],"mappings":";;;;;;AAAA;;AAEA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACO,SAASA,iBAAiBA,CAACC,UAAyB,EAAe;EACxE,MAAMC,WAAW,GAAGA,CAAA,KAAe;IACjC,IAAI;MACF,MAAMC,OAAO,GAAI,qBAAoBC,IAAI,CAACC,GAAG,CAAC,CAAE,EAAC;MAEjDJ,UAAU,CAAC,CAAC,CAACK,OAAO,CAACH,OAAO,EAAEA,OAAO,CAAC;MACtCF,UAAU,CAAC,CAAC,CAACM,UAAU,CAACJ,OAAO,CAAC;MAEhC,OAAO,IAAI;IACb,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF,CAAC;EAED,MAAMK,KAAK,GAAGA,CAAA,KAAY;IACxB,IAAIN,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACO,KAAK,CAAC,CAAC;IACtB;EACF,CAAC;EAED,MAAMC,OAAO,GAAIC,IAAY,IAAoB;IAC/C,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACQ,OAAO,CAACC,IAAI,CAAC;IACnC;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAMC,GAAG,GAAIC,KAAa,IAAoB;IAC5C,IAAIV,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACU,GAAG,CAACC,KAAK,CAAC;IAChC;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAML,UAAU,GAAIG,IAAY,IAAW;IACzC,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACM,UAAU,CAACG,IAAI,CAAC;IAC/B;EACF,CAAC;EAED,MAAMJ,OAAO,GAAGA,CAACI,IAAY,EAAEG,KAAa,KAAW;IACrD,IAAIX,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACK,OAAO,CAACI,IAAI,EAAEG,KAAK,CAAC;IACnC;EACF,CAAC;EAED,MAAMC,SAAS,GAAGA,CAAA,KAAc;IAC9B,IAAIZ,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACc,MAAM;IAC5B;IAEA,OAAO,CAAC;EACV,CAAC;EAED,OAAO;IACLb,WAAW;IAEXM,KAAK;IACLC,OAAO;IACPE,GAAG;IACHJ,UAAU;IACVD,OAAO;IACP,IAAIS,MAAMA,CAAA,EAAG;MACX,OAAOD,SAAS,CAAC,CAAC;IACpB;EACF,CAAC;AACH"}
|
package/dist/esm/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@sima-land/isomorph",
|
|
4
|
-
"version": "11.0.0-alpha.
|
|
4
|
+
"version": "11.0.0-alpha.44",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@humanwhocodes/env": "^2.2.2",
|
|
7
|
-
"@krutoo/fetch-tools": "^0.0.
|
|
7
|
+
"@krutoo/fetch-tools": "^0.0.11",
|
|
8
8
|
"@opentelemetry/api": "^1.4.1",
|
|
9
9
|
"@opentelemetry/exporter-prometheus": "^0.38.0",
|
|
10
10
|
"@opentelemetry/exporter-trace-otlp-http": "^0.39.1",
|
|
@@ -96,9 +96,9 @@ export function getResponseFormat(req) {
|
|
|
96
96
|
* @return Обработчик.
|
|
97
97
|
*/
|
|
98
98
|
export function HandlerProvider(getApp) {
|
|
99
|
-
return
|
|
99
|
+
return resolve => {
|
|
100
100
|
const parent = resolve(CURRENT_APP);
|
|
101
|
-
return
|
|
101
|
+
return (req, res, next) => {
|
|
102
102
|
const app = getApp();
|
|
103
103
|
app.attach(parent);
|
|
104
104
|
app.bind(KnownToken.Http.Handler.context).toValue({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["createContext","useContext","CURRENT_APP","KnownToken","HelmetContext","resetCSS","RegularHelmet","children","title","assets","React","createElement","charSet","httpEquiv","content","name","href","rel","dangerouslySetInnerHTML","__html","criticalCss","css","criticalJs","src","js","SpecificExtras","setMeta","meta","_meta","getMeta","getResponseFormat","req","result","header","toLowerCase","includes","HandlerProvider","getApp","
|
|
1
|
+
{"version":3,"file":"index.js","names":["createContext","useContext","CURRENT_APP","KnownToken","HelmetContext","resetCSS","RegularHelmet","children","title","assets","React","createElement","charSet","httpEquiv","content","name","href","rel","dangerouslySetInnerHTML","__html","criticalCss","css","criticalJs","src","js","SpecificExtras","setMeta","meta","_meta","getMeta","getResponseFormat","req","result","header","toLowerCase","includes","HandlerProvider","getApp","resolve","parent","res","next","app","attach","bind","Http","Handler","context","toValue","get","main"],"sources":["../../../../../../src/preset/node/handler/utils/index.tsx"],"sourcesContent":["import { ReactNode, createContext, useContext } from 'react';\nimport { PageAssets } from '../../../isomorphic/types';\nimport { Handler, Request } from 'express';\nimport { Application, CURRENT_APP, Resolve } from '../../../../di';\nimport { KnownToken } from '../../../../tokens';\n\nexport const HelmetContext = createContext<{ title?: string; assets?: PageAssets }>({});\n\nconst resetCSS = `\n* {\n box-sizing: border-box;\n}\nbody {\n font-family: -apple-system,BlinkMacSystemFont,'Source Sans Pro',\"Segoe UI\",Roboto,\"Helvetica Neue\",Ubuntu,Arial,sans-serif;\n margin: 0;\n}\n`;\n\n/**\n * Простой Helmet-компонент.\n * Выведет html, head и body.\n * @param props Свойства.\n * @return Элемент.\n */\nexport function RegularHelmet({ children }: { children?: ReactNode }) {\n const { title, assets } = useContext(HelmetContext);\n\n return (\n <html>\n <head>\n <meta charSet='UTF-8' />\n <meta httpEquiv='X-UA-Compatible' content='IE=edge' />\n <meta name='viewport' content='width=device-width, initial-scale=1' />\n <title>{title ?? 'Document'}</title>\n <link\n href='https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,200;0,300;0,400;0,600;0,700;0,900;1,200;1,300;1,400;1,600;1,700;1,900&display=swap'\n rel='stylesheet'\n />\n <style dangerouslySetInnerHTML={{ __html: resetCSS }} />\n\n {assets?.criticalCss && <link rel='stylesheet' href={assets.criticalCss} />}\n {assets?.css && <link rel='stylesheet' href={assets.css} />}\n {assets?.criticalJs && <script src={assets.criticalJs} />}\n </head>\n <body>\n {children}\n {assets?.js && <script src={assets.js} />}\n </body>\n </html>\n );\n}\n\n/**\n * Специфичные для наших микросервисов дополнительные данные ответа.\n */\nexport class SpecificExtras {\n private _meta: any;\n\n /**\n * Установит мета-данные.\n * @param meta Данные.\n * @return Контекст.\n */\n setMeta(meta: any): this {\n this._meta = meta;\n return this;\n }\n\n /**\n * Вернет установленные мета-данные.\n * @return Данные.\n */\n getMeta(): unknown {\n return this._meta;\n }\n}\n\n/**\n * Определит формат ответа.\n * @param req Запрос.\n * @return Формат.\n */\nexport function getResponseFormat(req: Request): 'html' | 'json' {\n let result: 'html' | 'json' = 'html';\n\n if ((req.header('accept') || '').toLowerCase().includes('application/json')) {\n result = 'json';\n }\n\n return result;\n}\n\n/**\n * Возвращает express-handler, создающий дочернее di-приложение при запросе.\n * @param getApp Должна вернуть di-приложения запроса.\n * @return Обработчик.\n */\nexport function HandlerProvider(getApp: () => Application) {\n return (resolve: Resolve): Handler => {\n const parent = resolve(CURRENT_APP);\n\n return (req, res, next) => {\n const app = getApp();\n\n app.attach(parent);\n app.bind(KnownToken.Http.Handler.context).toValue({ req, res, next });\n app.get(KnownToken.Http.Handler.main)();\n };\n };\n}\n"],"mappings":"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"}
|
|
@@ -8,10 +8,9 @@
|
|
|
8
8
|
* Возвращает объект для безопасной работы с браузерным хранилищем (LocalStorage, SessionStorage).
|
|
9
9
|
* @param getStorage Функция, которая должна вернуть целевое хранилище.
|
|
10
10
|
* @return Объект-обертка для безопасной работы с браузерным хранилищем.
|
|
11
|
-
* @todo Пересмотреть и перенести из browser?
|
|
12
11
|
*/
|
|
13
|
-
export function
|
|
14
|
-
|
|
12
|
+
export function createSafeStorage(getStorage) {
|
|
13
|
+
const isAvailable = () => {
|
|
15
14
|
try {
|
|
16
15
|
const testKey = `storage_test_key::${Date.now()}`;
|
|
17
16
|
getStorage().setItem(testKey, testKey);
|
|
@@ -20,40 +19,40 @@ export function createStorageUtils(getStorage) {
|
|
|
20
19
|
} catch {
|
|
21
20
|
return false;
|
|
22
21
|
}
|
|
23
|
-
}
|
|
24
|
-
|
|
22
|
+
};
|
|
23
|
+
const clear = () => {
|
|
25
24
|
if (isAvailable()) {
|
|
26
25
|
getStorage().clear();
|
|
27
26
|
}
|
|
28
|
-
}
|
|
29
|
-
|
|
27
|
+
};
|
|
28
|
+
const getItem = name => {
|
|
30
29
|
if (isAvailable()) {
|
|
31
30
|
return getStorage().getItem(name);
|
|
32
31
|
}
|
|
33
32
|
return null;
|
|
34
|
-
}
|
|
35
|
-
|
|
33
|
+
};
|
|
34
|
+
const key = index => {
|
|
36
35
|
if (isAvailable()) {
|
|
37
36
|
return getStorage().key(index);
|
|
38
37
|
}
|
|
39
38
|
return null;
|
|
40
|
-
}
|
|
41
|
-
|
|
39
|
+
};
|
|
40
|
+
const removeItem = name => {
|
|
42
41
|
if (isAvailable()) {
|
|
43
42
|
getStorage().removeItem(name);
|
|
44
43
|
}
|
|
45
|
-
}
|
|
46
|
-
|
|
44
|
+
};
|
|
45
|
+
const setItem = (name, value) => {
|
|
47
46
|
if (isAvailable()) {
|
|
48
47
|
getStorage().setItem(name, value);
|
|
49
48
|
}
|
|
50
|
-
}
|
|
51
|
-
|
|
49
|
+
};
|
|
50
|
+
const getLength = () => {
|
|
52
51
|
if (isAvailable()) {
|
|
53
52
|
return getStorage().length;
|
|
54
53
|
}
|
|
55
54
|
return 0;
|
|
56
|
-
}
|
|
55
|
+
};
|
|
57
56
|
return {
|
|
58
57
|
isAvailable,
|
|
59
58
|
clear,
|
|
@@ -62,7 +61,7 @@ export function createStorageUtils(getStorage) {
|
|
|
62
61
|
removeItem,
|
|
63
62
|
setItem,
|
|
64
63
|
get length() {
|
|
65
|
-
return
|
|
64
|
+
return getLength();
|
|
66
65
|
}
|
|
67
66
|
};
|
|
68
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["
|
|
1
|
+
{"version":3,"file":"index.js","names":["createSafeStorage","getStorage","isAvailable","testKey","Date","now","setItem","removeItem","clear","getItem","name","key","index","value","getLength","length"],"sources":["../../../../../src/utils/web/storage/index.ts"],"sourcesContent":["/* eslint-disable require-jsdoc, jsdoc/require-jsdoc */\n\n/**\n * Интерфейс объекта-обертки для безопасной работы с WebStorage.\n */\nexport interface SafeStorage extends Storage {\n isAvailable: () => boolean;\n}\n\n/**\n * Возвращает объект для безопасной работы с браузерным хранилищем (LocalStorage, SessionStorage).\n * @param getStorage Функция, которая должна вернуть целевое хранилище.\n * @return Объект-обертка для безопасной работы с браузерным хранилищем.\n */\nexport function createSafeStorage(getStorage: () => Storage): SafeStorage {\n const isAvailable = (): boolean => {\n try {\n const testKey = `storage_test_key::${Date.now()}`;\n\n getStorage().setItem(testKey, testKey);\n getStorage().removeItem(testKey);\n\n return true;\n } catch {\n return false;\n }\n };\n\n const clear = (): void => {\n if (isAvailable()) {\n getStorage().clear();\n }\n };\n\n const getItem = (name: string): string | null => {\n if (isAvailable()) {\n return getStorage().getItem(name);\n }\n\n return null;\n };\n\n const key = (index: number): string | null => {\n if (isAvailable()) {\n return getStorage().key(index);\n }\n\n return null;\n };\n\n const removeItem = (name: string): void => {\n if (isAvailable()) {\n getStorage().removeItem(name);\n }\n };\n\n const setItem = (name: string, value: string): void => {\n if (isAvailable()) {\n getStorage().setItem(name, value);\n }\n };\n\n const getLength = (): number => {\n if (isAvailable()) {\n return getStorage().length;\n }\n\n return 0;\n };\n\n return {\n isAvailable,\n\n clear,\n getItem,\n key,\n removeItem,\n setItem,\n get length() {\n return getLength();\n },\n };\n}\n"],"mappings":"AAAA;;AAEA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,iBAAiBA,CAACC,UAAyB,EAAe;EACxE,MAAMC,WAAW,GAAGA,CAAA,KAAe;IACjC,IAAI;MACF,MAAMC,OAAO,GAAI,qBAAoBC,IAAI,CAACC,GAAG,CAAC,CAAE,EAAC;MAEjDJ,UAAU,CAAC,CAAC,CAACK,OAAO,CAACH,OAAO,EAAEA,OAAO,CAAC;MACtCF,UAAU,CAAC,CAAC,CAACM,UAAU,CAACJ,OAAO,CAAC;MAEhC,OAAO,IAAI;IACb,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF,CAAC;EAED,MAAMK,KAAK,GAAGA,CAAA,KAAY;IACxB,IAAIN,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACO,KAAK,CAAC,CAAC;IACtB;EACF,CAAC;EAED,MAAMC,OAAO,GAAIC,IAAY,IAAoB;IAC/C,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACQ,OAAO,CAACC,IAAI,CAAC;IACnC;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAMC,GAAG,GAAIC,KAAa,IAAoB;IAC5C,IAAIV,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACU,GAAG,CAACC,KAAK,CAAC;IAChC;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAML,UAAU,GAAIG,IAAY,IAAW;IACzC,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACM,UAAU,CAACG,IAAI,CAAC;IAC/B;EACF,CAAC;EAED,MAAMJ,OAAO,GAAGA,CAACI,IAAY,EAAEG,KAAa,KAAW;IACrD,IAAIX,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACK,OAAO,CAACI,IAAI,EAAEG,KAAK,CAAC;IACnC;EACF,CAAC;EAED,MAAMC,SAAS,GAAGA,CAAA,KAAc;IAC9B,IAAIZ,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACc,MAAM;IAC5B;IAEA,OAAO,CAAC;EACV,CAAC;EAED,OAAO;IACLb,WAAW;IAEXM,KAAK;IACLC,OAAO;IACPE,GAAG;IACHJ,UAAU;IACVD,OAAO;IACP,IAAIS,MAAMA,CAAA,EAAG;MACX,OAAOD,SAAS,CAAC,CAAC;IACpB;EACF,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/preset/node/handler/utils/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA6B,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAe,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGnE,eAAO,MAAM,aAAa;;;EAA6D,CAAC;AAYxF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,2CA0BnE;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAM;IAEnB;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAKxB;;;OAGG;IACH,OAAO,IAAI,OAAO;CAGnB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAQ/D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/preset/node/handler/utils/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA6B,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAe,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGnE,eAAO,MAAM,aAAa;;;EAA6D,CAAC;AAYxF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,2CA0BnE;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAM;IAEnB;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAKxB;;;OAGG;IACH,OAAO,IAAI,OAAO;CAGnB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAQ/D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,WAAW,aACtC,OAAO,KAAG,OAAO,CAWnC"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Интерфейс объекта-обертки для безопасной работы с WebStorage.
|
|
3
3
|
*/
|
|
4
|
-
export interface
|
|
4
|
+
export interface SafeStorage extends Storage {
|
|
5
5
|
isAvailable: () => boolean;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* Возвращает объект для безопасной работы с браузерным хранилищем (LocalStorage, SessionStorage).
|
|
9
9
|
* @param getStorage Функция, которая должна вернуть целевое хранилище.
|
|
10
10
|
* @return Объект-обертка для безопасной работы с браузерным хранилищем.
|
|
11
|
-
* @todo Пересмотреть и перенести из browser?
|
|
12
11
|
*/
|
|
13
|
-
export declare function
|
|
12
|
+
export declare function createSafeStorage(getStorage: () => Storage): SafeStorage;
|
|
14
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/web/storage/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/web/storage/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,WAAW,EAAE,MAAM,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,OAAO,GAAG,WAAW,CAoExE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sima-land/isomorph",
|
|
3
|
-
"version": "11.0.0-alpha.
|
|
3
|
+
"version": "11.0.0-alpha.44",
|
|
4
4
|
"description": "Tiny framework for fast start frontend microservices",
|
|
5
5
|
"author": "www.sima-land.ru team",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -157,6 +157,12 @@
|
|
|
157
157
|
"import": "./dist/esm/utils/web/analytics/index.js",
|
|
158
158
|
"default": "./dist/esm/utils/web/analytics/index.js"
|
|
159
159
|
},
|
|
160
|
+
"./utils/web/storage": {
|
|
161
|
+
"types": "./dist/types/utils/web/storage/index.d.ts",
|
|
162
|
+
"require": "./dist/cjs/utils/web/storage/index.js",
|
|
163
|
+
"import": "./dist/esm/utils/web/storage/index.js",
|
|
164
|
+
"default": "./dist/esm/utils/web/storage/index.js"
|
|
165
|
+
},
|
|
160
166
|
"./utils/webpack": {
|
|
161
167
|
"types": "./dist/types/utils/webpack/index.d.ts",
|
|
162
168
|
"require": "./dist/cjs/utils/webpack/index.js",
|
|
@@ -238,6 +244,9 @@
|
|
|
238
244
|
"utils/web/analytics": [
|
|
239
245
|
"./dist/types/utils/web/analytics/index.d.ts"
|
|
240
246
|
],
|
|
247
|
+
"utils/web/storage": [
|
|
248
|
+
"./dist/types/utils/web/storage/index.d.ts"
|
|
249
|
+
],
|
|
241
250
|
"utils/webpack": [
|
|
242
251
|
"./dist/types/utils/webpack/index.d.ts"
|
|
243
252
|
]
|
|
@@ -279,7 +288,7 @@
|
|
|
279
288
|
},
|
|
280
289
|
"dependencies": {
|
|
281
290
|
"@humanwhocodes/env": "^2.2.2",
|
|
282
|
-
"@krutoo/fetch-tools": "^0.0.
|
|
291
|
+
"@krutoo/fetch-tools": "^0.0.11",
|
|
283
292
|
"@opentelemetry/api": "^1.4.1",
|
|
284
293
|
"@opentelemetry/exporter-prometheus": "^0.38.0",
|
|
285
294
|
"@opentelemetry/exporter-trace-otlp-http": "^0.39.1",
|
|
@@ -96,10 +96,10 @@ export function getResponseFormat(req: Request): 'html' | 'json' {
|
|
|
96
96
|
* @return Обработчик.
|
|
97
97
|
*/
|
|
98
98
|
export function HandlerProvider(getApp: () => Application) {
|
|
99
|
-
return
|
|
99
|
+
return (resolve: Resolve): Handler => {
|
|
100
100
|
const parent = resolve(CURRENT_APP);
|
|
101
101
|
|
|
102
|
-
return
|
|
102
|
+
return (req, res, next) => {
|
|
103
103
|
const app = getApp();
|
|
104
104
|
|
|
105
105
|
app.attach(parent);
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* Интерфейс объекта-обертки для безопасной работы с WebStorage.
|
|
5
5
|
*/
|
|
6
|
-
export interface
|
|
7
|
-
extends Pick<Storage, 'clear' | 'getItem' | 'key' | 'removeItem' | 'setItem' | 'length'> {
|
|
6
|
+
export interface SafeStorage extends Storage {
|
|
8
7
|
isAvailable: () => boolean;
|
|
9
8
|
}
|
|
10
9
|
|
|
@@ -12,10 +11,9 @@ export interface StorageUtils
|
|
|
12
11
|
* Возвращает объект для безопасной работы с браузерным хранилищем (LocalStorage, SessionStorage).
|
|
13
12
|
* @param getStorage Функция, которая должна вернуть целевое хранилище.
|
|
14
13
|
* @return Объект-обертка для безопасной работы с браузерным хранилищем.
|
|
15
|
-
* @todo Пересмотреть и перенести из browser?
|
|
16
14
|
*/
|
|
17
|
-
export function
|
|
18
|
-
|
|
15
|
+
export function createSafeStorage(getStorage: () => Storage): SafeStorage {
|
|
16
|
+
const isAvailable = (): boolean => {
|
|
19
17
|
try {
|
|
20
18
|
const testKey = `storage_test_key::${Date.now()}`;
|
|
21
19
|
|
|
@@ -26,48 +24,49 @@ export function createStorageUtils(getStorage: () => Storage): StorageUtils {
|
|
|
26
24
|
} catch {
|
|
27
25
|
return false;
|
|
28
26
|
}
|
|
29
|
-
}
|
|
27
|
+
};
|
|
30
28
|
|
|
31
|
-
|
|
29
|
+
const clear = (): void => {
|
|
32
30
|
if (isAvailable()) {
|
|
33
31
|
getStorage().clear();
|
|
34
32
|
}
|
|
35
|
-
}
|
|
33
|
+
};
|
|
36
34
|
|
|
37
|
-
|
|
35
|
+
const getItem = (name: string): string | null => {
|
|
38
36
|
if (isAvailable()) {
|
|
39
37
|
return getStorage().getItem(name);
|
|
40
38
|
}
|
|
41
39
|
|
|
42
40
|
return null;
|
|
43
|
-
}
|
|
41
|
+
};
|
|
44
42
|
|
|
45
|
-
|
|
43
|
+
const key = (index: number): string | null => {
|
|
46
44
|
if (isAvailable()) {
|
|
47
45
|
return getStorage().key(index);
|
|
48
46
|
}
|
|
47
|
+
|
|
49
48
|
return null;
|
|
50
|
-
}
|
|
49
|
+
};
|
|
51
50
|
|
|
52
|
-
|
|
51
|
+
const removeItem = (name: string): void => {
|
|
53
52
|
if (isAvailable()) {
|
|
54
53
|
getStorage().removeItem(name);
|
|
55
54
|
}
|
|
56
|
-
}
|
|
55
|
+
};
|
|
57
56
|
|
|
58
|
-
|
|
57
|
+
const setItem = (name: string, value: string): void => {
|
|
59
58
|
if (isAvailable()) {
|
|
60
59
|
getStorage().setItem(name, value);
|
|
61
60
|
}
|
|
62
|
-
}
|
|
61
|
+
};
|
|
63
62
|
|
|
64
|
-
|
|
63
|
+
const getLength = (): number => {
|
|
65
64
|
if (isAvailable()) {
|
|
66
65
|
return getStorage().length;
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
return 0;
|
|
70
|
-
}
|
|
69
|
+
};
|
|
71
70
|
|
|
72
71
|
return {
|
|
73
72
|
isAvailable,
|
|
@@ -78,7 +77,7 @@ export function createStorageUtils(getStorage: () => Storage): StorageUtils {
|
|
|
78
77
|
removeItem,
|
|
79
78
|
setItem,
|
|
80
79
|
get length() {
|
|
81
|
-
return
|
|
80
|
+
return getLength();
|
|
82
81
|
},
|
|
83
82
|
};
|
|
84
83
|
}
|