From 0911dc9d9329f0d4a3bab5f5ba0a57cb10b0a28a Mon Sep 17 00:00:00 2001 From: Jerome Fitzgerald Date: Mon, 3 May 2021 22:01:54 -0400 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20=20grep=20package.json=20o?= =?UTF-8?q?ld-fashioned=20way?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This allows us to have a folder to folder ratio with dist <=> src --- .husky/prepare-commit-msg | 2 +- bin/git-cz.js | 2 +- package.json | 10 ++++----- src/utils/getConfig.ts | 47 +++++++++++++++++++++++++++++++++++++++ src/utils/parseArgs.ts | 16 +++++++++++-- tsconfig.json | 4 ++-- 6 files changed, 70 insertions(+), 11 deletions(-) create mode 100644 src/utils/getConfig.ts diff --git a/.husky/prepare-commit-msg b/.husky/prepare-commit-msg index 540decb0..96568fe5 100755 --- a/.husky/prepare-commit-msg +++ b/.husky/prepare-commit-msg @@ -9,6 +9,6 @@ else : yarn pretty-quick --staged exec < /dev/tty - node ./dist/src/cli.js --hook || true + node ./dist/cli.js --hook || true fi diff --git a/bin/git-cz.js b/bin/git-cz.js index d55fe142..8c68ebd1 100755 --- a/bin/git-cz.js +++ b/bin/git-cz.js @@ -3,4 +3,4 @@ /* eslint-disable filenames/match-regex */ /* eslint-disable import/no-unassigned-import */ -require('../dist/src/cli') +require('../dist/cli') diff --git a/package.json b/package.json index d3d410f4..6295fdae 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "@jeromefitz/git-cz", "version": "8.0.0-canary.1", - "description": "Semantic emojified git commit, git-cz w/ gitflow branching.", - "main": "dist/src/cz.js", + "description": "git(moji)-cz => conventional commits, gitflow branching", + "main": "dist/cz.js", "bin": { "git-cz": "./bin/git-cz.js", "gitcz": "./bin/git-cz.js" @@ -38,10 +38,10 @@ ], "scripts": { "branch": "git-cz --branch --allow-empty", - "build:binaries": "mkdirp binaries && pkg ./dist/src/cli.js --out-path binaries --targets node12-linux-x64,node12-macos-x64,node12-win-x64", + "build:binaries": "mkdirp binaries && pkg ./dist/cli.js --out-path binaries --targets node12-linux-x64,node12-macos-x64,node12-win-x64", "build": "tsc", "clean": "rimraf dist", - "dry:run": "yarn clean && tsc && node ./dist/src/cli", + "dry:run": "yarn clean && tsc && node ./dist/cli", "gitmoji": "./scripts/gitmoji/gitmojiInit.sh && yarn lint-fix", "lint-eslint": "eslint . --ext js,jsx,ts,tsx --max-warnings=0", "lint-fix": "yarn prettier-fix && eslint . --ext js,jsx,ts,tsx --fix --max-warnings=0", @@ -107,7 +107,7 @@ }, "config": { "commitizen": { - "path": "./dist/src/cz.js" + "path": "./dist/cz.js" } } } diff --git a/src/utils/getConfig.ts b/src/utils/getConfig.ts new file mode 100644 index 00000000..4225f595 --- /dev/null +++ b/src/utils/getConfig.ts @@ -0,0 +1,47 @@ +/* eslint-disable global-require, import/no-dynamic-require, operator-linebreak */ +import path from 'path' +import fs from 'fs' + +const configFiles = ['package.json'] + +const findOverrides = (root) => { + const dir = root || process.cwd() + + for (const file of configFiles) { + const filename = path.resolve(dir, file) + + if (fs.existsSync(filename) && fs.statSync(filename).isFile()) { + return require(filename) + } + } + + const parent = path.resolve(dir, '..') + + if (parent !== dir) { + return findOverrides(parent) + } + + const pkgFilename = path.join(dir, 'package.json') + + if (fs.existsSync(pkgFilename)) { + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const changelog = require(pkgFilename).config.commitizen.changelog + + if (changelog) { + return changelog + } + // eslint-disable-next-line no-empty + } catch (error) {} + } + + return {} +} + +const getConfig = (root) => { + const overrides = findOverrides(root) + + return { ...overrides } +} + +export default getConfig diff --git a/src/utils/parseArgs.ts b/src/utils/parseArgs.ts index b2b580f7..0fac756e 100644 --- a/src/utils/parseArgs.ts +++ b/src/utils/parseArgs.ts @@ -2,10 +2,22 @@ /* eslint-disable no-console */ /* eslint-disable id-length */ import minimist from 'minimist' -import pkg from '../../package.json' +import getConfig from './getConfig' +import getGitRootDir from './getGitRootDir' + +let root +try { + root = getGitRootDir() +} catch (error) { + throw new Error('Could not find Git root folder') +} + +const pkg = getConfig(root) const helpScreen = ` - ${pkg.description} + > ${pkg.name} + > ${pkg.version} + > ${pkg.description} Usage: git-cz [options] diff --git a/tsconfig.json b/tsconfig.json index bc99cfd5..e4b813f8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,11 +6,11 @@ "outDir": "./dist", "paths": {}, "noUnusedParameters": false, // @todo(lint) - "rootDir": ".", + "rootDir": "./src", "strict": false, "target": "ES6" }, "extends": "@jeromefitz/codestyle/tsconfig.react.json", - "include": ["src/**/*.js", "src/**/*.ts", "package.json"], + "include": ["src/**/*.js", "src/**/*.ts"], "exclude": ["node_modules"] }