UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

135 lines (127 loc) 13.6 kB
import { isConstRef, valueForRef } from '@glimmer/reference'; import { isObject } from '@glimmer/util'; import { APPEND_OPCODES } from '../../opcodes'; import { isEmpty, isSafeString, isFragment, isNode, shouldCoerce } from '../../dom/normalize'; import DynamicTextContent from '../../vm/content/text'; import { AssertFilter } from './vm'; import { hasInternalComponentManager, hasInternalHelperManager } from '@glimmer/manager'; import { DEBUG } from '@glimmer/env'; import { isCurriedType } from '../../curried-value'; function toContentType(value) { if (shouldCoerce(value)) { return 2 /* String */ ; } else if (isCurriedType(value, 0 /* Component */ ) || hasInternalComponentManager(value)) { return 0 /* Component */ ; } else if (isCurriedType(value, 1 /* Helper */ ) || hasInternalHelperManager(value)) { return 1 /* Helper */ ; } else if (isSafeString(value)) { return 4 /* SafeString */ ; } else if (isFragment(value)) { return 5 /* Fragment */ ; } else if (isNode(value)) { return 6 /* Node */ ; } else { return 2 /* String */ ; } } function toDynamicContentType(value) { if (!isObject(value)) { return 2 /* String */ ; } if (isCurriedType(value, 0 /* Component */ ) || hasInternalComponentManager(value)) { return 0 /* Component */ ; } else { if (DEBUG && !isCurriedType(value, 1 /* Helper */ ) && !hasInternalHelperManager(value)) { throw new Error("Attempted use a dynamic value as a component or helper, but that value did not have an associated component or helper manager. The value was: " + value); } return 1 /* Helper */ ; } } APPEND_OPCODES.add(76 /* ContentType */ , function (vm) { var reference = vm.stack.peek(); vm.stack.push(toContentType(valueForRef(reference))); if (!isConstRef(reference)) { vm.updateWith(new AssertFilter(reference, toContentType)); } }); APPEND_OPCODES.add(106 /* DynamicContentType */ , function (vm) { var reference = vm.stack.peek(); vm.stack.push(toDynamicContentType(valueForRef(reference))); if (!isConstRef(reference)) { vm.updateWith(new AssertFilter(reference, toDynamicContentType)); } }); APPEND_OPCODES.add(43 /* AppendHTML */ , function (vm) { var reference = vm.stack.pop(); var rawValue = valueForRef(reference); var value = isEmpty(rawValue) ? '' : String(rawValue); vm.elements().appendDynamicHTML(value); }); APPEND_OPCODES.add(44 /* AppendSafeHTML */ , function (vm) { var reference = vm.stack.pop(); var rawValue = valueForRef(reference).toHTML(); var value = isEmpty(rawValue) ? '' : rawValue; vm.elements().appendDynamicHTML(value); }); APPEND_OPCODES.add(47 /* AppendText */ , function (vm) { var reference = vm.stack.pop(); var rawValue = valueForRef(reference); var value = isEmpty(rawValue) ? '' : String(rawValue); var node = vm.elements().appendDynamicText(value); if (!isConstRef(reference)) { vm.updateWith(new DynamicTextContent(node, reference, value)); } }); APPEND_OPCODES.add(45 /* AppendDocumentFragment */ , function (vm) { var reference = vm.stack.pop(); var value = valueForRef(reference); vm.elements().appendDynamicFragment(value); }); APPEND_OPCODES.add(46 /* AppendNode */ , function (vm) { var reference = vm.stack.pop(); var value = valueForRef(reference); vm.elements().appendDynamicNode(value); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL2NvbXBpbGVkL29wY29kZXMvY29udGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFBLFVBQUEsRUFBQSxXQUFBLFFBQUEsb0JBQUE7QUFRQSxTQUFBLFFBQUEsUUFBQSxlQUFBO0FBRUEsU0FBQSxjQUFBLFFBQUEsZUFBQTtBQUVBLFNBQUEsT0FBQSxFQUFBLFlBQUEsRUFBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLFlBQUEsUUFBQSxxQkFBQTtBQUNBLE9BQUEsa0JBQUEsTUFBQSx1QkFBQTtBQUVBLFNBQUEsWUFBQSxRQUFBLE1BQUE7QUFDQSxTQUFBLDJCQUFBLEVBQUEsd0JBQUEsUUFBQSxrQkFBQTtBQUNBLFNBQUEsS0FBQSxRQUFBLGNBQUE7QUFDQSxTQUFBLGFBQUEsUUFBQSxxQkFBQTs7QUFFQSxTQUFBLGFBQUEsQ0FBQSxLQUFBLEVBQXFDO0FBQ25DLE1BQUksWUFBWSxDQUFoQixLQUFnQixDQUFoQixFQUF5QjtBQUN2QixXQUFBO0FBQUE7QUFBQTtBQURGLEdBQUEsTUFFTyxJQUNMLGFBQWEsQ0FBQSxLQUFBLEVBQU07QUFBQTtBQUFOLEdBQWIsSUFDQSwyQkFBMkIsQ0FGdEIsS0FFc0IsQ0FGdEIsRUFHTDtBQUNBLFdBQUE7QUFBQTtBQUFBO0FBSkssR0FBQSxNQUtBLElBQ0wsYUFBYSxDQUFBLEtBQUEsRUFBTTtBQUFBO0FBQU4sR0FBYixJQUNBLHdCQUF3QixDQUZuQixLQUVtQixDQUZuQixFQUdMO0FBQ0EsV0FBQTtBQUFBO0FBQUE7QUFKSyxHQUFBLE1BS0EsSUFBSSxZQUFZLENBQWhCLEtBQWdCLENBQWhCLEVBQXlCO0FBQzlCLFdBQUE7QUFBQTtBQUFBO0FBREssR0FBQSxNQUVBLElBQUksVUFBVSxDQUFkLEtBQWMsQ0FBZCxFQUF1QjtBQUM1QixXQUFBO0FBQUE7QUFBQTtBQURLLEdBQUEsTUFFQSxJQUFJLE1BQU0sQ0FBVixL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QUksUUFBUSxHQUFHLFdBQVcsQ0FBMUIsU0FBMEIsQ0FBMUI7QUFDQSxNQUFJLEtBQUssR0FBRyxPQUFPLENBQVAsUUFBTyxDQUFQLEdBQUEsRUFBQSxHQUF5QixNQUFNLENBQTNDLFFBQTJDLENBQTNDO0FBRUEsTUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFGLFFBQUEsR0FBQSxpQkFBQSxDQUFYLEtBQVcsQ0FBWDs7QUFFQSxNQUFJLENBQUMsVUFBVSxDQUFmLFNBQWUsQ0FBZixFQUE0QjtBQUMxQixJQUFBLEVBQUUsQ0FBRixVQUFBLENBQWMsSUFBQSxrQkFBQSxDQUFBLElBQUEsRUFBQSxTQUFBLEVBQWQsS0FBYyxDQUFkO0FBQ0Q7QUFWSCxDQUFBO0FBYUEsY0FBYyxDQUFkLEdBQUEsQ0FBa0I7QUFBQTtBQUFsQixFQUErQyxVQUFBLEVBQUQsRUFBTztBQUNuRCxNQUFJLFNBQVMsR0FBUyxFQUFFLENBQUYsS0FBQSxDQUF0QixHQUFzQixFQUF0QjtBQUVBLE1BQUksS0FBSyxHQUFTLFdBQVcsQ0FBN0IsU0FBNkIsQ0FBN0I7QUFFQSxFQUFBLEVBQUUsQ0FBRixRQUFBLEdBQUEscUJBQUEsQ0FBQSxLQUFBO0FBTEYsQ0FBQTtBQVFBLGNBQWMsQ0FBZCxHQUFBLENBQWtCO0FBQUE7QUFBbEIsRUFBbUMsVUFBQSxFQUFELEVBQU87QUFDdkMsTUFBSSxTQUFTLEdBQVMsRUFBRSxDQUFGLEtBQUEsQ0FBdEIsR0FBc0IsRUFBdEI7QUFFQSxNQUFJLEtBQUssR0FBUyxXQUFXLENBQTdCLFNBQTZCLENBQTdCO0FBRUEsRUFBQSxFQUFFLENBQUYsUUFBQSxHQUFBLGlCQUFBLENBQUEsS0FBQTtBQUxGLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0NvbnN0UmVmLCB2YWx1ZUZvclJlZiB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQge1xuICBjaGVjayxcbiAgQ2hlY2tTdHJpbmcsXG4gIENoZWNrU2FmZVN0cmluZyxcbiAgQ2hlY2tOb2RlLFxuICBDaGVja0RvY3VtZW50RnJhZ21lbnQsXG59IGZyb20gJ0BnbGltbWVyL2RlYnVnJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmltcG9ydCB7IEFQUEVORF9PUENPREVTIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDaGVja1JlZmVyZW5jZSB9IGZyb20gJy4vLWRlYnVnLXN0cmlwJztcbmltcG9ydCB7IGlzRW1wdHksIGlzU2FmZVN0cmluZywgaXNGcmFnbWVudCwgaXNOb2RlLCBzaG91bGRDb2VyY2UgfSBmcm9tICcuLi8uLi9kb20vbm9ybWFsaXplJztcbmltcG9ydCBEeW5hbWljVGV4dENvbnRlbnQgZnJvbSAnLi4vLi4vdm0vY29udGVudC90ZXh0JztcbmltcG9ydCB7IENvbnRlbnRUeXBlLCBDdXJyaWVkVHlwZSwgT3AgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFzc2VydEZpbHRlciB9IGZyb20gJy4vdm0nO1xuaW1wb3J0IHsgaGFzSW50ZXJuYWxDb21wb25lbnRNYW5hZ2VyLCBoYXNJbnRlcm5hbEhlbHBlck1hbmFnZXIgfSBmcm9tICdAZ2xpbW1lci9tYW5hZ2VyJztcbmltcG9ydCB7IERFQlVHIH0gZnJvbSAnQGdsaW1tZXIvZW52JztcbmltcG9ydCB7IGlzQ3VycmllZFR5cGUgfSBmcm9tICcuLi8uLi9jdXJyaWVkLXZhbHVlJztcblxuZnVuY3Rpb24gdG9Db250ZW50VHlwZSh2YWx1ZTogdW5rbm93bikge1xuICBpZiAoc2hvdWxkQ29lcmNlKHZhbHVlKSkge1xuICAgIHJldHVybiBDb250ZW50VHlwZS5TdHJpbmc7XG4gIH0gZWxzZSBpZiAoXG4gICAgaXNDdXJyaWVkVHlwZSh2YWx1ZSwgQ3VycmllZFR5cGUuQ29tcG9uZW50KSB8fFxuICAgIGhhc0ludGVybmFsQ29tcG9uZW50TWFuYWdlcih2YWx1ZSBhcyBvYmplY3QpXG4gICkge1xuICAgIHJldHVybiBDb250ZW50VHlwZS5Db21wb25lbnQ7XG4gIH0gZWxzZSBpZiAoXG4gICAgaXNDdXJyaWVkVHlwZSh2YWx1ZSwgQ3VycmllZFR5cGUuSGVscGVyKSB8fFxuICAgIGhhc0ludGVybmFsSGVscGVyTWFuYWdlcih2YWx1ZSBhcyBvYmplY3QpXG4gICkge1xuICAgIHJldHVybiBDb250ZW50VHlwZS5IZWxwZXI7XG4gIH0gZWxzZSBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiBDb250ZW50VHlwZS5TYWZlU3RyaW5nO1xuICB9IGVsc2UgaWYgKGlzRnJhZ21lbnQodmFsdWUpKSB7XG4gICAgcmV0dXJuIENvbnRlbnRUeXBlLkZyYWdtZW50O1xuICB9IGVsc2UgaWYgKGlzTm9kZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gQ29udGVudFR5cGUuTm9kZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQ29udGVudFR5cGUuU3RyaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvRHluYW1pY0NvbnRlbnRUeXBlKHZhbHVlOiB1bmtub3duKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIENvbnRlbnRUeXBlLlN0cmluZztcbiAgfVxuXG4gIGlmIChpc0N1cnJpZWRUeXBlKHZhbHVlLCBDdXJyaWVkVHlwZS5Db21wb25lbnQpIHx8IGhhc0ludGVybmFsQ29tcG9uZW50TWFuYWdlcih2YWx1ZSBhcyBvYmplY3QpKSB7XG4gICAgcmV0dXJuIENvbnRlbnRUeXBlLkNvbXBvbmVudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoXG4gICAgICBERUJVRyAmJlxuICAgICAgIWlzQ3VycmllZFR5cGUodmFsdWUsIEN1cnJpZWRUeXBlLkhlbHBlcikgJiZcbiAgICAgICFoYXNJbnRlcm5hbEhlbHBlck1hbmFnZXIodmFsdWUgYXMgb2JqZWN0KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQXR0ZW1wdGVkIHVzZSBhIGR5bmFtaWMgdmFsdWUgYXMgYSBjb21wb25lbnQgb3IgaGVscGVyLCBidXQgdGhhdCB2YWx1ZSBkaWQgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBjb21wb25lbnQgb3IgaGVscGVyIG1hbmFnZXIuIFRoZSB2YWx1ZSB3YXM6ICR7dmFsdWV9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQ29udGVudFR5cGUuSGVscGVyO1xuICB9XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Db250ZW50VHlwZSwgKHZtKSA9PiB7XG4gIGxldCByZWZlcmVuY2UgPSBjaGVjayh2bS5zdGFjay5wZWVrKCksIENoZWNrUmVmZXJlbmNlKTtcblxuICB2bS5zdGFjay5wdXNoKHRvQ29udGVudFR5cGUodmFsdWVGb3JSZWYocmVmZXJlbmNlKSkpO1xuXG4gIGlmICghaXNDb25zdFJlZihyZWZlcmVuY2UpKSB7XG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0RmlsdGVyKHJlZmVyZW5jZSwgdG9Db250ZW50VHlwZSkpO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR5bmFtaWNDb250ZW50VHlwZSwgKHZtKSA9PiB7XG4gIGxldCByZWZlcmVuY2UgPSBjaGVjayh2bS5zdGFjay5wZWVrKCksIENoZWNrUmVmZXJlbmNlKTtcblxuICB2bS5zdGFjay5wdXNoKHRvRHluYW1pY0NvbnRlbnRUeXBlKHZhbHVlRm9yUmVmKHJlZmVyZW5jZSkpKTtcblxuICBpZiAoIWlzQ29uc3RSZWYocmVmZXJlbmNlKSkge1xuICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydEZpbHRlcihyZWZlcmVuY2UsIHRvRHluYW1pY0NvbnRlbnRUeXBlKSk7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQXBwZW5kSFRNTCwgKHZtKSA9PiB7XG4gIGxldCByZWZlcmVuY2UgPSBjaGVjayh2bS5zdGFjay5wb3AoKSwgQ2hlY2tSZWZlcmVuY2UpO1xuXG4gIGxldCByYXdWYWx1ZSA9IHZhbHVlRm9yUmVmKHJlZmVyZW5jZSk7XG4gIGxldCB2YWx1ZSA9IGlzRW1wdHkocmF3VmFsdWUpID8gJycgOiBTdHJpbmcocmF3VmFsdWUpO1xuXG4gIHZtLmVsZW1lbnRzKCkuYXBwZW5kRHluYW1pY0hUTUwodmFsdWUpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5BcHBlbmRTYWZlSFRNTCwgKHZtKSA9PiB7XG4gIGxldCByZWZlcmVuY2UgPSBjaGVjayh2bS5zdGFjay5wb3AoKSwgQ2hlY2tSZWZlcmVuY2UpO1xuXG4gIGxldCByYXdWYWx1ZSA9IGNoZWNrKHZhbHVlRm9yUmVmKHJlZmVyZW5jZSksIENoZWNrU2FmZVN0cmluZykudG9IVE1MKCk7XG4gIGxldCB2YWx1ZSA9IGlzRW1wdHkocmF3VmFsdWUpID8gJycgOiBjaGVjayhyYXdWYWx1ZSwgQ2hlY2tTdHJpbmcpO1xuXG4gIHZtLmVsZW1lbnRzKCkuYXBwZW5kRHluYW1pY0hUTUwodmFsdWUpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5BcHBlbmRUZXh0LCAodm0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IGNoZWNrKHZtLnN0YWNrLnBvcCgpLCBDaGVja1JlZmVyZW5jZSk7XG5cbiAgbGV0IHJhd1ZhbHVlID0gdmFsdWVGb3JSZWYocmVmZXJlbmNlKTtcbiAgbGV0IHZhbHVlID0gaXNFbXB0eShyYXdWYWx1ZSkgPyAnJyA6IFN0cmluZyhyYXdWYWx1ZSk7XG5cbiAgbGV0IG5vZGUgPSB2bS5lbGVtZW50cygpLmFwcGVuZER5bmFtaWNUZXh0KHZhbHVlKTtcblxuICBpZiAoIWlzQ29uc3RSZWYocmVmZXJlbmNlKSkge1xuICAgIHZtLnVwZGF0ZVdpdGgobmV3IER5bmFtaWNUZXh0Q29udGVudChub2RlLCByZWZlcmVuY2UsIHZhbHVlKSk7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQXBwZW5kRG9jdW1lbnRGcmFnbWVudCwgKHZtKSA9PiB7XG4gIGxldCByZWZlcmVuY2UgPSBjaGVjayh2bS5zdGFjay5wb3AoKSwgQ2hlY2tSZWZlcmVuY2UpO1xuXG4gIGxldCB2YWx1ZSA9IGNoZWNrKHZhbHVlRm9yUmVmKHJlZmVyZW5jZSksIENoZWNrRG9jdW1lbnRGcmFnbWVudCk7XG5cbiAgdm0uZWxlbWVudHMoKS5hcHBlbmREeW5hbWljRnJhZ21lbnQodmFsdWUpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5BcHBlbmROb2RlLCAodm0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IGNoZWNrKHZtLnN0YWNrLnBvcCgpLCBDaGVja1JlZmVyZW5jZSk7XG5cbiAgbGV0IHZhbHVlID0gY2hlY2sodmFsdWVGb3JSZWYocmVmZXJlbmNlKSwgQ2hlY2tOb2RlKTtcblxuICB2bS5lbGVtZW50cygpLmFwcGVuZER5bmFtaWNOb2RlKHZhbHVlKTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==