@grnsft/if
Version:
Impact Framework
48 lines • 6.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RandIntGenerator = void 0;
const utils_1 = require("@grnsft/if-core/utils");
const config_1 = require("../../../config");
const { ConfigError } = utils_1.ERRORS;
const { MISSING_CONFIG, MISSING_MIN_MAX, INVALID_MIN_MAX, INVALID_NAME } = config_1.STRINGS;
const RandIntGenerator = (name, config) => {
const next = () => ({
[validatedName]: generateRandInt(getFieldToPopulate()),
});
const validateName = (name) => {
if (!name || name.trim() === '') {
throw new ConfigError(INVALID_NAME);
}
return name;
};
const validateConfig = (config) => {
if (!config || Object.keys(config).length === 0) {
throw new ConfigError(MISSING_CONFIG);
}
if (!config.min || !config.max) {
throw new ConfigError(MISSING_MIN_MAX);
}
if (config.min >= config.max) {
throw new ConfigError(INVALID_MIN_MAX(validatedName));
}
return { min: config.min, max: config.max };
};
const validatedName = validateName(name);
const validatedConfig = validateConfig(config);
const getFieldToPopulate = () => ({
name: validatedName,
min: validatedConfig.min,
max: validatedConfig.max,
});
const generateRandInt = (randIntGenerator) => {
const randomNumber = Math.random();
const scaledNumber = randomNumber * (randIntGenerator.max - randIntGenerator.min) +
randIntGenerator.min;
return Math.trunc(scaledNumber);
};
return {
next,
};
};
exports.RandIntGenerator = RandIntGenerator;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZC1pbnQtZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2lmLXJ1bi9idWlsdGlucy9tb2NrLW9ic2VydmF0aW9ucy9oZWxwZXJzL3JhbmQtaW50LWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBNkM7QUFHN0MsNENBQXdDO0FBSXhDLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxjQUFNLENBQUM7QUFFN0IsTUFBTSxFQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBQyxHQUNwRSxnQkFBTyxDQUFDO0FBRUgsTUFBTSxnQkFBZ0IsR0FBRyxDQUM5QixJQUFZLEVBQ1osTUFBb0IsRUFDVCxFQUFFO0lBQ2IsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsQixDQUFDLGFBQWEsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0tBQ3ZELENBQUMsQ0FBQztJQUVILE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBbUIsRUFBVSxFQUFFO1FBQ25ELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMvQixNQUFNLElBQUksV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQW9CLEVBQThCLEVBQUU7UUFDMUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDL0MsTUFBTSxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN2QztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUM5QixNQUFNLElBQUksV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDNUIsTUFBTSxJQUFJLFdBQVcsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUVELE9BQU8sRUFBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFL0MsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLElBQUksRUFBRSxhQUFhO1FBQ25CLEdBQUcsRUFBRSxlQUFlLENBQUMsR0FBRztRQUN4QixHQUFHLEVBQUUsZUFBZSxDQUFDLEdBQUc7S0FDekIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsZ0JBQXdDLEVBQ2hDLEVBQUU7UUFDVixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkMsTUFBTSxZQUFZLEdBQ2hCLFlBQVksR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7WUFDNUQsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO1FBRXZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsSUFBSTtLQUNMLENBQUM7QUFDSixDQUFDLENBQUM7QUF2RFcsUUFBQSxnQkFBZ0Isb0JBdUQzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RVJST1JTfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdXRpbHMnO1xuaW1wb3J0IHtSYW5kSW50R2VuZXJhdG9yUGFyYW1zLCBDb25maWdQYXJhbXN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vLi4vLi4vY29uZmlnJztcblxuaW1wb3J0IHtHZW5lcmF0b3J9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5jb25zdCB7Q29uZmlnRXJyb3J9ID0gRVJST1JTO1xuXG5jb25zdCB7TUlTU0lOR19DT05GSUcsIE1JU1NJTkdfTUlOX01BWCwgSU5WQUxJRF9NSU5fTUFYLCBJTlZBTElEX05BTUV9ID1cbiAgU1RSSU5HUztcblxuZXhwb3J0IGNvbnN0IFJhbmRJbnRHZW5lcmF0b3IgPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgY29uZmlnOiBDb25maWdQYXJhbXNcbik6IEdlbmVyYXRvciA9PiB7XG4gIGNvbnN0IG5leHQgPSAoKSA9PiAoe1xuICAgIFt2YWxpZGF0ZWROYW1lXTogZ2VuZXJhdGVSYW5kSW50KGdldEZpZWxkVG9Qb3B1bGF0ZSgpKSxcbiAgfSk7XG5cbiAgY29uc3QgdmFsaWRhdGVOYW1lID0gKG5hbWU6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghbmFtZSB8fCBuYW1lLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBDb25maWdFcnJvcihJTlZBTElEX05BTUUpO1xuICAgIH1cblxuICAgIHJldHVybiBuYW1lO1xuICB9O1xuXG4gIGNvbnN0IHZhbGlkYXRlQ29uZmlnID0gKGNvbmZpZzogQ29uZmlnUGFyYW1zKToge21pbjogbnVtYmVyOyBtYXg6IG51bWJlcn0gPT4ge1xuICAgIGlmICghY29uZmlnIHx8IE9iamVjdC5rZXlzKGNvbmZpZykubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoTUlTU0lOR19DT05GSUcpO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLm1pbiB8fCAhY29uZmlnLm1heCkge1xuICAgICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKE1JU1NJTkdfTUlOX01BWCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5taW4gPj0gY29uZmlnLm1heCkge1xuICAgICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKElOVkFMSURfTUlOX01BWCh2YWxpZGF0ZWROYW1lKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHttaW46IGNvbmZpZy5taW4sIG1heDogY29uZmlnLm1heH07XG4gIH07XG5cbiAgY29uc3QgdmFsaWRhdGVkTmFtZSA9IHZhbGlkYXRlTmFtZShuYW1lKTtcbiAgY29uc3QgdmFsaWRhdGVkQ29uZmlnID0gdmFsaWRhdGVDb25maWcoY29uZmlnKTtcblxuICBjb25zdCBnZXRGaWVsZFRvUG9wdWxhdGUgPSAoKSA9PiAoe1xuICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgbWluOiB2YWxpZGF0ZWRDb25maWcubWluLFxuICAgIG1heDogdmFsaWRhdGVkQ29uZmlnLm1heCxcbiAgfSk7XG5cbiAgY29uc3QgZ2VuZXJhdGVSYW5kSW50ID0gKFxuICAgIHJhbmRJbnRHZW5lcmF0b3I6IFJhbmRJbnRHZW5lcmF0b3JQYXJhbXNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCByYW5kb21OdW1iZXIgPSBNYXRoLnJhbmRvbSgpO1xuICAgIGNvbnN0IHNjYWxlZE51bWJlciA9XG4gICAgICByYW5kb21OdW1iZXIgKiAocmFuZEludEdlbmVyYXRvci5tYXggLSByYW5kSW50R2VuZXJhdG9yLm1pbikgK1xuICAgICAgcmFuZEludEdlbmVyYXRvci5taW47XG5cbiAgICByZXR1cm4gTWF0aC50cnVuYyhzY2FsZWROdW1iZXIpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmV4dCxcbiAgfTtcbn07XG4iXX0=