This commit upgrades TypeScript to the latest version 5.3 and introduces `verbatimModuleSyntax` in line with the official Vue guide recommendatinos (vuejs/docs#2592). By enforcing `import type` for type-only imports, this commit improves code clarity and supports tooling optimization, ensuring imports are only bundled when necessary for runtime. Changes: - Bump TypeScript to 5.3.3 across the project. - Adjust import statements to utilize `import type` where applicable, promoting cleaner and more efficient code.
97 lines
2.8 KiB
TypeScript
97 lines
2.8 KiB
TypeScript
import { it, describe, expect } from 'vitest';
|
|
import { type BridgeConnector, type MethodContextBinder, connectApisWithContextBridge } from '@/presentation/electron/preload/ContextBridging/ApiContextBridge';
|
|
|
|
describe('ApiContextBridge', () => {
|
|
describe('connectApisWithContextBridge', () => {
|
|
it('connects properties as keys', () => {
|
|
// arrange
|
|
const context = new BridgeConnectorTestContext();
|
|
const { exposedItems, bridgeConnector } = mockBridgeConnector();
|
|
const expectedKeys = ['a', 'b'];
|
|
const api = {
|
|
[`${expectedKeys[0]}`]: () => {},
|
|
[`${expectedKeys[1]}`]: () => {},
|
|
};
|
|
|
|
// act
|
|
context
|
|
.withApiObject(api)
|
|
.withBridgeConnector(bridgeConnector)
|
|
.run();
|
|
|
|
// assert
|
|
expect(exposedItems).to.have.lengthOf(expectedKeys.length);
|
|
expect(exposedItems.map(([key]) => key)).to.have.members(expectedKeys);
|
|
});
|
|
it('connects values after binding their context', () => {
|
|
// arrange
|
|
const context = new BridgeConnectorTestContext();
|
|
const { exposedItems, bridgeConnector } = mockBridgeConnector();
|
|
const rawValues = ['a', 'b'];
|
|
const api = {
|
|
first: rawValues[0],
|
|
second: rawValues[1],
|
|
};
|
|
const boundValues = {
|
|
[`${rawValues[0]}`]: 'bound-a',
|
|
[`${rawValues[1]}`]: 'bound-b',
|
|
};
|
|
const expectedValues = Object.values(boundValues);
|
|
const contextBinderMock: MethodContextBinder = (property) => {
|
|
return boundValues[property as string] as never;
|
|
};
|
|
|
|
// act
|
|
context
|
|
.withApiObject(api)
|
|
.withContextBinder(contextBinderMock)
|
|
.withBridgeConnector(bridgeConnector)
|
|
.run();
|
|
|
|
// assert
|
|
expect(exposedItems).to.have.lengthOf(rawValues.length);
|
|
expect(exposedItems.map(([,value]) => value)).to.have.members(expectedValues);
|
|
});
|
|
});
|
|
});
|
|
|
|
function mockBridgeConnector() {
|
|
const exposedItems = new Array<[string, unknown]>();
|
|
const bridgeConnector: BridgeConnector = (key, api) => exposedItems.push([key, api]);
|
|
return {
|
|
exposedItems,
|
|
bridgeConnector,
|
|
};
|
|
}
|
|
|
|
class BridgeConnectorTestContext {
|
|
private bridgeConnector: BridgeConnector = () => {};
|
|
|
|
private apiObject: object = {};
|
|
|
|
private contextBinder: MethodContextBinder = (obj) => obj;
|
|
|
|
public withBridgeConnector(bridgeConnector: BridgeConnector): this {
|
|
this.bridgeConnector = bridgeConnector;
|
|
return this;
|
|
}
|
|
|
|
public withApiObject(apiObject: object): this {
|
|
this.apiObject = apiObject;
|
|
return this;
|
|
}
|
|
|
|
public withContextBinder(contextBinder: MethodContextBinder): this {
|
|
this.contextBinder = contextBinder;
|
|
return this;
|
|
}
|
|
|
|
public run() {
|
|
return connectApisWithContextBridge(
|
|
this.bridgeConnector,
|
|
this.apiObject,
|
|
this.contextBinder,
|
|
);
|
|
}
|
|
}
|