Повертаю Node.js weekly. Завтра о 19:00 за київським часом буде епізод, присвячений новим фічам у TypeScript та TypeScript ecosystem.
У зв’язку з цим, опитування: яку версію TS ви використовуєте на проєкті?
У зв’язку з цим, опитування: яку версію TS ви використовуєте на проєкті?
Final Results
3%
5.5-rc
30%
5.4
11%
5.3
9%
5.2
4%
5.1
5%
5.0
16%
4.x
22%
Ми не використовуємо TS
❤6
Через 20 хвилин проведу TypeScript new features and ecosystem review
Початок о 19 по Києву. До зустрічі в ефірі!
Початок о 19 по Києву. До зустрічі в ефірі!
YouTube
Node.js Weekly 2024-W12: TypeScript new features and ecosystem review
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
👍25
Закінчую матеріали з GitHub сертифікації статтею на Dou.
Розписав усі етапи. Зверніть увагу на лайфхаки.
Розписав усі етапи. Зверніть увагу на лайфхаки.
DOU
GitHub Certifications: як і навіщо їх отримувати
Нікіта Галкін нещодавно пройшов GitHub Certifications. Тепер у своєму блозі він ділиться планом дій, лайфхаками та роздумами, навіщо ці бейджі взагалі потрібні. Зверніть увагу, один з лайфхаків може знадобитись вам вже сьогодні.
❤31👍9✍5🔥3🤓2
Навіщо використовувати eslint правило no-process-env?
Відповідно до 12-факторного маніфесту, для конфігурації застосунку використовуються змінні середовища (env variables). Для звернення до них у Node.js використовується process.env.
Для правильного використання process.env існує правило no-process-env. Це правило зробить ваш код більш послідовним, використовуючи один файл для налаштування вашого застосунку. Тобто, ви використовуєте це правило по всьому проекту, а в файлі config.ts вимикаєте його для всього файлу.
А ще цей підхід покращує продуктивність застосунку завдяки зверненню до кешованого значення замість прямого читання з process.env. Ось приклад коду, за допомогою якого ви можете переконатися в різниці.
UPDATE: Додав cacheObject до коду
Відповідно до 12-факторного маніфесту, для конфігурації застосунку використовуються змінні середовища (env variables). Для звернення до них у Node.js використовується process.env.
Для правильного використання process.env існує правило no-process-env. Це правило зробить ваш код більш послідовним, використовуючи один файл для налаштування вашого застосунку. Тобто, ви використовуєте це правило по всьому проекту, а в файлі config.ts вимикаєте його для всього файлу.
А ще цей підхід покращує продуктивність застосунку завдяки зверненню до кешованого значення замість прямого читання з process.env. Ось приклад коду, за допомогою якого ви можете переконатися в різниці.
UPDATE: Додав cacheObject до коду
👍34🔥7
Аксель Раушмайер оновив свою книгу Exploring JavaScript. Тепер вона включає ECMAScript 2024. Рекомендую!
👍48🔥15
В JS функціональний код повільніший, ніж імперативний.
На картинці приклад коду. Результат його роботи:
Коли вам знадобиться цей факт? При працевлаштуванні у Big Tech або Enterprise компанію. Цей рецепт саме для таких людей. Адже одним із етапів відбору в такі компанії часто є алгоритми, як правило з автоматизованою перевіркою. Один в один, як на олімпіадах зі спортивного програмування.
Під час алгоритмічного інтерв’ю використання функціонального стилю може знизити ваші шанси на роботу. Поясню чому:
– функціональний код використовує N циклів на N операцій, замість 1 циклу на N операцій. У прикладі операцій 2 – перевірка парності та підсумовування.
– функціональний код використовує додаткову пам’ять на кожному map/reduce/etc.
А ось при розробці цей факт впливає мало. Оскільки Node.js у комерційній розробці рідко використовується для обчислень (Node.js замінюють більш підходящими технологіями), а ці мікрооптимізації шкодують читабельності/підтримуваності коду.
На картинці приклад коду. Результат його роботи:
❯ node example.jsfunctional: 7.782msfor of: 3.851msfor: 2.853msКоли вам знадобиться цей факт? При працевлаштуванні у Big Tech або Enterprise компанію. Цей рецепт саме для таких людей. Адже одним із етапів відбору в такі компанії часто є алгоритми, як правило з автоматизованою перевіркою. Один в один, як на олімпіадах зі спортивного програмування.
Під час алгоритмічного інтерв’ю використання функціонального стилю може знизити ваші шанси на роботу. Поясню чому:
– функціональний код використовує N циклів на N операцій, замість 1 циклу на N операцій. У прикладі операцій 2 – перевірка парності та підсумовування.
– функціональний код використовує додаткову пам’ять на кожному map/reduce/etc.
А ось при розробці цей факт впливає мало. Оскільки Node.js у комерційній розробці рідко використовується для обчислень (Node.js замінюють більш підходящими технологіями), а ці мікрооптимізації шкодують читабельності/підтримуваності коду.
👍38❤🔥3❤3🤔3🔥2😁1😱1😢1
Forwarded from GDG Cloud Kyiv (Nikita)
Наступний вебінар Google Cloud service review: Cloud Run
📅: 29 червня, 17:00-19:00
Программа:
– Що таке Cloud Run
– Cloud Run VS Cloud Function VS Firebase Function
– Cloud Run Service VS Cloud Run Job
– Integrations
– New Cloud Run features
Доповідачі:
– Віктор Турський, Senior Software Engineer, Google, веде @jabascript
– Нікіта Галкін, GDE, Cloud Architect, Independent Contractor, веде @node_recipes
Вебінар проходитиме на платформі GDG, тому для участі необхідно зареєструватись. Запис вебінару буде здійснено шляхом трансляції на youtube.
До зустрічі!
📅: 29 червня, 17:00-19:00
Программа:
– Що таке Cloud Run
– Cloud Run VS Cloud Function VS Firebase Function
– Cloud Run Service VS Cloud Run Job
– Integrations
– New Cloud Run features
Доповідачі:
– Віктор Турський, Senior Software Engineer, Google, веде @jabascript
– Нікіта Галкін, GDE, Cloud Architect, Independent Contractor, веде @node_recipes
Вебінар проходитиме на платформі GDG, тому для участі необхідно зареєструватись. Запис вебінару буде здійснено шляхом трансляції на youtube.
До зустрічі!
🤝12👍3
Monolith requires consistency
✅ Codestyle Consistency – Prettier/Eslint/EditorConfig
✅ Data Consistency – Database Migrations
✅ Process Consistency – Checklists
PS Жарт 7-річної давності: “Галкін любить ставити галочки”
✅ Codestyle Consistency – Prettier/Eslint/EditorConfig
✅ Data Consistency – Database Migrations
✅ Process Consistency – Checklists
PS Жарт 7-річної давності: “Галкін любить ставити галочки”
👍18🤣9👎1😁1
З Днем Конституції України!
Дуже хочу побажати, щоб ми усі краще дотримувалися її положень, а наша країна гідно пройшла перевірку історією. Як цього досягти я не знаю, а тому краще розповім те, що знаю.
Ось кілька ідей для вашого процесу розробки на тему дня:
- Зміни через RFC (Request for Comments): якщо у вас є ідея щодо поліпшення коду/процесу, ви можете створити документ RFC, в якому детально описати вашу пропозицію. Цей документ потім обговорюється всіма зацікавленими сторонами, і після внесення змін і затвердження, ваша пропозиція впроваджується у проект. У веб-розробці RFC використовуються для стандартизації нових веб-технологій та протоколів, таких як HTTP, TLS, etc. приклад rfc-editor.org
- Щоб у вашого продукту/коду була якісна документація, можна застосовувати підхід Documentation First. Ідея зрозуміла будь-кому, хто використовував API First, UX First тощо. Спочатку ми пишемо документацію і збираємо на її основі зворотний зв’язок у користувачів. Приклад у Google
– Handbook, який описує всі сфери у компанії та всі процеси, інструменти, політики та стандарти. Такий підхід допомагає забезпечити єдині стандарти роботи і полегшує адаптацію нових співробітників. Крутий приклад у resend.
🇺🇦💙💛
Дуже хочу побажати, щоб ми усі краще дотримувалися її положень, а наша країна гідно пройшла перевірку історією. Як цього досягти я не знаю, а тому краще розповім те, що знаю.
Ось кілька ідей для вашого процесу розробки на тему дня:
- Зміни через RFC (Request for Comments): якщо у вас є ідея щодо поліпшення коду/процесу, ви можете створити документ RFC, в якому детально описати вашу пропозицію. Цей документ потім обговорюється всіма зацікавленими сторонами, і після внесення змін і затвердження, ваша пропозиція впроваджується у проект. У веб-розробці RFC використовуються для стандартизації нових веб-технологій та протоколів, таких як HTTP, TLS, etc. приклад rfc-editor.org
- Щоб у вашого продукту/коду була якісна документація, можна застосовувати підхід Documentation First. Ідея зрозуміла будь-кому, хто використовував API First, UX First тощо. Спочатку ми пишемо документацію і збираємо на її основі зворотний зв’язок у користувачів. Приклад у Google
– Handbook, який описує всі сфери у компанії та всі процеси, інструменти, політики та стандарти. Такий підхід допомагає забезпечити єдині стандарти роботи і полегшує адаптацію нових співробітників. Крутий приклад у resend.
🇺🇦💙💛
❤41👍11👎2
Forwarded from GDG Cloud Kyiv (Nikita)
За 10 хвилин починаємо:
- приєднатися, щоб поставити запитання на платформі GDG
- Подивитись онлайн на ютуб
- приєднатися, щоб поставити запитання на платформі GDG
- Подивитись онлайн на ютуб
🔥2⚡1
Чому я не використовую znv?
Нещодавно мій менті запитав, чому я попросив його відмовитися від використання
1️⃣ Ваш додаток під час запуску має перевіряти наявність environment-змінних. Детальніше у 12 factor app. Якщо якась із змінних не вказана, не можна використовувати значення за замовчуванням. Замість цього необхідно викинути помилку, щоб аварійно завершити роботу. Це допоможе уникнути людських помилок, коли при релізі на продакшн забули додати нову env змінну, а default value призведе до некоректної роботи нової функції.
2️⃣ Як single source of truth про потрібні вашому додатку змінні слід використовувати
3️⃣ Потім у вашему config-service можна трансформуватиinterface ProcessEnv extends Dict<string>, тобто process.env['VAR_NAME'] має тільки string | undefined значення. та валідувати значення за допомогою
Тому використання
👎 погіршує DevEx, бо замість
👎
Нещодавно мій менті запитав, чому я попросив його відмовитися від використання
znv (zod + env) і замінити його на використання dotenv-safe та безпосередньо zod. Тож, моя відповідь на це така:1️⃣ Ваш додаток під час запуску має перевіряти наявність environment-змінних. Детальніше у 12 factor app. Якщо якась із змінних не вказана, не можна використовувати значення за замовчуванням. Замість цього необхідно викинути помилку, щоб аварійно завершити роботу. Це допоможе уникнути людських помилок, коли при релізі на продакшн забули додати нову env змінну, а default value призведе до некоректної роботи нової функції.
2️⃣ Як single source of truth про потрібні вашому додатку змінні слід використовувати
.env.example. Цей файл слугує документацією та його ми зберігаємо у корні репозиторію. На рівні коду dotenv-safe (який є обгорткою над dotenv) зчитає ваш .env.example та порівняє з process.env. 3️⃣ Потім у вашему config-service можна трансформувати
zod, чи як вам подобається. Тому використання
znv має наступні проблеми:👎 погіршує DevEx, бо замість
.env.example потрібно дивитися у код👎
znv дозволяє використовувати значення за замовчуванням🔥29👍14❤1🤔1🏆1
Давно не проводив #like_and_share. Мета гри - поділитися своїм досвідом та дізнатися про досвід інших учасників. Правила:
1. Публікація в каналі визначає тему. Сьогодні це автори контенту на тему каналу @node_recipes (Node.js, JS/TS, Cloud Native)
2. У коментарях кожен може залишити посилання на автора, якого він читає, і коротко описати, чому його контент є корисним.
3. Учасники голосують, використовуючи лайки. Не ставте негативні лайки, бо вони також зараховуються як позитивні.
4. Завтра ми підведемо підсумки на YouTube-стрімі. Переможець отримає 12-місячну персональну підписку на будь-яке IDE від JetBrains.
1. Публікація в каналі визначає тему. Сьогодні це автори контенту на тему каналу @node_recipes (Node.js, JS/TS, Cloud Native)
2. У коментарях кожен може залишити посилання на автора, якого він читає, і коротко описати, чому його контент є корисним.
3. Учасники голосують, використовуючи лайки. Не ставте негативні лайки, бо вони також зараховуються як позитивні.
4. Завтра ми підведемо підсумки на YouTube-стрімі. Переможець отримає 12-місячну персональну підписку на будь-яке IDE від JetBrains.
🔥13❤1
Сьогодні о 19 по Києву Node.js Weekly 2024-W13: From Node.js Developer to Cloud Engineer. Під час трансляції підведу підсумки like_and_share, тому запрошую долучатися!
👍10
Сподіваюся у вас є світло і ви підключаєтеся, бо я починаю ефір.
До зустрічі!
До зустрічі!
YouTube
Node.js Weekly 2024-W13: From Node.js Developer to Cloud Engineer
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
👍8🔥1
Як працює git autocorrect?
Сьогодні порада для новачків. Якщо у вас багато опечаток у git і ви не використовуєте git alias, рекомендую звернути увагу на help.autocorrect. Якщо є тільки одна схожа команда, git виконує її автоматично. Якщо ж є кілька варіантів, він перераховує їх і зупиняється.
Приклади:
Подібна функція є у zsh: CORRECT/CORRECT_ALL з prompt-виправленнями. Автоматичні виправлення на рівні системи, а не окремих команд, дуже ризиковані, тому такого не існує.
На завершення нагадаю, що у git tips є багато порад.
Сьогодні порада для новачків. Якщо у вас багато опечаток у git і ви не використовуєте git alias, рекомендую звернути увагу на help.autocorrect. Якщо є тільки одна схожа команда, git виконує її автоматично. Якщо ж є кілька варіантів, він перераховує їх і зупиняється.
Приклади:
$ git com -m "Some awesome work"git: 'com' is not a git command. See 'git --help'.The most similar commands are commit column# Immediate autocorrectgit config --global help.autocorrect immediategit sttaus # Runs `git status` immediately# Prompt for confirmation before autocorrectgit config --global help.autocorrect promptgit sttaus # Asks for confirmation before running `git status`# Disable autocorrectgit config --global help.autocorrect nevergit sttaus # Does not autocorrect# Enable autocorrect with a 1 second delaygit config --global help.autocorrect 10git sttaus # Runs `git status` instead, after a 1 second delayПодібна функція є у zsh: CORRECT/CORRECT_ALL з prompt-виправленнями. Автоматичні виправлення на рівні системи, а не окремих команд, дуже ризиковані, тому такого не існує.
На завершення нагадаю, що у git tips є багато порад.
👍22❤9🔥1
Де вчити NestJS?
Сьогодні в особисті повідомлення знову прилетів запит на те, де вчити Nest.js: “Нікіта, привіт! можеш порадити хороший курс по нест на юдемі чи курсері? чи книгу”
Почну з посилань, які я рекомендую:
🔗 NestJS documentation
🔗 Official NestJS Courses
🔗 API with NestJS by wanago.io
🔗 Open Source Projects using NestJS
Особистий досвід. За останні 4 роки я провів більше 10 разів внутрішні курси по Nest.js. Кожного разу я компонував курс під потреби проекту. Немає сенсу давати GraphQL або NestJS мікросервіси команді, яка їх використовувати не буде. Вчити PHP розробників та frontend розробників необхідно по-різному. Спільне у курсів було те, що я показував реальну практику застосування фреймворку в контексті, близькому до потреб проекту. Якщо ж робити курс у відриві від контексту проекту, то вийде переказ Official NestJS Courses та wanago.io.
На Coursera представлені курси у стилі університетського матеріалу, тобто фокус на теорію. А фреймворки вчаться через практику – learning by doing. З цієї ж причини хороших книг по Nest.js немає. По фреймворках пишуть документацію, тому раз на півроку перечитуємо документацію та реліз notes по Nest.js. Також я рекомендую робити і з Node.js або будь-яким іншим інструментом.
Для мене Udemy це блошиний ринок, тобто вам може пощастити і ви знайдете за 5 доларів щось варте. Але як правило час на пошук та реставрацію (перевірку актуальності інформації в курсі) не виправдовує походи на блошиний ринок. Цей час краще вкласти в написання коду або вивчення як роблять колеги, тому я і раджу переглядати код NestJS проектів.
І на завершення: ⚠️learning by doing⚠️
Сьогодні в особисті повідомлення знову прилетів запит на те, де вчити Nest.js: “Нікіта, привіт! можеш порадити хороший курс по нест на юдемі чи курсері? чи книгу”
Почну з посилань, які я рекомендую:
🔗 NestJS documentation
🔗 Official NestJS Courses
🔗 API with NestJS by wanago.io
🔗 Open Source Projects using NestJS
Особистий досвід. За останні 4 роки я провів більше 10 разів внутрішні курси по Nest.js. Кожного разу я компонував курс під потреби проекту. Немає сенсу давати GraphQL або NestJS мікросервіси команді, яка їх використовувати не буде. Вчити PHP розробників та frontend розробників необхідно по-різному. Спільне у курсів було те, що я показував реальну практику застосування фреймворку в контексті, близькому до потреб проекту. Якщо ж робити курс у відриві від контексту проекту, то вийде переказ Official NestJS Courses та wanago.io.
На Coursera представлені курси у стилі університетського матеріалу, тобто фокус на теорію. А фреймворки вчаться через практику – learning by doing. З цієї ж причини хороших книг по Nest.js немає. По фреймворках пишуть документацію, тому раз на півроку перечитуємо документацію та реліз notes по Nest.js. Також я рекомендую робити і з Node.js або будь-яким іншим інструментом.
Для мене Udemy це блошиний ринок, тобто вам може пощастити і ви знайдете за 5 доларів щось варте. Але як правило час на пошук та реставрацію (перевірку актуальності інформації в курсі) не виправдовує походи на блошиний ринок. Цей час краще вкласти в написання коду або вивчення як роблять колеги, тому я і раджу переглядати код NestJS проектів.
І на завершення: ⚠️learning by doing⚠️
👍53❤5🔥4❤🔥1👎1
На каналі давно не було рецептів, а ще довше технічних байок. Поділюсь з вами історією About estimates.
Від бізнесу надійшов запит на інтеграцію з одним популярним сервісом. Аналіз документації показав, що потрібна функція існує, тому інтеграція буде простою – налаштувати webhook на нашій стороні та надіслати запит до сервісу на включення сповіщень через цей webhook. Досвід роботи з цим сервісом є. Завдання зрозуміле. Беремо в наступний спринт. Як досвідчений менеджер, я розбив це завдання на два тікети: включення сповіщень у цьому сервісі та написання webhook-а.
Вгадайте, скільки часу цей популярний сервіс підключав сповіщення на своїй стороні?
Це зайняло 5 місяців, більше 20 звернень до служби підтримки/форуму. Місяць на переконання, що проблема на їх стороні. Вони таки визнали, що є баг на рівні інфраструктури, і виправлять його у наступному великому релізі через 2 місяці!!! Потім ще місяць на повторне переконання, що проблема не зникла. А потім ще місяць на виправлення бага вже на рівні коду.
Спробуйте вгадати, що це за сервіс?
Це Zoom. Бізнес попросив зберігати файли з чату. Кому цікаві конкретні деталі, ось посилання: https://devforum.zoom.us/t/is-webhook-meeting-chat-message-file-sent-work/113881
Які висновки можна зробити з цієї історії?
Не вірте документації, а перевіряйте її. Для цього і робиться Proof of Concept. А ще розбивайте завдання на частини, особливо коли йдеться про інтеграцію.
Від бізнесу надійшов запит на інтеграцію з одним популярним сервісом. Аналіз документації показав, що потрібна функція існує, тому інтеграція буде простою – налаштувати webhook на нашій стороні та надіслати запит до сервісу на включення сповіщень через цей webhook. Досвід роботи з цим сервісом є. Завдання зрозуміле. Беремо в наступний спринт. Як досвідчений менеджер, я розбив це завдання на два тікети: включення сповіщень у цьому сервісі та написання webhook-а.
Вгадайте, скільки часу цей популярний сервіс підключав сповіщення на своїй стороні?
Спробуйте вгадати, що це за сервіс?
Які висновки можна зробити з цієї історії?
Не вірте документації, а перевіряйте її. Для цього і робиться Proof of Concept. А ще розбивайте завдання на частини, особливо коли йдеться про інтеграцію.
👍45🤯22😁8🔥4❤2
Як сортувати рядки?
Більшість із вас знають, що для сортування рядків у JavaScript існує localeCompare. Дозволяє легко відсортувати рядки. Приклад:
Приклад з урахуванням локалі
Приклад для сортування рядків, що містять числа, у більш зрозумілий для людини спосіб:
Взагалі, у третього аргументу Intl.CollatorOptions, крім numeric, є ще 6 можливих ключів, і знати їх напам’ять, звісно, ніхто не буде. Але давайте ще раз їх повторимо:
👉 caseFirst: Контролює позицію великих і малих літер у порядку сортування. Значення:
• "upper": Сортує великі літери перед малими (наприклад, “А” перед “а”).
• "lower": Сортує малі літери перед великими (наприклад, “а” перед “А”).
• "false" (значення за замовчуванням): Використовується порядок за замовчуванням для локалі.
👉 ignorePunctuation. Тип: boolean. Корисно, коли потрібно порівнювати рядки, де пунктуація не повинна впливати на результат. Значення:
• true: Ігнорує пунктуацію під час порівняння.
• false (значення за замовчуванням): Враховує пунктуацію.
👉 sensitivity. Контролює, наскільки детальним є порівняння з точки зору регістру, акцентів і базових символів. Значення:
• "base": Враховує лише базові літери (“а” і “А” вважаються рівними).
• "accent": Враховує акценти, але ігнорує регістр (“é” і “e” різні, але “e” і “E” вважаються рівними).
• "case": Враховує регістр, але ігнорує акценти (“а” і “А” різні, але “а” і “ä” вважаються рівними).
• "variant": Враховує як регістр, так і акцентні відмінності (“а”, “А”, “ä” і “Ä” всі різні).
👉 usage. Визначає, чи оптимізовано порівняння для пошуку або сортування. Використовується з new Intl.Collator, а не localeCompare.
👉 localeMatcher. Визначає, як вибирається локаль, якщо ви вказали декілька локалей.
👉 collation. Зазвичай використовується для специфічних мов або застосунків, які потребують певної колації, але в більшості випадків це не є необхідним.
На завершення нагадаю, що сортування на рівні коду — це завдання для FE/BFF. У чистому BE сортування виконується на рівні бази даних. Для сортування за локаллю у нас є COLLATE. Приклад:
Але якщо вам потрібні аналоги CollatorOptions, то SQL такого на жаль не має.
Більшість із вас знають, що для сортування рядків у JavaScript існує localeCompare. Дозволяє легко відсортувати рядки. Приклад:
names.sort((a, b) => a.localeCompare(b));Приклад з урахуванням локалі
names.sort((a, b) => a.localeCompare(b, 'uk'));Приклад для сортування рядків, що містять числа, у більш зрозумілий для людини спосіб:
["a2", "a10", "a1"].sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))// Result: [ 'a1', 'a2', 'a10' ]Взагалі, у третього аргументу Intl.CollatorOptions, крім numeric, є ще 6 можливих ключів, і знати їх напам’ять, звісно, ніхто не буде. Але давайте ще раз їх повторимо:
👉 caseFirst: Контролює позицію великих і малих літер у порядку сортування. Значення:
• "upper": Сортує великі літери перед малими (наприклад, “А” перед “а”).
• "lower": Сортує малі літери перед великими (наприклад, “а” перед “А”).
• "false" (значення за замовчуванням): Використовується порядок за замовчуванням для локалі.
👉 ignorePunctuation. Тип: boolean. Корисно, коли потрібно порівнювати рядки, де пунктуація не повинна впливати на результат. Значення:
• true: Ігнорує пунктуацію під час порівняння.
• false (значення за замовчуванням): Враховує пунктуацію.
👉 sensitivity. Контролює, наскільки детальним є порівняння з точки зору регістру, акцентів і базових символів. Значення:
• "base": Враховує лише базові літери (“а” і “А” вважаються рівними).
• "accent": Враховує акценти, але ігнорує регістр (“é” і “e” різні, але “e” і “E” вважаються рівними).
• "case": Враховує регістр, але ігнорує акценти (“а” і “А” різні, але “а” і “ä” вважаються рівними).
• "variant": Враховує як регістр, так і акцентні відмінності (“а”, “А”, “ä” і “Ä” всі різні).
👉 usage. Визначає, чи оптимізовано порівняння для пошуку або сортування. Використовується з new Intl.Collator, а не localeCompare.
👉 localeMatcher. Визначає, як вибирається локаль, якщо ви вказали декілька локалей.
👉 collation. Зазвичай використовується для специфічних мов або застосунків, які потребують певної колації, але в більшості випадків це не є необхідним.
На завершення нагадаю, що сортування на рівні коду — це завдання для FE/BFF. У чистому BE сортування виконується на рівні бази даних. Для сортування за локаллю у нас є COLLATE. Приклад:
SELECT * FROM table_name ORDER BY column_name COLLATE "en_US";Але якщо вам потрібні аналоги CollatorOptions, то SQL такого на жаль не має.
👍57❤5🤝2