_parseContentType() {
	    if (this.bytesExpected === 0) {
	      this._parser = new DummyParser(this, this.options);
	      return;
	    }

	    if (!this.headers['content-type']) {
	      this._error(
	        new FormidableError(
	          'bad content-type header, no content-type',
	          errors.missingContentType,
	          400,
	        ),
	      );
	      return;
	    }

	    const results = [];
	    new DummyParser(this, this.options);

	    // eslint-disable-next-line no-plusplus
	    for (let idx = 0; idx < this._plugins.length; idx++) {
	      const plugin = this._plugins[idx];

	      let pluginReturn = null;

	      try {
	        pluginReturn = plugin(this, this.options) || this;
	      } catch (err) {
	        // directly throw from the `form.parse` method;
	        // there is no other better way, except a handle through options
	        const error = new FormidableError(
	          `plugin on index ${idx} failed with: ${err.message}`,
	          errors.pluginFailed,
	          500,
	        );
	        error.idx = idx;
	        throw error;
	      }

	      Object.assign(this, pluginReturn);

	      // todo: use Set/Map and pass plugin name instead of the `idx` index
	      this.emit('plugin', idx, pluginReturn);
	      results.push(pluginReturn);
	    }

	    this.emit('pluginsResults', results);

	    // NOTE: probably not needed, because we check options.enabledPlugins in the constructor
	    // if (results.length === 0 /* && results.length !== this._plugins.length */) {
	    //   this._error(
	    //     new Error(
	    //       `bad content-type header, unknown content-type: ${this.headers['content-type']}`,
	    //     ),
	    //   );
	    // }
	  }
Compose querystring to append to req.url

@api private