diff --git a/package-lock.json b/package-lock.json index e7c32e4..c3e15e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,17 @@ { "name": "rman", - "version": "0.37.1", + "version": "0.37.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rman", - "version": "0.37.1", + "version": "0.37.2", "license": "MIT", "dependencies": { "@netlify/parse-npm-script": "^0.1.2", "ansi-colors": "^4.1.3", + "cross-dirname": "^0.1.0", "easy-table": "^1.2.0", "envinfo": "^7.21.0", "fast-glob": "^3.3.3", @@ -60,7 +61,6 @@ "prettier": "^3.8.0", "rimraf": "^6.1.2", "ts-cleanup": "^1.3.0", - "ts-gems": "^3.11.3", "typescript": "^5.9.3" }, "engines": { @@ -2882,6 +2882,12 @@ "dev": true, "license": "MIT" }, + "node_modules/cross-dirname": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cross-dirname/-/cross-dirname-0.1.0.tgz", + "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", diff --git a/package.json b/package.json index 5208209..99ac20b 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,14 @@ { "name": "rman", "description": "Repository manager", - "version": "0.37.1", + "version": "0.37.2", "author": "Panates", "license": "MIT", "dependencies": { "@netlify/parse-npm-script": "^0.1.2", "ansi-colors": "^4.1.3", "easy-table": "^1.2.0", + "cross-dirname": "^0.1.0", "envinfo": "^7.21.0", "fast-glob": "^3.3.3", "ini": "^6.0.0", diff --git a/src/cli.ts b/src/cli.ts index 7010406..ce583c8 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,4 +1,5 @@ import colors from 'ansi-colors'; +import { getDirname } from 'cross-dirname'; import fs from 'fs/promises'; import logger from 'npmlog'; import path from 'path'; @@ -14,7 +15,6 @@ import { RunCommand } from './commands/run-command.js'; import { VersionCommand } from './commands/version-command.js'; import { Command } from './core/command.js'; import { Repository } from './core/repository.js'; -import { getDirname } from './utils/get-dirname.js'; export async function runCli(options?: { argv?: string[]; cwd?: string }) { try { diff --git a/src/core/repository.ts b/src/core/repository.ts index 4037904..0442d3b 100644 --- a/src/core/repository.ts +++ b/src/core/repository.ts @@ -3,7 +3,6 @@ import fs from 'fs'; import * as yaml from 'js-yaml'; import path from 'path'; import merge from 'putil-merge'; -import { getPackageJson } from '../utils/get-dirname.js'; import { Package } from './package.js'; export class Repository extends Package { @@ -118,7 +117,11 @@ export class Repository extends Package { protected static _readConfig(dirname: string): any { const result = {}; - const pkgJson = getPackageJson(dirname); + const f = path.resolve(dirname, 'package.json'); + let pkgJson; + if (fs.existsSync(f)) { + pkgJson = JSON.parse(fs.readFileSync(f, 'utf-8')); + } if (pkgJson && typeof pkgJson.rman === 'object') merge(result, pkgJson.rman, { deep: true }); let filename = path.resolve(dirname, '.rman.yml'); if (fs.existsSync(filename)) { diff --git a/src/utils/get-dirname.ts b/src/utils/get-dirname.ts deleted file mode 100644 index 9067dc5..0000000 --- a/src/utils/get-dirname.ts +++ /dev/null @@ -1,27 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -import CallSite = NodeJS.CallSite; - -export function getDirname(): string { - const pst = Error.prepareStackTrace; - Error.prepareStackTrace = function (_, stack) { - Error.prepareStackTrace = pst; - return stack; - }; - - const e = new Error(); - if (!e.stack) throw Error('Can not parse stack'); - const stack: CallSite[] = (e.stack as unknown as CallSite[]).slice(1); - while (stack.length) { - const frame = stack.shift(); - const filename = frame && frame.getFileName(); - if (filename) return path.dirname(filename).replace('file://', ''); - } - throw Error('Can not parse stack'); -} - -export function getPackageJson(dirname: string): any { - const f = path.resolve(dirname, 'package.json'); - if (!fs.existsSync(f)) return; - return JSON.parse(fs.readFileSync(f, 'utf-8')); -}