Skip to content

Commit b61005c

Browse files
committed
Implement invade helper
1 parent 0b24da5 commit b61005c

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

src/fluent/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,5 @@ export type { FluentArray, FluentArrayHelpers, FluentArrayInstance } from './Flu
7676

7777
export { default as FluentStringDefinition, fluentStringHelpers } from './FluentString';
7878
export type { FluentString, FluentStringInstance } from './FluentString';
79+
80+
export * from './invade';

src/fluent/invade.test.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { describe, expect, it } from 'vitest';
2+
3+
import { invade } from './invade';
4+
5+
describe('invade', () => {
6+
7+
it('invades private methods', () => {
8+
class Vault {
9+
10+
private getSecret(): string {
11+
return '42';
12+
}
13+
14+
}
15+
16+
expect(invade(new Vault(), ['getSecret']).getSecret()).toBe('42');
17+
});
18+
19+
});

src/fluent/invade.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import type { Override } from '@noeldemartin/utils/types';
2+
3+
// @ts-expect-error Allow invades
4+
export type Invaded<TObject, TMethods extends string> = { [K in TMethods]: TObject[K] };
5+
6+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
7+
export function invade<T, TMethods extends string>(object: T, methods: TMethods[]): Override<T, Invaded<T, TMethods>> {
8+
return object as Override<T, Invaded<T, TMethods>>;
9+
}

src/types/helpers.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export type ObjectValues<T> = T[keyof T];
2323
export type OnlyKnownProperties<TGeneric, TKnown> = {
2424
[K in keyof TGeneric]: K extends keyof TKnown ? TGeneric[K] : never;
2525
};
26+
export type Override<T, TOverrides> = Omit<T, keyof TOverrides> & TOverrides;
2627
export type Pretty<T> = T extends infer U ? { [K in keyof U]: U[K] } : never;
2728
export type SubPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
2829
export type TypeGuard<T = unknown> = (value: unknown) => value is T;

0 commit comments

Comments
 (0)