@prefecthq/prefect-ui-library
Version:
This library is the Vue and Typescript component library for [Prefect 2](https://github.com/PrefectHQ/prefect) and [Prefect Cloud 2](https://www.prefect.io/cloud/). _The components and utilities in this project are not meant to be used independently_.
103 lines (87 loc) • 2.18 kB
text/typescript
// adapted from https://github.com/ndaidong/txtgen/blob/main/src/main.js
import {
sentenceTemplates,
phrases
} from '@/mocks/sentences/sample'
import {
rand,
pickLastPunc,
generator,
GeneratorKey
} from '@/mocks/sentences/utils'
import { uniform, random } from '@/utilities/math'
export {
addNouns,
addAdjectives,
addTemplates,
setNouns,
setAdjectives,
setTemplates,
getNouns,
getAdjectives,
getTemplates
} from './sample'
const actions: GeneratorKey[] = [
'noun', 'aNoun', 'nouns',
'adjective', 'anAdjective',
]
const trim = (str: string): string => {
return str.replace(/^[\s\xa0]+|[\s\xa0]+$/g, '')
.replace(/\r?\n|\r/g, ' ')
.replace(/\s\s+|\r/g, ' ')
}
const make = (template: string): string => {
let sentence = template
const occurrences = template.match(/\{\{(.+?)\}\}/g)
if (occurrences?.length) {
for (const occurrence of occurrences) {
const action = trim(occurrence.replace('{{', '').replace('}}', '')) as GeneratorKey
let result: string = ''
if (actions.includes(action)) {
result = generator[action]()
}
sentence = sentence.replace(occurrence, result)
}
}
return sentence
}
const randomStartingPhrase = (): string => {
if (random() < 0.33) {
return rand(phrases)
}
return ''
}
const makeSentenceFromTemplate = (): string => {
return make(rand(sentenceTemplates))
}
export const sentence = (): string => {
const phrase = randomStartingPhrase()
let str = phrase + makeSentenceFromTemplate()
str = str.charAt(0).toUpperCase() + str.slice(1)
str += pickLastPunc()
return str
}
export const paragraph = (len = 0): string => {
if (!len) {
len = uniform(3, 10)
}
const minLength = Math.min(len, 15)
const sentences = []
while (sentences.length < minLength) {
const str = sentence()
sentences.push(str)
}
return sentences.join(' ')
}
export const article = (len = 0): string => {
if (!len) {
len = uniform(3, 10)
}
const minLength = Math.min(len, 15)
const sentences = []
while (sentences.length < minLength) {
const str = paragraph()
sentences.push(str)
}
return sentences.join('\n\n')
}