@gent-js/gent
Version:
template-based data generator.
40 lines (39 loc) • 1.55 kB
JavaScript
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;
}
}