From 24772ca03dea9503f7e07710917b1b74b33dd16f Mon Sep 17 00:00:00 2001 From: Peter Marosi Date: Tue, 14 May 2024 12:06:18 +0200 Subject: [PATCH] feat(plugins): add plugin for lost-pixel config (#630) * feat(plugins): add plugin for lost-pixel config * Fix: add lost-pixel config file to fixtures * Fix: adjust test exectuion assertion * Fix: adjust config file casing * Fix: adjust lost-pixel test * Fix: remove - from the lostpixel config file --- .../plugins/lost-pixel/lostpixel.config.ts | 33 +++++++++++++++++++ .../fixtures/plugins/lost-pixel/package.json | 7 ++++ packages/knip/schema.json | 4 +++ packages/knip/src/ConfigurationValidator.ts | 1 + packages/knip/src/plugins/index.ts | 1 + packages/knip/src/plugins/lost-pixel/index.ts | 20 +++++++++++ packages/knip/test/plugins/lost-pixel.test.ts | 21 ++++++++++++ 7 files changed, 87 insertions(+) create mode 100644 packages/knip/fixtures/plugins/lost-pixel/lostpixel.config.ts create mode 100644 packages/knip/fixtures/plugins/lost-pixel/package.json create mode 100644 packages/knip/src/plugins/lost-pixel/index.ts create mode 100644 packages/knip/test/plugins/lost-pixel.test.ts diff --git a/packages/knip/fixtures/plugins/lost-pixel/lostpixel.config.ts b/packages/knip/fixtures/plugins/lost-pixel/lostpixel.config.ts new file mode 100644 index 000000000..d60c7bdd2 --- /dev/null +++ b/packages/knip/fixtures/plugins/lost-pixel/lostpixel.config.ts @@ -0,0 +1,33 @@ +import type { CustomProjectConfig } from 'lost-pixel'; + +export const config: CustomProjectConfig = { + apiKey: process.env.LOST_PIXEL_API_KEY, + + ladleShots: { + ladleUrl: 'dist/ladle', + }, + + lostPixelProjectId: process.env.LOST_PIXEL_PROJECT_ID, + + shotConcurrency: 5, + setPendingStatusCheck: true, + + imagePathBaseline: '.lostpixel/baseline', + imagePathCurrent: '.lostpixel/current', + imagePathDifference: '.lostpixel/difference', + + ciBuildId: process.env.BUILD_ID, + ciBuildNumber: process.env.BUILD_NUMBER, + repository: process.env.REPOSITORY_NAME, + commitRefName: process.env.CHANGE_BRANCH ?? process.env.BRANCH_NAME, + commitHash: process.env.GIT_COMMIT, + + configureBrowser: () => ({ + userAgent: + 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36', + viewport: { + width: 800, + height: 600, + }, + }), +}; diff --git a/packages/knip/fixtures/plugins/lost-pixel/package.json b/packages/knip/fixtures/plugins/lost-pixel/package.json new file mode 100644 index 000000000..077b41783 --- /dev/null +++ b/packages/knip/fixtures/plugins/lost-pixel/package.json @@ -0,0 +1,7 @@ +{ + "name": "@fixtures/lost-pixel", + "version": "*", + "devDependencies": { + "lost-pixel": "*" + } +} diff --git a/packages/knip/schema.json b/packages/knip/schema.json index a182df258..317fd8fdb 100644 --- a/packages/knip/schema.json +++ b/packages/knip/schema.json @@ -359,6 +359,10 @@ "title": "linthtml plugin configuration (https://github.com/webpro/knip/blob/main/src/plugins/linthtml/README.md)", "$ref": "#/definitions/plugin" }, + "lost-pixel": { + "title": "lost-pixel plugin configuration (https://github.com/webpro/knip/blob/main/src/plugins/lost-pixel/README.md)", + "$ref": "#/definitions/plugin" + }, "markdownlint": { "title": "markdownlint plugin configuration (https://github.com/webpro/knip/blob/main/src/plugins/markdownlint/README.md)", "$ref": "#/definitions/plugin" diff --git a/packages/knip/src/ConfigurationValidator.ts b/packages/knip/src/ConfigurationValidator.ts index 8435812b3..94814fa45 100644 --- a/packages/knip/src/ConfigurationValidator.ts +++ b/packages/knip/src/ConfigurationValidator.ts @@ -98,6 +98,7 @@ const pluginsSchema = z.object({ lefthook: pluginSchema, 'lint-staged': pluginSchema, linthtml: pluginSchema, + 'lost-pixel': pluginSchema, markdownlint: pluginSchema, mocha: pluginSchema, moonrepo: pluginSchema, diff --git a/packages/knip/src/plugins/index.ts b/packages/knip/src/plugins/index.ts index ce3c4f73e..0cb0d9550 100644 --- a/packages/knip/src/plugins/index.ts +++ b/packages/knip/src/plugins/index.ts @@ -20,6 +20,7 @@ export { default as jest } from './jest/index.js'; export { default as lefthook } from './lefthook/index.js'; export { default as lintStaged } from './lint-staged/index.js'; export { default as linthtml } from './linthtml/index.js'; +export { default as lostPixel } from './lost-pixel/index.js'; export { default as markdownlint } from './markdownlint/index.js'; export { default as mocha } from './mocha/index.js'; export { default as moonrepo } from './moonrepo/index.js'; diff --git a/packages/knip/src/plugins/lost-pixel/index.ts b/packages/knip/src/plugins/lost-pixel/index.ts new file mode 100644 index 000000000..95c087702 --- /dev/null +++ b/packages/knip/src/plugins/lost-pixel/index.ts @@ -0,0 +1,20 @@ +import type { EnablerPatterns } from '#p/types/config.js'; +import type { IsPluginEnabled, Plugin } from '#p/types/plugins.js'; +import { hasDependency } from '#p/util/plugin.js'; + +// link to lost-pixel docs https://docs.lost-pixel.com/user-docs/api-reference/lost-pixel.config.js-or-ts + +const title = 'Lost Pixel'; + +const enablers: EnablerPatterns = ['lost-pixel']; + +const isEnabled: IsPluginEnabled = ({ dependencies }) => hasDependency(dependencies, enablers); + +const config = ['lostpixel.config.{js,ts}']; + +export default { + title, + enablers, + isEnabled, + config, +} satisfies Plugin; diff --git a/packages/knip/test/plugins/lost-pixel.test.ts b/packages/knip/test/plugins/lost-pixel.test.ts new file mode 100644 index 000000000..75874d8e6 --- /dev/null +++ b/packages/knip/test/plugins/lost-pixel.test.ts @@ -0,0 +1,21 @@ +import { test } from 'bun:test'; +import assert from 'node:assert/strict'; +import { main } from '../../src/index.js'; +import { resolve } from '../../src/util/path.js'; +import baseArguments from '../helpers/baseArguments.js'; +import baseCounters from '../helpers/baseCounters.js'; + +const cwd = resolve('fixtures/plugins/lost-pixel'); + +test('Find dependencies with the lost-pixel plugin', async () => { + const { counters } = await main({ + ...baseArguments, + cwd, + }); + + assert.deepEqual(counters, { + ...baseCounters, + processed: 1, + total: 1, + }); +});