Making the registry iterable. See #1918. (#1919)

This commit is contained in:
Joel Denning 2019-04-07 11:07:28 -06:00 committed by Guy Bedford
parent cc44badb95
commit 984dcd1c0f
3 changed files with 59 additions and 1 deletions

View File

@ -87,3 +87,19 @@ System.set('http://site.com/normalized/module/name.js', {
`module` is an object of names to set as the named exports.
If `module` is an existing Module Namespace, it will be used by reference.
#### System.entries() -> Array
Type: `Function`
Allows you to retrieve all modules in the System registry. Each value will be an array with two values: a key and the module. Also available
at `System[Symbol.iterator]`.
```js
System.entries().forEach((key, value) => {
console.log(entry); // ['http://localhost/path-to-file.js', {exportName: 'exportedValue'}]
});
for (let entry of System) {
console.log(entry); // ['http://localhost/path-to-file.js', {exportName: 'exportedValue'}]
}
```

View File

@ -58,4 +58,25 @@ systemJSPrototype.delete = function (id) {
depLoad.i.splice(importerIndex, 1);
});
return delete this[REGISTRY][id];
};
};
systemJSPrototype.entries = function () {
const registry = this[REGISTRY];
return Object.keys(registry).map(function (key) {
return [key, registry[key].n];
});
}
if (typeof Symbol !== 'undefined') {
systemJSPrototype[Symbol.iterator] = function () {
const registry = this[REGISTRY];
const keys = Object.keys(registry);
let index = 0;
return {
next() {
const key = keys[index++];
return { done: index > keys.length, value: key && [key, registry[key].n] };
}
};
}
}

View File

@ -137,6 +137,27 @@ describe('Core API', function () {
assert(resolveReturnValue instanceof Promise);
assert.equal(resolvedX, 'http://x');
});
it('Supports iteration', async function () {
loader.set('h', {a: 'b'});
await loader.import('h');
let foundH = false;
for (let entry of loader) {
if (entry[0] === 'h' && entry[1].a === 'b') {
foundH = true;
}
}
assert(foundH);
});
it('Supports System.entries', async function () {
loader.set('i', {a: 'b'});
await loader.import('i');
assert(loader.entries().some(entry => entry[0] === 'i' && entry[1].a === 'b'));
})
});
});