"use strict"; import {Utils} from "../../Utils/Utils.ecma.js"; import {Check} from "../../Utils/Check.ecma.js"; import {FormatModule} from "../FormatModule.ecma.js"; /** * @typedef {import("../FormatModule.ecma.js").FormatModule} FormatModule */ /** * @class RandomFormat * @constructor * @param {!FormatModule} format * @returns {void} * @access public * @static */ export const RandomFormat = (function(){ /** * @constructs RandomFormat * @param {!FormatModule} format * @returns {void} * @access private * @static */ const RandomFormat = function(format){ /** @type {RandomFormat} */ const self = this; /** * @returns {void} * @access private */ const constructor = () => { format.modes.rand = format.modes.random = self.get; format.checks.rand = format.checks.random = self.check; }; /** * @param {!(string|Array.)} inputs * @param {!Object.} [shared = {}] * @param {!Array.} [fragments = []] * @returns {string} * @access public */ this.get = (inputs, shared = {}, fragments = []) => format.execute(Utils.get_random( Check.is_string(inputs) ? inputs.split("|") : Check.is_array(inputs[0]) ? inputs[0] : []), shared, fragments); /** * @param {!string} string * @param {!(string|Array.)} inputs * @param {!Object.} [shared = {}] * @param {!Array.} [fragments = []] * @returns {number} * @access public */ this.check = (string, inputs, shared = {}, fragments = []) => { /** @type {boolean} */ let has_empty = false; for(const option of ( Check.is_string(inputs) ? inputs.split("|") : Check.is_array(inputs[0]) ? inputs[0] : [])){ if(!option){ has_empty = true; continue; }; if(/\{[^\{\}]+\}/.test(format.set_fragments_level(option, fragments))) return format.get_check_length(string, [option], shared, fragments, false); /** @type {number} */ let length = FormatModule.prepare_result(string, option, shared); if(length != -1) return length; }; return has_empty ? 0 : -1; }; constructor(); }; return RandomFormat; })();