Skip to content

Instantly share code, notes, and snippets.

/**
* Шаблон конфига playwright, переиспользуется в мокированных и немокированных тестах.
* https://playwright.dev/docs/test-configuration
*
* Конфигурация локального запуска и запуск в CI отличаются, см. код ниже.
* Если требуется подебажить CI, достаточно запустить с флагом
* CI=1 npx playwright test ...
*/
import type {
@SuperOleg39
SuperOleg39 / di-example.tsx
Last active June 18, 2024 11:17
di-example.tsx
// общий интерфейс
interface CookieService {
get(key) {}
set(key, value) {}
}
// типизированный токен - ключ для реализации интерфейса в DI
const COOKIE_SERVICE = createToken<CookieService>('cookie service');
// серверная реализация
// оборачиваем в минимальный svg, обработанный https://www.npmjs.com/package/mini-svg-data-uri
const imgBlurDataURL = `%3Csvg xmlns='http://www.w3.org/2000/svg' %3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='none' style='filter: url(%23b);' href='${base64Image}'/%3E%3C/svg%3E`;
// и используем как background image
const backgroundImage = `url("data:image/svg+xml;charset=utf-8,${imgBlurDataURL}")`

Миграции

v3.x.x

[13.11.2023] - Удалена логика beforeReporters, к RemoteReporter теперь применяются filters и extensions

Раньше метод logger.addBeforeReporter использовался для добавления клиентского RemoteReporter, для отправки логов в сервис loggly без базовой фильтрации по уровню (которая настраивается через методы logger.setLevel и logger.enable).

Теперь обработка RemoteReporter встроена в @tinkoff/logger и он работает как обычный reporter, но без базовой фильтрации по уровню логов (но в RemoteReporter всегда была своя фильтрация).

// references:
// - https://github.com/sveltejs/kit/blob/master/packages/kit/src/runtime/server/page/serialize_data.js#L22
// - https://github.com/vercel/next.js/blob/canary/packages/next/src/server/htmlescape.ts#L4
// - https://github.com/yahoo/serialize-javascript/blob/main/index.js#L25
// - https://github.com/OWASP/owasp-java-encoder/blob/main/core/src/main/java/org/owasp/encoder/JavaScriptEncoder.java#L128
const ENCODE_MAP = {
'<': '\\u003C', // <
'\u2028': '\\u2028', // line separator
'\u2029': '\\u2029', // paragraph separator
};
@SuperOleg39
SuperOleg39 / encode.ts
Created July 21, 2023 08:50
Old version of safe-strings
/**
* High performance encoding of the specified characters in the string
*
* source https://github.com/preactjs/preact-render-to-string/blob/60075a5a7389d638d535c85f3706739e9ba932bc/src/util.js
* perf https://esbench.com/bench/5f88af6cb4632100a7dcd414
*/
export function encode(str: string, entities: RegExp, encodeMap: Record<number, string>) {
// Skip all work for strings with no entities needing encoding:
if (str.length === 0 || entities.test(str) === false) {
return str;
@SuperOleg39
SuperOleg39 / packages_libs_dippy_src_Provider.ts
Created July 8, 2022 09:05
Example code with token scope type checking
import type {
TokenInterface,
MultiTokenInterface,
ExtractTokenType,
OptionalTokenDependency,
_BaseTokenSingletonInterface,
_BaseTokenRequestInterface,
} from './createToken/createToken';
type Provide = TokenInterface<unknown> | string | any;
class Node {
constructor(value) {
this.value = value;
this.siblings = new Set();
}
connect(node) {
if (!node) {
return;
}
const useAsync = (options) => {
...
}
const Component = (props) => {
const [result, error, loading] = useAsync({ fn: () => get('/url') })
...
}