{"version":3,"file":"_randomArray.mjs","names":[],"sources":["../../src/internal/_randomArray.ts"],"sourcesContent":["import type { OpenApi } from \"@typia/interface\";\n\nimport { _isUniqueItems } from \"./_isUniqueItems\";\nimport { _randomInteger } from \"./_randomInteger\";\n\nconst DEFAULT_MIN_ITEMS = 1;\nconst DEFAULT_RANGE = 5;\nconst DEFAULT_RECURSIVE_RANGE = 2;\n\nexport const _randomArray = <T>(\n  props: Omit<OpenApi.IJsonSchema.IArray, \"items\"> & {\n    element: (index: number, count: number) => T;\n    recursive?: boolean;\n  },\n) => {\n  const defaultMinimum: number =\n    props.recursive === true ? 0 : DEFAULT_MIN_ITEMS;\n  const minimum: number =\n    props.minItems ??\n    Math.min(props.maxItems ?? defaultMinimum, defaultMinimum);\n  const count: number = _randomInteger({\n    type: \"integer\",\n    minimum,\n    maximum:\n      props.maxItems ??\n      minimum +\n        (props.recursive === true ? DEFAULT_RECURSIVE_RANGE : DEFAULT_RANGE),\n  });\n  if (props.uniqueItems !== true)\n    return new Array(count).fill(null).map((_, i) => props.element(i, count));\n  const elements: T[] = [];\n  const maximumAttempts: number = count * 100 + 1000;\n  for (let attempts = 0; elements.length !== count; attempts++) {\n    if (attempts === maximumAttempts)\n      throw new Error(\n        \"Unable to generate enough unique items; the element domain may be too small.\",\n      );\n    const candidate: T = props.element(elements.length, count);\n    if (elements.every((element) => _isUniqueItems([element, candidate])))\n      elements.push(candidate);\n  }\n  return elements;\n};\n"],"mappings":";;;AAKA,MAAM,oBAAoB;AAC1B,MAAM,gBAAgB;AACtB,MAAM,0BAA0B;AAEhC,MAAa,gBACX,UAIG;CACH,MAAM,iBACJ,MAAM,cAAc,OAAO,IAAI;CACjC,MAAM,UACJ,MAAM,YACN,KAAK,IAAI,MAAM,YAAY,gBAAgB,cAAc;CAC3D,MAAM,QAAgB,eAAe;EACnC,MAAM;EACN;EACA,SACE,MAAM,YACN,WACG,MAAM,cAAc,OAAO,0BAA0B;CAC5D,CAAC;CACD,IAAI,MAAM,gBAAgB,MACxB,OAAO,IAAI,MAAM,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC;CAC1E,MAAM,WAAgB,CAAC;CACvB,MAAM,kBAA0B,QAAQ,MAAM;CAC9C,KAAK,IAAI,WAAW,GAAG,SAAS,WAAW,OAAO,YAAY;EAC5D,IAAI,aAAa,iBACf,MAAM,IAAI,MACR,8EACF;EACF,MAAM,YAAe,MAAM,QAAQ,SAAS,QAAQ,KAAK;EACzD,IAAI,SAAS,OAAO,YAAY,eAAe,CAAC,SAAS,SAAS,CAAC,CAAC,GAClE,SAAS,KAAK,SAAS;CAC3B;CACA,OAAO;AACT"}