Files
robonen 7693b49253 chore(configs): migrate oxlint→eslint presets, refactor tsconfig
- 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.
2026-06-07 16:28:10 +07:00

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' });
});
});