🤖 Merge PR #65769 @ember/modifier: cover missing Ember 3.x/4.x APIs by @chriskrycho

This commit is contained in:
Chris Krycho
2023-06-13 09:35:50 -06:00
committed by GitHub
parent d2db26f143
commit 07fc57bcd7
2 changed files with 39 additions and 11 deletions

View File

@@ -1,8 +1,24 @@
import { setModifierManager, capabilities, on } from '@ember/modifier';
import Owner from '@ember/owner';
declare let owner: Owner;
import {
setModifierManager,
capabilities,
on,
ModifierCapabilities,
OnModifier,
ModifierCapabilitiesVersions,
} from '@ember/modifier';
on; // $ExpectType OnModifier
setModifierManager((owner) => {}, {}); // $ExpectType {}
capabilities('3.24'); // $ExpectType unknown
setModifierManager(owner => {}, {}); // $ExpectType {}
const capabilitiesFor3_22 = capabilities('3.22'); // $ExpectType ModifierCapabilities
capabilitiesFor3_22.disableAutoTracking; // $ExpectType boolean
declare let x: ModifierCapabilitiesVersions;
x['3.22'].disableAutoTracking;
// @ts-expect-error
x['1.23'];
// We can name the type of `OnModifier`.
declare function takesOn(on: OnModifier): void;
// We can name the type of capabilities:
declare function takesCapabilities(caps: ModifierCapabilities): void;

View File

@@ -31,13 +31,25 @@ export const on: OnModifier;
* manager](https://emberjs.github.io/rfcs/0373-Element-Modifier-Managers.html).
* @param modifier The modifier definition to associate with the manager.
*/
export function setModifierManager<T>(
factory: (owner: Owner) => unknown,
modifier: T
): T;
export function setModifierManager<T>(factory: (owner: Owner) => unknown, modifier: T): T;
export interface ModifierCapabilitiesVersions {
// passes factoryFor(...).class to `.createModifier`
// uses args proxy, does not provide a way to opt-out
'3.22': {
disableAutoTracking?: boolean;
};
}
export interface ModifierCapabilities {
disableAutoTracking: boolean;
}
/**
* Given a target version of Ember, return an opaque token which Ember can use
* to determine what a given modifier manager supports.
*/
export function capabilities(version: string): unknown;
export function capabilities<Version extends keyof ModifierCapabilitiesVersions>(
managerAPI: Version,
optionalFeatures?: ModifierCapabilitiesVersions[Version],
): ModifierCapabilities;