refactor(matrix): avoid jiti on packaged runtime path

This commit is contained in:
Peter Steinberger
2026-05-01 23:26:56 +01:00
parent cce08881ec
commit 0bb52118e6
4 changed files with 26 additions and 32 deletions

View File

@@ -7,7 +7,6 @@
"@matrix-org/matrix-sdk-crypto-nodejs": "^0.5.1",
"@matrix-org/matrix-sdk-crypto-wasm": "18.2.0",
"fake-indexeddb": "^6.2.5",
"jiti": "^2.6.1",
"markdown-it": "14.1.1",
"matrix-js-sdk": "41.4.0",
"music-metadata": "^11.12.3",

View File

@@ -4,10 +4,9 @@
import fs from "node:fs";
import { createRequire } from "node:module";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { fileURLToPath, pathToFileURL } from "node:url";
const require = createRequire(import.meta.url);
const { createJiti } = require("jiti");
const PLUGIN_ID = "matrix";
const OPENCLAW_PLUGIN_SDK_PACKAGE_NAMES = [
@@ -17,6 +16,7 @@ const OPENCLAW_PLUGIN_SDK_PACKAGE_NAMES = [
const PLUGIN_SDK_EXPORT_PREFIX = "./plugin-sdk/";
const PLUGIN_SDK_SOURCE_EXTENSIONS = [".ts", ".mts", ".js", ".mjs", ".cts", ".cjs"];
const PLUGIN_ENTRY_RUNTIME_BASENAME = "plugin-entry.handlers.runtime";
const NATIVE_RUNTIME_EXTENSIONS = [".js", ".mjs", ".cjs"];
const JITI_EXTENSIONS = [
".ts",
".tsx",
@@ -169,14 +169,21 @@ function resolveBundledPluginRuntimeModulePath(moduleUrl, params) {
);
}
const jiti = createJiti(import.meta.url, {
alias: buildPluginSdkAliasMap(import.meta.url),
interopDefault: true,
tryNative: false,
extensions: JITI_EXTENSIONS,
});
async function loadRuntimeModule(modulePath) {
if (NATIVE_RUNTIME_EXTENSIONS.includes(path.extname(modulePath))) {
return import(pathToFileURL(modulePath).href);
}
const { createJiti } = require("jiti");
const jiti = createJiti(import.meta.url, {
alias: buildPluginSdkAliasMap(import.meta.url),
interopDefault: true,
tryNative: false,
extensions: JITI_EXTENSIONS,
});
return jiti(modulePath);
}
const mod = jiti(
const mod = await loadRuntimeModule(
resolveBundledPluginRuntimeModulePath(import.meta.url, {
pluginId: PLUGIN_ID,
runtimeBasename: PLUGIN_ENTRY_RUNTIME_BASENAME,

View File

@@ -1,5 +1,4 @@
import fs from "node:fs";
import { createRequire } from "node:module";
import os from "node:os";
import path from "node:path";
import { pathToFileURL } from "node:url";
@@ -7,8 +6,6 @@ import { afterEach, expect, it } from "vitest";
const tempDirs: string[] = [];
const REPO_ROOT = process.cwd();
const require = createRequire(import.meta.url);
const JITI_ENTRY_PATH = require.resolve("jiti");
const matrixWrapperGlobal = globalThis as typeof globalThis & {
__openclawMatrixWrapperJitiOptions?: unknown;
};
@@ -40,14 +37,6 @@ function writeFixtureFile(fixtureRoot: string, relativePath: string, value: stri
fs.writeFileSync(fullPath, value, "utf8");
}
function writeJitiFixture(fixtureRoot: string) {
writeFixtureFile(
fixtureRoot,
"node_modules/jiti/index.js",
`module.exports = require(${JSON.stringify(JITI_ENTRY_PATH)});\n`,
);
}
function writeCapturingJitiFixture(fixtureRoot: string) {
writeFixtureFile(
fixtureRoot,
@@ -143,7 +132,11 @@ function writeTrustedOpenClawBinFixture(
writeFixtureFile(fixtureRoot, "dist/plugin-sdk/group-access.js", "export {};\n");
}
function writeSourceRuntimeWrapperFixture(fixtureRoot: string) {
function writeSourceRuntimeWrapperFixture(
fixtureRoot: string,
options: { runtimeExtension?: ".js" | ".ts" } = {},
) {
const runtimeExtension = options.runtimeExtension ?? ".js";
writeFixtureFile(
fixtureRoot,
"extensions/matrix/src/plugin-entry.runtime.js",
@@ -151,7 +144,7 @@ function writeSourceRuntimeWrapperFixture(fixtureRoot: string) {
);
writeFixtureFile(
fixtureRoot,
"extensions/matrix/plugin-entry.handlers.runtime.js",
`extensions/matrix/plugin-entry.handlers.runtime${runtimeExtension}`,
PACKAGED_RUNTIME_STUB,
);
}
@@ -174,7 +167,7 @@ function writeCapturingSourceRuntimeWrapperFixture(fixtureRoot: string) {
delete matrixWrapperGlobal.__openclawMatrixWrapperJitiOptions;
writeOpenClawAliasFixture(fixtureRoot);
writeCapturingJitiFixture(fixtureRoot);
writeSourceRuntimeWrapperFixture(fixtureRoot);
writeSourceRuntimeWrapperFixture(fixtureRoot, { runtimeExtension: ".ts" });
}
function expectSourcePluginSdkAliases(fixtureRoot: string) {
@@ -198,7 +191,6 @@ it("loads the source-checkout runtime wrapper through native ESM import", async
const fixtureRoot = makeFixtureRoot(".tmp-matrix-source-runtime-");
writeOpenClawPackageFixture(fixtureRoot);
writeJitiFixture(fixtureRoot);
writeSourceRuntimeWrapperFixture(fixtureRoot);
expectRuntimeWrapperExports(
@@ -210,7 +202,6 @@ it("loads the packaged runtime wrapper without recursing through the stable root
const fixtureRoot = makeFixtureRoot(".tmp-matrix-runtime-");
writeOpenClawPackageFixture(fixtureRoot);
writeJitiFixture(fixtureRoot);
writeFixtureFile(
fixtureRoot,
"dist/plugin-entry.runtime-C88YIa_v.js",
@@ -267,7 +258,7 @@ it("keeps wrapper plugin-sdk aliases deterministic and ignores unsafe subpaths",
writeFixtureFile(fixtureRoot, "src/plugin-sdk/alpha.ts", "export {};\n");
writeFixtureFile(fixtureRoot, "src/plugin-sdk/zeta.ts", "export {};\n");
writeCapturingJitiFixture(fixtureRoot);
writeSourceRuntimeWrapperFixture(fixtureRoot);
writeSourceRuntimeWrapperFixture(fixtureRoot, { runtimeExtension: ".ts" });
await importFixtureModule(fixtureRoot, "extensions/matrix/src/plugin-entry.runtime.js");
const aliasKeys = Object.keys(
@@ -317,7 +308,7 @@ it("ignores nearby untrusted openclaw package stubs when resolving the wrapper r
);
writeFixtureFile(fixtureRoot, "extensions/src/plugin-sdk/group-access.ts", "export {};\n");
writeCapturingJitiFixture(fixtureRoot);
writeSourceRuntimeWrapperFixture(fixtureRoot);
writeSourceRuntimeWrapperFixture(fixtureRoot, { runtimeExtension: ".ts" });
await importFixtureModule(fixtureRoot, "extensions/matrix/src/plugin-entry.runtime.js");
expectSourcePluginSdkAliases(fixtureRoot);
@@ -329,7 +320,7 @@ it("treats string bin hints case-insensitively when trusting wrapper package roo
delete matrixWrapperGlobal.__openclawMatrixWrapperJitiOptions;
writeTrustedOpenClawBinFixture(fixtureRoot, "OpenClaw.MJS");
writeCapturingJitiFixture(fixtureRoot);
writeSourceRuntimeWrapperFixture(fixtureRoot);
writeSourceRuntimeWrapperFixture(fixtureRoot, { runtimeExtension: ".ts" });
await importFixtureModule(fixtureRoot, "extensions/matrix/src/plugin-entry.runtime.js");
expect(matrixWrapperGlobal.__openclawMatrixWrapperJitiOptions).toMatchObject({

3
pnpm-lock.yaml generated
View File

@@ -802,9 +802,6 @@ importers:
fake-indexeddb:
specifier: ^6.2.5
version: 6.2.5
jiti:
specifier: ^2.6.1
version: 2.6.1
markdown-it:
specifier: 14.1.1
version: 14.1.1