typia
Version:
Superfast runtime validators with only one line
45 lines (44 loc) • 1.6 kB
JavaScript
import { _randomInteger } from "./_randomInteger.mjs";
import { _RANDOM_LENGTH_ERROR, _randomLengthPick, _randomLengthWindow } from "./_randomStringLength.mjs";
import { __randomDigits } from "./private/__randomComposition.mjs";
//#region src/internal/_randomFormatTime.ts
const _randomFormatTime = (props) => {
const clock = () => new Date(_randomInteger({
type: "integer",
minimum: 0,
maximum: DAY
})).toISOString();
if (props?.minLength === void 0 && props?.maxLength === void 0) return clock().substring(11);
const window = _randomLengthWindow(props, {
minimum: CLOCK + 1,
maximum: CLOCK + 1 + FRACTION_MAX + OFFSET,
spread: 6
});
let length = _randomLengthPick(window);
if (length === CLOCK + 2) length = window.high >= CLOCK + 3 ? CLOCK + 3 : CLOCK + 1;
if (length < window.low || length > window.high) throw new Error(_RANDOM_LENGTH_ERROR);
const base = clock().substring(11, 11 + CLOCK);
if (length === CLOCK + 1) return `${base}Z`;
return length <= CLOCK + 2 + FRACTION_MAX ? `${base}.${__randomDigits(length - CLOCK - 2)}Z` : `${base}.${__randomDigits(length - CLOCK - 1 - OFFSET)}${offset()}`;
};
const DAY = 864e5;
const CLOCK = 8;
const OFFSET = 6;
const FRACTION_MAX = 9;
const offset = () => `${_randomInteger({
type: "integer",
minimum: 0,
maximum: 1
}) === 0 ? "+" : "-"}${pad(_randomInteger({
type: "integer",
minimum: 0,
maximum: 23
}))}:${pad(_randomInteger({
type: "integer",
minimum: 0,
maximum: 59
}))}`;
const pad = (value) => String(value).padStart(2, "0");
//#endregion
export { _randomFormatTime };
//# sourceMappingURL=_randomFormatTime.mjs.map