Skip to content

Commit 507282d

Browse files
committed
Typescriptify
1 parent b34af54 commit 507282d

File tree

10 files changed

+262
-177
lines changed

10 files changed

+262
-177
lines changed

ember-add-listener-helper/rollup.config.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export default {
1818
plugins: [
1919
// These are the modules that users should be able to import from your
2020
// addon. Anything not listed here may get optimized away.
21-
addon.publicEntrypoints(['helpers/**/*.js', 'index.js', 'template-registry.js']),
21+
addon.publicEntrypoints(['helpers/**/*.ts', 'template-registry.ts']),
2222

2323
// These are the modules that should get reexported into the traditional
2424
// "app" tree. Things in here should also be in publicEntrypoints above, but

ember-add-listener-helper/src/helpers/add-listener.js

-27
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import Helper from '@ember/component/helper';
2+
import { addListener, removeListener } from '@ember/object/events';
3+
4+
// We define these explicitly rather than using `Parameters<typeof addListener>`
5+
// because `addListener`'s arguments were typed incorrectly in earlier preview
6+
// versions of Ember types.
7+
type PositionalArgs = [
8+
obj?: object,
9+
eventName?: string,
10+
// eslint-disable-next-line @typescript-eslint/ban-types
11+
target?: object | Function | null,
12+
// eslint-disable-next-line @typescript-eslint/ban-types
13+
method?: Function,
14+
sync?: boolean
15+
];
16+
17+
interface AddListenerHelperSignature {
18+
Args: {
19+
Positional: PositionalArgs;
20+
};
21+
Return: undefined;
22+
}
23+
24+
export default class AddListenerHelper extends Helper<AddListenerHelperSignature> {
25+
private removeListener?: () => void;
26+
27+
compute(args: PositionalArgs) {
28+
this.checkRemoveListener();
29+
30+
const [obj, eventName, target, method, once] = args;
31+
// method and once are optional
32+
if (!obj || !eventName || !target) {
33+
return undefined;
34+
}
35+
36+
addListener(obj, eventName, target, method, once);
37+
this.removeListener = () => removeListener(obj, eventName, target, method);
38+
return undefined;
39+
}
40+
41+
willDestroy() {
42+
this.checkRemoveListener();
43+
super.willDestroy();
44+
}
45+
46+
checkRemoveListener() {
47+
if (this.removeListener) {
48+
this.removeListener();
49+
delete this.removeListener;
50+
}
51+
}
52+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import type AddListenerHelper from './helpers/add-listener';
2+
3+
export default interface EmberAddListenerHelperRegistry {
4+
'add-listener': typeof AddListenerHelper;
5+
}

test-app/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
"@tsconfig/ember": "^3.0.0",
3636
"@types/qunit": "^2.19.6",
3737
"@types/rsvp": "^4.0.4",
38+
"@types/sinon": "^10.0.15",
3839
"@typescript-eslint/eslint-plugin": "^5.57.1",
3940
"@typescript-eslint/parser": "^5.57.1",
4041
"broccoli-asset-rev": "^3.0.0",

test-app/tests/integration/helpers/add-listener-test.js

-148
This file was deleted.

0 commit comments

Comments
 (0)