From 07fc57bcd711662ac984127d67bac299e48a416a Mon Sep 17 00:00:00 2001 From: Chris Krycho Date: Tue, 13 Jun 2023 09:35:50 -0600 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=96=20Merge=20PR=20#65769=20@ember/mod?= =?UTF-8?q?ifier:=20cover=20missing=20Ember=203.x/4.x=20APIs=20by=20@chris?= =?UTF-8?q?krycho?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ember__modifier/ember__modifier-tests.ts | 28 +++++++++++++++---- types/ember__modifier/index.d.ts | 22 +++++++++++---- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/types/ember__modifier/ember__modifier-tests.ts b/types/ember__modifier/ember__modifier-tests.ts index 3dc6865fb4..0d1dfca2b4 100644 --- a/types/ember__modifier/ember__modifier-tests.ts +++ b/types/ember__modifier/ember__modifier-tests.ts @@ -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; diff --git a/types/ember__modifier/index.d.ts b/types/ember__modifier/index.d.ts index 4a213e6646..b01ea817a9 100644 --- a/types/ember__modifier/index.d.ts +++ b/types/ember__modifier/index.d.ts @@ -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( - factory: (owner: Owner) => unknown, - modifier: T -): T; +export function setModifierManager(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( + managerAPI: Version, + optionalFeatures?: ModifierCapabilitiesVersions[Version], +): ModifierCapabilities;