UNPKG

@applitools/eyes-storybook

Version:
132 lines (117 loc) 3.58 kB
// @ts-check 'use strict'; 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, };