Skip to content

Commit 0bb5211

Browse files
committed
refactor(matrix): avoid jiti on packaged runtime path
1 parent cce0888 commit 0bb5211

4 files changed

Lines changed: 26 additions & 32 deletions

File tree

extensions/matrix/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
"@matrix-org/matrix-sdk-crypto-nodejs": "^0.5.1",
88
"@matrix-org/matrix-sdk-crypto-wasm": "18.2.0",
99
"fake-indexeddb": "^6.2.5",
10-
"jiti": "^2.6.1",
1110
"markdown-it": "14.1.1",
1211
"matrix-js-sdk": "41.4.0",
1312
"music-metadata": "^11.12.3",

extensions/matrix/src/plugin-entry.runtime.js

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@
44
import fs from "node:fs";
55
import { createRequire } from "node:module";
66
import path from "node:path";
7-
import { fileURLToPath } from "node:url";
7+
import { fileURLToPath, pathToFileURL } from "node:url";
88

99
const require = createRequire(import.meta.url);
10-
const { createJiti } = require("jiti");
1110

1211
const PLUGIN_ID = "matrix";
1312
const OPENCLAW_PLUGIN_SDK_PACKAGE_NAMES = [
@@ -17,6 +16,7 @@ const OPENCLAW_PLUGIN_SDK_PACKAGE_NAMES = [
1716
const PLUGIN_SDK_EXPORT_PREFIX = "./plugin-sdk/";
1817
const PLUGIN_SDK_SOURCE_EXTENSIONS = [".ts", ".mts", ".js", ".mjs", ".cts", ".cjs"];
1918
const PLUGIN_ENTRY_RUNTIME_BASENAME = "plugin-entry.handlers.runtime";
19+
const NATIVE_RUNTIME_EXTENSIONS = [".js", ".mjs", ".cjs"];
2020
const JITI_EXTENSIONS = [
2121
".ts",
2222
".tsx",
@@ -169,14 +169,21 @@ function resolveBundledPluginRuntimeModulePath(moduleUrl, params) {
169169
);
170170
}
171171

172-
const jiti = createJiti(import.meta.url, {
173-
alias: buildPluginSdkAliasMap(import.meta.url),
174-
interopDefault: true,
175-
tryNative: false,
176-
extensions: JITI_EXTENSIONS,
177-
});
172+
async function loadRuntimeModule(modulePath) {
173+
if (NATIVE_RUNTIME_EXTENSIONS.includes(path.extname(modulePath))) {
174+
return import(pathToFileURL(modulePath).href);
175+
}
176+
const { createJiti } = require("jiti");
177+
const jiti = createJiti(import.meta.url, {
178+
alias: buildPluginSdkAliasMap(import.meta.url),
179+
interopDefault: true,
180+
tryNative: false,
181+
extensions: JITI_EXTENSIONS,
182+
});
183+
return jiti(modulePath);
184+
}
178185

179-
const mod = jiti(
186+
const mod = await loadRuntimeModule(
180187
resolveBundledPluginRuntimeModulePath(import.meta.url, {
181188
pluginId: PLUGIN_ID,
182189
runtimeBasename: PLUGIN_ENTRY_RUNTIME_BASENAME,

extensions/matrix/src/plugin-entry.runtime.test.ts

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
import fs from "node:fs";
2-
import { createRequire } from "node:module";
32
import os from "node:os";
43
import path from "node:path";
54
import { pathToFileURL } from "node:url";
65
import { afterEach, expect, it } from "vitest";
76

87
const tempDirs: string[] = [];
98
const REPO_ROOT = process.cwd();
10-
const require = createRequire(import.meta.url);
11-
const JITI_ENTRY_PATH = require.resolve("jiti");
129
const matrixWrapperGlobal = globalThis as typeof globalThis & {
1310
__openclawMatrixWrapperJitiOptions?: unknown;
1411
};
@@ -40,14 +37,6 @@ function writeFixtureFile(fixtureRoot: string, relativePath: string, value: stri
4037
fs.writeFileSync(fullPath, value, "utf8");
4138
}
4239

43-
function writeJitiFixture(fixtureRoot: string) {
44-
writeFixtureFile(
45-
fixtureRoot,
46-
"node_modules/jiti/index.js",
47-
`module.exports = require(${JSON.stringify(JITI_ENTRY_PATH)});\n`,
48-
);
49-
}
50-
5140
function writeCapturingJitiFixture(fixtureRoot: string) {
5241
writeFixtureFile(
5342
fixtureRoot,
@@ -143,15 +132,19 @@ function writeTrustedOpenClawBinFixture(
143132
writeFixtureFile(fixtureRoot, "dist/plugin-sdk/group-access.js", "export {};\n");
144133
}
145134

146-
function writeSourceRuntimeWrapperFixture(fixtureRoot: string) {
135+
function writeSourceRuntimeWrapperFixture(
136+
fixtureRoot: string,
137+
options: { runtimeExtension?: ".js" | ".ts" } = {},
138+
) {
139+
const runtimeExtension = options.runtimeExtension ?? ".js";
147140
writeFixtureFile(
148141
fixtureRoot,
149142
"extensions/matrix/src/plugin-entry.runtime.js",
150143
MATRIX_RUNTIME_WRAPPER_SOURCE,
151144
);
152145
writeFixtureFile(
153146
fixtureRoot,
154-
"extensions/matrix/plugin-entry.handlers.runtime.js",
147+
`extensions/matrix/plugin-entry.handlers.runtime${runtimeExtension}`,
155148
PACKAGED_RUNTIME_STUB,
156149
);
157150
}
@@ -174,7 +167,7 @@ function writeCapturingSourceRuntimeWrapperFixture(fixtureRoot: string) {
174167
delete matrixWrapperGlobal.__openclawMatrixWrapperJitiOptions;
175168
writeOpenClawAliasFixture(fixtureRoot);
176169
writeCapturingJitiFixture(fixtureRoot);
177-
writeSourceRuntimeWrapperFixture(fixtureRoot);
170+
writeSourceRuntimeWrapperFixture(fixtureRoot, { runtimeExtension: ".ts" });
178171
}
179172

180173
function expectSourcePluginSdkAliases(fixtureRoot: string) {
@@ -198,7 +191,6 @@ it("loads the source-checkout runtime wrapper through native ESM import", async
198191
const fixtureRoot = makeFixtureRoot(".tmp-matrix-source-runtime-");
199192

200193
writeOpenClawPackageFixture(fixtureRoot);
201-
writeJitiFixture(fixtureRoot);
202194
writeSourceRuntimeWrapperFixture(fixtureRoot);
203195

204196
expectRuntimeWrapperExports(
@@ -210,7 +202,6 @@ it("loads the packaged runtime wrapper without recursing through the stable root
210202
const fixtureRoot = makeFixtureRoot(".tmp-matrix-runtime-");
211203

212204
writeOpenClawPackageFixture(fixtureRoot);
213-
writeJitiFixture(fixtureRoot);
214205
writeFixtureFile(
215206
fixtureRoot,
216207
"dist/plugin-entry.runtime-C88YIa_v.js",
@@ -267,7 +258,7 @@ it("keeps wrapper plugin-sdk aliases deterministic and ignores unsafe subpaths",
267258
writeFixtureFile(fixtureRoot, "src/plugin-sdk/alpha.ts", "export {};\n");
268259
writeFixtureFile(fixtureRoot, "src/plugin-sdk/zeta.ts", "export {};\n");
269260
writeCapturingJitiFixture(fixtureRoot);
270-
writeSourceRuntimeWrapperFixture(fixtureRoot);
261+
writeSourceRuntimeWrapperFixture(fixtureRoot, { runtimeExtension: ".ts" });
271262
await importFixtureModule(fixtureRoot, "extensions/matrix/src/plugin-entry.runtime.js");
272263

273264
const aliasKeys = Object.keys(
@@ -317,7 +308,7 @@ it("ignores nearby untrusted openclaw package stubs when resolving the wrapper r
317308
);
318309
writeFixtureFile(fixtureRoot, "extensions/src/plugin-sdk/group-access.ts", "export {};\n");
319310
writeCapturingJitiFixture(fixtureRoot);
320-
writeSourceRuntimeWrapperFixture(fixtureRoot);
311+
writeSourceRuntimeWrapperFixture(fixtureRoot, { runtimeExtension: ".ts" });
321312
await importFixtureModule(fixtureRoot, "extensions/matrix/src/plugin-entry.runtime.js");
322313

323314
expectSourcePluginSdkAliases(fixtureRoot);
@@ -329,7 +320,7 @@ it("treats string bin hints case-insensitively when trusting wrapper package roo
329320
delete matrixWrapperGlobal.__openclawMatrixWrapperJitiOptions;
330321
writeTrustedOpenClawBinFixture(fixtureRoot, "OpenClaw.MJS");
331322
writeCapturingJitiFixture(fixtureRoot);
332-
writeSourceRuntimeWrapperFixture(fixtureRoot);
323+
writeSourceRuntimeWrapperFixture(fixtureRoot, { runtimeExtension: ".ts" });
333324
await importFixtureModule(fixtureRoot, "extensions/matrix/src/plugin-entry.runtime.js");
334325

335326
expect(matrixWrapperGlobal.__openclawMatrixWrapperJitiOptions).toMatchObject({

pnpm-lock.yaml

Lines changed: 0 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)