7693b49253
- Replace @robonen/oxlint with @robonen/eslint (composable ESLint flat-config presets: base, typescript, vue, vitest, imports, node, stylistic). - Plugins bundled as deps: typescript-eslint, eslint-plugin-vue, @vitest/eslint-plugin, eslint-plugin-import-x, eslint-plugin-n, eslint-plugin-unicorn, @stylistic/eslint-plugin. - @robonen/tsconfig: add base/dom/node/vue configs for composite project refs.
68 lines
2.0 KiB
TypeScript
68 lines
2.0 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { compose } from '../src/compose';
|
|
import type { FlatConfig } from '../src/types';
|
|
|
|
describe('compose', () => {
|
|
it('should return empty array when no configs provided', () => {
|
|
expect(compose()).toEqual([]);
|
|
});
|
|
|
|
it('should wrap a single flat config object into an array', () => {
|
|
const config: FlatConfig = {
|
|
name: 'a',
|
|
rules: { 'no-console': 'warn' },
|
|
};
|
|
|
|
expect(compose(config)).toEqual([config]);
|
|
});
|
|
|
|
it('should flatten preset arrays into a single array', () => {
|
|
const preset: FlatConfig[] = [
|
|
{ name: 'a', rules: { 'no-console': 'warn' } },
|
|
{ name: 'b', rules: { 'no-debugger': 'error' } },
|
|
];
|
|
|
|
expect(compose(preset)).toEqual(preset);
|
|
});
|
|
|
|
it('should preserve order across presets and inline objects', () => {
|
|
const presetA: FlatConfig[] = [{ name: 'a' }];
|
|
const presetB: FlatConfig[] = [{ name: 'b' }, { name: 'c' }];
|
|
const inline: FlatConfig = { name: 'd' };
|
|
|
|
const result = compose(presetA, presetB, inline);
|
|
|
|
expect(result.map(c => c.name)).toEqual(['a', 'b', 'c', 'd']);
|
|
});
|
|
|
|
it('should not mutate the input arrays', () => {
|
|
const preset: FlatConfig[] = [{ name: 'a' }];
|
|
compose(preset, { name: 'b' });
|
|
|
|
expect(preset).toEqual([{ name: 'a' }]);
|
|
});
|
|
|
|
it('should skip falsy entries for conditional composition', () => {
|
|
const result = compose(
|
|
{ name: 'a' },
|
|
false,
|
|
null,
|
|
undefined,
|
|
{ name: 'b' },
|
|
);
|
|
|
|
expect(result.map(c => c.name)).toEqual(['a', 'b']);
|
|
});
|
|
|
|
it('should compose all presets together preserving order', () => {
|
|
const base: FlatConfig[] = [{ name: 'base/setup' }, { name: 'base/rules' }];
|
|
const ts: FlatConfig[] = [{ name: 'ts' }];
|
|
const custom: FlatConfig = { name: 'custom', rules: { 'no-console': 'off' } };
|
|
|
|
const result = compose(base, ts, custom);
|
|
|
|
expect(result.map(c => c.name)).toEqual(['base/setup', 'base/rules', 'ts', 'custom']);
|
|
expect(result.at(-1)?.rules).toEqual({ 'no-console': 'off' });
|
|
});
|
|
});
|