Skip to content

Commit d932454

Browse files
committed
Fix optional import
1 parent be388b9 commit d932454

File tree

5 files changed

+48
-6
lines changed

5 files changed

+48
-6
lines changed

src/config-base/eslint.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ test('is a valid ESLint config', async () => {
1818
});
1919

2020
test('skips parser options when `typescript-eslint` is unavailable', async () => {
21-
vi.doMock('typescript-eslint', () => ({}));
21+
/* @ts-expect-error */
22+
vi.doMock('typescript-eslint', () => undefined);
2223

2324
const { default: config } = await import('./eslint.ts');
2425

src/types/oxlint.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import type { ExternalPluginEntry, OxlintConfig, OxlintOverride } from 'oxlint';
2+
import type { StandardConfigOptions } from './common.d.ts';
23

34
export type OxlintOverrideEntry = Pick<OxlintOverride, 'rules'>;
45

56
export type OxlintPluginEntry = Exclude<ExternalPluginEntry, string>;
7+
8+
export type StandardConfig = OxlintConfig & StandardConfigOptions;

src/types/oxlint.test-d.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import type { OxlintOverrideEntry, OxlintPluginEntry } from './oxlint.d.ts';
1+
import type { StandardConfigOptions } from './common.d.ts';
2+
import type {
3+
OxlintOverrideEntry,
4+
OxlintPluginEntry,
5+
StandardConfig,
6+
} from './oxlint.d.ts';
27
import { expectTypeOf, test } from 'vitest';
38

49
test('exposes valid types', () => {
@@ -8,4 +13,8 @@ test('exposes valid types', () => {
813
expectTypeOf<OxlintPluginEntry>().toBeObject();
914
expectTypeOf<OxlintPluginEntry>().toHaveProperty('name');
1015
expectTypeOf<OxlintPluginEntry>().toHaveProperty('specifier');
16+
17+
expectTypeOf<StandardConfig>().toBeObject();
18+
expectTypeOf<StandardConfig>().toHaveProperty('react');
19+
expectTypeOf<StandardConfig>().not.toEqualTypeOf<StandardConfigOptions>();
1120
});

src/utilities/define-oxlint-config/index.test.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
import { defineConfig as standardDefineConfig } from '@standard-config/oxlint';
2-
import { expect, test, vi } from 'vitest';
2+
import { beforeEach, expect, test, vi } from 'vitest';
33
import oxlintConfigBase from '../../config-base/oxlint.ts';
44
import oxlintConfigBaseReact from '../../config-react/oxlint.ts';
55
import defineOxlintConfig from './index.ts';
66

7+
beforeEach(() => {
8+
vi.resetModules();
9+
});
10+
711
vi.mock(import('@standard-config/oxlint'), async (importActual) => {
812
const actual = await importActual();
913

@@ -42,3 +46,12 @@ test('forwards the `react` option', () => {
4246
},
4347
});
4448
});
49+
50+
test('throws when `@standard-config/oxlint` is unavailable', async () => {
51+
/* @ts-expect-error */
52+
vi.doMock('@standard-config/oxlint', () => undefined);
53+
54+
const { default: defineOxlintConfig } = await import('./index.ts');
55+
56+
expect(() => defineOxlintConfig()).toThrowError('@standard-config/oxlint');
57+
});

src/utilities/define-oxlint-config/index.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,31 @@
11
import type { OxlintConfig } from 'oxlint';
2-
import { defineConfig as standardDefineConfig } from '@standard-config/oxlint';
2+
import type { StandardConfig } from '../../types/oxlint.d.ts';
33
import oxlintConfigBase from '../../config-base/oxlint.ts';
44
import oxlintConfigBaseReact from '../../config-react/oxlint.ts';
55

6+
/* oxlint-disable-next-line typescript/consistent-type-imports */
7+
let oxlintConfig: typeof import('@standard-config/oxlint') | undefined;
8+
9+
try {
10+
oxlintConfig = await import('@standard-config/oxlint');
11+
} catch {}
12+
613
/**
714
* Wrapper around `defineConfig` from `@standard-config/oxlint` that combines
815
* Standard Config’s Oxlint and ESLint configs, with optional overrides.
916
*/
1017
export default function defineOxlintConfig(
11-
...configs: Parameters<typeof standardDefineConfig>
18+
...configs: StandardConfig[]
1219
): OxlintConfig {
20+
const { defineConfig } = oxlintConfig ?? {};
21+
22+
if (typeof defineConfig !== 'function') {
23+
/* oxlint-disable-next-line eslint-plugin-unicorn/prefer-type-error */
24+
throw new Error(
25+
'Standard Config error: `@standard-config/oxlint` is missing'
26+
);
27+
}
28+
1329
let includeReactConfig = false;
1430

1531
for (const { react } of configs) {
@@ -18,7 +34,7 @@ export default function defineOxlintConfig(
1834
}
1935
}
2036

21-
return standardDefineConfig(
37+
return defineConfig(
2238
includeReactConfig ? oxlintConfigBaseReact : oxlintConfigBase,
2339
...configs
2440
);

0 commit comments

Comments
 (0)