extract prompt into util.js

This commit is contained in:
Ralf Vogler 2023-02-03 16:03:01 +01:00
parent 21a4e06209
commit eb17a49628
4 changed files with 15 additions and 18 deletions

12
util.js
View file

@ -12,6 +12,8 @@ export const dirs = {
screenshots: dataDir('screenshots'),
};
// json database
import { Low } from 'lowdb';
import { JSONFile } from 'lowdb/node';
export const jsonDb = async file => {
@ -20,13 +22,16 @@ export const jsonDb = async file => {
return db;
};
// date and time as UTC (no timezone offset) in nicely readable and sortable format, e.g., 2022-10-06 12:05:27.313
export const datetime = (d = new Date()) => d.toISOString().replace('T', ' ').replace('Z', '');
// same as datetime() but for local timezone, e.g., UTC + 2h for the above in DE
export const datetimeLocal = (d = new Date()) => datetime(new Date(d.getTime() - new Date().getTimezoneOffset() * 60000));
export const filenamify = s => s.replaceAll(':', '.').replace(/[^a-z0-9 _\-.]/gi, '_'); // alternative: https://www.npmjs.com/package/filenamify - On Unix-like systems, / is reserved. On Windows, <>:"/\|?* along with trailing periods are reserved.
// stealth with playwright: https://github.com/berstend/puppeteer-extra/issues/454#issuecomment-917437212
// gets userAgent and then removes "Headless" from it
const newStealthContext = async (browser, contextOptions = {}, debug = false) => {
if (!debug) { // only need to fix userAgent in headless mode
const dummyContext = await browser.newContext();
@ -77,6 +82,13 @@ export const stealth = async (context) => {
}
};
import prompts from 'prompts'; // alternatives: enquirer, inquirer
// import enquirer from 'enquirer'; const { prompt } = enquirer;
// single prompt that just returns the non-empty value instead of an object - why name things if there's just one?
export const prompt = async o => (await prompts({name: 'name', type: 'text', message: 'Enter value', validate: s => s.length, ...o})).name;
// notifications via apprise CLI
import { exec } from 'child_process';
import { cfg } from './config.js';