ember-source
Version:
A JavaScript framework for creating ambitious web applications
54 lines (49 loc) • 1.77 kB
JavaScript
import { associateDestroyableChild } from '../@glimmer/destroyable/index.js';
import { g as getInternalHelperManager, h as hasValue, a as hasDestroyable } from './api-Co-k4HVs.js';
import { createCache, getValue } from '../@glimmer/validator/index.js';
import './reference-BNqcwZWH.js';
import './capabilities-DGmQ_mz4.js';
import { getOwner } from '../@glimmer/owner/index.js';
import { E as EMPTY_ARGS, c as EMPTY_NAMED, d as EMPTY_POSITIONAL } from './on-CrTl7JQU.js';
function getArgs(proxy) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- @fixme
return getValue(proxy.argsCache);
}
class SimpleArgsProxy {
argsCache;
constructor(context, computeArgs = () => EMPTY_ARGS) {
let argsCache = createCache(() => computeArgs(context));
{
this.argsCache = argsCache;
}
}
get named() {
return getArgs(this).named || EMPTY_NAMED;
}
get positional() {
return getArgs(this).positional || EMPTY_POSITIONAL;
}
}
////////////
function invokeHelper(context, definition, computeArgs) {
const owner = getOwner(context);
const internalManager = getInternalHelperManager(definition);
const manager = internalManager.getDelegateFor(owner);
let args = new SimpleArgsProxy(context, computeArgs);
let bucket = manager.createHelper(definition, args);
let cache;
if (hasValue(manager)) {
cache = createCache(() => {
return manager.getValue(bucket);
});
associateDestroyableChild(context, cache);
} else {
throw new Error('TODO: unreachable, to be implemented with hasScheduledEffect');
}
if (hasDestroyable(manager)) {
let destroyable = manager.getDestroyable(bucket);
associateDestroyableChild(cache, destroyable);
}
return cache;
}
export { invokeHelper as i };