Строчный инструмент render() → MenuConfig
render() { /* returns an HTMLElement button */ }render() { return { icon, name, onActivate, isActive }; }Все переименования кодмода, карта CSS и совместимость по каждому тулзу.
Сначала предпросмотр, затем применение.
npx -p @bloklabs/core migrate-from-editorjs ./src --dry-runnpx -p @bloklabs/core migrate-from-editorjs ./srcКаждое переименование, которое выполняет codemod, — до и после.
import EditorJS from '@editorjs/editorjs';import { Blok } from '@bloklabs/core';import Header from '@editorjs/header';import { Header } from '@bloklabs/core/tools';import type { EditorConfig } from '@editorjs/editorjs';import type { BlokConfig } from '@editorjs/editorjs'; // specifier still needs a manual change.ce-block[data-blok-element]<div id="editorjs"></div><div id="blok"></div>data-iddata-blok-idBlok заменяет классы Editor.js на data-атрибуты. Перенесите свои стили по этой таблице.
.codex-editor[data-blok-editor].ce-block[data-blok-element].ce-block--selected[data-blok-selected="true"].ce-toolbar[data-blok-toolbar].ce-inline-toolbar[data-blok-testid="inline-toolbar"].ce-toolbar__settings-btn[data-blok-settings-toggler].ce-popover[data-blok-popover]data-placeholderdata-blok-placeholderБлочные инструменты переносятся без изменений. Строчные инструменты возвращают MenuConfig. Можно и обернуть старый класс, тогда переписывать не придётся.
render() { /* returns an HTMLElement button */ }render() { return { icon, name, onActivate, isActive }; }Оберните класс существующего строчного инструмента EditorJS вместо переработки. Обёртка отображает старый API на MenuConfig. Она сохраняет title, shortcut, sanitize и иконку инструмента. Без неё Blok пропускает устаревший render(), возвращающий HTMLElement, и инструмент молча исчезает.
marker: wrapLegacyInlineTool(MarkerTool)Blok читает те же ключи: render, save, validate, renderSettings, merge, onPaste и статические toolbox/conversionConfig. При желании добавьте setReadOnly(state) для более дешёвого переключения режима только для чтения.
Когда Blok загружает legacy-данные в рантайме, он один раз выводит console.warn на каждую пару «блок + поле» с указанием того, что было отброшено. migrateLegacyBlocks из @bloklabs/core/migrate делает то же самое.
Передайте onLossyField, чтобы заменить это предупреждение в консоли своим колбэком. migrate() всегда подставляет такой колбэк, поэтому молчит и возвращает потери в report.lossyFields.
Исключение составляет codemod. В нём жёстко задан пустой приёмник предупреждений, и он мигрирует молча. Если какое-то из этих полей вам нужно, сверьтесь с таблицей до его запуска.
quotealignment (caption автоматически переносится в следующий параграф)imagewithBackgroundlinkToolmeta.site_namelist itemmeta.counterType (meta.checked и meta.start переносятся)attachesfile.name, file.size, file.extension (метаданные файла теряются, когда блок становится закладкой)markerсама подсветка (Editor.js пишет <mark class="cdx-marker"> без инлайнового цвета. Санитайзер marker в Blok не разрешает атрибуты на такой метке, а preflight сбрасывает подсветку <mark> из браузера, поэтому текст сохраняется, но без выделения)Совместимость зависит от инструментов, которые использует ваш контент, а не от версии Editor.js.
Эти инструменты загружают сохранённые данные как есть.
paragraphheadercodeembedinlineCodeaudioКонвертируются общей legacy-грамматикой. Одни и те же правила работают и в рантайме, и в codemod.
listchecklisttoggleListcalloutimagesimple-imagelinkTooldelimiterquotetablerawwarningattachesУ Blok нет эквивалента. Зарегистрируйте свой инструмент или оставьте инструмент Editor.js.
personalitybuttonНеизвестные типы блоков отображаются как заглушки с предупреждением "Tool «name» is not found" в консоли. Их данные сохраняются. Зарегистрируйте инструмент позже, и блок вернётся.