@cldmv/slothlet 3.9.1 → 3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -17
- package/REFERENCE.md +19 -19
- package/dist/lib/builders/api_builder.mjs +1 -1
- package/dist/lib/builders/builder.mjs +1 -1
- package/dist/lib/builders/modes-processor.mjs +1 -1
- package/dist/lib/handlers/api-cache-manager.mjs +1 -1
- package/dist/lib/handlers/api-manager.mjs +1 -1
- package/dist/lib/handlers/hook-manager.mjs +1 -1
- package/dist/lib/handlers/permission-manager.mjs +1 -1
- package/dist/lib/helpers/class-instance-wrapper.mjs +1 -1
- package/dist/lib/helpers/config.mjs +1 -1
- package/dist/lib/helpers/generate-manifest.mjs +1 -1
- package/dist/lib/helpers/module-discovery.mjs +1 -1
- package/dist/lib/helpers/module-manifest-validator.mjs +1 -1
- package/dist/lib/i18n/languages/de-de.json +90 -64
- package/dist/lib/i18n/languages/en-gb.json +90 -64
- package/dist/lib/i18n/languages/en-us.json +90 -64
- package/dist/lib/i18n/languages/es-es.json +90 -64
- package/dist/lib/i18n/languages/es-mx.json +90 -64
- package/dist/lib/i18n/languages/fr-fr.json +90 -64
- package/dist/lib/i18n/languages/hi-in.json +90 -64
- package/dist/lib/i18n/languages/ja-jp.json +90 -64
- package/dist/lib/i18n/languages/ko-kr.json +90 -64
- package/dist/lib/i18n/languages/pt-br.json +90 -64
- package/dist/lib/i18n/languages/ru-ru.json +92 -66
- package/dist/lib/i18n/languages/zh-cn.json +90 -64
- package/dist/lib/modes/eager.mjs +1 -1
- package/dist/lib/modes/lazy.mjs +1 -1
- package/package.json +7 -4
- package/types/dist/lib/builders/api_builder.d.mts.map +1 -1
- package/types/dist/lib/builders/builder.d.mts.map +1 -1
- package/types/dist/lib/builders/modes-processor.d.mts.map +1 -1
- package/types/dist/lib/handlers/api-cache-manager.d.mts.map +1 -1
- package/types/dist/lib/handlers/api-manager.d.mts.map +1 -1
- package/types/dist/lib/handlers/hook-manager.d.mts +10 -3
- package/types/dist/lib/handlers/hook-manager.d.mts.map +1 -1
- package/types/dist/lib/handlers/permission-manager.d.mts +2 -0
- package/types/dist/lib/handlers/permission-manager.d.mts.map +1 -1
- package/types/dist/lib/helpers/class-instance-wrapper.d.mts.map +1 -1
- package/types/dist/lib/helpers/config.d.mts +13 -0
- package/types/dist/lib/helpers/config.d.mts.map +1 -1
- package/types/dist/lib/helpers/generate-manifest.d.mts +10 -0
- package/types/dist/lib/helpers/generate-manifest.d.mts.map +1 -1
- package/types/dist/lib/helpers/module-discovery.d.mts.map +1 -1
- package/types/dist/lib/helpers/module-manifest-validator.d.mts.map +1 -1
- package/types/dist/lib/modes/eager.d.mts +2 -1
- package/types/dist/lib/modes/eager.d.mts.map +1 -1
- package/types/dist/lib/modes/lazy.d.mts +2 -1
- package/types/dist/lib/modes/lazy.d.mts.map +1 -1
|
@@ -1,67 +1,126 @@
|
|
|
1
1
|
{
|
|
2
2
|
"translations": {
|
|
3
3
|
"INVALID_CONFIG": "Неверная конфигурация: {option} имеет значение {value}, ожидалось {expected}. {hint}",
|
|
4
|
+
"HINT_INVALID_CONFIG": "Проверьте значение конфигурации и убедитесь, что оно соответствует ожидаемому формату.",
|
|
5
|
+
"INVALID_CONFIG_SYNTHETIC_EXPORTS_SHAPE": "Ошибка конфигурации: встроенные exports должны быть простым объектом вида { default?, ...named }; получено {received}.",
|
|
6
|
+
"HINT_INVALID_CONFIG_SYNTHETIC_EXPORTS_SHAPE": "Передайте exports как простой объект, например { default: fn } или { name: fn } — либо обёртку { exports: { default?, ...named } }, либо функцию напрямую.",
|
|
7
|
+
"INVALID_CONFIG_SYNTHETIC_INPUT": "Ошибка конфигурации: встроенное содержимое должно быть простым объектом exports вида { default?, ...named }, обёрткой { exports: … } или функцией напрямую; получено {received}.",
|
|
8
|
+
"HINT_INVALID_CONFIG_SYNTHETIC_INPUT": "Передайте встроенные exports как простой объект или функцию напрямую; для монтирования файловой системы используйте строковый путь.",
|
|
9
|
+
"INVALID_CONFIG_SYNTHETIC_NAME": "Ошибка конфигурации: syntheticName должен быть непустой строкой; получено {received}.",
|
|
10
|
+
"HINT_INVALID_CONFIG_SYNTHETIC_NAME": "Укажите строковое имя ключа для синтетической сборки, например \"synthetic\".",
|
|
11
|
+
"INVALID_CONFIG_PRELOADED_STRUCTURE": "Ошибка конфигурации: preloadedStructure должен быть простым объектом с массивами files и directories, получено {received}.",
|
|
12
|
+
"HINT_INVALID_CONFIG_PRELOADED_STRUCTURE": "preloadedStructure создаётся внутренне; передайте объект с массивами files и directories или опустите его, чтобы просканировать директорию.",
|
|
4
13
|
"INVALID_CONFIG_DIR_MISSING": "Ошибка конфигурации: параметр 'dir' обязателен. Укажите путь к директории для загрузки API.",
|
|
14
|
+
"HINT_INVALID_CONFIG_DIR_MISSING": "Необходимо указать путь к директории, но он не был передан.",
|
|
5
15
|
"INVALID_CONFIG_BROWSER_REQUIRES_MANIFEST": "Ошибка конфигурации: 'manifest' обязателен, когда env равно 'browser'. Предоставьте заранее сгенерированный объект манифеста с массивами 'files' и 'directories'.",
|
|
6
16
|
"INVALID_CONFIG_BROWSER_MANIFEST_INVALID": "Ошибка конфигурации: 'manifest' должен быть простым объектом с массивами 'files' и 'directories'. Получено: {received}",
|
|
7
17
|
"INVALID_CONFIG_BROWSER_RESOLVE_SPECIFIER_INVALID": "Ошибка конфигурации: 'resolveModuleSpecifier' должен быть функцией, когда env равно 'browser'. Получено: {received}",
|
|
8
18
|
"INVALID_CONFIG_DIR_INVALID": "Ошибка конфигурации: 'dir' должен быть непустой строкой-путем. Получено: {dir}",
|
|
19
|
+
"HINT_INVALID_CONFIG_DIR_INVALID": "Убедитесь, что путь к директории является корректной строкой и указывает на существующую директорию.",
|
|
9
20
|
"INVALID_CONFIG_MODE_INVALID": "Ошибка конфигурации: 'mode' должен быть либо 'eager', либо 'lazy'. Получено: {value}",
|
|
21
|
+
"HINT_INVALID_CONFIG_MODE_INVALID": "Режим должен быть 'eager' или 'lazy'.",
|
|
10
22
|
"INVALID_CONFIG_NOT_LOADED": "Невозможно выполнить операцию '{operation}' - экземпляр не загружен. Сначала вызовите load().",
|
|
23
|
+
"HINT_INVALID_CONFIG_NOT_LOADED": "Экземпляр должен быть загружен перед выполнением операции — вызовите load().",
|
|
11
24
|
"INVALID_CONFIG_LAZY_MATERIALIZATION_FAILED": "Не удалось материализовать lazy-прокси для '{apiPath}'. Проверьте корректность модуля.",
|
|
12
25
|
"INVALID_CONFIG_NOT_A_FUNCTION": "Невозможно вызвать '{apiPath}' — не функция (получено {actualType}). Проверьте экспорт модуля.",
|
|
13
26
|
"INVALID_CONFIG_API_PATH_INVALID": "Неверный путь API '{apiPath}': {reason}. Пути должны быть непустыми строками в точечной нотации и не конфликтовать с зарезервированными именами. Сегмент {index}: '{segment}'.",
|
|
27
|
+
"HINT_INVALID_CONFIG_API_PATH_INVALID": "Убедитесь, что путь API — корректная точечная нотация без пустых сегментов и зарезервированных имён.",
|
|
14
28
|
"INVALID_CONFIG_FORCE_OVERWRITE_REQUIRES_MODULE_ID": "Ошибка конфигурации: forceOverwrite/allowOverwrite требует moduleID. Укажите уникальный moduleID для перезаписи пути API '{apiPath}'.",
|
|
29
|
+
"HINT_INVALID_CONFIG_FORCE_OVERWRITE_REQUIRES_MODULE_ID": "При использовании forceOverwrite/allowOverwrite необходим уникальный moduleID для отслеживания владельца.",
|
|
15
30
|
"INVALID_METADATA_TARGET": "Неверная цель метаданных: ожидалось {expected}, получено {target}. Операции с метаданными требуют функцию или объект.",
|
|
31
|
+
"HINT_INVALID_METADATA_TARGET": "Цель должна быть функцией или объектом, загруженным через Slothlet. Передавайте реальную ссылку.",
|
|
16
32
|
"METADATA_NO_MODULE_ID": "Невозможно установить пользовательские метаданные: moduleID не найден. Убедитесь, что цель загружена через Slothlet.",
|
|
33
|
+
"HINT_METADATA_NO_MODULE_ID": "Убедитесь, что функция/объект загружены через Slothlet; только такие объекты имеют метаданные.",
|
|
17
34
|
"METADATA_LIFECYCLE_BYPASS": "tagSystemMetadata() должен вызываться через систему жизненного цикла. Используйте lifecycle.emit('impl:created') или lifecycle.emit('impl:changed').",
|
|
35
|
+
"HINT_METADATA_LIFECYCLE_BYPASS": "Не вызывайте tagSystemMetadata() напрямую; триггерите события lifecycle для корректного вызова.",
|
|
18
36
|
"INVALID_METADATA_KEY": "Неверный ключ метаданных: ожидалось {expected}, получено {type} для ключа '{key}'.",
|
|
37
|
+
"HINT_INVALID_METADATA_KEY": "Ключи метаданных должны быть строками, массивами строк или объектами с массивами; проверьте формат.",
|
|
19
38
|
"WARNING_METADATA_MISMATCH": "Предупреждение: путь файла метаданных для '{apiPath}' не совпадает. Stack: '{stackFile}', metadata: '{metadataFile}'. Это может указывать на hot-reload или вмешательство.",
|
|
39
|
+
"HINT_WARNING_METADATA_MISMATCH": "Предупреждение о несоответствии метаданных — возможно из-за hot-reload или вмешательства.",
|
|
20
40
|
"COLLISION_ERROR": "Ошибка конфликта на '{key}' (контекст: {collisionContext}, режим: {collisionMode}). Установите режим 'merge', 'replace', 'warn' или 'skip'.",
|
|
41
|
+
"HINT_COLLISION_ERROR": "Режим столкновения 'error' предотвращает перезапись; используйте 'merge'/'replace'/'warn'/'skip' по необходимости.",
|
|
21
42
|
"COLLISION_DEFAULT_EXPORT_ERROR": "Обнаружен конфликт: свойство '{key}' уже существует в default export по пути '{apiPath}'. Режим — 'error'.",
|
|
43
|
+
"HINT_COLLISION_DEFAULT_EXPORT_ERROR": "Именованный экспорт конфликтует со свойством default export. Измените режим или переименуйте экспорт.",
|
|
22
44
|
"INVALID_ARGUMENT": "Неверный аргумент '{argument}': ожидалось {expected}, получено {received}.",
|
|
45
|
+
"HINT_INVALID_ARGUMENT": "Путь должен быть строкой в точечной нотации, например 'math.add'.",
|
|
23
46
|
"RUNTIME_NO_ACTIVE_CONTEXT": "Активный контекст не найден. Операция должна выполняться внутри Slothlet API-функции.",
|
|
47
|
+
"HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() должен вызываться внутри Slothlet API-функции.",
|
|
24
48
|
"INVALID_CONFIG_MUTATIONS_DISABLED": "Невозможно выполнить '{operation}' — мутации отключены. Установите allowMutation: true для разрешения изменений API (add/remove/reload).",
|
|
49
|
+
"HINT_INVALID_CONFIG_MUTATIONS_DISABLED": "Операции мутации требуют allowMutation: true; используйте diagnostics: true для тестирования без реальных мутаций.",
|
|
25
50
|
"CACHE_MODULEID_MISMATCH": "Несоответствие moduleID в кеше: ожидался '{cacheKey}', но запись имеет '{entryModuleID}'. Это внутренняя несогласованность кеша.",
|
|
51
|
+
"HINT_CACHE_MODULEID_MISMATCH": "Внутренняя ошибка: повреждение кеша. Пожалуйста, сообщите с шагами воспроизведения.",
|
|
26
52
|
"CACHE_NOT_FOUND": "Запись кеша не найдена для moduleID '{moduleID}' при операции '{operation}'. Модуль может быть не загружен или кеш очищен.",
|
|
53
|
+
"HINT_CACHE_NOT_FOUND": "Убедитесь, что модуль загружен перед перезагрузкой/восстановлением кеша; проверьте moduleID.",
|
|
27
54
|
"CACHE_MANAGER_NOT_AVAILABLE": "Менеджер кеша недоступен. Нельзя выполнить '{operation}'. Убедитесь, что менеджер инициализирован.",
|
|
55
|
+
"HINT_CACHE_MANAGER_NOT_AVAILABLE": "Менеджер кеша должен инициализироваться автоматически. Если он отсутствует — это внутренняя проблема.",
|
|
28
56
|
"MODULE_LOAD_FAILED": "Не удалось загрузить модуль '{modulePath}' (ID: {moduleID}): {error}",
|
|
57
|
+
"HINT_MODULE_LOAD_FAILED": "Проверьте файл модуля на ошибки синтаксиса и экспорты.",
|
|
29
58
|
"MODULE_NOT_FOUND": "Модуль не найден: {modulePath}. {hint}",
|
|
59
|
+
"HINT_MODULE_NOT_FOUND": "Убедитесь, что модуль существует и путь указан верно. Проверьте опечатки в import-пути.",
|
|
30
60
|
"MODULE_IMPORT_FAILED": "Не удалось импортировать модуль '{modulePath}': {error}. Проверьте, существует ли файл и корректен ли синтаксис.",
|
|
61
|
+
"HINT_MODULE_IMPORT_FAILED": "Проверьте существование файла и корректность импорта. Проверьте зависимости.",
|
|
31
62
|
"CONTEXT_ALREADY_EXISTS": "Контекст для экземпляра '{instanceID}' уже существует. Невозможно инициализировать дважды.",
|
|
63
|
+
"HINT_CONTEXT_ALREADY_EXISTS": "Контекст уже существует. Проверьте, не инициализируется ли один и тот же экземпляр дважды.",
|
|
32
64
|
"CONTEXT_NOT_FOUND": "Контекст для экземпляра '{instanceID}' не найден. Экземпляр мог быть завершён. Доступные экземпляры: {availableInstances}",
|
|
65
|
+
"HINT_CONTEXT_NOT_FOUND": "Убедитесь, что Slothlet-экземпляр инициализирован и контекст создан, прежде чем обращаться к нему.",
|
|
33
66
|
"CONTEXT_EXECUTION_FAILED": "Не удалось выполнить в контексте для экземпляра '{instanceID}': {error}",
|
|
67
|
+
"HINT_CONTEXT_EXECUTION_FAILED": "Произошла ошибка при выполнении функции — проверьте детали ошибки.",
|
|
34
68
|
"NO_ACTIVE_CONTEXT_LIVE": "Нет активного контекста — в режиме живых привязок нет активного экземпляра.",
|
|
69
|
+
"HINT_NO_ACTIVE_CONTEXT_LIVE": "Активный контекст не найден. Вызывайте функцию внутри live-контекста Slothlet.",
|
|
35
70
|
"NO_ACTIVE_CONTEXT_ASYNC": "Нет активного контекста — функцию нужно вызывать внутри slothlet API-контекста.",
|
|
71
|
+
"HINT_NO_ACTIVE_CONTEXT_ASYNC": "Активный контекст не найден. Вызывайте функцию внутри асинхронного slothlet-контекста.",
|
|
36
72
|
"RUNTIME_NO_ACTIVE_CONTEXT_SELF": "Нет активного контекста — доступ к 'self' невозможен. Вызывайте внутри Slothlet API-функции.",
|
|
73
|
+
"HINT_RUNTIME_NO_ACTIVE_CONTEXT_SELF": "Нельзя использовать 'self' вне Slothlet API-функции.",
|
|
37
74
|
"RUNTIME_NO_ACTIVE_CONTEXT_CONTEXT": "Нет активного контекста — 'context' можно менять только внутри Slothlet API-вызовов.",
|
|
75
|
+
"HINT_RUNTIME_NO_ACTIVE_CONTEXT_CONTEXT": "Нельзя менять 'context' вне Slothlet API-вызовов.",
|
|
38
76
|
"OWNERSHIP_INVALID_MODULE_ID": "Недействительная регистрация владения: moduleID '{moduleID}' недействителен.",
|
|
77
|
+
"HINT_OWNERSHIP_INVALID_MODULE_ID": "Идентификатор модуля недействителен. Убедитесь, что модуль загружен корректно и ID верен.",
|
|
39
78
|
"OWNERSHIP_INVALID_API_PATH": "Недействительная регистрация владения: apiPath '{apiPath}' недействителен.",
|
|
79
|
+
"HINT_OWNERSHIP_INVALID_API_PATH": "Неверный формат пути API. Убедитесь в корректности формата.",
|
|
40
80
|
"OWNERSHIP_CONFLICT": "Конфликт владения: путь '{apiPath}' уже принадлежит модулю '{existingModuleId}', нельзя назначить '{newModuleId}'. Используйте forceOverwrite: true или предварительно вызовите removeApi.",
|
|
81
|
+
"HINT_OWNERSHIP_CONFLICT": "Путь уже принадлежит другому модулю. Варианты: forceOverwrite: true, collision: 'merge'/'replace', или предварительно вызвать api.slothlet.api.remove().",
|
|
41
82
|
"LOOSE_SET_NOT_OWNED": "Модуль {callerApiPath} не может писать в {apiPath}. Модуль может писать только в пределах своего apiPath; используйте api.slothlet.api.add() для регистрации в другом пути.",
|
|
83
|
+
"HINT_LOOSE_SET_NOT_OWNED": "Модуль с apiPath \"P\" может писать только в \"P.*\". Чтобы зарегистрировать код в другом пространстве имён, вызовите api.slothlet.api.add().",
|
|
42
84
|
"LOOSE_SET_RESERVED_KEY": "Невозможно присвоить значение зарезервированному сегменту ключа '{segment}' в apiPath '{apiPath}'. Имена вроде __proto__, prototype и constructor заблокированы, чтобы предотвратить загрязнение прототипа дерева API.",
|
|
85
|
+
"HINT_LOOSE_SET_RESERVED_KEY": "Сегменты __proto__, prototype и constructor нельзя использовать как имена apiPath, поскольку запись в них изменит цепочку прототипов JavaScript. Выберите другое имя.",
|
|
43
86
|
"INVALID_DIRECTORY": "Неверная директория '{dir}': {error}. Убедитесь, что директория существует и доступна.",
|
|
87
|
+
"HINT_INVALID_DIRECTORY": "Проверьте путь к директории — он должен быть корректным и существовать.",
|
|
44
88
|
"WARN_DIRECTORY_EMPTY": "Директория '{dir}' (разрешено: '{resolvedPath}') пуста или не содержит загружаемых модулей (.mjs, .cjs, .js). Это допустимо для add-api, но может указывать на неверный путь.",
|
|
89
|
+
"HINT_WARN_DIRECTORY_EMPTY": "Проверьте путь; пустые директории допустимы для add-api workflows.",
|
|
90
|
+
"WARN_SYNTHETIC_ROOT_EMPTY": "Синтетическое добавление по пути API '{apiPath}' не дало ни одного листа; ничего не было смонтировано.",
|
|
91
|
+
"HINT_WARN_SYNTHETIC_ROOT_EMPTY": "Укажите хотя бы один экспорт — именованную функцию по умолчанию или именованные экспорты — чтобы синтетическому добавлению было что монтировать.",
|
|
92
|
+
"WARN_SYNTHETIC_ROOT_UNNAMED": "Синтетическое добавление в корне API содержит анонимный экспорт по умолчанию; его нельзя привязать к корню, и он был пропущен.",
|
|
93
|
+
"HINT_WARN_SYNTHETIC_ROOT_UNNAMED": "Назовите функцию по умолчанию (её имя становится корневым ключом), укажите именованные экспорты или смонтируйте лист по именованному apiPath.",
|
|
94
|
+
"WARN_SYNTHETIC_ROOT_COLLISION": "Синтетическое добавление в корне API переназначает свой экспорт по умолчанию на '{name}', но именованный экспорт уже использует '{name}'; приоритет имеет именованный экспорт.",
|
|
95
|
+
"HINT_WARN_SYNTHETIC_ROOT_COLLISION": "Переименуйте функцию по умолчанию или конфликтующий именованный экспорт, чтобы каждый занимал отдельный корневой ключ.",
|
|
45
96
|
"INTERNAL_HOOK_STATE_CORRUPT": "[ВНУТРИ] Состояние HookManager повреждено: hook \"{hookId}\" ({type}/{subset}/{pattern}) — {detail}. Пожалуйста, сообщите.",
|
|
97
|
+
"HINT_INTERNAL_HOOK_STATE_CORRUPT": "Состояние HookManager неконсистентно — отправьте баг-репорт с примером вызовов hook.on()/hook.remove().",
|
|
46
98
|
"WARNING_RESERVED_PROPERTY_CONFLICT": "Пользовательский API конфликтует с зарезервированными свойствами: {properties}",
|
|
99
|
+
"HINT_WARNING_RESERVED_PROPERTY_CONFLICT": "Имя 'slothlet' зарезервировано — переименуйте модуль/свойство.",
|
|
47
100
|
"WARNING_LANGUAGE_LOAD_FAILED": "Не удалось загрузить язык '{lang}', используется английский по умолчанию.",
|
|
48
101
|
"WARNING_LANGUAGE_UNAVAILABLE": "Язык '{lang}' недоступен, используется английский.",
|
|
49
102
|
"WARNING_OWNERSHIP_CONFLICT": "Конфликт владения на '{apiPath}': уже принадлежит '{existingModuleId}', регистрировать '{newModuleId}' невозможно.",
|
|
103
|
+
"HINT_WARNING_OWNERSHIP_CONFLICT": "Путь принадлежит другому модулю — используйте forceOverwrite: true или вызовите api.slothlet.api.remove().",
|
|
50
104
|
"WARNING_HOT_RELOAD_PATH_COLLISION": "Конфликт пути при hot-reload на {apiPath} — сохраняется существующее значение (режим: warn).",
|
|
105
|
+
"HINT_WARNING_HOT_RELOAD_PATH_COLLISION": "Конфликт при hot-reload — существующее значение сохранено. Для принудительной замены используйте collision mode 'replace'.",
|
|
51
106
|
"WARNING_HOT_RELOAD_MERGE_PRIMITIVES": "Нельзя объединить примитивы на {apiPath} — сохранено существующее значение. Для перезаписи используйте collision mode 'replace' или убедитесь, что оба значения являются объектами.",
|
|
107
|
+
"HINT_WARNING_HOT_RELOAD_MERGE_PRIMITIVES": "Нельзя объединить примитивы — используйте 'replace' для перезаписи или оставьте 'warn' для сохранения существующего.",
|
|
52
108
|
"WARNING_COLLISION_FILE_FOLDER_MERGE": "Обнаружен конфликт на '{key}' — файлы и папки объединяются (режим: 'warn').",
|
|
53
109
|
"HINT_WARNING_COLLISION_FILE_FOLDER_MERGE": "Файл и папка имеют одинаковое имя '{key}'. Их экспорты объединяются. Переименуйте один из них или установите collisionMode: 'replace'/'error'.",
|
|
54
110
|
"WARNING_COLLISION_DEFAULT_EXPORT_OVERWRITE": "Конфликт: свойство '{key}' уже существует в default export функции на {apiPath}. Именованный экспорт перезапишет его.",
|
|
55
111
|
"HINT_WARNING_COLLISION_DEFAULT_EXPORT_OVERWRITE": "Именованный экспорт '{key}' в '{apiPath}' перезаписывает существующее свойство default export. Переименуйте экспорт или используйте другой apiPath.",
|
|
56
112
|
"WARNING_COLLISION_TRIGGER_MATERIALIZE_ERROR": "Ранняя материализация для lazy-папки '{apiPath}' не удалась. Замена при конфликте может быть неполной.",
|
|
57
|
-
"HINT_WARNING_COLLISION_TRIGGER_MATERIALIZE_ERROR": "Это некритическая
|
|
113
|
+
"HINT_WARNING_COLLISION_TRIGGER_MATERIALIZE_ERROR": "Это некритическая фоновая ошибка при обработке конфликтов. Lazy-папка по этому пути не смогла материализоваться. Проверьте модуль по указанному пути.",
|
|
58
114
|
"WARNING_LIFECYCLE_HANDLER_ERROR": "Обработчик lifecycle-события выбросил ошибку для события '{event}'. Другие обработчики продолжили выполнение.",
|
|
59
|
-
"HINT_WARNING_LIFECYCLE_HANDLER_ERROR": "Один из обработчиков lifecycle для события '{event}' выдал ошибку. Проверьте lifecycle.on('{event}', ...) на наличие багов. Другие обработчики
|
|
115
|
+
"HINT_WARNING_LIFECYCLE_HANDLER_ERROR": "Один из обработчиков lifecycle для события '{event}' выдал ошибку. Проверьте lifecycle.on('{event}', ...) на наличие багов. Другие обработчики в том же событии не затронуты.",
|
|
60
116
|
"WARNING_MULTIPLE_ROOT_CONTRIBUTORS": "Обнаружено несколько default экспортов корневого уровня: {rootContributors}. Каждый был помещён в namespace по имени файла (например api.{firstContributor}()). Рассмотрите вариант объединения.",
|
|
117
|
+
"HINT_WARNING_MULTIPLE_ROOT_CONTRIBUTORS": "Несколько файлов экспортируют default функции на корневом уровне — рассмотрите консолидацию или перенос в подкаталоги.",
|
|
61
118
|
"WARN_SUPPRESS_FIX_ACTIVE": "Исправление правила '{rule}' подавлено через 'suppressFixes'. Подробности см. по адресу {url}. Это временное переопределение, которое будет удалено в v4. Исправленное поведение '{rule}' будет применено постоянно.",
|
|
62
119
|
"HINT_WARN_SUPPRESS_FIX_ACTIVE": "Удалите '{rule}' из 'suppressFixes' и обновите структуру директорий API для поддержки исправленного поведения перед обновлением до v4.",
|
|
63
120
|
"V3_CONFIG_DEPRECATED": "Параметр конфигурации '{option}' устарел и будет удалён в v4. Используйте вместо него '{replacement}'.",
|
|
121
|
+
"HINT_V3_CONFIG_DEPRECATED": "Этот параметр конфигурации был переименован для ясности. Обновите код на новое имя параметра для совместимости с v4.",
|
|
64
122
|
"V2_CONFIG_UNSUPPORTED": "Опция конфигурации '{option}' из v2 не поддерживается в v3. {hint} Используйте '{replacement}'.",
|
|
123
|
+
"HINT_V2_CONFIG_UNSUPPORTED": "Опция v2 не поддерживается в v3 — обновите конфигурацию.",
|
|
65
124
|
"DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] Обнаружен root-contributor: {functionName}",
|
|
66
125
|
"DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] Применён шаблон root-contributor — API-функция с {properties} дополнительными свойствами",
|
|
67
126
|
"DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] Обработка каталога: {categoryName} (глубина {currentDepth})",
|
|
@@ -230,72 +289,15 @@
|
|
|
230
289
|
"DEBUG_MODE_LAZY_WRAPPER_MATERIALIZED": "Lazy-обёртка материализована",
|
|
231
290
|
"DEBUG_MODE_ALL_LAZY_WRAPPERS_MATERIALIZED": "Все lazy-обёртки материализованы",
|
|
232
291
|
"HINT_REFERENCE_REMOVED": "Экспорт 'reference' удалён из '@cldmv/slothlet/runtime'. Доступ через 'self.*' (например, 'self.myRefProperty').",
|
|
233
|
-
"HINT_MODULE_NOT_FOUND": "Убедитесь, что модуль существует и путь указан верно. Проверьте опечатки в import-пути.",
|
|
234
292
|
"HINT_SYNTAX_ERROR": "Проверьте синтаксис файла модуля. Частые ошибки: пропущенные скобки, незакрытые строки или неверный JavaScript.",
|
|
235
|
-
"HINT_CONTEXT_NOT_FOUND": "Убедитесь, что Slothlet-экземпляр инициализирован и контекст создан, прежде чем обращаться к нему.",
|
|
236
|
-
"HINT_CONTEXT_ALREADY_EXISTS": "Контекст уже существует. Проверьте, не инициализируется ли один и тот же экземпляр дважды.",
|
|
237
|
-
"HINT_CONTEXT_EXECUTION_FAILED": "Произошла ошибка при выполнении функции — проверьте детали ошибки.",
|
|
238
|
-
"HINT_NO_ACTIVE_CONTEXT": "Активный контекст не найден. Вызывайте функцию внутри slothlet-контекста (async или live).",
|
|
239
|
-
"HINT_NO_ACTIVE_CONTEXT_ASYNC": "Активный контекст не найден. Вызывайте функцию внутри асинхронного slothlet-контекста.",
|
|
240
|
-
"HINT_NO_ACTIVE_CONTEXT_LIVE": "Активный контекст не найден. Вызывайте функцию внутри live-контекста Slothlet.",
|
|
241
|
-
"HINT_OWNERSHIP_INVALID_MODULE_ID": "Идентификатор модуля недействителен. Убедитесь, что модуль загружен корректно и ID верен.",
|
|
242
|
-
"HINT_OWNERSHIP_INVALID_API_PATH": "Неверный формат пути API. Убедитесь в корректности формата.",
|
|
243
|
-
"HINT_OWNERSHIP_CONFLICT": "Путь уже принадлежит другому модулю. Варианты: forceOverwrite: true, collision: 'merge'/'replace', или предварительно вызвать api.slothlet.api.remove().",
|
|
244
|
-
"HINT_INVALID_CONFIG": "Проверьте значение конфигурации и убедитесь, что оно соответствует ожидаемому формату.",
|
|
245
|
-
"HINT_INVALID_CONFIG_DIR_INVALID": "Убедитесь, что путь к директоии является корректной строкой и указывает на существующую директорию.",
|
|
246
|
-
"HINT_INVALID_CONFIG_FORCE_OVERWRITE_REQUIRES_MODULE_ID": "При использовании forceOverwrite/allowOverwrite необходим уникальный moduleID для отслеживания владельца.",
|
|
247
|
-
"HINT_COLLISION_ERROR": "Режим столкновения 'error' предотвращает перезапись; используйте 'merge'/'replace'/'warn'/'skip' по необходимости.",
|
|
248
|
-
"HINT_COLLISION_DEFAULT_EXPORT_ERROR": "Именованный экспорт конфликтует со свойством default export. Измените режим или переименуйте экспорт.",
|
|
249
|
-
"HINT_INVALID_ARGUMENT": "Путь должен быть строкой в точечной нотации, например 'math.add'.",
|
|
250
|
-
"HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() должен вызываться внутри Slothlet API-функции.",
|
|
251
|
-
"HINT_INVALID_CONFIG_MODE_INVALID": "Режим должен быть 'eager' или 'lazy'.",
|
|
252
|
-
"HINT_INVALID_CONFIG_MODE_UNKNOWN": "Неизвестный режим. Используйте 'eager' или 'lazy'.",
|
|
253
|
-
"HINT_INVALID_CONFIG_DIR_MISSING": "Необходимо указать путь к директории, но он не был передан.",
|
|
254
|
-
"HINT_INVALID_CONFIG_API_PATH_INVALID": "Убедитесь, что путь API — корректная точечная нотация без пустых сегментов и зарезервированных имён.",
|
|
255
|
-
"HINT_INVALID_CONFIG_MUTATIONS_DISABLED": "Операции мутации требуют allowMutation: true; используйте diagnostics: true для тестирования без реальных мутаций.",
|
|
256
|
-
"HINT_CACHE_MODULEID_MISMATCH": "Внутренняя ошибка: повреждение кеша. Пожалуйста, сообщите с шагами воспроизведения.",
|
|
257
|
-
"HINT_CACHE_NOT_FOUND": "Убедитесь, что модуль загружен перед перезагрузкой/восстановлением кеша; проверьте moduleID.",
|
|
258
|
-
"HINT_CACHE_MANAGER_NOT_AVAILABLE": "Менеджер кеша должен инициализироваться автоматически. Если он отсутствует — это внутренняя проблема.",
|
|
259
|
-
"HINT_INVALID_METADATA_TARGET": "Цель должна быть функцией или объектом, загруженным через Slothlet. Передавайте реальную ссылку.",
|
|
260
|
-
"HINT_METADATA_NO_MODULE_ID": "Убедитесь, что функция/объект загружены через Slothlet; только такие объекты имеют метаданные.",
|
|
261
|
-
"HINT_METADATA_LIFECYCLE_BYPASS": "Не вызывайте tagSystemMetadata() напрямую; триггерите события lifecycle для корректного вызова.",
|
|
262
|
-
"HINT_INVALID_METADATA_KEY": "Ключи метаданных должны быть строками, массивами строк или объектами с массивами; проверьте формат.",
|
|
263
|
-
"HINT_WARNING_METADATA_MISMATCH": "Предупреждение о несоответствии метаданных — возможно из-за hot-reload или вмешательства.",
|
|
264
|
-
"HINT_WARNING_INIT_COMPONENT_SKIPPED": "Компоненты, которые не удалось импортировать, будут пропущены. Для опциональных компонентов это нормально.",
|
|
265
|
-
"HINT_WARNING_MULTIPLE_ROOT_CONTRIBUTORS": "Несколько файлов экспортируют default функции на корневом уровне — рассмотрите консолидацию или перенос в подкаталоги.",
|
|
266
|
-
"HINT_WARNING_HOT_RELOAD_PATH_COLLISION": "Конфликт при hot-reload — существующее значение сохранено. Для принудительной замены используйте collision mode 'replace'.",
|
|
267
|
-
"HINT_WARNING_HOT_RELOAD_MERGE_PRIMITIVES": "Нельзя объединить примитивы — используйте 'replace' для перезаписи или оставьте 'warn' для сохранения существующего.",
|
|
268
|
-
"HINT_WARNING_OWNERSHIP_CONFLICT": "Путь принадлежит другому модулю — используйте forceOverwrite: true или вызовите api.slothlet.api.remove().",
|
|
269
|
-
"HINT_V2_CONFIG_UNSUPPORTED": "Опция v2 не поддерживается в v3 — обновите конфигурацию.",
|
|
270
|
-
"HINT_V3_CONFIG_DEPRECATED": "Этот параметр конфигурации был переименован для ясности. Обновите код на новое имя параметра для совместимости с v4.",
|
|
271
|
-
"HINT_MODULE_LOAD_FAILED": "Проверьте файл модуля на ошибки синтаксиса и экспорты.",
|
|
272
|
-
"HINT_MODULE_IMPORT_FAILED": "Проверьте существование файла и корректность импорта. Проверьте зависимости.",
|
|
273
|
-
"HINT_MODULE_NO_EXPORTS": "Модуль должен экспортировать хотя бы одну функцию или объект.",
|
|
274
|
-
"HINT_INVALID_DIRECTORY": "Проверьте путь к директории — он должен быть корректным и существовать.",
|
|
275
|
-
"HINT_WARN_DIRECTORY_EMPTY": "Проверьте путь; пустые директории допустимы для add-api workflows.",
|
|
276
|
-
"HINT_INVALID_CONFIG_LAZY_NOT_READY": "В lazy-режиме обращайтесь к свойствам для триггера материализации перед вызовом функций.",
|
|
277
|
-
"HINT_INTERNAL_INVALID_STATE": "Внутренняя ошибка состояния — пожалуйста, сообщите с деталями.",
|
|
278
|
-
"HINT_INTERNAL_HOOK_STATE_CORRUPT": "Состояние HookManager неконсистентно — отправьте баг-репорт с примером вызовов hook.on()/hook.remove().",
|
|
279
|
-
"HINT_INVALID_CONFIG_LAZY_ASYNC_REQUIRED": "Lazy-режим требует асинхронности — используйте eager или асинхронный паттерн.",
|
|
280
|
-
"HINT_RUNTIME_NO_ACTIVE_CONTEXT_SELF": "Нельзя использовать 'self' вне Slothlet API-функции.",
|
|
281
|
-
"HINT_RUNTIME_NO_ACTIVE_CONTEXT_CONTEXT": "Нельзя менять 'context' вне Slothlet API-вызовов.",
|
|
282
|
-
"HINT_LOOSE_SET_NOT_OWNED": "Модуль с apiPath \"P\" может писать только в \"P.*\". Чтобы зарегистрировать код в другом пространстве имён, вызовите api.slothlet.api.add().",
|
|
283
|
-
"HINT_LOOSE_SET_RESERVED_KEY": "Сегменты __proto__, prototype и constructor нельзя использовать как имена apiPath, поскольку запись в них изменит цепочку прототипов JavaScript. Выберите другое имя.",
|
|
284
|
-
"HINT_INVALID_CONFIG_NOT_LOADED": "Экземпляр должен быть загружен перед выполнением операции — вызовите load().",
|
|
285
|
-
"HINT_INVALID_CONFIG_RELOAD_NOT_IMPL": "Функция перезагрузки ещё не реализована.",
|
|
286
|
-
"HINT_WARNING_RESERVED_PROPERTY_CONFLICT": "Имя 'slothlet' зарезервировано — переименуйте модуль/свойство.",
|
|
287
|
-
"HINT_DEPRECATED_CONFIG_OPTION": "Опция конфигурации устарела — обновите на рекомендуемую.",
|
|
288
|
-
"HINT_ERROR_RUNTIME_IMPORT_FAILED": "Не удалось загрузить runtime-модуль — возможно, экспорт @cldmv/slothlet/runtime недоступен.",
|
|
289
|
-
"INVALID_HOOK_TYPE": "Неверный тип hook \"{type}\". Должен быть одним из: {validTypes}.",
|
|
290
293
|
"INVALID_HOOK_HANDLER": "Обработчик hook должен быть функцией. Получен: {receivedType}.",
|
|
291
|
-
"DUPLICATE_HOOK_ID": "Hook с ID \"{id}\" уже существует. Используйте уникальную ID или опустите опцию id.",
|
|
292
|
-
"INVALID_HOOK_SUBSET": "Неверный subset hook \"{subset}\". Должен быть \"before\", \"primary\" или \"after\".",
|
|
293
|
-
"INVALID_TYPE_PATTERN": "Неверный паттерн типа \"{typePattern}\". {expected}",
|
|
294
|
-
"HINT_INVALID_HOOK_TYPE": "Используйте допустимые типы hook: before, after, always, error.",
|
|
295
294
|
"HINT_INVALID_HOOK_HANDLER": "Передайте функцию как обработчик hook, не строку.",
|
|
295
|
+
"DUPLICATE_HOOK_ID": "Hook с ID \"{id}\" уже существует. Используйте уникальную ID или опустите опцию id.",
|
|
296
296
|
"HINT_DUPLICATE_HOOK_ID": "Используйте другую ID или удалите опцию id, чтобы сгенерировать автоматически.",
|
|
297
|
+
"INVALID_HOOK_SUBSET": "Неверный subset hook \"{subset}\". Должен быть \"before\", \"primary\" или \"after\".",
|
|
297
298
|
"HINT_INVALID_HOOK_SUBSET": "Subsets управляют порядком выполнения: 'before', 'primary', 'after'.",
|
|
298
|
-
"
|
|
299
|
+
"INVALID_TYPE_PATTERN": "Неверный паттерн типа \"{typePattern}\". {expected}",
|
|
300
|
+
"HINT_INVALID_TYPE_PATTERN": "Шаблоны хуков используют форму 'pattern:type', например 'math.*:before' или '**:error'. Прежняя форма 'type:pattern' всё ещё работает, но устарела.",
|
|
299
301
|
"HOOK_BEFORE_RETURNED_PROMISE": "Before-hook '{id}' для пути '{path}' вернул Promise. Before-hooks должны быть синхронными.",
|
|
300
302
|
"HINT_HOOK_BEFORE_RETURNED_PROMISE": "Before-hooks выполняются синхронно до вызова API. Уберите async/await или сделайте hook 'after'.",
|
|
301
303
|
"HOOK_BRACE_EXPANSION_MAX_DEPTH": "Развёртывание скобок в паттерне hook превысило максимальную глубину {maxDepth}.",
|
|
@@ -383,11 +385,11 @@
|
|
|
383
385
|
"INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher должен быть строкой (ключ метаданных) или функцией; получено: {received}",
|
|
384
386
|
"INVALID_CONFIG_VERSION_TAG": "versionConfig.version должен быть непустой строкой; получено: {received}",
|
|
385
387
|
"VERSION_NOT_FOUND": "Версия '{version}' не зарегистрирована по пути '{apiPath}'.",
|
|
388
|
+
"HINT_VERSION_NOT_FOUND": "Вызовите api.slothlet.versioning.list('{apiPath}'), чтобы увидеть, какие теги версий зарегистрированы по этому пути.",
|
|
386
389
|
"VERSION_NO_DEFAULT": "Для пути '{apiPath}' не настроена версия по умолчанию, и версия не может быть определена из метаданных вызывающего.",
|
|
387
390
|
"VERSION_DISPATCH_NOT_CALLABLE": "Версионированный диспетчер по пути '{apiPath}' является пространством имён, а не вызываемой функцией.",
|
|
388
391
|
"VERSION_REGISTER_DUPLICATE": "Версия '{version}' уже зарегистрирована по пути '{apiPath}'. Используйте collisionMode 'replace' для замены.",
|
|
389
392
|
"HINT_VERSION_REGISTER_DUPLICATE": "Сначала вызовите api.slothlet.versioning.unregister('{apiPath}', '{version}') или зарегистрируйте с другим тегом версии.",
|
|
390
|
-
"HINT_VERSION_NOT_FOUND": "Вызовите api.slothlet.versioning.list('{apiPath}'), чтобы увидеть, какие теги версий зарегистрированы по этому пути.",
|
|
391
393
|
"VERSION_DISCRIMINATOR_INVALID_RETURN": "Функция versionDispatcher вернула '{returned}', что не является зарегистрированным тегом версии для пути '{apiPath}'.",
|
|
392
394
|
"DEBUG_VERSION_RESOLVED": "Версия определена: {version} для пути {apiPath} (вызывающий: {callerModule})",
|
|
393
395
|
"DEBUG_VERSION_DEFAULT_USED": "Нет совпадения дискриминатора для пути {apiPath}; используется версия по умолчанию {version}.",
|
|
@@ -417,7 +419,27 @@
|
|
|
417
419
|
"HINT_MODULE_MANIFEST_NOT_FOUND": "Модули плагинов должны поставляться с 'slothlet.module.json' в корне пакета (или файлом/ключом, указанным через переопределение `manifest`). Проверьте, что файл существует в пакете и локатор переопределения корректен.",
|
|
418
420
|
"MODULE_MANIFEST_INVALID": "Манифест модуля недействителен для пакета '{packageName}' в '{manifestPath}': {reason}.",
|
|
419
421
|
"HINT_MODULE_MANIFEST_INVALID": "Откройте манифест и убедитесь, что это валидный JSON и он соответствует схеме модуля slothlet (см. schemas/slothlet.module.schema.json). Обязательные поля: schemaVersion, mountPath, apiDir.",
|
|
420
|
-
"
|
|
422
|
+
"MODULE_MANIFEST_REASON_NOT_OBJECT": "манифест должен быть объектом JSON",
|
|
423
|
+
"MODULE_MANIFEST_REASON_MISSING_FIELD": "отсутствует обязательное поле '{field}'",
|
|
424
|
+
"MODULE_MANIFEST_REASON_FIELD_TYPE": "поле '{field}' должно быть {expected}",
|
|
425
|
+
"EXPECTED_NON_EMPTY_STRING": "непустой строкой",
|
|
426
|
+
"EXPECTED_STRING": "строкой",
|
|
427
|
+
"EXPECTED_FINITE_NUMBER": "конечным числом",
|
|
428
|
+
"EXPECTED_PLAIN_OBJECT": "простым объектом",
|
|
429
|
+
"EXPECTED_ARRAY_OF_RULE_OBJECTS": "массивом объектов правил",
|
|
430
|
+
"MODULE_MANIFEST_REASON_MOUNTPATH_SHAPE": "поле 'mountPath' должно быть непустой строкой или непустым массивом непустых строк",
|
|
431
|
+
"MODULE_MANIFEST_REASON_MOUNTPATH_ENTRIES": "все элементы массива поля 'mountPath' должны быть непустыми строками",
|
|
432
|
+
"MODULE_MANIFEST_REASON_DEPENDENCY_TYPE": "зависимость '{dependency}' должна быть строкой диапазона версий",
|
|
433
|
+
"MODULE_MANIFEST_REASON_PERMISSION_RULE": "permissions[{index}] должен быть объектом правила",
|
|
434
|
+
"MODULE_MANIFEST_REASON_PERMISSION_CALLER": "permissions[{index}].caller должен быть непустой строкой",
|
|
435
|
+
"MODULE_MANIFEST_REASON_PERMISSION_TARGET": "permissions[{index}].target должен быть непустой строкой",
|
|
436
|
+
"MODULE_MANIFEST_REASON_PERMISSION_EFFECT": "permissions[{index}].effect должен быть \"allow\" или \"deny\"",
|
|
437
|
+
"MODULE_MANIFEST_REASON_JSON_PARSE": "ошибка разбора JSON: {error}",
|
|
438
|
+
"GENERATE_MANIFEST_DIR_INVALID": "generateManifest: dir должен быть непустой строкой, получено {received}",
|
|
439
|
+
"GENERATE_MANIFEST_DIR_UNREADABLE": "generateManifest: не удаётся прочитать директорию \"{dir}\": {reason}",
|
|
440
|
+
"GENERATE_MANIFEST_NOT_DIRECTORY": "generateManifest: \"{dir}\" не является директорией",
|
|
441
|
+
"GENERATE_BROWSER_ASSETS_SLOTHLET_BASE_INVALID": "generateBrowserAssets: options.slothletBase должен быть строкой (путь, по которому @cldmv/slothlet подключается в браузере), получено {received}",
|
|
442
|
+
"MODULE_MANIFEST_UNKNOWN_FIELD": "Манифест модуля для пакета '{packageName}' в '{manifestPath}' содержит нераспознанное поле верхнего уровня '{field}'. Неизвестные поля отклоняются; используйте выделенный блок 'metadata' для определяемых разработчиком дополнений.",
|
|
421
443
|
"HINT_MODULE_MANIFEST_UNKNOWN_FIELD": "Если '{field}' — это опечатка, исправьте её. Если это намеренные метаданные разработчика, переместите их внутрь объекта 'metadata'.",
|
|
422
444
|
"MODULE_MANIFEST_NAME_MISMATCH": "Манифест модуля для пакета '{packageName}' объявляет имя '{manifestName}', которое не совпадает с именем в package.json '{packageName}'.",
|
|
423
445
|
"HINT_MODULE_MANIFEST_NAME_MISMATCH": "Поле 'name' в slothlet.module.json является необязательным, но должно совпадать с package.json при наличии. Либо удалите поле 'name' из манифеста, либо приведите его в соответствие с package.json.",
|
|
@@ -434,7 +456,11 @@
|
|
|
434
456
|
"MODULE_DUPLICATE_NAME_VERSION_MISMATCH": "Пакет модуля '{packageName}' версии '{version}' был найден по нескольким различным реальным путям: {paths}.",
|
|
435
457
|
"HINT_MODULE_DUPLICATE_NAME_VERSION_MISMATCH": "Это почти наверняка ошибка конфигурации — один и тот же пакет той же версии установлен в двух несвязанных местах. Выясните, какая установка является целевой, и удалите другую.",
|
|
436
458
|
"MODULE_MOUNT_COLLISION": "Пакет модуля '{packageName}' не может быть смонтирован в '{mountPath}': путь уже занят модулем '{existingModuleID}' и collisionMode имеет значение '{collisionMode}'.",
|
|
437
|
-
"HINT_MODULE_MOUNT_COLLISION": "Измените mountPath в манифесте, передайте `collisionMode: \"merge\"` в `addModule()` / `addModules()` для разрешения сосуществования или сначала вызовите `removeModule()` для существующего модуля."
|
|
459
|
+
"HINT_MODULE_MOUNT_COLLISION": "Измените mountPath в манифесте, передайте `collisionMode: \"merge\"` в `addModule()` / `addModules()` для разрешения сосуществования или сначала вызовите `removeModule()` для существующего модуля.",
|
|
460
|
+
"HOOK_TYPEPATTERN_PREFIX_DEPRECATED": "Форма регистрации хука '{given}' устарела и будет удалена в v4. Используйте вместо неё форму «путь сначала» '{suggested}' (например, 'math.*:before').",
|
|
461
|
+
"HINT_HOOK_TYPEPATTERN_PREFIX_DEPRECATED": "Переместите тип хука в конец в виде суффикса: перепишите селектор «тип сначала», например 'before:math.add', в форму «путь сначала» 'math.add:before'.",
|
|
462
|
+
"HOOK_UNPINNED_IGNORED": "lockCaller:false был проигнорирован для хука '{pattern}'; хуки привязываются к регистрирующему их модулю. Установите hook.pin:false (инициализация) или вызовите api.slothlet.hook.pin.disable(), чтобы разрешить непривязанные хуки.",
|
|
463
|
+
"HINT_HOOK_UNPINNED_IGNORED": "Хуки, зарегистрированные модулем, всегда привязываются к своему владельцу в целях безопасности. Чтобы разрешить непривязанные хуки, установите hook.pin:false в конфигурации slothlet или вызовите api.slothlet.hook.pin.disable() во время выполнения."
|
|
438
464
|
},
|
|
439
465
|
"metadata": {
|
|
440
466
|
"code": "ru-ru",
|