From affd1de293878329dc986bae59a0bdf8079e154a Mon Sep 17 00:00:00 2001 From: Anton Golub Date: Sun, 22 Dec 2024 00:07:26 +0300 Subject: [PATCH] refactor(util): simplify `snakeToCamel` --- src/goods.ts | 4 +--- src/util.ts | 10 +++------- test/util.test.js | 1 + 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/goods.ts b/src/goods.ts index 65aac1cd44..1a5888fe70 100644 --- a/src/goods.ts +++ b/src/goods.ts @@ -42,9 +42,7 @@ export const parseArgv = ( ): minimist.ParsedArgs => Object.entries(minimist(args, opts)).reduce( (m, [k, v]) => { - const kTrans = opts.camelCase - ? (k: string) => snakeToCamel(k.replace(/-/, '_')) - : identity + const kTrans = opts.camelCase ? snakeToCamel : identity const vTrans = opts.parseBoolean ? parseBool : identity const [_k, _v] = k === '--' || k === '_' ? [k, v] : [kTrans(k), vTrans(v)] m[_k] = _v diff --git a/src/util.ts b/src/util.ts index bd9f7a1343..7296e0a24e 100644 --- a/src/util.ts +++ b/src/util.ts @@ -286,20 +286,16 @@ export const proxyOverride = ( }, }) as T -// https://stackoverflow.com/a/7888303 export const camelToSnake = (str: string) => str .split(/(?=[A-Z])/) .map((s) => s.toUpperCase()) .join('_') -// https://stackoverflow.com/a/61375162 export const snakeToCamel = (str: string) => - str - .toLowerCase() - .replace(/([-_][a-z])/g, (group) => - group.toUpperCase().replace('-', '').replace('_', '') - ) + str.toLowerCase().replace(/([a-z])[_-]+([a-z])/g, (_, p1, p2) => { + return p1 + p2.toUpperCase() + }) export const parseBool = (v: string): boolean | string => ({ true: true, false: false })[v] ?? v diff --git a/test/util.test.js b/test/util.test.js index 234ed6c5c6..e7d10e3e81 100644 --- a/test/util.test.js +++ b/test/util.test.js @@ -145,5 +145,6 @@ describe('util', () => { assert.equal(snakeToCamel('NOTHROW'), 'nothrow') assert.equal(snakeToCamel('PREFER_LOCAL'), 'preferLocal') assert.equal(snakeToCamel('SOME_MORE_BIG_STR'), 'someMoreBigStr') + assert.equal(snakeToCamel('kebab-input-str'), 'kebabInputStr') }) })