Skip to content

Commit 421c566

Browse files
committed
Update
1 parent db16d9b commit 421c566

23 files changed

+790
-585
lines changed

bin/generate_screen_bindings.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//.title
2+
// ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
3+
//
4+
// Dart/Flutter (DF) Packages by DevCetra.com & contributors. SSee LICENSE file
5+
// in root directory.
6+
//
7+
// ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
8+
//.title~
9+
10+
// import 'dart:io' show Directory;
11+
12+
import 'package:df_generate_screen/df_generate_screen.dart';
13+
import 'package:df_log/df_log.dart';
14+
15+
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
16+
17+
void main(List<String> args) async {
18+
DebugLog.debugOnly = false;
19+
await runGenerateScreenBindingsApp(args);
20+
}

lib/src/_generator_converger.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,13 @@ final generatorConverger = _GeneratorConverger(
2424
controllerTemplate,
2525
screenTemplate,
2626
viewTemplate,
27-
bindingsTemplate,
2827
] = templates;
2928

3029
for (final replacement in replacements) {
3130
final templates = {
3231
replacement.insight.controllerFileName: controllerTemplate,
3332
replacement.insight.screenFileName: screenTemplate,
3433
replacement.insight.viewFileName: viewTemplate,
35-
replacement.insight.bindingsFileName: bindingsTemplate,
3634
};
3735
for (final entry in templates.entries) {
3836
final fileName = entry.key;

lib/src/_index.g.dart

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ export 'dart_obj_to_list.dart';
1212
export 'dart_from_record_on_dart_object_x.dart';
1313
export 'generate_screen/generate.dart';
1414
export 'generate_screen/app.dart';
15-
export 'generate_screen_access/generator.dart';
15+
export 'generate_screen_access/generate.dart';
1616
export 'generate_screen_access/app.dart';
17-
export 'generate_screen_bindings/generate_screen_access.dart';
18-
export 'generate_screen_bindings/run_generte_screen_bindings_app.dart';
17+
export 'generate_screen_bindings/generate.dart';
18+
export 'generate_screen_bindings/app.dart';
1919

2020
// --- PRIVATE FILES (EXCLUDED) ---
2121
// export '_generator_converger.dart';
@@ -24,8 +24,9 @@ export 'generate_screen_bindings/run_generte_screen_bindings_app.dart';
2424
// export 'generate_screen/_generator_converger.dart';
2525
// export 'generate_screen/_insight_mappers.dart';
2626
// export 'generate_screen_access/_extract_class_insights_from_dart_file.dart';
27-
// export 'generate_screen_bindings/generate_parts/_generate_screen_bindings_file.dart';
28-
// export 'generate_screen_bindings/generate_parts/_replacements.dart';
27+
// export 'generate_screen_bindings/_generator_converger.dart';
28+
// export 'generate_screen_bindings/_extract_class_insights_from_dart_file.dart';
29+
// export 'generate_screen_bindings/_insight_mappers.dart';
2930

3031
// --- GENERATED FILES (EXCLUDED) ---
31-
// None found.
32+
// None found.

lib/src/generate_screen/_generator_converger.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,13 @@ final generatorConverger = _GeneratorConverger(
2424
controllerTemplate,
2525
screenTemplate,
2626
viewTemplate,
27-
bindingsTemplate,
2827
] = templates;
2928

3029
for (final replacement in replacements) {
3130
final templates = {
3231
replacement.insight.controllerFileName: controllerTemplate,
3332
replacement.insight.screenFileName: screenTemplate,
3433
replacement.insight.viewFileName: viewTemplate,
35-
replacement.insight.bindingsFileName: bindingsTemplate,
3634
};
3735
for (final entry in templates.entries) {
3836
final fileName = entry.key;

lib/src/generate_screen/generate.dart

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Future<void> generateScreen({
4343
username: 'robmllze',
4444
repo: 'df_generate_screen',
4545
filePath: [
46-
controllerTemplateFilePath ?? 'templates/controller.dart.md',
46+
controllerTemplateFilePath ?? 'templates/msm1/controller.dart.md',
4747
].join('/'),
4848
),
4949
);
@@ -53,7 +53,7 @@ Future<void> generateScreen({
5353
username: 'robmllze',
5454
repo: 'df_generate_screen',
5555
filePath: [
56-
screenTemplateFilePath ?? 'templates/screen.dart.md',
56+
screenTemplateFilePath ?? 'templates/msm1/screen.dart.md',
5757
].join('/'),
5858
),
5959
);
@@ -63,17 +63,7 @@ Future<void> generateScreen({
6363
username: 'robmllze',
6464
repo: 'df_generate_screen',
6565
filePath: [
66-
viewTemplateFilePath ?? 'templates/view.dart.md',
67-
].join('/'),
68-
),
69-
);
70-
71-
final bindingsTemplate = extractCodeFromMarkdown(
72-
await loadFileFromGitHub(
73-
username: 'robmllze',
74-
repo: 'df_generate_screen',
75-
filePath: [
76-
bindingsTemplateFilePath ?? 'templates/bindings.dart.md',
66+
viewTemplateFilePath ?? 'templates/msm1/view.dart.md',
7767
].join('/'),
7868
),
7969
);
@@ -85,8 +75,7 @@ Future<void> generateScreen({
8575
screenFileName: '${screenName.toSnakeCase()}.dart',
8676
viewFileName: '_view.dart',
8777
isAccessibleOnlyIfLoggedIn: isAccessibleOnlyIfLoggedIn,
88-
isAccessibleOnlyIfLoggedInAndVerified:
89-
isAccessibleOnlyIfLoggedInAndVerified,
78+
isAccessibleOnlyIfLoggedInAndVerified: isAccessibleOnlyIfLoggedInAndVerified,
9079
isAccessibleOnlyIfLoggedOut: isAccessibleOnlyIfLoggedOut,
9180
isRedirectable: isRedirectable,
9281
internalParameters: internalParameters,
@@ -103,7 +92,6 @@ Future<void> generateScreen({
10392
controllerTemplate,
10493
screenTemplate,
10594
viewTemplate,
106-
bindingsTemplate,
10795
],
10896
insightMappers,
10997
);

lib/src/generate_screen_access/app.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import 'package:args/args.dart';
1212
import 'package:df_gen_core/df_gen_core.dart';
1313

14-
import 'generator.dart';
14+
import 'generate.dart';
1515

1616
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
1717

@@ -126,7 +126,7 @@ class _ArgsChecker extends ValidArgsChecker {
126126
if (this.pathPatterns != null) this.pathPatterns,
127127
if (this.templateFilePath != null) this.templateFilePath,
128128
if (this.outputFilePath != null) this.outputFilePath,
129-
if (fallbackDartSdkPath != null) fallbackDartSdkPath,
129+
if (this.fallbackDartSdkPath != null) this.fallbackDartSdkPath,
130130
];
131131
}
132132
}

lib/src/generate_screen_access/generator.dart renamed to lib/src/generate_screen_access/generate.dart

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ Future<void> generateScreenAccess({
5252
username: 'robmllze',
5353
repo: 'df_generate_screen',
5454
filePath: [
55-
templateFilePath ?? 'templates/access.dart.md',
55+
templateFilePath ?? 'templates/msm1/access.dart.md',
5656
].join('/'),
5757
),
5858
);
@@ -68,8 +68,8 @@ Future<void> generateScreenAccess({
6868
final classInsights = <ClassInsight<ModelGenerateScreenBindings>>[];
6969

7070
// For each file...
71-
for (final filePathResult in sourceFileExplorerResults.filePathResults
72-
.where((e) => e.category == _Categories.DART)) {
71+
for (final filePathResult
72+
in sourceFileExplorerResults.filePathResults.where((e) => e.category == _Categories.DART)) {
7373
final filePath = filePathResult.path;
7474

7575
// Extract insights from the file.
@@ -108,22 +108,19 @@ Future<void> generateScreenAccess({
108108
return '...PATH_ALWAYS_ACCESSIBLE_$a';
109109
},
110110
).join(','),
111-
Placeholders.PATHS_ACCESSIBLE_ONLY_IF_LOGGED_IN_AND_VERIFIED
112-
.placeholder: classInsights.map(
111+
Placeholders.PATHS_ACCESSIBLE_ONLY_IF_LOGGED_IN_AND_VERIFIED.placeholder: classInsights.map(
113112
(e) {
114113
final a = e.className.toUpperSnakeCase();
115114
return '...PATH_ACCESSIBLE_ONLY_IF_LOGGED_IN_AND_VERIFIED_$a';
116115
},
117116
).join(','),
118-
Placeholders.PATHS_ACCESSIBLE_ONLY_IF_LOGGED_IN.placeholder:
119-
classInsights.map(
117+
Placeholders.PATHS_ACCESSIBLE_ONLY_IF_LOGGED_IN.placeholder: classInsights.map(
120118
(e) {
121119
final a = e.className.toUpperSnakeCase();
122120
return '...PATH_ACCESSIBLE_ONLY_IF_LOGGED_IN_$a';
123121
},
124122
).join(','),
125-
Placeholders.PATHS_ACCESSIBLE_ONLY_IF_LOGGED_OUT.placeholder:
126-
classInsights.map(
123+
Placeholders.PATHS_ACCESSIBLE_ONLY_IF_LOGGED_OUT.placeholder: classInsights.map(
127124
(e) {
128125
final a = e.className.toUpperSnakeCase();
129126
return '...PATH_ACCESSIBLE_ONLY_IF_LOGGED_OUT_$a';
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
//.title
2+
// ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
3+
//
4+
// Dart/Flutter (DF) Packages by DevCetra.com & contributors. See LICENSE file
5+
// in root directory.
6+
//
7+
// ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
8+
//.title~
9+
10+
import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
11+
import 'package:df_generate_dart_models_core/df_generate_dart_models_core.dart';
12+
13+
import 'package:path/path.dart' as p;
14+
import 'package:df_gen_core/df_gen_core.dart';
15+
import 'package:df_screen_core/df_screen_core.dart';
16+
17+
import '/src/_index.g.dart';
18+
19+
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
20+
21+
Future<List<ClassInsight<ModelGenerateScreenBindings>>>
22+
extractClassInsightsFromDartFile(
23+
AnalysisContextCollection analysisContextCollection,
24+
String filePath,
25+
) async {
26+
late ModelGenerateScreenBindings temp;
27+
final analyzer = DartAnnotatedClassAnalyzer(
28+
filePath: filePath,
29+
analysisContextCollection: analysisContextCollection,
30+
);
31+
32+
final insights = <ClassInsight<ModelGenerateScreenBindings>>[];
33+
await analyzer.analyze(
34+
inclClassAnnotations: {ModelGenerateScreenBindings.CLASS_NAME},
35+
onClassAnnotationField: (params) async =>
36+
temp = _updateFromClassAnnotationField(temp, params),
37+
onPreAnalysis: (_, __) => temp = const ModelGenerateScreenBindings(),
38+
onPostAnalysis: (params) {
39+
final fullPathName = params.fullFilePath;
40+
final fileName = p.basename(fullPathName);
41+
final dirPath = p.dirname(fullPathName);
42+
final insight = ClassInsight<ModelGenerateScreenBindings>(
43+
className: params.className,
44+
annotation: temp,
45+
dirPath: dirPath,
46+
fileName: fileName,
47+
);
48+
insights.add(insight);
49+
},
50+
);
51+
return insights;
52+
}
53+
54+
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
55+
56+
ModelGenerateScreenBindings _updateFromClassAnnotationField(
57+
ModelGenerateScreenBindings annotation,
58+
OnClassAnnotationFieldParams params,
59+
) {
60+
switch (params.fieldName) {
61+
case ModelGenerateScreenBindingsFieldNames.args:
62+
return annotation.copyWith(
63+
ModelGenerateScreenBindings(
64+
args: params.fieldValue.toMapValue()?.map(
65+
(k, v) => MapEntry(k?.toStringValue(), v?.toStringValue()),
66+
),
67+
),
68+
);
69+
case ModelGenerateScreenBindingsFieldNames
70+
.isAccessibleOnlyIfLoggedInAndVerified:
71+
return annotation.copyWith(
72+
ModelGenerateScreenBindings(
73+
isAccessibleOnlyIfLoggedInAndVerified:
74+
params.fieldValue.toBoolValue(),
75+
),
76+
);
77+
case ModelGenerateScreenBindingsFieldNames.isAccessibleOnlyIfLoggedIn:
78+
return annotation.copyWith(
79+
ModelGenerateScreenBindings(
80+
isAccessibleOnlyIfLoggedIn: params.fieldValue.toBoolValue(),
81+
),
82+
);
83+
case ModelGenerateScreenBindingsFieldNames.isAccessibleOnlyIfLoggedOut:
84+
return annotation.copyWith(
85+
ModelGenerateScreenBindings(
86+
isAccessibleOnlyIfLoggedOut: params.fieldValue.toBoolValue(),
87+
),
88+
);
89+
case ModelGenerateScreenBindingsFieldNames.isRedirectable:
90+
return annotation.copyWith(
91+
ModelGenerateScreenBindings(
92+
isRedirectable: params.fieldValue.toBoolValue(),
93+
),
94+
);
95+
case ModelGenerateScreenBindingsFieldNames.path:
96+
return annotation.copyWith(
97+
ModelGenerateScreenBindings(
98+
path: params.fieldValue.toStringValue(),
99+
),
100+
);
101+
case ModelGenerateScreenBindingsFieldNames.queryParameters:
102+
return annotation.copyWith(
103+
ModelGenerateScreenBindings(
104+
queryParameters: {
105+
...?annotation.queryParameters,
106+
...?params.fieldValue.toSetValue()?.map((e) {
107+
final field = FieldModel(
108+
fieldPath: e.fieldPathFromRecord()!,
109+
fieldType: e.fieldTypeFromRecord()!,
110+
nullable: e.nullableFromRecord()!,
111+
);
112+
return field.toRecord;
113+
}),
114+
},
115+
),
116+
);
117+
case ModelGenerateScreenBindingsFieldNames.internalParameters:
118+
return annotation.copyWith(
119+
ModelGenerateScreenBindings(
120+
internalParameters: {
121+
...?annotation.internalParameters,
122+
...?params.fieldValue.toSetValue()?.map((e) {
123+
final field = FieldModel(
124+
fieldPath: e.fieldPathFromRecord()!,
125+
fieldType: e.fieldTypeFromRecord()!,
126+
nullable: e.nullableFromRecord()!,
127+
);
128+
return field.toRecord;
129+
}),
130+
},
131+
),
132+
);
133+
case ModelGenerateScreenBindingsFieldNames.title:
134+
return annotation.copyWith(
135+
ModelGenerateScreenBindings(
136+
title: params.fieldValue.toStringValue(),
137+
),
138+
);
139+
case ModelGenerateScreenBindingsFieldNames.className:
140+
return annotation.copyWith(
141+
ModelGenerateScreenBindings(
142+
className: params.fieldValue.toStringValue(),
143+
),
144+
);
145+
case ModelGenerateScreenBindingsFieldNames.screenKey:
146+
return annotation.copyWith(
147+
ModelGenerateScreenBindings(
148+
screenKey: params.fieldValue.toStringValue(),
149+
),
150+
);
151+
case ModelGenerateScreenBindingsFieldNames.keyStringCase:
152+
return annotation.copyWith(
153+
ModelGenerateScreenBindings(
154+
keyStringCase: params.fieldValue.toStringValue(),
155+
),
156+
);
157+
default:
158+
return ModelGenerateScreenBindings.of(annotation);
159+
}
160+
}

0 commit comments

Comments
 (0)