mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 16:45:22 +00:00
chore: initialize my-pi extension bundle
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import { mock as nodeTestMockRaw } from "node:test";
|
||||
|
||||
import { DEFAULT_RTK_INTEGRATION_CONFIG, type RtkIntegrationConfig } from "./types.ts";
|
||||
|
||||
type TestResult = void | Promise<void>;
|
||||
type MockModuleOptions = { namedExports?: Record<string, unknown>; defaultExport?: unknown };
|
||||
|
||||
function isPromiseLike(value: TestResult): value is Promise<void> {
|
||||
return Boolean(value && typeof (value as Promise<void>).then === "function");
|
||||
}
|
||||
|
||||
export function runTest(name: string, testFn: () => TestResult): TestResult {
|
||||
const result = testFn();
|
||||
if (!isPromiseLike(result)) {
|
||||
console.log(`[PASS] ${name}`);
|
||||
return;
|
||||
}
|
||||
|
||||
return result.then(() => {
|
||||
console.log(`[PASS] ${name}`);
|
||||
});
|
||||
}
|
||||
|
||||
export function cloneDefaultConfig(): RtkIntegrationConfig {
|
||||
return structuredClone(DEFAULT_RTK_INTEGRATION_CONFIG);
|
||||
}
|
||||
|
||||
// Runtime-agnostic module-mocking helper. The tests use the node:test-shaped
|
||||
// API (`mock.module(specifier, { namedExports, defaultExport })`). Bun's
|
||||
// implementation of `node:test` does not expose `mock.module`, but `bun:test`
|
||||
// provides an equivalent that accepts a factory function. We detect the
|
||||
// capability and adapt the options form to the factory form when needed.
|
||||
const nodeTestMock = nodeTestMockRaw as unknown as { module?: unknown };
|
||||
|
||||
let mockModuleImpl: (specifier: string, options: MockModuleOptions) => void;
|
||||
|
||||
if (typeof nodeTestMock.module === "function") {
|
||||
mockModuleImpl = nodeTestMock.module as (specifier: string, options: MockModuleOptions) => void;
|
||||
} else {
|
||||
const bunTest = (await import("bun:test")) as unknown as {
|
||||
mock: { module: (specifier: string, factory: () => Record<string, unknown>) => void };
|
||||
};
|
||||
|
||||
mockModuleImpl = (specifier, options) => {
|
||||
bunTest.mock.module(specifier, () => {
|
||||
const moduleExports: Record<string, unknown> = {};
|
||||
if (options.defaultExport !== undefined) {
|
||||
moduleExports.default = options.defaultExport;
|
||||
}
|
||||
if (options.namedExports) {
|
||||
Object.assign(moduleExports, options.namedExports);
|
||||
}
|
||||
return moduleExports;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
export const mock = { module: mockModuleImpl };
|
||||
Reference in New Issue
Block a user