Добавить в корзинуПозвонить
Найти в Дзене
Chris Roylance

Состоялся выпуск приобразователя цветов и изменения цветов Color.js 0.6.0

Перед выпуском 0.6.0 был сделано три предварительных релиза, но разработчики Color.js хотели убедиться, что всё сделано правильно. По их предварительной информации, версия 0.6.0 вероятно, будет последней версией из версий 0.x, поскольку Color.js, безусловно, достаточно зрелый, чтобы перейти к версии 1 в следующей крупной версии. Хочется отметить, что данная библиотека очень популярна и насчитывает более 114 миллионов скачиваний только на npm. По словам авторов, сейчас средний объем скачиваний составляет 3.5 млн скачиваний в неделю. В этом релизе есть ряд изменений, нарушающих обратную совместимость, но они должны негативно повлиять лишь на некоторые довольно специфические сценарии использования. Как было объявлено в версии 0.5.0, перешли на использование null вместо NaN для представления значений, отсутствующих в исходном виде (что естественно происходит при преобразовании ахроматических цветов в определенные цветовые пространства). Null не только концептуально ближе, но и, поскольку
Оглавление

Перед выпуском 0.6.0 был сделано три предварительных релиза, но разработчики Color.js хотели убедиться, что всё сделано правильно. По их предварительной информации, версия 0.6.0 вероятно, будет последней версией из версий 0.x, поскольку Color.js, безусловно, достаточно зрелый, чтобы перейти к версии 1 в следующей крупной версии.

Хочется отметить, что данная библиотека очень популярна и насчитывает более 114 миллионов скачиваний только на npm. По словам авторов, сейчас средний объем скачиваний составляет 3.5 млн скачиваний в неделю.

Несовместимые изменения с предыдущими версиями

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

Вместо NaN используется значение null для обозначения отсутствия значений.

Как было объявлено в версии 0.5.0, перешли на использование null вместо NaN для представления значений, отсутствующих в исходном виде (что естественно происходит при преобразовании ахроматических цветов в определенные цветовые пространства).

Null не только концептуально ближе, но и, поскольку в CSS теперь также есть значение NaN, это изменение позволяет нам правильно представлять его, используя фактическое значение NaN.

Значение NaN продолжает обрабатываться (и становится NaN в JavaScript). Вместо сериализации как NaN (что недопустимо в CSS), оно сериализуется как calc(NaN), что является допустимой координатой CSS. Для корректной работы преобразования туда и обратно это также означает, что теперь мы обрабатываем и calc(NaN).

Программное определение способа представления отсутствия

Если вы работаете с кодом, которому необходимо обрабатывать экземпляры/объекты Color в общем виде, не зная, из какой версии Color.js они взяты, вы можете определить, какое значение используется, и использовать его вместо жестко заданного значения null или NaN:

let noneCoord = new Color("rgb(none none none)").coords[0];
const NONE_VALUE = noneCoord?.valueOf() ?? noneCoord;

Вместо числовых объектов для координат используйте обычные числа

Ранее координаты преобразовывались в объекты типа Number, чтобы сохранить метаданные об их обработке. Начиная с этой версии, они представляют собой простые числовые примитивы, что приводит как к повышению производительности, так и к улучшению пользовательского опыта в большинстве случаев.

Вместо этого метаданные для анализа передаются в виде отдельного объекта и хранятся в экземплярах Color в переменной color.parseMeta. В объектно-ориентированном API это происходит автоматически, но пользователям необходимо явно включить эту функцию при использовании процедурного API, поскольку он оптимизирован для высокопроизводительных сценариев использования.

Кроме того, эти метаданные теперь гораздо более детализированы и могут практически воспроизвести формат, который был проанализирован.

Цвета теперь пересериализуются в проанализированном формате

Это была давняя проблема, и теперь она решена. Если вы анализируете шестнадцатеричный код цвета, он по умолчанию будет сериализован обратно в шестнадцатеричный код цвета. Если вы указываете насыщенность в процентах, вы получите результат в процентах. Если по какой-то причине вы анализируете устаревший код цвета, разделенный запятыми, то вы можете изменить его и получить обратно устаревший код цвета, разделенный запятыми, не прилагая никаких усилий.

Предостережения:

● Это происходит автоматически только в объектно-ориентированном API. Процедурный API по умолчанию не хранит метаданные парсинга, поскольку оптимизирован для скорости; вам необходимо явно передать объект parseMeta.

● Вы всегда можете переопределить это, передав format (или format: "default") для значения по умолчанию для цветового пространства, что обеспечит вам предыдущее поведение.