load(packages) {
		const self = this;
		const pkgs = [ ];
		const tasks = [];

		if (!Array.isArray(packages))
			packages = [ packages ];

		for (let i = 0; i < packages.length; i++)
			if (!self.state.values[packages[i]]) {
				pkgs.push(packages[i]);
				tasks.push(self.loadPackage(packages[i]));
			}

		return Promise.all(tasks).then(responses => {
			for (let i = 0; i < responses.length; i++)
				self.state.values[pkgs[i]] = responses[i];

			if (responses.length)
				document.dispatchEvent(new CustomEvent('uci-loaded'));

			return pkgs;
		});
	}
Loads the given UCI configurations from the remote `ubus` api.

Loaded configurations are cached and only loaded once. Subsequent
load operations of the same configurations will return the cached
data.

To force reloading a configuration, it has to be unloaded with
{@link LuCI.uci#unload uci.unload()} first.

@param {string|string[]} packages
The name of the configuration or an array of configuration
names to load.

@returns {Promise<string[]>}
Returns a promise resolving to the names of the configurations
that have been successfully loaded.