source(dependencyTemplates, outputOptions, requestShortener) {
		const hashDigest = this.getHashDigest(dependencyTemplates);
		if(this._cachedSource && this._cachedSource.hash === hashDigest) {
			return this._cachedSource.source;
		}

		if(!this._source) {
			return new RawSource("throw new Error('No source available');");
		}

		const source = new ReplaceSource(this._source);
		this._cachedSource = {
			source: source,
			hash: hashDigest
		};

		this.sourceBlock(this, [], dependencyTemplates, source, outputOptions, requestShortener);
		return new CachedSource(source);
	}
Split all variables up into chunks of unique names.
e.g. imagine you have the following variable names that need to be injected:
[foo, bar, baz, foo, some, more]
we can not inject "foo" twice, therefore we just make two IIFEs like so:
(function(foo, bar, baz){
  (function(foo, some, more){
    ...
  }(...));
}(...));

"splitVariablesInUniqueNamedChunks" splits the variables shown above up to this:
[[foo, bar, baz], [foo, some, more]]