# Не допускайте невипущені функції у публічний бандл

Назви прапорців, рядки маршрутів і текст невипущеного UI потрапляють до кожного відвідувача ще до будь-якого анонсу, а люди порівнюють бандли між релізами. Що прибрати, що захистити і що взагалі не включати в збірку.

Source: https://www.afterpack.dev/uk/docs/use-cases/unreleased-features

Ваш бандл містить код функцій, які ви ще не анонсували, і він читається як попередній огляд того, що на підході.

## Назви прапорців і рядки маршрутів читаються як changelog

Назви прапорців, рядки маршрутів і текст невипущеного UI читаються як changelog, написаний не для тієї аудиторії. Люди порівнюють ваші бандли між релізами й описують, що змінилося. Прапорець із читабельною назвою вмикають у devtools і роблять скриншот ще до того, як ви щось сказали публічно.

Для цього не потрібен ваш вихідний код. Бандл, що потрапляє в браузер кожного відвідувача, уже доступний кожному, хто захоче подивитися, незалежно від того, чи давали ви на нього посилання.

## Що перезбірка робить із порівнянням бандлів

[`identifiers.rename`](https://www.afterpack.dev/uk/docs/config#identifiers-rename) перейменовує ваші ідентифікатори, а [`strings.encode`](https://www.afterpack.dev/uk/docs/config#strings-encode) кодує ваші літерали, тож у випущеному файлі немає `newBilling`, який можна знайти пошуком, і немає невипущеного тексту, який можна процитувати. Новий [`seed`](https://www.afterpack.dev/uk/docs/config#seed) на кожній збірці змінює форму всього артефакту, включно з кодом, який не змінювався, тож порівняння двох релізів перестає бути дешевим способом побачити, що нового.

Сильніше рішення не є налаштуванням AfterPack. Код, який ще не запущено, найкраще тримати поза бандлом: прапорець, який вирішує сервер, або динамічний імпорт за перевіркою прав доступу означають, що функції немає в тому, що випускається. Жоден пресет із цим не зрівняється, бо в артефакті просто не лишається нічого, що треба захищати.

## Захистіть те, що залишається, приберіть те, що не мусить залишатися

Для коду, який таки залишається в бандлі, підвищте пресет для всієї збірки або позначте модуль, що містить невипущену функцію:

```ts
/* @afterpack preset=hard */
export function renderNewBillingFlow() {
  // unreleased UI
}
/* @afterpack end */
```

Спершу скористайтеся [`preset`](https://www.afterpack.dev/uk/docs/config#preset) `medium` або `hard` для всього бандла. Директива, що посилює один модуль, потребує [Pro](https://www.afterpack.dev/uk/docs/tiers). [`complexity`](https://www.afterpack.dev/uk/docs/config#complexity) задає цільове значення напряму, коли щабель пресету недостатньо точний для ваших потреб.

## Переконайтеся, що невипущений модуль покрито

Відкрийте [Protection Map](https://www.afterpack.dev/uk/docs/protection-map#how-to-read-it), яка записується, коли увімкнено [`protectionMap.enabled`](https://www.afterpack.dev/uk/docs/config#protectionMap-enabled), і переконайтеся, що невипущений модуль покрито на очікуваному цільовому рівні. Тримайте [`sourceMap.enabled`](https://www.afterpack.dev/uk/docs/config#sourceMap-enabled) вимкненим у розгортанні: опублікований map повертає ваші оригінальні імена й рядки, яким би пресетом не було зібрано файл поруч із ним.

## Що все ще може зробити клієнтський прапорець

Перейменування, кодування і нова форма збірки з кожним релізом означають, що бандл більше не читається як changelog, а порівняння двох версій перестає бути дешевим способом зазирнути всередину. Прапорець, який може ввімкнути клієнт, усе одно може знайти й увімкнути той, хто уважно прочитає нову збірку. Усе, що справді під ембарго, має бути за відповіддю сервера, яка вирішує, чи працює функція взагалі.

## Далі

- [Пресети](https://www.afterpack.dev/uk/docs/presets): драбина від `minify` до `extreme` і цільова складність кожного щабля.
- [Директиви](https://www.afterpack.dev/uk/docs/directives#what-to-mark): що ще варто позначити вищим пресетом.
- [Protection Map](https://www.afterpack.dev/uk/docs/protection-map#how-to-read-it): як підтвердити, що директива подіяла.
