fix: correct callable plugin sdk facades

This commit is contained in:
Peter Steinberger 2026-03-31 20:59:54 +01:00
parent a4f45c55b2
commit 913e7d5eba
No known key found for this signature in database
5 changed files with 71 additions and 30 deletions

View File

@ -1225,6 +1225,7 @@ const MODULE_RESOLUTION_OPTIONS = {
target: ts.ScriptTarget.ESNext,
};
const MODULE_RESOLUTION_HOST = ts.createCompilerHost(MODULE_RESOLUTION_OPTIONS, true);
const moduleResolutionContextCache = new Map();
const sourceExportKindsCache = new Map();
function listFacadeEntrySourcePaths(entry) {
@ -1324,6 +1325,48 @@ function resolveFacadeSourceTypescriptPath(repoRoot, sourcePath) {
return candidates.find((candidate) => fs.existsSync(candidate));
}
function resolveFacadeModuleResolutionContext(repoRoot) {
const cacheKey = repoRoot || "__default__";
const cached = moduleResolutionContextCache.get(cacheKey);
if (cached) {
return cached;
}
let context = {
options: MODULE_RESOLUTION_OPTIONS,
host: MODULE_RESOLUTION_HOST,
};
if (repoRoot) {
const fileExists = (filePath) => ts.sys.fileExists(filePath);
const readFile = (filePath) => ts.sys.readFile(filePath);
const configPath = ts.findConfigFile(repoRoot, fileExists, "tsconfig.json");
if (configPath) {
const configFile = ts.readConfigFile(configPath, readFile);
if (!configFile.error) {
const parsedConfig = ts.parseJsonConfigFileContent(
configFile.config,
ts.sys,
path.dirname(configPath),
MODULE_RESOLUTION_OPTIONS,
configPath,
);
const options = {
...MODULE_RESOLUTION_OPTIONS,
...parsedConfig.options,
};
context = {
options,
host: ts.createCompilerHost(options, true),
};
}
}
}
moduleResolutionContextCache.set(cacheKey, context);
return context;
}
function resolveFacadeSourceExportKinds(repoRoot, sourcePath) {
const cacheKey = `${repoRoot}::${sourcePath}`;
const cached = sourceExportKindsCache.get(cacheKey);
@ -1338,10 +1381,11 @@ function resolveFacadeSourceExportKinds(repoRoot, sourcePath) {
return empty;
}
const moduleResolutionContext = resolveFacadeModuleResolutionContext(repoRoot);
const program = ts.createProgram(
[sourceTsPath],
MODULE_RESOLUTION_OPTIONS,
MODULE_RESOLUTION_HOST,
moduleResolutionContext.options,
moduleResolutionContext.host,
);
const sourceFile = program.getSourceFile(sourceTsPath);
if (!sourceFile) {

View File

@ -101,9 +101,8 @@ export const createBrowserRuntimeState: FacadeModule["createBrowserRuntimeState"
)) as FacadeModule["createBrowserRuntimeState"];
export const createBrowserTool: FacadeModule["createBrowserTool"] = ((...args) =>
loadFacadeModule()["createBrowserTool"](...args)) as FacadeModule["createBrowserTool"];
export const definePluginEntry: FacadeModule["definePluginEntry"] = createLazyFacadeObjectValue(
() => loadFacadeModule()["definePluginEntry"] as object,
) as FacadeModule["definePluginEntry"];
export const definePluginEntry: FacadeModule["definePluginEntry"] = ((...args) =>
loadFacadeModule()["definePluginEntry"](...args)) as FacadeModule["definePluginEntry"];
export const ensureBrowserControlAuth: FacadeModule["ensureBrowserControlAuth"] = ((...args) =>
loadFacadeModule()["ensureBrowserControlAuth"](
...args,

View File

@ -19,12 +19,11 @@ export const ircSetupAdapter: FacadeModule["ircSetupAdapter"] = createLazyFacade
export const ircSetupWizard: FacadeModule["ircSetupWizard"] = createLazyFacadeObjectValue(
() => loadFacadeModule()["ircSetupWizard"] as object,
) as FacadeModule["ircSetupWizard"];
export const listIrcAccountIds: FacadeModule["listIrcAccountIds"] = createLazyFacadeObjectValue(
() => loadFacadeModule()["listIrcAccountIds"] as object,
) as FacadeModule["listIrcAccountIds"];
export const resolveDefaultIrcAccountId: FacadeModule["resolveDefaultIrcAccountId"] =
createLazyFacadeObjectValue(
() => loadFacadeModule()["resolveDefaultIrcAccountId"] as object,
) as FacadeModule["resolveDefaultIrcAccountId"];
export const listIrcAccountIds: FacadeModule["listIrcAccountIds"] = ((...args) =>
loadFacadeModule()["listIrcAccountIds"](...args)) as FacadeModule["listIrcAccountIds"];
export const resolveDefaultIrcAccountId: FacadeModule["resolveDefaultIrcAccountId"] = ((...args) =>
loadFacadeModule()["resolveDefaultIrcAccountId"](
...args,
)) as FacadeModule["resolveDefaultIrcAccountId"];
export const resolveIrcAccount: FacadeModule["resolveIrcAccount"] = ((...args) =>
loadFacadeModule()["resolveIrcAccount"](...args)) as FacadeModule["resolveIrcAccount"];

View File

@ -19,20 +19,20 @@ export const listEnabledSignalAccounts: FacadeModule["listEnabledSignalAccounts"
loadFacadeModule()["listEnabledSignalAccounts"](
...args,
)) as FacadeModule["listEnabledSignalAccounts"];
export const listSignalAccountIds: FacadeModule["listSignalAccountIds"] =
createLazyFacadeObjectValue(
() => loadFacadeModule()["listSignalAccountIds"] as object,
) as FacadeModule["listSignalAccountIds"];
export const listSignalAccountIds: FacadeModule["listSignalAccountIds"] = ((...args) =>
loadFacadeModule()["listSignalAccountIds"](...args)) as FacadeModule["listSignalAccountIds"];
export const monitorSignalProvider: FacadeModule["monitorSignalProvider"] = ((...args) =>
loadFacadeModule()["monitorSignalProvider"](...args)) as FacadeModule["monitorSignalProvider"];
export const probeSignal: FacadeModule["probeSignal"] = ((...args) =>
loadFacadeModule()["probeSignal"](...args)) as FacadeModule["probeSignal"];
export const removeReactionSignal: FacadeModule["removeReactionSignal"] = ((...args) =>
loadFacadeModule()["removeReactionSignal"](...args)) as FacadeModule["removeReactionSignal"];
export const resolveDefaultSignalAccountId: FacadeModule["resolveDefaultSignalAccountId"] =
createLazyFacadeObjectValue(
() => loadFacadeModule()["resolveDefaultSignalAccountId"] as object,
) as FacadeModule["resolveDefaultSignalAccountId"];
export const resolveDefaultSignalAccountId: FacadeModule["resolveDefaultSignalAccountId"] = ((
...args
) =>
loadFacadeModule()["resolveDefaultSignalAccountId"](
...args,
)) as FacadeModule["resolveDefaultSignalAccountId"];
export const resolveSignalReactionLevel: FacadeModule["resolveSignalReactionLevel"] = ((...args) =>
loadFacadeModule()["resolveSignalReactionLevel"](
...args,

View File

@ -2,10 +2,7 @@
import type { PluginSdkFacadeTypeMap } from "../generated/plugin-sdk-facade-type-map.generated.js";
type FacadeEntry = PluginSdkFacadeTypeMap["telegram-surface"];
type FacadeModule = FacadeEntry["module"];
import {
createLazyFacadeObjectValue,
loadBundledPluginPublicSurfaceModuleSync,
} from "./facade-runtime.js";
import { loadBundledPluginPublicSurfaceModuleSync } from "./facade-runtime.js";
function loadFacadeModule(): FacadeModule {
return loadBundledPluginPublicSurfaceModuleSync<FacadeModule>({
@ -63,13 +60,15 @@ export const isTelegramExecApprovalTargetRecipient: FacadeModule["isTelegramExec
export const listTelegramAccountIds: FacadeModule["listTelegramAccountIds"] = ((...args) =>
loadFacadeModule()["listTelegramAccountIds"](...args)) as FacadeModule["listTelegramAccountIds"];
export const listTelegramDirectoryGroupsFromConfig: FacadeModule["listTelegramDirectoryGroupsFromConfig"] =
createLazyFacadeObjectValue(
() => loadFacadeModule()["listTelegramDirectoryGroupsFromConfig"] as object,
) as FacadeModule["listTelegramDirectoryGroupsFromConfig"];
((...args) =>
loadFacadeModule()["listTelegramDirectoryGroupsFromConfig"](
...args,
)) as FacadeModule["listTelegramDirectoryGroupsFromConfig"];
export const listTelegramDirectoryPeersFromConfig: FacadeModule["listTelegramDirectoryPeersFromConfig"] =
createLazyFacadeObjectValue(
() => loadFacadeModule()["listTelegramDirectoryPeersFromConfig"] as object,
) as FacadeModule["listTelegramDirectoryPeersFromConfig"];
((...args) =>
loadFacadeModule()["listTelegramDirectoryPeersFromConfig"](
...args,
)) as FacadeModule["listTelegramDirectoryPeersFromConfig"];
export const looksLikeTelegramTargetId: FacadeModule["looksLikeTelegramTargetId"] = ((...args) =>
loadFacadeModule()["looksLikeTelegramTargetId"](
...args,