Skip to content

Commit c9bbfb1

Browse files
authored
Fix installing XO on npm 6 by bundling TS-dependent dependencies to avoid hoisting (#624)
1 parent eefd88a commit c9bbfb1

File tree

4 files changed

+13
-4
lines changed

4 files changed

+13
-4
lines changed

index.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import {fileURLToPath} from 'node:url';
12
import path from 'node:path';
23
import {ESLint} from 'eslint';
34
import {globby, isGitIgnoredSync} from 'globby';
@@ -26,7 +27,10 @@ const runEslint = async (lint, options) => {
2627
return getIgnoredReport(filePath);
2728
}
2829

29-
const eslint = new ESLint(eslintOptions);
30+
const eslint = new ESLint({
31+
...eslintOptions,
32+
resolvePluginsRelativeTo: path.dirname(fileURLToPath(import.meta.url)),
33+
});
3034

3135
if (filePath && await eslint.isPathIgnored(filePath)) {
3236
return getIgnoredReport(filePath);

lib/options-manager.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ const mergeWithPrettierConfig = (options, prettierOptions) => {
437437

438438
const buildTSConfig = options => config => {
439439
if (options.ts) {
440-
config.baseConfig.extends.push('xo-typescript');
440+
config.baseConfig.extends.push(require.resolve('eslint-config-xo-typescript'));
441441
config.baseConfig.parser = require.resolve('@typescript-eslint/parser');
442442
config.baseConfig.parserOptions = {
443443
...config.baseConfig.parserOptions,

package.json

+5
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@
5151
"javascript",
5252
"typescript"
5353
],
54+
"bundledDependencies": [
55+
"@typescript-eslint/eslint-plugin",
56+
"@typescript-eslint/parser",
57+
"eslint-config-xo-typescript"
58+
],
5459
"dependencies": {
5560
"@eslint/eslintrc": "^1.0.1",
5661
"@typescript-eslint/eslint-plugin": "^4.32.0",

test/options-manager.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ test('buildConfig: prettier: true, typescript file', t => {
127127

128128
// eslint-prettier-config must always be last
129129
t.is(config.baseConfig.extends[config.baseConfig.extends.length - 1], 'plugin:prettier/recommended');
130-
t.is(config.baseConfig.extends[config.baseConfig.extends.length - 2], 'xo-typescript');
130+
t.regex(config.baseConfig.extends[config.baseConfig.extends.length - 2], /xo-typescript/);
131131

132132
// Indent rule is not enabled
133133
t.is(config.baseConfig.rules.indent, undefined);
@@ -429,7 +429,7 @@ test('buildConfig: extends', t => {
429429
test('buildConfig: typescript', t => {
430430
const config = manager.buildConfig({ts: true, tsConfigPath: './tsconfig.json'});
431431

432-
t.is(config.baseConfig.extends[config.baseConfig.extends.length - 1], 'xo-typescript');
432+
t.regex(config.baseConfig.extends[config.baseConfig.extends.length - 1], /xo-typescript/);
433433
t.is(config.baseConfig.parser, require.resolve('@typescript-eslint/parser'));
434434
t.deepEqual(config.baseConfig.parserOptions, {
435435
warnOnUnsupportedTypeScriptVersion: false,

0 commit comments

Comments
 (0)