Этот документ был переведён с помощью ИИ. Для получения точной информации обратитесь к английской версии.
Когда плагин добавляет или расширяет возможности RunJS, рекомендуется регистрировать «сопоставление контекста / документацию ctx / примеры кода» через официальные точки расширения. Это гарантирует, что:
ctx.xxx.yyy.ctx и примеры.В этой главе представлены две точки расширения:
registerRunJSContextContribution(...)registerRunJSSnippet(...)registerRunJSContextContributionИспользуется для регистрации «вкладов» (contributions) RunJS. Типичные варианты использования:
RunJSContextRegistry (modelClass -> RunJSContext, включая scenes).RunJSDocMeta (описания/примеры/шаблоны автодополнения для API ctx) для FlowRunJSContext или пользовательского RunJSContext.setupRunJSContexts().setupRunJSContexts() уже завершен, поздние регистрации будут выполнены немедленно (повторный запуск setup не требуется).RunJSVersion.registerRunJSSnippetИспользуется для регистрации фрагментов кода (сниппетов) для RunJS, которые применяются для:
Рекомендуется использовать формат: plugin/<pluginName>/<topic>, например:
plugin/plugin-my/fooplugin/plugin-my/api-request-exampleИзбегайте конфликтов с пространствами имен ядра global/* или scene/*.
ref не перезаписываются (возвращается false без вызова ошибки).{ override: true }.RunJSDocMeta: Описания/шаблоны автодополнения (короткие, структурированные).scenes заполнено правильно, чтобы повысить релевантность дополнений и примеров.hidden(ctx)Некоторые API ctx сильно зависят от контекста (например, ctx.popup доступен только при открытом всплывающем окне или боковой панели). Если вы хотите скрыть эти недоступные API при автодополнении, вы можете определить hidden(ctx) для соответствующей записи в RunJSDocMeta:
true: скрывает текущий узел и его поддерево.string[]: скрывает определенные подпути под текущим узлом (поддерживается возврат нескольких путей; пути являются относительными; поддеревья скрываются на основе сопоставления префиксов).hidden(ctx) поддерживает async: вы можете использовать await ctx.getVar('ctx.xxx') для определения видимости (на ваше усмотрение). Рекомендуется, чтобы эта логика была быстрой и не имела побочных эффектов (например, избегайте сетевых запросов).
Пример: Показывать дополнения ctx.popup.* только при наличии popup.uid.
Пример: Всплывающее окно доступно, но некоторые подпути скрыты (только относительные пути; например, скрытие record и parent.record).
Примечание: CodeEditor всегда включает фильтрацию дополнений на основе реального ctx (отказоустойчивость: ошибки не выбрасываются).
info/meta во время выполнения и API информации о контексте (для автодополнения и LLM)Помимо статического ведения документации ctx через FlowRunJSContext.define(), вы также можете внедрять info/meta во время выполнения через FlowContext.defineProperty/defineMethod. Затем вы можете выводить сериализуемую информацию о контексте для CodeEditor или LLM, используя следующие API:
await ctx.getApiInfos(options?): Статическая информация об API.await ctx.getVarInfos(options?): Информация о структуре переменных (извлекается из meta, поддерживает развертывание по пути/глубине maxDepth).await ctx.getEnvInfos(): Снимок среды выполнения.defineMethod(name, fn, info?)info поддерживает (все параметры необязательны):
description / detail / examplesref: string | { url: string; title?: string }params / returns (в стиле JSDoc)Примечание:
getApiInfos()выводит статическую документацию API и не включает такие поля, какdeprecated,disabledилиdisabledReason.
Пример: Предоставление ссылок на документацию для ctx.refreshTargets().
defineProperty(key, { meta?, info? })meta: Используется для интерфейса выбора переменных (getPropertyMetaTree / FlowContextSelector). Определяет видимость, древовидную структуру, состояние блокировки и т. д. (поддерживает функции/async).
title / type / properties / sort / hidden / disabled / disabledReason / buildVariablesParamsinfo: Используется для статической документации API (getApiInfos) и описаний для LLM. Не влияет на интерфейс выбора переменных (поддерживает функции/async).
title / type / interface / description / examples / ref / params / returnsЕсли предоставлен только meta (без info):
getApiInfos() не вернет этот ключ (так как статическая документация API не выводится из meta).getVarInfos() построит структуру переменных на основе meta (используется для селекторов переменных / динамических деревьев переменных).Используется для вывода «информации о доступных возможностях контекста».
Общие параметры:
getApiInfos({ version }): Версия документации RunJS (по умолчанию v1).getVarInfos({ path, maxDepth }): Обрезка и максимальная глубина развертывания (по умолчанию 3).Примечание: Результаты, возвращаемые вышеуказанными API, не содержат функций и подходят для прямой сериализации и передачи в LLM.
await ctx.getVar(path)Если у вас есть «строка пути к переменной» (например, из конфигурации или пользовательского ввода) и вы хотите получить значение этой переменной во время выполнения напрямую, используйте getVar:
const v = await ctx.getVar('ctx.record.roles.id')path — это путь выражения, начинающийся с ctx. (например, ctx.record.id / ctx.record.roles[0].id).Дополнительно: методы или свойства, начинающиеся с подчеркивания _, считаются приватными членами и не будут отображаться в выводе getApiInfos() или getVarInfos().