Skip to content

Commit c4df466

Browse files
committed
refactor(dynamite)!: do not double escape names
Signed-off-by: Nikolas Rimikis <[email protected]>
1 parent ea395bc commit c4df466

File tree

16 files changed

+250
-185
lines changed

16 files changed

+250
-185
lines changed

packages/dynamite/dynamite/lib/src/builder/built_object_serializer.dart

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,10 @@ Iterable<String> deserializeProperty(
145145
final result = resolveType(
146146
spec,
147147
state,
148-
'${identifier}_${toDartName(propertyName, uppercaseFirstCharacter: true)}',
148+
toDartName(
149+
propertyName,
150+
identifier: identifier,
151+
),
149152
propertySchema,
150153
nullable: isDartParameterNullable(schema.required.contains(propertyName), propertySchema),
151154
);
@@ -174,7 +177,10 @@ Iterable<String> serializePropertyNullable(
174177
final result = resolveType(
175178
spec,
176179
state,
177-
'${identifier}_${toDartName(propertyName, uppercaseFirstCharacter: true)}',
180+
toDartName(
181+
propertyName,
182+
identifier: identifier,
183+
),
178184
propertySchema,
179185
nullable: isDartParameterNullable(schema.required.contains(propertyName), propertySchema),
180186
);
@@ -206,7 +212,10 @@ Iterable<String> serializeProperty(
206212
final result = resolveType(
207213
spec,
208214
state,
209-
'${identifier}_${toDartName(propertyName, uppercaseFirstCharacter: true)}',
215+
toDartName(
216+
propertyName,
217+
identifier: identifier,
218+
),
210219
propertySchema,
211220
nullable: isDartParameterNullable(schema.required.contains(propertyName), propertySchema),
212221
);

packages/dynamite/dynamite/lib/src/builder/client.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ Iterable<Method> buildTags(
288288
state,
289289
toDartName(
290290
'$operationName-${parameter.name}',
291-
uppercaseFirstCharacter: true,
291+
className: true,
292292
),
293293
parameter.schema!,
294294
nullable: !parameterRequired,
@@ -319,10 +319,10 @@ Iterable<Method> buildTags(
319319
if (response.headers != null) {
320320
final identifierBuilder = StringBuffer();
321321
if (tag != null) {
322-
identifierBuilder.write(toDartName(tag, uppercaseFirstCharacter: true));
322+
identifierBuilder.write(toDartName(tag, className: true));
323323
}
324324
identifierBuilder
325-
..write(toDartName(operationName, uppercaseFirstCharacter: true))
325+
..write(toDartName(operationName, className: true))
326326
..write('Headers');
327327
headersType = resolveObject(
328328
spec,
@@ -356,7 +356,7 @@ Iterable<Method> buildTags(
356356
response,
357357
spec,
358358
state,
359-
toDartName(identifierBuilder.toString(), uppercaseFirstCharacter: true),
359+
toDartName(identifierBuilder.toString(), className: true),
360360
);
361361

362362
if (!hasUriParameters) {
@@ -581,7 +581,7 @@ final authentication = $client.authentications?.firstWhereOrNull(
581581
final securityScheme = spec.components!.securitySchemes![requirement.keys.single]!;
582582
final dynamiteAuth = toDartName(
583583
'Dynamite-${securityScheme.fullName.join('-')}-Authentication',
584-
uppercaseFirstCharacter: true,
584+
className: true,
585585
);
586586
return refer(dynamiteAuth, 'package:dynamite_runtime/http_client.dart')
587587
.newInstance(const [])

packages/dynamite/dynamite/lib/src/builder/generate_schemas.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Iterable<Spec> generateSchemas(
1111
) sync* {
1212
if (spec.components?.schemas != null) {
1313
for (final schema in spec.components!.schemas!.entries) {
14-
final identifier = toDartName(schema.key, uppercaseFirstCharacter: true);
14+
final identifier = toDartName(schema.key, className: true);
1515
final result = resolveType(
1616
spec,
1717
state,

packages/dynamite/dynamite/lib/src/builder/resolve_mime_type.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ TypeResult? resolveMimeTypeDecode(
2525
final result = resolveType(
2626
spec,
2727
state,
28-
toDartName('$identifier-$mimeType', uppercaseFirstCharacter: true),
28+
toDartName('$identifier-$mimeType', className: true),
2929
mediaType.schema!,
3030
);
3131

@@ -67,7 +67,7 @@ Iterable<String> resolveMimeTypeEncode(
6767
final result = resolveType(
6868
spec,
6969
state,
70-
toDartName('$identifier-request-$mimeType', uppercaseFirstCharacter: true),
70+
toDartName('$identifier-request-$mimeType', className: true),
7171
mediaType.schema!,
7272
nullable: dartParameterNullable,
7373
);

packages/dynamite/dynamite/lib/src/builder/resolve_object.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ TypeResultObject resolveObject(
4343
var result = resolveType(
4444
spec,
4545
state,
46-
'${identifier}_${toDartName(propertyName, uppercaseFirstCharacter: true)}',
46+
toDartName(
47+
propertyName,
48+
identifier: identifier,
49+
),
4750
propertySchema,
4851
nullable: isDartParameterNullable(
4952
schema.required.contains(propertyName),

packages/dynamite/dynamite/lib/src/builder/resolve_ofs.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,10 @@ TypeResult resolveAllOf(
8888
final result = resolveType(
8989
spec,
9090
state,
91-
'${identifier}_${toDartName(propertyName, uppercaseFirstCharacter: true)}',
91+
toDartName(
92+
propertyName,
93+
identifier: identifier,
94+
),
9295
propertySchema,
9396
nullable: isDartParameterNullable(
9497
s.required.contains(propertyName),

packages/dynamite/dynamite/lib/src/builder/resolve_type.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ TypeResult resolveType(
2626
final subResult = resolveType(
2727
spec,
2828
state,
29-
toDartName(name, uppercaseFirstCharacter: true),
29+
toDartName(name, className: true),
3030
spec.components!.schemas![name]!,
3131
nullable: nullable,
3232
);

packages/dynamite/dynamite/lib/src/helpers/dart_helpers.dart

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,59 @@
1+
/// Converts the provided [name] into a `lowerCamelCase` alphanumerical
2+
/// representation.
3+
///
4+
/// If the resulting name is reserved by dart or only contains numbers it is
5+
/// prefixed with a `$`.
6+
/// Specify [className] to return a `UpperCamelCase` name.
7+
///
8+
/// The optional [identifier] will be prefixed and separated by an `_` if
9+
/// provided. The reserved name check will be made against the resulting
10+
/// string. The identifier itself is not checked to be a valid dart name, nor
11+
/// will `className` have any affect.
12+
///
13+
/// ```dart
14+
/// print(toDartName(
15+
/// 'test-variable-name',
16+
/// )); // testVariableName
17+
///
18+
/// print(toDartName(
19+
/// 'test-variable-name',
20+
/// className: true,
21+
/// )); // TestVariableName
22+
///
23+
/// print(toDartName(
24+
/// '10',
25+
/// )); // $10
26+
///
27+
/// print(toDartName(
28+
/// 'String',
29+
/// )); // string
30+
///
31+
/// print(toDartName(
32+
/// 'String',
33+
/// className: true,
34+
/// )); // $String
35+
///
36+
/// print(toDartName(
37+
/// 'string',
38+
/// identifier: 'Identifier'
39+
/// )); // Identifier_String
40+
///
41+
/// print(toDartName(
42+
/// 'string',
43+
/// identifier: 'Identifier'
44+
/// className: false,
45+
/// )); // Identifier_String
46+
/// ```
147
String toDartName(
248
String name, {
3-
bool uppercaseFirstCharacter = false,
49+
String? identifier,
50+
bool className = false,
451
}) {
52+
final capitalize = identifier != null || className;
53+
554
var result = '';
6-
var upperCase = uppercaseFirstCharacter;
7-
var firstCharacter = !uppercaseFirstCharacter;
55+
var upperCase = capitalize;
56+
var firstCharacter = !capitalize;
857
for (final char in name.split('')) {
958
if (_isNonAlphaNumericString(char)) {
1059
upperCase = true;
@@ -15,6 +64,10 @@ String toDartName(
1564
}
1665
}
1766

67+
if (identifier != null) {
68+
return '${identifier}_$result';
69+
}
70+
1871
if (_reservedNames.contains(result) || RegExp(r'^[0-9]+$', multiLine: true).hasMatch(result)) {
1972
return '\$$result';
2073
}

packages/dynamite/dynamite/lib/src/helpers/dynamite.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ String filterMethodName(String operationId, String tag) {
1515
return output.join('-');
1616
}
1717

18-
String clientName(String tag) => '\$${toDartName(tag, uppercaseFirstCharacter: true)}Client';
18+
String clientName(String tag) => '\$${toDartName(tag, className: true)}Client';
1919

2020
bool isDartParameterNullable(
2121
bool required,

packages/dynamite/dynamite/test/dart_helpers_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ void main() {
2020

2121
for (final value in values) {
2222
expect(toDartName(value.$1), value.$2);
23-
expect(toDartName(value.$1, uppercaseFirstCharacter: true), value.$3);
23+
expect(toDartName(value.$1, className: true), value.$3);
2424
}
2525
});
2626

0 commit comments

Comments
 (0)