packages/spg/dist/index.umd.js.map
{"version":3,"file":"index.umd.js","sources":["../src/request.ts","../src/transform/length.ts","../src/shall.ts","../src/transform/leet.ts","../src/transform/random.ts","../src/transform/symbols.ts","../src/generator.ts","../src/index.ts","../src/password.ts","../src/transform/case.ts","../src/semantic.ts"],"sourcesContent":["import unfetch from 'unfetch'\n\nconst WIKI_ROOT = 'https://en.wikipedia.org/w/api.php?action=query'\nconst WIKI_RANDOM_PATH = [\n 'generator=random',\n 'grnnamespace=0',\n 'prop=extracts',\n 'exchars=500',\n 'format=json',\n 'origin=*',\n].join('&')\n\ntype WikipediaQuery = {\n query: {\n pages: {\n [id: string]: {\n extract: string\n }\n }\n }\n}\n\nexport default async function request() {\n const response = await unfetch(`${WIKI_ROOT}&${WIKI_RANDOM_PATH}`)\n\n if (response.status >= 400) {\n new Error(\n `Request failed. Code: ${response.status}. Text: ${response.statusText}`,\n )\n }\n\n const {\n query: { pages },\n }: WikipediaQuery = await response.json()\n\n return pages[Object.keys(pages)[0]].extract\n}\n","const DEFAULT_WORD_MAP = [0, 0]\n\n/**\n * Given a desired length break the sentence with the minimum required words.\n */\nexport default (length: number) => {\n return function transformLength(base: string) {\n const words = base.split(' ')\n const breakingWord = words\n .map<[string, number]>((word) => [word, word.length])\n .reduce((memo, [word, wordLength]) => {\n const lastWordMap = memo[memo.length - 1] || DEFAULT_WORD_MAP\n return memo.concat([[word, wordLength + lastWordMap[1]]])\n }, [])\n .filter(([_, stack]) => stack < length).length\n\n return words.slice(0, breakingWord + 1).join(' ')\n }\n}\n","const MAX = 100\nconst DEFAULT_RATIO = MAX / 2\n\n/**\n * Given a probabilistic ratio match against a random number to get a true/false.\n * Default value is half the max (50); simulating a flipping coin.\n */\nconst shall = (ratio = DEFAULT_RATIO) => {\n return Math.random() * MAX < Math.min(ratio, MAX)\n}\n\n/**\n * Expose 4 common probabilistic types. For 10%, 25%, 50%, 75% and 90%\n */\nexport const weird = () => shall(10)\nexport const low = () => shall(25)\nexport const regular = () => shall()\nexport const high = () => shall(75)\nexport const common = () => shall(90)\n","import * as shall from '../shall'\n\nconst LEET_DICT = {\n a: 4,\n b: 8,\n e: 3,\n g: 9,\n l: 1,\n o: 0,\n s: 5,\n t: 7,\n z: 2,\n}\n\n/**\n * Randomly replace some char by the leet equivalent if any.\n */\nexport default () => {\n return function transformLeet(base: string) {\n return base\n .split('')\n .map((char) => [char, LEET_DICT[char.toLowerCase()]])\n .map(([char, leet]) => (leet && shall.weird() ? leet : char))\n .join('')\n }\n}\n","import random from 'lodash.random'\nimport * as shall from '../shall'\n\nconst ASCII_LOWER = 37\nconst ASCII_HIGHER = 126\nconst EMPTY_CHAR = ''\n\nconst addRandomChar = () => {\n if (shall.common()) return EMPTY_CHAR\n return String.fromCharCode(random(ASCII_LOWER, ASCII_HIGHER))\n}\n\n/**\n * Randomly add some ASCII safe chars either at the beginning, the end or both\n * sides of each word.\n */\nexport default () => {\n return function transformRandom(base: string) {\n return base\n .split(' ')\n .map((word) => `${addRandomChar()}${word}${addRandomChar()}`)\n .join(' ')\n }\n}\n","import random from 'lodash.random'\nimport * as shall from '../shall'\n\nconst DEFAULT_SYMBOL = '.'\nconst SYMBOLS = `@#$%{}[]()/~,;:><${DEFAULT_SYMBOL}`.split('')\nconst EMPTY_CHAR = ''\nconst RX_WHITE_SPACE = / /g\n\n/**\n * Replace white spaces either by a random symbol or an empty char (remove).\n * Note that this transformer gets rid of the white spaces. Hence has to be\n * the last one always.\n * If it's disabled always return the DEFAULT_SYMBOL\n */\nexport default (isEnabled: boolean) => {\n return function transformSymbols(base: string) {\n return base.replace(RX_WHITE_SPACE, () => {\n if (!isEnabled) return DEFAULT_SYMBOL\n\n return shall.regular() ? SYMBOLS[random(SYMBOLS.length - 1)] : EMPTY_CHAR\n })\n }\n}\n","import random from 'lodash.random'\nimport isNumber from 'lodash.isnumber'\nimport identity from 'lodash.identity'\nimport * as password from './password'\nimport transformLength from './transform/length'\nimport transformLeet from './transform/leet'\nimport transformCase from './transform/case'\nimport transformRandom from './transform/random'\nimport transformSymbols from './transform/symbols'\n\nconst DEFAULT_SENTENCES = [''] // allows init of all methods\nconst DEFAULT_ARGS = {\n case: false,\n length: 24,\n leet: false,\n random: false,\n symbols: false,\n}\ntype Args = number | typeof DEFAULT_ARGS\n\nconst sanitizeOptions = (args: Args = {} as Args): typeof DEFAULT_ARGS => {\n return {\n ...DEFAULT_ARGS,\n ...(isNumber(args) ? { length: args } : args),\n }\n}\n\nexport default function createGenerator(sentences = DEFAULT_SENTENCES) {\n const maxLength = password.getMaxLength(sentences)\n\n return function generator(args?: Args) {\n const options = sanitizeOptions(args)\n const length = password.getLength(options.length, maxLength)\n const data = sentences.filter((x) => x.length >= length)\n const base = data[random(data.length - 1)]\n\n if (!base) return null\n\n return [\n transformLength(length),\n options.leet && transformLeet(),\n options.case && transformCase(),\n options.random && transformRandom(),\n transformSymbols(options.symbols),\n ]\n .map((fn) => fn || identity)\n .reduce((memo, fn) => fn(memo), base)\n }\n}\n","import request from './request'\nimport semantic from './semantic'\nimport generator from './generator'\n\nexport default async function spg() {\n const article = await request()\n const sentences = semantic(article)\n\n return generator(sentences)\n}\n","const MIN_PASSWORD_LENGTH = 8\n\nexport const getMaxLength = (sentences: string[]) => {\n return sentences.reduce((memo, { length }) => {\n return length > memo ? length : memo\n }, Number.MIN_SAFE_INTEGER)\n}\n\nexport const getMinLength = (inputLength: number) => {\n return Math.max(inputLength, MIN_PASSWORD_LENGTH)\n}\n\nexport const getLength = (inputLength: number, maxLength: number) => {\n return Math.min(getMinLength(inputLength), maxLength)\n}\n","import * as shall from '../shall'\n\n/**\n * Randomly transform to upper case some chars. It assumes that most\n * of the base chars are lower case.\n */\nexport default () => {\n return function transformCase(base: string) {\n return base\n .split('')\n .map((char) => (shall.low() ? char.toUpperCase() : char))\n .join('')\n }\n}\n","import nlp from 'wink-nlp-utils'\nimport deburr from 'lodash.deburr'\n\nexport default function semantic(extract: string): string[] {\n return [\n nlp.string.removeHTMLTags,\n nlp.string.removeExtraSpaces,\n deburr,\n nlp.string.sentences,\n ]\n .reduce((memo, fn) => fn(memo), extract)\n .map(nlp.string.removePunctuations)\n}\n"],"names":["WIKI_RANDOM_PATH","join","DEFAULT_WORD_MAP","length","base","words","split","breakingWord","map","word","reduce","memo","wordLength","concat","filter","_","stack","slice","shall","ratio","MAX","Math","random","min","LEET_DICT","a","b","e","g","l","o","s","t","z","addRandomChar","String","fromCharCode","SYMBOLS","RX_WHITE_SPACE","DEFAULT_SENTENCES","DEFAULT_ARGS","case","leet","symbols","unfetch","response","status","Error","statusText","json","query","pages","Object","keys","extract","request","article","sentences","maxLength","Number","MIN_SAFE_INTEGER","password","args","options","isNumber","sanitizeOptions","inputLength","max","getMinLength","data","x","transformLength","char","toLowerCase","toUpperCase","isEnabled","replace","fn","identity","generator","nlp","string","removeHTMLTags","removeExtraSpaces","deburr","removePunctuations"],"mappings":"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"}