feat(script/jsx): support import syntax for api

This commit is contained in:
Elian Doran 2025-12-20 22:23:25 +02:00
parent 6c1b327f5f
commit e0416097e1
No known key found for this signature in database
2 changed files with 19 additions and 1 deletions

View File

@ -146,7 +146,7 @@ describe("JSX building", () => {
expect(buildJsx(script).code).toStrictEqual(expected); expect(buildJsx(script).code).toStrictEqual(expected);
}); });
it("rewrite React API imports", () => { it("rewrites React API imports", () => {
const script = trimIndentation`\ const script = trimIndentation`\
import { defineWidget, RightPanelWidget} from "trilium:preact"; import { defineWidget, RightPanelWidget} from "trilium:preact";
defineWidget({ defineWidget({
@ -163,6 +163,18 @@ describe("JSX building", () => {
} }
}); });
`; `;
expect(buildJsx(script).code).toStrictEqual(expected);
});
it("rewrites internal API imports", () => {
const script = trimIndentation`\
import { log } from "trilium:api";
log("Hi");
`;
const expected = trimIndentation`\
"use strict";const _triliumapi = api;
_triliumapi.log.call(void 0, "Hi");
`;
console.log(buildJsx(script).code); console.log(buildJsx(script).code);
expect(buildJsx(script).code).toStrictEqual(expected); expect(buildJsx(script).code).toStrictEqual(expected);
}); });

View File

@ -240,6 +240,12 @@ export function buildJsx(contentRaw: string | Buffer) {
'const $1 = api.preact;' 'const $1 = api.preact;'
); );
// Rewrite ESM-like imports to internal API, to `const { foo } = api.preact`
code = code.replaceAll(
/var\s+(\w+)\s*=\s*require\(['"]trilium:api['"]\);?/g,
'const $1 = api;'
);
output.code = code; output.code = code;
return output; return output;
} }