ember-source
Version:
A JavaScript framework for creating ambitious web applications
53 lines (45 loc) • 1.31 kB
JavaScript
import '../../../debug/index.js';
import { isPath, trackLocals } from './utils.js';
import { assert } from '../../../debug/lib/assert.js';
/**
*/
/**
A Glimmer2 AST transformation that replaces all instances of
```handlebars
{{#each iterableThing as |key value|}}
```
with
```handlebars
{{#each (-track-array iterableThing) as |key value|}}
```
*/
function transformEachTrackArray(env) {
let {
builders: b
} = env.syntax;
let {
hasLocal,
visitor
} = trackLocals(env);
return {
name: 'transform-each-track-array',
visitor: {
...visitor,
BlockStatement(node) {
if (isPath(node.path) && node.path.original === 'each' && !hasLocal('each')) {
let firstParam = node.params[0];
(!(firstParam) && assert('has firstParam', firstParam));
if (firstParam.type === 'SubExpression' && firstParam.path.type === 'PathExpression' && firstParam.path.original === '-each-in') {
return;
}
node.params[0] = b.sexpr(b.path('-track-array'), [firstParam]);
return b.block(b.path('each'), node.params, node.hash, node.program, node.inverse, node.loc);
}
}
}
};
}
export { transformEachTrackArray as default };