



























@@ -2,7 +2,6 @@ import fs from "node:fs";
22import path from "node:path";
33import { pathToFileURL } from "node:url";
44import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
5-import { shouldExpectNativeJitiForJavaScriptTestRuntime } from "../test-utils/jiti-runtime.js";
65import { cleanupTrackedTempDirs, makeTrackedTempDir } from "./test-helpers/fs-fixtures.js";
76import {
87getRegistryJitiMocks,
@@ -36,32 +35,83 @@ describe("doctor-contract-registry getJiti", () => {
3635clearPluginDoctorContractRegistryCache();
3736});
383739-it("uses the runtime-supported Jiti boundary on Windows for contract-api modules", () => {
38+it("uses native require on Windows for compatible JavaScript contract-api modules", () => {
4039const pluginRoot = makeTempDir();
41-fs.writeFileSync(path.join(pluginRoot, "contract-api.js"), "export default {};\n", "utf-8");
40+fs.writeFileSync(
41+path.join(pluginRoot, "contract-api.js"),
42+"module.exports = { legacyConfigRules: [{ path: ['plugins', 'entries', 'demo', 'legacy'], message: 'legacy demo key' }] };\n",
43+"utf-8",
44+);
4245mocks.loadPluginManifestRegistry.mockReturnValue({
4346plugins: [{ id: "test-plugin", rootDir: pluginRoot }],
4447diagnostics: [],
4548});
4649const platformSpy = vi.spyOn(process, "platform", "get").mockReturnValue("win32");
47-const expectedTryNative = shouldExpectNativeJitiForJavaScriptTestRuntime();
48504951try {
50-listPluginDoctorLegacyConfigRules({
51-workspaceDir: pluginRoot,
52-env: {},
53-});
52+expect(
53+listPluginDoctorLegacyConfigRules({
54+workspaceDir: pluginRoot,
55+env: {},
56+}),
57+).toEqual([
58+{
59+path: ["plugins", "entries", "demo", "legacy"],
60+message: "legacy demo key",
61+},
62+]);
63+} finally {
64+platformSpy.mockRestore();
65+}
66+67+expect(mocks.createJiti).not.toHaveBeenCalled();
68+});
69+70+it("falls back to the Jiti boundary on Windows for TypeScript contract-api modules", () => {
71+const pluginRoot = makeTempDir();
72+const contractApiPath = path.join(pluginRoot, "contract-api.ts");
73+fs.writeFileSync(
74+contractApiPath,
75+"export const legacyConfigRules = [{ path: ['plugins', 'entries', 'demo', 'ts'], message: 'typescript contract' }];\n",
76+"utf-8",
77+);
78+mocks.createJiti.mockImplementation(() => () => ({
79+legacyConfigRules: [
80+{
81+path: ["plugins", "entries", "demo", "ts"],
82+message: "typescript contract",
83+},
84+],
85+}));
86+mocks.loadPluginManifestRegistry.mockReturnValue({
87+plugins: [{ id: "test-plugin", rootDir: pluginRoot }],
88+diagnostics: [],
89+});
90+const platformSpy = vi.spyOn(process, "platform", "get").mockReturnValue("win32");
91+92+try {
93+expect(
94+listPluginDoctorLegacyConfigRules({
95+workspaceDir: pluginRoot,
96+env: {},
97+}),
98+).toEqual([
99+{
100+path: ["plugins", "entries", "demo", "ts"],
101+message: "typescript contract",
102+},
103+]);
54104} finally {
55105platformSpy.mockRestore();
56106}
5710758108expect(mocks.createJiti).toHaveBeenCalledTimes(1);
59109expect(mocks.createJiti.mock.calls[0]?.[0]).toBe(
60-pathToFileURL(path.join(pluginRoot, "contract-api.js"), { windows: true }).href,
110+pathToFileURL(contractApiPath, { windows: true }).href,
61111);
62112expect(mocks.createJiti.mock.calls[0]?.[1]).toEqual(
63113expect.objectContaining({
64-tryNative: expectedTryNative,
114+tryNative: false,
65115}),
66116);
67117});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。