JsExpression.js 840 B

123456789101112131415161718192021222324252627282930
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.JsExpression = void 0;
  4. class JsExpression {
  5. constructor(expression) {
  6. this.expression = expression;
  7. this._wasUsed = false;
  8. this._listeners = [];
  9. }
  10. get wasUsed() {
  11. return this._wasUsed;
  12. }
  13. use() {
  14. if (this._wasUsed)
  15. return this._expression;
  16. this._wasUsed = true;
  17. const expression = (this._expression = this.expression());
  18. for (const listener of this._listeners)
  19. listener(expression);
  20. return expression;
  21. }
  22. chain(use) {
  23. return new JsExpression(() => use(this.use()));
  24. }
  25. addListener(listener) {
  26. this._listeners.push(listener);
  27. }
  28. }
  29. exports.JsExpression = JsExpression;
  30. //# sourceMappingURL=JsExpression.js.map