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.
Files changed (281) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE +21 -0
  3. package/README.md +445 -0
  4. package/claude-plugin/.claude-plugin/plugin.json +46 -0
  5. package/claude-plugin/agents/flutter-setup-agent.md +54 -0
  6. package/claude-plugin/commands/flutter-add.md +32 -0
  7. package/claude-plugin/commands/flutter-create.md +28 -0
  8. package/claude-plugin/commands/flutter-migrate.md +28 -0
  9. package/claude-plugin/skills/flutter-scaffolding/SKILL.md +109 -0
  10. package/dist/claude-setup/agent-writer.d.ts +21 -0
  11. package/dist/claude-setup/agent-writer.d.ts.map +1 -0
  12. package/dist/claude-setup/agent-writer.js +365 -0
  13. package/dist/claude-setup/agent-writer.js.map +1 -0
  14. package/dist/claude-setup/claude-md-generator.d.ts +7 -0
  15. package/dist/claude-setup/claude-md-generator.d.ts.map +1 -0
  16. package/dist/claude-setup/claude-md-generator.js +428 -0
  17. package/dist/claude-setup/claude-md-generator.js.map +1 -0
  18. package/dist/claude-setup/commands-writer.d.ts +7 -0
  19. package/dist/claude-setup/commands-writer.d.ts.map +1 -0
  20. package/dist/claude-setup/commands-writer.js +303 -0
  21. package/dist/claude-setup/commands-writer.js.map +1 -0
  22. package/dist/claude-setup/hooks-writer.d.ts +3 -0
  23. package/dist/claude-setup/hooks-writer.d.ts.map +1 -0
  24. package/dist/claude-setup/hooks-writer.js +34 -0
  25. package/dist/claude-setup/hooks-writer.js.map +1 -0
  26. package/dist/claude-setup/index.d.ts +10 -0
  27. package/dist/claude-setup/index.d.ts.map +1 -0
  28. package/dist/claude-setup/index.js +9 -0
  29. package/dist/claude-setup/index.js.map +1 -0
  30. package/dist/claude-setup/mcp-config-writer.d.ts +3 -0
  31. package/dist/claude-setup/mcp-config-writer.d.ts.map +1 -0
  32. package/dist/claude-setup/mcp-config-writer.js +42 -0
  33. package/dist/claude-setup/mcp-config-writer.js.map +1 -0
  34. package/dist/claude-setup/plugin-assembler.d.ts +2 -0
  35. package/dist/claude-setup/plugin-assembler.d.ts.map +1 -0
  36. package/dist/claude-setup/plugin-assembler.js +3 -0
  37. package/dist/claude-setup/plugin-assembler.js.map +1 -0
  38. package/dist/claude-setup/prd-generator.d.ts +10 -0
  39. package/dist/claude-setup/prd-generator.d.ts.map +1 -0
  40. package/dist/claude-setup/prd-generator.js +295 -0
  41. package/dist/claude-setup/prd-generator.js.map +1 -0
  42. package/dist/claude-setup/setup-orchestrator.d.ts +11 -0
  43. package/dist/claude-setup/setup-orchestrator.d.ts.map +1 -0
  44. package/dist/claude-setup/setup-orchestrator.js +46 -0
  45. package/dist/claude-setup/setup-orchestrator.js.map +1 -0
  46. package/dist/claude-setup/skill-writer.d.ts +3 -0
  47. package/dist/claude-setup/skill-writer.d.ts.map +1 -0
  48. package/dist/claude-setup/skill-writer.js +256 -0
  49. package/dist/claude-setup/skill-writer.js.map +1 -0
  50. package/dist/cli/commands/add.d.ts +16 -0
  51. package/dist/cli/commands/add.d.ts.map +1 -0
  52. package/dist/cli/commands/add.js +414 -0
  53. package/dist/cli/commands/add.js.map +1 -0
  54. package/dist/cli/commands/create.d.ts +3 -0
  55. package/dist/cli/commands/create.d.ts.map +1 -0
  56. package/dist/cli/commands/create.js +161 -0
  57. package/dist/cli/commands/create.js.map +1 -0
  58. package/dist/cli/commands/list.d.ts +12 -0
  59. package/dist/cli/commands/list.d.ts.map +1 -0
  60. package/dist/cli/commands/list.js +148 -0
  61. package/dist/cli/commands/list.js.map +1 -0
  62. package/dist/cli/commands/migrate.d.ts +3 -0
  63. package/dist/cli/commands/migrate.d.ts.map +1 -0
  64. package/dist/cli/commands/migrate.js +332 -0
  65. package/dist/cli/commands/migrate.js.map +1 -0
  66. package/dist/cli/index.d.ts +3 -0
  67. package/dist/cli/index.d.ts.map +1 -0
  68. package/dist/cli/index.js +34 -0
  69. package/dist/cli/index.js.map +1 -0
  70. package/dist/cli/ui/prompts.d.ts +9 -0
  71. package/dist/cli/ui/prompts.d.ts.map +1 -0
  72. package/dist/cli/ui/prompts.js +74 -0
  73. package/dist/cli/ui/prompts.js.map +1 -0
  74. package/dist/cli/ui/spinner.d.ts +2 -0
  75. package/dist/cli/ui/spinner.d.ts.map +1 -0
  76. package/dist/cli/ui/spinner.js +5 -0
  77. package/dist/cli/ui/spinner.js.map +1 -0
  78. package/dist/cli/version-check.d.ts +7 -0
  79. package/dist/cli/version-check.d.ts.map +1 -0
  80. package/dist/cli/version-check.js +92 -0
  81. package/dist/cli/version-check.js.map +1 -0
  82. package/dist/core/config/defaults.d.ts +3 -0
  83. package/dist/core/config/defaults.d.ts.map +1 -0
  84. package/dist/core/config/defaults.js +21 -0
  85. package/dist/core/config/defaults.js.map +1 -0
  86. package/dist/core/config/loader.d.ts +4 -0
  87. package/dist/core/config/loader.d.ts.map +1 -0
  88. package/dist/core/config/loader.js +38 -0
  89. package/dist/core/config/loader.js.map +1 -0
  90. package/dist/core/config/schema.d.ts +406 -0
  91. package/dist/core/config/schema.d.ts.map +1 -0
  92. package/dist/core/config/schema.js +119 -0
  93. package/dist/core/config/schema.js.map +1 -0
  94. package/dist/core/context.d.ts +57 -0
  95. package/dist/core/context.d.ts.map +1 -0
  96. package/dist/core/context.js +99 -0
  97. package/dist/core/context.js.map +1 -0
  98. package/dist/core/detector.d.ts +28 -0
  99. package/dist/core/detector.d.ts.map +1 -0
  100. package/dist/core/detector.js +200 -0
  101. package/dist/core/detector.js.map +1 -0
  102. package/dist/core/validator.d.ts +7 -0
  103. package/dist/core/validator.d.ts.map +1 -0
  104. package/dist/core/validator.js +35 -0
  105. package/dist/core/validator.js.map +1 -0
  106. package/dist/index.d.ts +21 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +14 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/modules/composer.d.ts +50 -0
  111. package/dist/modules/composer.d.ts.map +1 -0
  112. package/dist/modules/composer.js +122 -0
  113. package/dist/modules/composer.js.map +1 -0
  114. package/dist/modules/definitions/analytics/module.d.ts +7 -0
  115. package/dist/modules/definitions/analytics/module.d.ts.map +1 -0
  116. package/dist/modules/definitions/analytics/module.js +28 -0
  117. package/dist/modules/definitions/analytics/module.js.map +1 -0
  118. package/dist/modules/definitions/api/module.d.ts +7 -0
  119. package/dist/modules/definitions/api/module.d.ts.map +1 -0
  120. package/dist/modules/definitions/api/module.js +41 -0
  121. package/dist/modules/definitions/api/module.js.map +1 -0
  122. package/dist/modules/definitions/auth/module.d.ts +7 -0
  123. package/dist/modules/definitions/auth/module.d.ts.map +1 -0
  124. package/dist/modules/definitions/auth/module.js +53 -0
  125. package/dist/modules/definitions/auth/module.js.map +1 -0
  126. package/dist/modules/definitions/cicd/module.d.ts +7 -0
  127. package/dist/modules/definitions/cicd/module.d.ts.map +1 -0
  128. package/dist/modules/definitions/cicd/module.js +34 -0
  129. package/dist/modules/definitions/cicd/module.js.map +1 -0
  130. package/dist/modules/definitions/core/module.d.ts +7 -0
  131. package/dist/modules/definitions/core/module.d.ts.map +1 -0
  132. package/dist/modules/definitions/core/module.js +31 -0
  133. package/dist/modules/definitions/core/module.js.map +1 -0
  134. package/dist/modules/definitions/database/module.d.ts +8 -0
  135. package/dist/modules/definitions/database/module.d.ts.map +1 -0
  136. package/dist/modules/definitions/database/module.js +47 -0
  137. package/dist/modules/definitions/database/module.js.map +1 -0
  138. package/dist/modules/definitions/deep-linking/module.d.ts +7 -0
  139. package/dist/modules/definitions/deep-linking/module.d.ts.map +1 -0
  140. package/dist/modules/definitions/deep-linking/module.js +48 -0
  141. package/dist/modules/definitions/deep-linking/module.js.map +1 -0
  142. package/dist/modules/definitions/i18n/module.d.ts +7 -0
  143. package/dist/modules/definitions/i18n/module.d.ts.map +1 -0
  144. package/dist/modules/definitions/i18n/module.js +37 -0
  145. package/dist/modules/definitions/i18n/module.js.map +1 -0
  146. package/dist/modules/definitions/push/module.d.ts +7 -0
  147. package/dist/modules/definitions/push/module.d.ts.map +1 -0
  148. package/dist/modules/definitions/push/module.js +40 -0
  149. package/dist/modules/definitions/push/module.js.map +1 -0
  150. package/dist/modules/definitions/theme/module.d.ts +7 -0
  151. package/dist/modules/definitions/theme/module.d.ts.map +1 -0
  152. package/dist/modules/definitions/theme/module.js +42 -0
  153. package/dist/modules/definitions/theme/module.js.map +1 -0
  154. package/dist/modules/registry.d.ts +50 -0
  155. package/dist/modules/registry.d.ts.map +1 -0
  156. package/dist/modules/registry.js +104 -0
  157. package/dist/modules/registry.js.map +1 -0
  158. package/dist/modules/resolver.d.ts +42 -0
  159. package/dist/modules/resolver.d.ts.map +1 -0
  160. package/dist/modules/resolver.js +140 -0
  161. package/dist/modules/resolver.js.map +1 -0
  162. package/dist/ralph/prd-generator.d.ts +2 -0
  163. package/dist/ralph/prd-generator.d.ts.map +1 -0
  164. package/dist/ralph/prd-generator.js +3 -0
  165. package/dist/ralph/prd-generator.js.map +1 -0
  166. package/dist/ralph/ralph-converter.d.ts +2 -0
  167. package/dist/ralph/ralph-converter.d.ts.map +1 -0
  168. package/dist/ralph/ralph-converter.js +3 -0
  169. package/dist/ralph/ralph-converter.js.map +1 -0
  170. package/dist/ralph/story-sizer.d.ts +2 -0
  171. package/dist/ralph/story-sizer.d.ts.map +1 -0
  172. package/dist/ralph/story-sizer.js +3 -0
  173. package/dist/ralph/story-sizer.js.map +1 -0
  174. package/dist/scaffold/engine.d.ts +40 -0
  175. package/dist/scaffold/engine.d.ts.map +1 -0
  176. package/dist/scaffold/engine.js +233 -0
  177. package/dist/scaffold/engine.js.map +1 -0
  178. package/dist/scaffold/file-writer.d.ts +22 -0
  179. package/dist/scaffold/file-writer.d.ts.map +1 -0
  180. package/dist/scaffold/file-writer.js +68 -0
  181. package/dist/scaffold/file-writer.js.map +1 -0
  182. package/dist/scaffold/post-processors/build-runner.d.ts +2 -0
  183. package/dist/scaffold/post-processors/build-runner.d.ts.map +1 -0
  184. package/dist/scaffold/post-processors/build-runner.js +5 -0
  185. package/dist/scaffold/post-processors/build-runner.js.map +1 -0
  186. package/dist/scaffold/post-processors/dart-format.d.ts +2 -0
  187. package/dist/scaffold/post-processors/dart-format.d.ts.map +1 -0
  188. package/dist/scaffold/post-processors/dart-format.js +5 -0
  189. package/dist/scaffold/post-processors/dart-format.js.map +1 -0
  190. package/dist/scaffold/post-processors/flutter-pub-get.d.ts +2 -0
  191. package/dist/scaffold/post-processors/flutter-pub-get.d.ts.map +1 -0
  192. package/dist/scaffold/post-processors/flutter-pub-get.js +5 -0
  193. package/dist/scaffold/post-processors/flutter-pub-get.js.map +1 -0
  194. package/dist/scaffold/renderer.d.ts +20 -0
  195. package/dist/scaffold/renderer.d.ts.map +1 -0
  196. package/dist/scaffold/renderer.js +75 -0
  197. package/dist/scaffold/renderer.js.map +1 -0
  198. package/dist/scaffold/template-helpers.d.ts +25 -0
  199. package/dist/scaffold/template-helpers.d.ts.map +1 -0
  200. package/dist/scaffold/template-helpers.js +115 -0
  201. package/dist/scaffold/template-helpers.js.map +1 -0
  202. package/dist/types/config.d.ts +4 -0
  203. package/dist/types/config.d.ts.map +1 -0
  204. package/dist/types/config.js +2 -0
  205. package/dist/types/config.js.map +1 -0
  206. package/dist/types/module.d.ts +85 -0
  207. package/dist/types/module.d.ts.map +1 -0
  208. package/dist/types/module.js +2 -0
  209. package/dist/types/module.js.map +1 -0
  210. package/dist/types/project.d.ts +13 -0
  211. package/dist/types/project.d.ts.map +1 -0
  212. package/dist/types/project.js +2 -0
  213. package/dist/types/project.js.map +1 -0
  214. package/package.json +80 -0
  215. package/templates/core/analysis_options.yaml.hbs +21 -0
  216. package/templates/core/lib/app.dart.hbs +20 -0
  217. package/templates/core/lib/core/providers/app_providers.dart.hbs +3 -0
  218. package/templates/core/lib/core/router/app_router.dart.hbs +19 -0
  219. package/templates/core/lib/core/theme/app_theme.dart.hbs +15 -0
  220. package/templates/core/lib/features/home/data/models/.gitkeep +0 -0
  221. package/templates/core/lib/features/home/data/repositories/.gitkeep +0 -0
  222. package/templates/core/lib/features/home/domain/entities/.gitkeep +0 -0
  223. package/templates/core/lib/features/home/domain/repositories/.gitkeep +0 -0
  224. package/templates/core/lib/features/home/presentation/pages/home_page.dart.hbs +18 -0
  225. package/templates/core/lib/features/home/presentation/widgets/.gitkeep +0 -0
  226. package/templates/core/lib/main.dart.hbs +11 -0
  227. package/templates/core/pubspec.yaml.hbs +30 -0
  228. package/templates/core/test/widget_test.dart.hbs +16 -0
  229. package/templates/modules/analytics/lib/features/analytics/data/observers/analytics_route_observer.dart.hbs +53 -0
  230. package/templates/modules/analytics/lib/features/analytics/data/services/firebase_analytics_service.dart.hbs +39 -0
  231. package/templates/modules/analytics/lib/features/analytics/domain/services/analytics_service.dart.hbs +25 -0
  232. package/templates/modules/analytics/lib/features/analytics/presentation/providers/analytics_provider.dart.hbs +17 -0
  233. package/templates/modules/analytics/pubspec.partial.yaml +2 -0
  234. package/templates/modules/api/lib/features/api/data/datasources/api_client.dart.hbs +171 -0
  235. package/templates/modules/api/lib/features/api/data/interceptors/auth_interceptor.dart.hbs +25 -0
  236. package/templates/modules/api/lib/features/api/data/interceptors/retry_interceptor.dart.hbs +42 -0
  237. package/templates/modules/api/lib/features/api/data/repositories/api_repository_impl.dart.hbs +21 -0
  238. package/templates/modules/api/lib/features/api/domain/exceptions/api_exception.dart.hbs +31 -0
  239. package/templates/modules/api/lib/features/api/domain/repositories/api_repository.dart.hbs +8 -0
  240. package/templates/modules/api/lib/features/api/presentation/providers/api_provider.dart.hbs +17 -0
  241. package/templates/modules/api/pubspec.partial.yaml +7 -0
  242. package/templates/modules/auth/lib/features/auth/data/datasources/auth_remote_datasource.dart.hbs +181 -0
  243. package/templates/modules/auth/lib/features/auth/data/models/auth_user_model.dart.hbs +27 -0
  244. package/templates/modules/auth/lib/features/auth/data/repositories/auth_repository_impl.dart.hbs +49 -0
  245. package/templates/modules/auth/lib/features/auth/domain/entities/user_entity.dart.hbs +18 -0
  246. package/templates/modules/auth/lib/features/auth/domain/repositories/auth_repository.dart.hbs +22 -0
  247. package/templates/modules/auth/lib/features/auth/domain/usecases/register_usecase.dart.hbs +20 -0
  248. package/templates/modules/auth/lib/features/auth/domain/usecases/sign_in_usecase.dart.hbs +15 -0
  249. package/templates/modules/auth/lib/features/auth/domain/usecases/sign_out_usecase.dart.hbs +11 -0
  250. package/templates/modules/auth/lib/features/auth/presentation/pages/login_page.dart.hbs +118 -0
  251. package/templates/modules/auth/lib/features/auth/presentation/pages/register_page.dart.hbs +131 -0
  252. package/templates/modules/auth/lib/features/auth/presentation/providers/auth_provider.dart.hbs +31 -0
  253. package/templates/modules/auth/pubspec.partial.yaml +13 -0
  254. package/templates/modules/cicd/.github/workflows/ci.yml.hbs +45 -0
  255. package/templates/modules/cicd/.gitlab-ci.yml.hbs +53 -0
  256. package/templates/modules/cicd/bitbucket-pipelines.yml.hbs +39 -0
  257. package/templates/modules/cicd/pubspec.partial.yaml +1 -0
  258. package/templates/modules/database/lib/features/database/data/datasources/database_datasource.dart.hbs +115 -0
  259. package/templates/modules/database/lib/features/database/data/repositories/database_repository_impl.dart.hbs +73 -0
  260. package/templates/modules/database/lib/features/database/domain/repositories/database_repository.dart.hbs +10 -0
  261. package/templates/modules/database/lib/features/database/presentation/providers/database_provider.dart.hbs +43 -0
  262. package/templates/modules/database/pubspec.partial.yaml +27 -0
  263. package/templates/modules/deep-linking/lib/features/deep_linking/data/datasources/deep_link_datasource.dart.hbs +18 -0
  264. package/templates/modules/deep-linking/lib/features/deep_linking/data/repositories/deep_link_repository_impl.dart.hbs +14 -0
  265. package/templates/modules/deep-linking/lib/features/deep_linking/domain/repositories/deep_link_repository.dart.hbs +7 -0
  266. package/templates/modules/deep-linking/lib/features/deep_linking/presentation/providers/deep_link_provider.dart.hbs +57 -0
  267. package/templates/modules/deep-linking/pubspec.partial.yaml +2 -0
  268. package/templates/modules/i18n/l10n.yaml.hbs +5 -0
  269. package/templates/modules/i18n/lib/core/l10n/l10n_config.dart.hbs +29 -0
  270. package/templates/modules/i18n/lib/core/l10n/l10n_provider.dart.hbs +20 -0
  271. package/templates/modules/i18n/lib/l10n/app_de.arb.hbs +27 -0
  272. package/templates/modules/i18n/lib/l10n/app_en.arb.hbs +27 -0
  273. package/templates/modules/i18n/pubspec.partial.yaml +7 -0
  274. package/templates/modules/push/lib/features/push/data/datasources/push_datasource.dart.hbs +124 -0
  275. package/templates/modules/push/lib/features/push/data/repositories/push_repository_impl.dart.hbs +28 -0
  276. package/templates/modules/push/lib/features/push/domain/repositories/push_repository.dart.hbs +31 -0
  277. package/templates/modules/push/lib/features/push/presentation/providers/push_provider.dart.hbs +34 -0
  278. package/templates/modules/push/pubspec.partial.yaml +8 -0
  279. package/templates/modules/theme/lib/core/theme/app_theme.dart.hbs +74 -0
  280. package/templates/modules/theme/lib/core/theme/theme_provider.dart.hbs +46 -0
  281. package/templates/modules/theme/pubspec.partial.yaml +2 -0
@@ -0,0 +1,104 @@
1
+ import { fileURLToPath } from 'node:url';
2
+ import { dirname, join } from 'node:path';
3
+ import { readdir, stat } from 'node:fs/promises';
4
+ const __filename = fileURLToPath(import.meta.url);
5
+ const __dirname = dirname(__filename);
6
+ /**
7
+ * Registry that discovers and loads all module definitions
8
+ * from src/modules/definitions/ (at runtime: dist/modules/definitions/).
9
+ */
10
+ export class ModuleRegistry {
11
+ modules = new Map();
12
+ loaded = false;
13
+ /** Override the definitions directory (useful for testing) */
14
+ definitionsDir;
15
+ constructor(definitionsDir) {
16
+ this.definitionsDir = definitionsDir ?? join(__dirname, 'definitions');
17
+ }
18
+ /**
19
+ * Discover and load all module definitions from the definitions directory.
20
+ * Each subdirectory should contain a module.ts/module.js exporting `{ manifest }`.
21
+ */
22
+ async loadAll() {
23
+ this.modules.clear();
24
+ let entries;
25
+ try {
26
+ entries = await readdir(this.definitionsDir);
27
+ }
28
+ catch {
29
+ // Definitions directory doesn't exist — no modules to load
30
+ this.loaded = true;
31
+ return;
32
+ }
33
+ for (const entry of entries) {
34
+ const entryPath = join(this.definitionsDir, entry);
35
+ const entryStat = await stat(entryPath);
36
+ if (!entryStat.isDirectory())
37
+ continue;
38
+ const modulePath = join(entryPath, 'module.js');
39
+ try {
40
+ const moduleExports = (await import(modulePath));
41
+ if (moduleExports.manifest && typeof moduleExports.manifest.id === 'string') {
42
+ this.modules.set(moduleExports.manifest.id, moduleExports.manifest);
43
+ }
44
+ }
45
+ catch {
46
+ // Module either doesn't exist or isn't implemented yet — skip
47
+ }
48
+ }
49
+ this.loaded = true;
50
+ }
51
+ /**
52
+ * Register a module manifest directly (useful for testing or programmatic registration).
53
+ */
54
+ register(manifest) {
55
+ this.modules.set(manifest.id, manifest);
56
+ }
57
+ /**
58
+ * Get a module by ID. Throws if the module is not registered.
59
+ */
60
+ get(id) {
61
+ const m = this.modules.get(id);
62
+ if (!m) {
63
+ throw new Error(`Module '${id}' not found in registry`);
64
+ }
65
+ return m;
66
+ }
67
+ /**
68
+ * Check if a module is registered.
69
+ */
70
+ has(id) {
71
+ return this.modules.has(id);
72
+ }
73
+ /**
74
+ * Get all registered modules.
75
+ */
76
+ getAll() {
77
+ return Array.from(this.modules.values());
78
+ }
79
+ /**
80
+ * Get all modules that are always included (e.g., core).
81
+ */
82
+ getAlwaysIncluded() {
83
+ return this.getAll().filter((m) => m.alwaysIncluded === true);
84
+ }
85
+ /**
86
+ * Get all optional (user-selectable) modules.
87
+ */
88
+ getOptional() {
89
+ return this.getAll().filter((m) => m.alwaysIncluded !== true);
90
+ }
91
+ /**
92
+ * Get the number of registered modules.
93
+ */
94
+ get size() {
95
+ return this.modules.size;
96
+ }
97
+ /**
98
+ * Whether loadAll() has been called.
99
+ */
100
+ get isLoaded() {
101
+ return this.loaded;
102
+ }
103
+ }
104
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/modules/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { ModuleManifest } from '../types/module.js';
2
+ import type { ModuleRegistry } from './registry.js';
3
+ /**
4
+ * Result of module resolution — an ordered list of modules
5
+ * with all dependencies included and topologically sorted.
6
+ */
7
+ export interface ResolveResult {
8
+ /** Modules in dependency order (dependencies before dependents) */
9
+ readonly ordered: readonly ModuleManifest[];
10
+ }
11
+ /**
12
+ * Resolves selected modules by validating dependencies, detecting
13
+ * circular dependencies and conflicts, and returning a topologically
14
+ * sorted list that includes all transitive dependencies.
15
+ */
16
+ export declare class ModuleResolver {
17
+ private readonly registry;
18
+ constructor(registry: ModuleRegistry);
19
+ /**
20
+ * Resolve a set of selected module IDs into a topologically sorted list.
21
+ * Always-included modules are automatically added.
22
+ *
23
+ * @param selectedIds - Module IDs explicitly chosen by the user
24
+ * @returns ResolveResult with ordered modules
25
+ * @throws Error on missing dependency, circular dependency, or conflict
26
+ */
27
+ resolve(selectedIds: readonly string[]): ResolveResult;
28
+ /**
29
+ * Expand the set of IDs to include all transitive dependencies.
30
+ */
31
+ private addTransitiveDependencies;
32
+ /**
33
+ * Check for conflicts between selected modules.
34
+ */
35
+ private checkConflicts;
36
+ /**
37
+ * Perform a topological sort using Kahn's algorithm (BFS-based).
38
+ * Detects circular dependencies.
39
+ */
40
+ private topologicalSort;
41
+ }
42
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/modules/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;CAC7C;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,cAAc;IAErD;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,aAAa;IA0BtD;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA0BjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;;OAGG;IACH,OAAO,CAAC,eAAe;CAiExB"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Resolves selected modules by validating dependencies, detecting
3
+ * circular dependencies and conflicts, and returning a topologically
4
+ * sorted list that includes all transitive dependencies.
5
+ */
6
+ export class ModuleResolver {
7
+ registry;
8
+ constructor(registry) {
9
+ this.registry = registry;
10
+ }
11
+ /**
12
+ * Resolve a set of selected module IDs into a topologically sorted list.
13
+ * Always-included modules are automatically added.
14
+ *
15
+ * @param selectedIds - Module IDs explicitly chosen by the user
16
+ * @returns ResolveResult with ordered modules
17
+ * @throws Error on missing dependency, circular dependency, or conflict
18
+ */
19
+ resolve(selectedIds) {
20
+ // Collect all module IDs: always-included + user-selected
21
+ const allIds = new Set(selectedIds);
22
+ for (const m of this.registry.getAlwaysIncluded()) {
23
+ allIds.add(m.id);
24
+ }
25
+ // Validate all selected IDs exist in the registry
26
+ for (const id of allIds) {
27
+ if (!this.registry.has(id)) {
28
+ throw new Error(`Module '${id}' not found in registry`);
29
+ }
30
+ }
31
+ // Add transitive dependencies
32
+ this.addTransitiveDependencies(allIds);
33
+ // Check for conflicts between selected modules
34
+ this.checkConflicts(allIds);
35
+ // Topological sort
36
+ const ordered = this.topologicalSort(allIds);
37
+ return { ordered };
38
+ }
39
+ /**
40
+ * Expand the set of IDs to include all transitive dependencies.
41
+ */
42
+ addTransitiveDependencies(ids) {
43
+ const visited = new Set();
44
+ const stack = [...ids];
45
+ while (stack.length > 0) {
46
+ const id = stack.pop();
47
+ if (visited.has(id))
48
+ continue;
49
+ visited.add(id);
50
+ const manifest = this.registry.get(id);
51
+ for (const depId of manifest.requires) {
52
+ if (!this.registry.has(depId)) {
53
+ throw new Error(`Module '${id}' requires '${depId}', but '${depId}' was not found in registry`);
54
+ }
55
+ if (!ids.has(depId)) {
56
+ ids.add(depId);
57
+ }
58
+ if (!visited.has(depId)) {
59
+ stack.push(depId);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ /**
65
+ * Check for conflicts between selected modules.
66
+ */
67
+ checkConflicts(ids) {
68
+ for (const id of ids) {
69
+ const manifest = this.registry.get(id);
70
+ if (!manifest.conflictsWith)
71
+ continue;
72
+ for (const conflictId of manifest.conflictsWith) {
73
+ if (ids.has(conflictId)) {
74
+ throw new Error(`Module '${id}' conflicts with '${conflictId}' — they cannot be used together`);
75
+ }
76
+ }
77
+ }
78
+ }
79
+ /**
80
+ * Perform a topological sort using Kahn's algorithm (BFS-based).
81
+ * Detects circular dependencies.
82
+ */
83
+ topologicalSort(ids) {
84
+ // Build adjacency list and in-degree count (only for selected modules)
85
+ const inDegree = new Map();
86
+ const dependents = new Map(); // dep -> modules that depend on it
87
+ for (const id of ids) {
88
+ if (!inDegree.has(id)) {
89
+ inDegree.set(id, 0);
90
+ }
91
+ if (!dependents.has(id)) {
92
+ dependents.set(id, []);
93
+ }
94
+ }
95
+ for (const id of ids) {
96
+ const manifest = this.registry.get(id);
97
+ for (const depId of manifest.requires) {
98
+ if (ids.has(depId)) {
99
+ inDegree.set(id, (inDegree.get(id) ?? 0) + 1);
100
+ dependents.get(depId).push(id);
101
+ }
102
+ }
103
+ }
104
+ // Start with modules that have no dependencies (in-degree 0)
105
+ const queue = [];
106
+ for (const [id, degree] of inDegree) {
107
+ if (degree === 0) {
108
+ queue.push(id);
109
+ }
110
+ }
111
+ // Sort the initial queue for deterministic output
112
+ queue.sort();
113
+ const result = [];
114
+ while (queue.length > 0) {
115
+ const id = queue.shift();
116
+ result.push(this.registry.get(id));
117
+ for (const depId of dependents.get(id)) {
118
+ const newDegree = inDegree.get(depId) - 1;
119
+ inDegree.set(depId, newDegree);
120
+ if (newDegree === 0) {
121
+ // Insert into queue in sorted position for deterministic order
122
+ const insertIdx = queue.findIndex((q) => q > depId);
123
+ if (insertIdx === -1) {
124
+ queue.push(depId);
125
+ }
126
+ else {
127
+ queue.splice(insertIdx, 0, depId);
128
+ }
129
+ }
130
+ }
131
+ }
132
+ // If not all modules were sorted, there's a cycle
133
+ if (result.length !== ids.size) {
134
+ const unsorted = [...ids].filter((id) => !result.some((m) => m.id === id));
135
+ throw new Error(`Circular dependency detected among modules: ${unsorted.join(', ')}`);
136
+ }
137
+ return result;
138
+ }
139
+ }
140
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/modules/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prd-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prd-generator.d.ts","sourceRoot":"","sources":["../../src/ralph/prd-generator.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export {};
2
+ // PRD generator - to be implemented by P3-006
3
+ //# sourceMappingURL=prd-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prd-generator.js","sourceRoot":"","sources":["../../src/ralph/prd-generator.ts"],"names":[],"mappings":";AAAA,8CAA8C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ralph-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ralph-converter.d.ts","sourceRoot":"","sources":["../../src/ralph/ralph-converter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export {};
2
+ // Ralph converter - to be implemented by P3-006
3
+ //# sourceMappingURL=ralph-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ralph-converter.js","sourceRoot":"","sources":["../../src/ralph/ralph-converter.ts"],"names":[],"mappings":";AAAA,gDAAgD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=story-sizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"story-sizer.d.ts","sourceRoot":"","sources":["../../src/ralph/story-sizer.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export {};
2
+ // Story sizer - to be implemented by P3-006
3
+ //# sourceMappingURL=story-sizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"story-sizer.js","sourceRoot":"","sources":["../../src/ralph/story-sizer.ts"],"names":[],"mappings":";AAAA,4CAA4C"}
@@ -0,0 +1,40 @@
1
+ import type { ProjectContext } from '../core/context.js';
2
+ import { ModuleRegistry } from '../modules/registry.js';
3
+ export interface ScaffoldResult {
4
+ filesWritten: string[];
5
+ filesSkipped: string[];
6
+ conflicts: string[];
7
+ postProcessorsRun: string[];
8
+ postProcessorErrors: string[];
9
+ }
10
+ export interface ScaffoldEngineOptions {
11
+ /** Override the core templates directory (useful for testing) */
12
+ templatesDir?: string;
13
+ /** Override the modules templates base directory (useful for testing) */
14
+ modulesTemplatesDir?: string;
15
+ /** Pre-loaded module registry (useful for testing) */
16
+ registry?: ModuleRegistry;
17
+ /** Skip Claude setup generation even if context.claude.enabled is true */
18
+ noClaude?: boolean;
19
+ }
20
+ export declare class ScaffoldEngine {
21
+ private renderer;
22
+ private readonly templatesDirOverride?;
23
+ private readonly modulesTemplatesDirOverride?;
24
+ private readonly registryOverride?;
25
+ private readonly noClaudeOverride;
26
+ constructor(options?: ScaffoldEngineOptions);
27
+ run(context: ProjectContext): Promise<ScaffoldResult>;
28
+ private getTemplatesDir;
29
+ private getModulesTemplatesDir;
30
+ private getRegistry;
31
+ /**
32
+ * Determine which module IDs are enabled from the project context.
33
+ */
34
+ private getEnabledModuleIds;
35
+ /**
36
+ * Merge additional dependencies from modules into the rendered pubspec.yaml.
37
+ */
38
+ private mergePubspecDependencies;
39
+ }
40
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/scaffold/engine.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAgBxD,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAS;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAiB;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;gBAE/B,OAAO,GAAE,qBAA0B;IAQzC,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAmJ3D,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,sBAAsB;YAOhB,WAAW;IAOzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;CA8CjC"}
@@ -0,0 +1,233 @@
1
+ import { fileURLToPath } from 'node:url';
2
+ import { dirname, join } from 'node:path';
3
+ import { load as yamlLoad, dump as yamlDump } from 'js-yaml';
4
+ import fsExtra from 'fs-extra';
5
+ const { pathExists } = fsExtra;
6
+ import { TemplateRenderer } from './renderer.js';
7
+ import { FileWriter } from './file-writer.js';
8
+ import { ModuleRegistry } from '../modules/registry.js';
9
+ import { ModuleResolver } from '../modules/resolver.js';
10
+ import { pickNewerVersion } from '../modules/composer.js';
11
+ import { runDartFormat } from './post-processors/dart-format.js';
12
+ import { runFlutterPubGet } from './post-processors/flutter-pub-get.js';
13
+ import { runBuildRunner } from './post-processors/build-runner.js';
14
+ import { runClaudeSetup } from '../claude-setup/index.js';
15
+ import { buildTemplateContext, collectAndRenderTemplates, processPubspecPartial, } from './template-helpers.js';
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+ export class ScaffoldEngine {
19
+ renderer;
20
+ templatesDirOverride;
21
+ modulesTemplatesDirOverride;
22
+ registryOverride;
23
+ noClaudeOverride;
24
+ constructor(options = {}) {
25
+ this.renderer = new TemplateRenderer();
26
+ this.templatesDirOverride = options.templatesDir;
27
+ this.modulesTemplatesDirOverride = options.modulesTemplatesDir;
28
+ this.registryOverride = options.registry;
29
+ this.noClaudeOverride = options.noClaude ?? false;
30
+ }
31
+ async run(context) {
32
+ const templateContext = buildTemplateContext(context);
33
+ // 1. Collect and render core templates
34
+ const generatedFiles = await collectAndRenderTemplates(this.getTemplatesDir(), templateContext, this.renderer);
35
+ // 2. Handle module templates if any modules are enabled
36
+ const enabledModuleIds = this.getEnabledModuleIds(context);
37
+ if (enabledModuleIds.length > 0) {
38
+ const registry = await this.getRegistry();
39
+ // Filter to only modules that exist in the registry
40
+ const validIds = enabledModuleIds.filter((id) => registry.has(id));
41
+ if (validIds.length > 0) {
42
+ const resolver = new ModuleResolver(registry);
43
+ const resolved = resolver.resolve(validIds);
44
+ const modulesDir = this.getModulesTemplatesDir();
45
+ const extraDeps = new Map();
46
+ const extraDevDeps = new Map();
47
+ const extraFlutter = {};
48
+ for (const mod of resolved.ordered) {
49
+ if (mod.alwaysIncluded)
50
+ continue;
51
+ if (mod.isEnabled && !mod.isEnabled(context))
52
+ continue;
53
+ const moduleTemplateDir = join(modulesDir, mod.id);
54
+ if (!(await pathExists(moduleTemplateDir)))
55
+ continue;
56
+ // Collect and render module templates (excluding pubspec.partial.yaml)
57
+ const moduleFiles = await collectAndRenderTemplates(moduleTemplateDir, templateContext, this.renderer, ['pubspec.partial.yaml']);
58
+ generatedFiles.push(...moduleFiles);
59
+ // Process pubspec.partial.yaml for dependency merging
60
+ const partialPath = join(moduleTemplateDir, 'pubspec.partial.yaml');
61
+ const partial = await processPubspecPartial(partialPath, this.renderer, templateContext);
62
+ for (const [name, version] of partial.deps) {
63
+ if (typeof version === 'object') {
64
+ extraDeps.set(name, version);
65
+ }
66
+ else {
67
+ const existing = extraDeps.get(name);
68
+ extraDeps.set(name, existing !== undefined && typeof existing === 'string'
69
+ ? pickNewerVersion(existing, version)
70
+ : version);
71
+ }
72
+ }
73
+ for (const [name, version] of partial.devDeps) {
74
+ if (typeof version === 'object') {
75
+ extraDevDeps.set(name, version);
76
+ }
77
+ else {
78
+ const existing = extraDevDeps.get(name);
79
+ extraDevDeps.set(name, existing !== undefined && typeof existing === 'string'
80
+ ? pickNewerVersion(existing, version)
81
+ : version);
82
+ }
83
+ }
84
+ Object.assign(extraFlutter, partial.flutter);
85
+ }
86
+ // Merge module deps into the rendered pubspec.yaml
87
+ if (extraDeps.size > 0 || extraDevDeps.size > 0 || Object.keys(extraFlutter).length > 0) {
88
+ this.mergePubspecDependencies(generatedFiles, extraDeps, extraDevDeps, extraFlutter);
89
+ }
90
+ }
91
+ }
92
+ // 3. Write files to disk
93
+ const fileMap = new Map(generatedFiles.map((f) => [f.relativePath, f.content]));
94
+ const writer = new FileWriter({
95
+ outputDir: context.outputDir,
96
+ dryRun: context.scaffold.dryRun,
97
+ overwriteMode: context.scaffold.overwrite,
98
+ });
99
+ const writeResult = await writer.writeAll(fileMap);
100
+ // 4. Claude setup (CLAUDE.md, agents, skills, hooks, MCP config, prd.json)
101
+ if (!context.scaffold.dryRun && context.claude.enabled && !this.noClaudeOverride) {
102
+ await runClaudeSetup(context, context.outputDir);
103
+ }
104
+ // 5. Post-process
105
+ const postProcessorsRun = [];
106
+ const postProcessorErrors = [];
107
+ if (!context.scaffold.dryRun) {
108
+ if (context.scaffold.postProcessors.dartFormat) {
109
+ try {
110
+ await runDartFormat(context.outputDir);
111
+ postProcessorsRun.push('dart-format');
112
+ }
113
+ catch (err) {
114
+ postProcessorErrors.push(`dart format skipped: ${err instanceof Error ? err.message : String(err)}`);
115
+ }
116
+ }
117
+ if (context.scaffold.postProcessors.flutterPubGet) {
118
+ try {
119
+ await runFlutterPubGet(context.outputDir);
120
+ postProcessorsRun.push('flutter-pub-get');
121
+ }
122
+ catch (err) {
123
+ postProcessorErrors.push(`flutter pub get failed: ${err instanceof Error ? err.message : String(err)}`);
124
+ }
125
+ }
126
+ if (context.scaffold.postProcessors.buildRunner) {
127
+ try {
128
+ await runBuildRunner(context.outputDir);
129
+ postProcessorsRun.push('build-runner');
130
+ }
131
+ catch (err) {
132
+ postProcessorErrors.push(`build_runner failed: ${err instanceof Error ? err.message : String(err)}`);
133
+ }
134
+ }
135
+ }
136
+ return {
137
+ filesWritten: writeResult.written,
138
+ filesSkipped: writeResult.skipped,
139
+ conflicts: writeResult.conflicts,
140
+ postProcessorsRun,
141
+ postProcessorErrors,
142
+ };
143
+ }
144
+ getTemplatesDir() {
145
+ if (this.templatesDirOverride !== undefined) {
146
+ return this.templatesDirOverride;
147
+ }
148
+ return join(__dirname, '../../templates/core');
149
+ }
150
+ getModulesTemplatesDir() {
151
+ if (this.modulesTemplatesDirOverride !== undefined) {
152
+ return this.modulesTemplatesDirOverride;
153
+ }
154
+ return join(__dirname, '../../templates/modules');
155
+ }
156
+ async getRegistry() {
157
+ if (this.registryOverride)
158
+ return this.registryOverride;
159
+ const registry = new ModuleRegistry();
160
+ await registry.loadAll();
161
+ return registry;
162
+ }
163
+ /**
164
+ * Determine which module IDs are enabled from the project context.
165
+ */
166
+ getEnabledModuleIds(context) {
167
+ const ids = [];
168
+ if (context.modules.auth !== false)
169
+ ids.push('auth');
170
+ if (context.modules.api !== false)
171
+ ids.push('api');
172
+ if (context.modules.database !== false)
173
+ ids.push('database');
174
+ if (context.modules.i18n !== false)
175
+ ids.push('i18n');
176
+ if (context.modules.theme !== false)
177
+ ids.push('theme');
178
+ if (context.modules.push !== false)
179
+ ids.push('push');
180
+ if (context.modules.analytics !== false)
181
+ ids.push('analytics');
182
+ if (context.modules.cicd !== false)
183
+ ids.push('cicd');
184
+ if (context.modules.deepLinking !== false)
185
+ ids.push('deep-linking');
186
+ return ids;
187
+ }
188
+ /**
189
+ * Merge additional dependencies from modules into the rendered pubspec.yaml.
190
+ */
191
+ mergePubspecDependencies(files, extraDeps, extraDevDeps, extraFlutter = {}) {
192
+ const pubspecIdx = files.findIndex((f) => f.relativePath === 'pubspec.yaml');
193
+ if (pubspecIdx < 0)
194
+ return;
195
+ const pubspec = yamlLoad(files[pubspecIdx].content);
196
+ const deps = (pubspec['dependencies'] ?? {});
197
+ for (const [name, version] of extraDeps) {
198
+ if (typeof version === 'object') {
199
+ deps[name] = version;
200
+ }
201
+ else if (typeof deps[name] === 'string') {
202
+ deps[name] = pickNewerVersion(deps[name], version);
203
+ }
204
+ else if (deps[name] === undefined) {
205
+ deps[name] = version;
206
+ }
207
+ }
208
+ pubspec['dependencies'] = deps;
209
+ const devDeps = (pubspec['dev_dependencies'] ?? {});
210
+ for (const [name, version] of extraDevDeps) {
211
+ if (typeof version === 'object') {
212
+ devDeps[name] = version;
213
+ }
214
+ else if (typeof devDeps[name] === 'string') {
215
+ devDeps[name] = pickNewerVersion(devDeps[name], version);
216
+ }
217
+ else if (devDeps[name] === undefined) {
218
+ devDeps[name] = version;
219
+ }
220
+ }
221
+ pubspec['dev_dependencies'] = devDeps;
222
+ if (Object.keys(extraFlutter).length > 0) {
223
+ const flutterSection = (pubspec['flutter'] ?? {});
224
+ Object.assign(flutterSection, extraFlutter);
225
+ pubspec['flutter'] = flutterSection;
226
+ }
227
+ files[pubspecIdx] = {
228
+ ...files[pubspecIdx],
229
+ content: yamlDump(pubspec, { indent: 2, lineWidth: 120, noRefs: true }),
230
+ };
231
+ }
232
+ }
233
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/scaffold/engine.ts"],"names":[],"mappings":"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"}