Skip to content

Миграция на 1.0

1.0 убирает все deprecated-алиасы, накопленные тремя переименованиями и раундами полировки API. Одно имя на понятие — больше ничего не меняется: семантика, транзакционные гарантии и производительность ровно те же, что в 0.19.

Codemod

Почти вся миграция механическая. Из корня проекта:

bash
node node_modules/@continuum-js/frp/../../scripts/codemod-1.0.mjs src
# или скопируйте scripts/codemod-1.0.mjs из репозитория Continuum

Скрипт переписывает все механические переименования на месте и печатает предупреждения с инструкциями для немногих мест, где нужен человек (меняется порядок аргументов). Закоммитьтесь до запуска; просмотрите дифф после.

Переименовано — механика

До 1.01.0
Wire<A> / Behavior<A>State<A>
wire(init)state(init)
WireSource<A>StateSource<A>
Event<A>Stream<A>
newEvent()newStream()
e.gate(b)e.when(b)
ea.orElse(eb)ea.or(eb)
Wire.switchB(w)flatten(w)
Wire.switchE(w)flatten(w)
distinctB(b, eq?) (std)dedupe(b, eq?)

Сменилась форма — нужен человек

До 1.01.0
const [b, set] = newBehavior(x)const b = state(x) — одно значение; запись через b.set
e.snapshot(b, f)b.at(e, (value, event) => f(event, value)) — данные первыми
Wire.lift2(f, a, b)combine(a, b, f)
Wire.lift3(f, a, b, c)combine(a, b, c, f)
Wire.apply(bf, ba)combine(bf, ba, (f, a) => f(a))

Однострочную деструктуризацию newBehavior codemod конвертирует сам, остальное — флагует.

Почему такие имена

История имён — и мотивы каждого переименования — рассказаны в Истории. Коротко: Event читался как одно происшествие и конфликтовал с DOM Event; Behavior — теоретический жаргон; метафору Wire никто не узнавал. state — слово, которым вы уже думаете.