Skip to content

Commit 428b0c7

Browse files
author
Joe Gores
authored
feat: add snake_case filename option (#857)
1 parent 22a5a93 commit 428b0c7

File tree

10 files changed

+2325
-6412
lines changed

10 files changed

+2325
-6412
lines changed

packages/cli/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Options:
2222
-d, --out-dir <dirname> output files into a directory
2323
--ignore-existing ignore existing files when used with --out-dir
2424
--ext <ext> specify a custom file extension (default: "js")
25-
--filename-case <case> specify filename case ("pascal", "kebab", "camel") (default: "pascal")
25+
--filename-case <case> specify filename case ("pascal", "kebab", "camel", "snake") (default: "pascal")
2626
--icon use "1em" as width and height
2727
--native add react-native support with react-native-svg
2828
--memo add React.memo into the result component

packages/cli/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@
3939
"chalk": "^4.1.2",
4040
"commander": "^9.4.1",
4141
"dashify": "^2.0.0",
42-
"glob": "^8.0.3"
42+
"glob": "^8.0.3",
43+
"snake-case": "^3.0.4"
4344
},
4445
"devDependencies": {
4546
"@types/glob": "^8.1.0",

packages/cli/src/__snapshots__/index.test.ts.snap

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,16 @@ exports[`cli should support different filename cases with directory output: --fi
131131
]
132132
`;
133133

134+
exports[`cli should support different filename cases with directory output: --filename-case=snake 1`] = `
135+
[
136+
"camel_case.js",
137+
"index.js",
138+
"kebab_case.js",
139+
"multiple_dashes.js",
140+
"pascal_case.js",
141+
]
142+
`;
143+
134144
exports[`cli should support stdin filepath 1`] = `
135145
"import * as React from 'react'
136146
const SvgFile = (props) => (

packages/cli/src/index.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ describe('cli', () => {
147147
[1, '--filename-case=camel'],
148148
[2, '--filename-case=pascal'],
149149
[3, '--filename-case=kebab'],
150+
[4, '--filename-case=snake'],
150151
])(
151152
'should support different filename cases with directory output',
152153
async (index, args) => {

packages/cli/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ program
103103
.option('--ext <ext>', 'specify a custom file extension (default: "js")')
104104
.option(
105105
'--filename-case <case>',
106-
'specify filename case ("pascal", "kebab", "camel") (default: "pascal")',
106+
'specify filename case ("pascal", "kebab", "camel", "snake") (default: "pascal")',
107107
)
108108
.option(
109109
'--icon [size]',

packages/cli/src/util.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@ describe('util', () => {
2525
expect(transformFilename('FooBar', 'camel')).toBe('fooBar')
2626
expect(transformFilename('FooBar', 'kebab')).toBe('foo-bar')
2727
expect(transformFilename('FooBar', 'pascal')).toBe('FooBar')
28+
expect(transformFilename('FooBar', 'snake')).toBe('foo_bar')
2829

2930
expect(transformFilename('foo_bar', 'camel')).toBe('fooBar')
3031
expect(transformFilename('foo_bar', 'kebab')).toBe('foo-bar')
3132
expect(transformFilename('foo_bar', 'pascal')).toBe('FooBar')
33+
expect(transformFilename('foo_bar', 'snake')).toBe('foo_bar')
3234
})
3335
})
3436

packages/cli/src/util.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import prettier from '@svgr/plugin-prettier'
99
import camelCase from 'camelcase'
1010
// @ts-ignore
1111
import dashify from 'dashify'
12+
import { snakeCase } from 'snake-case'
1213

1314
export function transformFilename(
1415
filename: string,
@@ -21,6 +22,8 @@ export function transformFilename(
2122
return camelCase(filename)
2223
case 'pascal':
2324
return camelCase(filename, { pascalCase: true })
25+
case 'snake':
26+
return snakeCase(filename)
2427
default:
2528
throw new Error(`Unknown --filename-case ${filenameCase}`)
2629
}

packages/core/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@
4141
"@babel/core": "^7.21.3",
4242
"@svgr/babel-preset": "workspace:*",
4343
"camelcase": "^6.2.0",
44-
"cosmiconfig": "^8.1.3"
44+
"cosmiconfig": "^8.1.3",
45+
"snake-case": "^3.0.4"
4546
},
4647
"devDependencies": {
4748
"svgo": "^3.0.2"

0 commit comments

Comments
 (0)