UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

135 lines (127 loc) 13.5 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 */ , vm => { let reference = vm.stack.peek(); vm.stack.push(toContentType(valueForRef(reference))); if (!isConstRef(reference)) { vm.updateWith(new AssertFilter(reference, toContentType)); } }); APPEND_OPCODES.add(106 /* DynamicContentType */ , vm => { let reference = vm.stack.peek(); vm.stack.push(toDynamicContentType(valueForRef(reference))); if (!isConstRef(reference)) { vm.updateWith(new AssertFilter(reference, toDynamicContentType)); } }); APPEND_OPCODES.add(43 /* AppendHTML */ , vm => { let reference = vm.stack.pop(); let rawValue = valueForRef(reference); let value = isEmpty(rawValue) ? '' : String(rawValue); vm.elements().appendDynamicHTML(value); }); APPEND_OPCODES.add(44 /* AppendSafeHTML */ , vm => { let reference = vm.stack.pop(); let rawValue = valueForRef(reference).toHTML(); let value = isEmpty(rawValue) ? '' : rawValue; vm.elements().appendDynamicHTML(value); }); APPEND_OPCODES.add(47 /* AppendText */ , vm => { let reference = vm.stack.pop(); let rawValue = valueForRef(reference); let value = isEmpty(rawValue) ? '' : String(rawValue); let node = vm.elements().appendDynamicText(value); if (!isConstRef(reference)) { vm.updateWith(new DynamicTextContent(node, reference, value)); } }); APPEND_OPCODES.add(45 /* AppendDocumentFragment */ , vm => { let reference = vm.stack.pop(); let value = valueForRef(reference); vm.elements().appendDynamicFragment(value); }); APPEND_OPCODES.add(46 /* AppendNode */ , vm => { let reference = vm.stack.pop(); let value = valueForRef(reference); vm.elements().appendDynamicNode(value); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL2NvbXBpbGVkL29wY29kZXMvY29udGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLFVBQVQsRUFBcUIsV0FBckIsUUFBd0Msb0JBQXhDO0FBUUEsU0FBUyxRQUFULFFBQXlCLGVBQXpCO0FBRUEsU0FBUyxjQUFULFFBQStCLGVBQS9CO0FBRUEsU0FBUyxPQUFULEVBQWtCLFlBQWxCLEVBQWdDLFVBQWhDLEVBQTRDLE1BQTVDLEVBQW9ELFlBQXBELFFBQXdFLHFCQUF4RTtBQUNBLE9BQU8sa0JBQVAsTUFBK0IsdUJBQS9CO0FBRUEsU0FBUyxZQUFULFFBQTZCLE1BQTdCO0FBQ0EsU0FBUywyQkFBVCxFQUFzQyx3QkFBdEMsUUFBc0Usa0JBQXRFO0FBQ0EsU0FBUyxLQUFULFFBQXNCLGNBQXRCO0FBQ0EsU0FBUyxhQUFULFFBQThCLHFCQUE5Qjs7QUFFQSxTQUFTLGFBQVQsQ0FBdUIsS0FBdkIsRUFBcUM7QUFDbkMsTUFBSSxZQUFZLENBQUMsS0FBRCxDQUFoQixFQUF5QjtBQUN2QixXQUFBO0FBQUE7QUFBQTtBQUNELEdBRkQsTUFFTyxJQUNMLGFBQWEsQ0FBQyxLQUFELEVBQU07QUFBQTtBQUFOLEdBQWIsSUFDQSwyQkFBMkIsQ0FBQyxLQUFELENBRnRCLEVBR0w7QUFDQSxXQUFBO0FBQUE7QUFBQTtBQUNELEdBTE0sTUFLQSxJQUNMLGFBQWEsQ0FBQyxLQUFELEVBQU07QUFBQTtBQUFOLEdBQWIsSUFDQSx3QkFBd0IsQ0FBQyxLQUFELENBRm5CLEVBR0w7QUFDQSxXQUFBO0FBQUE7QUFBQTtBQUNELEdBTE0sTUFLQSxJQUFJLFlBQVksQ0FBQyxLQUFELENBQWhCLEVBQXlCO0FBQzlCLFdBQUE7QUFBQTtBQUFBO0FBQ0QsR0FGTSxNQUVBLElBQUksVUFBVSxDQUFDLEtBQUQsQ0FBZCxFQUF1QjtBQUM1QixXQUFBO0FBQUE7QUFBQTtBQUNELEdB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QUFFQSxNQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsU0FBRCxDQUExQjtBQUNBLE1BQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFELENBQVAsR0FBb0IsRUFBcEIsR0FBeUIsTUFBTSxDQUFDLFFBQUQsQ0FBM0M7QUFFQSxNQUFJLElBQUksR0FBRyxFQUFFLENBQUMsUUFBSCxHQUFjLGlCQUFkLENBQWdDLEtBQWhDLENBQVg7O0FBRUEsTUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFELENBQWYsRUFBNEI7QUFDMUIsSUFBQSxFQUFFLENBQUMsVUFBSCxDQUFjLElBQUksa0JBQUosQ0FBdUIsSUFBdkIsRUFBNkIsU0FBN0IsRUFBd0MsS0FBeEMsQ0FBZDtBQUNEO0FBQ0YsQ0FYRDtBQWFBLGNBQWMsQ0FBQyxHQUFmLENBQWtCO0FBQUE7QUFBbEIsRUFBK0MsRUFBRCxJQUFPO0FBQ25ELE1BQUksU0FBUyxHQUFTLEVBQUUsQ0FBQyxLQUFILENBQVMsR0FBVCxFQUF0QjtBQUVBLE1BQUksS0FBSyxHQUFTLFdBQVcsQ0FBQyxTQUFELENBQTdCO0FBRUEsRUFBQSxFQUFFLENBQUMsUUFBSCxHQUFjLHFCQUFkLENBQW9DLEtBQXBDO0FBQ0QsQ0FORDtBQVFBLGNBQWMsQ0FBQyxHQUFmLENBQWtCO0FBQUE7QUFBbEIsRUFBbUMsRUFBRCxJQUFPO0FBQ3ZDLE1BQUksU0FBUyxHQUFTLEVBQUUsQ0FBQyxLQUFILENBQVMsR0FBVCxFQUF0QjtBQUVBLE1BQUksS0FBSyxHQUFTLFdBQVcsQ0FBQyxTQUFELENBQTdCO0FBRUEsRUFBQSxFQUFFLENBQUMsUUFBSCxHQUFjLGlCQUFkLENBQWdDLEtBQWhDO0FBQ0QsQ0FORCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQ29uc3RSZWYsIHZhbHVlRm9yUmVmIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7XG4gIGNoZWNrLFxuICBDaGVja1N0cmluZyxcbiAgQ2hlY2tTYWZlU3RyaW5nLFxuICBDaGVja05vZGUsXG4gIENoZWNrRG9jdW1lbnRGcmFnbWVudCxcbn0gZnJvbSAnQGdsaW1tZXIvZGVidWcnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IENoZWNrUmVmZXJlbmNlIH0gZnJvbSAnLi8tZGVidWctc3RyaXAnO1xuaW1wb3J0IHsgaXNFbXB0eSwgaXNTYWZlU3RyaW5nLCBpc0ZyYWdtZW50LCBpc05vZGUsIHNob3VsZENvZXJjZSB9IGZyb20gJy4uLy4uL2RvbS9ub3JtYWxpemUnO1xuaW1wb3J0IER5bmFtaWNUZXh0Q29udGVudCBmcm9tICcuLi8uLi92bS9jb250ZW50L3RleHQnO1xuaW1wb3J0IHsgQ29udGVudFR5cGUsIEN1cnJpZWRUeXBlLCBPcCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQXNzZXJ0RmlsdGVyIH0gZnJvbSAnLi92bSc7XG5pbXBvcnQgeyBoYXNJbnRlcm5hbENvbXBvbmVudE1hbmFnZXIsIGhhc0ludGVybmFsSGVscGVyTWFuYWdlciB9IGZyb20gJ0BnbGltbWVyL21hbmFnZXInO1xuaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgaXNDdXJyaWVkVHlwZSB9IGZyb20gJy4uLy4uL2N1cnJpZWQtdmFsdWUnO1xuXG5mdW5jdGlvbiB0b0NvbnRlbnRUeXBlKHZhbHVlOiB1bmtub3duKSB7XG4gIGlmIChzaG91bGRDb2VyY2UodmFsdWUpKSB7XG4gICAgcmV0dXJuIENvbnRlbnRUeXBlLlN0cmluZztcbiAgfSBlbHNlIGlmIChcbiAgICBpc0N1cnJpZWRUeXBlKHZhbHVlLCBDdXJyaWVkVHlwZS5Db21wb25lbnQpIHx8XG4gICAgaGFzSW50ZXJuYWxDb21wb25lbnRNYW5hZ2VyKHZhbHVlIGFzIG9iamVjdClcbiAgKSB7XG4gICAgcmV0dXJuIENvbnRlbnRUeXBlLkNvbXBvbmVudDtcbiAgfSBlbHNlIGlmIChcbiAgICBpc0N1cnJpZWRUeXBlKHZhbHVlLCBDdXJyaWVkVHlwZS5IZWxwZXIpIHx8XG4gICAgaGFzSW50ZXJuYWxIZWxwZXJNYW5hZ2VyKHZhbHVlIGFzIG9iamVjdClcbiAgKSB7XG4gICAgcmV0dXJuIENvbnRlbnRUeXBlLkhlbHBlcjtcbiAgfSBlbHNlIGlmIChpc1NhZmVTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIENvbnRlbnRUeXBlLlNhZmVTdHJpbmc7XG4gIH0gZWxzZSBpZiAoaXNGcmFnbWVudCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gQ29udGVudFR5cGUuRnJhZ21lbnQ7XG4gIH0gZWxzZSBpZiAoaXNOb2RlKHZhbHVlKSkge1xuICAgIHJldHVybiBDb250ZW50VHlwZS5Ob2RlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBDb250ZW50VHlwZS5TdHJpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9EeW5hbWljQ29udGVudFR5cGUodmFsdWU6IHVua25vd24pIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gQ29udGVudFR5cGUuU3RyaW5nO1xuICB9XG5cbiAgaWYgKGlzQ3VycmllZFR5cGUodmFsdWUsIEN1cnJpZWRUeXBlLkNvbXBvbmVudCkgfHwgaGFzSW50ZXJuYWxDb21wb25lbnRNYW5hZ2VyKHZhbHVlIGFzIG9iamVjdCkpIHtcbiAgICByZXR1cm4gQ29udGVudFR5cGUuQ29tcG9uZW50O1xuICB9IGVsc2Uge1xuICAgIGlmIChcbiAgICAgIERFQlVHICYmXG4gICAgICAhaXNDdXJyaWVkVHlwZSh2YWx1ZSwgQ3VycmllZFR5cGUuSGVscGVyKSAmJlxuICAgICAgIWhhc0ludGVybmFsSGVscGVyTWFuYWdlcih2YWx1ZSBhcyBvYmplY3QpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBdHRlbXB0ZWQgdXNlIGEgZHluYW1pYyB2YWx1ZSBhcyBhIGNvbXBvbmVudCBvciBoZWxwZXIsIGJ1dCB0aGF0IHZhbHVlIGRpZCBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGNvbXBvbmVudCBvciBoZWxwZXIgbWFuYWdlci4gVGhlIHZhbHVlIHdhczogJHt2YWx1ZX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBDb250ZW50VHlwZS5IZWxwZXI7XG4gIH1cbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbnRlbnRUeXBlLCAodm0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IGNoZWNrKHZtLnN0YWNrLnBlZWsoKSwgQ2hlY2tSZWZlcmVuY2UpO1xuXG4gIHZtLnN0YWNrLnB1c2godG9Db250ZW50VHlwZSh2YWx1ZUZvclJlZihyZWZlcmVuY2UpKSk7XG5cbiAgaWYgKCFpc0NvbnN0UmVmKHJlZmVyZW5jZSkpIHtcbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnRGaWx0ZXIocmVmZXJlbmNlLCB0b0NvbnRlbnRUeXBlKSk7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRHluYW1pY0NvbnRlbnRUeXBlLCAodm0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IGNoZWNrKHZtLnN0YWNrLnBlZWsoKSwgQ2hlY2tSZWZlcmVuY2UpO1xuXG4gIHZtLnN0YWNrLnB1c2godG9EeW5hbWljQ29udGVudFR5cGUodmFsdWVGb3JSZWYocmVmZXJlbmNlKSkpO1xuXG4gIGlmICghaXNDb25zdFJlZihyZWZlcmVuY2UpKSB7XG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0RmlsdGVyKHJlZmVyZW5jZSwgdG9EeW5hbWljQ29udGVudFR5cGUpKTtcbiAgfVxufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5BcHBlbmRIVE1MLCAodm0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IGNoZWNrKHZtLnN0YWNrLnBvcCgpLCBDaGVja1JlZmVyZW5jZSk7XG5cbiAgbGV0IHJhd1ZhbHVlID0gdmFsdWVGb3JSZWYocmVmZXJlbmNlKTtcbiAgbGV0IHZhbHVlID0gaXNFbXB0eShyYXdWYWx1ZSkgPyAnJyA6IFN0cmluZyhyYXdWYWx1ZSk7XG5cbiAgdm0uZWxlbWVudHMoKS5hcHBlbmREeW5hbWljSFRNTCh2YWx1ZSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkFwcGVuZFNhZmVIVE1MLCAodm0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IGNoZWNrKHZtLnN0YWNrLnBvcCgpLCBDaGVja1JlZmVyZW5jZSk7XG5cbiAgbGV0IHJhd1ZhbHVlID0gY2hlY2sodmFsdWVGb3JSZWYocmVmZXJlbmNlKSwgQ2hlY2tTYWZlU3RyaW5nKS50b0hUTUwoKTtcbiAgbGV0IHZhbHVlID0gaXNFbXB0eShyYXdWYWx1ZSkgPyAnJyA6IGNoZWNrKHJhd1ZhbHVlLCBDaGVja1N0cmluZyk7XG5cbiAgdm0uZWxlbWVudHMoKS5hcHBlbmREeW5hbWljSFRNTCh2YWx1ZSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkFwcGVuZFRleHQsICh2bSkgPT4ge1xuICBsZXQgcmVmZXJlbmNlID0gY2hlY2sodm0uc3RhY2sucG9wKCksIENoZWNrUmVmZXJlbmNlKTtcblxuICBsZXQgcmF3VmFsdWUgPSB2YWx1ZUZvclJlZihyZWZlcmVuY2UpO1xuICBsZXQgdmFsdWUgPSBpc0VtcHR5KHJhd1ZhbHVlKSA/ICcnIDogU3RyaW5nKHJhd1ZhbHVlKTtcblxuICBsZXQgbm9kZSA9IHZtLmVsZW1lbnRzKCkuYXBwZW5kRHluYW1pY1RleHQodmFsdWUpO1xuXG4gIGlmICghaXNDb25zdFJlZihyZWZlcmVuY2UpKSB7XG4gICAgdm0udXBkYXRlV2l0aChuZXcgRHluYW1pY1RleHRDb250ZW50KG5vZGUsIHJlZmVyZW5jZSwgdmFsdWUpKTtcbiAgfVxufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5BcHBlbmREb2N1bWVudEZyYWdtZW50LCAodm0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IGNoZWNrKHZtLnN0YWNrLnBvcCgpLCBDaGVja1JlZmVyZW5jZSk7XG5cbiAgbGV0IHZhbHVlID0gY2hlY2sodmFsdWVGb3JSZWYocmVmZXJlbmNlKSwgQ2hlY2tEb2N1bWVudEZyYWdtZW50KTtcblxuICB2bS5lbGVtZW50cygpLmFwcGVuZER5bmFtaWNGcmFnbWVudCh2YWx1ZSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkFwcGVuZE5vZGUsICh2bSkgPT4ge1xuICBsZXQgcmVmZXJlbmNlID0gY2hlY2sodm0uc3RhY2sucG9wKCksIENoZWNrUmVmZXJlbmNlKTtcblxuICBsZXQgdmFsdWUgPSBjaGVjayh2YWx1ZUZvclJlZihyZWZlcmVuY2UpLCBDaGVja05vZGUpO1xuXG4gIHZtLmVsZW1lbnRzKCkuYXBwZW5kRHluYW1pY05vZGUodmFsdWUpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9