UNPKG

@gent-js/gent

Version:

template-based data generator.

40 lines (39 loc) 1.55 kB
import { WeightedItemFeeder } from "../../common/weightedItemFeeder.js"; import { stampDocument, } from "../../document/index.js"; import { AbstractJsonable } from "../abstractJsonable.js"; import { transformJsonableIntoJsonValue } from "../stringifyJsonable.js"; export class ArrayJsonable extends AbstractJsonable { lengthContent; type = "array"; weightedItemFeeder; constructor(items, lengthContent, probability, weight) { super(probability, weight); this.lengthContent = lengthContent; const weightedItemFeeder = new WeightedItemFeeder(); items.forEach((item) => { if (item instanceof AbstractJsonable) { weightedItemFeeder.addItem(item, item.weight); } else { weightedItemFeeder.addItem(item); } }); this.weightedItemFeeder = weightedItemFeeder; } toJSONImpl(keyOrIndex, context) { const jsonValues = []; const length = Number.parseInt(stampDocument(this.lengthContent, context)); if (!Number.isNaN(length) && length > 0) { for (let i = 0; i < length; i++) { const item = this.weightedItemFeeder.getItem(); if (item !== undefined) { const jsonValue = transformJsonableIntoJsonValue(item, i, context); if (jsonValue !== undefined) { jsonValues.push(jsonValue); } } } } return jsonValues; } }