Skip to content

Commit 428b0c7

Browse files
author
Joe Gores
authoredApr 20, 2023
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

+1-1
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

+2-1
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

+10
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

+1
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

+1-1
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

+2
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

+3
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

+2-1
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"

‎pnpm-lock.yaml

+2,302-6,407
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎website/pages/docs/options.mdx

+1-1
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ When used with `--out-dir`, it ignores already existing files.
253253

254254
## Filename case
255255

256-
Specify a custom filename case. Possible values: `pascal` for PascalCase, `kebab` for kebab-case or `camel` for camelCase.
256+
Specify a custom filename case. Possible values: `pascal` for PascalCase, `kebab` for kebab-case, `camel` for camelCase, or `snake` for snake_case.
257257

258258
| Default | CLI Override | API Override |
259259
| -------- | ----------------- | ---------------------- |

1 commit comments

Comments
 (1)

vercel[bot] commented on Apr 20, 2023

@vercel[bot]

Successfully deployed to the following URLs:

svgr – ./

svgr-git-main-gregberge.vercel.app
api.react-svgr.com
svgr-gregberge.vercel.app

Please sign in to comment.