@applitools/eyes-storybook
Version:
132 lines (117 loc) • 3.58 kB
JavaScript
// @ts-check
;
const chalk = require('chalk');
const {Configuration} = require('@applitools/eyes');
const defaultConfig = require('./../defaultConfig');
// Get all keys directly from the base Configuration class
const dynamicBaseKeys = [
...Object.getOwnPropertyNames(Object.getPrototypeOf(new Configuration())),
].filter(
prop =>
!prop.startsWith('get') &&
!prop.startsWith('set') &&
!prop.startsWith('to') &&
!prop.startsWith('_') &&
prop !== 'constructor',
);
// known aliases that are not on the Configuration prototype
const knownAliases = [
'envName',
'testConcurrency',
'concurrency',
'eyesServerUrl',
'batchId',
'batchName',
'batchSequenceName',
'keepBatchOpen',
'environments',
];
const applitoolsBaseKeys = [...dynamicBaseKeys, ...knownAliases];
// A list of all keys specific to the eyes-storybook package.
/**
* @type {Array<keyof (import('../index').ApplitoolsConfig) |
* 'reloadPagePerStory' |
* 'startStorybookServerTimeout' |
* 'waitBeforeScreenshot' |
* 'waitBeforeScreenshots' |
* 'fakeIE' |
* 'storyConfiguration' |
* 'storyDataGap' |
* 'packagePath'
* >}
*/
const storybookSpecificKeys = [
'variations', // TODO - are we sure it should be supported from the applitools config file? https://applitools.com/tutorials/sdks/storybook/component-config#variations
'runInDocker',
'showLogs',
'storybookUrl',
'storybookStaticDir',
'include',
// Browser & Puppeteer Control
'browser',
'puppeteerOptions',
'puppeteerExtraHTTPHeaders', // created for a specific user, TODO - consider removing
'browserCacheRequests',
'browserHeadersOverride',
'browserRequestsTimeout',
'networkBlockPatterns',
'navigationWaitUntil',
// Region Matching
'ignoreRegions',
'floatingRegions',
'layoutRegions',
'strictRegions',
'contentRegions',
'accessibilityRegions',
// Reporting
'tapFilePath',
'xmlFilePath',
'jsonFilePath',
// Legacy & Internal
'waitBeforeScreenshot', // backward compatibility
'waitBeforeScreenshots', // backward compatibility
'fakeIE',
'storyConfiguration',
'storyDataGap',
'packagePath',
];
// Keys that are automatically added by module systems for ES modules.
const esModuleSpecificKeys = ['__esModule', 'default'];
// Combine all known keys into a single Set for efficient O(1) lookups.
const knownKeys = new Set([
...storybookSpecificKeys,
...applitoolsBaseKeys,
...esModuleSpecificKeys,
...Object.keys(defaultConfig),
]);
/**
* Checks the user's config object for any keys that are not recognized
* and logs a warning to the console if any are found.
* @param {object} config - The user's configuration object.
* @param {object} logger - The logger instance.
*/
function logUnrecognizedKeys(config, logger) {
const unrecognizedKeys = Object.keys(config).filter(key => !knownKeys.has(key));
if (unrecognizedKeys.length > 0) {
// uses a warning sign emoji - ⚠️
console.log(
chalk.yellow(
`\n\u26A0 The following configuration keys are unrecognized and will be ignored:`,
),
);
unrecognizedKeys.forEach(key => {
console.log(chalk.yellow(` - ${key}`));
});
// @ts-ignore
logger.log('\n');
const docsUrl = 'https://applitools.com/tutorials/sdks/storybook/config#properties';
console.log(
chalk.bold(`Please review our documentation for valid configuration settings: ${docsUrl}`),
);
}
}
module.exports = {
logUnrecognizedKeys,
// Exporting the set is optional but can be useful for other utilities
knownKeys,
};