Skip to content

Commit

Permalink
Support force-enabling of plugins, by with value object or true (re…
Browse files Browse the repository at this point in the history
…solves #276)
  • Loading branch information
webpro committed Oct 6, 2023
1 parent 9ed0775 commit a06925d
Show file tree
Hide file tree
Showing 11 changed files with 37 additions and 14 deletions.
3 changes: 3 additions & 0 deletions fixtures/workspaces-plugin-config/knip.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
"config": ["vitest.config.ts"],
"entry": ["**/*.vitest.ts"]
},
"eslint": true,
"jest": "jest.config.js",
"babel": { "config": "rollup.config.ts" },
"workspaces": {
"packages/*": {}
}
Expand Down
6 changes: 5 additions & 1 deletion fixtures/workspaces-plugin-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,9 @@
"name": "@workspaces-plugin-config/root",
"workspaces": [
"packages/*"
]
],
"devDependencies": {
"jest-result-processor": "*",
"eslint-config-airbnb": "*"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
testResultsProcessor: 'jest-result-processor',
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
extends: ['airbnb'],
};
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
},
"devDependencies": {
"vitest": "*",
"jsdom": "*"
"jsdom": "*",
"@rollup/plugin-commonjs": "*"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import commonjs from '@rollup/plugin-commonjs';
2 changes: 1 addition & 1 deletion src/ConfigurationValidator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ const reportConfigSchema = z.object({
});

export const pluginSchema = z.union([
z.literal(false),
z.boolean(),
globSchema,
z.object({
config: globSchema.optional(),
Expand Down
20 changes: 14 additions & 6 deletions src/WorkspaceWorker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ type ReferencedDependencies = Set<[string, string]>;

const negatedTestFilePatterns = TEST_FILE_PATTERNS.map(negate);

const nullConfig = { config: null, entry: null, project: null };

/**
* - Determines enabled plugins
* - Finds referenced dependencies and binaries in npm scripts
Expand Down Expand Up @@ -99,6 +101,10 @@ export class WorkspaceWorker {

for (const [pluginName, plugin] of pluginEntries) {
if (this.config[pluginName] === false) continue;
if (this.config[pluginName]) {
this.enabled[pluginName] = true;
continue;
}
const isEnabledInAncestor = this.enabledPluginsInAncestors.includes(pluginName);
if (
isEnabledInAncestor ||
Expand Down Expand Up @@ -132,7 +138,7 @@ export class WorkspaceWorker {
}

private getConfigForPlugin(pluginName: PluginName): PluginConfiguration {
return this.config[pluginName] ?? { config: null, entry: null, project: null };
return this.config[pluginName] ?? nullConfig;
}

getEntryFilePatterns() {
Expand Down Expand Up @@ -164,7 +170,7 @@ export class WorkspaceWorker {
for (const [pluginName, plugin] of Object.entries(plugins) as PluginNames) {
const pluginConfig = this.getConfigForPlugin(pluginName);
if (this.enabled[pluginName] && pluginConfig) {
const { entry } = pluginConfig;
const { entry } = pluginConfig === true ? nullConfig : pluginConfig;
const defaultEntryFiles = 'ENTRY_FILE_PATTERNS' in plugin ? plugin.ENTRY_FILE_PATTERNS : [];
patterns.push(...(entry ?? defaultEntryFiles));
if (isIncludeProductionEntryFiles) {
Expand All @@ -181,7 +187,7 @@ export class WorkspaceWorker {
for (const [pluginName, plugin] of Object.entries(plugins) as PluginNames) {
const pluginConfig = this.getConfigForPlugin(pluginName);
if (this.enabled[pluginName] && pluginConfig) {
const { entry, project } = pluginConfig;
const { entry, project } = pluginConfig === true ? nullConfig : pluginConfig;
patterns.push(
...(project ??
entry ??
Expand All @@ -201,7 +207,7 @@ export class WorkspaceWorker {
for (const [pluginName, plugin] of Object.entries(plugins) as PluginNames) {
const pluginConfig = this.getConfigForPlugin(pluginName);
if (this.enabled[pluginName] && pluginConfig) {
const { config } = pluginConfig;
const { config } = pluginConfig === true ? nullConfig : pluginConfig;
const defaultConfigFiles = 'CONFIG_FILE_PATTERNS' in plugin ? plugin.CONFIG_FILE_PATTERNS : [];
patterns.push(...(config ?? defaultConfigFiles));
}
Expand Down Expand Up @@ -245,7 +251,9 @@ export class WorkspaceWorker {
const pluginConfig = this.getConfigForPlugin(pluginName);
if (this.enabled[pluginName] && pluginConfig) {
if ('PRODUCTION_ENTRY_FILE_PATTERNS' in plugin) {
patterns.push(...(pluginConfig.entry ?? plugin.PRODUCTION_ENTRY_FILE_PATTERNS));
patterns.push(
...((pluginConfig === true ? null : pluginConfig.entry) ?? plugin.PRODUCTION_ENTRY_FILE_PATTERNS)
);
}
}
}
Expand All @@ -258,7 +266,7 @@ export class WorkspaceWorker {
const pluginConfig = this.getConfigForPlugin(pluginName);
if (pluginConfig) {
const defaultConfig = 'CONFIG_FILE_PATTERNS' in plugin ? plugin.CONFIG_FILE_PATTERNS : [];
return pluginConfig.config ?? defaultConfig;
return (pluginConfig === true ? null : pluginConfig.config) ?? defaultConfig;
}
return [];
}
Expand Down
2 changes: 1 addition & 1 deletion src/types/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export type PluginConfiguration =
entry: NormalizedGlob | null;
project: NormalizedGlob | null;
}
| false;
| boolean;

export type PluginsConfiguration = Record<PluginName, PluginConfiguration>;

Expand Down
4 changes: 2 additions & 2 deletions src/util/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ export const hasDependency = (dependencies: Set<string>, values: (string | RegEx
});

export const normalizePluginConfig = (pluginConfig: RawPluginConfiguration) => {
if (pluginConfig === false) {
return false;
if (typeof pluginConfig === 'boolean') {
return pluginConfig;
} else {
const isObject = typeof pluginConfig !== 'string' && !Array.isArray(pluginConfig);
const config = isObject ? arrayify(pluginConfig.config) : pluginConfig ? arrayify(pluginConfig) : null;
Expand Down
4 changes: 2 additions & 2 deletions tests/workspaces-plugin-config.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ test('Use root plugin config in workspaces', async () => {

assert.deepEqual(counters, {
...baseCounters,
total: 6,
processed: 6,
total: 9,
processed: 9,
});
});

0 comments on commit a06925d

Please sign in to comment.