maxsim-flutter 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/LICENSE +21 -0
- package/README.md +445 -0
- package/claude-plugin/.claude-plugin/plugin.json +46 -0
- package/claude-plugin/agents/flutter-setup-agent.md +54 -0
- package/claude-plugin/commands/flutter-add.md +32 -0
- package/claude-plugin/commands/flutter-create.md +28 -0
- package/claude-plugin/commands/flutter-migrate.md +28 -0
- package/claude-plugin/skills/flutter-scaffolding/SKILL.md +109 -0
- package/dist/claude-setup/agent-writer.d.ts +21 -0
- package/dist/claude-setup/agent-writer.d.ts.map +1 -0
- package/dist/claude-setup/agent-writer.js +365 -0
- package/dist/claude-setup/agent-writer.js.map +1 -0
- package/dist/claude-setup/claude-md-generator.d.ts +7 -0
- package/dist/claude-setup/claude-md-generator.d.ts.map +1 -0
- package/dist/claude-setup/claude-md-generator.js +428 -0
- package/dist/claude-setup/claude-md-generator.js.map +1 -0
- package/dist/claude-setup/commands-writer.d.ts +7 -0
- package/dist/claude-setup/commands-writer.d.ts.map +1 -0
- package/dist/claude-setup/commands-writer.js +303 -0
- package/dist/claude-setup/commands-writer.js.map +1 -0
- package/dist/claude-setup/hooks-writer.d.ts +3 -0
- package/dist/claude-setup/hooks-writer.d.ts.map +1 -0
- package/dist/claude-setup/hooks-writer.js +34 -0
- package/dist/claude-setup/hooks-writer.js.map +1 -0
- package/dist/claude-setup/index.d.ts +10 -0
- package/dist/claude-setup/index.d.ts.map +1 -0
- package/dist/claude-setup/index.js +9 -0
- package/dist/claude-setup/index.js.map +1 -0
- package/dist/claude-setup/mcp-config-writer.d.ts +3 -0
- package/dist/claude-setup/mcp-config-writer.d.ts.map +1 -0
- package/dist/claude-setup/mcp-config-writer.js +42 -0
- package/dist/claude-setup/mcp-config-writer.js.map +1 -0
- package/dist/claude-setup/plugin-assembler.d.ts +2 -0
- package/dist/claude-setup/plugin-assembler.d.ts.map +1 -0
- package/dist/claude-setup/plugin-assembler.js +3 -0
- package/dist/claude-setup/plugin-assembler.js.map +1 -0
- package/dist/claude-setup/prd-generator.d.ts +10 -0
- package/dist/claude-setup/prd-generator.d.ts.map +1 -0
- package/dist/claude-setup/prd-generator.js +295 -0
- package/dist/claude-setup/prd-generator.js.map +1 -0
- package/dist/claude-setup/setup-orchestrator.d.ts +11 -0
- package/dist/claude-setup/setup-orchestrator.d.ts.map +1 -0
- package/dist/claude-setup/setup-orchestrator.js +46 -0
- package/dist/claude-setup/setup-orchestrator.js.map +1 -0
- package/dist/claude-setup/skill-writer.d.ts +3 -0
- package/dist/claude-setup/skill-writer.d.ts.map +1 -0
- package/dist/claude-setup/skill-writer.js +256 -0
- package/dist/claude-setup/skill-writer.js.map +1 -0
- package/dist/cli/commands/add.d.ts +16 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +414 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/create.d.ts +3 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +161 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/list.d.ts +12 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +148 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +3 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +332 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +34 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ui/prompts.d.ts +9 -0
- package/dist/cli/ui/prompts.d.ts.map +1 -0
- package/dist/cli/ui/prompts.js +74 -0
- package/dist/cli/ui/prompts.js.map +1 -0
- package/dist/cli/ui/spinner.d.ts +2 -0
- package/dist/cli/ui/spinner.d.ts.map +1 -0
- package/dist/cli/ui/spinner.js +5 -0
- package/dist/cli/ui/spinner.js.map +1 -0
- package/dist/cli/version-check.d.ts +7 -0
- package/dist/cli/version-check.d.ts.map +1 -0
- package/dist/cli/version-check.js +92 -0
- package/dist/cli/version-check.js.map +1 -0
- package/dist/core/config/defaults.d.ts +3 -0
- package/dist/core/config/defaults.d.ts.map +1 -0
- package/dist/core/config/defaults.js +21 -0
- package/dist/core/config/defaults.js.map +1 -0
- package/dist/core/config/loader.d.ts +4 -0
- package/dist/core/config/loader.d.ts.map +1 -0
- package/dist/core/config/loader.js +38 -0
- package/dist/core/config/loader.js.map +1 -0
- package/dist/core/config/schema.d.ts +406 -0
- package/dist/core/config/schema.d.ts.map +1 -0
- package/dist/core/config/schema.js +119 -0
- package/dist/core/config/schema.js.map +1 -0
- package/dist/core/context.d.ts +57 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +99 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/detector.d.ts +28 -0
- package/dist/core/detector.d.ts.map +1 -0
- package/dist/core/detector.js +200 -0
- package/dist/core/detector.js.map +1 -0
- package/dist/core/validator.d.ts +7 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js +35 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/composer.d.ts +50 -0
- package/dist/modules/composer.d.ts.map +1 -0
- package/dist/modules/composer.js +122 -0
- package/dist/modules/composer.js.map +1 -0
- package/dist/modules/definitions/analytics/module.d.ts +7 -0
- package/dist/modules/definitions/analytics/module.d.ts.map +1 -0
- package/dist/modules/definitions/analytics/module.js +28 -0
- package/dist/modules/definitions/analytics/module.js.map +1 -0
- package/dist/modules/definitions/api/module.d.ts +7 -0
- package/dist/modules/definitions/api/module.d.ts.map +1 -0
- package/dist/modules/definitions/api/module.js +41 -0
- package/dist/modules/definitions/api/module.js.map +1 -0
- package/dist/modules/definitions/auth/module.d.ts +7 -0
- package/dist/modules/definitions/auth/module.d.ts.map +1 -0
- package/dist/modules/definitions/auth/module.js +53 -0
- package/dist/modules/definitions/auth/module.js.map +1 -0
- package/dist/modules/definitions/cicd/module.d.ts +7 -0
- package/dist/modules/definitions/cicd/module.d.ts.map +1 -0
- package/dist/modules/definitions/cicd/module.js +34 -0
- package/dist/modules/definitions/cicd/module.js.map +1 -0
- package/dist/modules/definitions/core/module.d.ts +7 -0
- package/dist/modules/definitions/core/module.d.ts.map +1 -0
- package/dist/modules/definitions/core/module.js +31 -0
- package/dist/modules/definitions/core/module.js.map +1 -0
- package/dist/modules/definitions/database/module.d.ts +8 -0
- package/dist/modules/definitions/database/module.d.ts.map +1 -0
- package/dist/modules/definitions/database/module.js +47 -0
- package/dist/modules/definitions/database/module.js.map +1 -0
- package/dist/modules/definitions/deep-linking/module.d.ts +7 -0
- package/dist/modules/definitions/deep-linking/module.d.ts.map +1 -0
- package/dist/modules/definitions/deep-linking/module.js +48 -0
- package/dist/modules/definitions/deep-linking/module.js.map +1 -0
- package/dist/modules/definitions/i18n/module.d.ts +7 -0
- package/dist/modules/definitions/i18n/module.d.ts.map +1 -0
- package/dist/modules/definitions/i18n/module.js +37 -0
- package/dist/modules/definitions/i18n/module.js.map +1 -0
- package/dist/modules/definitions/push/module.d.ts +7 -0
- package/dist/modules/definitions/push/module.d.ts.map +1 -0
- package/dist/modules/definitions/push/module.js +40 -0
- package/dist/modules/definitions/push/module.js.map +1 -0
- package/dist/modules/definitions/theme/module.d.ts +7 -0
- package/dist/modules/definitions/theme/module.d.ts.map +1 -0
- package/dist/modules/definitions/theme/module.js +42 -0
- package/dist/modules/definitions/theme/module.js.map +1 -0
- package/dist/modules/registry.d.ts +50 -0
- package/dist/modules/registry.d.ts.map +1 -0
- package/dist/modules/registry.js +104 -0
- package/dist/modules/registry.js.map +1 -0
- package/dist/modules/resolver.d.ts +42 -0
- package/dist/modules/resolver.d.ts.map +1 -0
- package/dist/modules/resolver.js +140 -0
- package/dist/modules/resolver.js.map +1 -0
- package/dist/ralph/prd-generator.d.ts +2 -0
- package/dist/ralph/prd-generator.d.ts.map +1 -0
- package/dist/ralph/prd-generator.js +3 -0
- package/dist/ralph/prd-generator.js.map +1 -0
- package/dist/ralph/ralph-converter.d.ts +2 -0
- package/dist/ralph/ralph-converter.d.ts.map +1 -0
- package/dist/ralph/ralph-converter.js +3 -0
- package/dist/ralph/ralph-converter.js.map +1 -0
- package/dist/ralph/story-sizer.d.ts +2 -0
- package/dist/ralph/story-sizer.d.ts.map +1 -0
- package/dist/ralph/story-sizer.js +3 -0
- package/dist/ralph/story-sizer.js.map +1 -0
- package/dist/scaffold/engine.d.ts +40 -0
- package/dist/scaffold/engine.d.ts.map +1 -0
- package/dist/scaffold/engine.js +233 -0
- package/dist/scaffold/engine.js.map +1 -0
- package/dist/scaffold/file-writer.d.ts +22 -0
- package/dist/scaffold/file-writer.d.ts.map +1 -0
- package/dist/scaffold/file-writer.js +68 -0
- package/dist/scaffold/file-writer.js.map +1 -0
- package/dist/scaffold/post-processors/build-runner.d.ts +2 -0
- package/dist/scaffold/post-processors/build-runner.d.ts.map +1 -0
- package/dist/scaffold/post-processors/build-runner.js +5 -0
- package/dist/scaffold/post-processors/build-runner.js.map +1 -0
- package/dist/scaffold/post-processors/dart-format.d.ts +2 -0
- package/dist/scaffold/post-processors/dart-format.d.ts.map +1 -0
- package/dist/scaffold/post-processors/dart-format.js +5 -0
- package/dist/scaffold/post-processors/dart-format.js.map +1 -0
- package/dist/scaffold/post-processors/flutter-pub-get.d.ts +2 -0
- package/dist/scaffold/post-processors/flutter-pub-get.d.ts.map +1 -0
- package/dist/scaffold/post-processors/flutter-pub-get.js +5 -0
- package/dist/scaffold/post-processors/flutter-pub-get.js.map +1 -0
- package/dist/scaffold/renderer.d.ts +20 -0
- package/dist/scaffold/renderer.d.ts.map +1 -0
- package/dist/scaffold/renderer.js +75 -0
- package/dist/scaffold/renderer.js.map +1 -0
- package/dist/scaffold/template-helpers.d.ts +25 -0
- package/dist/scaffold/template-helpers.d.ts.map +1 -0
- package/dist/scaffold/template-helpers.js +115 -0
- package/dist/scaffold/template-helpers.js.map +1 -0
- package/dist/types/config.d.ts +4 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/module.d.ts +85 -0
- package/dist/types/module.d.ts.map +1 -0
- package/dist/types/module.js +2 -0
- package/dist/types/module.js.map +1 -0
- package/dist/types/project.d.ts +13 -0
- package/dist/types/project.d.ts.map +1 -0
- package/dist/types/project.js +2 -0
- package/dist/types/project.js.map +1 -0
- package/package.json +80 -0
- package/templates/core/analysis_options.yaml.hbs +21 -0
- package/templates/core/lib/app.dart.hbs +20 -0
- package/templates/core/lib/core/providers/app_providers.dart.hbs +3 -0
- package/templates/core/lib/core/router/app_router.dart.hbs +19 -0
- package/templates/core/lib/core/theme/app_theme.dart.hbs +15 -0
- package/templates/core/lib/features/home/data/models/.gitkeep +0 -0
- package/templates/core/lib/features/home/data/repositories/.gitkeep +0 -0
- package/templates/core/lib/features/home/domain/entities/.gitkeep +0 -0
- package/templates/core/lib/features/home/domain/repositories/.gitkeep +0 -0
- package/templates/core/lib/features/home/presentation/pages/home_page.dart.hbs +18 -0
- package/templates/core/lib/features/home/presentation/widgets/.gitkeep +0 -0
- package/templates/core/lib/main.dart.hbs +11 -0
- package/templates/core/pubspec.yaml.hbs +30 -0
- package/templates/core/test/widget_test.dart.hbs +16 -0
- package/templates/modules/analytics/lib/features/analytics/data/observers/analytics_route_observer.dart.hbs +53 -0
- package/templates/modules/analytics/lib/features/analytics/data/services/firebase_analytics_service.dart.hbs +39 -0
- package/templates/modules/analytics/lib/features/analytics/domain/services/analytics_service.dart.hbs +25 -0
- package/templates/modules/analytics/lib/features/analytics/presentation/providers/analytics_provider.dart.hbs +17 -0
- package/templates/modules/analytics/pubspec.partial.yaml +2 -0
- package/templates/modules/api/lib/features/api/data/datasources/api_client.dart.hbs +171 -0
- package/templates/modules/api/lib/features/api/data/interceptors/auth_interceptor.dart.hbs +25 -0
- package/templates/modules/api/lib/features/api/data/interceptors/retry_interceptor.dart.hbs +42 -0
- package/templates/modules/api/lib/features/api/data/repositories/api_repository_impl.dart.hbs +21 -0
- package/templates/modules/api/lib/features/api/domain/exceptions/api_exception.dart.hbs +31 -0
- package/templates/modules/api/lib/features/api/domain/repositories/api_repository.dart.hbs +8 -0
- package/templates/modules/api/lib/features/api/presentation/providers/api_provider.dart.hbs +17 -0
- package/templates/modules/api/pubspec.partial.yaml +7 -0
- package/templates/modules/auth/lib/features/auth/data/datasources/auth_remote_datasource.dart.hbs +181 -0
- package/templates/modules/auth/lib/features/auth/data/models/auth_user_model.dart.hbs +27 -0
- package/templates/modules/auth/lib/features/auth/data/repositories/auth_repository_impl.dart.hbs +49 -0
- package/templates/modules/auth/lib/features/auth/domain/entities/user_entity.dart.hbs +18 -0
- package/templates/modules/auth/lib/features/auth/domain/repositories/auth_repository.dart.hbs +22 -0
- package/templates/modules/auth/lib/features/auth/domain/usecases/register_usecase.dart.hbs +20 -0
- package/templates/modules/auth/lib/features/auth/domain/usecases/sign_in_usecase.dart.hbs +15 -0
- package/templates/modules/auth/lib/features/auth/domain/usecases/sign_out_usecase.dart.hbs +11 -0
- package/templates/modules/auth/lib/features/auth/presentation/pages/login_page.dart.hbs +118 -0
- package/templates/modules/auth/lib/features/auth/presentation/pages/register_page.dart.hbs +131 -0
- package/templates/modules/auth/lib/features/auth/presentation/providers/auth_provider.dart.hbs +31 -0
- package/templates/modules/auth/pubspec.partial.yaml +13 -0
- package/templates/modules/cicd/.github/workflows/ci.yml.hbs +45 -0
- package/templates/modules/cicd/.gitlab-ci.yml.hbs +53 -0
- package/templates/modules/cicd/bitbucket-pipelines.yml.hbs +39 -0
- package/templates/modules/cicd/pubspec.partial.yaml +1 -0
- package/templates/modules/database/lib/features/database/data/datasources/database_datasource.dart.hbs +115 -0
- package/templates/modules/database/lib/features/database/data/repositories/database_repository_impl.dart.hbs +73 -0
- package/templates/modules/database/lib/features/database/domain/repositories/database_repository.dart.hbs +10 -0
- package/templates/modules/database/lib/features/database/presentation/providers/database_provider.dart.hbs +43 -0
- package/templates/modules/database/pubspec.partial.yaml +27 -0
- package/templates/modules/deep-linking/lib/features/deep_linking/data/datasources/deep_link_datasource.dart.hbs +18 -0
- package/templates/modules/deep-linking/lib/features/deep_linking/data/repositories/deep_link_repository_impl.dart.hbs +14 -0
- package/templates/modules/deep-linking/lib/features/deep_linking/domain/repositories/deep_link_repository.dart.hbs +7 -0
- package/templates/modules/deep-linking/lib/features/deep_linking/presentation/providers/deep_link_provider.dart.hbs +57 -0
- package/templates/modules/deep-linking/pubspec.partial.yaml +2 -0
- package/templates/modules/i18n/l10n.yaml.hbs +5 -0
- package/templates/modules/i18n/lib/core/l10n/l10n_config.dart.hbs +29 -0
- package/templates/modules/i18n/lib/core/l10n/l10n_provider.dart.hbs +20 -0
- package/templates/modules/i18n/lib/l10n/app_de.arb.hbs +27 -0
- package/templates/modules/i18n/lib/l10n/app_en.arb.hbs +27 -0
- package/templates/modules/i18n/pubspec.partial.yaml +7 -0
- package/templates/modules/push/lib/features/push/data/datasources/push_datasource.dart.hbs +124 -0
- package/templates/modules/push/lib/features/push/data/repositories/push_repository_impl.dart.hbs +28 -0
- package/templates/modules/push/lib/features/push/domain/repositories/push_repository.dart.hbs +31 -0
- package/templates/modules/push/lib/features/push/presentation/providers/push_provider.dart.hbs +34 -0
- package/templates/modules/push/pubspec.partial.yaml +8 -0
- package/templates/modules/theme/lib/core/theme/app_theme.dart.hbs +74 -0
- package/templates/modules/theme/lib/core/theme/theme_provider.dart.hbs +46 -0
- package/templates/modules/theme/pubspec.partial.yaml +2 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
function resolveAuthModule(raw) {
|
|
2
|
+
if (raw === false || raw === undefined)
|
|
3
|
+
return false;
|
|
4
|
+
if (!raw.enabled)
|
|
5
|
+
return false;
|
|
6
|
+
return { provider: raw.provider };
|
|
7
|
+
}
|
|
8
|
+
function resolveApiModule(raw) {
|
|
9
|
+
if (raw === false || raw === undefined)
|
|
10
|
+
return false;
|
|
11
|
+
if (!raw.enabled)
|
|
12
|
+
return false;
|
|
13
|
+
return { baseUrl: raw.baseUrl };
|
|
14
|
+
}
|
|
15
|
+
function resolveDatabaseModule(raw) {
|
|
16
|
+
if (raw === false || raw === undefined)
|
|
17
|
+
return false;
|
|
18
|
+
if (!raw.enabled)
|
|
19
|
+
return false;
|
|
20
|
+
return { engine: raw.engine };
|
|
21
|
+
}
|
|
22
|
+
function resolveI18nModule(raw) {
|
|
23
|
+
if (raw === false || raw === undefined)
|
|
24
|
+
return false;
|
|
25
|
+
if (!raw.enabled)
|
|
26
|
+
return false;
|
|
27
|
+
return { defaultLocale: raw.defaultLocale, supportedLocales: raw.supportedLocales };
|
|
28
|
+
}
|
|
29
|
+
function resolveThemeModule(raw) {
|
|
30
|
+
if (raw === false || raw === undefined)
|
|
31
|
+
return false;
|
|
32
|
+
if (!raw.enabled)
|
|
33
|
+
return false;
|
|
34
|
+
return { seedColor: raw.seedColor, darkMode: raw.darkMode };
|
|
35
|
+
}
|
|
36
|
+
function resolvePushModule(raw) {
|
|
37
|
+
if (raw === false || raw === undefined)
|
|
38
|
+
return false;
|
|
39
|
+
if (!raw.enabled)
|
|
40
|
+
return false;
|
|
41
|
+
return { provider: raw.provider };
|
|
42
|
+
}
|
|
43
|
+
function resolveAnalyticsModule(raw) {
|
|
44
|
+
if (raw === false || raw === undefined)
|
|
45
|
+
return false;
|
|
46
|
+
if (!raw.enabled)
|
|
47
|
+
return false;
|
|
48
|
+
return { enabled: raw.enabled };
|
|
49
|
+
}
|
|
50
|
+
function resolveCicdModule(raw) {
|
|
51
|
+
if (raw === false || raw === undefined)
|
|
52
|
+
return false;
|
|
53
|
+
if (!raw.enabled)
|
|
54
|
+
return false;
|
|
55
|
+
return { provider: raw.provider };
|
|
56
|
+
}
|
|
57
|
+
function resolveDeepLinkingModule(raw) {
|
|
58
|
+
if (raw === false || raw === undefined)
|
|
59
|
+
return false;
|
|
60
|
+
if (!raw.enabled)
|
|
61
|
+
return false;
|
|
62
|
+
return { scheme: raw.scheme, host: raw.host };
|
|
63
|
+
}
|
|
64
|
+
// Factory function to create context from config
|
|
65
|
+
export function createProjectContext(config, outputDir) {
|
|
66
|
+
return {
|
|
67
|
+
projectName: config.project.name,
|
|
68
|
+
orgId: config.project.orgId,
|
|
69
|
+
description: config.project.description ?? '',
|
|
70
|
+
platforms: config.platforms,
|
|
71
|
+
modules: {
|
|
72
|
+
auth: resolveAuthModule(config.modules.auth),
|
|
73
|
+
api: resolveApiModule(config.modules.api),
|
|
74
|
+
database: resolveDatabaseModule(config.modules.database),
|
|
75
|
+
i18n: resolveI18nModule(config.modules.i18n),
|
|
76
|
+
theme: resolveThemeModule(config.modules.theme),
|
|
77
|
+
push: resolvePushModule(config.modules.push),
|
|
78
|
+
analytics: resolveAnalyticsModule(config.modules.analytics),
|
|
79
|
+
cicd: resolveCicdModule(config.modules.cicd),
|
|
80
|
+
deepLinking: resolveDeepLinkingModule(config.modules['deep-linking']),
|
|
81
|
+
},
|
|
82
|
+
scaffold: {
|
|
83
|
+
dryRun: config.scaffold.dryRun,
|
|
84
|
+
overwrite: config.scaffold.overwriteExisting,
|
|
85
|
+
postProcessors: {
|
|
86
|
+
dartFormat: config.scaffold.runDartFormat,
|
|
87
|
+
flutterPubGet: config.scaffold.runPubGet,
|
|
88
|
+
buildRunner: config.scaffold.runBuildRunner,
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
claude: {
|
|
92
|
+
enabled: config.claude.enabled,
|
|
93
|
+
agentTeams: config.claude.agentTeams,
|
|
94
|
+
},
|
|
95
|
+
outputDir,
|
|
96
|
+
rawConfig: config,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type StateManagement = 'riverpod' | 'bloc' | 'provider' | 'getx' | 'none' | 'unknown';
|
|
2
|
+
export type RoutingPattern = 'go_router' | 'auto_route' | 'navigator' | 'unknown';
|
|
3
|
+
export type ArchitecturePattern = 'clean' | 'mvc' | 'mvvm' | 'unknown';
|
|
4
|
+
export type MigrationDifficulty = 'simple' | 'moderate' | 'complex';
|
|
5
|
+
export interface AnalysisReport {
|
|
6
|
+
projectName: string;
|
|
7
|
+
architecture: ArchitecturePattern;
|
|
8
|
+
stateManagement: StateManagement;
|
|
9
|
+
routing: RoutingPattern;
|
|
10
|
+
detectedModules: string[];
|
|
11
|
+
cleanArchitectureGaps: string[];
|
|
12
|
+
recommendations: string[];
|
|
13
|
+
migrationDifficulty: MigrationDifficulty;
|
|
14
|
+
rawDependencies: string[];
|
|
15
|
+
}
|
|
16
|
+
export declare class ProjectDetector {
|
|
17
|
+
analyzeProject(projectPath: string): Promise<AnalysisReport>;
|
|
18
|
+
private readPubspec;
|
|
19
|
+
private extractAllDeps;
|
|
20
|
+
private detectStateManagement;
|
|
21
|
+
private detectRouting;
|
|
22
|
+
private detectArchitecture;
|
|
23
|
+
private detectModules;
|
|
24
|
+
private findCleanArchitectureGaps;
|
|
25
|
+
private buildRecommendations;
|
|
26
|
+
private assessDifficulty;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAC7F,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAClF,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AACvE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,mBAAmB,CAAC;IAClC,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAQD,qBAAa,eAAe;IACpB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;YAqCpD,WAAW;IAYzB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,aAAa;YAMP,kBAAkB;YA4BlB,aAAa;YA6Eb,yBAAyB;IAgCvC,OAAO,CAAC,oBAAoB;IAiC5B,OAAO,CAAC,gBAAgB;CAgBzB"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { load as yamlLoad } from 'js-yaml';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
export class ProjectDetector {
|
|
5
|
+
async analyzeProject(projectPath) {
|
|
6
|
+
const pubspec = await this.readPubspec(projectPath);
|
|
7
|
+
const projectName = typeof pubspec.name === 'string' ? pubspec.name : 'unknown';
|
|
8
|
+
const allDeps = this.extractAllDeps(pubspec);
|
|
9
|
+
const stateManagement = this.detectStateManagement(allDeps);
|
|
10
|
+
const routing = this.detectRouting(allDeps);
|
|
11
|
+
const architecture = await this.detectArchitecture(projectPath);
|
|
12
|
+
const detectedModules = await this.detectModules(projectPath, allDeps);
|
|
13
|
+
const cleanArchitectureGaps = await this.findCleanArchitectureGaps(projectPath, architecture);
|
|
14
|
+
const recommendations = this.buildRecommendations(stateManagement, routing, architecture, cleanArchitectureGaps, detectedModules);
|
|
15
|
+
const migrationDifficulty = this.assessDifficulty(architecture, stateManagement, routing, cleanArchitectureGaps);
|
|
16
|
+
return {
|
|
17
|
+
projectName,
|
|
18
|
+
architecture,
|
|
19
|
+
stateManagement,
|
|
20
|
+
routing,
|
|
21
|
+
detectedModules,
|
|
22
|
+
cleanArchitectureGaps,
|
|
23
|
+
recommendations,
|
|
24
|
+
migrationDifficulty,
|
|
25
|
+
rawDependencies: allDeps,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async readPubspec(projectPath) {
|
|
29
|
+
const pubspecPath = path.join(projectPath, 'pubspec.yaml');
|
|
30
|
+
try {
|
|
31
|
+
const content = await fs.readFile(pubspecPath, 'utf-8');
|
|
32
|
+
const parsed = yamlLoad(content);
|
|
33
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
34
|
+
return {};
|
|
35
|
+
return parsed;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
extractAllDeps(pubspec) {
|
|
42
|
+
const deps = Object.keys(pubspec.dependencies ?? {});
|
|
43
|
+
const devDeps = Object.keys(pubspec.dev_dependencies ?? {});
|
|
44
|
+
return [...new Set([...deps, ...devDeps])];
|
|
45
|
+
}
|
|
46
|
+
detectStateManagement(deps) {
|
|
47
|
+
if (deps.some((d) => ['flutter_riverpod', 'riverpod', 'hooks_riverpod'].includes(d))) {
|
|
48
|
+
return 'riverpod';
|
|
49
|
+
}
|
|
50
|
+
if (deps.some((d) => ['flutter_bloc', 'bloc'].includes(d)))
|
|
51
|
+
return 'bloc';
|
|
52
|
+
if (deps.includes('provider'))
|
|
53
|
+
return 'provider';
|
|
54
|
+
if (deps.includes('get'))
|
|
55
|
+
return 'getx';
|
|
56
|
+
return 'unknown';
|
|
57
|
+
}
|
|
58
|
+
detectRouting(deps) {
|
|
59
|
+
if (deps.includes('go_router'))
|
|
60
|
+
return 'go_router';
|
|
61
|
+
if (deps.includes('auto_route'))
|
|
62
|
+
return 'auto_route';
|
|
63
|
+
return 'navigator';
|
|
64
|
+
}
|
|
65
|
+
async detectArchitecture(projectPath) {
|
|
66
|
+
const libPath = path.join(projectPath, 'lib');
|
|
67
|
+
const featuresPath = path.join(libPath, 'features');
|
|
68
|
+
if (await fs.pathExists(featuresPath)) {
|
|
69
|
+
const features = await fs.readdir(featuresPath).catch(() => []);
|
|
70
|
+
let cleanCount = 0;
|
|
71
|
+
for (const feature of features.slice(0, 5)) {
|
|
72
|
+
const featurePath = path.join(featuresPath, feature);
|
|
73
|
+
const hasDomain = await fs.pathExists(path.join(featurePath, 'domain'));
|
|
74
|
+
const hasData = await fs.pathExists(path.join(featurePath, 'data'));
|
|
75
|
+
const hasPresentation = await fs.pathExists(path.join(featurePath, 'presentation'));
|
|
76
|
+
if (hasDomain && hasData && hasPresentation)
|
|
77
|
+
cleanCount++;
|
|
78
|
+
}
|
|
79
|
+
if (features.length > 0 && cleanCount > 0)
|
|
80
|
+
return 'clean';
|
|
81
|
+
}
|
|
82
|
+
const hasControllers = await fs.pathExists(path.join(libPath, 'controllers'));
|
|
83
|
+
const hasModels = await fs.pathExists(path.join(libPath, 'models'));
|
|
84
|
+
const hasViews = await fs.pathExists(path.join(libPath, 'views'));
|
|
85
|
+
if (hasControllers && (hasModels || hasViews))
|
|
86
|
+
return 'mvc';
|
|
87
|
+
const hasViewModels = await fs.pathExists(path.join(libPath, 'viewmodels'));
|
|
88
|
+
if (hasViewModels)
|
|
89
|
+
return 'mvvm';
|
|
90
|
+
return 'unknown';
|
|
91
|
+
}
|
|
92
|
+
async detectModules(projectPath, deps) {
|
|
93
|
+
const modules = [];
|
|
94
|
+
const libPath = path.join(projectPath, 'lib');
|
|
95
|
+
if (deps.some((d) => ['firebase_auth', 'supabase_flutter'].includes(d)) ||
|
|
96
|
+
(await fs.pathExists(path.join(libPath, 'features', 'auth')))) {
|
|
97
|
+
modules.push('auth');
|
|
98
|
+
}
|
|
99
|
+
if (deps.some((d) => ['dio', 'http', 'retrofit'].includes(d)) ||
|
|
100
|
+
(await fs.pathExists(path.join(libPath, 'features', 'api')))) {
|
|
101
|
+
modules.push('api');
|
|
102
|
+
}
|
|
103
|
+
if (deps.some((d) => ['drift', 'hive', 'hive_flutter', 'isar', 'isar_flutter_libs'].includes(d)) ||
|
|
104
|
+
(await fs.pathExists(path.join(libPath, 'features', 'database')))) {
|
|
105
|
+
modules.push('database');
|
|
106
|
+
}
|
|
107
|
+
const l10nPath = path.join(libPath, 'l10n');
|
|
108
|
+
const l10nFiles = await fs.readdir(l10nPath).catch(() => []);
|
|
109
|
+
if (l10nFiles.some((f) => f.endsWith('.arb')) || deps.includes('intl')) {
|
|
110
|
+
modules.push('i18n');
|
|
111
|
+
}
|
|
112
|
+
if (deps.includes('google_fonts') ||
|
|
113
|
+
(await fs.pathExists(path.join(libPath, 'core', 'theme')))) {
|
|
114
|
+
modules.push('theme');
|
|
115
|
+
}
|
|
116
|
+
if (deps.some((d) => ['firebase_messaging', 'onesignal_flutter'].includes(d)) ||
|
|
117
|
+
(await fs.pathExists(path.join(libPath, 'features', 'push')))) {
|
|
118
|
+
modules.push('push');
|
|
119
|
+
}
|
|
120
|
+
if (deps.some((d) => ['firebase_analytics', 'amplitude_flutter', 'mixpanel_flutter'].includes(d)) ||
|
|
121
|
+
(await fs.pathExists(path.join(libPath, 'features', 'analytics')))) {
|
|
122
|
+
modules.push('analytics');
|
|
123
|
+
}
|
|
124
|
+
const hasGithubActions = await fs.pathExists(path.join(projectPath, '.github', 'workflows'));
|
|
125
|
+
const hasGitlabCi = await fs.pathExists(path.join(projectPath, '.gitlab-ci.yml'));
|
|
126
|
+
const hasBitbucket = await fs.pathExists(path.join(projectPath, 'bitbucket-pipelines.yml'));
|
|
127
|
+
if (hasGithubActions || hasGitlabCi || hasBitbucket) {
|
|
128
|
+
modules.push('cicd');
|
|
129
|
+
}
|
|
130
|
+
if (deps.some((d) => ['app_links', 'uni_links'].includes(d)) ||
|
|
131
|
+
(await fs.pathExists(path.join(libPath, 'features', 'deep-linking')))) {
|
|
132
|
+
modules.push('deep-linking');
|
|
133
|
+
}
|
|
134
|
+
return modules;
|
|
135
|
+
}
|
|
136
|
+
async findCleanArchitectureGaps(projectPath, architecture) {
|
|
137
|
+
const gaps = [];
|
|
138
|
+
const featuresPath = path.join(projectPath, 'lib', 'features');
|
|
139
|
+
if (!(await fs.pathExists(featuresPath))) {
|
|
140
|
+
if (architecture !== 'clean') {
|
|
141
|
+
gaps.push('No lib/features/ directory — project is not organized by feature');
|
|
142
|
+
}
|
|
143
|
+
return gaps;
|
|
144
|
+
}
|
|
145
|
+
const features = await fs.readdir(featuresPath).catch(() => []);
|
|
146
|
+
for (const feature of features) {
|
|
147
|
+
const featurePath = path.join(featuresPath, feature);
|
|
148
|
+
const stat = await fs.stat(featurePath).catch(() => null);
|
|
149
|
+
if (!stat?.isDirectory())
|
|
150
|
+
continue;
|
|
151
|
+
const hasDomain = await fs.pathExists(path.join(featurePath, 'domain'));
|
|
152
|
+
const hasData = await fs.pathExists(path.join(featurePath, 'data'));
|
|
153
|
+
const hasPresentation = await fs.pathExists(path.join(featurePath, 'presentation'));
|
|
154
|
+
if (!hasDomain)
|
|
155
|
+
gaps.push(`Feature '${feature}': missing domain layer`);
|
|
156
|
+
if (!hasData)
|
|
157
|
+
gaps.push(`Feature '${feature}': missing data layer`);
|
|
158
|
+
if (!hasPresentation)
|
|
159
|
+
gaps.push(`Feature '${feature}': missing presentation layer`);
|
|
160
|
+
}
|
|
161
|
+
return gaps;
|
|
162
|
+
}
|
|
163
|
+
buildRecommendations(stateManagement, routing, architecture, gaps, modules) {
|
|
164
|
+
const recs = [];
|
|
165
|
+
if (stateManagement !== 'riverpod') {
|
|
166
|
+
const from = stateManagement === 'unknown' ? 'current state management' : stateManagement;
|
|
167
|
+
recs.push(`Migrate from ${from} to flutter_riverpod`);
|
|
168
|
+
}
|
|
169
|
+
if (routing !== 'go_router') {
|
|
170
|
+
const from = routing === 'navigator' ? 'Flutter Navigator' : routing;
|
|
171
|
+
recs.push(`Migrate from ${from} to go_router for type-safe declarative routing`);
|
|
172
|
+
}
|
|
173
|
+
if (architecture !== 'clean') {
|
|
174
|
+
recs.push('Organize code into lib/features/ with domain, data, and presentation layers per feature');
|
|
175
|
+
}
|
|
176
|
+
if (gaps.length > 0) {
|
|
177
|
+
recs.push(`Fix ${gaps.length} Clean Architecture layer gap(s) in existing features`);
|
|
178
|
+
}
|
|
179
|
+
if (!modules.includes('theme')) {
|
|
180
|
+
recs.push('Add Material 3 theme module (google_fonts + ColorScheme.fromSeed)');
|
|
181
|
+
}
|
|
182
|
+
return recs;
|
|
183
|
+
}
|
|
184
|
+
assessDifficulty(architecture, stateManagement, routing, gaps) {
|
|
185
|
+
let score = 0;
|
|
186
|
+
if (architecture !== 'clean')
|
|
187
|
+
score += 2;
|
|
188
|
+
if (stateManagement !== 'riverpod')
|
|
189
|
+
score += 2;
|
|
190
|
+
if (routing !== 'go_router')
|
|
191
|
+
score += 1;
|
|
192
|
+
score += Math.min(gaps.length, 3);
|
|
193
|
+
if (score <= 1)
|
|
194
|
+
return 'simple';
|
|
195
|
+
if (score <= 4)
|
|
196
|
+
return 'moderate';
|
|
197
|
+
return 'complex';
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAYD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAyBrE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { execa } from 'execa';
|
|
2
|
+
async function checkTool(command, args) {
|
|
3
|
+
try {
|
|
4
|
+
await execa(command, args, { reject: true });
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
// Check that required tools are installed
|
|
12
|
+
export async function validateEnvironment() {
|
|
13
|
+
const errors = [];
|
|
14
|
+
const warnings = [];
|
|
15
|
+
const [flutterOk, dartOk, gitOk] = await Promise.all([
|
|
16
|
+
checkTool('flutter', ['--version']),
|
|
17
|
+
checkTool('dart', ['--version']),
|
|
18
|
+
checkTool('git', ['--version']),
|
|
19
|
+
]);
|
|
20
|
+
if (!flutterOk) {
|
|
21
|
+
errors.push('flutter is not installed or not found in PATH');
|
|
22
|
+
}
|
|
23
|
+
if (!dartOk) {
|
|
24
|
+
errors.push('dart is not installed or not found in PATH');
|
|
25
|
+
}
|
|
26
|
+
if (!gitOk) {
|
|
27
|
+
errors.push('git is not installed or not found in PATH');
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
valid: errors.length === 0,
|
|
31
|
+
errors,
|
|
32
|
+
warnings,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAQ9B,KAAK,UAAU,SAAS,CAAC,OAAe,EAAE,IAAc;IACtD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,0CAA0C;AAC1C,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACnD,SAAS,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC;QACnC,SAAS,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC;QAChC,SAAS,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC;KAChC,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { ScaffoldEngine } from './scaffold/engine.js';
|
|
2
|
+
export type { ScaffoldResult, ScaffoldEngineOptions } from './scaffold/engine.js';
|
|
3
|
+
export { TemplateRenderer } from './scaffold/renderer.js';
|
|
4
|
+
export type { TemplateContext } from './scaffold/renderer.js';
|
|
5
|
+
export { FileWriter } from './scaffold/file-writer.js';
|
|
6
|
+
export type { FileWriterOptions, WriteResult, OverwriteMode } from './scaffold/file-writer.js';
|
|
7
|
+
export { ModuleRegistry } from './modules/registry.js';
|
|
8
|
+
export { ModuleResolver } from './modules/resolver.js';
|
|
9
|
+
export type { ResolveResult } from './modules/resolver.js';
|
|
10
|
+
export { ModuleComposer, pickNewerVersion } from './modules/composer.js';
|
|
11
|
+
export type { ComposeResult } from './modules/composer.js';
|
|
12
|
+
export { createProjectContext } from './core/context.js';
|
|
13
|
+
export type { ProjectContext } from './core/context.js';
|
|
14
|
+
export { MaxsimConfigSchema } from './core/config/schema.js';
|
|
15
|
+
export { parseConfig, loadConfig } from './core/config/loader.js';
|
|
16
|
+
export { validateEnvironment } from './core/validator.js';
|
|
17
|
+
export type { ValidationResult } from './core/validator.js';
|
|
18
|
+
export type { MaxsimConfig } from './types/config.js';
|
|
19
|
+
export type { ModuleManifest, ModuleContribution, ModuleQuestion, ProviderContribution, RouteContribution, } from './types/module.js';
|
|
20
|
+
export type { GeneratedFile, TemplateInstruction, Platform } from './types/project.js';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/F,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Scaffold
|
|
2
|
+
export { ScaffoldEngine } from './scaffold/engine.js';
|
|
3
|
+
export { TemplateRenderer } from './scaffold/renderer.js';
|
|
4
|
+
export { FileWriter } from './scaffold/file-writer.js';
|
|
5
|
+
// Modules
|
|
6
|
+
export { ModuleRegistry } from './modules/registry.js';
|
|
7
|
+
export { ModuleResolver } from './modules/resolver.js';
|
|
8
|
+
export { ModuleComposer, pickNewerVersion } from './modules/composer.js';
|
|
9
|
+
// Core
|
|
10
|
+
export { createProjectContext } from './core/context.js';
|
|
11
|
+
export { MaxsimConfigSchema } from './core/config/schema.js';
|
|
12
|
+
export { parseConfig, loadConfig } from './core/config/loader.js';
|
|
13
|
+
export { validateEnvironment } from './core/validator.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvD,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzE,OAAO;AACP,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ModuleManifest, ProviderContribution, RouteContribution } from '../types/module.js';
|
|
2
|
+
import type { ProjectContext } from '../core/context.js';
|
|
3
|
+
/**
|
|
4
|
+
* Result of composing all active modules.
|
|
5
|
+
* Contains merged dependencies, providers, routes, and env vars.
|
|
6
|
+
*/
|
|
7
|
+
export interface ComposeResult {
|
|
8
|
+
/** Merged pubspec dependencies (name -> version constraint) */
|
|
9
|
+
readonly dependencies: ReadonlyMap<string, string>;
|
|
10
|
+
/** Merged pubspec dev dependencies (name -> version constraint) */
|
|
11
|
+
readonly devDependencies: ReadonlyMap<string, string>;
|
|
12
|
+
/** All provider contributions from active modules */
|
|
13
|
+
readonly providers: readonly ProviderContribution[];
|
|
14
|
+
/** All route contributions from active modules */
|
|
15
|
+
readonly routes: readonly RouteContribution[];
|
|
16
|
+
/** All environment variables needed by active modules */
|
|
17
|
+
readonly envVars: readonly string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Compares two semver-like version constraints and returns the "newer" one.
|
|
21
|
+
* Strips leading ^ or ~ for comparison. If versions are identical, returns the first.
|
|
22
|
+
*/
|
|
23
|
+
export declare function pickNewerVersion(a: string, b: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Composes resolved modules into a unified set of contributions.
|
|
26
|
+
* Takes topologically sorted ModuleManifests and merges their
|
|
27
|
+
* pubspec dependencies, provider contributions, route contributions,
|
|
28
|
+
* and environment variables.
|
|
29
|
+
*/
|
|
30
|
+
export declare class ModuleComposer {
|
|
31
|
+
/**
|
|
32
|
+
* Compose contributions from an ordered list of modules.
|
|
33
|
+
*
|
|
34
|
+
* @param modules - Topologically sorted module manifests (from ModuleResolver)
|
|
35
|
+
* @param context - Project context for evaluating isEnabled predicates
|
|
36
|
+
* @returns Merged ComposeResult
|
|
37
|
+
*/
|
|
38
|
+
compose(modules: readonly ModuleManifest[], context: ProjectContext): ComposeResult;
|
|
39
|
+
/**
|
|
40
|
+
* Generate a pubspec.yaml dependencies block from a ComposeResult.
|
|
41
|
+
* Returns a string with YAML-formatted dependency lines.
|
|
42
|
+
*/
|
|
43
|
+
formatPubspecDependencies(deps: ReadonlyMap<string, string>): string;
|
|
44
|
+
/**
|
|
45
|
+
* Generate an app_providers.dart barrel file content from provider contributions.
|
|
46
|
+
* Produces Dart export statements for each provider's import path.
|
|
47
|
+
*/
|
|
48
|
+
generateAppProvidersBarrel(providers: readonly ProviderContribution[]): string;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=composer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../src/modules/composer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,mEAAmE;IACnE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,qDAAqD;IACrD,QAAQ,CAAC,SAAS,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACpD,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC9C,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAa7D;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB;;;;;;OAMG;IACH,OAAO,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,aAAa;IAkEnF;;;OAGG;IACH,yBAAyB,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;IAKpE;;;OAGG;IACH,0BAA0B,CAAC,SAAS,EAAE,SAAS,oBAAoB,EAAE,GAAG,MAAM;CAoB/E"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compares two semver-like version constraints and returns the "newer" one.
|
|
3
|
+
* Strips leading ^ or ~ for comparison. If versions are identical, returns the first.
|
|
4
|
+
*/
|
|
5
|
+
export function pickNewerVersion(a, b) {
|
|
6
|
+
const stripPrefix = (v) => v.replace(/^[\^~>=<!\s]+/, '');
|
|
7
|
+
const partsA = stripPrefix(a).split('.').map(Number);
|
|
8
|
+
const partsB = stripPrefix(b).split('.').map(Number);
|
|
9
|
+
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
|
10
|
+
const numA = partsA[i] ?? 0;
|
|
11
|
+
const numB = partsB[i] ?? 0;
|
|
12
|
+
if (numA > numB)
|
|
13
|
+
return a;
|
|
14
|
+
if (numB > numA)
|
|
15
|
+
return b;
|
|
16
|
+
}
|
|
17
|
+
return a; // identical — keep first
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Composes resolved modules into a unified set of contributions.
|
|
21
|
+
* Takes topologically sorted ModuleManifests and merges their
|
|
22
|
+
* pubspec dependencies, provider contributions, route contributions,
|
|
23
|
+
* and environment variables.
|
|
24
|
+
*/
|
|
25
|
+
export class ModuleComposer {
|
|
26
|
+
/**
|
|
27
|
+
* Compose contributions from an ordered list of modules.
|
|
28
|
+
*
|
|
29
|
+
* @param modules - Topologically sorted module manifests (from ModuleResolver)
|
|
30
|
+
* @param context - Project context for evaluating isEnabled predicates
|
|
31
|
+
* @returns Merged ComposeResult
|
|
32
|
+
*/
|
|
33
|
+
compose(modules, context) {
|
|
34
|
+
const dependencies = new Map();
|
|
35
|
+
const devDependencies = new Map();
|
|
36
|
+
const providers = [];
|
|
37
|
+
const routes = [];
|
|
38
|
+
const envVarsSet = new Set();
|
|
39
|
+
for (const mod of modules) {
|
|
40
|
+
// Skip modules that have an isEnabled predicate that returns false
|
|
41
|
+
if (mod.isEnabled && !mod.isEnabled(context)) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const contrib = mod.contributions;
|
|
45
|
+
// Merge dependencies (newer version wins)
|
|
46
|
+
if (contrib.pubspecDependencies) {
|
|
47
|
+
for (const [name, version] of Object.entries(contrib.pubspecDependencies)) {
|
|
48
|
+
const existing = dependencies.get(name);
|
|
49
|
+
if (existing) {
|
|
50
|
+
dependencies.set(name, pickNewerVersion(existing, version));
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
dependencies.set(name, version);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Merge dev dependencies (newer version wins)
|
|
58
|
+
if (contrib.pubspecDevDependencies) {
|
|
59
|
+
for (const [name, version] of Object.entries(contrib.pubspecDevDependencies)) {
|
|
60
|
+
const existing = devDependencies.get(name);
|
|
61
|
+
if (existing) {
|
|
62
|
+
devDependencies.set(name, pickNewerVersion(existing, version));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
devDependencies.set(name, version);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Collect providers
|
|
70
|
+
if (contrib.providers) {
|
|
71
|
+
providers.push(...contrib.providers);
|
|
72
|
+
}
|
|
73
|
+
// Collect routes
|
|
74
|
+
if (contrib.routes) {
|
|
75
|
+
routes.push(...contrib.routes);
|
|
76
|
+
}
|
|
77
|
+
// Collect environment variables
|
|
78
|
+
if (contrib.envVars) {
|
|
79
|
+
for (const envVar of contrib.envVars) {
|
|
80
|
+
envVarsSet.add(envVar);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
dependencies,
|
|
86
|
+
devDependencies,
|
|
87
|
+
providers,
|
|
88
|
+
routes,
|
|
89
|
+
envVars: [...envVarsSet],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Generate a pubspec.yaml dependencies block from a ComposeResult.
|
|
94
|
+
* Returns a string with YAML-formatted dependency lines.
|
|
95
|
+
*/
|
|
96
|
+
formatPubspecDependencies(deps) {
|
|
97
|
+
const sorted = [...deps.entries()].sort(([a], [b]) => a.localeCompare(b));
|
|
98
|
+
return sorted.map(([name, version]) => ` ${name}: ${version}`).join('\n');
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Generate an app_providers.dart barrel file content from provider contributions.
|
|
102
|
+
* Produces Dart export statements for each provider's import path.
|
|
103
|
+
*/
|
|
104
|
+
generateAppProvidersBarrel(providers) {
|
|
105
|
+
const lines = [
|
|
106
|
+
'// Barrel file for shared application providers.',
|
|
107
|
+
'// Auto-generated by maxsim-flutter. Do not edit manually.',
|
|
108
|
+
"export '../router/app_router.dart';",
|
|
109
|
+
];
|
|
110
|
+
// Deduplicate by importPath
|
|
111
|
+
const seen = new Set();
|
|
112
|
+
seen.add('../router/app_router.dart');
|
|
113
|
+
for (const provider of providers) {
|
|
114
|
+
if (!seen.has(provider.importPath)) {
|
|
115
|
+
seen.add(provider.importPath);
|
|
116
|
+
lines.push(`export '${provider.importPath}';`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return lines.join('\n') + '\n';
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=composer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.js","sourceRoot":"","sources":["../../src/modules/composer.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAS,EAAE,CAAS;IACnD,MAAM,WAAW,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAErD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,IAAI,GAAG,IAAI;YAAE,OAAO,CAAC,CAAC;QAC1B,IAAI,IAAI,GAAG,IAAI;YAAE,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,CAAC,CAAC,yBAAyB;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IACzB;;;;;;OAMG;IACH,OAAO,CAAC,OAAkC,EAAE,OAAuB;QACjE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC/C,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;QAClD,MAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAwB,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QAErC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,mEAAmE;YACnE,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7C,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC;YAElC,0CAA0C;YAC1C,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;gBAChC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBAC1E,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACxC,IAAI,QAAQ,EAAE,CAAC;wBACb,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;oBAC9D,CAAC;yBAAM,CAAC;wBACN,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,8CAA8C;YAC9C,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;gBACnC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC;oBAC7E,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC3C,IAAI,QAAQ,EAAE,CAAC;wBACb,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;oBACjE,CAAC;yBAAM,CAAC;wBACN,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBACrC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,oBAAoB;YACpB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACvC,CAAC;YAED,iBAAiB;YACjB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;YAED,gCAAgC;YAChC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,YAAY;YACZ,eAAe;YACf,SAAS;YACT,MAAM;YACN,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC;SACzB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,yBAAyB,CAAC,IAAiC;QACzD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7E,CAAC;IAED;;;OAGG;IACH,0BAA0B,CAAC,SAA0C;QACnE,MAAM,KAAK,GAAG;YACZ,kDAAkD;YAClD,4DAA4D;YAC5D,qCAAqC;SACtC,CAAC;QAEF,4BAA4B;QAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAEtC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjC,CAAC;CACF"}
|