<?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/uk/feed.xml</link>
    <atom:link href="https://blog.poplauki.eu/uk/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Українська</description>
    <language>uk</language>
    
    
      
      <item>
        <title>Шлях королів: подорож до Архіву Буресвітла</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/the-way-of-kings-a-journey-into-the-stormlight-archive/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Необхідні інструменти безпеки OWASP: контрольний список перед запуском сайту</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/list-owasp-useful-links/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Щоденна стоїчна практика</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/daily-stoic-routine-habits-for-inner-peace/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>📡 Отримання прогнозу погоди з датчиків 433 МГц на Raspberry Pi з RTL-SDR</title>
        <link>https://blog.poplauki.eu/uk/blog/forecast-receiver-raspberry-pi-rtl-sdr/</link>
        <description>&lt;h2&gt;Від сирого радіосигналу до елегантних дашбордів у Grafana&lt;/h2&gt;
&lt;p&gt;У певний момент мені перестало вистачати перевірки погоди в додатку. Я хотів знати, яка температура на балконі — і не з якогось хмарного API, а зі своїх власних датчиків, що працюють у реальному часі.
Так народилася ідея створити власну, повністю приватну систему моніторингу погоди.&lt;/p&gt;
&lt;h3&gt;📡 1. Перехоплення сигналу з ефіру&lt;/h3&gt;
&lt;p&gt;Основою всього проєкту є донгл RTL-SDR — маленький радіоприймач, який здатен перехоплювати передачі з дешевих датчиків 433 МГц.
За допомогою інструменту &lt;strong&gt;rtl_433&lt;/strong&gt; я перетворив сирий радіосигнал на зрозумілі JSON-об’єкти.
Це момент, коли «радіомагія» стає даними.&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/IMG20260411083210-landscape-400w.webp&quot; /&gt;&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/IMG20260411083210-landscape-400w.jpeg&quot; /&gt;&lt;img src=&quot;https://blog.poplauki.eu/img/generated/IMG20260411083210-landscape-400w.jpeg&quot; width=&quot;400&quot; height=&quot;267&quot; alt=&quot;донгл RTL-SDR raspberry-pi&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/picture&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/IMG20260411083455-landscape-400w.webp&quot; /&gt;&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://blog.poplauki.eu/img/generated/IMG20260411083455-landscape-400w.jpeg&quot; /&gt;&lt;img src=&quot;https://blog.poplauki.eu/img/generated/IMG20260411083455-landscape-400w.jpeg&quot; width=&quot;400&quot; height=&quot;267&quot; alt=&quot;датчик 433 MHz погодний&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h3&gt;🔧 2. Інтелектуальний фільтр: тільки мої датчики, тільки те, що важливо&lt;/h3&gt;
&lt;p&gt;Я не хотів сміття в системі.
Тому створив &lt;code&gt;bridge.js&lt;/code&gt; — невеликий, розумний скрипт на &lt;code&gt;Node.js&lt;/code&gt;, який:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;розпізнає тільки мої датчики (за моделлю та ID),&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;зіставляє їх із зручними назвами: balcony (кут темний) oraz balcony_2 (кут світлий),&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;конвертує температуру з &lt;strong&gt;°F&lt;/strong&gt; у &lt;strong&gt;°C&lt;/strong&gt;,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;публікує чисті, уніфіковані дані в MQTT (&lt;code&gt;weather/&amp;lt;name&amp;gt;&lt;/code&gt;),&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;записує timestamp останнього сигналу,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;надсилає сповіщення, коли батарея в датчику починає розряджатися.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Це не просто фільтр — це мій приватний «шар погодного інтелекту».&lt;/p&gt;
&lt;h3&gt;🧠 3. Бекенд, який розуміє дані&lt;/h3&gt;
&lt;p&gt;Далі дані потрапляють до бекенду на базі NestJS.
Я створив власного клієнта MQTT, який:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;підписується на &lt;code&gt;weather/#&lt;/code&gt;,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;отримує готові JSON-об’єкти з &lt;code&gt;bridge.js&lt;/code&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;агрегує дані та записує їх у PostgreSQL базі даніх.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Бекенд не мусить знати про радіопротоколи чи моделі датчиків.
Він отримує чисті, стандартизовані дані — і робить з ними те, що вміє найкраще.&lt;/p&gt;
&lt;h3&gt;🗄️ 4. Історія погоди в PostgreSQL&lt;/h3&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;code&gt;weather_record&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Завдяки цьому база легка, швидка й готова до аналізу.&lt;/p&gt;
&lt;h3&gt;📊 5. Погода у моєму домі — у реальному часі&lt;/h3&gt;
&lt;p&gt;На завершення все потрапляє до Grafana, де я створив набір дашбордів:&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;/ul&gt;
&lt;p&gt;Це не просто графік — це мій приватний «погодний центр», що працює цілодобово.&lt;/p&gt;
&lt;p&gt;🎯 Кінцевий результат&lt;/p&gt;
&lt;p&gt;Я побудував систему, яка:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;отримує радіосигнал з датчиків 433 МГц,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;фільтрує та нормалізує дані,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;публікує їх у MQTT,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;бекенд агрегує та зберігає їх,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grafana відображає їх у красивий, зрозумілий спосіб.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Жодних хмар. Жодного vendor lock-in.
Все працює локально, швидко й саме так, як я хочу.&lt;/p&gt;
</description>
        <pubDate>Thu, 09 Apr 2026 10:00:00 GMT</pubDate>
        <dc:creator>Vladimir Poplavskij</dc:creator>
        <guid>https://blog.poplauki.eu/uk/blog/forecast-receiver-raspberry-pi-rtl-sdr/</guid>
      </item>
      
    
    
    
    
    
    
    
    
      
      <item>
        <title>15 Спосіб Знайти Внутрішній Спокій: Стойкий Путівник</title>
        <link>https://blog.poplauki.eu/uk/blog/15-ways-to-achieve-tranquility/</link>
        <description>&lt;p&gt;Джерела представляють п’ятнадцять способів досягнення внутрішнього спокою (на основі пропозицій &lt;a href=&quot;https://uk.wikipedia.org/wiki/%D0%9B%D1%83%D1%86%D1%96%D0%B9_%D0%90%D0%BD%D0%BD%D0%B5%D0%B9_%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;: Використовуйте практику та навички, щоб перетворити труднощі в bearalні обставини, а не в гнітючі ваги.&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;Джерела пояснюють, що чотири кардинальні чесноти — Мудрість (Розсудливість), Справедливість, Хоробрість та Помірність — кожна охоплює кілька другорядних чеснот. Згідно з Арієм Дідімом, Розсудливість включає шість другорядних чеснот, Хоробрість — п’ять, а Справедливість і Помірність мають по чотири, всього 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/uk/blog/15-ways-to-achieve-tranquility/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Симетричне шифрування даних про здоров&#39;я: Архітектура безпеки MigrainePulse</title>
        <link>https://blog.poplauki.eu/uk/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. Тому що коли йдеться про здоров’я, немає місця для компромісів щодо конфіденційності.&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/uk/blog/migraine-pulse-security-key-management-service/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Migraine Pulse – перенесення схеми даних у бекенд</title>
        <link>https://blog.poplauki.eu/uk/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;Як я згадував у &lt;a href=&quot;https://blog.poplauki.eu/uk/blog/migraine-pulse-origin/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;вступному дописі&lt;/a&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/uk/blog/migraine-pulse-data-schema-backend/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Парадокс глибини: чому інтелектуальна ізоляція — нова валюта успіху</title>
        <link>https://blog.poplauki.eu/uk/blog/deep-work/</link>
        <description>&lt;p&gt;Ця стаття виникла після вивчення новаторської книги &lt;a href=&quot;https://uk.wikipedia.org/wiki/%D0%9A%D0%B5%D0%BB_%D0%9D%D1%8C%D1%8E%D0%BF%D0%BE%D1%80%D1%82&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;
Щоб вижити в умовах переходу до автоматизованої та гіперконкурентної економіки, необхідно опанувати дві основні навички: здатність швидко вивчати складні речі та здатність досягати елітного рівня з якістю та швидкістю. Жодну з них не можна досягнути через фрагментовану увагу поверхневих зусиль.
Як дослідник когнітивної продуктивності, я стверджую, що глибина — це фундаментальний механізм створення цінності. Для її досягнення потрібно обрати структуру для концентрації. Монастирський метод передбачає радикальну ізоляцію для зосередження на одній високорівневій меті. Біmodalний метод дозволяє чітко розподілити час між глибокими періодами та періодами для всього іншого. Нарешті, Журналістський метод передбачає миттєве перехід у стан глибокої роботи, щойно з’являється вільний проміжок часу. Незалежно від методу, мета однакова:
«Глибока робота — це зосередження на професійній діяльності без відволікань, щоб когнітивні здібності могли розкритися якомога повніше. Лише через такі зусилля створюються нові цінності та розвиваються навички».&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;
Високointенсивна зосередженість вимадає відданості тому, що багато хто називає «бездіяльністю». Однак високопродуктивна людина розглядає відпочинок не як розкіш, а як передумову. Щоб досягти максимальних результатів, потрібно підприємницьке мислення — прагнути результатів, як бізнесмен, — яке визнає, що час відпочинку є паливом для інсайтів.
З неврологічної точки зору, розуму не обов’язково потрібно повне припинення діяльності; йому потрібна зміна темпу для відновлення енергії, необхідної для глибокої роботи. Щоб інтегрувати відпочинок у високопродуктивну систему, дотримуйтесь чотирьох принципів:&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;
Багато професіоналів втрачають зосередженість на «вампірських сайтах» у вільний час, бо не планують своє дозвілля. Як зауважив Арнольд Беннет, розум — не як кінцівка, якій потрібно припинити рух для відновлення:
«Розум може працювати безперервно і наполегливо; він не втомлюється, як рука чи нога… Йому потрібна лише зміна, а не спокій (крім сну)».
Незапланований вечір створює вакуум, який легко заповнюється поверхневими відволіканнями. Структуруючи свій вільний час навмисною, вимогливою діяльністю — читанням, складними хобі чи глибокими соціальними зв’язками — ви захищаєте свою когнітивну здатність. Свідомий відпочинок забезпечує, що коли робочий день почнеться, ваш розум буде відновлений і готовий до високointенсивної концентрації.&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/uk/blog/deep-work/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Migraine Pulse – мій шлях до створення особистого додатку для відстеження мігрені</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/migraine-pulse-origin/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Спокій у турбулентному світі Уроки Сенеки для 2026 року</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/stoic-strategies-tranquility-modern-world/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>40 провокаційних питань для глибокої саморефлексії</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/40-provocative-questions-deep-self-reflection/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Сила мовчання в інтернеті: чому не обов&#39;язково мати думку про все</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/power-of-not-having-an-online-opinion/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Як перестати порівнювати себе з іншими і знайти свій шлях: філософські роздуми про сенс життя</title>
        <link>https://blog.poplauki.eu/uk/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;Перемогу можна назвати справжньою лише тоді, коли вона стає наслідком внутрішнього вибору, відгуку серця, руху власної волі. Тільки вийшовши за межі нав’язаних стереотипів, ми можемо почати жити своє справжнє життя, а не відігравати соціальну роль.&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/uk/blog/stop-comparing-find-your-path/</guid>
      </item>
      
    
    
    
    
    
    
    
    
      
      <item>
        <title>9 Поведінкових Ознак Справді Перспективних Людей</title>
        <link>https://blog.poplauki.eu/uk/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;Не беруть участь у світських розмовах і безглуздій балаканині. Їм все одно, хто що готує на вечерю, хто з ким зустрічається, хто що вдягнув і що сказав.&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/uk/blog/9-behavioral-signs-of-truly-promising-people/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Як спростити життя 42 правила для усвідомленого життя</title>
        <link>https://blog.poplauki.eu/uk/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;Перестаньте намагатися вгодити всім — це неможливо і марно. Завжди znajdąться люди, яким не сподобаєтесь через тисячу різних причин.&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/uk/blog/how-to-make-life-simpler-42-rules/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Корисні ресурси для вивчення JavaScript на GitHub</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/list-js-useful-links/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Розкриття невротизму: 5 пасток, які потрібно розпізнати в собі та інших</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/understanding-the-5-traps-of-neuroticism/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Цинічні Істини: Неприємні Реальності про Життя і Відносини</title>
        <link>https://blog.poplauki.eu/uk/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;p&gt;Багато «лікарів душ» користуються своєю вже дежурною фразою [прочитати зворушливо і з подихом]: «Потрібно вміти прощати. Тільки так ви можете вступити в новий день з чистими думками і духом». Але ніхто при цьому не уточнює, що прощення буває 2 видів.&lt;/p&gt;
&lt;p&gt;Душевне: це прощення, засноване на подоланні власних переживань заради гармонії з собою. Воно спрямоване лише всередину себе, а не в бік того, хто вас образив. Воно скоріше навіть не про прощення, а просто не про звинувачення. Це красиво, благородно, корисно і, так, необхідно.&lt;/p&gt;
&lt;p&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;p&gt;Найкращим прикладом цього пункту послужить фільм «Теорема Зеро» голлівудського дивака Террі Гілліама. Головний герой картини буквально цілими днями сидить біля телефону і чекає дзвінка від бога, який відкриє герою його призначення і сенс життя. А в кінці раптом розуміє, що бог йому все-таки не зателефонує.&lt;/p&gt;
&lt;p&gt;Глядачам даного фільму потрібно 2 години екранного часу на те, щоб усвідомити цю думку. Більшості ж не вистачає і все життя. Ймовірно, так нас виховали ще на дитячих казках, що чекаємо нечудеса або хоча б знака, щоб стати тим, ким нам нібито призначено. Але все ж потрібно усвідомити і постійно пам’ятати про це: бог вам все-таки не зателефонує.&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;p&gt;Наприклад, у Стівена Кінга був спеціальний гвоздик над письмовим столом, куди він прикріпляв відмови від видавництв. Кількість цих відмов рахувалася далеко не одним десятком.&lt;/p&gt;
&lt;p&gt;За статистикою, якщо говорити образно, 95% людей з такими ж даними, як у Кінга, при отриманні ось таких же листочків з відмовами роблять сумне обличчя і кажуть: «Ну окей, значить, це не моє». Решта 5% — це Стіви Кінги у своїх сферах, які продовжать отримувати відмови і боротися. Ось як проходить відбір в успішне життя.&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;li&gt;
&lt;p&gt;&lt;strong&gt;Навіть у найбільшої невдачі є виправдання&lt;/strong&gt;. Люди завжди знайдуть спосіб раціоналізувати свої недоліки.&lt;/p&gt;
&lt;p&gt;Наш мозок — геніальна річ. Такою банальною фразою почнемо небанальне міркування: справа в тому, що наш мозок постійно виправдовує нашу нездатність діяти (іншими словами, лінь і страх), і робить це, треба визнати, просто чудово.&lt;/p&gt;
&lt;p&gt;Страх змінити роботу ми виправдовуємо схильністю до стабільності; боязнь звертатися за допомогою до професіоналів — гордістю; неможливість самореалізації — думкою про те, що у нас недостатньо таланту; а бажання рано вставати на першу пару в інститут — турботою про організм.&lt;/p&gt;
&lt;p&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;p&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;p&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;Погодьтеся, що на роботі, наодинці з другою половинкою і в компанії задушевних людей ви — це 3 абсолютно різні люди. В кожному суспільстві ми буквально вдягаємо маски тих людей, які найбільш відповідали б обставинам і оточенню.&lt;/p&gt;
&lt;p&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;Друзі — це найцінніший для людини ресурс, і вся більша цінність він набирає з плином часу. Якщо в школі кількість друзів могла перевищувати десяток людей, то вже після 30 ви напевно зможете перерахувати їх лише по пальцях однієї руки. Звісно, в такій ситуації ніхто не стане розкидатися друзями, навіть якщо вони далеко не досконалі. Ну хто з нас ідеальний?&lt;/p&gt;
&lt;p&gt;Насправді відверто неідеальними можна назвати 2 типи друзів:&lt;/p&gt;
&lt;p&gt;Ті, хто тягне вас вниз. Наприклад, своїми вічними скаргами, постійним втягуванням у неприємності або зловживанням вашою допомогою «по старій дружбі». І найчастіше нам буває шкода, але все-таки краще переривати подібні зв’язки.&lt;/p&gt;
&lt;p&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;li&gt;
&lt;p&gt;&lt;strong&gt;Кожна людина використовує вас по-своєму&lt;/strong&gt;. Визнання цього не обов’язково повинно бути негативним, але важливо усвідомлювати динаміку у ваших відносинах.&lt;/p&gt;
&lt;p&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;&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/uk/blog/cynical-truths/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Двогранний Меч Бажання: Чому «Будь обережним зі своїми бажаннями» — це позачасова мудрість</title>
        <link>https://blog.poplauki.eu/uk/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;. Коли справа доходить до бажань, усвідомленість заохочує нас спостерігати їх як миттєві ментальні події, а не негайно чіплятися за них або діяти відповідно до них. Проблема не в самому бажанні, а в нашій &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/uk/blog/be-careful-what-you-wish-for-timeless-wisdom/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Незворушна істина? Прийняття меж обґрунтування перед обличчям Мюнхгаузена</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/unshakeable-truth-munchhausen-justification-limits/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Спектр мотивації: матеріальні та нематеріальні драйвери</title>
        <link>https://blog.poplauki.eu/uk/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-uk.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/uk/blog/the-spectrum-of-motivation/</guid>
      </item>
      
    
    
    
    
    
    
      
      <item>
        <title>Досить Бажати, Почни Діяти: Стойічні Цитати, Які Запалять Дію і Зосередженість</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/stop-wishing-start-doing-stoic/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Бути на самоті і самотність — різні речі</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/byt-odnomu-i-odinochestvo-raznye-veshchi/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Обретіння внутрішнього спокою у божевільному світі</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/finding-inner-peace-crazy-world/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Перестаньте це робити: звички, які вбивають успіх</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/habits-that-kill-success/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>4 основи для самодисципліни</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/four-foundations-of-self-discipline/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Самоп обмеження і жертва</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/self-resistaint-and-sacrifice/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Піраміда успіху</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/success-pyramide/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
    
      
      <item>
        <title>Суть зрілості: піклування про себе та емоційна чесність</title>
        <link>https://blog.poplauki.eu/uk/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/uk/blog/essential-of-maturity/</guid>
      </item>
      
    
    
    
    
    
    
    
    
    
  </channel>
</rss>

