Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert packages/ember to TS #20175

Merged
merged 2 commits into from
Oct 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/@ember/-internals/environment/lib/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export const context = (function (
};
})(global, global.Ember);

export function getLookup(): object {
export function getLookup(): Record<string, unknown> {
return context.lookup;
}

Expand Down
2 changes: 1 addition & 1 deletion packages/@ember/-internals/error-handling/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export function getOnerror() {
return onerror;
}
// Ember.onerror setter
export function setOnerror(handler: Function) {
export function setOnerror(handler: Function | undefined) {
onerror = handler;
}

Expand Down
1 change: 1 addition & 0 deletions packages/@ember/-internals/glimmer/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,7 @@ export {
hasTemplate,
getTemplates,
setTemplates,
TemplatesRegistry,
} from './lib/template_registry';
export { setupEngineRegistry, setupApplicationRegistry } from './lib/setup-registry';
export { DOMChanges, NodeDOMTreeConstruction, DOMTreeConstruction } from './lib/dom';
Expand Down
58 changes: 32 additions & 26 deletions packages/@ember/-internals/glimmer/lib/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,32 @@ export interface SimpleHelper<T, P extends unknown[], N extends Dict<unknown>> {
compute: HelperFunction<T, P, N>;
}

/**
In many cases it is not necessary to use the full `Helper` class.
The `helper` method create pure-function helpers without instances.
For example:

```app/helpers/format-currency.js
import { helper } from '@ember/component/helper';

export default helper(function([cents], {currency}) {
return `${currency}${cents * 0.01}`;
});
```

@static
@param {Function} helper The helper function
@method helper
@for @ember/component/helper
@public
@since 1.13.0
*/
export function helper<T, P extends unknown[], N extends Dict<unknown>>(
helperFn: HelperFunction<T, P, N>
): HelperFactory<SimpleHelper<T, P, N>> {
return new Wrapper(helperFn);
}

/**
Ember Helpers are functions that can compute values, and are used in templates.
For example, this code calls a helper named `format-currency`:
Expand Down Expand Up @@ -105,6 +131,12 @@ class Helper extends FrameworkObject {
static isHelperFactory = true;
static [IS_CLASSIC_HELPER] = true;

// `packages/ember/index.js` was setting `Helper.helper`. This seems like
// a bad idea and probably not something we want. We've moved that definition
// here, but it should definitely be reviewed and probably removed.
/** @deprecated */
static helper = helper;

// SAFETY: this is initialized in `init`, rather than `constructor`. It is
// safe to `declare` like this *if and only if* nothing uses the constructor
// directly in this class, since nothing else can run before `init`.
Expand Down Expand Up @@ -269,30 +301,4 @@ export const SIMPLE_CLASSIC_HELPER_MANAGER = new SimpleClassicHelperManager();

setHelperManager(() => SIMPLE_CLASSIC_HELPER_MANAGER, Wrapper.prototype);

/**
In many cases it is not necessary to use the full `Helper` class.
The `helper` method create pure-function helpers without instances.
For example:

```app/helpers/format-currency.js
import { helper } from '@ember/component/helper';

export default helper(function([cents], {currency}) {
return `${currency}${cents * 0.01}`;
});
```

@static
@param {Function} helper The helper function
@method helper
@for @ember/component/helper
@public
@since 1.13.0
*/
export function helper<T, P extends unknown[], N extends Dict<unknown>>(
helperFn: HelperFunction<T, P, N>
): HelperFactory<SimpleHelper<T, P, N>> {
return new Wrapper(helperFn);
}

export default Helper;
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { TemplateFactory } from '@glimmer/interfaces';
// STATE within a module is frowned upon, this exists
// to support Ember.TEMPLATES but shield ember internals from this legacy
// global API.
interface TemplatesRegistry {
export interface TemplatesRegistry {
[name: string]: TemplateFactory;
}
let TEMPLATES: TemplatesRegistry = {};
Expand Down
2 changes: 1 addition & 1 deletion packages/@ember/helper/type-tests/invoke-helper.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import Component from '@ember/-internals/glimmer/lib/component';
import Component from '@ember/component';
import { getValue } from '@ember/-internals/metal';
import Helper from '@ember/component/helper';
import { invokeHelper } from '@ember/helper';
Expand Down
Loading