Skip to content

Commit fb90bf9

Browse files
authored
Merge pull request #20 from dev-five-git/add-wrap-target
Add warp guard
2 parents 31d83df + bd3b504 commit fb90bf9

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"changes":{"packages/generator/package.json":"Patch"},"note":"Add warp guard","date":"2025-12-12T03:17:58.146361300Z"}

packages/generator/src/__tests__/wrap-interface-key-guard.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,18 @@ test.each([
4040
] as const)('wrapInterfaceKeyGuard wraps key with multiple slashes: %s -> %s', (key, expected) => {
4141
expect(wrapInterfaceKeyGuard(key)).toBe(expected)
4242
})
43+
44+
test.each([
45+
['field"name', '[`field"name`]'],
46+
["field'name", "[`field'name`]"],
47+
['field`name', '[`field`name`]'],
48+
['field-name', '[`field-name`]'],
49+
['field name', '[`field name`]'],
50+
['field@name', '[`field@name`]'],
51+
['field#name', '[`field#name`]'],
52+
['field$name', 'field$name'], // $ is valid in identifiers
53+
['field_name', 'field_name'], // _ is valid in identifiers
54+
['123field', '[`123field`]'], // cannot start with number
55+
] as const)('wrapInterfaceKeyGuard wraps key with forbidden characters: %s -> %s', (key, expected) => {
56+
expect(wrapInterfaceKeyGuard(key)).toBe(expected)
57+
})

packages/generator/src/wrap-interface-key-guard.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
export function wrapInterfaceKeyGuard(key: string): string {
2-
if (key.includes('/') || key.includes('.')) {
2+
// Empty string should be returned as-is
3+
if (key === '') {
4+
return key
5+
}
6+
7+
// Check if key contains forbidden characters that require wrapping
8+
// TypeScript identifier pattern: starts with letter/underscore/dollar, followed by letters/numbers/underscore/dollar
9+
const isValidIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)
10+
11+
if (
12+
!isValidIdentifier ||
13+
key.includes('"') ||
14+
key.includes("'") ||
15+
key.includes('`')
16+
) {
317
return `[\`${key}\`]`
418
}
519
return key

0 commit comments

Comments
 (0)