import * as ASTv2 from './api'; export function SexpSyntaxContext(node) { if (isSimpleCallee(node)) { return ASTv2.LooseModeResolution.namespaced("Helper" /* Helper */ ); } else { return null; } } export function ModifierSyntaxContext(node) { if (isSimpleCallee(node)) { return ASTv2.LooseModeResolution.namespaced("Modifier" /* Modifier */ ); } else { return null; } } export function BlockSyntaxContext(node) { if (isSimpleCallee(node)) { return ASTv2.LooseModeResolution.namespaced("Component" /* Component */ ); } else { return ASTv2.LooseModeResolution.fallback(); } } export function ComponentSyntaxContext(node) { if (isSimplePath(node)) { return ASTv2.LooseModeResolution.namespaced("Component" /* Component */ , true); } else { return null; } } /** * This corresponds to append positions (text curlies or attribute * curlies). In strict mode, this also corresponds to arg curlies. */ export function AttrValueSyntaxContext(node) { let isSimple = isSimpleCallee(node); let isInvoke = isInvokeNode(node); if (isSimple) { return isInvoke ? ASTv2.LooseModeResolution.namespaced("Helper" /* Helper */ ) : ASTv2.LooseModeResolution.attr(); } else { return isInvoke ? ASTv2.STRICT_RESOLUTION : ASTv2.LooseModeResolution.fallback(); } } /** * This corresponds to append positions (text curlies or attribute * curlies). In strict mode, this also corresponds to arg curlies. */ export function AppendSyntaxContext(node) { let isSimple = isSimpleCallee(node); let isInvoke = isInvokeNode(node); let trusting = node.trusting; if (isSimple) { return trusting ? ASTv2.LooseModeResolution.trustingAppend({ invoke: isInvoke }) : ASTv2.LooseModeResolution.append({ invoke: isInvoke }); } else { return ASTv2.LooseModeResolution.fallback(); } } // UTILITIES /** * A call node has a simple callee if its head is: * * - a `PathExpression` * - the `PathExpression`'s head is a `VarHead` * - it has no tail * * Simple heads: * * ``` * {{x}} * {{x y}} * ``` * * Not simple heads: * * ``` * {{x.y}} * {{x.y z}} * {{@x}} * {{@x a}} * {{this}} * {{this a}} * ``` */ function isSimpleCallee(node) { let path = node.path; return isSimplePath(path); } function isSimplePath(node) { if (node.type === 'PathExpression' && node.head.type === 'VarHead') { return node.tail.length === 0; } else { return false; } } /** * The call expression has at least one argument. */ function isInvokeNode(node) { return node.params.length > 0 || node.hash.pairs.length > 0; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdjItYS9sb29zZS1yZXNvbHV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxLQUFaLE1BQXVCLE9BQXZCO0FBWUEsT0FBTSxTQUFVLGlCQUFWLENBQTRCLElBQTVCLEVBQXFEO0FBQ3pELE1BQUksY0FBYyxDQUFDLElBQUQsQ0FBbEIsRUFBMEI7QUFDeEIsV0FBTyxLQUFLLENBQUMsbUJBQU4sQ0FBMEIsVUFBMUIsQ0FBb0M7QUFBQTtBQUFwQyxLQUFQO0FBQ0QsR0FGRCxNQUVPO0FBQ0wsV0FBTyxJQUFQO0FBQ0Q7QUFDRjtBQUVELE9BQU0sU0FBVSxxQkFBVixDQUNKLElBREksRUFDZ0M7QUFFcEMsTUFBSSxjQUFjLENBQUMsSUFBRCxDQUFsQixFQUEwQjtBQUN4QixXQUFPLEtBQUssQ0FBQyxtQkFBTixDQUEwQixVQUExQixDQUFvQztBQUFBO0FBQXBDLEtBQVA7QUFDRCxHQUZELE1BRU87QUFDTCxXQUFPLElBQVA7QUFDRDtBQUNGO0FBRUQsT0FBTSxTQUFVLGtCQUFWLENBQTZCLElBQTdCLEVBQXVEO0FBQzNELE1BQUksY0FBYyxDQUFDLElBQUQsQ0FBbEIsRUFBMEI7QUFDeEIsV0FBTyxLQUFLLENBQUMsbUJBQU4sQ0FBMEIsVUFBMUIsQ0FBb0M7QUFBQTtBQUFwQyxLQUFQO0FBQ0QsR0FGRCxNQUVPO0FBQ0wsV0FBTyxLQUFLLENBQUMsbUJBQU4sQ0FBMEIsUUFBMUIsRUFBUDtBQUNEO0FBQ0Y7QUFFRCxPQUFNLFNBQVUsc0JBQVYsQ0FBaUMsSUFBakMsRUFBMkQ7QUFDL0QsTUFBSSxZQUFZLENBQUMsSUFBRCxDQUFoQixFQUF3QjtBQUN0QixXQUFPLEtBQUssQ0FBQyxtQkFBTixDQUEwQixVQUExQixDQUFvQztBQUFBO0FBQXBDLE1BQXVFLElBQXZFLENBQVA7QUFDRCxHQUZELE1BRU87QUFDTCxXQUFPLElBQVA7QUFDRDtBQUNGO0FBRUQ7Ozs7O0FBSUEsT0FBTSxTQUFVLHNCQUFWLENBQWlDLElBQWpDLEVBQThEO0FBQ2xFLE1BQUksUUFBUSxHQUFHLGNBQWMsQ0FBQyxJQUFELENBQTdCO0FBQ0EsTUFBSSxRQUFRLEdBQUcsWUFBWSxDQUFDLElBQUQsQ0FBM0I7O0FBRUEsTUFBSSxRQUFKLEVBQWM7QUFDWixXQUFPLFFBQVEsR0FDWCxLQUFLLENBQUMsbUJBQU4sQ0FBMEIsVUFBMUIsQ0FBb0M7QUFBQTtBQUFwQyxLQURXLEdBRVgsS0FBSyxDQUFDLG1CQUFOLENBQTBCLElBQTFCLEVBRko7QUFHRCxHQUpELE1BSU87QUFDTCxXQUFPLFFBQVEsR0FBRyxLQUFLLENBQUMsaUJBQVQsR0FBNkIsS0FBSyxDQUFDLG1CQUFOLENBQTBCLFFBQTFCLEVBQTVDO0FBQ0Q7QUFDRjtBQUVEOzs7OztBQUlBLE9BQU0sU0FBVSxtQkFBVixDQUE4QixJQUE5QixFQUEyRDtBQUMvRCxNQUFJLFFBQVEsR0FBRyxjQUFjLENBQUMsSUFBRCxDQUE3QjtBQUNBLE1BQUksUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFELENBQTNCO0FBQ0EsTUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQXBCOztBQUVBLE1BQUksUUFBSixFQUFjO0FBQ1osV0FBTyxRQUFRLEdBQ1gsS0FBSyxDQUFDLG1CQUFOLENBQTBCLGNBQTFCLENBQXlDO0FBQUUsTUFBQSxNQUFNLEVBQUU7QUFBVixLQUF6QyxDQURXLEdBRVgsS0FBSyxDQUFDLG1CQUFOLENBQTBCLE1BQTFCLENBQWlDO0FBQUUsTUFBQSxNQUFNLEVBQUU7QUFBVixLQUFqQyxDQUZKO0FBR0QsR0FKRCxNQUlPO0FBQ0wsV0FBTyxLQUFLLENBQUMsbUJBQU4sQ0FBMEIsUUFBMUIsRUFBUDtBQUNEO0FBQ0YsQyxDQU1EOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQSxTQUFTLGNBQVQsQ0FBd0IsSUFBeEIsRUFBMEM7QUFDeEMsTUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQWhCO0FBRUEsU0FBTyxZQUFZLENBQUMsSUFBRCxDQUFuQjtBQUNEOztBQUVELFNBQVMsWUFBVCxDQUFzQixJQUF0QixFQUE0QztBQUMxQyxNQUFJLElBQUksQ0FBQyxJQUFMLEtBQWMsZ0JBQWQsSUFBa0MsSUFBSSxDQUFDLElBQUwsQ0FBVSxJQUFWLEtBQW1CLFNBQXpELEVBQW9FO0FBQ2xFLFdBQU8sSUFBSSxDQUFDLElBQUwsQ0FBVSxNQUFWLEtBQXFCLENBQTVCO0FBQ0QsR0FGRCxNQUVPO0FBQ0wsV0FBTyxLQUFQO0FBQ0Q7QUFDRjtBQUVEOzs7OztBQUdBLFNBQVMsWUFBVCxDQUFzQixJQUF0QixFQUF3QztBQUN0QyxTQUFPLElBQUksQ0FBQyxNQUFMLENBQVksTUFBWixHQUFxQixDQUFyQixJQUEwQixJQUFJLENBQUMsSUFBTCxDQUFVLEtBQVYsQ0FBZ0IsTUFBaEIsR0FBeUIsQ0FBMUQ7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFTVHYxIGZyb20gJy4uL3YxL2FwaSc7XG5pbXBvcnQgKiBhcyBBU1R2MiBmcm9tICcuL2FwaSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXN0Q2FsbFBhcnRzIHtcbiAgcGF0aDogQVNUdjEuRXhwcmVzc2lvbjtcbiAgcGFyYW1zOiBBU1R2MS5FeHByZXNzaW9uW107XG4gIGhhc2g6IEFTVHYxLkhhc2g7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFyUGF0aCBleHRlbmRzIEFTVHYxLlBhdGhFeHByZXNzaW9uIHtcbiAgaGVhZDogQVNUdjEuVmFySGVhZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNleHBTeW50YXhDb250ZXh0KG5vZGU6IEFTVHYxLlN1YkV4cHJlc3Npb24pOiBBU1R2Mi5GcmVlVmFyUmVzb2x1dGlvbiB8IG51bGwge1xuICBpZiAoaXNTaW1wbGVDYWxsZWUobm9kZSkpIHtcbiAgICByZXR1cm4gQVNUdjIuTG9vc2VNb2RlUmVzb2x1dGlvbi5uYW1lc3BhY2VkKEFTVHYyLkZyZWVWYXJOYW1lc3BhY2UuSGVscGVyKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTW9kaWZpZXJTeW50YXhDb250ZXh0KFxuICBub2RlOiBBU1R2MS5FbGVtZW50TW9kaWZpZXJTdGF0ZW1lbnRcbik6IEFTVHYyLkZyZWVWYXJSZXNvbHV0aW9uIHwgbnVsbCB7XG4gIGlmIChpc1NpbXBsZUNhbGxlZShub2RlKSkge1xuICAgIHJldHVybiBBU1R2Mi5Mb29zZU1vZGVSZXNvbHV0aW9uLm5hbWVzcGFjZWQoQVNUdjIuRnJlZVZhck5hbWVzcGFjZS5Nb2RpZmllcik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJsb2NrU3ludGF4Q29udGV4dChub2RlOiBBU1R2MS5CbG9ja1N0YXRlbWVudCk6IEFTVHYyLkZyZWVWYXJSZXNvbHV0aW9uIHwgbnVsbCB7XG4gIGlmIChpc1NpbXBsZUNhbGxlZShub2RlKSkge1xuICAgIHJldHVybiBBU1R2Mi5Mb29zZU1vZGVSZXNvbHV0aW9uLm5hbWVzcGFjZWQoQVNUdjIuRnJlZVZhck5hbWVzcGFjZS5Db21wb25lbnQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBBU1R2Mi5Mb29zZU1vZGVSZXNvbHV0aW9uLmZhbGxiYWNrKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbXBvbmVudFN5bnRheENvbnRleHQobm9kZTogQVNUdjEuUGF0aEV4cHJlc3Npb24pOiBBU1R2Mi5GcmVlVmFyUmVzb2x1dGlvbiB8IG51bGwge1xuICBpZiAoaXNTaW1wbGVQYXRoKG5vZGUpKSB7XG4gICAgcmV0dXJuIEFTVHYyLkxvb3NlTW9kZVJlc29sdXRpb24ubmFtZXNwYWNlZChBU1R2Mi5GcmVlVmFyTmFtZXNwYWNlLkNvbXBvbmVudCwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGNvcnJlc3BvbmRzIHRvIGFwcGVuZCBwb3NpdGlvbnMgKHRleHQgY3VybGllcyBvciBhdHRyaWJ1dGVcbiAqIGN1cmxpZXMpLiBJbiBzdHJpY3QgbW9kZSwgdGhpcyBhbHNvIGNvcnJlc3BvbmRzIHRvIGFyZyBjdXJsaWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQXR0clZhbHVlU3ludGF4Q29udGV4dChub2RlOiBBU1R2MS5NdXN0YWNoZVN0YXRlbWVudCk6IEFTVHYyLkZyZWVWYXJSZXNvbHV0aW9uIHtcbiAgbGV0IGlzU2ltcGxlID0gaXNTaW1wbGVDYWxsZWUobm9kZSk7XG4gIGxldCBpc0ludm9rZSA9IGlzSW52b2tlTm9kZShub2RlKTtcblxuICBpZiAoaXNTaW1wbGUpIHtcbiAgICByZXR1cm4gaXNJbnZva2VcbiAgICAgID8gQVNUdjIuTG9vc2VNb2RlUmVzb2x1dGlvbi5uYW1lc3BhY2VkKEFTVHYyLkZyZWVWYXJOYW1lc3BhY2UuSGVscGVyKVxuICAgICAgOiBBU1R2Mi5Mb29zZU1vZGVSZXNvbHV0aW9uLmF0dHIoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaXNJbnZva2UgPyBBU1R2Mi5TVFJJQ1RfUkVTT0xVVElPTiA6IEFTVHYyLkxvb3NlTW9kZVJlc29sdXRpb24uZmFsbGJhY2soKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgY29ycmVzcG9uZHMgdG8gYXBwZW5kIHBvc2l0aW9ucyAodGV4dCBjdXJsaWVzIG9yIGF0dHJpYnV0ZVxuICogY3VybGllcykuIEluIHN0cmljdCBtb2RlLCB0aGlzIGFsc28gY29ycmVzcG9uZHMgdG8gYXJnIGN1cmxpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBBcHBlbmRTeW50YXhDb250ZXh0KG5vZGU6IEFTVHYxLk11c3RhY2hlU3RhdGVtZW50KTogQVNUdjIuRnJlZVZhclJlc29sdXRpb24ge1xuICBsZXQgaXNTaW1wbGUgPSBpc1NpbXBsZUNhbGxlZShub2RlKTtcbiAgbGV0IGlzSW52b2tlID0gaXNJbnZva2VOb2RlKG5vZGUpO1xuICBsZXQgdHJ1c3RpbmcgPSBub2RlLnRydXN0aW5nO1xuXG4gIGlmIChpc1NpbXBsZSkge1xuICAgIHJldHVybiB0cnVzdGluZ1xuICAgICAgPyBBU1R2Mi5Mb29zZU1vZGVSZXNvbHV0aW9uLnRydXN0aW5nQXBwZW5kKHsgaW52b2tlOiBpc0ludm9rZSB9KVxuICAgICAgOiBBU1R2Mi5Mb29zZU1vZGVSZXNvbHV0aW9uLmFwcGVuZCh7IGludm9rZTogaXNJbnZva2UgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIEFTVHYyLkxvb3NlTW9kZVJlc29sdXRpb24uZmFsbGJhY2soKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBSZXNvbHV0aW9uPFAgZXh0ZW5kcyBBc3RDYWxsUGFydHMgfCBBU1R2MS5QYXRoRXhwcmVzc2lvbj4gPSAoXG4gIGNhbGw6IFBcbikgPT4gQVNUdjIuRnJlZVZhclJlc29sdXRpb24gfCBudWxsO1xuXG4vLyBVVElMSVRJRVNcblxuLyoqXG4gKiBBIGNhbGwgbm9kZSBoYXMgYSBzaW1wbGUgY2FsbGVlIGlmIGl0cyBoZWFkIGlzOlxuICpcbiAqIC0gYSBgUGF0aEV4cHJlc3Npb25gXG4gKiAtIHRoZSBgUGF0aEV4cHJlc3Npb25gJ3MgaGVhZCBpcyBhIGBWYXJIZWFkYFxuICogLSBpdCBoYXMgbm8gdGFpbFxuICpcbiAqIFNpbXBsZSBoZWFkczpcbiAqXG4gKiBgYGBcbiAqIHt7eH19XG4gKiB7e3ggeX19XG4gKiBgYGBcbiAqXG4gKiBOb3Qgc2ltcGxlIGhlYWRzOlxuICpcbiAqIGBgYFxuICoge3t4Lnl9fVxuICoge3t4Lnkgen19XG4gKiB7e0B4fX1cbiAqIHt7QHggYX19XG4gKiB7e3RoaXN9fVxuICoge3t0aGlzIGF9fVxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGlzU2ltcGxlQ2FsbGVlKG5vZGU6IEFzdENhbGxQYXJ0cyk6IGJvb2xlYW4ge1xuICBsZXQgcGF0aCA9IG5vZGUucGF0aDtcblxuICByZXR1cm4gaXNTaW1wbGVQYXRoKHBhdGgpO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZVBhdGgobm9kZTogQVNUdjEuRXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuICBpZiAobm9kZS50eXBlID09PSAnUGF0aEV4cHJlc3Npb24nICYmIG5vZGUuaGVhZC50eXBlID09PSAnVmFySGVhZCcpIHtcbiAgICByZXR1cm4gbm9kZS50YWlsLmxlbmd0aCA9PT0gMDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgY2FsbCBleHByZXNzaW9uIGhhcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGlzSW52b2tlTm9kZShub2RlOiBBc3RDYWxsUGFydHMpOiBib29sZWFuIHtcbiAgcmV0dXJuIG5vZGUucGFyYW1zLmxlbmd0aCA+IDAgfHwgbm9kZS5oYXNoLnBhaXJzLmxlbmd0aCA+IDA7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9