Skip to content

Commit

Permalink
Merge pull request #88 from NullVoxPopuli/sync-with-rfc-implementation
Browse files Browse the repository at this point in the history
chore: sync with RFC
  • Loading branch information
NullVoxPopuli authored Jan 30, 2022
2 parents cd569fc + 343a698 commit 6d89767
Showing 1 changed file with 22 additions and 14 deletions.
36 changes: 22 additions & 14 deletions addon/initializers/install-function-helper-manager.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/ban-types */
// typed-ember doesn't have types for `@ember/helper` yet
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
Expand All @@ -19,35 +20,42 @@ export default {

type FnArgs<Args extends Arguments = Arguments> =
| [...Args['positional'], Args['named']]
| [...Args['positional'], {}];
| [...Args['positional']];

interface FunctionHelperState<Args extends Arguments = Arguments> {
fn: <Return>(...args: FnArgs<Args>) => Return;
args: Args;
type AnyFunction = (...args: any[]) => unknown;

interface State {
fn: AnyFunction;
args: Arguments;
}

export class FunctionHelperManager<State extends FunctionHelperState> {
export class FunctionHelperManager {
capabilities = helperCapabilities('3.23', {
hasValue: true,
hasDestroyable: false,
hasScheduledEffect: false,
});

createHelper(fn: State['fn'], args: State['args']) {
createHelper(fn: AnyFunction, args: Arguments): State {
return { fn, args };
}

getValue({ fn, args }: State) {
let argsForFn: FnArgs<Arguments> = [
...args.positional,
Object.keys(args.named).length > 0 ? args.named : {},
];
getValue({ fn, args }: State): unknown {
if (Object.keys(args.named).length > 0) {
let argsForFn: FnArgs<Arguments> = [...args.positional, args.named];

return fn(...argsForFn);
}

return fn(...argsForFn);
return fn(...args.positional);
}

getDebugName(fn: State['fn']) {
return fn.name || '(anonymous function)';
getDebugName(fn: AnyFunction): string {
if (fn.name) {
return `(helper function ${fn.name})`;
}

return '(anonymous helper function)';
}
}

Expand Down

0 comments on commit 6d89767

Please sign in to comment.