<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:base="https://blog.poplauki.eu" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Poplavskij Vladimir blog</title>
    <link>https://blog.poplauki.eu/be/feed.xml</link>
    <atom:link href="https://blog.poplauki.eu/be/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Беларуская</description>
    <language>be</language>
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Шлях каралёў: падарожжа ў Архіў Бурасвятла</title>
        <link>https://blog.poplauki.eu/be/blog/the-way-of-kings-a-journey-into-the-stormlight-archive/</link>
        <description>&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Brandon_Sanderson&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Брэндан Сандэрсан&lt;/a&gt; — сапраўдны майстар сваёй справы, а &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Way_of_Kings&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;&lt;em&gt;Шлях каралёў&lt;/em&gt;&lt;/a&gt;, першы том яго знакамітага цыкла &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Stormlight_Archive&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;&lt;em&gt;Архіў Бурасвятла&lt;/em&gt;&lt;/a&gt;, яскрава сведчыць пра яго талент. Гэты эпічны раман у жанры высокага фэнтэзі пераносіць чытача ў Рошар — свет бязлітасных бур, загадкавай магіі і глыбокіх палітычных канфліктаў.&lt;/p&gt;
&lt;h2&gt;Шлях каралёў&lt;/h2&gt;
&lt;p&gt;Рошар — месца, дзе загартаваныя воіны сыходзяцца ў бітвах, поўных гонару і адчаю, пад паверхняй тояцца старажытныя таямніцы, а лёс цэлага свету вісіць на валаску. &lt;em&gt;Шлях каралёў&lt;/em&gt; пераплятае гісторыі трох захапляльных герояў: Шалан, маладой даследчыцы, якая шукае забароненыя веды; Далінара, загартаванага ў баях генерала, які шукае сэнс; і Каладзіна, паняволенага салдата, што змагаецца за выжыванне.&lt;/p&gt;
&lt;h2&gt;Каладзін&lt;/h2&gt;
&lt;p&gt;Каладзін — адзін з самых запамінальных персанажаў Сандэрсана. Пераследаваны мінулым, ён змагаецца, каб абараніць сваіх людзей насуперак немагчымым абставінам. Яго шлях сілы, гонару і рашучасці сярод неймаверных выпрабаванняў глыбока кранае чытача.&lt;/p&gt;
&lt;h2&gt;Далінар Холін&lt;/h2&gt;
&lt;p&gt;Далінар Холін, стаічны і пачэсны брат памерлага караля, увасабляе сутыкненне традыцый і перамен. Пад моцным уплывам старажытнага тэксту &lt;em&gt;Шлях каралёў&lt;/em&gt; ён будуе свае перакананні на строгім кодэксе гонару. Барацьба Далінара заключаецца ў спробе прымірыць ідэалы мінулага са зменлівай і складанай сучаснасцю. Асабліва блізкі яму адзін з галоўных прынцыпаў кнігі:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Не можа быць гонару ў перамозе, якая прымушае цябе адмовіцца ад таго, кім ты ёсць.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ён накіроўвае ўчынкі Далінара, але адначасова становіцца пастаяннай крыніцай унутранага канфлікту.&lt;/p&gt;
&lt;p&gt;&lt;picture class=&quot;article-image article-image--square article-image--article&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/honor-square-400w.webp&quot; /&gt;&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/honor-square-400w.jpeg&quot; /&gt;&lt;img src=&quot;https://blog.poplauki.eu/img/generated/honor-square-400w.jpeg&quot; width=&quot;400&quot; height=&quot;400&quot; alt=&quot;Рыцар пад словамі пра гонар і перамогу са Шляху каралёў&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2&gt;Клятва Зіхатлівых рыцараў&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Жыццё перад смерцю. Сіла перад слабасцю. Падарожжа перад мэтай.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Гэтыя словы складаюць клятву Зіхатлівых рыцараў, старажытнага ордэна, і ўвасабляюць галоўныя тэмы &lt;em&gt;Шляху каралёў&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Калі вы любіце багатыя светы, незабыўных герояў і прыгоды з высокімі стаўкамі, &lt;em&gt;Шлях каралёў&lt;/em&gt; абавязкова варта прачытаць. Выпраўляйцеся ў гэтую эпічную адысею і даведайцеся, чаму Сандэрсана лічаць адным з найлепшых аўтараў фэнтэзі нашага часу.&lt;/p&gt;
&lt;h2&gt;Выснова&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Шлях каралёў&lt;/em&gt; заслугоўвае свайго прызнання. Складаны свет з захапляльнымі культурамі і адметнымі імёнамі зацягвае. Але менавіта недасканалыя, стойкія і бясспрэчна чалавечныя героі ператвараюць гэтую кнігу ў незабыўнае падарожжа. Калі вам патрэбны раман, які кіне выклік розуму, закране сэрца і пакіне жаданне вярнуцца ў Рошар, &lt;em&gt;Шлях каралёў&lt;/em&gt; павінен узначаліць ваш спіс чытання.&lt;/p&gt;
&lt;p&gt;Іншыя мае нататкі і агляды кніг — на &lt;a href=&quot;https://reading.poplauki.eu/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;reading.poplauki.eu&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Sat, 08 Aug 2026 17:14:30 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/the-way-of-kings-a-journey-into-the-stormlight-archive/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Няобходныя інструменты бяспекі OWASP: кантрольны спіс перад запускам сайта</title>
        <link>https://blog.poplauki.eu/be/blog/list-owasp-useful-links/</link>
        <description>&lt;p&gt;Спіс спасылак OWASP:&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Сканеры&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://radar.cloudflare.com/scan&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Cloudflare Radar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.projectdiscovery.io/opensource/nuclei/overview&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Хуткі і наладжальны сканэр уразлівасцяў на аснове простых шаблонаў YAML&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;DNS&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://dnsdumpster.com/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;dns recon &amp;amp; research, find &amp;amp; lookup dns records&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Загалоўкі&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://check.town/csp-validator&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Валідатар загалоўка CSP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://securityheaders.com/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Загалоўкі бяспекі (Snyk)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Праверка HSTS&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://showdns.net/hsts-checker&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;HTTP Strict Transport Security Test&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 18 Apr 2026 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/list-owasp-useful-links/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Штодзённая стаічная практыка</title>
        <link>https://blog.poplauki.eu/be/blog/daily-stoic-routine-habits-for-inner-peace/</link>
        <description>&lt;h2&gt;Ранішнія дысцыпліны: Авалоданне днём&lt;/h2&gt;
&lt;p&gt;Стаічны дзень пачынаецца са свядомага намагання завалодаць днём яшчэ да таго, як “уварвецца спешка” і саткнуцца абавязкі&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ранішні напамін:&lt;/strong&gt; Практыкам раяць нагадваць сабе, што яны сустрэнуць цяжкіх людзей — “назойлівых, няўдзячных [і] напышлівых” — і што іх дабрабыт не павінен станавіцца закладнікам чужога характару.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Вызначэнне намераў:&lt;/strong&gt; Ранішнія рытуалы ўключаюць засяроджванне на тым, што важна, і абавязацельства жыць у адпаведнасці з каштоўнасцямі, а не настроямі, напрыклад, дзейнічаць з самадысцыплінай і сумленнасцю, нават калі гэта нязручна.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Падрыхтоўка:&lt;/strong&gt; Гэта час гатоўнасці, калі вучань рыхтуе свой розум дабрачынна рэагаваць на ўсё, што прынясе дзень&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;На працягу дня: Практыка ўвагі&lt;/h2&gt;
&lt;p&gt;Стаіцызм у паўсядзённым жыцці патрабуе пастаяннай “дысцыпліны меркаванняў”, каб упэўніцца, што ўнутранымі рэакцыямі кіруе розум&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Дыхатамія кантролю:&lt;/strong&gt; У цэнтры паўсядзённага жыцця ляжыць простае пытанне, якое паўтараецца: “Ці падкантрольна мне гэта?”. Калі падзея — напрыклад, дарожны рух, надвор’е або паводзіны іншага чалавека — не паддаецца кантролю, практык вырашае адпусціць яе і засяроджваецца выключна на ўласных рэакцыях і дзеяннях.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Стаічная паўза:&lt;/strong&gt; Каб пазбегнуць “аглушэння ад хуткасці ўдару” знешніх падзей, стоікі практыкуюць свядомую паўзу. Гэта кароткае перапыненне аўтаматычнай рэакцыі дае прастору для таго, каб спытаць, што насамрэч адбываецца, і прадухіляе стварэнне розумам “гісторыі пра шкоду” вакол нейтральных падзей.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Перспектыва вартавой вежы:&lt;/strong&gt; Каб супрацьстаяць схільнасці разглядаць праблемы занадта блізка, стоікі ў думках “аддаляюць малюнак”. Калі глядзець на падзеі нібы з высокай вартавой вежы, асобныя праблемы змяншаюцца ў значнасці і разглядаюцца як частка агульнага, звычайнага і хуткаплыннага чалавечага стану.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Добраахвотны дыскамфорт:&lt;/strong&gt; Практыкі могуць перыядычна вырашаць абыходзіцца без раскошы, насіць простае адзенне або есці танную ежу, каб нагадаць сабе, што шчасце не залежыць ад маёмасці, і каб “загартаваць характар” для будучых цяжкасцей&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Вячэрні роздум: Агляд характару&lt;/h2&gt;
&lt;p&gt;Дзень завяршаецца перыядам роздуму для ацэнкі свайго прагрэсу і характару&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Агляд:&lt;/strong&gt; Стоікі азіраюцца на падзеі дня, каб спытаць: “Ці захаваў я цярпенне? Ці праявіў мужнасць? Дзе эмоцыі ўзялі верх?”.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Выпраўленне без адчаю:&lt;/strong&gt; Калі практыка разыходзіцца з прынцыпамі, мэта не ў тым, каб упадаць у адчай, а ў тым, каб проста вярнуцца да практыкі пасля няўдачы.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Канкрэтныя практыкаванні:&lt;/strong&gt; Адно з рэкамендаваных практыкаванняў заключаецца ў тым, каб выбраць адзін трывожны момант і напісаць чатыры кароткія радкі: што проста адбылося, якая выснова была зроблена з гэтага, якой з’яўляецца перспектыва “вартавой вежы” або погляд у будучыню на гэту падзею, і якой яе часткай насамрэч вы маглі кіраваць&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;У рэшце рэшт, штодзённая стаічная практыка — гэта майстэрства валодання сабой, а не светам, імкненне стаць “часткай большага цела”, якая дзейнічае рацыянальна і сацыяльна ў цяперашні момант&lt;/p&gt;
</description>
        <pubDate>Sun, 12 Apr 2026 16:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/daily-stoic-routine-habits-for-inner-peace/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>15 Спосабаў Дасягнуць Унутранага Спакою: Стоічны Правіднік</title>
        <link>https://blog.poplauki.eu/be/blog/15-ways-to-achieve-tranquility/</link>
        <description>&lt;p&gt;Крыніцы прадстаѡляюць пятнаццаць спосабаў дасягнення ѡнутранага спакою (на аснове прапаноѡ &lt;a href=&quot;https://be.wikipedia.org/wiki/%D0%A1%D0%B5%D0%BD%D0%B5%D0%BA%D0%B0&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Сенэкі&lt;/a&gt;) і таксама абмяркоѡваюць тэхнічную структуру другасных цнотаѡ, якія належаць да чатырох кардынальных цнотаѡ стаяцызму. Хоць канкрэтная колькасць “15 другасных цнотаѡ” не вызначана як адзін кананічны спіс ѡ крыніцах, яны даюць падрабязны спіс пятнаццаці практычных прапаноѡ для жыцця паводле цноты і вызначаюць розныя другасныя цноты ѡ рамках шырэйшай стаячной сістэмы.&lt;/p&gt;
&lt;h2&gt;15 Прапаноѡ для Спакую&lt;/h2&gt;
&lt;p&gt;Гэтыя пятнаццаць пунктаѡ узятыя з эсэ Сенэкі “Пра спакой розуму” і прадстаѡляюць практычнае ѡжыванне стаячной цноты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Уцягніся ѡ свет&lt;/em&gt;: Актыѡны ѡдзел ѡ паѡсякдзённай дзейнасці і каштоѡнай рабоце стабілізуе розум і процідзее неспакою.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Не дазваляй перашкодам спыніць цябе&lt;/em&gt;: Практыкуй настойлівасць і знаходзь альтэрнатыѡныя шляхі, калі заблокаваны; нават малыя паслугі спрыяюць ціхай годнасці.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Вырашы быць жывым да самой смерці&lt;/em&gt;: Абавязуйся заставацца поѡнасцю прысутным і задаволеным, незалежна ад таго, ці твае абставіны строгія, ці прыемныя.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Пагодуй свае дзеянні са сваімі здольнасцямі&lt;/em&gt;: Выбірай задачы, якія ты можаш добра выканаць, і пазбягай абавязацельстваѡ, якія пераѡзыходзяць тваю прыроду ці здольнасці.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Асцярожна выбірай сяброѡ&lt;/em&gt;: Аддавай перавагу сапраѡдным таварышам і пазбягай “няшчасных людзей”, якія знаходзяць прычыну скардзіцца на ѡсё.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Не ганіся за маёмасцю&lt;/em&gt;: Пазбягай загружанага імкнення да багацця і імкніся дастатку.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Жыві проста&lt;/em&gt;: Пазбягай паказу і раскошы; простае жыццё лягчэй падтрымліваць і стабілізуе розум.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Кіруй жыццём з майстэрствам&lt;/em&gt;: Выкарыстоѡвай практыку і навыкі, каб ператварыць цяжкасці ѡ зносныя абставіны, а не ѡ падаѡляючыя цяжары.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Будзь гатовы адпусціці&lt;/em&gt;: Вызнай, што кожнае чалавечае становішча часовае і пазбягай занадта моцнай прывязанасці да статусу, маёмасці ці самаго жыцця.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Пазбягай бескарысных дзеянняѡ&lt;/em&gt;: Выбірай сэнсавыя мэты і пазбягай беспарадкавай занятасці, якая парадждае分散.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Будзь гатовы да расчаравання&lt;/em&gt;: чакай, што рэчы не заѡсёды ідуць так, як спадзяваўся, каб пазбавіць расчараванне яго сілы.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Не будзь ні ѡпартым, ні нерэшучым&lt;/em&gt;: Захоѡвай гнуткасць, каб адаптавацца да зменлівых абставін або адступіць, калі розум параіць.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Не кіруйся меркаваннямі іншых людзей&lt;/em&gt;: Ігнаруй чалавечую дурната і следуй таму, чаго патрабуе розм.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Вучыся ад адвагі іншых людзей&lt;/em&gt;: Назірай, як іншыя сутыкаюцца з няшчасцем і ѡмацоѡвай сваё сэрца праз іхні прыклад.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Будзь сабой, расслабся, атрымлівай задавальненне&lt;/em&gt;: Дай розуму адпачыць праз прагулкі, задавальненні і ежу ѡ меру&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Тэхнічная Структура Другасных Цнотаѡ&lt;/h2&gt;
&lt;p&gt;Крыніцы тлумачаць, што чатыры кардынальныя цноты — Мудрасць (Гасціннасць), Справядлівасць, Адвага і Умеранасць — кожная ѡключае некалькі другасных cnнот. Згодна з Арыем Дыдымам, Гасціннасць ѡключае шэсць другасных цнотаѡ, Адвага — пяць, а Справядлівасць і Умеранасць маюць па чатыры, усяго 19. Канкрэтныя прыклады, названыя ѡ крыніцах, ѡключаюць:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Другасныя цноты Справядлівасці: Яны ѡключаюць дабрыню (веданне, як тварыць дабро), сумленнае паводжанне, добрае таварышчанне і пабожнасць. Іншыя аспекты ѡключаюць сумленнасць, праѡдзівасць і вернасць.&lt;/li&gt;
&lt;li&gt;Другасныя цноты Умеранасці: Гэтая катэгорыя ѡключае самакантроль (энкратэя), парадак (эѡтакся), належнасць і сціпласць.&lt;/li&gt;
&lt;li&gt;Другасныя цноты Адвагі: Сюды ѡваходзіць вялікадушнасць (вялікасць розуму або душы), настойлівасць (філопанія або “любоѡ да працы”) і трываласць (патэнтыя).&lt;/li&gt;
&lt;li&gt;Другасныя цноты Гасціннасці (Мудрасці): Хоць крыніцы не пералічваюць усіх шасці, яны вызначаюць мудрасць як “галоѡную цноту” або “пранікнёны інтэлект”, які накіроѡвае астатнія.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 29 Mar 2026 20:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/15-ways-to-achieve-tranquility/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Сіметрычнае шыфраванне даных пра здароўе: Архітэктура бяспекі MigrainePulse</title>
        <link>https://blog.poplauki.eu/be/blog/migraine-pulse-security-key-management-service/</link>
        <description>&lt;p&gt;Ствараючы прадукты HealthTech, такія як &lt;a href=&quot;https://migrainepulse.com/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;MigrainePulse&lt;/a&gt;, адным з самых вялікіх выклікаў з’яўляецца забеспячэнне абсолютнай бяспекі і канфідэнцыйнасці канфідэнцыйных даных карыстальнікаў. Гісторыя прыступаў мігрэні, прынятыя лекаванні, медыцынскія запісы і дэталі ладу жыцця – усё гэта з’яўляецца вельмі асабістай інфармацыяй.&lt;/p&gt;
&lt;p&gt;З першага дня нашая філасофія была простай: даныя карыстальнікаў належаць толькі ім. Каб забяспечыць гэта, мы ўкаранілі перадавую сістэму сіметрычнага шыфравання (англ. &lt;code&gt;Symmetric Key Encryption&lt;/code&gt;) у архітэктуры MigrainePulse, якая працуе разам з ізаляванымі мікрасэрвіснымі рашэннямі (&lt;code&gt;Cloudflare Workers&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;У гэтым артыкуле мы запрашаем вас тэхнічна зазірнуць пад капот і даведацца, як працуюць нашы ахоўныя механізмы.&lt;/p&gt;
&lt;h2&gt;Чаму стандартных рашэнняў недастаткова?&lt;/h2&gt;
&lt;p&gt;Большасць дадаткаў сёння выкарыстоўваюць шыфраванне падчас перадачы даных (&lt;code&gt;TLS/SSL&lt;/code&gt;) і шыфраванне ў стане спакою (зашыфраваныя базы даных). Аднак калі ўся сістэма (база даных і галоўны сервер, які захоўвае ключы шыфравання) будзе скампраметавана адначасова, даныя могуць стаць адкрытымі.&lt;/p&gt;
&lt;p&gt;Каб пазбегнуць гэтага, у сістэме MigrainePulse мы аддзялілі самі даныя ад ключоў, неабходных для іх расшыфроўкі.&lt;/p&gt;
&lt;h2&gt;Аснова архітэктуры: SymmetricKeyService&lt;/h2&gt;
&lt;p&gt;У нашай бэкенд-сістэме (выкарыстоўваючы маналіт NestJS) спецыяльны модуль &lt;code&gt;SymmetricKeyService&lt;/code&gt; кіруе шыфраваннем і дэшыфраваннем канфідэнцыйных даных.&lt;/p&gt;
&lt;p&gt;Як гэта працуе на практыцы?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Прынцып аднаго ключа: Сіметрычнае шыфраванне азначае, што адзін і той жа ўнікальны ключ выкарыстоўваецца як для шыфравання, так і для дэшыфравання даных. Кожны карыстальнік мае ўнікальны ключ, прызначаны яму, які нават мы самі не маем у нашай галоўнай базе даных.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Шыфраванне карыснага нагрузкі (Payload Encryption): Калі карыстальнік захоўвае новы запіс пра здароўе (напрыклад, дадае новы прыступ мігрэні), даныя трапляюць на наш сервер. &lt;code&gt;SymmetricKeyService&lt;/code&gt; атрымлівае гэтыя канфідэнцыйныя даныя, шыфруе іх з дапамогай перадавога алгарытму (напрыклад, &lt;code&gt;AES-256-GCM&lt;/code&gt;) і толькі потым захоўвае ў базе даных. У базе даных захоўваецца толькі бессэнсоўны набор сімвалаў.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ідэнтыфікацыя карыстальніка: Сесія карыстальніка і доступ да даных цесна звязаны з JWT (&lt;code&gt;JSON Web Tokens&lt;/code&gt;) і аўтэнтыфікацыяй Supabase. Карыстальнік пацвярджае сваю асобу, а ключ шыфравання, які належыць яму, прадастаўляецца толькі пасля верифікаванага ўваходу.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;picture class=&quot;article-image article-image--landscape article-image--article&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/migraine-pulse-security-key-management-service-diagram-landscape-400w.webp&quot; /&gt;&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/migraine-pulse-security-key-management-service-diagram-landscape-400w.jpeg&quot; /&gt;&lt;img src=&quot;https://blog.poplauki.eu/img/generated/migraine-pulse-security-key-management-service-diagram-landscape-400w.jpeg&quot; width=&quot;400&quot; height=&quot;267&quot; alt=&quot;migraine-pulse-security-key-management-service diagram&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2&gt;Дадатковы ўзровень абароны: Cloudflare Worker&lt;/h2&gt;
&lt;p&gt;Узнікае натуральнае пытанне – дзе тады захоўваюцца самі ключы шыфравання, калі не ў галоўнай базе даных?&lt;/p&gt;
&lt;p&gt;Тут нам на дапамогу прыйшла тэхналогія &lt;code&gt;Cloudflare Workers&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;У нашай архітэктуры ключы шыфравання кіруюцца праз цалкам ізаляваную інфраструктуру, якая працуе ў Edge-мережы. Рашэнне, апісанае ў дакументацыі &lt;a href=&quot;https://github.com/wirtaw/migraine-tracker-docs/blob/master/docs/backend/cloudflare-worker.md&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;doc/backend/cloudflare-worker.md&lt;/a&gt;, забяспечвае, што галоўны API-сервер і база даных ніколі не захоўваюць самі ключы ў даўгатэрміновай памяці.&lt;/p&gt;
&lt;h2&gt;Перавагі інтэграцыі:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Дэцэнтралізацыя:&lt;/strong&gt; Паколькі ключы захоўваюцца і кіруюцца ў асобнай воблачнай інфраструктуры (Cloudflare), патэнцыйнаму хакера не будзе дастаткова скампраметаваць наш галоўны сервер. Яму спатрэбілася б адначасова пераадолець дзве зусім розныя, узаемна ізаляваныя сістэмы.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Хуткасць (Low Latency):&lt;/strong&gt; Cloudflare Workers працуюць у глабальнай Edge-мережы (найбліжэйшай да карыстальніка), таму запыт ключа да іх (для аўтарызаванага дэшыфравання) дадае толькі мінімальную затрымку, захоўваючы прадукцыйнасць праграмы.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Строгі кантроль доступу:&lt;/strong&gt; Worker наладжаны так, што аддае ключы толькі пасля атрымання правільна падпісаных і пацверджаных запытаў ад нашага SymmetricKeyService, правяраючы ўсе абмежаванні CORS і IP.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Вынік&lt;/h2&gt;
&lt;p&gt;MigrainePulse – гэта не проста інструмент для адсочвання даных. Гэта бяспечная прастора. Спалучаючы надзейную архітэктуру NestJS (&lt;a href=&quot;https://github.com/wirtaw/migraine-tracker-monolith/blob/master/src/auth/symmetric-key/symmetric-key.service.ts&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;symmetric-key.service.ts&lt;/a&gt;) з дэцэнтралізацыяй, якую прадастаўляюць Cloudflare Workers, мы стварылі сістэму, у якой асабістая інфармацыя карыстальніка застаецца заблакаванай нават у самых горшых сцэнарыях.&lt;/p&gt;
&lt;p&gt;Для нас «Бяспека па-першае» – гэта не проста гучная фраза для маркетынгу – гэта інжынерны фундамент, на якім пабудавана ўся сістэма MigrainePulse. Таму што калі мы гаворым пра здароўе, няма месца для кампрomісаў у пытанні канфідэнцыйнасці.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Ёсць пытанні пра нашу тэхнічную архітэктуру? Далучайцеся да дыскусіі ў каментарах альбо паспрабуйце &lt;a href=&quot;https://migrainepulse.com/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;MigrainePulse&lt;/a&gt; самі!&lt;/p&gt;
</description>
        <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/migraine-pulse-security-key-management-service/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Migraine Pulse – перанос схемы дадзеных у бэкенд</title>
        <link>https://blog.poplauki.eu/be/blog/migraine-pulse-data-schema-backend/</link>
        <description>&lt;p&gt;&lt;strong&gt;Сутатэнне&lt;/strong&gt;: У гэтым артыкуле апісана перанос схемы дадзеных з фронтэнду ў бэкенд у дадатку Migraine Pulse. Вы даведаецеся, як мы рэалізавалі дынамічную схему з выкарыстаннем NestJS, валідацыю JSON Schema і як гэта спрасціла працэс экспарту/імпарту дадзеных.&lt;/p&gt;
&lt;p&gt;Як я згадваў ва ўступным допісе пра дадатак - першая версія была прататыпам. React-дадатак, у які я імпартаваў фармат JSON, які захоўваўся лакальна. Ён запаўняў дадатак маімі падзеямі мігрэні, сімптомамі і г.д. Я ўдасканальваў пэўныя рэчы, змяняў (дадаваў дадзеныя). У канцы рабіў экспарт, каб мець апошнія змены.&lt;/p&gt;
&lt;p&gt;Адначасова я правяраў і ѡдасканальваў неабходныя палі для кожнага элемента.&lt;/p&gt;
&lt;p&gt;Пазней я пачал будаваць &lt;a href=&quot;https://github.com/wirtaw/migraine-tracker-monolith&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;бэкенд&lt;/a&gt;, які ѡжо меў сувязь з базай дадзеных. Але пры стварэнні модуляў NestJS я ѡлічваў схему, над якой працаваў раней.&lt;/p&gt;
&lt;p&gt;Аднак да гэтага часу сам фармат схемы быў апісаны статычна на старонцы &lt;code&gt;settings/DataManagement&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Я вырашыл зрабіць яго дынамічным, г.зн. пры змене палёў або даданні, каб не трэба было ѡручную рэдактаваць старонку кожны раз.&lt;/p&gt;
&lt;h2&gt;Рэалізацыя&lt;/h2&gt;
&lt;p&gt;Першы крок дастаткова просты - стварыць новы модуль NestJS &lt;code&gt;data-management&lt;/code&gt; з сэрвісам і кантроллерам.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;nest g module data-management 
nest g &lt;span class=&quot;token function&quot;&gt;service&lt;/span&gt; data-management
nest g controller data-management&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Сэрвіс вяртае аб’ект схемы &lt;code&gt;JSON&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Injectable &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;@nestjs/common&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Ajv &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;ajv&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; addFormats &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;ajv-formats&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  dtoToJsonSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  ClassType&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  JsonSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./utils/dto-to-json-schema&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateIncidentDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../incidents/dto/create-incident.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateTriggerDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../triggers/dto/create-trigger.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateSymptomDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../symptoms/dto/create-symptom.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateMedicationDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../medications/dto/create-medication.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateLocationDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../locations/dto/create-locations.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  CreateWaterDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateBloodPressureDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateHeightDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateSleepDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateWeightDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../health-logs/dto/create-health-logs.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; DataValidationResponse &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./interface/validation.interface&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Injectable&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DataManagementService&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; ajv&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Ajv&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ajv &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Ajv&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; allErrors&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;addFormats&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ajv&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; 
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; incidentObjectSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;dtoToJsonSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
      CreateIncidentDto &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; ClassType&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;properties &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;properties &lt;span class=&quot;token operator&quot;&gt;??&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;properties&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; JsonSchema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;properties&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;createdAt &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      format&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;date-time&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; JsonSchema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; existingRequired &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isArray&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;required&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;required
      &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; requiredSet &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Set&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;existingRequired&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;userId&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;type&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;startTime&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;datetimeAt&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;
      requiredSet&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;required &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;requiredSet&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; incidentsSchema&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; JsonSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;array&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      items&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; incidentObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; rootSchema&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; JsonSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;object&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      properties&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        incidents&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; incidentsSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        triggers&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; triggersSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        symptoms&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; symptomsSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        medications&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; medicationsSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        locations&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; locationsSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        healthLogs&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; healthLogsSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        exportedAt&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; format&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;date-time&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        version&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      required&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;incidents&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;triggers&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;symptoms&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;medications&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;locations&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;healthLogs&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;exportedAt&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;version&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      additionalProperties&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; rootSchema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;У кантролеры вяртаецца аб’ект схемы &lt;code&gt;JSON&lt;/code&gt; са сэрвісу. Ён даступны з роляй USER, паколькі гэтая старонка даступная толькі ѡвайшошым карыстальнікам.&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Controller&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Get &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;@nestjs/common&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; DataManagementService &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./data-management.service&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Roles &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../auth/decorators/roles.decorator&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Role &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../auth/enums/roles.enum&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Controller&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;data-management&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DataManagementController&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;readonly&lt;/span&gt; dataManagementService&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; DataManagementService&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Roles&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Role&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;schema&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; object &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dataManagementService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Інтэграваць новаствораны ѡ старонку &lt;code&gt;settings/DataManagement&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;getDataSchema&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;token&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; response &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;env&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;MIGRAINE_BACKEND_API_URL&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/api/v1/data-management/schema&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    headers&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getHeaders&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;token&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ok&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Failed to fetch data schema&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;І першы крок дае магчымасць мадыфікаваць не HTML, а JSON-схему, апісваць яе і дзеліць на часткі. Дадаць версіяванне. Валідаваць файлы перад імпартам, каб не зламаць структуру дадзеных.&lt;/p&gt;
&lt;h3&gt;Сэрвіс і кантроллер валідацыі схемы&lt;/h3&gt;
&lt;p&gt;Дадаем новыя npm-пакеты для валідацыі з выкарыстаннем json schemas.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;pnpm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; ajv ajv-formats&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Injectable &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;@nestjs/common&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Ajv &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;ajv&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; addFormats &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;ajv-formats&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  dtoToJsonSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  ClassType&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  JsonSchema&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./utils/dto-to-json-schema&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateIncidentDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../incidents/dto/create-incident.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateTriggerDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../triggers/dto/create-trigger.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateSymptomDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../symptoms/dto/create-symptom.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateMedicationDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../medications/dto/create-medication.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CreateLocationDto &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../locations/dto/create-locations.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  CreateWaterDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateBloodPressureDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateHeightDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateSleepDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  CreateWeightDto&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../health-logs/dto/create-health-logs.dto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; DataValidationResponse &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./interface/validation.interface&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Injectable&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DataManagementService&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; ajv&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Ajv&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ajv &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Ajv&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; allErrors&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;addFormats&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ajv&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; 
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// Above content&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;validateImportData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; DataValidationResponse &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; schema&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; JsonSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; validate &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ajv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;schema&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; isValid &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;isValid&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; isValid&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; errors&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; validate&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;errors &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; isValid&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Дапаможная функцыя &lt;code&gt;mapValidatorToSchema&lt;/code&gt; для канвертацыі &lt;code&gt;DTO&lt;/code&gt; ѡ схему &lt;code&gt;JSON&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;reflect-metadata&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; getMetadataStorage &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;class-validator&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ClassType&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;T&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;args&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PrimitiveTypeName&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;number&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;integer&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;boolean&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;null&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PrimitiveSchema&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; PrimitiveTypeName&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  format&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;enum&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;number&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ArraySchema&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;array&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  items&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; JsonSchema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ObjectSchema&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;object&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  properties&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Record&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; JsonSchema&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  required&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  additionalProperties&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;boolean&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;JsonSchema&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; PrimitiveSchema &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; ArraySchema &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; ObjectSchema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ValidationMetadataLite&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  propertyName&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  constraints&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  each&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;boolean&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;MetadataStorageLite&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;getTargetValidationMetadatas&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    targetConstructor&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    targetSchema&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ValidationMetadataLite&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;asMetadataStorage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MetadataStorageLite &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;obj &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; obj &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;object&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;getTargetValidationMetadatas&#39;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; obj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; cast &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; obj &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; cast&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;getTargetValidationMetadatas &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;function&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; cast &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; MetadataStorageLite&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mapValidatorToSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  meta&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ValidationMetadataLite &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  designType&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; JsonSchema &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;meta&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; Number&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;number&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; Boolean&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;boolean&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;array&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; items&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;object&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; additionalProperties&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;meta&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isString&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isNumber&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;number&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isInt&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;integer&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isBoolean&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;boolean&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isDateString&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; format&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;date-time&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isUUID&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; format&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;uuid&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isEmail&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; format&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;email&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isArray&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;array&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; items&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isEnum&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; maybeEnum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isArray&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;meta&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constraints&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;meta&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;constraints&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;number&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;boolean&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; schema&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; PrimitiveSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;maybeEnum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; schema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;enum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; maybeEnum&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; schema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; Number&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;number&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; Boolean&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;boolean&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;array&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; items&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;string&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;object&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; additionalProperties&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token generic-function&quot;&gt;&lt;span class=&quot;token function&quot;&gt;dtoToJsonSchema&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;T&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  dtoClass&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ClassType&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ObjectSchema &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; rawStorage &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getMetadataStorage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; storage &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;asMetadataStorage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;rawStorage&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; metadatas&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ValidationMetadataLite&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; storage
    &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; storage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getTargetValidationMetadatas&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;dtoClass &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; byProp &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Map&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ValidationMetadataLite&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; m &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; metadatas&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; prop &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;propertyName&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; arr &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; byProp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;??&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    byProp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; properties&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Record&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; JsonSchema&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; required&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; byProp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;entries&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; designType &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Reflect&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getMetadata&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;token string&quot;&gt;&#39;design:type&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      dtoClass&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;prototype&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      prop&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Function&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; isArray &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;some&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isArray&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;isArray&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; eachMeta &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;each &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isArray&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; itemsSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mapValidatorToSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;eachMeta&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      properties&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;array&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; items&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; itemsSchema &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; preferredOrder &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isDateString&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isEnum&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isNumber&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isInt&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isBoolean&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isUUID&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isEmail&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isString&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&#39;isObject&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; chosen&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ValidationMetadataLite &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; t &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; preferredOrder&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        chosen &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; t&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;chosen&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;chosen&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; chosen &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; propSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mapValidatorToSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;chosen&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; designType&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; hasNested &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;some&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;nestedValidation&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        hasNested &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        designType &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        designType &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; Object &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        designType &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;Array&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        properties&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;dtoToJsonSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;designType &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; ClassType&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        properties&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; propSchema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; isOptional &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;some&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isOptional&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; hasNotEmpty &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; metas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;some&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; m&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;isNotEmpty&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;isOptional &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; hasNotEmpty&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; required&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;prop&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; schema&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ObjectSchema &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    type&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;object&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    properties&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    additionalProperties&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;required&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; schema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;required &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; required&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; schema&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Эндпойнт кантроллера для валідацыі файлаў.&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
  Controller&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  Get&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  Post&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  UploadedFile&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  UseInterceptors&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  BadRequestException 
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;@nestjs/common&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; FileInterceptor &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;@nestjs/platform-express&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; DataManagementService &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./data-management.service&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Public &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;../auth/decorators/public.decorator&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Controller&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;data-management&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DataManagementController&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;readonly&lt;/span&gt; dataManagementService&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; DataManagementService&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Roles&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Role&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Get&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;schema&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dataManagementService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getSchema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Roles&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Role&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Post&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;validate-upload&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;UseInterceptors&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;FileInterceptor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;file&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;validateFile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token decorator&quot;&gt;&lt;span class=&quot;token at operator&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;UploadedFile&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; file&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Express&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Multer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;File&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; DataValidationResponse &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;file&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BadRequestException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;No file uploaded.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;file&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mimetype &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;application/json&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BadRequestException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Uploaded file must be a JSON file.&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; fileContent&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; file&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;utf-8&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; jsonData&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fileContent&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; validationResult&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;unknown&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dataManagementService&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;validateImportData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;jsonData&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;validationResult &lt;span class=&quot;token keyword&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BadRequestException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;validationResult&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;message&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; validationResult &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; DataValidationResponse&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token function&quot;&gt;ErrorExceptionLogging&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; DataManagementController&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; error&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Прыклад выкарыстання ѡ фронтэндзе:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;checkUploadedFile&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;file&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; File&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; formData &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;FormData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  formData&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;file&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; file&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; response &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;API_URL&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/api/v1/data-management/validate-upload&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    method&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;POST&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    body&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; formData&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isValid&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token builtin&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;File is perfect! Proceed with import.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token builtin&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Validation failed:&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;errors&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Тут поўныя змены коду - &lt;a href=&quot;https://github.com/wirtaw/migraine-tracker-monolith/commit/6e9884018a822337c9546e28f1c3a480463d5bbe&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;backend&lt;/a&gt; і &lt;a href=&quot;https://github.com/wirtaw/migrane-tracker-dashboard/commit/dad4f607b455320753191ac1ce3d6c7362d2e25f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;frontend&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/migraine-pulse-data-schema-backend/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Парадокс глыбінні: чаму інтэлектуальная ізаляцыя — новая валюта поспеху</title>
        <link>https://blog.poplauki.eu/be/blog/deep-work/</link>
        <description>&lt;p&gt;Гэты артыкул узнік пасля вывучэння наватарскай кнігі &lt;a href=&quot;https://en.wikipedia.org/wiki/Cal_Newport&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Кэла Ньюпарта&lt;/a&gt; «Глыбокая праца: правілы засяроджанага поспеху ў адцягнутым свеце». Ньюпарт, прафесар камп’ютарных навук у Універсітэце Джорджтаўна, сцвярджае, што здольнасці засяроджвацца без адцягнення на пазнавальна патрабавальных задачах становіцца ўсё больш рэдкай — і ўсё каштоўнейшай — у нашай эканоміцы ведаў. Гэта даследаванне перадае асноўныя высновы яго даследаванняў праз прызму практычнага прымянення для сучасных прафесіяналаў.&lt;/p&gt;
&lt;h2&gt;Парадокс глыбінні: чаму інтэлектуальная ізаляцыя — новая валюта поспеху&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Эпідэмія адцягнення: танем у функцыянальнай незначнасці&lt;/strong&gt;
У сучасным ландшафце работы са ведамі разгортваецца ціхая крызіс. большасць прафесіяналаў тане ў моры функцыянальнай незначнасці — затрыманы ў стане пастаяннага руху, які не дае нічога трывалага. Мы авалодалі мастацтвам «быць занятымі», пакуль наша здольнасць да каштоўнага выніку згасае. Гэтая праблема ўзнікае з-за фундаментальнай няздольнасці адрозніваць два тыпы высілкаў: Глыбокую працу і Паверхневую працу.
Глыбокая праца — гэта прафесійная дзейнасць, якая выконваецца ў стане засяроджанасці без адцягнення, якая штурхае вашы пазнавальныя магчымасці да іх абсалютнай мяжы. Гэтыя высілкі ствараюць новую каштоўнасць, удасканальваюць вашу навыку і іх неймаверна цяжка аднавіць. Паверхневая праца, наадварот, уключае непазнавальна патрабавальныя лагічныя задачы, часта выконваемыя падчас адцягнення. У новай эканоміцы здольнасць да глыбіні становіцца ўсё больш рэдкай менавіта ў той момант, калі яе рыначная каштоўнасць імкліва расце. Гэта ўжо не проста звычка; гэта суперсіла.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Перавага глыбокай працы: майстэрства ў новай эканоміцы&lt;/strong&gt;
Каб выжыць у пераходзе да аўтаматызаванай і гіперканкурэнтнай эканомікі, неабходна авалодаць двумя асноўнымі навыкамі: здольнасцю хутка вывучаць складаныя рэчы і здольнасцю дасягаць элітнага ўзроўню з якасцю і хуткасцю. Ніводную з іх нельга дасягнуць праз фрагментаваную ўвагу паверхневых высілкаў.
Як даследчык пазнавальнай прадукцыйнасці, я сцвярджаю, што глыбіня — гэта фундаментальны механізм стварэння каштоўнасці. Каб яе дасягнуць, трэба выбраць структуру для канцэнтрацыі. Манастырскі метад прадугледжае радыкальную ізаляцыю для засяроджання на адной высокай мэце. Бімадальны метад дазваляе чётка размеркаваць час паміж глыбокімі перыядамі і перыядамі для ўсяго іншага. Нарэшце, Журналісцкі метад прадугледжае імгненны пераход у стан глыбокай працы, як толькі з’явіцца вольны прамежак часу. Незалежна ад метаду, мэта аднолькавая:
«Глыбокая праца — гэта засяроджанне на прафесійнай дзейнасці без адцягнення, каб пазнавальныя здольнасці маглі раскрыцца як мага поўнасцю. Толькі праз такія высілкі ствараюцца новыя каштоўнасці і развіваюцца навыкі».&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Пастка занятасці: шлях найменшага супору&lt;/strong&gt;
Чаму нам складана выбраць глыбіню? Адказ крыецца ў &lt;strong&gt;Прынцыпе найменшага супору&lt;/strong&gt;. Пры адсутнасці зваротнай сувязі пра тое, як канкрэтная паводзіна ўплывае на вынік, мы інстынктыўна выбіраем тое, што лягчэй у дадзены момант. Мы не лянівыя; мы пазнавальна не замацаваны.
Паколькі сучасная работа з ведамі пазбаўлена бачнага выніку фабрычнага канвеера, работнікі вяртаюцца да метрык індустрыяльнай эпохі: рабіць мага больш і мага бачней. Гэтая «бачная занятасць» служыць псіхалагічнай маскай. Мы блытаем колькасць адпраўленых лістоў з каштоўнасцю нашага выніку, выбіраючы паверхневы шлях найменшага супору замест строгага, часта самотнага шляху пазнавальнай глыбіні.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Прадуктыўная сіла бяздзейнасці: прадпрымальніцкая стратэгія&lt;/strong&gt;
Высокаінтэнсіўная засяроджанасць патрабуе адданасці таму, што многія называюць «бяздзейнасцю». Аднак высокпрадукцыйны чалавек разглядае адпачынак не як раскошу, а як перадумову. Каб дасягнуць максімальных вынікаў, трэба мець прадпрымальніцкае мысленне — імкнуцца да вынікаў, як бізнесмен, — якое прызнае, што час адпачынку з’яўляецца палівам для інсайтаў.
З неўралагічнага пункту гледжання, розуму не абавязкова патрэбна поўнае спыненне дзейнасці; яму патрэбна змена тэмпу для аднаўлення энергіі, неабходнай для глыбокай працы. Каб інтэграваць адпачынак у высокпрадукцыйную сістэму, выконвайце чатыры прынцыпы:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Засяродзьцеся на значных мэтах:&lt;/strong&gt; Накіруйце энергію на невялікую колькасць важных мэт.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ведучыя індыкатары:&lt;/strong&gt; Вымярайце паводзіны, якія вядуць да поспеху (напрыклад, гадзіны, праведзеныя ў глыбокай працы).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Табло вынікаў:&lt;/strong&gt; Вядзіце бачны ўлік перамог для падтрымання матывацыі.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Рытм адказнасці:&lt;/strong&gt; Усталюйце рэгулярны рытм для прагляду прадукцыйнасці.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;&lt;strong&gt;Падыход майстра да тэхналогій&lt;/strong&gt;
Большасць людзей выбіраюць свае лічбавыя інструменты на аснове &lt;strong&gt;Прынцыпу любой карысці&lt;/strong&gt;: калі інструмент прапануе любую нязначную перавагу, яны адчуваюць сябе апраўданымі ў яго выкарыстанні. Гэта пастка, якая вядзе да пазнавальнай фрагментацыі. &lt;strong&gt;Прынцып майстра&lt;/strong&gt; прапануе больш строгую альтэрнатыву:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;«Выкарыстоўвайце інструмент толькі тады, калі яго станоўчы ўплыў на асноўныя мэты значна пераўзыходзіць негатывы».&lt;/p&gt;
&lt;p&gt;Разгледзім аўтара Майкла Льюіса. Яго асноўная прафесійная мэта — пісаць гісторыі, якія змяняюць светапогляд. Каб дасягнуць гэтага, яго асноўныя крокі — цярплівы глыбокі даследаванне і ўважлівае пісьмо. Праз гэтую прызму інструмент, як Twitter (X), прапануе нязначную карысць (заставацца «інфармаваным»), якая затмеваецца негатыўным уплывам на яго здольнасць да глыбокага даследавання.
Каб пазбавіцца залежнасці ад інструментаў, паспрабуйце 30-дзённы «лічбавы пост». Потым спытайце: ці былі б гэтыя трыццаць дзён значна лепшымі, калі б я выкарыстоўваў гэтую паслугу? Ці камусьці было важна, што мяне не было? Калі адказ «не», інструмент перашкаджае вашай глыбіні.&lt;/p&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Якасны адпачынак: розуму патрэбна змена, а не спакой&lt;/strong&gt;
Многія прафесіяналы страчваюць засяроджанасць на «вампірскіх сайтах» у вольны час, бо не планіруюць свайго адпачынку. Як адзначыў Арнолд Бенет, розум — гэта не як канечнасць, якой трэба спыніць рух для аднаўлення:
«Розум можа працаваць бесперапынна і напружана; ён не стаміцца, як рука ці нага… Яму патрэбна толькі змена, а не спакой (акрамя сну)».
Незаплінаваны вечар стварае вакуум, які лёгка запаўняецца паверхневымі адцягненнямі. Структурыруючы свой вольны час мэтанакіраванай, патрабавальнай дзейнасцю — чытаннем, складанымі хобі ці глыбокімі сацыяльнымі сувязямі — вы абараняеце сваю пазнавальную здольнасць. Мэтанакіраваны адпачынак забяспечвае, што калі рабочы дзень пачнецца, ваш розум будзе аднаўлены і гатовы да высокаінтэнсіўнай канцэнтрацыі.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Радыкальнае мастацтва ігнаравання электроннай пошты&lt;/strong&gt;
Камунікацыя часта з’яўляецца найвялікшым ворагам пазнавальнай цэласнасці. Каб захаваць глыбіню, трэба прыняць «Прынцып прафесара» радыкальнай выбарчасці. Ігнаруйце любое паведамленне, якое адпавядае гэтым крытэрыям:&lt;/p&gt;
&lt;p&gt;Яно сфармулявана невыразна або цяжка адказаць непасрэдна.
Прапанова не цікавая або неадпаведная вашым асноўным мэтам.
Адказ не прынясе станоўчага выніку, і нічога дрэннага не здарыцца, калі вы не адкажаце.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Акрамя таго, выкарыстоўвайце &lt;strong&gt;мэтанакіраванае кіраванне электроннай поштай&lt;/strong&gt;. Замест перакідвання лістоў туды і назад, давайце «працэсна-арыентаваны» адказ, які зачыняе тэму. Разгледзім тыповы запыт на «кавяную сустрэчу». Замест «Канечна, калі?», што запускае 10-лістную перапіску, адкажыце: «Я магу сустрэцца ў аўторак а 10:00 у кавярні на 5-й вуліцы. Калі падыходзіць, сустрэнуся там; калі не, прапануйце два іншыя зручныя для вас часы». Гэта прымушае адпраўніка прыкласці больш высілку і вызваляе ваш розум ад «адкрытых петель», якія высмоктваюць увагу.&lt;/p&gt;
&lt;ol start=&quot;8&quot;&gt;
&lt;li&gt;&lt;strong&gt;Заключэнне: мужнасць быць менш занятым&lt;/strong&gt;
Поспех у сучасную эпоху прысвойваецца не тым, хто можа працаваць найдаўжэйшыя гадзіны або адказваць на найбольш паведамленняў. Ён зарэзерваваны для тых, хто мае мужнасць абараняць сваю пазнавальную глыбінню. Безжальна адкідаючы паверхневае, вы не проста эканоміце час — вы атрымліваеце энергію, неабходную для стварэння чагосьці каштоўнага.
Памяншэнне паверхневай працы — гэта не пра выкананне меншай колькасці задач; гэта пра станаўленне тыпам прафесіянала, які можа дасягаць вынікаў, немагчымых у стане пастаяннага адцягнення. Глядзячы ў свой каляндар, спытайце сябе: якія паверхневыя звычкі вы гатовы пажэртаваць, каб вярнуць сваю суперсілу?&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/deep-work/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Migraine Pulse – мая гісторыя стварэння асабістага дадатку для адсочвання мігрэні</title>
        <link>https://blog.poplauki.eu/be/blog/migraine-pulse-origin/</link>
        <description>&lt;h2&gt;Частка першая. Як усё пачалося&lt;/h2&gt;
&lt;p&gt;Часам мяне турбуюць прыступы мігрэні – часам моцныя. Я чуў, што вядзенне дзённіка прыступаў карыснае. У 2024 годзе, пасля асабліва моцнага прыступу, я пачаў запісваць тэкставыя апісанні з датамі і сімптомамі. Паралельна я пачаў тэставаць розныя дадаткі, у якіх спрабаваў запісваць тыя ж падзеі.&lt;/p&gt;
&lt;h2&gt;Чаму існуючыя дадаткі мне не падыходзілі&lt;/h2&gt;
&lt;p&gt;Першае, што мне не спадабалася ў існуючых дадатках – апрацоўка асабістых даных была недастаткова празрыстай. І бяспека таксама была сумніўнай.&lt;/p&gt;
&lt;p&gt;Другое, не хапала магчымасці імпарту і экспарту маіх даных. Мала фарматаў і ніякіх стандартаў.&lt;/p&gt;
&lt;p&gt;Трэцяе, не было магчымасці дадаваць сваю логіку прыступаў. Ці іншы рэсурс з данымі, якія менавіта мне патрэбныя, напрыклад прагноз магнітных бур або іх гісторыю.&lt;/p&gt;
&lt;p&gt;Тады я вырашыў, што зраблю свой уласны дзённік мігрэні для адсочвання сімптомаў. І не толькі гэта.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Што я вывучыў, ствараючы гэты праект&lt;/h2&gt;
&lt;p&gt;Ствараючы гэты праект, як і ўсё ствараючы, я вывучаў новыя тэхналогіі і інструменты. Я выпрабоўваў сэрвісы, якіх раней не выкарыстоўваў ні на рабоце, ні ў іншых асабістых праектах.&lt;/p&gt;
&lt;p&gt;Адным з першых рэчаў, што я выкарыстаў, было стварэнне протатыпу frontend. Ён застаўся амаль нязменным.&lt;/p&gt;
&lt;p&gt;Другой рэччу, якую я выкарыстоўваў для штурму мазгоў, генерацыі протатыпаў і перапісвання манатоннага коду, была AI. Тут я паспрабаваў ChatGPT, Khoj (Gemini, Claude Sonnet) і сэрвісы Google Antigravity.&lt;/p&gt;
&lt;p&gt;Код сэрвісаў – &lt;a href=&quot;https://github.com/wirtaw/migraine-tracker-monolith&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;backend&lt;/a&gt; і &lt;a href=&quot;https://github.com/wirtaw/migrane-tracker-dashboard&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;frontend&lt;/a&gt; – я пакінуў публічна даступным, бо лічу, што кожны павінен мець магчымасць узяць яго і мадыфікаваць для сябе. Ці дапамагчы мне ўдасканаліць. Ці прапанаваць і дадаць новы функцыянал.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Што будзе ў будучыні?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Дадам больш розных справаздач і модуль, які будзе аналізаваць толькі твае даныя і на іх аснове папярэджваць аб павышанай верагоднасці мігрэні або галаўнога болю.&lt;/li&gt;
&lt;li&gt;Пераклад на іншыя мовы – першымі будуць украінская, літоўская і польская.&lt;/li&gt;
&lt;li&gt;Выбар полу і даданне жаночага цыклу.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Дэма-асяроддзе, дзе можна паспрабаваць, не ўводзячы шмат інфармацыі – можна знайсці, перайшоўшы па гэтай &lt;a href=&quot;https://migrane-tracker-dashboard.sliplane.app/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;спасылцы&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Старонка дакументацыі знаходзіцца &lt;a href=&quot;https://wirtaw.github.io/migraine-tracker-docs/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Афіцыйны прадукт праграмы, дзе будзе мой асабісты функцыянал і больш інтэграцый – можна знайсці &lt;a href=&quot;https://migrainepulse.com/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;тут&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;picture class=&quot;article-image article-image--landscape article-image--article&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/migraine-pulse-kaip-pradejau-kurti-heatmap-landscape-400w.webp&quot; /&gt;&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/migraine-pulse-kaip-pradejau-kurti-heatmap-landscape-400w.jpeg&quot; /&gt;&lt;img src=&quot;https://blog.poplauki.eu/img/generated/migraine-pulse-kaip-pradejau-kurti-heatmap-landscape-400w.jpeg&quot; width=&quot;400&quot; height=&quot;267&quot; alt=&quot;Heatmap Migrain Pulse&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Заключэнне&lt;/h2&gt;
&lt;p&gt;У наступных блогах я раскажу падрабязней пра кожную функцыю. Таксама пра цікавыя адкрыцці пры стварэнні гэтага прадукту.&lt;/p&gt;
&lt;p&gt;Поспеху і здароўя!&lt;/p&gt;
</description>
        <pubDate>Wed, 11 Mar 2026 22:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/migraine-pulse-origin/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Спакой у турбулентным свеце Урокі Сэнэкі для 2026 года</title>
        <link>https://blog.poplauki.eu/be/blog/stoic-strategies-tranquility-modern-world/</link>
        <description>&lt;p&gt;Асноўныя стратэгіі:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Выбарчасць у дружбе: Хлуслівае атачэнне — галоўнае крыніца непакою. Выбірайце тых, хто цягне вас уверх, а не тых, хто харчуецца негатывам.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Аўтэнтычнасць і адпачынак: Прытворства выснажае. Будзьце сабой і давайце розуму перадышку — прагулкі на свежым паветры і простае зносінне харчуюць душу.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Сіла прыняцця: Свет губляецца, калі мы занадта моцна чапляемся за статус або рэчы. Памніце: любы чалавечы стан часова.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 28 Feb 2026 16:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/stoic-strategies-tranquility-modern-world/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>40 правакацыйных пытанняў для глыбокай самарэфлексіі</title>
        <link>https://blog.poplauki.eu/be/blog/40-provocative-questions-deep-self-reflection/</link>
        <description>&lt;h2&gt;Правакацыйныя пытанні для самага сябе&lt;/h2&gt;
&lt;p&gt;Шмат каму з нас час ад часу патрэбна добрае струс для таго, каб вырваць сябе з паўаўтаматычнага рутиннага стану. Спіс прыведзеных ніжэй правакацыйных пытанняў адразвольвае і дазваляе паглядзець на сваё жыццё з розных кутоў, стаць трохі усведомленей, зразумець што важна, дзе схаваны магчымасці і шмат іншага. Адзіна правільных адказаў на іх няма, дый не на ўсе можна адказаць адразу. Але нават самы пошук дапаможа пазнаць сябе і свае патрэбнасці, задумацца пра тое, што часта застаецца па-за полем зроку.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Што людзі скажуць на вашых пахаваннях? І хто будзе на іх прысутнічаць?&lt;/li&gt;
&lt;li&gt;Якія вашыя звычкі стаяць паміж вамі і шчасцем?&lt;/li&gt;
&lt;li&gt;Вы стаіце перад варатамі раю, вас пытаюць: “Чаму вас трэба ўпусціць?” Як вы адкажаце?&lt;/li&gt;
&lt;li&gt;Калі вы страціце сёння ўсё, як будзеце дзейнічаць? Да якіх людзей звярніцеся за дапамогай? Як зменяцца вашыя ўчынкі і звычкі?&lt;/li&gt;
&lt;li&gt;Ці ёсць людзі, якія азначаюць для вас вельмі шмат? Калі вы ў апошні раз гаварылі ім пра гэта?&lt;/li&gt;
&lt;li&gt;Што б вы змянілі ў сваім жыцці, калі б ведалі, што ніколі не захворыеце і не памрэце?&lt;/li&gt;
&lt;li&gt;У вас ёсць мільён даляр, але сёння апошні дзень вашага жыцця. Што вы зробіце?&lt;/li&gt;
&lt;li&gt;Як бы вы апісалі сябе пяццю словамі?&lt;/li&gt;
&lt;li&gt;Які шанцы, што вы ўжо упусцілі нешта важнае, пра што будзеце шкадаваць усё астатняе жыцце?&lt;/li&gt;
&lt;li&gt;Якія высновы можна было б зрабіць з гэтага?&lt;/li&gt;
&lt;li&gt;Калі б вы маглі зараз гарантавана валодаць трыма навыкамі, якія б яны былі? А галоўнае — чаму?&lt;/li&gt;
&lt;li&gt;Калі б вы маглі гарантавана пазбавіцца ад тры звычкі, то якіх? Чым яны перашкаджаюць вам сёння і чаму дагэтуль ад іх не пазбавіліся?&lt;/li&gt;
&lt;li&gt;Калі б вы маглі перажыць тры моманты з мінулага, то якія? Што ў іх асаблівае?&lt;/li&gt;
&lt;li&gt;Калі б вы ўмелі знаходзіць падыход і ўплываць на кожнага чалавека ў свеце, як бы выглядаў ваш шлях да поспеху? Чаго б вы дасягнулі і якім чынам?&lt;/li&gt;
&lt;li&gt;Якая першая думка прыходзіць вам у галаву пры сутыкненні з вельмі складанай праблемай або неўдачай?&lt;/li&gt;
&lt;li&gt;Ці лічыце вы, што ваша злосць, раздражненне і гнеў — гэта толькі вашая віна?&lt;/li&gt;
&lt;li&gt;Колькі ў вас было хобі пяць гадоў таму і колькі ёсць зараз? Калі ёсць розніца, то ў чым прычына?&lt;/li&gt;
&lt;li&gt;Якія тры галоўныя падзеі вашага жыцця? Вы прынялі тры ключавых рашэнні і цяпер жывеце зусім інакш, чым маглі. Чаму вы так учынілі і задаволены выборам?&lt;/li&gt;
&lt;li&gt;Чым вы займаліся, калі ў апошні раз былі так захаплены, што страцілі адчуванне часу?&lt;/li&gt;
&lt;li&gt;Ці спрабуеце вы час ад часу шукаць адказы на ўзнікаючыя пытанні пра сваё жыццё ці проста адпускаеце іх?&lt;/li&gt;
&lt;li&gt;Чаму вы, быўшы зранку матываванымі, да вечара страчваеце матывацыю? І наадварот, што менавіта вы рабілі, калі зранку зусім нічога не хацелі, а да вечара былі поўны энтузіязму?&lt;/li&gt;
&lt;li&gt;Калі б вас наведала карма, то яна б дапамагла або пакарала вас? За што менавіта і якім спосабам?&lt;/li&gt;
&lt;li&gt;Што вы павінны сабе?&lt;/li&gt;
&lt;li&gt;Што вы павінны сваёй сям’і і сябрам?&lt;/li&gt;
&lt;li&gt;Калі вы думаеце пра будучыню — яно лякае ці натхняе вас?&lt;/li&gt;
&lt;li&gt;Як вы лічыце: трэба спачатку дапамагчы сабе ці чалавеку, які патрабуе дапамогі? І ў якіх менавіта выпадках?&lt;/li&gt;
&lt;li&gt;Што робіць вас асаблівым?&lt;/li&gt;
&lt;li&gt;Колькіх людзей вы па-сапраўднаму кахаеце? Што вы робіце для іх і як часта?&lt;/li&gt;
&lt;li&gt;Апішыце самую лепшую прыгоду ў сваім жыцці.&lt;/li&gt;
&lt;li&gt;Дзе б вы хацелі жыць? Чаму дагэтуль туды не пераехалі?&lt;/li&gt;
&lt;li&gt;Вы больш верыце ў логіку ці творчае мысленне?&lt;/li&gt;
&lt;li&gt;Кім вы захапляецеся і чаму?&lt;/li&gt;
&lt;li&gt;Калі б вы даведаліся, калі і як памрэце, як бы змянілася ваша жыццё зараз?&lt;/li&gt;
&lt;li&gt;Што такое гонар? Ці мае яна для вас значэнне?&lt;/li&gt;
&lt;li&gt;Што лепш: дзесяць гадоў жыць з цудоўным здароўем ці трыццаць гадоў з пасярэднім?&lt;/li&gt;
&lt;li&gt;Калі б вы, пачынаючы з гэтага моманту, не выдаткоўвалі час дарма, чаго б вы дасягнулі?&lt;/li&gt;
&lt;li&gt;Якія сферы свайго жыцця вы кантралюеце?&lt;/li&gt;
&lt;li&gt;Найчасцей вы знаходзіцеся ў зоне камфорту ці па-за ёй?&lt;/li&gt;
&lt;li&gt;Вы лічыце сябе героем ці злодзеем?&lt;/li&gt;
&lt;li&gt;Якіх вучоных вы лічыце злодзеямі і чаму?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Філософ Вольтар заклікаў судзіць пра чалавека па тых пытаннях, якія ён задае. Гэта добрая і правільная парада, таму што дзякуючы гэтаму можна шмат даведацца: ад уміння дакапацца да суты рэчаў да асабістых прыярытэтаў. Вучыцеся задаваць правільныя пытанні, у тым ліку самі сабе — гэта таксама свайго роду мастацтва. Пастаянна пытайце сябе пра тое, чаму нешта адбылося і як вырашыць тую ці іншую праблему.&lt;/p&gt;
</description>
        <pubDate>Wed, 28 Jan 2026 23:29:37 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/40-provocative-questions-deep-self-reflection/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Сіла маўчання ѡ інтэрнэце: чаму не абавязкова мець меркаванне пра ѡсё</title>
        <link>https://blog.poplauki.eu/be/blog/power-of-not-having-an-online-opinion/</link>
        <description>&lt;p&gt;Табе не абавязкова мець меркаванне адносна ѡсёга ѡ інтэрнэце.
Некаторыя рэчы — не твайго сабачага розуму справа.&lt;/p&gt;
&lt;p&gt;У сучасным свеце соцсеткі прымушаюць нас адчуваць, што мы павінны высказацца па любому прычыне. Але сапраунае свабода пачынаецца там, дзе вы дазваляеце сабе не ѡнікаць у лішняе. Беражыце свой рэсурс.&lt;/p&gt;
</description>
        <pubDate>Sat, 27 Dec 2025 16:02:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/power-of-not-having-an-online-opinion/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Як перастаць парауноуваць сябе з іншымі і знайсці свой шлях: філасофскія разважанні пра сэнс жыцця</title>
        <link>https://blog.poplauki.eu/be/blog/stop-comparing-find-your-path/</link>
        <description>&lt;p&gt;Парауноуваць сябе з іншымі — звычка, закладзеная ѡ нас з ранняга дзяцінства. Мы вучымся глядзець на сябе вачамі навакольных, быць аб’ектам чыйсьці ацэнкі, імкнуцца адпавядаць чужым чаканням. Так узнікае безглузда гонка, у якой мы губляем сябе.&lt;/p&gt;
&lt;p&gt;Але варта задумацца: ці ёсць у гэтай гонцы канечная мэта? Хіба можна атрымаць сапраунае задавальненне, спрабучы наздагнаць чужыя поспехі, змяняючыся па чыйсьці стандартах?&lt;/p&gt;
&lt;p&gt;Нас рэдка вучаць ісці шляхом уласнай душы, шукаць у сабе унікальнае, быць у згодзе з сабой. Як часта мы дазваляем знешняму свету станавіцца нашым керманічам, забываючы, што сапраунае свабода — гэта не права быць як усе, а права быць сабой?&lt;/p&gt;
&lt;p&gt;Перамогу можна назваць сапраунай толькі тады, калі яна становіцца следствам ѡнутранага выбару, водгуку сэрца, руху уласнай волі. Толькі выйшаушы за межы нав’язаных стэрэатыпау, мы можам пачаць жыць сваё сапраунае жыцце, а не ад IGрываць сацыяльную ролю.&lt;/p&gt;
&lt;p&gt;Усё астатняе — толькі спроба ѡтрымацца на паверхні звычайных сцэнарыяу, не дапускаючы сабе пытання: “А хто я насамрэч?”&lt;/p&gt;
&lt;p&gt;Калі вы хочаце наблізіцца да сваёй сутнасці, паспрабуйце зрабіць крок:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Жывіце зсярэдзіны, а не звонку.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Дазваляйце сабе адказваць за свае пачуцці і рашэнні.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Адмовіцеся ад параунавання і спаборніцтва — выбірайце даследаванне і прыняцце.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Не тлумачце сябе свету — свету не патрэбен ваш справаздач, а ваша прысутнасць.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Працуйце ѡдумна, а не выснажаючы сябе.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Пробуджайце творчую сілу, дазваляйце ёй весці.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Напауняйце кожную справу сэнсам і ѡувагай.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Дазваляйце саме ствараць сэнс свайго жыцця — не шукаць гатовы, а нараджаць свой.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 31 Oct 2025 22:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/stop-comparing-find-your-path/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>9 Паводніцкіх Прыкмет Спрауды Перспектыуных Людзей</title>
        <link>https://blog.poplauki.eu/be/blog/9-behavioral-signs-of-truly-promising-people/</link>
        <description>&lt;p&gt;Важнасць атачэння чаргоуна. Аднак як знайсці карысных людзей — пытанне адкрытае. Прапануем падборку гаварлівых паводніцкіх прыкмет.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Іх не цягне ѡніз атачэнне і жаданні. Яны незалежныя і адмауляюцца, разумна трымаючыся прыярытэтау.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Яны не жоняцца за натоупам. Глядзяць на рэчы трохі інакш. Паважаюць паняцце «індывідуальнасць».&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Не баяцца задаваць пытанні. Падтрымліваюць цікавасць і адкрытыя для дыскусій. Не імкнуцца яра навязваць свае погляды як адзіна правільныя.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Не бяруць удзел у сvetsкіх размовах і безглуздай балакатні. Ім усё роуна, хто што гатуе на вячэру, хто з кым сустракаецца, хто што адеу і што сказау.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Яны надаюць перавагу ѡсамітненню крутымі тусауказмі. Разумеюць розніцу паміж маючым задавальненнем і сапрауным задавальненнем.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Яны раздражнёныя дачыненні да дурных, агрэсіуна-насцірлівых і таксічных людзей. Такіх пазнаюць за дзевяць зямёу.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Яны ѡмеюць лёгка і даступна тлумачыць. Выразныя ѡ ідэях, могуць зрабіць эскізы і дыяграмы, калі трэба для тлумачэнняу.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Яны пазнаюць паверхневыя веды. Вывучаюць рэчы з розных бакоу і кайфуюць ад чужых пунктау гледжання, незвыклых.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Калі вы натрапілі на кагось, хто пападае пад вызначэнне хаця б 2-3 пунктау — гэта той, хто патрэбна. Гэта той, чый горад дапаможа дасягнуць поспеху хутчэй. адпаведна чым больш падобных людзей ѡ атачэнні, тым лепш.&lt;/p&gt;
</description>
        <pubDate>Wed, 29 Oct 2025 20:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/9-behavioral-signs-of-truly-promising-people/</guid>
      </item>
      
    
    
    
    
    
    
      
      <item>
        <title>Як спрасціць жыццё 42 правілы для усведомленага жыцця</title>
        <link>https://blog.poplauki.eu/be/blog/how-to-make-life-simpler-42-rules/</link>
        <description>&lt;p&gt;У сучасным свеце, дзе мы пастаянна спяшаемся і спрабуем паспець усё і адразу, прастата становіцца раскошшу. Хэнрык Эдберг, аўтар папулярнага блога &lt;a href=&quot;https://www.positivityblog.com/welcome-new-homepage/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;The Positivity Blog&lt;/a&gt;, сабраў 42 прынцыпы, якія дапамагаюць не толькі спрасціць жыццё, але і зрабіць яго па-сапраўднаму поўназначным.&lt;/p&gt;
&lt;h2&gt;Выход са зоны камфорту&lt;/h2&gt;
&lt;p&gt;Першае правіла здаецца парадаксальным — паспрабуйце рабіць процілеглыя рэчы. Калі звыклі есці шмат мяса, адмовіцеся ад яго на час. Любіце спрэчыць — прамаўчыце. Прасыпаліся позна — уставайце раней. Гэтыя маленькія эксперыменты становяцца прышчэпкай супраць застою і дапамагаюць лягчэй адаптавацца да зменаў у жыцці.&lt;/p&gt;
&lt;h2&gt;Кіраванне часам&lt;/h2&gt;
&lt;p&gt;Час — наш найкаштоўнейшы рэсурс, і невялікія змены ў яго выкарыстанні даюць значныя вынікі. Прасыпайцеся на 20 хвілін раней — так з’явіцца час для спраў, да якіх раней не даходзілі рукі. Прыходзьце на сустрэчы на 10 хвілін раней, каб пазбегнуць стрэсу ад спазнення і лепш падрыхтавацца.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Адназадачнасць&lt;/strong&gt; становіцца суперсілай у эпоху многозадачнасці. Наш мозак насамрэч не можа эфектыўна выконваць некалькі спраў адначасова — ён проста хутка пераключаецца паміж задачамі. Канцэнтруючыся на адной справе, мы робім яе якасней і з большай канцэнтрацый.&lt;/p&gt;
&lt;h2&gt;Перспектыва і прыярытэты&lt;/h2&gt;
&lt;p&gt;Два простыя пытанні дапамагаюць расставіць прыярытэты правільна. Першае: «Ці спрабуеце вы не ускладняць тое, што адбываецца?» — дапамагае знайсці простыя рашэнні для складаных праблем. Другое: «Ці будзе гэта важна праз 5 гадоў?» — адсявае дробязі, праз якія мы часта перажываем.&lt;/p&gt;
&lt;h2&gt;Разумнае спажыванне&lt;/h2&gt;
&lt;p&gt;Фінансавая прастата пачынаецца з &lt;strong&gt;усвядомленых пакупак&lt;/strong&gt;. Выдаткоўвайце толькі заработаныя грошы і прымяняйце правіла абдумвання: колькасць дзён разважання павінна раўняцца колькасці сотняў у кошце пакупкі. Гэта дапамагае пазбегнуць імпульсных выдаткаў і непотрыбных крэдытаў.&lt;/p&gt;
&lt;p&gt;Дамашняя кулінарыя эканоміць не толькі грошы, але і здароўе. Гатуйце больш порцый, каб потым проста разігрэваць гатовае — гэта зэканоміць час і пазбавіць ад частага мыцця посуду. За пакупкамі ідзіце сытымі, каб не паддавацца спакусе купіць лішняе.&lt;/p&gt;
&lt;h2&gt;Усведомленасць у паўсядзённасці&lt;/h2&gt;
&lt;p&gt;Жыццё складаецца з дробязей, якія мы часта выпускаем у метушні. Насладжайцеся маленькімі радасцямі: прыгожым заходам сонца, квітнеючымі дрэвамі пасля зімы, апошнім шматочкам любімага торта. Ежце павольней, не спяшаючыся, насладжаючыся кожным шматочкам — так насычэнне прыйдзе хутчэй, хаця з’ядзеце менш.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Жывіце тут і зараз&lt;/strong&gt;. Усвідомляйце кожны дзень замест таго, каб несціся праз яго, пастаянна думаючы пра заўтрашнія клопоты.&lt;/p&gt;
&lt;h2&gt;Арганізацыя прасторы і інфармацыі&lt;/h2&gt;
&lt;p&gt;Парадак у доме і на рабочым месцы непасрэдна ўплывае на эфектыўнасць і спакой. Калі ўсё знаходзіцца на сваіх месцах, не выдаткоўваецца час на пошукі, а нервы застаюцца цэлымі.&lt;/p&gt;
&lt;p&gt;Чалавечая памяць недасканалая, таму запісвайце важнае. Вядзіце спісы справаў, пакупак, сустрэч, а таксама вызначце 4 прыярытэтныя мэты на год і перыядычна звяртайцеся да іх.&lt;/p&gt;
&lt;p&gt;Спрасціце камунікацыю: пішыце кароткія лісты з 1-5 сказаў і адказвайце на пошту адзін раз у дзень у вызначаны час. Гэта ўратуе ад пастаяннай праверкі пошты кожныя 5 хвілін.&lt;/p&gt;
&lt;h2&gt;Вызваленне ад лішняга&lt;/h2&gt;
&lt;p&gt;Выязжайцеся ад мотлаху ва ўсіх сферах жыцця. Гэта тычыцца непотрыбных рэчаў у доме, праектаў, якія тармозяць развіцце, негатыўных думак і людзей, якія забираюць энергію пастаяннымі скаргамі.&lt;/p&gt;
&lt;p&gt;Перастаньце спрабаваць усім дагадзіць — гэта немагчыма і марна. Заўсёды знойдуцца людзі, якім вам не спадабаецца па тысячы розных прычын.&lt;/p&gt;
&lt;p&gt;Адмовіцеся ад імкнення да &lt;strong&gt;абсалютнага перфекцыянізму&lt;/strong&gt;. Гэта не азначае працаваць апусціўшы рукавы, але зацыкленне на найдробнейшых дэталях вядзе да марнатраты часу, энергіі і нерваў.&lt;/p&gt;
&lt;h2&gt;Стратэгія вырашэння задач&lt;/h2&gt;
&lt;p&gt;Разбівайце складаныя задачы на маленькія часткі і вырашайце іх паэтапна. Следуйце правілу 20/80: выдаткоўвайце 20% часу на абдумванне рашэння і 80% — на яго рэалізацыю, а не наадварот.&lt;/p&gt;
&lt;p&gt;Канцэнтруйцеся на некалькіх важных рэчах, адсікаючы ўсё другасное. Лучш накіраваць усю энергію на 2-3 асноўныя задачы, чым рассейвацца на 10 праектаў адначасова.&lt;/p&gt;
&lt;h2&gt;Дагляд пра сябе&lt;/h2&gt;
&lt;p&gt;Займайцеся спортам кожны дзень, хаця б гэта будзе пішая прагулка. Фізічная актыўнасць знімае стрэс, дадае энергіі і адганяе негатыўныя думкі.&lt;/p&gt;
&lt;p&gt;Вывучайце спосабы барацьбы са стрэсам: медытацыя, йога, класічная музыка, прабежкі — знайдзіце тое, што працуе для канкрэтнай сітуацыі. Не забывайце пра просты, але эфектыўны метад — глыбокае дыханне, якое расслабляе і насычвае кроў кіслародам.&lt;/p&gt;
&lt;h2&gt;Прынцып паступовасці&lt;/h2&gt;
&lt;p&gt;Уносіце толькі адну змену за адзін раз. Выязжацца ад старых звычак і ўкараняць новыя вельмі складана, таму дзейнічайце паступова, замацоўваючы кожны пункт перад пераходам да наступнага.&lt;/p&gt;
&lt;p&gt;І апошняе правіла — дазвольце сабе часам проста паленіцца. Пасля навязення парадку ў жыцці і вызвалення ад лішняга ў вас з’явіцца час для прыемнай лені. Адзін раз у тыдзень дазвольце сабе не думаць пра работу і мэты, а проста насладжацца цішай, кнігай або самотнасцю. Гэтая маленькая лень стане лекарствам і дапаможа пачаць новы тыдзень з натхненнем.&lt;/p&gt;
&lt;p&gt;Прастата не азначае прымітыўнасць — гэта мастацтва знаходзіць элегантныя рашэнні для складаных пытанняў і канцэнтравацца на тым, што сапраўды важна.&lt;/p&gt;
</description>
        <pubDate>Fri, 26 Sep 2025 21:40:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/how-to-make-life-simpler-42-rules/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Карысныя рэсурсы для вывучэння JavaScript на GitHub</title>
        <link>https://blog.poplauki.eu/be/blog/list-js-useful-links/</link>
        <description>&lt;p&gt;Сардэчна запрашаем у мой адобраны спіс выдатных рэпазіторыяу GitHub, якія могуць дапамагчы вам вывучыць JavaScript, ад самых асоу да прасунутых канцэпцый. GitHub з’яуляецца скарбніцай навучальных матэрыялау, прыкладау кода і інтэрактыуных праектау.&lt;/p&gt;
&lt;p&gt;Спіс спасылак на JavaScript:&lt;/p&gt;
&lt;hr /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sorrycc/awesome-javascript&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Awesome JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/getify/You-Dont-Know-JS&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;You-Dont-Know-JS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/denysdovhan/wtfjs&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Wtfjs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mbeaudru/modern-js-cheatsheet&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Modern JS Cheatsheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/HowProgrammingWorks/Book/blob/master/content/en/Index.md&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;HowProgrammingWorks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/trekhleb/javascript-algorithms&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;JavaScript Algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ryanmcdermott/clean-code-javascript&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;clean-code-javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sindresorhus/awesome-npm&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Awesome npm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tc39&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Ecma International, Technical Committee 39 – ECMAScript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 29 Jun 2025 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/list-js-useful-links/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Раскрыццё неўротызму: 5 пастак, якія трэба распознаць у сабе і іншых</title>
        <link>https://blog.poplauki.eu/be/blog/understanding-the-5-traps-of-neuroticism/</link>
        <description>&lt;p&gt;Вы калі-небудзь адчувалі пастаяннае непакой, гнятучае пачуцце, што нешта не так, нават калі звонку ўсё здавалася  парадку? Або, магчыма, вы замечалі ў іншых патэрны, якія проста не складаюцца? Цалкам магчыма, вы сутыкаецеся з тонкім, але магутным уплывам неўротызму.&lt;/p&gt;
&lt;p&gt;Неўротызм, па сваёй сутнасці, часта з’яўляецца следствам нерозвязаных ѡнутраных канфліктаў. Гэта складаны псіхалагічны ландшафт, дзе нашы ѡнутраныя барацьбы праецыруюцца вонку, часам скажаючы нашы успрыманні і ѡзаемадзеянні нечаканымі спосабамі. Сёння мы збіраемся даследаваць пяць пашыраных «пастак», у якія часта трапляюцца людзі, схільныя да неѡротычных патэрнаў, і, што асабліва важна, як распознаць іх у сабе ці навакольных.&lt;/p&gt;
&lt;h2&gt;1. Прэтэнзія на каханне: Калі сувязь становіцца кастылём&lt;/h2&gt;
&lt;p&gt;мы ѡсе шукаем каханне і сувязь, але для неѡротычнай асобы само азначэнне кахання можа скажацца. тое, што можа быць названа «каханнем», часта з’яўляецца чымсь зусім іншым — адчайдушнай патрэбай, паратытычнай залежнасцю або жаданнем валодання.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Як гэта праяўляецца:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Патрэба ѡ іншых, каб жыць сваім жыццём&lt;/strong&gt;: Нездатнасць функцыянаваць незалежна, пакладаючыся на іншага чалавека для задавальнення базавых патрэб або надання сэнсу жыццю. ідзецца не пра сумеснае жыццё, а пра фундаментальную нездатнасць жыць уласным жыццём.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Паратытычнае існаванне&lt;/strong&gt;: Залежнасць ад кагось іншага для задавальнення сваих патрэб, таму што вы не можаце або не жадаеце задавальняць іх самі. Гэта не ѡзаемная падтрымка; гэта аднабаковае выснажэнне.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Валоданне дзеля прэстыжу&lt;/strong&gt;: Жаданне «валодаць» іншым, асабліва калі гэты чалавек мае значную ѡладу, прэстыж або багацце. успрыманае «каханне» менш звязана з самой асобай і больш з тым, што яна прадстаўляе для вашага ѡласнага самамнення.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Разуменне ѡплыву&lt;/strong&gt;: Гэтая пастка прыводзіць да стасункау, пабудаваных на нестабільнай аснове, часта выклікаючы вялізную напругу і не задавальненне з абодвух бакоу. Гэта каханне, якое душыць, а не вызваляе.&lt;/p&gt;
&lt;h2&gt;2. Прэтэнзія на дабрыню: Пакора, якая маскуецца пад дабрадзейнасць&lt;/h2&gt;
&lt;p&gt;Дабрыня — выдатная рыса, але, як і каханне, яна можа быць няслушна растлумачана ѡ неѡротычнай сістэме. Тут тое, што здаецца «дабрыняй», насамрэч можа быць глыбока ѡкаранёнай пакорай, падаўленнем сапраўдных пачуццяу, рухомых страхам.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Як гэта праяўляецца&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Пададзеная агрэсія&lt;/strong&gt;: Замест выражэння законнага гневу або разочавання, неѡротычная асоба можа падаўляць гэтыя агрэсіуныя імпульсы з-за пераважаючага страху асуджэння або адторгнення.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Рабаллепная паводзіна&lt;/strong&gt;: Надмернае жаданне дагадзіць, нават коштам асабістых выдаткау, не з сапраўднага альтруызму, а з адчайдушнай патрэбы ѡ схваленні. Гэта не сапраѡднае спачуванне; гэта стратэгічны ход, каб пазбегнуць несхвалення.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Разуменне ѡплыву&lt;/strong&gt;: Гэтая пастка перашкаджае аѡтэнтычнаму самавыражэнню і можа прывесці да абурання, якое кіпіць пад маскай дабразычлівасці. Гэта таксама ѡускладняе для іншых сапраѡдна ѡстананаўліваць кантакт, таму што дабрыня больш падобна на прадстауленне, чым на шчыры жэст.&lt;/p&gt;
&lt;h2&gt;3. Прэтэнзія на ѡсеахоЎтны інтарэс: Калі інтэлект дамінуе над эмоцыямі&lt;/h2&gt;
&lt;p&gt;У некаторых неѡротычных асоб, асабліва тых, хто адрэзаны ад сваих пачуццяу і эмоцыяу, існуе моцнае перакананне, што усё можна вырашыць чыстым розумам. Гэта часта выражаецца ѡ фасадзе ѡсезнайства або інтэнсіўнага інтарэсу да шырокага кола тэм.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Як гэта праяўляецца&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Надмерная залежнасць ад інтэлекту&lt;/strong&gt;: Перакананне, што лагічны аналіз можа вырашыць усе праблемы, часта ігнаруючы ролю эмоцыяу, інтуіцыі або міжасабінай дынамікі.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Прафэсія як шчыт&lt;/strong&gt;: Прысвячэнне прафэсіі або справе не дзеля яе ѡнутранай каштоўнасці, а як сродк дасягнення матэрыяльнага дабрабыту, прэстыжу або ѡлады. Спраѡдная матывацыя схавана, нават ад самога сябе.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Паверхневае ѡлучэнне&lt;/strong&gt;: Шырокі, але часта паверхневы інтарэс да многіх рэчау, які служыць спосабам пазбегнуць больш глыбокага эмацыйнага самааналізу або сапраѡднай уразлівасці.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Разуменне ѡплыву&lt;/strong&gt;: Гэтая пастка можа стварыць эмацыйны вакуум, прыводзячы да жыцця, якое здаецца інтэлектуальна багатым, але эмацыйна непоунаварцёным. Гэта таксама можа ѡускладніць для іншых фармаванне глыбокіх сувязяу, таму што пазбегаецца сапраѡдны эмацыйны абмен.&lt;/p&gt;
&lt;h2&gt;4. Прэтэнзія на шчырасць і справядлівасць: Агрэсія, апранутая ѡ дабрадзейнасць&lt;/h2&gt;
&lt;p&gt;Гэтая пастка больш пашырана сярод агрэсіўных неѡротычных тыпау. Тое, што яны прадстауляюць як непахісную шчырасць і адданасць справядлівасці, часта з’яўляецца тонка замаскіраваным выразам іх уласнай агрэсіі, замаскіраванай пад маральную перавагу.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Як гэта праяўляецца&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Жорсткая «шчырасць»&lt;/strong&gt;: Нездатнасць «змякчыць» або быць тактычным прадстауляецца як дабрадзейнасць, але часта служыць выхадам для варожасці, прызначанай прынізіці або паменшыць іншых, а не прапановай канструктыўнай прауды.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;«Не» як зброя&lt;/strong&gt;: Сказаць «не» — гэта не сцвярджэнне здаровых меж або сілы, а жаданне прынізіці, падавіці або падрываці іншых. ідзецца пра кантроль, а не пра перакананне.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Маражыраванне&lt;/strong&gt;: Тэндэнцыя громка аб’яуляць пра ѡласную праведнасць, агрэсіуна паказваючы на перадбачаныя недахопы або несправядлівасці іншых.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Разуменне ѡплыву&lt;/strong&gt;: Гэтая пастка стварае таксічнае асяроддзе, падрываючы давер і садзейнічаючы канфліктам. ідзецца не пра сапраѡдную шчырасць; ідзецца пра выкарыстанне маскі шчырасці для сцвярджэння дамінавання і выражэння агрэсіі.&lt;/p&gt;
&lt;h2&gt;5. Прэтэнзія на пакуты: Несвядомыя матывы за нешчасцем&lt;/h2&gt;
&lt;p&gt;Неѡротычныя асобы схільны да пакутау, але гэтыя пакуты часта здаюцца ім некантралюемымі, або, прынамсі, іх сапраѡдныя крыніцы схаваны. Знешняму назірачу іх няшчасці могуць здавацца перабільшанымі або надмерна драматызаванымі. Аднак за гэтымі пакутамі часта хаваюцца тайныя матывы.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Як гэта праяўляецца&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Крык пра ѡувагу/падтрымку&lt;/strong&gt;: Пакуты могуць быць несвядомым заклікам да ѡувагі, дагляду або схвалення з боку іншых.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Няслушнае прыпісанне прычыны&lt;/strong&gt;: Неѡротычная асоба можа лічыць, што пакутуе з-за пачуцця віны, тады як насамрэч боль праистекае з нездольнасці адпавядаць ідэалізаванаму ѡліяду пра сябе.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Самотнасць, замаскіраваная пад разбітае сэрца&lt;/strong&gt;: Віраванне, што чалавек пакутуе ад непадзеленага кахання, тады як сапраѡдная прычына хаваецца ѡ нездольнасці пераносіць самотнасць з-за ѡнутранай раздробленасці.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Перабільшаная драма&lt;/strong&gt;: Хоць боль для таго, хто пакутуе, рэальны, яго апісанне часта здаецца непрапарцыйным рэальным падзеям, што прыводзіць іншых у збянтэжэнне або выснажае.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Разуменне ѡплыву&lt;/strong&gt;: Гэтая пастка можа прывесці да цыклу пастаяннай ахвярнасці, дзе сапраѡднае самаразуменне і рост ѡускладняюцца несвядомымі маніпуляцыямі або няслушным тлумачэннем уласнага болю. Гэта таксама ѡускладняе для іншых аказанне эфектыунай падтрымкі, таму што сапраѡдныя патрэбы не агучваюцца.&lt;/p&gt;
&lt;h2&gt;Распазнанне нітак неѡротызму&lt;/h2&gt;
&lt;p&gt;Гэтыя пяць пастак, хоць і розныя, часта пераплятаюцца, прыводзячы да складаных маральных дылем і міжасабіных праблем для неѡротычнай асобы. У рэшце рэшт яны з’яўляюцца следствам нерозвязаных ѡнутраных канфліктау — чалавек, падзелены на часткі, нездольны поунасцю інтэграваць свой вопыт і эмоцыі.&lt;/p&gt;
&lt;p&gt;Разуменне гэтых патэрнау — першы крок да іх распутывання. Калі вы ѡзнаёміце гэтыя рысы ѡ сабе, гэта запрашэнне даследаваць свой ѡнутраны свет з цікавасцю і спачуццём. Калі вы бачыце іх ѡ іншых, гэта можа садзейнічаць больш глыбокаму разуменню, дазваляючы вам ѡзаемадзейнічаць з большай усведомленасцю і эмпатыяй. Шлях да вызвалення ад гэтых небачных ланцугоу пачынаецца з прызнання.&lt;/p&gt;
&lt;h2&gt;Крыніца&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.instagram.com/psiholog_natakoshulko/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;psiholog_natakoshulko&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 28 Jun 2025 16:18:57 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/understanding-the-5-traps-of-neuroticism/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Цынічныя Праўды: Непрыемныя Рэальнасці пра Жыццё і Стасункі</title>
        <link>https://blog.poplauki.eu/be/blog/cynical-truths/</link>
        <description>&lt;p&gt;&lt;picture class=&quot;article-image article-image--square article-image--article&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/cynical-truths-square-400w.webp&quot; /&gt;&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/cynical-truths-square-400w.jpeg&quot; /&gt;&lt;img src=&quot;https://blog.poplauki.eu/img/generated/cynical-truths-square-400w.jpeg&quot; width=&quot;400&quot; height=&quot;400&quot; alt=&quot;Непрыемныя Рэальнасці пра Жыццё і Стасункі&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Уводзіны ў Цынізм&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Цынізм, па сваёй сутнасці, — гэта філасофія, якая ўкаранілася ў сумненні ў грамадскіх нормах і успрымаемых праўдах. Гэта імкненне адкінуць ілюзіі і паглядзець на свет крытычным, часта скептычным, поглядам. Хоць яго можна лічыць песімістычным, цынізм таксама можа быць шляхам да больш аўтэнтычнага і самасвядомага існавання. Цынікі каштуюць дабрадзейнасць і розум, часта адвяргаючы звычайныя жаданні багацця, ўлады і славы.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;11 Цынічных Праўд&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Постыйна прабачаючы ўсіх, вы дапамагаеце злу сцвярджацца ў безкарнасці.&lt;/strong&gt; Закрываючы вочы на неправамерныя дзеянні, вы проста дазваляеце ім працвітаць.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Перавышаная думка: Бог вас не пакліча&lt;/strong&gt;. Вы несёце адказнасць за свае дзеянні і іх наступствы.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Жыццёвыя неўдачы — гэта неабходнасць&lt;/strong&gt;. Яны непазбежныя і даюць каштоўныя ўрокі для росту.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Грошы, як ні круці, — галоўнае&lt;/strong&gt;. Фінансавая стабільнасць часта вызначае магчымасці і якасць жыцця.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Нават у найвялікшай неўдачы ёсць апраўданне&lt;/strong&gt;. Людзі заўсёды знойдуць спосаб рацыяналізаваць свае недахопы.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;«Заўсёды кажы так» — не лепшае правіла.&lt;/strong&gt; Усталяванне меж надзвычай важна для самазахавання і прадухілення эксплуатацыі.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Вы не першы ў чарзе на несправядлівасць гэтага свету.&lt;/strong&gt; Старанне — універсальны вопыт, і прызнанне гэтага можа садзейнічаць развіццю эмпатыі.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Усе носяць маскі&lt;/strong&gt;. Людзі прадстаўляюць розныя версіі сябе ў залежнасці ад сітуацыі.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Варта перагледзець свой спіс сяброў&lt;/strong&gt;. Не ўсе стасункі карысныя, а некаторыя могуць быць шкоднымі для вашага дабрабыцця.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ніхто не мысліць так, як вы.&lt;/strong&gt; Прыміце індывідуальнасць і зразумейце, што пункты гледжання моцна адрозніваюцца.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Кожны чалавек выкарыстоўвае вас па-свойму.&lt;/strong&gt; Прызнанне гэтага не абавязкова павінна быць негатыўным, але важна ўсвідомліваць дынаміку ў вашых стасунках.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Резюмэ&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Гэтыя цынічныя праўды могуць здавацца рэзкімі, але яны прапануюць твёры погляд на рэальнасці жыцця. Прызнаючы гэтыя праўды, вы зможаце арыентавацца ў свеце з большай інфармаванасцю, абараніць сябе ад маніпуляцый і прымаць больш абгрунтаваныя рашэнні. Прыняцце невялікай долі цынізму можа прывесці да больш аўтэнтычнага і ўстойлівага існавання.&lt;/p&gt;
</description>
        <pubDate>Mon, 23 Jun 2025 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/cynical-truths/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Двухбаковае Меч Жадання: Чаму «Будзь асцярожным са сваімі жаданнямі» — гэта пазачасовая мудрасць</title>
        <link>https://blog.poplauki.eu/be/blog/be-careful-what-you-wish-for-timeless-wisdom/</link>
        <description>&lt;p&gt;«Гэта важны ѡрок гісторыі, і ён прыводзіць да усвідомлення, якое заўсёды будзе правільным: будзьце асцярожнымі са сваімі жаданнямі.»&lt;/p&gt;
&lt;p&gt;— «То ж, што і заўсёды: Кіраўніцтва да таго, што ніколі не змяняецца» &lt;a href=&quot;https://www.amazon.com/Morgan-Housel/e/B084ZNV1LR&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Морган Хаўзел&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Гэтая магутная цытата выражае ісціну, такую ж старажытную, як самае чалавецтва. Мы часта женёмся за жаданнямі з непахіснай сканцэнтраванасцю, перакананыя, што іх дасягненне прынясе вышэйшае шчасце. Тым не менш, гісторыя, асабісты вопыт і глыбокія філасофскія традыцыі пастаянна раскрываюць парадокс: атрыманне менавіта таго, чаго мы хочам, часам можа прывесці да нечаканых цяжкасцей, больш глыбокага незадавальнення або нават шкадавання. І стоіцызм, і усведомленасць прапануюць безцінныя рамкі для разумення гэтых складаных адносін з нашымі жаданнямі, накіроўваючы нас да больш праніклівага і мірнага падыходу да жыцця.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Стоіцызм: Валадаранне ѡнутранай цытадэляй супраць знешніх жаданняу&lt;/h2&gt;
&lt;p&gt;Стоіцызм, старажытная філасофія, сканцэнтраваная на дабрадзейнасці, розуме і гармоніі з прыродай, прадастауляе надзейную аснову для разумення пастак невывучаных жаданняу. Яго асноўны прынцып, &lt;strong&gt;Дыхатамія Контролю&lt;/strong&gt;, вучыць нас адрозніваць тое, што знаходзіцца ѡ нашай уладзе (нашыя думкі, суджэнні і дзеянні), і тое, што не знаходзіцца (зовнішнія падзеі, меркаванні іншых людзей, здароуе, багацце). Надмернае жаданне таго, што знаходзіцца па-за нашым кантролем, для стоіка з’яуляецца прамым шляхам да пакування.&lt;/p&gt;
&lt;p&gt;Напрыклад, разгледзім &lt;strong&gt;жаданне славы або грамадскага прызнання&lt;/strong&gt;. Вы можаце ѡкладаць сваю энергію ѡ творчы праект, мрэчы пра хвалы і агульнае прызнанне. Стоік застрог бы ад гэтага палкага жадання. Чаму?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Знешняя Залежнасць:&lt;/strong&gt; Слава — гэта знешняе «байдужае». Яно не з’яуляецца па сваёй сутнасці добрым ці дрэнным, і, што ѡкрай важна, вы не можаце яго кантраляваць. Вы можаце ствараць мастацтва, але вы не можаце кантраляваць, як на яго адрэагуюць іншыя.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Уразлівасць перад Удачай:&lt;/strong&gt; Калі ваша душэуны спакой залежыць ад грамадскага схвалення, вы становіцеся паняволенымі капрызным прыхотам іншых. Што, калі праект правалаіцца? Што, калі поспех прынясе нежаданую ѡувагу ці ціск? Сенека, выдатны стоік, шмат пісаў пра небяспекі пошуку папулярнасці, бо гэта часта кампрамэтуе чыйсьці шчырасць і ѡнутраны свет.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Кампраміс з Дабрадзейнасцю:&lt;/strong&gt; Інтэнсіунае імкненне да знешняй ацэнкі можа непрыкметна падшыць вашу адданасць дабрадзейнасці. Вы можаце выявіць, што робіце выбар, грунтуючыся на тым, што папулярна, а не на тым, што правільна або аутэнтычна вашаму рамёслу.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Замест таго, каб жадаць славы, стоік параіў бы інтэрыярызаваць вашыя жаданні: жадаць &lt;strong&gt;рабіць сваю лепшую работу&lt;/strong&gt;, &lt;strong&gt;дзейнічаць шчыра&lt;/strong&gt; і &lt;strong&gt;старанна прыкладаць намаганні&lt;/strong&gt;. Спрауднае задавальненне прыходзіць ад самога дабрадзейнага намагання, а не ад знешняга выніку.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Усведомленасць: Назіранне за пераходнай прыродай тугі&lt;/h2&gt;
&lt;p&gt;Усведомленасць, глыбока ѡкаранёная ѡ будыйскіх традыцыях, падкрэслівае культываванне &lt;strong&gt;усвідомлення тэперашняга моманту без асуджэння&lt;/strong&gt;. Калі справа даходзіць да жаданняу, усведомленасць заахвочвае нас назіраць іх як пераходныя ментальныя падзеі, а не неадкладна чэпляцца за іх або дзейнічаць адпаведна да іх. Праblema не ѡ самім жаданні, а ѡ нашай &lt;strong&gt;прывязанасці&lt;/strong&gt; да яго і памылівым перакананні, што выкананне кожнага жадання прыядзе да сталага шчасця.&lt;/p&gt;
&lt;p&gt;Разгледзім &lt;strong&gt;жаданне атрымаць павышэнне на рабоце&lt;/strong&gt;. Вы можаце праводзіць бясконцыя гадзіны, мрэчы пра новую пасаду, вышэйшую зарплату, меркаваны прэстыж.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Прывязанасць да Непастаянства:&lt;/strong&gt; З пункту гледжання усведомленасці, нават калі вы атрымаеце павышэнне, пачатковае лікаванне будзе мімалётным. Часта за ім следуюць новыя стрэсы, большая адказнасць або усвідомленне таго, што роля не адпавядае вашым чаканням. Ваша шчасце становіцца залежным ад знешняй умовы, якая па сваёй прыродзе нестабільная і падвержаная зменам.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Пакуванне ад Недосягнення:&lt;/strong&gt; Калі павышэнне не матэрыялізуецца, ваша моцнае жаданне і прывязанасць могуць прывесці да глыбокага расчаравання, гневу або пачуцця неудачы. Ваш душэуны спакой парушаецца праз прывязанасць да будучага сцэнарыя, які не разгарнуўся так, як хацелася.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Упушчэнне Тэперашняга:&lt;/strong&gt; Будучы паглынутымі тугой па будучаму павышэнню, вы можаце ѡпусціць з виду спраудную каштоунасць вашай бягучай работы, магчымасці для навучання і росту ѡ вашай існуючай ролі або простыя радасці вашага паусядзённага жыцця. Ваш розум пастаянна адцягваецца ад багацця «зараз».&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Усведомлены падыход будзе ѡключаць:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Назіранне за жаданнем:&lt;/strong&gt; Замечание жадання павышэння як думкі або пачуцця, не падаючыся яму. «Вось думка пра жаданне гэтага павышэння».&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Непрывязанасць:&lt;/strong&gt; Старанная работа над сваімі мэтамі, але культываванне прыняцця любога выніку, які ѡзнікне. Ваша ѡнутраная каштоунасць не звязана з павышэннем.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Канцэнтрацыя на працэсе:&lt;/strong&gt; Знаходжанне задавальнення ѡ намаганнях, навучанні і ѡлучэнні ѡ бягучыя задачы, незалежна ад будучай узнагароды. Разуменне таго, што спрауднае задавальненне прыходзіць зсярэдзіны, а не ад знешніх дасягненняу, якія па сваёй прыродзе непастаянныя.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 15 Jun 2025 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/be-careful-what-you-wish-for-timeless-wisdom/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Незрушная праўда? Прыняцце межаў абгрунтавання перад абліччам Мюнхгаўзена</title>
        <link>https://blog.poplauki.eu/be/blog/unshakeable-truth-munchhausen-justification-limits/</link>
        <description>&lt;p&gt;Занурыцеся ў глыбокую праблему &lt;a href=&quot;https://en.wikipedia.org/wiki/M%C3%BCnchhausen_trilemma&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;трылемы Мюнхгаўзена&lt;/a&gt; і даследуйце, як мы можам дасягнуць трывалага разумення, нават сутыкаючыся з межамі абгрунтавання. Гэты пост раскрывае бесканечны рэгрес, замкнёнае кола і дагматызм, прапануючы ідэі для практычных спосабаў пабудовы ведаў і прыняцця рашэнняў, калі абсалютная ўпэўненасць застаецца недасяжнай. Даведайцеся, як прыняцце эпістэмалагічнай сціпласці можа прывесці да больш устойлівых перакананняў і больш яснага шляху наперад.&lt;/p&gt;
&lt;h2&gt;Прыклады&lt;/h2&gt;
&lt;p&gt;Вось некалькі чыстых, зразумелых прыкладаў для кожнай часткі трылемы Мюнхгаўзена:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Бесканечны ланцуг прычын (бесканечная рэгрэсія):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Прыклад: Уявіце дзіця, якое пастаянна пытаецца “Чаму?” пра ўсё.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“Чаму неба сіняе?”&lt;/li&gt;
&lt;li&gt;“Таму што так рассейваецца святло ў атмасферы.”&lt;/li&gt;
&lt;li&gt;“Чаму святло так рассейваецца?”&lt;/li&gt;
&lt;li&gt;“Праз даўжыню хвалі сіняга святла і памер малекул паветра.”&lt;/li&gt;
&lt;li&gt;“Чаму святло і малекулы паводзяць сябе так?”&lt;/li&gt;
&lt;li&gt;…і так далей, патэнцыйна бесканечна, без дасягнення канчатковага, самаочевіднага першага прынцыпу. Кожная адказ патрабуе яшчэ аднаго тлумачэння.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Круговае меркаванне (аргументацыя па кругу):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Прыклад: Класічны прыклад — “Біблія праўдзівая, таму што яна кажа, што яна праўдзівая, і яна кажа, што гэта слова Божае, таму яна павінна быць праўдзівай.”&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“Як вы ведаеце, што Біблія праўдзівая?”&lt;/li&gt;
&lt;li&gt;“Таму што Біблія кажа, што гэта слова Божае, а Бог не будзе хлусіць.”&lt;/li&gt;
&lt;li&gt;“Як вы ведаеце, што Бог не будзе хлусіць?”&lt;/li&gt;
&lt;li&gt;“Таму што Біблія кажа, што Бог праўдзівы.”&lt;/li&gt;
&lt;li&gt;Абгрунтаванне праўдзівасці Бібліі апіраецца на саму праўдзівасць Бібліі, ствараючы замкнёнае кола без знешняй праверкі.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Неабгрунтаваныя здагадкі (дагматызм):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Прыклад: Хтосьцё верыць, што ўся альтэрнатыўная медыцына па сваёй сутнасці махлярская, проста таму што яны “ведаюць”, што традыцыйная медыцына з’яўляецца адзінай дзейснай формай лячэння, не вывучыўшы і не разгледзеўшы ніякіх доказаў на карысць альтэрнатыўных практык.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“Я адмаўляюся нават разглядаць акупунктуру; гэта проста махлярства.”&lt;/li&gt;
&lt;li&gt;“Але вы бачылі якія-небудзь даследаванні яе эфектыўнасці для палягчэння болю?”&lt;/li&gt;
&lt;li&gt;“Няважна. Гэта не ‘сапраўдная’ медыцына, і мне не патрэбны доказы, каб гэта ведаць.”&lt;/li&gt;
&lt;li&gt;Гэты чалавек спынае ланцуг абгрунтавання, аб’яўляючы пэўную перадмову (дзейнічае толькі традыцыйная медыцына) самаочевіднай праўдай, якая не патрабуе далейшых доказаў або даследаванняў.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Такім чынам, як мы дзейнічаем перад абліччам гэтых, здавалася б, нерозвязальных праблем? Ключ не ў подоланні трылемы ў абсалютным сэнсе, а ў разуменні яе наступстваў і прыняцці больш прагматычных і ўстойлівых падыходаў да абгрунтавання. У выпадку бесканечнай рэгрэсіі мы вучымся прымаць “дастатковае абгрунтаванне” для дадзенага кантэксту, часта пакладаючыся на шырока прыняты навуковы кансэнсус, практычную карыснасць або згоду супольнасці як часовую аснову. Каб супрацьстаяць круговым меркаванням, мы павінны развіваць суровую адданасць знешняй праверцы, пастаянна шукаючы незалежныя доказы або розныя пункты гледжання, каб разарваць самарэферэнтную петлю. Нарэшце, каб пазбегнуць дагматызму, мы прымаем інтэлектуальную сціпласць, застаючыся адкрытымі для новых доказаў, аспрэчваючы ўласныя здагадкі і крытычна ацэньваючы асновы нашых перакананняў, нават тых, якія мы каштуем.&lt;/p&gt;
&lt;h2&gt;Рэзюмэ:&lt;/h2&gt;
&lt;p&gt;Гэты пост смела торкаецца трылемы Мюнхгаўзена, фундаментальнай праблемы таго, як мы абгрунтоўваем веды. Мы раскрываем яе тры неминучыя шляхі: бесканечную рэгрэсію прычын, пасткі круговых меркаванняў і жорсткую пазіцыю дагматызму, ілюструючы кожны з іх чыстымі, зразумелымі прыкладамі. Замест пошуку немагчымай абсалютнай праўды, артыкул прапануе практычную аснову для подолання гэтых эпістэмалагічных перашкод. Яна заклікае да прыняцця “дастатковага абгрунтавання” ў пэўных кантэкстах, актыўнага пошуку знешніх пацвярджэнняў для разрыву круговой логікі і культывавання інтэлектуальнай сціпласці для абароны ад неабгрунтаваных здагадак. У рэшце рэшт, гэтая артыкул дае чытачам магчымасць будаваць больш устойлівыя перакананні і прымаць абгрунтаваныя рашэнні, разумна дзейнічаючы ў рамках прытаманых чалавеку абмежаванняў абгрунтавання.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Спасылкі:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://philosophorsuni.substack.com/p/in-plain-english-munchhausen-trilemma&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;In Plain English: Münchhausen Trilemma&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.thecollector.com/what-is-munchausen-trilemma/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;What Is Munchausen’s Trilemma?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 08 Jun 2025 13:18:57 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/unshakeable-truth-munchhausen-justification-limits/</guid>
      </item>
      
    
    
    
    
    
    
      
      <item>
        <title>Спектр матывацыі: матэрыяльныя і нематэрыяльныя драйверы</title>
        <link>https://blog.poplauki.eu/be/blog/the-spectrum-of-motivation/</link>
        <description>&lt;p&gt;Што насамрэч прымушае нас быць прадуктыуным? Гэта рэдка звязана толькі са зарплатай. Гэтая дыяграма разбівае асноўныя элементы матывацыі, паказваючы дыяпазон ад матэрыяльных узнагарод да нематэрыяльных фактарау, якія уплываюць на нашу залучанасць і прадукцыйнасць. Давайце даследуем ключавыя катэгорыі:&lt;/p&gt;
&lt;img src=&quot;https://s3.g.s4.mega.io/ckcmkjmaqedml3aiyva3m3o2rbwu4mbvztutq/poplauki/blog/the-spectrum-of-motivation-be.svg&quot; alt=&quot;Спектр матывацыі&quot; /&gt;
</description>
        <pubDate>Sat, 17 May 2025 20:18:57 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/the-spectrum-of-motivation/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Досыць Жадаць, Пачні Дзеяць: Стоічныя Цытаты, Якія Запаляць Дзеянне і Канцэнтрацыю</title>
        <link>https://blog.poplauki.eu/be/blog/stop-wishing-start-doing-stoic/</link>
        <description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Вам не трэба больш часу, вам трэба менш адволіканняу.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Вам не патрэбна матывацыя, вам патрэбен самакантроль.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Вам не трэба больш рэсурсау, вам патрэбна вынаходлівасць.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Вам не патрэбна шчасце, вам патрэбна падрыхтоўка.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Вам не трэба быць занятым, вам трэба быць канцэнтраваным.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Вам не трэба ведаць усё, вам проста трэба пачаць.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;У вас ёсць усё, што вам патрэбна.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 11 May 2025 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/stop-wishing-start-doing-stoic/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Быць аднаму і самотнасць — розныя рэчы</title>
        <link>https://blog.poplauki.eu/be/blog/byt-odnomu-i-odinochestvo-raznye-veshchi/</link>
        <description>&lt;p&gt;Сацыяльная ізоляцыя можа паўплыць на вашае псіхічнае здароуе, калі вы не звыклі праводзіць час з сабой. Аднак нават да гэтага чалавек можа адаптавацца і атрымліваць задавальненне.&lt;/p&gt;
&lt;p&gt;Шмат мысліцелёй на працягу стагоддзяу падкрэслівалі важнасць прымірэння з гэтым станам. Мішэль дэ Мантэнь аднойчы нават напісау: «Найвялікшая рэч у свеце — гэта ведаць, як належаць сабе».&lt;/p&gt;
&lt;p&gt;Уединене з сабой заахвочвае ѡуяву і робіць магчымым з’яуленне сур’ёзных думак у людзкой галаве, якія выходзяць за межы звычайнай рутыны і вымушаюць звіліны рухацца.&lt;/p&gt;
&lt;p&gt;Самотнасць жа — негатыуны вопыт. Тэрзае жаль да сябе, думкі аб пустой траце жыцця, сум. І калі вы сапрауды зацікаулены ѡ сваім самаразвіцці, то не перашкодзіць ператварыць гэта пачуцце ѡ пазітыу і канструктыу.&lt;/p&gt;
&lt;p&gt;Першы крок да таго, каб быць шчаслівым наадзін з сабой — гэта прыняцце сітуацыі. трэба задаваць сабе пытанні, ператвараючы самотнасць ѡ канструктыунае правядзенне часу: што я сапрауды каштую ѡ жыцці? Што мне патрэбна найбольш? Што мне трэба зрабіць з…? Што далей?&lt;/p&gt;
&lt;p&gt;Другі крок: трымаць розум і цела ѡ пастаянным тонусе. Вам патрэбна ваша цела, каб супакоіць мозак. Вам патрэбны пачуцці, каб арганізаваць думкі. Не карміце сябе пустой балакатнёй і пустымі драматычнымі думамі, якія толькі пагаршаюць становішча.&lt;/p&gt;
&lt;p&gt;Вам не трэба ні ад чаго ратавацца. Замест таго, каб уцякаць ад таго, што ёсць, вы павінны заўважыць тое, што знаходзіцца пад носам. Гучачы трохі складана, але падумайце.&lt;/p&gt;
&lt;p&gt;Паспрабуйце пачаць весь дзённік і запісваць думкі пра тое, што вас цікавіць. Пішыце вершы. Спампуйце Duolingo і паглыбіцеся ѡ якую-небудзь новую мову. Пачніце пісаць сваю аўтабіяграфію ці кнігу. Наведайце віртуальны музей. Вывучыце што-небудзь новае праз YouTube ці прайдзіце курс, які дапаможа паскарыць вашае кар’ернае расшырыць кампетэнцыю. Што заугодна.&lt;/p&gt;
&lt;p&gt;Быць шчаслівым наадзін з сабой — гэта пастаяннае імкненне быць лепшым разумна, сацыяльна і эмацыйна для сябе і блізкіх.&lt;/p&gt;
&lt;p&gt;Сённяшняя наша тэма трохі складаная, але актуальная — не абражайцеся. І скончым яе мудрым выслоуем: «Вы не можаце быць самотнымі, калі вам падабаецца чалавек, з якім вы наадзін».&lt;/p&gt;
</description>
        <pubDate>Sun, 29 Dec 2024 20:44:16 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/byt-odnomu-i-odinochestvo-raznye-veshchi/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Абрэнне ўнутранага спакою ў вар&#39;ятым свеце</title>
        <link>https://blog.poplauki.eu/be/blog/finding-inner-peace-crazy-world/</link>
        <description>&lt;p&gt;Аднойчы ты перастаеш метушыцца і нешта камусьці даказваць, глядзіш з усмешкай на навакольны свет з усімі яго вар’яцтвамі, не спяшаешся падабацца людзям, не спяшаешся раздаваць парады і кагосьці судзіць або ратаваць, перастаеш адказваць на званкі людзей, якія даўно не захапляюць і не цікавяць, больш глядзіш на неба, чым на тое, хто чым заняты і як жывеш, успамінаеш тое, што натхняе незалежна ад абставін, не выбачаешся, не тлумачыш, не спрэчыся, не выдаткоўваеш час на нецікавае і часовае, і выяўляеш неверагодны спакой і мноства рэчаў, якія не замечаў раней у пагоні за тым, каб падыходзіць пад чыйсьці погляды або адпавядаць чыйсьці чаканням. Зручнасць усярэдзіне - даражэйш за любыя спакусы часовага задавальнення. Дарожэй, чым любыя часовыя людзі і часовыя рэчы. Усё, што табе падабаецца - гэта асабістае, а асабістае - належыць толькі таму чалавеку, якога ты бачыш у люстэрку. Астатняе - пустыя здагадкі і меркаванні тых, хто спрабуе бачыць у табе нешта іншае.&lt;/p&gt;
&lt;p&gt;Ты - лепшы сабе адзіндумец у тым, як у гэтым вар’ятым свеце быць сабой і быць шчаслівым.&lt;/p&gt;
&lt;p&gt;Крыніца: &lt;em&gt;Вольга Марач&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 29 Dec 2024 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/finding-inner-peace-crazy-world/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Перастань гэта рабіць: звычкі, якія забіваюць поспех</title>
        <link>https://blog.poplauki.eu/be/blog/habits-that-kill-success/</link>
        <description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Перастань быць падабраным для навакольных. Угадзіць усім немагчыма. Да і таго ж, гэта стрэс. Лепш трымацца невялікага кола зносін, чым мець шмат знаёмстваў, якіх трэба трымаць. Ты ж хочаш быць паспяховым, а не падлізай, так?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Перастань тусавацца з паскуднымі тыпамі. Тваё атачэнне альбо цягне цябе ўверх, альбо яшчэ глыбей утаптывае ў зямлю. З кім сябраваць і кім сябе атачыць — пытанне, да якога варта падысці практычна. Пазначай смецце.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Перастань глядзець парна так часта (мужчынская палова). Яно не толькі выклікае звыканне, але і з кожным оргазмам пазбаўляе цябе сіл — выкідаеш не толькі семя, але і сваю матывацыю. Лепш захаваць энергію і выдаткаваць час больш разумна.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Перастань патрабаваць у размовах, калі табе сумна. Не ведаеш чым заняцца? Не тэлефануй камусь радзі гадзінных дыялогаў ні пра што. Натомесь прачытай / праслухай кнігу або заняся чымсь, што ты адкладаеш на потым ужо не першы дзень. Пазбаўся ад неабходнасці запаўняць цішу пустой балакатнёй. Запалі яе сваёй глыбінёй.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Перастань думаць пра меркаванне навакольных. Гэта выходзіць за межы таго, што ты можаш кантраляваць. А калі не можаш, навошта тады хвалявацца і трывожыцца? Марная трата часу. Будзь незалежным і вызваліся ад путаў схвалення — яны перашкаджаюць ісці да поспеху. Не ўсе твае дзеянні будуць схваляць іншыя, таму смела забі. Схваляй сябе сам.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Перастань жыць у дэструктыўных стасунках. Твой партнёр пастаянна на цябе цісне? Пастаянна правакуе сваркі, скандалы? У стасунках няма ніякага канструктыву? Не вер у лепшае, а рухайся далей. Разставайся. Пашалі нервы, яны табе яшчэ спатрэбяцца.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Перастань спадзявацца на цуды або шчасце. 99% усіх вынікаў залежаць ад тваіх намаганняў, настойлівасці і амбіцый. Навошта табе 60 гадоў гніць у цені, спадзяючыся на цуд, калі гэты цуд ты можаш стварыць для сябе сам у карацейшыя тэрміны?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Перастань адкладаць на потым. Калі трэба штосьці зрабіць — рабі. Не думай, што заўтра ты знойдзеш кампраміс са сабой і захочаш чымсь карысным заняцца. Робі належнае адразу. Не абманвай сябе і не закідай абавязкі ў доўгую скрыню. Этым ты толькі даеш адтэрміноўку сваему поспеху.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 21 Dec 2024 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/habits-that-kill-success/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>4 асновы для самадысцыпліны</title>
        <link>https://blog.poplauki.eu/be/blog/four-foundations-of-self-discipline/</link>
        <description>&lt;h2&gt;1. Занадта шмат абавязкаў&lt;/h2&gt;
&lt;p&gt;згубны разрыў на часткі. Займайцеся толькі тым, што вы хочаце рабіць нягледзячы ні на што. Ігнаруйце несуттэвае.&lt;/p&gt;
&lt;p&gt;Кожны абавязак, які вы ўскладаеце на свае плячы, уплывае на сілу волі. Калі занадта шмат лішняга, яна не вытрымае і вы зрываецеся.&lt;/p&gt;
&lt;h2&gt;2. Стартуйце дзень з найбольш важнага&lt;/h2&gt;
&lt;p&gt;Зрабіць нешта значнае можна ўжо ў першую гадзіну з моманту прачкання.&lt;/p&gt;
&lt;p&gt;Калі чымсь значным загружаць сябе раней не хочацца, робіце нешта маленькае. Гэта ўсяко лепш, чым проста завісаць у тэлефоне.&lt;/p&gt;
&lt;h2&gt;3. Будзьце рэзкімі і сур’ёзнымі ў дачыненні да сябе.&lt;/h2&gt;
&lt;p&gt;Калі вы забыліся штосьці зрабіць, не жадайце сабе, а пакараць за праступак. Не бізурою, вядома.&lt;/p&gt;
&lt;p&gt;Пожэрвуйце сном, каб скончыць абяцанае, напрыклад. Так і груз з плеч, і ўпэўненасць у сабе павышаецца.&lt;/p&gt;
&lt;h2&gt;4. Карэкцыя рутыны.&lt;/h2&gt;
&lt;p&gt;Плануйце як мага больш. Трымайцеся раскладу да самага канца дня, не адхіляйцеся. Плануючы вы павінны ўлічваць свае прыярытэты і трымацца іх выканання.&lt;/p&gt;
&lt;p&gt;Чым больш звычак і правіл вы ў сваю рутыну ўвя-дзеце, тым менш трэба напружацца для падтрымання самадысцыпліны. Яна стане такім жа намаганнем, як сходзіць у туалет — па змаўчанні паспяховым.&lt;/p&gt;
&lt;p&gt;Моцны і разумны графік — абавязковы інгрэдыент выдатных людзей. Рана ці позна ўсё роўна прыйдзецца ўзяць дні пад кантроль. І лепш, калі да гэтага прыйдзеце вы самі, а не вымусяць абставіны. Будзе вопыт.&lt;/p&gt;
</description>
        <pubDate>Sun, 15 Dec 2024 08:18:57 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/four-foundations-of-self-discipline/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Самаабмежаванне і ахвяра</title>
        <link>https://blog.poplauki.eu/be/blog/self-resistaint-and-sacrifice/</link>
        <description>&lt;p&gt;Магчыма, што смак да самаабмежавання, які гэтыя перакананні, якім бы яны ні былі ілжывыя, прышчыпілі чалавецтву, быў небескарысны для ѡмацнення чалавечага роду.&lt;/p&gt;
&lt;p&gt;Бо сіла роднага і індывідуальнага характару складаецца пераважна ѡ здольнасці ахвяраваць цяперашнім дзеля будучага, у пагардзе спакусамі эфемэрнага задавальнення дзеля больш аддаленага і ѡстойлівага задаволення.&lt;/p&gt;
&lt;p&gt;Чым больш практыкуюць у сабе гэтую здольнасць, тым узнесены характар становіцца; вышэйшы ж героізм дасягаецца тым, хто дзеля захавання або заваявання свабоды і прауды для іншых, магчыма далёкіх, эпох, адмаўляецца ад жыццёвы задавальненняу і нават ад самага жыцця.&lt;/p&gt;
&lt;p&gt;© Джэймс Джордж Фрэзар
«Залатая галінка»&lt;/p&gt;
</description>
        <pubDate>Sun, 08 Dec 2024 12:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/self-resistaint-and-sacrifice/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Піраміда поспеху</title>
        <link>https://blog.poplauki.eu/be/blog/success-pyramide/</link>
        <description></description>
        <pubDate>Sun, 08 Dec 2024 08:18:57 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/success-pyramide/</guid>
      </item>
      
    
    
    
    
      
      <item>
        <title>Сутнасць сталасці: дагляд пра сябе і эмацыйная шчырасць</title>
        <link>https://blog.poplauki.eu/be/blog/essential-of-maturity/</link>
        <description>&lt;p&gt;Для мяне сталасць да непрыстойнасці ў простым.&lt;br /&gt;
У умінні пра сябе пабачыцца.&lt;br /&gt;
Галодны? Наесца.&lt;br /&gt;
Халодна? Зігрэйся.&lt;br /&gt;
Дуе? Перасядзь.&lt;br /&gt;
Боліць? Не трымай.&lt;br /&gt;
Кахаеш? Скажы.&lt;br /&gt;
Не кахаеш? Скажы тым больш.&lt;br /&gt;
Дрэнна? Зрабі, каб было лепш.&lt;br /&gt;
Добра? Не прабягай.&lt;br /&gt;
Проста зрабі паузу і атрымай задавальненне.&lt;br /&gt;
робяць балюча?&lt;br /&gt;
Звярні іх увагу на гэта.&lt;br /&gt;
Не чуюць?&lt;br /&gt;
Паспрабуй яшчэ.&lt;br /&gt;
Зноў не чуюць?&lt;br /&gt;
Траць.&lt;/p&gt;
&lt;p&gt;Навучыся даваць.&lt;br /&gt;
І гэта, не пра грошы.&lt;br /&gt;
Зусім не пра грошы.&lt;br /&gt;
Хлопчык становіцца мужчынам, у тым ліку, калі перастае толькі спажываць.&lt;br /&gt;
Навучыся даваць.&lt;br /&gt;
Дзяўчынка становіцца жанчынай, у тым ліку, калі перастае толькі аддаваць.&lt;br /&gt;
Навучыся браць.&lt;/p&gt;
&lt;p&gt;І нарэшце навучыся адрозніваць патрэбнасць і каханне.&lt;br /&gt;
Уразлівасць і слабасць&lt;br /&gt;
Дагляд і апёку.&lt;br /&gt;
Добрыню і падпарадкаванасць.&lt;br /&gt;
Давер і дурнасць.&lt;br /&gt;
Агрэсію і гвалт.&lt;/p&gt;
&lt;p&gt;Я думаю, што многія гэта адчуваюць на няссвядомым узроўні.&lt;br /&gt;
«Сэрца не ашукаеш…» - памятаеш?&lt;br /&gt;
Гэта менавіта пра тое самае.&lt;/p&gt;
&lt;p&gt;Але не многія знаходзяць у сабе сілы прызнацца.&lt;br /&gt;
Напрыклад, у тым, што іх гісторыя не пра Каханне.&lt;br /&gt;
А пра нужду.&lt;/p&gt;
&lt;p&gt;Сталасць, як і мышцу.&lt;br /&gt;
Можна нарасці.&lt;br /&gt;
Трэба толькі зразумець для чаго гэта табе трэба.&lt;/p&gt;
&lt;p&gt;Ігар Ларын&lt;/p&gt;
</description>
        <pubDate>Sun, 17 Nov 2024 08:18:57 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/be/blog/essential-of-maturity/</guid>
      </item>
      
    
    
    
    
    
    
    
  </channel>
</rss>

