__handlePreprocessor() {
      let currentCaretIndex = this.value.length;
      // Be gentle with Safari
      if (
        this._inputNode &&
        'selectionStart' in this._inputNode &&
        /** @type {HTMLInputElement} */ (this._inputNode)?.type !== 'range'
      ) {
        currentCaretIndex = /** @type {number} */ (this._inputNode.selectionStart);
      }
      const preprocessedValue = this.preprocessor(this.value, {
        ...this.formatOptions,
        currentCaretIndex,
        prevViewValue: this.__prevViewValue,
      });

      if (preprocessedValue === undefined) {
        // Make sure we do no set back original value, so we preserve
        // caret index (== selectionStart/selectionEnd)
        return;
      }
      if (typeof preprocessedValue === 'string') {
        this.value = preprocessedValue;
      } else if (typeof preprocessedValue === 'object') {
        const { viewValue, caretIndex } = preprocessedValue;
        this.value = viewValue;
        if (caretIndex && this._inputNode && 'selectionStart' in this._inputNode) {
          this._inputNode.selectionStart = caretIndex;
          this._inputNode.selectionEnd = caretIndex;
        }
      }
    }
Handle view value and caretIndex, depending on return type of .preprocessor.
@private