@donotdev/cli 0.0.15 → 0.0.17

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 (83) hide show
  1. package/dependencies-matrix.json +67 -147
  2. package/dist/bin/commands/build.js +69 -52
  3. package/dist/bin/commands/bump.js +15 -14
  4. package/dist/bin/commands/create-app.js +258 -55
  5. package/dist/bin/commands/create-project.js +290 -161
  6. package/dist/bin/commands/deploy.js +146 -63
  7. package/dist/bin/commands/dev.js +43 -24
  8. package/dist/bin/commands/doctor.d.ts +6 -0
  9. package/dist/bin/commands/doctor.d.ts.map +1 -0
  10. package/dist/bin/commands/{lint.js → doctor.js} +1370 -146
  11. package/dist/bin/commands/doctor.js.map +1 -0
  12. package/dist/bin/commands/emu.js +295 -107
  13. package/dist/bin/commands/make-admin.js +77519 -11
  14. package/dist/bin/commands/preview.js +44 -25
  15. package/dist/bin/commands/setup.d.ts +6 -0
  16. package/dist/bin/commands/setup.d.ts.map +1 -0
  17. package/dist/bin/commands/setup.js +12123 -0
  18. package/dist/bin/commands/setup.js.map +1 -0
  19. package/dist/bin/commands/type-check.d.ts.map +1 -1
  20. package/dist/bin/commands/type-check.js +2022 -283
  21. package/dist/bin/commands/type-check.js.map +1 -1
  22. package/dist/bin/dndev.js +54 -58
  23. package/dist/bin/donotdev.js +54 -58
  24. package/dist/index.js +860 -459
  25. package/package.json +2 -2
  26. package/templates/app-expo/.env.example +2 -22
  27. package/templates/app-expo/README.md.example +1 -1
  28. package/templates/app-expo/assets/adaptive-icon.png +0 -0
  29. package/templates/app-expo/assets/favicon.png +0 -0
  30. package/templates/app-expo/assets/icon.png +0 -0
  31. package/templates/app-expo/assets/splash.png +0 -0
  32. package/templates/app-expo/src/config/app.ts.example +46 -0
  33. package/templates/app-expo/src/config/providers.ts.example +7 -0
  34. package/templates/app-next/src/config/providers.ts.example +7 -0
  35. package/templates/app-vite/src/config/providers.ts.example +7 -0
  36. package/templates/app-vite/src/pages/HomePage.tsx.example +1 -1
  37. package/templates/functions-firebase/README.md.example +1 -1
  38. package/templates/functions-firebase/functions-firebase/.env.example.example +1 -1
  39. package/templates/functions-firebase/functions-firebase/README.md.example +1 -1
  40. package/templates/functions-firebase/functions-firebase/tsconfig.json.example +1 -1
  41. package/templates/functions-firebase/functions.config.js.example +1 -1
  42. package/templates/functions-supabase/supabase/config.toml.example +59 -0
  43. package/templates/functions-supabase/supabase/functions/.env.example +13 -0
  44. package/templates/functions-supabase/supabase/functions/deno.json.example +8 -0
  45. package/templates/overlay-firebase/env.fragment.example +1 -1
  46. package/templates/overlay-firebase/env.fragment.expo.example +1 -1
  47. package/templates/overlay-firebase/env.fragment.nextjs.example +1 -1
  48. package/templates/overlay-supabase/env.fragment.example +8 -3
  49. package/templates/overlay-supabase/env.fragment.expo.example +8 -3
  50. package/templates/overlay-supabase/env.fragment.nextjs.example +8 -3
  51. package/templates/overlay-vercel/env.fragment.example +1 -1
  52. package/templates/overlay-vercel/env.fragment.nextjs.example +1 -1
  53. package/templates/root-consumer/AI.md.example +15 -0
  54. package/templates/root-consumer/guides/dndev/AGENT_START_HERE.md.example +2 -2
  55. package/templates/root-consumer/guides/dndev/ENV_SETUP.md.example +12 -12
  56. package/templates/root-consumer/guides/dndev/INDEX.md.example +3 -3
  57. package/templates/root-consumer/guides/dndev/SETUP_APP_CONFIG.md.example +3 -3
  58. package/templates/root-consumer/guides/dndev/SETUP_AUTH.md.example +13 -6
  59. package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +149 -988
  60. package/templates/root-consumer/guides/dndev/SETUP_FIREBASE.md.example +72 -20
  61. package/templates/root-consumer/guides/dndev/SETUP_FUNCTIONS.md.example +6 -111
  62. package/templates/root-consumer/guides/dndev/SETUP_OAUTH_PROVIDERS.md.example +60 -0
  63. package/templates/root-consumer/guides/dndev/SETUP_STRIPE.md.example +62 -0
  64. package/templates/root-consumer/guides/dndev/SETUP_SUPABASE.md.example +124 -33
  65. package/templates/root-consumer/guides/dndev/SETUP_VERCEL.md.example +108 -91
  66. package/templates/root-consumer/guides/dndev/advanced/EMULATORS.md.example +2 -2
  67. package/templates/root-consumer/guides/wai-way/WAI_WAY_CLI.md.example +7 -8
  68. package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +9 -5
  69. package/dist/bin/commands/firebase-setup.d.ts +0 -6
  70. package/dist/bin/commands/firebase-setup.d.ts.map +0 -1
  71. package/dist/bin/commands/firebase-setup.js +0 -7
  72. package/dist/bin/commands/firebase-setup.js.map +0 -1
  73. package/dist/bin/commands/lint.d.ts +0 -11
  74. package/dist/bin/commands/lint.d.ts.map +0 -1
  75. package/dist/bin/commands/lint.js.map +0 -1
  76. package/dist/bin/commands/staging.d.ts +0 -11
  77. package/dist/bin/commands/staging.d.ts.map +0 -1
  78. package/dist/bin/commands/staging.js +0 -12
  79. package/dist/bin/commands/staging.js.map +0 -1
  80. package/dist/bin/commands/supabase-setup.d.ts +0 -6
  81. package/dist/bin/commands/supabase-setup.d.ts.map +0 -1
  82. package/dist/bin/commands/supabase-setup.js +0 -7
  83. package/dist/bin/commands/supabase-setup.js.map +0 -1
@@ -2,7 +2,7 @@
2
2
  "$schema": "./dependencies-matrix.schema.json",
3
3
  "version": "0.0.6",
4
4
  "description": "Centralized dependency versions for DoNotDev framework. Single source of truth for all external dependencies. ⚠️ SYNC REQUIRED: When adding/removing @donotdev/* feature packages (auth, billing, crud, oauth), also update packages/core/config/constants.js BUNDLING.optionalFeatures array.",
5
- "lastUpdated": "2026-02-18",
5
+ "lastUpdated": "2026-02-23",
6
6
  "migrationGuides": {
7
7
  "0.0→0.1": {
8
8
  "path": "docs/migration/v0.0-to-v0.1.md",
@@ -17,79 +17,79 @@
17
17
  "@donotdev/adv-comps": {
18
18
  "description": "Advanced components package",
19
19
  "packages": {
20
- "@donotdev/adv-comps": "^0.0.11"
20
+ "@donotdev/adv-comps": "^0.0.13"
21
21
  }
22
22
  },
23
23
  "@donotdev/auth": {
24
24
  "description": "Authentication package",
25
25
  "packages": {
26
- "@donotdev/auth": "^0.0.7"
26
+ "@donotdev/auth": "^0.0.9"
27
27
  }
28
28
  },
29
29
  "@donotdev/billing": {
30
30
  "description": "Billing package",
31
31
  "packages": {
32
- "@donotdev/billing": "^0.0.6"
32
+ "@donotdev/billing": "^0.0.8"
33
33
  }
34
34
  },
35
35
  "@donotdev/components": {
36
36
  "description": "UI components package",
37
37
  "packages": {
38
- "@donotdev/components": "^0.0.17"
38
+ "@donotdev/components": "^0.0.19"
39
39
  }
40
40
  },
41
41
  "@donotdev/core": {
42
42
  "description": "Core framework package",
43
43
  "packages": {
44
- "@donotdev/core": "^0.0.24"
44
+ "@donotdev/core": "^0.0.25"
45
45
  }
46
46
  },
47
47
  "@donotdev/crud": {
48
48
  "description": "CRUD operations package",
49
49
  "packages": {
50
- "@donotdev/crud": "^0.0.15"
50
+ "@donotdev/crud": "^0.0.16"
51
51
  }
52
52
  },
53
53
  "@donotdev/firebase": {
54
54
  "description": "Firebase provider package",
55
55
  "packages": {
56
- "@donotdev/firebase": "^0.0.10"
56
+ "@donotdev/firebase": "^0.0.12"
57
57
  }
58
58
  },
59
59
  "@donotdev/functions": {
60
60
  "description": "Firebase Functions package",
61
61
  "packages": {
62
- "@donotdev/functions": "^0.0.11"
62
+ "@donotdev/functions": "^0.0.12"
63
63
  }
64
64
  },
65
65
  "@donotdev/oauth": {
66
66
  "description": "OAuth package",
67
67
  "packages": {
68
- "@donotdev/oauth": "^0.0.6"
68
+ "@donotdev/oauth": "^0.0.8"
69
69
  }
70
70
  },
71
71
  "@donotdev/templates": {
72
72
  "description": "Page templates package",
73
73
  "packages": {
74
- "@donotdev/templates": "^0.0.9"
74
+ "@donotdev/templates": "^0.0.11"
75
75
  }
76
76
  },
77
77
  "@donotdev/ui": {
78
78
  "description": "UI and routing package",
79
79
  "packages": {
80
- "@donotdev/ui": "^0.0.14"
80
+ "@donotdev/ui": "^0.0.15"
81
81
  }
82
82
  },
83
83
  "@donotdev/expo": {
84
84
  "description": "Expo/React Native components package",
85
85
  "packages": {
86
- "@donotdev/expo": "^0.0.1"
86
+ "@donotdev/expo": "^0.0.2"
87
87
  }
88
88
  },
89
89
  "@donotdev/supabase": {
90
90
  "description": "Supabase provider package",
91
91
  "packages": {
92
- "@donotdev/supabase": "^0.0.1"
92
+ "@donotdev/supabase": "^0.0.2"
93
93
  }
94
94
  },
95
95
  "supabase-js": {
@@ -125,6 +125,12 @@
125
125
  "react-dom": "^19.2.4"
126
126
  }
127
127
  },
128
+ "react-native-only": {
129
+ "description": "React without react-dom for React Native/Expo apps",
130
+ "packages": {
131
+ "react": "^19.2.4"
132
+ }
133
+ },
128
134
  "i18n": {
129
135
  "description": "i18n libraries - auto-installed as transitive deps",
130
136
  "packages": {
@@ -420,13 +426,13 @@
420
426
  "@donotdev/cli": {
421
427
  "description": "Cli package",
422
428
  "packages": {
423
- "@donotdev/cli": "^0.0.15"
429
+ "@donotdev/cli": "^0.0.16"
424
430
  }
425
431
  },
426
432
  "@donotdev/mcp-server": {
427
433
  "description": "MCP server for component type lookups",
428
434
  "packages": {
429
- "@donotdev/mcp-server": "^0.0.4"
435
+ "@donotdev/mcp-server": "^0.0.6"
430
436
  }
431
437
  },
432
438
  "mcp-sdk": {
@@ -448,6 +454,12 @@
448
454
  "@dnd-kit/sortable": "^10.0.0",
449
455
  "@dnd-kit/utilities": "^3.2.2"
450
456
  }
457
+ },
458
+ "@donotdev/security": {
459
+ "description": "Security package",
460
+ "packages": {
461
+ "@donotdev/security": "^0.0.2"
462
+ }
451
463
  }
452
464
  },
453
465
  "overrides": {
@@ -463,29 +475,12 @@
463
475
  "lucide-react",
464
476
  "monitoring"
465
477
  ],
466
- "dependencies": [
467
- "i18n",
468
- "react-query",
469
- "fast-glob",
470
- "cli-prompts"
471
- ],
472
- "devDependencies": [
473
- "vite",
474
- "next",
475
- "typescript"
476
- ]
478
+ "dependencies": ["i18n", "react-query", "fast-glob", "cli-prompts"],
479
+ "devDependencies": ["vite", "next", "typescript"]
477
480
  },
478
481
  "@donotdev/components": {
479
- "dependencies": [
480
- "radix",
481
- "styling",
482
- "react-day-picker"
483
- ],
484
- "peerDependencies": [
485
- "react",
486
- "shiki",
487
- "lucide-react"
488
- ],
482
+ "dependencies": ["radix", "styling", "react-day-picker"],
483
+ "peerDependencies": ["react", "shiki", "lucide-react"],
489
484
  "peerDependenciesMeta": {
490
485
  "shiki": {
491
486
  "optional": true
@@ -501,11 +496,7 @@
501
496
  "routing",
502
497
  "validation"
503
498
  ],
504
- "dependencies": [
505
- "fontsource-themes",
506
- "forms",
507
- "seo"
508
- ],
499
+ "dependencies": ["fontsource-themes", "forms", "seo"],
509
500
  "peerDependenciesMeta": {
510
501
  "@donotdev/crud": {
511
502
  "optional": true
@@ -513,17 +504,10 @@
513
504
  }
514
505
  },
515
506
  "@donotdev/auth": {
516
- "peerDependencies": [
517
- "react",
518
- "firebase"
519
- ]
507
+ "peerDependencies": ["react", "firebase"]
520
508
  },
521
509
  "@donotdev/billing": {
522
- "peerDependencies": [
523
- "react",
524
- "lucide-react",
525
- "stripe"
526
- ]
510
+ "peerDependencies": ["react", "lucide-react", "stripe"]
527
511
  },
528
512
  "@donotdev/crud": {
529
513
  "dependencies": [
@@ -533,9 +517,7 @@
533
517
  "@dnd-kit",
534
518
  "forms-resolvers"
535
519
  ],
536
- "devDependencies": [
537
- "tiptap"
538
- ],
520
+ "devDependencies": ["tiptap"],
539
521
  "peerDependencies": [
540
522
  "@donotdev/firebase",
541
523
  "react",
@@ -558,38 +540,22 @@
558
540
  }
559
541
  },
560
542
  "@donotdev/firebase": {
561
- "dependencies": [
562
- "browser-image-compression"
563
- ],
564
- "peerDependencies": [
565
- "firebase"
566
- ]
543
+ "dependencies": ["browser-image-compression"],
544
+ "peerDependencies": ["firebase"]
567
545
  },
568
546
  "@donotdev/supabase": {
569
- "dependencies": [
570
- "validation"
571
- ],
572
- "peerDependencies": [
573
- "supabase-js"
574
- ]
547
+ "dependencies": ["validation"],
548
+ "peerDependencies": ["supabase-js"]
575
549
  },
576
550
  "@donotdev/i18n": {
577
- "dependencies": [
578
- "i18n"
579
- ],
580
- "peerDependencies": [
581
- "lucide-react"
582
- ]
551
+ "dependencies": ["i18n"],
552
+ "peerDependencies": ["lucide-react"]
583
553
  },
584
554
  "@donotdev/stores": {
585
- "dependencies": [
586
- "zustand"
587
- ]
555
+ "dependencies": ["zustand"]
588
556
  },
589
557
  "@donotdev/schemas": {
590
- "dependencies": [
591
- "validation"
592
- ]
558
+ "dependencies": ["validation"]
593
559
  },
594
560
  "@donotdev/types": {
595
561
  "devDependencies": [
@@ -601,34 +567,18 @@
601
567
  ]
602
568
  },
603
569
  "@donotdev/utils": {
604
- "dependencies": [
605
- "zustand"
606
- ],
607
- "peerDependencies": [
608
- "monitoring"
609
- ],
610
- "devDependencies": [
611
- "validation",
612
- "firebase",
613
- "i18n"
614
- ]
570
+ "dependencies": ["zustand"],
571
+ "peerDependencies": ["monitoring"],
572
+ "devDependencies": ["validation", "firebase", "i18n"]
615
573
  },
616
574
  "@donotdev/hooks": {
617
- "dependencies": [
618
- "react-query"
619
- ]
575
+ "dependencies": ["react-query"]
620
576
  },
621
577
  "@donotdev/cli": {
622
- "dependencies": [
623
- "cli-prompts",
624
- "cli-commander",
625
- "fast-glob"
626
- ]
578
+ "dependencies": ["cli-prompts", "cli-commander", "fast-glob"]
627
579
  },
628
580
  "@donotdev/mcp-server": {
629
- "dependencies": [
630
- "mcp-sdk"
631
- ]
581
+ "dependencies": ["mcp-sdk"]
632
582
  },
633
583
  "@donotdev/tooling": {
634
584
  "dependencies": [
@@ -640,19 +590,13 @@
640
590
  "supabase-cli",
641
591
  "supabase-js"
642
592
  ],
643
- "devDependencies": [
644
- "yaml"
645
- ]
593
+ "devDependencies": ["yaml"]
646
594
  },
647
595
  "@donotdev/oauth": {
648
- "peerDependencies": [
649
- "react"
650
- ]
596
+ "peerDependencies": ["react"]
651
597
  },
652
598
  "@donotdev/functions": {
653
- "dependencies": [
654
- "@donotdev/core"
655
- ],
599
+ "dependencies": ["@donotdev/core"],
656
600
  "peerDependencies": [
657
601
  "firebase-functions",
658
602
  "firebase-admin",
@@ -663,14 +607,14 @@
663
607
  ]
664
608
  },
665
609
  "@donotdev/adv-comps": {
666
- "peerDependencies": [
667
- "react",
668
- "shiki"
669
- ],
610
+ "peerDependencies": ["react", "shiki", "lucide-react"],
670
611
  "dependencies": [],
671
612
  "peerDependenciesMeta": {
672
613
  "shiki": {
673
614
  "optional": true
615
+ },
616
+ "lucide-react": {
617
+ "optional": true
674
618
  }
675
619
  }
676
620
  },
@@ -836,9 +780,7 @@
836
780
  "validation",
837
781
  "lucide-react"
838
782
  ],
839
- "devDependencies": [
840
- "root-consumer-tooling"
841
- ],
783
+ "devDependencies": ["root-consumer-tooling"],
842
784
  "conditional": {
843
785
  "provider-firebase": "platform===firebase",
844
786
  "provider-supabase": "platform===supabase"
@@ -895,12 +837,7 @@
895
837
  "i18n",
896
838
  "react-query"
897
839
  ],
898
- "devDependencies": [
899
- "next",
900
- "typescript",
901
- "types",
902
- "postcss"
903
- ],
840
+ "devDependencies": ["next", "typescript", "types", "postcss"],
904
841
  "conditional": {
905
842
  "provider-firebase": "platform===firebase",
906
843
  "provider-supabase": "platform===supabase"
@@ -915,17 +852,12 @@
915
852
  "@donotdev/core",
916
853
  "@donotdev/crud",
917
854
  "@donotdev/oauth",
918
- "react",
855
+ "react-native-only",
919
856
  "zustand",
920
857
  "validation",
921
858
  "react-query"
922
859
  ],
923
- "devDependencies": [
924
- "expo",
925
- "typescript",
926
- "types-expo",
927
- "react-native"
928
- ],
860
+ "devDependencies": ["expo", "typescript", "types-expo", "react-native"],
929
861
  "conditional": {
930
862
  "provider-firebase": "platform===firebase",
931
863
  "provider-supabase": "platform===supabase"
@@ -940,17 +872,12 @@
940
872
  "@donotdev/core",
941
873
  "@donotdev/crud",
942
874
  "@donotdev/oauth",
943
- "react",
875
+ "react-native-only",
944
876
  "zustand",
945
877
  "validation",
946
878
  "react-query"
947
879
  ],
948
- "devDependencies": [
949
- "expo",
950
- "typescript",
951
- "types-expo",
952
- "react-native"
953
- ],
880
+ "devDependencies": ["expo", "typescript", "types-expo", "react-native"],
954
881
  "conditional": {
955
882
  "provider-firebase": "platform===firebase",
956
883
  "provider-supabase": "platform===supabase"
@@ -977,19 +904,12 @@
977
904
  "monitoring-node",
978
905
  "stripe"
979
906
  ],
980
- "devDependencies": [
981
- "vercel"
982
- ]
907
+ "devDependencies": ["vercel"]
983
908
  },
984
909
  "entities": {
985
910
  "description": "Entities workspace package",
986
- "dependencies": [
987
- "validation"
988
- ],
989
- "devDependencies": [
990
- "eslint",
991
- "typescript"
992
- ]
911
+ "dependencies": ["validation"],
912
+ "devDependencies": ["eslint", "typescript"]
993
913
  },
994
914
  "demo": {
995
915
  "description": "Demo app template (components only)",
@@ -1025,4 +945,4 @@
1025
945
  "rule": "If imported in code that gets bundled → dependencies. If externalized in esbuild → devDependencies. If optional/consumer-provided → peerDependencies"
1026
946
  }
1027
947
  }
1028
- }
948
+ }
@@ -7852,53 +7852,7 @@ var init_utils = __esm({
7852
7852
  }
7853
7853
  });
7854
7854
 
7855
- // packages/tooling/src/utils/cli-input.ts
7856
- async function askForSelection(message, choices, defaultValue = 0) {
7857
- const options = choices.map((choice) => ({
7858
- value: choice.value,
7859
- label: choice.title,
7860
- hint: choice.hint
7861
- }));
7862
- const result = await ve({
7863
- message,
7864
- options,
7865
- initialValue: choices[defaultValue]?.value
7866
- });
7867
- if (pD(result)) {
7868
- xe("Operation cancelled.");
7869
- process.exit(0);
7870
- }
7871
- return result;
7872
- }
7873
- var init_cli_input = __esm({
7874
- "packages/tooling/src/utils/cli-input.ts"() {
7875
- "use strict";
7876
- init_utils();
7877
- init_dist2();
7878
- }
7879
- });
7880
-
7881
- // packages/cli/src/bin/commands/build.ts
7882
- init_utils();
7883
-
7884
- // packages/tooling/src/index.ts
7885
- init_utils();
7886
-
7887
- // packages/tooling/src/cli/index.ts
7888
- init_utils();
7889
-
7890
- // packages/tooling/src/apps/build.ts
7891
- init_utils();
7892
- import { spawnSync, execSync } from "node:child_process";
7893
-
7894
- // packages/tooling/src/utils/app-selector.ts
7895
- init_utils();
7896
- init_dist2();
7897
-
7898
7855
  // packages/tooling/src/utils/app-detection.ts
7899
- init_utils();
7900
- init_pathResolver();
7901
- init_typed_file_operations();
7902
7856
  function detectApps(projectRoot) {
7903
7857
  const apps = [];
7904
7858
  const appsDir = joinPath(projectRoot, "apps");
@@ -7958,12 +7912,21 @@ function analyzeApp(appPath, appName) {
7958
7912
  const functionsStat = statSync2(functionsPath);
7959
7913
  const hasFunctions = pathExists(functionsPath) && (functionsStat?.isDirectory() ?? false);
7960
7914
  let platform;
7961
- if (hasFunctions) {
7962
- const firebaseJsonPath = joinPath(functionsPath, "firebase.json");
7915
+ const firebaseJsonInFunctions = hasFunctions && pathExists(joinPath(functionsPath, "firebase.json"));
7916
+ const firebaseJsonInApp = pathExists(joinPath(appPath, "firebase.json"));
7917
+ if (firebaseJsonInFunctions || firebaseJsonInApp) {
7918
+ platform = "firebase";
7919
+ }
7920
+ if (!platform) {
7921
+ const supabaseConfigPath = joinPath(appPath, "supabase", "config.toml");
7922
+ const hasSupabaseDep = !!(packageJson.dependencies?.["@donotdev/supabase"] || packageJson.dependencies?.["@supabase/supabase-js"]);
7923
+ if (pathExists(supabaseConfigPath) || hasSupabaseDep) {
7924
+ platform = "supabase";
7925
+ }
7926
+ }
7927
+ if (!platform) {
7963
7928
  const vercelJsonPath = joinPath(appPath, "vercel.json");
7964
- if (pathExists(firebaseJsonPath)) {
7965
- platform = "firebase";
7966
- } else if (pathExists(vercelJsonPath)) {
7929
+ if (pathExists(vercelJsonPath)) {
7967
7930
  platform = "vercel";
7968
7931
  }
7969
7932
  }
@@ -7978,9 +7941,16 @@ function analyzeApp(appPath, appName) {
7978
7941
  platform
7979
7942
  };
7980
7943
  }
7944
+ var init_app_detection = __esm({
7945
+ "packages/tooling/src/utils/app-detection.ts"() {
7946
+ "use strict";
7947
+ init_utils();
7948
+ init_pathResolver();
7949
+ init_typed_file_operations();
7950
+ }
7951
+ });
7981
7952
 
7982
7953
  // packages/tooling/src/utils/app-selector.ts
7983
- init_cli_output();
7984
7954
  async function selectApp(projectRoot, appName) {
7985
7955
  const apps = detectApps(projectRoot);
7986
7956
  if (apps.length === 0) {
@@ -8014,13 +7984,60 @@ async function selectApp(projectRoot, appName) {
8014
7984
  }
8015
7985
  return apps.find((a) => a.name === selected) || null;
8016
7986
  }
7987
+ var init_app_selector = __esm({
7988
+ "packages/tooling/src/utils/app-selector.ts"() {
7989
+ "use strict";
7990
+ init_utils();
7991
+ init_dist2();
7992
+ init_app_detection();
7993
+ init_cli_output();
7994
+ }
7995
+ });
7996
+
7997
+ // packages/tooling/src/utils/cli-input.ts
7998
+ async function askForSelection(message, choices, defaultValue = 0) {
7999
+ const options = choices.map((choice) => ({
8000
+ value: choice.value,
8001
+ label: choice.title,
8002
+ hint: choice.hint
8003
+ }));
8004
+ const result = await ve({
8005
+ message,
8006
+ options,
8007
+ initialValue: choices[defaultValue]?.value
8008
+ });
8009
+ if (pD(result)) {
8010
+ xe("Operation cancelled.");
8011
+ process.exit(0);
8012
+ }
8013
+ return result;
8014
+ }
8015
+ var init_cli_input = __esm({
8016
+ "packages/tooling/src/utils/cli-input.ts"() {
8017
+ "use strict";
8018
+ init_utils();
8019
+ init_dist2();
8020
+ }
8021
+ });
8022
+
8023
+ // packages/cli/src/bin/commands/build.ts
8024
+ init_utils();
8025
+
8026
+ // packages/tooling/src/index.ts
8027
+ init_utils();
8028
+
8029
+ // packages/tooling/src/cli/index.ts
8030
+ init_utils();
8017
8031
 
8018
8032
  // packages/tooling/src/apps/build.ts
8033
+ init_utils();
8034
+ init_app_selector();
8019
8035
  init_cli_input();
8020
8036
  init_cli_output();
8021
8037
  init_errors();
8022
8038
  init_pathResolver();
8023
8039
  init_typed_file_operations();
8040
+ import { spawnSync, execSync } from "node:child_process";
8024
8041
  function validateFirebaseJson(appDir) {
8025
8042
  const firebaseJsonPath = joinPath(appDir, "firebase.json");
8026
8043
  if (!pathExists(firebaseJsonPath)) {
@@ -7857,14 +7857,13 @@ function globSync(pattern, options = {}) {
7857
7857
  });
7858
7858
  return results.map((p2) => pathResolverInstance.normalizePath(p2));
7859
7859
  }
7860
- var pathResolverInstance, getRepoRoot, getAppRoot, resolveFrameworkPackage, normalizePath, pathExists, read, readSync, write, writeSync, ensureDir, getRelativePathBetween, getDirname, joinPath;
7860
+ var pathResolverInstance, getAppRoot, resolveFrameworkPackage, normalizePath, pathExists, read, readSync, write, writeSync, ensureDir, getRelativePathBetween, getDirname, joinPath;
7861
7861
  var init_pathResolver = __esm({
7862
7862
  "packages/tooling/src/utils/pathResolver.ts"() {
7863
7863
  "use strict";
7864
7864
  init_utils();
7865
7865
  init_PathResolver();
7866
7866
  pathResolverInstance = PathResolver.getInstance({ debug: false });
7867
- getRepoRoot = () => pathResolverInstance.getRepoRoot();
7868
7867
  getAppRoot = () => pathResolverInstance.getAppRoot();
7869
7868
  resolveFrameworkPackage = (name, from) => pathResolverInstance.resolveFrameworkPackage(name, from || null);
7870
7869
  normalizePath = (...pathSegments) => {
@@ -7977,15 +7976,14 @@ function getMatrixPath(mode) {
7977
7976
  }
7978
7977
  const executionMode = mode || detectExecutionMode();
7979
7978
  if (executionMode === "development") {
7980
- const repoRoot = getRepoRoot();
7981
- if (repoRoot) {
7982
- const devPath = normalizePath(
7983
- repoRoot,
7984
- "packages/cli/dependencies-matrix.json"
7985
- );
7986
- if (pathExists(devPath)) {
7987
- return devPath;
7988
- }
7979
+ const templatesRoot = getTemplatesRoot();
7980
+ const devPath = normalizePath(
7981
+ templatesRoot,
7982
+ "..",
7983
+ "dependencies-matrix.json"
7984
+ );
7985
+ if (pathExists(devPath)) {
7986
+ return devPath;
7989
7987
  }
7990
7988
  }
7991
7989
  return null;
@@ -8000,8 +7998,8 @@ function getCliVersion(mode) {
8000
7998
  }
8001
7999
  const executionMode = mode || detectExecutionMode();
8002
8000
  if (executionMode === "development") {
8003
- const repoRoot = getRepoRoot();
8004
- const cliPackageJson = joinPath(repoRoot, "packages/cli/package.json");
8001
+ const templatesRoot = getTemplatesRoot();
8002
+ const cliPackageJson = normalizePath(templatesRoot, "..", "package.json");
8005
8003
  if (pathExists(cliPackageJson)) {
8006
8004
  const pkg = readSync(cliPackageJson, { format: "json" });
8007
8005
  return String(pkg?.version || "0.0.0");
@@ -8195,7 +8193,10 @@ async function syncFile(sourcePath, destPath, preserveIfExists, appRoot) {
8195
8193
  }
8196
8194
  }
8197
8195
  await ensureDir(getDirname(destPathWithoutExample));
8198
- await write(destPathWithoutExample, content, { format: "text", overwrite: true });
8196
+ await write(destPathWithoutExample, content, {
8197
+ format: "text",
8198
+ overwrite: true
8199
+ });
8199
8200
  return true;
8200
8201
  }
8201
8202
  async function syncTemplates(sourceRoot, destRoot, dryRun) {