list(opts) {
		const res = [];
		opts = opts || {};

		const types =
			opts.types != null ? (isString(opts.types) ? [opts.types] : opts.types) : null;
		const includes =
			opts.includes != null
				? isString(opts.includes)
					? [opts.includes]
					: opts.includes
				: null;
		const excludes =
			opts.excludes != null
				? isString(opts.excludes)
					? [opts.excludes]
					: opts.excludes
				: null;

		this.store.forEach(metric => {
			if (types && !types.some(type => metric.type == type)) return;

			if (includes && !includes.some(pattern => match(metric.name, pattern))) return;

			if (excludes && !excludes.every(pattern => !match(metric.name, pattern))) return;

			res.push(metric.toObject());
		});

		return res;
	}
List all registered metrics with labels & values.

@param {Object?} opts
@param {String|Array<String>|null} opts.types
@param {String|Array<String>|null} opts.includes
@param {String|Array<String>|null} opts.excludes