Upgrade to eslint/unicorn 54 (#4213)
This commit is contained in:
parent
d9989b90c6
commit
3741366d45
|
|
@ -5,7 +5,7 @@
|
||||||
import { writeFileSync } from 'node:fs';
|
import { writeFileSync } from 'node:fs';
|
||||||
import { execSync } from 'node:child_process';
|
import { execSync } from 'node:child_process';
|
||||||
import { platform } from 'node:os';
|
import { platform } from 'node:os';
|
||||||
import { resolve, basename } from 'node:path';
|
import path from 'node:path';
|
||||||
import { readFileSync } from 'node:fs';
|
import { readFileSync } from 'node:fs';
|
||||||
import { EventEmitter } from 'node:events';
|
import { EventEmitter } from 'node:events';
|
||||||
|
|
||||||
|
|
@ -38,10 +38,10 @@ async function api(options) {
|
||||||
// Add support for running multi tests
|
// Add support for running multi tests
|
||||||
if (options.multi) {
|
if (options.multi) {
|
||||||
const scripting = await readFileSync(
|
const scripting = await readFileSync(
|
||||||
new URL(resolve(process.cwd(), options._[0]), import.meta.url)
|
new URL(path.resolve(process.cwd(), options._[0]), import.meta.url)
|
||||||
);
|
);
|
||||||
apiOptions.api.scripting = scripting.toString();
|
apiOptions.api.scripting = scripting.toString();
|
||||||
apiOptions.api.scriptingName = basename(options._[0]);
|
apiOptions.api.scriptingName = path.basename(options._[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (apiOptions.mobile) {
|
if (apiOptions.mobile) {
|
||||||
|
|
@ -57,7 +57,7 @@ async function api(options) {
|
||||||
if (options.config) {
|
if (options.config) {
|
||||||
const config = JSON.parse(
|
const config = JSON.parse(
|
||||||
await readFileSync(
|
await readFileSync(
|
||||||
new URL(resolve(process.cwd(), options.config), import.meta.url)
|
new URL(path.resolve(process.cwd(), options.config), import.meta.url)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
apiOptions = merge(options.explicitOptions, config);
|
apiOptions = merge(options.explicitOptions, config);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
import { platform } from 'node:os';
|
import { platform } from 'node:os';
|
||||||
import { createRequire } from 'node:module';
|
import { createRequire } from 'node:module';
|
||||||
import { readFileSync, statSync } from 'node:fs';
|
import { readFileSync, statSync } from 'node:fs';
|
||||||
|
|
@ -189,7 +189,7 @@ function validateInput(argv) {
|
||||||
|
|
||||||
if (argv.html && argv.html.summaryBoxesThresholds) {
|
if (argv.html && argv.html.summaryBoxesThresholds) {
|
||||||
try {
|
try {
|
||||||
const box = readFileSync(resolve(argv.html.summaryBoxesThresholds), {
|
const box = readFileSync(path.resolve(argv.html.summaryBoxesThresholds), {
|
||||||
encoding: 'utf8'
|
encoding: 'utf8'
|
||||||
});
|
});
|
||||||
argv.html.summaryBoxesThresholds = JSON.parse(box);
|
argv.html.summaryBoxesThresholds = JSON.parse(box);
|
||||||
|
|
@ -1131,13 +1131,11 @@ export async function parseCommandLine() {
|
||||||
group: 'Crawler'
|
group: 'Crawler'
|
||||||
})
|
})
|
||||||
.option('crawler.exclude', {
|
.option('crawler.exclude', {
|
||||||
describe:
|
describe: String.raw`Exclude URLs matching the provided regular expression (ex: "/some/path/", "://some\.domain/"). Can be provided multiple times.`,
|
||||||
'Exclude URLs matching the provided regular expression (ex: "/some/path/", "://some\\.domain/"). Can be provided multiple times.',
|
|
||||||
group: 'Crawler'
|
group: 'Crawler'
|
||||||
})
|
})
|
||||||
.option('crawler.include', {
|
.option('crawler.include', {
|
||||||
describe:
|
describe: String.raw`Discard URLs not matching the provided regular expression (ex: "/some/path/", "://some\.domain/"). Can be provided multiple times.`,
|
||||||
'Discard URLs not matching the provided regular expression (ex: "/some/path/", "://some\\.domain/"). Can be provided multiple times.',
|
|
||||||
group: 'Crawler'
|
group: 'Crawler'
|
||||||
})
|
})
|
||||||
.option('crawler.ignoreRobotsTxt', {
|
.option('crawler.ignoreRobotsTxt', {
|
||||||
|
|
@ -2160,7 +2158,7 @@ export async function parseCommandLine() {
|
||||||
|
|
||||||
if (argv.config) {
|
if (argv.config) {
|
||||||
const config = JSON.parse(
|
const config = JSON.parse(
|
||||||
await readFileSync(resolve(process.cwd(), argv.config))
|
await readFileSync(path.resolve(process.cwd(), argv.config))
|
||||||
);
|
);
|
||||||
explicitOptions = merge(explicitOptions, config);
|
explicitOptions = merge(explicitOptions, config);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
/*eslint no-console: 0*/
|
/*eslint no-console: 0*/
|
||||||
|
|
||||||
import { readFileSync } from 'node:fs';
|
import { readFileSync } from 'node:fs';
|
||||||
import { resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
import { format } from 'node:util';
|
import { format } from 'node:util';
|
||||||
|
|
||||||
import { toArray } from '../support/util.js';
|
import { toArray } from '../support/util.js';
|
||||||
|
|
@ -36,7 +36,7 @@ export function getURLs(urls) {
|
||||||
if (url.startsWith('http')) {
|
if (url.startsWith('http')) {
|
||||||
allUrls.push(url);
|
allUrls.push(url);
|
||||||
} else {
|
} else {
|
||||||
const filePath = resolve(url);
|
const filePath = path.resolve(url);
|
||||||
try {
|
try {
|
||||||
const lines = readFileSync(filePath).toString().split('\n');
|
const lines = readFileSync(filePath).toString().split('\n');
|
||||||
for (let line of lines) {
|
for (let line of lines) {
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
import { join, basename, resolve, dirname } from 'node:path';
|
import path from 'node:path';
|
||||||
import { readdir as _readdir } from 'node:fs';
|
import { readdir as _readdir } from 'node:fs';
|
||||||
import { promisify } from 'node:util';
|
import { promisify } from 'node:util';
|
||||||
|
|
||||||
import { importGlobalSilent } from 'import-global';
|
import { importGlobalSilent } from 'import-global';
|
||||||
const readdir = promisify(_readdir);
|
const readdir = promisify(_readdir);
|
||||||
const __dirname = dirname(import.meta.url);
|
const __dirname = path.dirname(import.meta.url);
|
||||||
|
|
||||||
const defaultPlugins = new Set([
|
const defaultPlugins = new Set([
|
||||||
'browsertime',
|
'browsertime',
|
||||||
|
|
@ -23,7 +23,7 @@ const defaultPlugins = new Set([
|
||||||
'remove'
|
'remove'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const pluginsDir = join(__dirname, '..', 'plugins');
|
const pluginsDir = path.join(__dirname, '..', 'plugins');
|
||||||
|
|
||||||
export async function parsePluginNames(options) {
|
export async function parsePluginNames(options) {
|
||||||
// There's a problem with Safari on iOS runninhg a big blob
|
// There's a problem with Safari on iOS runninhg a big blob
|
||||||
|
|
@ -51,7 +51,7 @@ export async function parsePluginNames(options) {
|
||||||
|
|
||||||
const files = await readdir(new URL(pluginsDir));
|
const files = await readdir(new URL(pluginsDir));
|
||||||
|
|
||||||
const builtins = files.map(name => basename(name, '.js'));
|
const builtins = files.map(name => path.basename(name, '.js'));
|
||||||
// eslint-disable-next-line unicorn/no-array-callback-reference
|
// eslint-disable-next-line unicorn/no-array-callback-reference
|
||||||
const plugins = builtins.filter(isDefaultOrConfigured);
|
const plugins = builtins.filter(isDefaultOrConfigured);
|
||||||
return addMessageLoggerIfDebug(plugins);
|
return addMessageLoggerIfDebug(plugins);
|
||||||
|
|
@ -61,13 +61,15 @@ export async function loadPlugins(pluginNames, options, context, queue) {
|
||||||
for (let name of pluginNames) {
|
for (let name of pluginNames) {
|
||||||
try {
|
try {
|
||||||
let { default: plugin } = await import(
|
let { default: plugin } = await import(
|
||||||
join(pluginsDir, name, 'index.js')
|
path.join(pluginsDir, name, 'index.js')
|
||||||
);
|
);
|
||||||
let p = new plugin(options, context, queue);
|
let p = new plugin(options, context, queue);
|
||||||
plugins.push(p);
|
plugins.push(p);
|
||||||
} catch (error_) {
|
} catch (error_) {
|
||||||
try {
|
try {
|
||||||
let { default: plugin } = await import(resolve(process.cwd(), name));
|
let { default: plugin } = await import(
|
||||||
|
path.resolve(process.cwd(), name)
|
||||||
|
);
|
||||||
let p = new plugin(options, context, queue);
|
let p = new plugin(options, context, queue);
|
||||||
plugins.push(p);
|
plugins.push(p);
|
||||||
} catch {
|
} catch {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { parse, format } from 'node:url';
|
import { parse, format } from 'node:url';
|
||||||
import { basename, resolve, join } from 'node:path';
|
import path from 'node:path';
|
||||||
|
|
||||||
import { resultUrls } from './resultUrls.js';
|
import { resultUrls } from './resultUrls.js';
|
||||||
import { storageManager } from './storageManager.js';
|
import { storageManager } from './storageManager.js';
|
||||||
|
|
@ -8,7 +8,7 @@ function getDomainOrFileName(input) {
|
||||||
let domainOrFile = input;
|
let domainOrFile = input;
|
||||||
domainOrFile = domainOrFile.startsWith('http')
|
domainOrFile = domainOrFile.startsWith('http')
|
||||||
? parse(domainOrFile).hostname
|
? parse(domainOrFile).hostname
|
||||||
: basename(domainOrFile).replaceAll('.', '_');
|
: path.basename(domainOrFile).replaceAll('.', '_');
|
||||||
return domainOrFile;
|
return domainOrFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -21,17 +21,17 @@ export function resultsStorage(input, timestamp, options) {
|
||||||
let resultUrl;
|
let resultUrl;
|
||||||
|
|
||||||
if (outputFolder) {
|
if (outputFolder) {
|
||||||
resultsSubFolders.push(basename(outputFolder));
|
resultsSubFolders.push(path.basename(outputFolder));
|
||||||
storageBasePath = resolve(outputFolder);
|
storageBasePath = path.resolve(outputFolder);
|
||||||
} else {
|
} else {
|
||||||
resultsSubFolders.push(
|
resultsSubFolders.push(
|
||||||
options.slug || getDomainOrFileName(input),
|
options.slug || getDomainOrFileName(input),
|
||||||
timestamp.format('YYYY-MM-DD-HH-mm-ss')
|
timestamp.format('YYYY-MM-DD-HH-mm-ss')
|
||||||
);
|
);
|
||||||
storageBasePath = resolve('sitespeed-result', ...resultsSubFolders);
|
storageBasePath = path.resolve('sitespeed-result', ...resultsSubFolders);
|
||||||
}
|
}
|
||||||
|
|
||||||
storagePathPrefix = join(...resultsSubFolders);
|
storagePathPrefix = path.join(...resultsSubFolders);
|
||||||
|
|
||||||
if (resultBaseURL) {
|
if (resultBaseURL) {
|
||||||
const url = parse(resultBaseURL);
|
const url = parse(resultBaseURL);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { join } from 'node:path';
|
import path from 'node:path';
|
||||||
import { promisify } from 'node:util';
|
import { promisify } from 'node:util';
|
||||||
import {
|
import {
|
||||||
rmdir as _rmdir,
|
rmdir as _rmdir,
|
||||||
|
|
@ -23,7 +23,7 @@ const rmdir = promisify(_rmdir);
|
||||||
const writeFile = promisify(_writeFile);
|
const writeFile = promisify(_writeFile);
|
||||||
|
|
||||||
function write(dirPath, filename, data) {
|
function write(dirPath, filename, data) {
|
||||||
return writeFile(join(dirPath, filename), data);
|
return writeFile(path.join(dirPath, filename), data);
|
||||||
}
|
}
|
||||||
|
|
||||||
function isValidDirectoryName(name) {
|
function isValidDirectoryName(name) {
|
||||||
|
|
@ -45,7 +45,7 @@ export function storageManager(baseDir, storagePathPrefix, options) {
|
||||||
isValidDirectoryName(element)
|
isValidDirectoryName(element)
|
||||||
);
|
);
|
||||||
|
|
||||||
const dirPath = join.apply(undefined, pathSegments);
|
const dirPath = path.join.apply(undefined, pathSegments);
|
||||||
return mkdir(dirPath, { recursive: true }).then(() => dirPath);
|
return mkdir(dirPath, { recursive: true }).then(() => dirPath);
|
||||||
},
|
},
|
||||||
writeData(data, filename) {
|
writeData(data, filename) {
|
||||||
|
|
@ -63,7 +63,7 @@ export function storageManager(baseDir, storagePathPrefix, options) {
|
||||||
return baseDir;
|
return baseDir;
|
||||||
},
|
},
|
||||||
getFullPathToURLDir(url, alias) {
|
getFullPathToURLDir(url, alias) {
|
||||||
return join(baseDir, pathToFolder(url, options, alias));
|
return path.join(baseDir, pathToFolder(url, options, alias));
|
||||||
},
|
},
|
||||||
getStoragePrefix() {
|
getStoragePrefix() {
|
||||||
return storagePathPrefix;
|
return storagePathPrefix;
|
||||||
|
|
@ -76,14 +76,14 @@ export function storageManager(baseDir, storagePathPrefix, options) {
|
||||||
},
|
},
|
||||||
// TODO is missing alias
|
// TODO is missing alias
|
||||||
removeDataForUrl(url) {
|
removeDataForUrl(url) {
|
||||||
const dirName = join(baseDir, pathToFolder(url, options));
|
const dirName = path.join(baseDir, pathToFolder(url, options));
|
||||||
const removeDir = async dir => {
|
const removeDir = async dir => {
|
||||||
try {
|
try {
|
||||||
const files = await readdir(dir);
|
const files = await readdir(dir);
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
files.map(async file => {
|
files.map(async file => {
|
||||||
try {
|
try {
|
||||||
const p = join(dir, file);
|
const p = path.join(dir, file);
|
||||||
const stat = await lstat(p);
|
const stat = await lstat(p);
|
||||||
await (stat.isDirectory() ? removeDir(p) : unlink(p));
|
await (stat.isDirectory() ? removeDir(p) : unlink(p));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ const axe = require('axe-core').source;
|
||||||
const clone = require('lodash.clonedeep');
|
const clone = require('lodash.clonedeep');
|
||||||
const log = require('intel').getLogger('sitespeedio.plugin.axe');
|
const log = require('intel').getLogger('sitespeedio.plugin.axe');
|
||||||
|
|
||||||
module.exports = async function (context) {
|
module.exports = async function runAxe(context) {
|
||||||
// Insert the axe source
|
// Insert the axe source
|
||||||
await context.selenium.driver.executeScript(axe);
|
await context.selenium.driver.executeScript(axe);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
import { readFileSync } from 'node:fs';
|
import { readFileSync } from 'node:fs';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import intel from 'intel';
|
import intel from 'intel';
|
||||||
|
|
@ -16,7 +16,10 @@ export default class AxePlugin extends SitespeedioPlugin {
|
||||||
open(context, options) {
|
open(context, options) {
|
||||||
this.options = options;
|
this.options = options;
|
||||||
this.make = context.messageMaker('axe').make;
|
this.make = context.messageMaker('axe').make;
|
||||||
this.pug = readFileSync(resolve(__dirname, 'pug', 'index.pug'), 'utf8');
|
this.pug = readFileSync(
|
||||||
|
path.resolve(__dirname, 'pug', 'index.pug'),
|
||||||
|
'utf8'
|
||||||
|
);
|
||||||
log.info(`Axe version %s plugin activated`, axeVersion);
|
log.info(`Axe version %s plugin activated`, axeVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -26,7 +29,7 @@ export default class AxePlugin extends SitespeedioPlugin {
|
||||||
case 'browsertime.setup': {
|
case 'browsertime.setup': {
|
||||||
queue.postMessage(
|
queue.postMessage(
|
||||||
make('browsertime.config', {
|
make('browsertime.config', {
|
||||||
postURLScript: resolve(__dirname, 'axePostScript.cjs')
|
postURLScript: path.resolve(__dirname, 'axePostScript.cjs')
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
import merge from 'lodash.merge';
|
import merge from 'lodash.merge';
|
||||||
import forEach from 'lodash.foreach';
|
import forEach from 'lodash.foreach';
|
||||||
import set from 'lodash.set';
|
import set from 'lodash.set';
|
||||||
|
|
@ -105,7 +105,7 @@ async function parseUserScripts(scripts) {
|
||||||
const allUserScripts = {};
|
const allUserScripts = {};
|
||||||
for (let script of scripts) {
|
for (let script of scripts) {
|
||||||
let myScript = await browserScripts.findAndParseScripts(
|
let myScript = await browserScripts.findAndParseScripts(
|
||||||
resolve(script),
|
path.resolve(script),
|
||||||
'custom'
|
'custom'
|
||||||
);
|
);
|
||||||
if (!myScript['custom']) {
|
if (!myScript['custom']) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { readdir as _readdir } from 'node:fs';
|
import { readdir as _readdir } from 'node:fs';
|
||||||
import { promisify } from 'node:util';
|
import { promisify } from 'node:util';
|
||||||
import { join } from 'node:path';
|
import path from 'node:path';
|
||||||
const readdir = promisify(_readdir);
|
const readdir = promisify(_readdir);
|
||||||
import intel from 'intel';
|
import intel from 'intel';
|
||||||
const log = intel.getLogger('sitespeedio.plugin.browsertime');
|
const log = intel.getLogger('sitespeedio.plugin.browsertime');
|
||||||
|
|
@ -191,7 +191,7 @@ export async function getFilmstrip(
|
||||||
if (browsertimeData) {
|
if (browsertimeData) {
|
||||||
metrics = getMetricsFromBrowsertime(browsertimeData);
|
metrics = getMetricsFromBrowsertime(browsertimeData);
|
||||||
}
|
}
|
||||||
const files = await readdir(join(dir, 'data', 'filmstrip', run + ''));
|
const files = await readdir(path.join(dir, 'data', 'filmstrip', run + ''));
|
||||||
const timings = [];
|
const timings = [];
|
||||||
for (let file of files) {
|
for (let file of files) {
|
||||||
timings.push({ time: file.replaceAll(/\D/g, ''), file });
|
timings.push({ time: file.replaceAll(/\D/g, ''), file });
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { createReadStream } from 'node:fs';
|
import { createReadStream } from 'node:fs';
|
||||||
import { join } from 'node:path';
|
import path from 'node:path';
|
||||||
import { gunzip as _gunzip } from 'node:zlib';
|
import { gunzip as _gunzip } from 'node:zlib';
|
||||||
import { promisify } from 'node:util';
|
import { promisify } from 'node:util';
|
||||||
const gunzip = promisify(_gunzip);
|
const gunzip = promisify(_gunzip);
|
||||||
|
|
@ -14,7 +14,7 @@ async function streamToString(stream) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getGzippedFileAsJson(dir, file) {
|
export async function getGzippedFileAsJson(dir, file) {
|
||||||
const readStream = createReadStream(join(dir, file));
|
const readStream = createReadStream(path.join(dir, file));
|
||||||
const text = await streamToString(readStream);
|
const text = await streamToString(readStream);
|
||||||
const unzipped = await gunzip(text);
|
const unzipped = await gunzip(text);
|
||||||
return JSON.parse(unzipped.toString());
|
return JSON.parse(unzipped.toString());
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
import { writeFileSync } from 'node:fs';
|
import { writeFileSync } from 'node:fs';
|
||||||
import { join, resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
|
|
||||||
import intel from 'intel';
|
import intel from 'intel';
|
||||||
const log = intel.getLogger('sitespeedio.plugin.budget');
|
const log = intel.getLogger('sitespeedio.plugin.budget');
|
||||||
|
|
||||||
export function writeJson(results, dir) {
|
export function writeJson(results, dir) {
|
||||||
const file = join(dir, 'budgetResult.json');
|
const file = path.join(dir, 'budgetResult.json');
|
||||||
log.info('Write budget to %s', resolve(file));
|
log.info('Write budget to %s', path.resolve(file));
|
||||||
writeFileSync(file, JSON.stringify(results, undefined, 2));
|
writeFileSync(file, JSON.stringify(results, undefined, 2));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { join, resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
import { parse } from 'node:url';
|
import { parse } from 'node:url';
|
||||||
|
|
||||||
import jrp from 'junit-report-builder';
|
import jrp from 'junit-report-builder';
|
||||||
|
|
@ -63,7 +63,7 @@ export function writeJunit(results, dir, options) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const file = join(dir, 'junit.xml');
|
const file = path.join(dir, 'junit.xml');
|
||||||
log.info('Write junit budget to %s', resolve(file));
|
log.info('Write junit budget to %s', path.resolve(file));
|
||||||
jrp.writeTo(file);
|
jrp.writeTo(file);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
import fs from 'node:fs/promises';
|
import fs from 'node:fs/promises';
|
||||||
import { join, resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
|
|
||||||
export async function getBaseline(id, compareOptions) {
|
export async function getBaseline(id, compareOptions) {
|
||||||
try {
|
try {
|
||||||
return JSON.parse(
|
return JSON.parse(
|
||||||
await fs.readFile(
|
await fs.readFile(
|
||||||
resolve(
|
path.resolve(
|
||||||
join(compareOptions.baselinePath || process.cwd(), `${id}.json`)
|
path.join(compareOptions.baselinePath || process.cwd(), `${id}.json`)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
@ -16,5 +16,5 @@ export async function getBaseline(id, compareOptions) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function saveBaseline(json, name) {
|
export async function saveBaseline(json, name) {
|
||||||
return fs.writeFile(resolve(name), JSON.stringify(json));
|
return fs.writeFile(path.resolve(name), JSON.stringify(json));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import { join } from 'node:path';
|
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
|
|
||||||
import { execa } from 'execa';
|
import { execa } from 'execa';
|
||||||
|
|
@ -32,7 +31,7 @@ export async function runStatisticalTests(data) {
|
||||||
try {
|
try {
|
||||||
const { stdout } = await execa(
|
const { stdout } = await execa(
|
||||||
process.env.PYTHON || 'python',
|
process.env.PYTHON || 'python',
|
||||||
[join(__dirname, 'statistical.py')],
|
[path.join(__dirname, 'statistical.py')],
|
||||||
{
|
{
|
||||||
input: JSON.stringify(data)
|
input: JSON.stringify(data)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import { readFileSync } from 'node:fs';
|
import { readFileSync } from 'node:fs';
|
||||||
import { resolve, join } from 'node:path';
|
import path from 'node:path';
|
||||||
|
|
||||||
import { SitespeedioPlugin } from '@sitespeed.io/plugin';
|
import { SitespeedioPlugin } from '@sitespeed.io/plugin';
|
||||||
import intel from 'intel';
|
import intel from 'intel';
|
||||||
|
|
@ -71,7 +71,10 @@ export default class ComparePlugin extends SitespeedioPlugin {
|
||||||
this.make = context.messageMaker('compare').make;
|
this.make = context.messageMaker('compare').make;
|
||||||
this.compareOptions = merge({}, defaultConfig, options.compare);
|
this.compareOptions = merge({}, defaultConfig, options.compare);
|
||||||
this.options = options;
|
this.options = options;
|
||||||
this.pug = readFileSync(resolve(__dirname, 'pug', 'index.pug'), 'utf8');
|
this.pug = readFileSync(
|
||||||
|
path.resolve(__dirname, 'pug', 'index.pug'),
|
||||||
|
'utf8'
|
||||||
|
);
|
||||||
log.info(
|
log.info(
|
||||||
'Starting the compare plugin.' +
|
'Starting the compare plugin.' +
|
||||||
(this.compareOptions.saveBaseline
|
(this.compareOptions.saveBaseline
|
||||||
|
|
@ -260,7 +263,7 @@ export default class ComparePlugin extends SitespeedioPlugin {
|
||||||
browsertime: this.browsertimes[url].data,
|
browsertime: this.browsertimes[url].data,
|
||||||
pagexray: this.pageXrays[url].data
|
pagexray: this.pageXrays[url].data
|
||||||
},
|
},
|
||||||
join(
|
path.join(
|
||||||
this.compareOptions.baselinePath || process.cwd(),
|
this.compareOptions.baselinePath || process.cwd(),
|
||||||
`${id}-${this.page}.json`
|
`${id}-${this.page}.json`
|
||||||
)
|
)
|
||||||
|
|
@ -283,7 +286,7 @@ export default class ComparePlugin extends SitespeedioPlugin {
|
||||||
browsertime: this.browsertimes[url].data,
|
browsertime: this.browsertimes[url].data,
|
||||||
pagexray: this.pageXrays[url].data
|
pagexray: this.pageXrays[url].data
|
||||||
},
|
},
|
||||||
join(
|
path.join(
|
||||||
this.compareOptions.baselinePath || process.cwd(),
|
this.compareOptions.baselinePath || process.cwd(),
|
||||||
`${id}-${this.page}.json`
|
`${id}-${this.page}.json`
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { extname } from 'node:path';
|
import path from 'node:path';
|
||||||
import merge from 'lodash.merge';
|
import merge from 'lodash.merge';
|
||||||
import intel from 'intel';
|
import intel from 'intel';
|
||||||
import { SitespeedioPlugin } from '@sitespeed.io/plugin';
|
import { SitespeedioPlugin } from '@sitespeed.io/plugin';
|
||||||
|
|
@ -70,7 +70,7 @@ export default class CrawlerPlugin extends SitespeedioPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
crawler.addFetchCondition(queueItem => {
|
crawler.addFetchCondition(queueItem => {
|
||||||
const extension = extname(queueItem.path);
|
const extension = path.extname(queueItem.path);
|
||||||
// Don't try to download these, based on file name.
|
// Don't try to download these, based on file name.
|
||||||
if (['png', 'jpg', 'gif', 'pdf'].includes(extension)) {
|
if (['png', 'jpg', 'gif', 'pdf'].includes(extension)) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { readFileSync } from 'node:fs';
|
import { readFileSync } from 'node:fs';
|
||||||
import { resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
|
|
||||||
import intel from 'intel';
|
import intel from 'intel';
|
||||||
|
|
@ -52,7 +52,10 @@ export default class CruxPlugin extends SitespeedioPlugin {
|
||||||
this.formFactors = Array.isArray(this.options.formFactor)
|
this.formFactors = Array.isArray(this.options.formFactor)
|
||||||
? this.options.formFactor
|
? this.options.formFactor
|
||||||
: [this.options.formFactor];
|
: [this.options.formFactor];
|
||||||
this.pug = readFileSync(resolve(__dirname, 'pug', 'index.pug'), 'utf8');
|
this.pug = readFileSync(
|
||||||
|
path.resolve(__dirname, 'pug', 'index.pug'),
|
||||||
|
'utf8'
|
||||||
|
);
|
||||||
|
|
||||||
if (this.options.collect === 'ALL' || this.options.collect === 'URL') {
|
if (this.options.collect === 'ALL' || this.options.collect === 'URL') {
|
||||||
context.filterRegistry.registerFilterForType(
|
context.filterRegistry.registerFilterForType(
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { relative, join, resolve, sep } from 'node:path';
|
import path from 'node:path';
|
||||||
import fs from 'node:fs';
|
import fs from 'node:fs';
|
||||||
|
|
||||||
import { SitespeedioPlugin } from '@sitespeed.io/plugin';
|
import { SitespeedioPlugin } from '@sitespeed.io/plugin';
|
||||||
|
|
@ -61,8 +61,8 @@ async function uploadFile(
|
||||||
baseDir,
|
baseDir,
|
||||||
noCacheTime
|
noCacheTime
|
||||||
) {
|
) {
|
||||||
const subPath = relative(baseDir, file);
|
const subPath = path.relative(baseDir, file);
|
||||||
const fileName = join(gcsOptions.path || prefix, subPath);
|
const fileName = path.join(gcsOptions.path || prefix, subPath);
|
||||||
|
|
||||||
const parameters = {
|
const parameters = {
|
||||||
public: !!gcsOptions.public,
|
public: !!gcsOptions.public,
|
||||||
|
|
@ -112,8 +112,8 @@ export default class GcsPlugin extends SitespeedioPlugin {
|
||||||
this.storageManager.getStoragePrefix()
|
this.storageManager.getStoragePrefix()
|
||||||
);
|
);
|
||||||
if (this.options.copyLatestFilesToBase) {
|
if (this.options.copyLatestFilesToBase) {
|
||||||
const rootPath = resolve(baseDir, '..');
|
const rootPath = path.resolve(baseDir, '..');
|
||||||
const directoriesAsArray = rootPath.split(sep);
|
const directoriesAsArray = rootPath.split(path.sep);
|
||||||
const rootName = directoriesAsArray.at(-1);
|
const rootName = directoriesAsArray.at(-1);
|
||||||
await uploadLatestFiles(rootPath, gcsOptions, rootName);
|
await uploadLatestFiles(rootPath, gcsOptions, rootName);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
// eslint-disable-next-line unicorn/import-style
|
||||||
import util, { format } from 'node:util';
|
import util, { format } from 'node:util';
|
||||||
import reduce from 'lodash.reduce';
|
import reduce from 'lodash.reduce';
|
||||||
import {
|
import {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import { readFile as _readFile } from 'node:fs';
|
||||||
import { promisify } from 'node:util';
|
import { promisify } from 'node:util';
|
||||||
const readFile = promisify(_readFile);
|
const readFile = promisify(_readFile);
|
||||||
|
|
||||||
export default async options => {
|
export default async function getScripts(options) {
|
||||||
const scripts = [];
|
const scripts = [];
|
||||||
for (let file of options._) {
|
for (let file of options._) {
|
||||||
// We could promise all these in the future
|
// We could promise all these in the future
|
||||||
|
|
@ -16,4 +16,4 @@ export default async options => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return scripts;
|
return scripts;
|
||||||
};
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { join } from 'node:path';
|
import path from 'node:path';
|
||||||
import osName from 'os-name';
|
import osName from 'os-name';
|
||||||
import { promisify } from 'node:util';
|
import { promisify } from 'node:util';
|
||||||
import { platform, hostname } from 'node:os';
|
import { platform, hostname } from 'node:os';
|
||||||
|
|
@ -486,7 +486,7 @@ export class HTMLBuilder {
|
||||||
let res;
|
let res;
|
||||||
res = this.options.html.assetsBaseURL
|
res = this.options.html.assetsBaseURL
|
||||||
? Promise.resolve()
|
? Promise.resolve()
|
||||||
: this.storageManager.copyToResultDir(join(__dirname, 'assets'));
|
: this.storageManager.copyToResultDir(path.join(__dirname, 'assets'));
|
||||||
|
|
||||||
return res.then(() =>
|
return res.then(() =>
|
||||||
Promise.allSettled(summaryRenders)
|
Promise.allSettled(summaryRenders)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
|
|
||||||
import { compileFile, compile } from 'pug';
|
import { compileFile, compile } from 'pug';
|
||||||
|
|
@ -6,7 +6,7 @@ import intel from 'intel';
|
||||||
|
|
||||||
const log = intel.getLogger('sitespeedio.plugin.html');
|
const log = intel.getLogger('sitespeedio.plugin.html');
|
||||||
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
||||||
const basePath = resolve(__dirname, 'templates');
|
const basePath = path.resolve(__dirname, 'templates');
|
||||||
|
|
||||||
const templateCache = {};
|
const templateCache = {};
|
||||||
|
|
||||||
|
|
@ -18,7 +18,7 @@ function getTemplate(templateName) {
|
||||||
return template;
|
return template;
|
||||||
}
|
}
|
||||||
|
|
||||||
const filename = resolve(basePath, templateName);
|
const filename = path.resolve(basePath, templateName);
|
||||||
const renderedTemplate = compileFile(filename);
|
const renderedTemplate = compileFile(filename);
|
||||||
|
|
||||||
templateCache[templateName] = renderedTemplate;
|
templateCache[templateName] = renderedTemplate;
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ function row(stat, name, metricName, formatter) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function (data) {
|
export default function getDetailed(data) {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ function _box(stat, name, label, formatter, url) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function (data, html) {
|
export default function parse(data, html) {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { resolve, join } from 'node:path';
|
import path from 'node:path';
|
||||||
import { platform } from 'node:os';
|
import { platform } from 'node:os';
|
||||||
import { promisify } from 'node:util';
|
import { promisify } from 'node:util';
|
||||||
|
|
||||||
|
|
@ -52,7 +52,7 @@ export default class LatestStorerPlugin extends SitespeedioPlugin {
|
||||||
const browserData = this.browserData;
|
const browserData = this.browserData;
|
||||||
const baseDir = this.storageManager.getBaseDir();
|
const baseDir = this.storageManager.getBaseDir();
|
||||||
// Hack to get out of the date dir
|
// Hack to get out of the date dir
|
||||||
const newPath = resolve(baseDir, '..');
|
const newPath = path.resolve(baseDir, '..');
|
||||||
|
|
||||||
// This is a hack to get the same name as in Grafana, meaning we can
|
// This is a hack to get the same name as in Grafana, meaning we can
|
||||||
// generate the path to the URL there
|
// generate the path to the URL there
|
||||||
|
|
@ -85,7 +85,7 @@ export default class LatestStorerPlugin extends SitespeedioPlugin {
|
||||||
);
|
);
|
||||||
|
|
||||||
imagePath = screenshot;
|
imagePath = screenshot;
|
||||||
const imageFullPath = join(baseDir, imagePath);
|
const imageFullPath = path.join(baseDir, imagePath);
|
||||||
await this.storageManager.copyFileToDir(
|
await this.storageManager.copyFileToDir(
|
||||||
imageFullPath,
|
imageFullPath,
|
||||||
newPath +
|
newPath +
|
||||||
|
|
@ -105,7 +105,7 @@ export default class LatestStorerPlugin extends SitespeedioPlugin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (options.browsertime && options.browsertime.video) {
|
if (options.browsertime && options.browsertime.video) {
|
||||||
const videoFullPath = join(baseDir, message.data.video);
|
const videoFullPath = path.join(baseDir, message.data.video);
|
||||||
|
|
||||||
await this.storageManager.copyFileToDir(
|
await this.storageManager.copyFileToDir(
|
||||||
videoFullPath,
|
videoFullPath,
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ function send(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async (host, room, accessToken, message) => {
|
export default async function sendMatrix(host, room, accessToken, message) {
|
||||||
const data = {
|
const data = {
|
||||||
msgtype: 'm.notice',
|
msgtype: 'm.notice',
|
||||||
body: '',
|
body: '',
|
||||||
|
|
@ -69,4 +69,4 @@ export default async (host, room, accessToken, message) => {
|
||||||
formatted_body: message
|
formatted_body: message
|
||||||
};
|
};
|
||||||
return send(host, data, message, room, accessToken);
|
return send(host, data, message, room, accessToken);
|
||||||
};
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { relative, join, sep } from 'node:path';
|
import path from 'node:path';
|
||||||
import { promises as fsPromises } from 'node:fs';
|
import { promises as fsPromises } from 'node:fs';
|
||||||
|
|
||||||
import readdir from 'recursive-readdir';
|
import readdir from 'recursive-readdir';
|
||||||
|
|
@ -19,10 +19,10 @@ function ignoreDirectories(file, stats) {
|
||||||
async function uploadFile(file, s3Client, s3Options, prefix, baseDir) {
|
async function uploadFile(file, s3Client, s3Options, prefix, baseDir) {
|
||||||
const stream = await fsPromises.readFile(file);
|
const stream = await fsPromises.readFile(file);
|
||||||
const contentType = getContentType(file);
|
const contentType = getContentType(file);
|
||||||
const subPath = relative(baseDir, file);
|
const subPath = path.relative(baseDir, file);
|
||||||
const parameters = {
|
const parameters = {
|
||||||
Bucket: s3Options.bucketname,
|
Bucket: s3Options.bucketname,
|
||||||
Key: join(s3Options.path || prefix, subPath),
|
Key: path.join(s3Options.path || prefix, subPath),
|
||||||
Body: stream,
|
Body: stream,
|
||||||
ContentType: contentType,
|
ContentType: contentType,
|
||||||
ACL: s3Options.acl,
|
ACL: s3Options.acl,
|
||||||
|
|
@ -105,8 +105,8 @@ export default class S3Plugin extends SitespeedioPlugin {
|
||||||
await Promise.all(uploadPromises);
|
await Promise.all(uploadPromises);
|
||||||
|
|
||||||
if (this.options.copyLatestFilesToBase) {
|
if (this.options.copyLatestFilesToBase) {
|
||||||
const rootPath = join(baseDir, '..');
|
const rootPath = path.join(baseDir, '..');
|
||||||
const directoriesAsArray = rootPath.split(sep);
|
const directoriesAsArray = rootPath.split(path.sep);
|
||||||
const rootName = directoriesAsArray.at(-1);
|
const rootName = directoriesAsArray.at(-1);
|
||||||
const latestFiles = await readdir(rootPath, [ignoreDirectories]);
|
const latestFiles = await readdir(rootPath, [ignoreDirectories]);
|
||||||
const latestUploadPromises = latestFiles.map(file =>
|
const latestUploadPromises = latestFiles.map(file =>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { join, basename, resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
import fs from 'node:fs';
|
import fs from 'node:fs';
|
||||||
|
|
||||||
import { SitespeedioPlugin } from '@sitespeed.io/plugin';
|
import { SitespeedioPlugin } from '@sitespeed.io/plugin';
|
||||||
|
|
@ -38,13 +38,13 @@ async function upload(dir, scpOptions, prefix) {
|
||||||
for (let dir of directories) {
|
for (let dir of directories) {
|
||||||
fullPath += dir + '/';
|
fullPath += dir + '/';
|
||||||
const doThePathExist = await client.exists(
|
const doThePathExist = await client.exists(
|
||||||
join(scpOptions.destinationPath, fullPath)
|
path.join(scpOptions.destinationPath, fullPath)
|
||||||
);
|
);
|
||||||
if (!doThePathExist) {
|
if (!doThePathExist) {
|
||||||
await client.mkdir(join(scpOptions.destinationPath, fullPath));
|
await client.mkdir(path.join(scpOptions.destinationPath, fullPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await client.uploadDir(dir, join(scpOptions.destinationPath, prefix));
|
await client.uploadDir(dir, path.join(scpOptions.destinationPath, prefix));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log.error(error);
|
log.error(error);
|
||||||
throw error;
|
throw error;
|
||||||
|
|
@ -62,7 +62,7 @@ async function uploadFiles(files, scpOptions, prefix) {
|
||||||
for (let file of files) {
|
for (let file of files) {
|
||||||
await client.uploadFile(
|
await client.uploadFile(
|
||||||
file,
|
file,
|
||||||
join(scpOptions.destinationPath, prefix, basename(file))
|
path.join(scpOptions.destinationPath, prefix, path.basename(file))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
@ -119,7 +119,7 @@ export default class ScpPlugin extends SitespeedioPlugin {
|
||||||
this.storageManager.getStoragePrefix()
|
this.storageManager.getStoragePrefix()
|
||||||
);
|
);
|
||||||
if (this.options.copyLatestFilesToBase) {
|
if (this.options.copyLatestFilesToBase) {
|
||||||
const rootPath = resolve(baseDir, '..');
|
const rootPath = path.resolve(baseDir, '..');
|
||||||
const prefix = this.storageManager.getStoragePrefix();
|
const prefix = this.storageManager.getStoragePrefix();
|
||||||
const firstPart = prefix.split('/')[0];
|
const firstPart = prefix.split('/')[0];
|
||||||
await uploadLatestFiles(rootPath, this.scpOptions, firstPart);
|
await uploadLatestFiles(rootPath, this.scpOptions, firstPart);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { resolve, join } from 'node:path';
|
import path from 'node:path';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import fs from 'node:fs';
|
import fs from 'node:fs';
|
||||||
import zlib from 'node:zlib';
|
import zlib from 'node:zlib';
|
||||||
|
|
@ -20,7 +20,9 @@ const fsp = fs.promises;
|
||||||
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
||||||
|
|
||||||
const packageJson = JSON.parse(
|
const packageJson = JSON.parse(
|
||||||
await fsp.readFile(resolve(join(__dirname, '..', '..', '..', 'package.json')))
|
await fsp.readFile(
|
||||||
|
path.resolve(path.join(__dirname, '..', '..', '..', 'package.json'))
|
||||||
|
)
|
||||||
);
|
);
|
||||||
const co2Version = packageJson.dependencies['@tgwf/co2'];
|
const co2Version = packageJson.dependencies['@tgwf/co2'];
|
||||||
|
|
||||||
|
|
@ -68,7 +70,7 @@ export default class SustainablePlugin extends SitespeedioPlugin {
|
||||||
this.sustainableOptions = options.sustainable || {};
|
this.sustainableOptions = options.sustainable || {};
|
||||||
this.make = context.messageMaker('sustainable').make;
|
this.make = context.messageMaker('sustainable').make;
|
||||||
this.pug = await fsp.readFile(
|
this.pug = await fsp.readFile(
|
||||||
resolve(__dirname, 'pug', 'index.pug'),
|
path.resolve(__dirname, 'pug', 'index.pug'),
|
||||||
'utf8'
|
'utf8'
|
||||||
);
|
);
|
||||||
this.aggregator = new Aggregator(options);
|
this.aggregator = new Aggregator(options);
|
||||||
|
|
@ -116,7 +118,7 @@ export default class SustainablePlugin extends SitespeedioPlugin {
|
||||||
case 'pagexray.run': {
|
case 'pagexray.run': {
|
||||||
// We got data for a URL, lets calculate co2, check green servers etc
|
// We got data for a URL, lets calculate co2, check green servers etc
|
||||||
const listOfDomains = Object.keys(message.data.domains);
|
const listOfDomains = Object.keys(message.data.domains);
|
||||||
const greenDomainJSONpath = join(
|
const greenDomainJSONpath = path.join(
|
||||||
__dirname,
|
__dirname,
|
||||||
'data',
|
'data',
|
||||||
'url2green.json.gz'
|
'url2green.json.gz'
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { platform, release } from 'node:os';
|
import { platform, release } from 'node:os';
|
||||||
import { env, version } from 'node:process';
|
import { env, version } from 'node:process';
|
||||||
import { join, resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import fs from 'node:fs/promises';
|
import fs from 'node:fs/promises';
|
||||||
|
|
||||||
|
|
@ -23,7 +23,7 @@ import * as scriptSource from './core/script-source.js';
|
||||||
|
|
||||||
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
||||||
const packageJson = JSON.parse(
|
const packageJson = JSON.parse(
|
||||||
await fs.readFile(resolve(join(__dirname, '..', 'package.json')))
|
await fs.readFile(path.resolve(path.join(__dirname, '..', 'package.json')))
|
||||||
);
|
);
|
||||||
|
|
||||||
const log = intel.getLogger('sitespeedio');
|
const log = intel.getLogger('sitespeedio');
|
||||||
|
|
@ -69,7 +69,10 @@ export async function run(options) {
|
||||||
options.browsertime.tcpdump &&
|
options.browsertime.tcpdump &&
|
||||||
!env.SSLKEYLOGFILE
|
!env.SSLKEYLOGFILE
|
||||||
) {
|
) {
|
||||||
env.SSLKEYLOGFILE = join(storageManager.getBaseDir(), 'SSLKEYLOGFILE.txt');
|
env.SSLKEYLOGFILE = path.join(
|
||||||
|
storageManager.getBaseDir(),
|
||||||
|
'SSLKEYLOGFILE.txt'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
configure(options, logDir);
|
configure(options, logDir);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@
|
||||||
"eslint": "9.6.0",
|
"eslint": "9.6.0",
|
||||||
"eslint-config-prettier": "9.1.0",
|
"eslint-config-prettier": "9.1.0",
|
||||||
"eslint-plugin-prettier": "5.1.3",
|
"eslint-plugin-prettier": "5.1.3",
|
||||||
"eslint-plugin-unicorn": "51.0.1",
|
"eslint-plugin-unicorn": "54.0.0",
|
||||||
"feed": "4.2.2",
|
"feed": "4.2.2",
|
||||||
"jsdoc": "4.0.3",
|
"jsdoc": "4.0.3",
|
||||||
"license-checker": "^25.0.0",
|
"license-checker": "^25.0.0",
|
||||||
|
|
@ -953,9 +953,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@babel/helper-validator-identifier": {
|
"node_modules/@babel/helper-validator-identifier": {
|
||||||
"version": "7.22.20",
|
"version": "7.24.7",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
|
||||||
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
|
"integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.9.0"
|
"node": ">=6.9.0"
|
||||||
}
|
}
|
||||||
|
|
@ -1170,15 +1170,15 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/eslintrc": {
|
"node_modules/@eslint/eslintrc": {
|
||||||
"version": "2.1.4",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
|
||||||
"integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
|
"integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ajv": "^6.12.4",
|
"ajv": "^6.12.4",
|
||||||
"debug": "^4.3.2",
|
"debug": "^4.3.2",
|
||||||
"espree": "^9.6.0",
|
"espree": "^10.0.1",
|
||||||
"globals": "^13.19.0",
|
"globals": "^14.0.0",
|
||||||
"ignore": "^5.2.0",
|
"ignore": "^5.2.0",
|
||||||
"import-fresh": "^3.2.1",
|
"import-fresh": "^3.2.1",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
|
|
@ -1186,7 +1186,7 @@
|
||||||
"strip-json-comments": "^3.1.1"
|
"strip-json-comments": "^3.1.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://opencollective.com/eslint"
|
"url": "https://opencollective.com/eslint"
|
||||||
|
|
@ -5071,17 +5071,17 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-unicorn": {
|
"node_modules/eslint-plugin-unicorn": {
|
||||||
"version": "51.0.1",
|
"version": "54.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-51.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-54.0.0.tgz",
|
||||||
"integrity": "sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==",
|
"integrity": "sha512-XxYLRiYtAWiAjPv6z4JREby1TAE2byBC7wlh0V4vWDCpccOSU1KovWV//jqPXF6bq3WKxqX9rdjoRQ1EhdmNdQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/helper-validator-identifier": "^7.22.20",
|
"@babel/helper-validator-identifier": "^7.24.5",
|
||||||
"@eslint-community/eslint-utils": "^4.4.0",
|
"@eslint-community/eslint-utils": "^4.4.0",
|
||||||
"@eslint/eslintrc": "^2.1.4",
|
"@eslint/eslintrc": "^3.0.2",
|
||||||
"ci-info": "^4.0.0",
|
"ci-info": "^4.0.0",
|
||||||
"clean-regexp": "^1.0.0",
|
"clean-regexp": "^1.0.0",
|
||||||
"core-js-compat": "^3.34.0",
|
"core-js-compat": "^3.37.0",
|
||||||
"esquery": "^1.5.0",
|
"esquery": "^1.5.0",
|
||||||
"indent-string": "^4.0.0",
|
"indent-string": "^4.0.0",
|
||||||
"is-builtin-module": "^3.2.1",
|
"is-builtin-module": "^3.2.1",
|
||||||
|
|
@ -5090,11 +5090,11 @@
|
||||||
"read-pkg-up": "^7.0.1",
|
"read-pkg-up": "^7.0.1",
|
||||||
"regexp-tree": "^0.1.27",
|
"regexp-tree": "^0.1.27",
|
||||||
"regjsparser": "^0.10.0",
|
"regjsparser": "^0.10.0",
|
||||||
"semver": "^7.5.4",
|
"semver": "^7.6.1",
|
||||||
"strip-indent": "^3.0.0"
|
"strip-indent": "^3.0.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16"
|
"node": ">=18.18"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1"
|
"url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1"
|
||||||
|
|
@ -5113,13 +5113,10 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-unicorn/node_modules/semver": {
|
"node_modules/eslint-plugin-unicorn/node_modules/semver": {
|
||||||
"version": "7.6.0",
|
"version": "7.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
|
||||||
"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
|
"integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
|
||||||
"lru-cache": "^6.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
"bin": {
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
},
|
},
|
||||||
|
|
@ -5155,41 +5152,6 @@
|
||||||
"url": "https://opencollective.com/eslint"
|
"url": "https://opencollective.com/eslint"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint/node_modules/@eslint/eslintrc": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
|
|
||||||
"integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"ajv": "^6.12.4",
|
|
||||||
"debug": "^4.3.2",
|
|
||||||
"espree": "^10.0.1",
|
|
||||||
"globals": "^14.0.0",
|
|
||||||
"ignore": "^5.2.0",
|
|
||||||
"import-fresh": "^3.2.1",
|
|
||||||
"js-yaml": "^4.1.0",
|
|
||||||
"minimatch": "^3.1.2",
|
|
||||||
"strip-json-comments": "^3.1.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/eslint"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/eslint/node_modules/acorn": {
|
|
||||||
"version": "8.12.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
|
|
||||||
"integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
|
|
||||||
"dev": true,
|
|
||||||
"bin": {
|
|
||||||
"acorn": "bin/acorn"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/eslint/node_modules/ansi-regex": {
|
"node_modules/eslint/node_modules/ansi-regex": {
|
||||||
"version": "5.0.1",
|
"version": "5.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||||
|
|
@ -5254,23 +5216,6 @@
|
||||||
"url": "https://opencollective.com/eslint"
|
"url": "https://opencollective.com/eslint"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint/node_modules/espree": {
|
|
||||||
"version": "10.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
|
|
||||||
"integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"acorn": "^8.12.0",
|
|
||||||
"acorn-jsx": "^5.3.2",
|
|
||||||
"eslint-visitor-keys": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/eslint"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/eslint/node_modules/find-up": {
|
"node_modules/eslint/node_modules/find-up": {
|
||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
|
||||||
|
|
@ -5299,18 +5244,6 @@
|
||||||
"node": ">=10.13.0"
|
"node": ">=10.13.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint/node_modules/globals": {
|
|
||||||
"version": "14.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
|
|
||||||
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/eslint/node_modules/locate-path": {
|
"node_modules/eslint/node_modules/locate-path": {
|
||||||
"version": "6.0.0",
|
"version": "6.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
|
||||||
|
|
@ -5377,18 +5310,6 @@
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint/node_modules/strip-json-comments": {
|
|
||||||
"version": "3.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
|
|
||||||
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/eslint/node_modules/supports-color": {
|
"node_modules/eslint/node_modules/supports-color": {
|
||||||
"version": "7.2.0",
|
"version": "7.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
|
|
@ -5421,26 +5342,26 @@
|
||||||
"integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
|
"integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
|
||||||
},
|
},
|
||||||
"node_modules/espree": {
|
"node_modules/espree": {
|
||||||
"version": "9.6.1",
|
"version": "10.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
|
||||||
"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
|
"integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"acorn": "^8.9.0",
|
"acorn": "^8.12.0",
|
||||||
"acorn-jsx": "^5.3.2",
|
"acorn-jsx": "^5.3.2",
|
||||||
"eslint-visitor-keys": "^3.4.1"
|
"eslint-visitor-keys": "^4.0.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://opencollective.com/eslint"
|
"url": "https://opencollective.com/eslint"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/espree/node_modules/acorn": {
|
"node_modules/espree/node_modules/acorn": {
|
||||||
"version": "8.11.3",
|
"version": "8.12.1",
|
||||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
|
||||||
"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
|
"integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"acorn": "bin/acorn"
|
"acorn": "bin/acorn"
|
||||||
|
|
@ -5449,6 +5370,18 @@
|
||||||
"node": ">=0.4.0"
|
"node": ">=0.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/espree/node_modules/eslint-visitor-keys": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://opencollective.com/eslint"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/esprima": {
|
"node_modules/esprima": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
||||||
|
|
@ -6284,15 +6217,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/globals": {
|
"node_modules/globals": {
|
||||||
"version": "13.24.0",
|
"version": "14.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
|
"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
|
||||||
"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
|
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
|
||||||
"type-fest": "^0.20.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
|
@ -11090,18 +11020,6 @@
|
||||||
"node": ">= 0.8.0"
|
"node": ">= 0.8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/type-fest": {
|
|
||||||
"version": "0.20.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
|
|
||||||
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/typed-array-buffer": {
|
"node_modules/typed-array-buffer": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@
|
||||||
"eslint": "9.6.0",
|
"eslint": "9.6.0",
|
||||||
"eslint-config-prettier": "9.1.0",
|
"eslint-config-prettier": "9.1.0",
|
||||||
"eslint-plugin-prettier": "5.1.3",
|
"eslint-plugin-prettier": "5.1.3",
|
||||||
"eslint-plugin-unicorn": "51.0.1",
|
"eslint-plugin-unicorn": "54.0.0",
|
||||||
"feed": "4.2.2",
|
"feed": "4.2.2",
|
||||||
"jsdoc": "4.0.3",
|
"jsdoc": "4.0.3",
|
||||||
"license-checker": "^25.0.0",
|
"license-checker": "^25.0.0",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { Feed } from 'feed';
|
import { Feed } from 'feed';
|
||||||
import { readdirSync, statSync, readFileSync, writeFileSync } from 'node:fs';
|
import { readdirSync, statSync, readFileSync, writeFileSync } from 'node:fs';
|
||||||
import { parse, join } from 'node:path';
|
import path from 'node:path';
|
||||||
import parseChangelog from 'changelog-parser';
|
import parseChangelog from 'changelog-parser';
|
||||||
import { marked } from 'marked';
|
import { marked } from 'marked';
|
||||||
|
|
||||||
|
|
@ -25,7 +25,7 @@ const getSortedFiles = dir => {
|
||||||
return files
|
return files
|
||||||
.map(fileName => ({
|
.map(fileName => ({
|
||||||
fileName: fileName,
|
fileName: fileName,
|
||||||
name: parse(fileName).name,
|
name: path.parse(fileName).name,
|
||||||
time: statSync(`${dir}/${fileName}`).mtime.getTime(),
|
time: statSync(`${dir}/${fileName}`).mtime.getTime(),
|
||||||
version: readFileSync(`${dir}/${fileName}`, 'utf8').trim()
|
version: readFileSync(`${dir}/${fileName}`, 'utf8').trim()
|
||||||
}))
|
}))
|
||||||
|
|
@ -165,9 +165,12 @@ async function generateFeed() {
|
||||||
|
|
||||||
const documentPath = './docs/';
|
const documentPath = './docs/';
|
||||||
|
|
||||||
writeFileSync(join(documentPath, 'feed', `${tool.name}.rss`), feed.rss2());
|
|
||||||
writeFileSync(
|
writeFileSync(
|
||||||
join(documentPath, 'feed', `${tool.name}.atom`),
|
path.join(documentPath, 'feed', `${tool.name}.rss`),
|
||||||
|
feed.rss2()
|
||||||
|
);
|
||||||
|
writeFileSync(
|
||||||
|
path.join(documentPath, 'feed', `${tool.name}.atom`),
|
||||||
feed.atom1()
|
feed.atom1()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -183,8 +186,8 @@ async function generateFeed() {
|
||||||
|
|
||||||
const documentPath = './docs/';
|
const documentPath = './docs/';
|
||||||
|
|
||||||
writeFileSync(join(documentPath, 'feed', `rss.xml`), allFeed.rss2());
|
writeFileSync(path.join(documentPath, 'feed', `rss.xml`), allFeed.rss2());
|
||||||
writeFileSync(join(documentPath, 'feed', `atom.xml`), allFeed.atom1());
|
writeFileSync(path.join(documentPath, 'feed', `atom.xml`), allFeed.atom1());
|
||||||
}
|
}
|
||||||
|
|
||||||
await generateFeed();
|
await generateFeed();
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import test from 'ava';
|
import test from 'ava';
|
||||||
import { join, resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
import { promisify } from 'node:util';
|
import { promisify } from 'node:util';
|
||||||
import { execFile as _execFile } from 'node:child_process';
|
import { execFile as _execFile } from 'node:child_process';
|
||||||
const execFile = promisify(_execFile);
|
const execFile = promisify(_execFile);
|
||||||
|
|
@ -9,7 +9,7 @@ import { fileURLToPath } from 'node:url';
|
||||||
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
||||||
|
|
||||||
function runSitespeed(options = []) {
|
function runSitespeed(options = []) {
|
||||||
const cli = join(resolve(__dirname), '../bin/sitespeed.js');
|
const cli = path.join(path.resolve(__dirname), '../bin/sitespeed.js');
|
||||||
return execFile('node', [cli].concat(options));
|
return execFile('node', [cli].concat(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
import test from 'ava';
|
import test from 'ava';
|
||||||
import { CoachAggregator } from '../lib/plugins/coach/aggregator.js';
|
import { CoachAggregator } from '../lib/plugins/coach/aggregator.js';
|
||||||
import { readFileSync } from 'node:fs';
|
import { readFileSync } from 'node:fs';
|
||||||
import { resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
|
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
||||||
|
|
||||||
const coachRunPath = resolve(__dirname, 'fixtures', 'coach.run-0.json');
|
const coachRunPath = path.resolve(__dirname, 'fixtures', 'coach.run-0.json');
|
||||||
const coachRun = JSON.parse(readFileSync(coachRunPath, 'utf8'));
|
const coachRun = JSON.parse(readFileSync(coachRunPath, 'utf8'));
|
||||||
|
|
||||||
test(`Should summarize Coach data`, t => {
|
test(`Should summarize Coach data`, t => {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { readFileSync } from 'node:fs';
|
import { readFileSync } from 'node:fs';
|
||||||
import { resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
|
|
||||||
import test from 'ava';
|
import test from 'ava';
|
||||||
|
|
@ -9,7 +9,10 @@ import { DomainsAggregator } from '../lib/plugins/domains/aggregator.js';
|
||||||
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
||||||
|
|
||||||
const har = JSON.parse(
|
const har = JSON.parse(
|
||||||
readFileSync(resolve(__dirname, 'fixtures', 'www-theverge-com.har'), 'utf8')
|
readFileSync(
|
||||||
|
path.resolve(__dirname, 'fixtures', 'www-theverge-com.har'),
|
||||||
|
'utf8'
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
test(`Should summarize data per domain`, t => {
|
test(`Should summarize data per domain`, t => {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { resolve } from 'node:path';
|
import path from 'node:path';
|
||||||
import { readFileSync } from 'node:fs';
|
import { readFileSync } from 'node:fs';
|
||||||
|
|
||||||
import test from 'ava';
|
import test from 'ava';
|
||||||
|
|
@ -13,7 +13,7 @@ import { getSummary } from '../lib/plugins/slack/summary.js';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
||||||
|
|
||||||
const coachRunPath = resolve(__dirname, 'fixtures', 'coach.run-0.json');
|
const coachRunPath = path.resolve(__dirname, 'fixtures', 'coach.run-0.json');
|
||||||
const coachRun = JSON.parse(readFileSync(coachRunPath, 'utf8'));
|
const coachRun = JSON.parse(readFileSync(coachRunPath, 'utf8'));
|
||||||
|
|
||||||
import { DataCollector } from '../lib/plugins/slack/dataCollector.js';
|
import { DataCollector } from '../lib/plugins/slack/dataCollector.js';
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { resolve, join } from 'node:path';
|
import path from 'node:path';
|
||||||
|
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import test from 'ava';
|
import test from 'ava';
|
||||||
|
|
@ -30,7 +30,7 @@ test(`Create base dir with default output folder`, t => {
|
||||||
const storageManager = createManager('http://www.foo.bar');
|
const storageManager = createManager('http://www.foo.bar');
|
||||||
t.is(
|
t.is(
|
||||||
storageManager.getBaseDir(),
|
storageManager.getBaseDir(),
|
||||||
resolve('sitespeed-result', 'www.foo.bar', timestampString)
|
path.resolve('sitespeed-result', 'www.foo.bar', timestampString)
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -44,7 +44,10 @@ test(`Create base dir with custom output folder`, t => {
|
||||||
|
|
||||||
test(`Create prefix with default output folder`, t => {
|
test(`Create prefix with default output folder`, t => {
|
||||||
const storageManager = createManager('http://www.foo.bar');
|
const storageManager = createManager('http://www.foo.bar');
|
||||||
t.is(storageManager.getStoragePrefix(), join('www.foo.bar', timestampString));
|
t.is(
|
||||||
|
storageManager.getStoragePrefix(),
|
||||||
|
path.join('www.foo.bar', timestampString)
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test(`Create prefix with custom output folder`, t => {
|
test(`Create prefix with custom output folder`, t => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue