src/grammar/expandobject.js
import {list} from '@iterable-iterator/list';
import _expandproduction from './_expandproduction.js';
/**
* @param {Record<string,any>} productions
* @return {IterableIterator<[any,Map<any,any>]>}
*/
function* _expandproductions(productions) {
for (const key in productions) {
if (Object.prototype.hasOwnProperty.call(productions, key)) {
yield [key, list(_expandproduction(productions[key]))];
}
}
}
/**
* @param {object} object
* @return {IterableIterator<[any,Map<any,any>]>}
*/
function* _expandobject(object) {
for (const nonterminal in object) {
if (Object.prototype.hasOwnProperty.call(object, nonterminal)) {
yield [nonterminal, new Map(_expandproductions(object[nonterminal]))];
}
}
}
export default function expandobject(object) {
return new Map(_expandobject(object));
}