UNPKG

@prismicio/mock

Version:

Generate mock Prismic documents, fields, Slices, and models for development and testing environments

1 lines 4.35 kB
{"version":3,"file":"createFaker.cjs","sources":["../../../src/lib/createFaker.ts"],"sourcesContent":["import { Seed } from \"../types\";\n\nimport { lorem, loremWords } from \"./lorem\";\nimport { PRNG } from \"./PRNG\";\n\nexport const createFaker = (seed: Seed): Faker => {\n\treturn new Faker(seed);\n};\n\nconst DAY_MS = 1000 * 60 * 60 * 24;\nconst YEAR_MS = DAY_MS * 365;\nconst YEAR_2022_MS = 52 * (YEAR_MS + DAY_MS / 4);\n\nexport class Faker {\n\tseed: Seed;\n\n\tprivate prng: PRNG;\n\n\tconstructor(seed: Seed) {\n\t\tthis.seed = seed;\n\n\t\tthis.prng = new PRNG(seed.toString());\n\t}\n\n\trandom(): number {\n\t\treturn this.prng.next();\n\t}\n\n\tboolean(): boolean {\n\t\treturn this.random() >= 0.5;\n\t}\n\n\trandomElement<T>(elements: readonly T[]): T {\n\t\treturn elements[this.range(0, elements.length)];\n\t}\n\n\trandomElements<T>(elements: readonly T[]): T[] {\n\t\tconst alwaysInclude = this.randomElement(elements);\n\n\t\treturn elements.filter(\n\t\t\t(element) => element === alwaysInclude || this.boolean(),\n\t\t);\n\t}\n\n\trange(min: number, max: number): number {\n\t\treturn Math.floor(this.rangeFloat(Math.ceil(min), Math.floor(max)));\n\t}\n\n\trangeFloat(min: number, max: number): number {\n\t\treturn this.random() * (max - min) + min;\n\t}\n\n\twords(length: number, wordOffset = this.range(0, loremWords.length)): string {\n\t\treturn lorem(`${length}w`, wordOffset);\n\t}\n\n\tword(): string {\n\t\treturn this.randomElement(loremWords);\n\t}\n\n\tlorem(\n\t\tlength: Parameters<typeof lorem>[0],\n\t\twordOffset = this.range(0, loremWords.length),\n\t): string {\n\t\treturn lorem(length, wordOffset);\n\t}\n\n\turl(): string {\n\t\treturn `https://${this.word()}.example`;\n\t}\n\n\thexColor(): string {\n\t\treturn `#${this.hash(6)}`;\n\t}\n\n\thash(length: number): string {\n\t\tlet hash = \"\";\n\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst chars = this.boolean() ? \"abcdef\" : \"0123456789\";\n\n\t\t\thash += chars[this.range(0, chars.length)];\n\t\t}\n\n\t\treturn hash;\n\t}\n\n\tdate(): Date {\n\t\treturn new Date(YEAR_2022_MS + this.range(-YEAR_MS * 3, YEAR_MS * 3));\n\t}\n\n\tdateAfter(date: Date): Date {\n\t\tconst timestamp = date.getTime();\n\n\t\treturn new Date(this.range(timestamp, timestamp + YEAR_MS * 3));\n\t}\n\n\tdateBefore(date: Date): Date {\n\t\tconst timestamp = date.getTime();\n\n\t\treturn new Date(this.range(timestamp - YEAR_MS * 3, timestamp));\n\t}\n\n\tdateBetween(min: Date, max: Date): Date {\n\t\treturn new Date(this.range(min.getTime(), max.getTime()));\n\t}\n}\n"],"names":["PRNG","loremWords","lorem"],"mappings":";;;;;;;;;;AAKa,MAAA,cAAc,CAAC,SAAqB;AACzC,SAAA,IAAI,MAAM,IAAI;AACtB;AAEA,MAAM,SAAS,MAAO,KAAK,KAAK;AAChC,MAAM,UAAU,SAAS;AACzB,MAAM,eAAe,MAAM,UAAU,SAAS;MAEjC,MAAK;AAAA,EAKjB,YAAY,MAAU;AAJtB;AAEQ;AAGP,SAAK,OAAO;AAEZ,SAAK,OAAO,IAAIA,KAAAA,KAAK,KAAK,SAAU,CAAA;AAAA,EACrC;AAAA,EAEA,SAAM;AACE,WAAA,KAAK,KAAK;EAClB;AAAA,EAEA,UAAO;AACC,WAAA,KAAK,OAAY,KAAA;AAAA,EACzB;AAAA,EAEA,cAAiB,UAAsB;AACtC,WAAO,SAAS,KAAK,MAAM,GAAG,SAAS,MAAM,CAAC;AAAA,EAC/C;AAAA,EAEA,eAAkB,UAAsB;AACjC,UAAA,gBAAgB,KAAK,cAAc,QAAQ;AAE1C,WAAA,SAAS,OACf,CAAC,YAAY,YAAY,iBAAiB,KAAK,SAAS;AAAA,EAE1D;AAAA,EAEA,MAAM,KAAa,KAAW;AAC7B,WAAO,KAAK,MAAM,KAAK,WAAW,KAAK,KAAK,GAAG,GAAG,KAAK,MAAM,GAAG,CAAC,CAAC;AAAA,EACnE;AAAA,EAEA,WAAW,KAAa,KAAW;AAClC,WAAO,KAAK,OAAY,KAAA,MAAM,OAAO;AAAA,EACtC;AAAA,EAEA,MAAM,QAAgB,aAAa,KAAK,MAAM,GAAGC,MAAAA,WAAW,MAAM,GAAC;AAClE,WAAOC,MAAAA,MAAM,GAAG,MAAM,KAAK,UAAU;AAAA,EACtC;AAAA,EAEA,OAAI;AACI,WAAA,KAAK,cAAcD,MAAAA,UAAU;AAAA,EACrC;AAAA,EAEA,MACC,QACA,aAAa,KAAK,MAAM,GAAGA,MAAAA,WAAW,MAAM,GAAC;AAEtC,WAAAC,MAAA,MAAM,QAAQ,UAAU;AAAA,EAChC;AAAA,EAEA,MAAG;AACK,WAAA,WAAW,KAAK,KAAM,CAAA;AAAA,EAC9B;AAAA,EAEA,WAAQ;AACP,WAAO,IAAI,KAAK,KAAK,CAAC,CAAC;AAAA,EACxB;AAAA,EAEA,KAAK,QAAc;AAClB,QAAI,OAAO;AAEX,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAChC,YAAM,QAAQ,KAAK,QAAS,IAAG,WAAW;AAE1C,cAAQ,MAAM,KAAK,MAAM,GAAG,MAAM,MAAM,CAAC;AAAA,IAC1C;AAEO,WAAA;AAAA,EACR;AAAA,EAEA,OAAI;AACI,WAAA,IAAI,KAAK,eAAe,KAAK,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;AAAA,EACrE;AAAA,EAEA,UAAU,MAAU;AACb,UAAA,YAAY,KAAK;AAEhB,WAAA,IAAI,KAAK,KAAK,MAAM,WAAW,YAAY,UAAU,CAAC,CAAC;AAAA,EAC/D;AAAA,EAEA,WAAW,MAAU;AACd,UAAA,YAAY,KAAK;AAEhB,WAAA,IAAI,KAAK,KAAK,MAAM,YAAY,UAAU,GAAG,SAAS,CAAC;AAAA,EAC/D;AAAA,EAEA,YAAY,KAAW,KAAS;AACxB,WAAA,IAAI,KAAK,KAAK,MAAM,IAAI,WAAW,IAAI,QAAS,CAAA,CAAC;AAAA,EACzD;AACA;;;"}