sitespeed.io/lib/core/resultsStorage/index.js

51 lines
1.5 KiB
JavaScript

import { parse, format } from 'node:url';
import { basename, resolve, join } from 'node:path';
import { resultUrls } from './resultUrls.js';
import { storageManager } from './storageManager.js';
function getDomainOrFileName(input) {
let domainOrFile = input;
domainOrFile = domainOrFile.startsWith('http')
? parse(domainOrFile).hostname
: basename(domainOrFile).replace(/\./g, '_');
return domainOrFile;
}
export function resultsStorage(input, timestamp, options) {
const outputFolder = options.outputFolder;
const resultBaseURL = options.resultBaseURL;
const resultsSubFolders = [];
let storageBasePath;
let storagePathPrefix;
let resultUrl;
if (outputFolder) {
resultsSubFolders.push(basename(outputFolder));
storageBasePath = resolve(outputFolder);
} else {
resultsSubFolders.push(
options.slug || getDomainOrFileName(input),
timestamp.format('YYYY-MM-DD-HH-mm-ss')
);
storageBasePath = resolve('sitespeed-result', ...resultsSubFolders);
}
// backfill the slug
options.slug = options.slug || getDomainOrFileName(input).replace(/\./g, '_');
storagePathPrefix = join(...resultsSubFolders);
if (resultBaseURL) {
const url = parse(resultBaseURL);
resultsSubFolders.unshift(url.pathname.slice(1));
url.pathname = resultsSubFolders.join('/');
resultUrl = format(url);
}
return {
storageManager: storageManager(storageBasePath, storagePathPrefix, options),
resultUrls: resultUrls(resultUrl, options)
};
}