@jsonjoy.com/json-random
Version:
Random JSON generation, structured JSON by schema generation, no dependencies.
46 lines (45 loc) • 1.7 kB
TypeScript
import type { Token } from '../string';
export type Template = TemplateShorthand | TemplateNode | TemplateRecursiveReference;
export type TemplateNode = LiteralTemplate | NumberTemplate | IntegerTemplate | Int64Template | FloatTemplate | StringTemplate | BooleanTemplate | BinTemplate | NullTemplate | ArrayTemplate | ObjectTemplate | MapTemplate | OrTemplate;
export type TemplateShorthand = 'num' | 'int' | 'int64' | 'float' | 'str' | 'bool' | 'bin' | 'nil' | 'arr' | 'obj' | 'map';
export type TemplateRecursiveReference = () => Template;
export type LiteralTemplate = ['lit', value: unknown];
export type NumberTemplate = [type: 'num', min?: number, max?: number];
export type IntegerTemplate = [type: 'int', min?: number, max?: number];
export type Int64Template = [type: 'int64', min?: bigint, max?: bigint];
export type FloatTemplate = [type: 'float', min?: number, max?: number];
export type StringTemplate = [type: 'str', token?: Token];
export type BooleanTemplate = [type: 'bool', value?: boolean];
export type BinTemplate = [
type: 'bin',
min?: number,
max?: number,
omin?: number,
omax?: number
];
export type NullTemplate = [type: 'nil'];
export type ArrayTemplate = [
type: 'arr',
min?: number,
max?: number,
template?: Template,
head?: Template[],
tail?: Template[]
];
export type ObjectTemplate = [
type: 'obj',
fields?: ObjectTemplateField[]
];
export type ObjectTemplateField = [
key: Token | null,
value?: Template,
optionality?: number
];
export type MapTemplate = [
type: 'map',
key?: Token | null,
value?: Template,
min?: number,
max?: number
];
export type OrTemplate = ['or', ...Template[]];