From 30bfcb0c107d9e3130c090d166a2cd4cadf52cb1 Mon Sep 17 00:00:00 2001 From: corvus278 Date: Tue, 23 Jun 2026 02:03:31 +0300 Subject: [PATCH] fix(cli): resolve bundled config and package.json relative to module CLI read './typograf.json' and './package.json' relative to the current working directory, so it crashed with ENOENT from any directory other than the package root. Resolve both paths from import.meta.url instead. --- bin/cli.mjs | 6 ++++-- bin/utils.mjs | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/bin/cli.mjs b/bin/cli.mjs index f8ef9f6..872313e 100755 --- a/bin/cli.mjs +++ b/bin/cli.mjs @@ -1,7 +1,8 @@ #!/usr/bin/env node import { readFileSync, writeFileSync } from 'node:fs'; -import { resolve } from 'node:path'; +import { dirname, join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; import { program } from 'commander'; import Typograf from 'typograf'; @@ -9,6 +10,7 @@ import Typograf from 'typograf'; import utils from './utils.mjs'; import printError from './printError.mjs'; +const __dirname = dirname(fileURLToPath(import.meta.url)); const locales = Typograf.getLocales(); const types = ['digit', 'name', 'default']; @@ -17,7 +19,7 @@ function splitByCommas(str) { } program - .version(JSON.parse(readFileSync('./package.json', 'utf8')).version) + .version(JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf8')).version) .usage('[options] ') .option('-l, --locale ', `set the locale for rules (separated by commas). Available locales: "${locales.join('", "')}". Default: ru`, splitByCommas) .option('-d, --disable-rule ', 'disable rules (separated by commas)', splitByCommas) diff --git a/bin/utils.mjs b/bin/utils.mjs index 81673d6..0e4b20d 100644 --- a/bin/utils.mjs +++ b/bin/utils.mjs @@ -1,5 +1,6 @@ import { readFileSync, existsSync, statSync } from 'node:fs'; -import { extname } from 'node:path'; +import { dirname, extname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; import { program } from 'commander'; @@ -7,7 +8,8 @@ import lint from './lint.mjs'; import printError from './printError.mjs'; import Typograf from 'typograf'; -const defaultConfig = JSON.parse(readFileSync('./typograf.json', 'utf8')); +const __dirname = dirname(fileURLToPath(import.meta.url)); +const defaultConfig = JSON.parse(readFileSync(join(__dirname, '../typograf.json'), 'utf8')); const DEFAULT_USER_CONFIG = '.typograf.json';