@donotdev/cli 0.0.5 → 0.0.7

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 (102) hide show
  1. package/dependencies-matrix.json +76 -34
  2. package/dist/bin/commands/build.js +165 -161
  3. package/dist/bin/commands/bump.js +172 -160
  4. package/dist/bin/commands/cacheout.js +163 -157
  5. package/dist/bin/commands/create-app.js +205 -163
  6. package/dist/bin/commands/create-project.js +176 -161
  7. package/dist/bin/commands/deploy.js +480 -472
  8. package/dist/bin/commands/dev.js +164 -158
  9. package/dist/bin/commands/emu.js +164 -158
  10. package/dist/bin/commands/format.js +163 -157
  11. package/dist/bin/commands/lint.js +166 -157
  12. package/dist/bin/commands/make-admin.d.ts +11 -0
  13. package/dist/bin/commands/make-admin.d.ts.map +1 -0
  14. package/dist/bin/commands/make-admin.js +12 -0
  15. package/dist/bin/commands/make-admin.js.map +1 -0
  16. package/dist/bin/commands/preview.js +164 -158
  17. package/dist/bin/commands/sync-secrets.js +164 -158
  18. package/dist/bin/commands/wai.d.ts +11 -0
  19. package/dist/bin/commands/wai.d.ts.map +1 -0
  20. package/dist/bin/commands/wai.js +12 -0
  21. package/dist/bin/commands/wai.js.map +1 -0
  22. package/dist/bin/dndev.js +24 -8
  23. package/dist/bin/donotdev.js +24 -8
  24. package/dist/index.js +557 -514
  25. package/package.json +1 -1
  26. package/templates/app-demo/index.html.example +4 -0
  27. package/templates/app-demo/src/App.tsx.example +28 -10
  28. package/templates/app-demo/src/config/app.ts.example +68 -0
  29. package/templates/app-next/src/app/ClientLayout.tsx.example +4 -3
  30. package/templates/app-next/src/app/layout.tsx.example +17 -25
  31. package/templates/app-next/src/config/app.ts.example +75 -48
  32. package/templates/app-next/src/globals.css.example +10 -7
  33. package/templates/app-next/src/locales/dndev_en.json.example +68 -0
  34. package/templates/app-next/src/pages/locales/example_en.json.example +5 -0
  35. package/templates/app-vite/index.html.example +71 -34
  36. package/templates/app-vite/src/config/app.ts.example +75 -47
  37. package/templates/app-vite/src/globals.css.example +14 -6
  38. package/templates/app-vite/src/locales/dndev_en.json.example +68 -0
  39. package/templates/app-vite/src/pages/FormPageExample.tsx.example +152 -0
  40. package/templates/app-vite/src/pages/HomePage.tsx.example +81 -134
  41. package/templates/app-vite/src/pages/ListPageExample.tsx.example +88 -0
  42. package/templates/functions-firebase/README.md.example +25 -0
  43. package/templates/functions-firebase/build.mjs.example +8 -1
  44. package/templates/functions-firebase/functions-firebase/build.mjs.example +8 -1
  45. package/templates/functions-firebase/functions-firebase/src/index.ts.example +19 -25
  46. package/templates/functions-firebase/functions.config.js.example +35 -0
  47. package/templates/functions-firebase/tsconfig.json.example +3 -13
  48. package/templates/functions-vercel/tsconfig.json.example +1 -13
  49. package/templates/root-consumer/entities/ExampleEntity.ts.example +223 -0
  50. package/templates/root-consumer/entities/demo.ts.example +562 -0
  51. package/templates/root-consumer/entities/index.ts.example +15 -0
  52. package/templates/root-consumer/firebase.json.example +1 -1
  53. package/templates/root-consumer/guides/{AGENT_START_HERE.md.example → dndev/AGENT_START_HERE.md.example} +22 -0
  54. package/templates/root-consumer/guides/{COMPONENTS_ADV.md.example → dndev/COMPONENTS_ADV.md.example} +456 -360
  55. package/templates/root-consumer/guides/{COMPONENTS_ATOMIC.md.example → dndev/COMPONENTS_ATOMIC.md.example} +42 -0
  56. package/templates/root-consumer/guides/dndev/COMPONENTS_CRUD.md.example +231 -0
  57. package/templates/root-consumer/guides/{INDEX.md.example → dndev/INDEX.md.example} +3 -0
  58. package/templates/root-consumer/guides/{SETUP_APP_CONFIG.md.example → dndev/SETUP_APP_CONFIG.md.example} +5 -2
  59. package/templates/root-consumer/guides/{SETUP_AUTH.md.example → dndev/SETUP_AUTH.md.example} +30 -0
  60. package/templates/root-consumer/guides/{SETUP_BILLING.md.example → dndev/SETUP_BILLING.md.example} +44 -4
  61. package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +473 -0
  62. package/templates/root-consumer/guides/dndev/SETUP_FUNCTIONS.md.example +116 -0
  63. package/templates/root-consumer/guides/{SETUP_PAGES.md.example → dndev/SETUP_PAGES.md.example} +17 -0
  64. package/templates/root-consumer/guides/dndev/SETUP_PWA.md.example +213 -0
  65. package/templates/root-consumer/guides/dndev/USE_ROUTING.md.example +503 -0
  66. package/templates/root-consumer/guides/wai-way/WAI_WAY_CLI.md.example +404 -0
  67. package/templates/root-consumer/guides/wai-way/agents/architect.md.example +78 -0
  68. package/templates/root-consumer/guides/wai-way/agents/builder.md.example +87 -0
  69. package/templates/root-consumer/guides/wai-way/agents/extractor.md.example +325 -0
  70. package/templates/root-consumer/guides/wai-way/agents/polisher.md.example +100 -0
  71. package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +281 -0
  72. package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +77 -0
  73. package/templates/root-consumer/guides/wai-way/blueprints/2_entities.md.example +104 -0
  74. package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +124 -0
  75. package/templates/root-consumer/guides/wai-way/blueprints/4_configure.md.example +165 -0
  76. package/templates/root-consumer/guides/wai-way/context_map.json.example +95 -0
  77. package/templates/root-consumer/guides/wai-way/entity_patterns.md.example +840 -0
  78. package/templates/root-consumer/guides/wai-way/page_patterns.md.example +686 -0
  79. package/templates/root-consumer/guides/wai-way/presets_guide.md.example +217 -0
  80. package/templates/root-consumer/guides/wai-way/spec_template.md.example +312 -0
  81. package/templates/root-consumer/vercel.json.example +315 -20
  82. package/templates/app-demo/src/Routes.tsx.example +0 -20
  83. package/templates/app-vite/src/Routes.tsx.example +0 -16
  84. package/templates/app-vite/src/pages/locales/README.md.example +0 -1
  85. package/templates/functions-firebase/functions-firebase/src/crud/createEntity.ts.example +0 -19
  86. package/templates/functions-firebase/functions-firebase/src/crud/deleteEntity.ts.example +0 -14
  87. package/templates/functions-firebase/functions-firebase/src/crud/getEntity.ts.example +0 -14
  88. package/templates/functions-firebase/functions-firebase/src/crud/index.ts.example +0 -12
  89. package/templates/functions-firebase/functions-firebase/src/crud/listEntities.ts.example +0 -14
  90. package/templates/functions-firebase/functions-firebase/src/crud/updateEntity.ts.example +0 -14
  91. package/templates/root-consumer/guides/COMPONENTS_CRUD.md.example +0 -70
  92. package/templates/root-consumer/guides/SETUP_FUNCTIONS.md.example +0 -62
  93. /package/templates/root-consumer/guides/{COMPONENTS_UI.md.example → dndev/COMPONENTS_UI.md.example} +0 -0
  94. /package/templates/root-consumer/guides/{ENV_SETUP.md.example → dndev/ENV_SETUP.md.example} +0 -0
  95. /package/templates/root-consumer/guides/{SETUP_I18N.md.example → dndev/SETUP_I18N.md.example} +0 -0
  96. /package/templates/root-consumer/guides/{SETUP_LAYOUTS.md.example → dndev/SETUP_LAYOUTS.md.example} +0 -0
  97. /package/templates/root-consumer/guides/{SETUP_OAUTH.md.example → dndev/SETUP_OAUTH.md.example} +0 -0
  98. /package/templates/root-consumer/guides/{SETUP_THEMES.md.example → dndev/SETUP_THEMES.md.example} +0 -0
  99. /package/templates/root-consumer/guides/{advanced → dndev/advanced}/APP_CHECK.md.example +0 -0
  100. /package/templates/root-consumer/guides/{advanced → dndev/advanced}/COOKIE_REFERENCE.md.example +0 -0
  101. /package/templates/root-consumer/guides/{advanced → dndev/advanced}/EMULATORS.md.example +0 -0
  102. /package/templates/root-consumer/guides/{advanced → dndev/advanced}/VERSION_CONTROL.md.example +0 -0
@@ -2,7 +2,7 @@
2
2
  "$schema": "./dependencies-matrix.schema.json",
3
3
  "version": "0.0.5",
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-01-13",
5
+ "lastUpdated": "2026-01-23",
6
6
  "migrationGuides": {
7
7
  "0.0→0.1": {
8
8
  "path": "docs/migration/v0.0-to-v0.1.md",
@@ -17,67 +17,67 @@
17
17
  "@donotdev/adv-comps": {
18
18
  "description": "Advanced components package",
19
19
  "packages": {
20
- "@donotdev/adv-comps": "^0.0.7"
20
+ "@donotdev/adv-comps": "^0.0.8"
21
21
  }
22
22
  },
23
23
  "@donotdev/auth": {
24
24
  "description": "Authentication package",
25
25
  "packages": {
26
- "@donotdev/auth": "^0.0.4"
26
+ "@donotdev/auth": "^0.0.5"
27
27
  }
28
28
  },
29
29
  "@donotdev/billing": {
30
30
  "description": "Billing package",
31
31
  "packages": {
32
- "@donotdev/billing": "^0.0.4"
32
+ "@donotdev/billing": "^0.0.5"
33
33
  }
34
34
  },
35
35
  "@donotdev/components": {
36
36
  "description": "UI components package",
37
37
  "packages": {
38
- "@donotdev/components": "^0.0.10"
38
+ "@donotdev/components": "^0.0.12"
39
39
  }
40
40
  },
41
41
  "@donotdev/core": {
42
42
  "description": "Core framework package",
43
43
  "packages": {
44
- "@donotdev/core": "^0.0.9"
44
+ "@donotdev/core": "^0.0.14"
45
45
  }
46
46
  },
47
47
  "@donotdev/crud": {
48
48
  "description": "CRUD operations package",
49
49
  "packages": {
50
- "@donotdev/crud": "^0.0.4"
50
+ "@donotdev/crud": "^0.0.7"
51
51
  }
52
52
  },
53
53
  "@donotdev/firebase": {
54
54
  "description": "Firebase provider package",
55
55
  "packages": {
56
- "@donotdev/firebase": "^0.0.4"
56
+ "@donotdev/firebase": "^0.0.5"
57
57
  }
58
58
  },
59
59
  "@donotdev/functions": {
60
60
  "description": "Firebase Functions package",
61
61
  "packages": {
62
- "@donotdev/functions": "^0.0.4"
62
+ "@donotdev/functions": "^0.0.7"
63
63
  }
64
64
  },
65
65
  "@donotdev/oauth": {
66
66
  "description": "OAuth package",
67
67
  "packages": {
68
- "@donotdev/oauth": "^0.0.4"
68
+ "@donotdev/oauth": "^0.0.5"
69
69
  }
70
70
  },
71
71
  "@donotdev/templates": {
72
72
  "description": "Page templates package",
73
73
  "packages": {
74
- "@donotdev/templates": "^0.0.4"
74
+ "@donotdev/templates": "^0.0.6"
75
75
  }
76
76
  },
77
77
  "@donotdev/ui": {
78
78
  "description": "UI and routing package",
79
79
  "packages": {
80
- "@donotdev/ui": "^0.0.6"
80
+ "@donotdev/ui": "^0.0.8"
81
81
  }
82
82
  },
83
83
  "react": {
@@ -90,16 +90,16 @@
90
90
  "i18n": {
91
91
  "description": "i18n libraries - auto-installed as transitive deps",
92
92
  "packages": {
93
- "i18next": "^25.7.3",
93
+ "i18next": "^25.7.4",
94
94
  "i18next-browser-languagedetector": "^8.2.0",
95
95
  "i18next-http-backend": "^3.0.2",
96
- "react-i18next": "^16.5.1"
96
+ "react-i18next": "^16.5.2"
97
97
  }
98
98
  },
99
99
  "zustand": {
100
100
  "description": "State management - consumers install for custom stores",
101
101
  "packages": {
102
- "zustand": "^5.0.8"
102
+ "zustand": "^5.0.10"
103
103
  }
104
104
  },
105
105
  "react-query": {
@@ -172,7 +172,11 @@
172
172
  },
173
173
  "forms": {
174
174
  "packages": {
175
- "react-hook-form": "^7.68.0",
175
+ "react-hook-form": "^7.71.0"
176
+ }
177
+ },
178
+ "forms-resolvers": {
179
+ "packages": {
176
180
  "@hookform/resolvers": "^5.2.2"
177
181
  }
178
182
  },
@@ -182,7 +186,9 @@
182
186
  }
183
187
  },
184
188
  "markdown": {
189
+ "description": "Markdown parsing - marked for speed, html-react-parser for SSR",
185
190
  "packages": {
191
+ "html-react-parser": "^5.2.11",
186
192
  "marked": "^17.0.1"
187
193
  }
188
194
  },
@@ -196,6 +202,21 @@
196
202
  "firebase": "^12.5.0"
197
203
  }
198
204
  },
205
+ "browser-image-compression": {
206
+ "description": "Image compression library for browser",
207
+ "packages": {
208
+ "browser-image-compression": "^2.0.2"
209
+ }
210
+ },
211
+ "tiptap": {
212
+ "description": "Rich text editor - optional peer dependency. Required: @tiptap/react, @tiptap/pm, @tiptap/starter-kit. Optional: @tiptap/extension-placeholder for placeholder text.",
213
+ "packages": {
214
+ "@tiptap/react": "^3.16.0",
215
+ "@tiptap/pm": "^3.16.0",
216
+ "@tiptap/starter-kit": "^3.16.0",
217
+ "@tiptap/extension-placeholder": "^3.16.0"
218
+ }
219
+ },
199
220
  "stripe": {
200
221
  "packages": {
201
222
  "stripe": "^20.1.0"
@@ -214,8 +235,8 @@
214
235
  },
215
236
  "vercel-deps": {
216
237
  "packages": {
217
- "next": "^16.0.7",
218
- "vercel": "^50.1.3"
238
+ "next": "^16.1.4",
239
+ "vercel": "^50.3.0"
219
240
  }
220
241
  },
221
242
  "esbuild": {
@@ -262,7 +283,7 @@
262
283
  "@vitejs/plugin-react": "^5.1.1",
263
284
  "react-refresh": "^0.18.0",
264
285
  "@vitejs/plugin-basic-ssl": "^2.1.0",
265
- "vite-tsconfig-paths": "^6.0.3",
286
+ "vite-tsconfig-paths": "^6.0.4",
266
287
  "@rollup/plugin-strip": "^3.0.4",
267
288
  "rollup-plugin-visualizer": "^6.0.5",
268
289
  "vite-plugin-pwa": "1.2.0"
@@ -270,12 +291,12 @@
270
291
  },
271
292
  "vite-deps-minimal": {
272
293
  "packages": {
273
- "vite-tsconfig-paths": "^6.0.3"
294
+ "vite-tsconfig-paths": "^6.0.4"
274
295
  }
275
296
  },
276
297
  "next": {
277
298
  "packages": {
278
- "next": "^16.0.7"
299
+ "next": "^16.1.4"
279
300
  }
280
301
  },
281
302
  "typescript": {
@@ -285,12 +306,12 @@
285
306
  },
286
307
  "monitoring": {
287
308
  "packages": {
288
- "@sentry/react": "^10.25.0"
309
+ "@sentry/react": "^10.33.0"
289
310
  }
290
311
  },
291
312
  "monitoring-node": {
292
313
  "packages": {
293
- "@sentry/node": "^10.25.0"
314
+ "@sentry/node": "^10.33.0"
294
315
  }
295
316
  },
296
317
  "postcss": {
@@ -308,26 +329,32 @@
308
329
  },
309
330
  "types": {
310
331
  "packages": {
311
- "@types/node": "^24.10.4",
312
- "@types/react": "^19.2.7",
332
+ "@types/node": "^24.10.8",
333
+ "@types/react": "^19.2.8",
313
334
  "@types/react-dom": "^19.2.3"
314
335
  }
315
336
  },
316
337
  "root-consumer-tooling": {
317
338
  "packages": {
318
- "turbo": "^2.7.2",
339
+ "turbo": "^2.7.4",
319
340
  "sharp": "^0.34.5"
320
341
  }
321
342
  },
322
343
  "vercel": {
323
344
  "packages": {
324
- "vercel": "^50.1.3"
345
+ "vercel": "^50.3.0"
325
346
  }
326
347
  },
327
348
  "@donotdev/cli": {
328
349
  "description": "Cli package",
329
350
  "packages": {
330
- "@donotdev/cli": "^0.0.4"
351
+ "@donotdev/cli": "^0.0.6"
352
+ }
353
+ },
354
+ "react-easy-crop": {
355
+ "description": "Image cropping - auto-installed as transitive dep for crud",
356
+ "packages": {
357
+ "react-easy-crop": "^5.5.6"
331
358
  }
332
359
  }
333
360
  },
@@ -383,8 +410,7 @@
383
410
  ],
384
411
  "dependencies": [
385
412
  "forms",
386
- "seo",
387
- "markdown"
413
+ "seo"
388
414
  ],
389
415
  "peerDependenciesMeta": {
390
416
  "@donotdev/crud": {
@@ -408,7 +434,12 @@
408
434
  "@donotdev/crud": {
409
435
  "dependencies": [
410
436
  "@donotdev/components",
411
- "@donotdev/core"
437
+ "@donotdev/core",
438
+ "react-easy-crop",
439
+ "forms-resolvers"
440
+ ],
441
+ "devDependencies": [
442
+ "tiptap"
412
443
  ],
413
444
  "peerDependencies": [
414
445
  "@donotdev/firebase",
@@ -416,10 +447,19 @@
416
447
  "forms",
417
448
  "firebase",
418
449
  "validation",
419
- "lucide-react"
420
- ]
450
+ "lucide-react",
451
+ "tiptap"
452
+ ],
453
+ "peerDependenciesMeta": {
454
+ "tiptap": {
455
+ "optional": true
456
+ }
457
+ }
421
458
  },
422
459
  "@donotdev/firebase": {
460
+ "dependencies": [
461
+ "browser-image-compression"
462
+ ],
423
463
  "peerDependencies": [
424
464
  "firebase"
425
465
  ]
@@ -447,7 +487,8 @@
447
487
  "react",
448
488
  "validation",
449
489
  "i18n",
450
- "forms"
490
+ "forms",
491
+ "forms-resolvers"
451
492
  ]
452
493
  },
453
494
  "@donotdev/utils": {
@@ -524,6 +565,7 @@
524
565
  "@donotdev/crud",
525
566
  "@donotdev/ui",
526
567
  "forms",
568
+ "forms-resolvers",
527
569
  "markdown"
528
570
  ],
529
571
  "peerDependencies": [
@@ -858,155 +858,6 @@ var init_cli_output = __esm({
858
858
  }
859
859
  });
860
860
 
861
- // packages/core/config/constants.js
862
- function getPatternsFor(type, repoRoot = null) {
863
- const patterns = SCAN_PATTERNS[type];
864
- if (!patterns) {
865
- throw new Error(`Unknown pattern type: ${type}`);
866
- }
867
- if (repoRoot && patterns.framework) {
868
- return {
869
- ...patterns,
870
- framework: patterns.framework.map((pattern) => `${repoRoot}/${pattern}`)
871
- };
872
- }
873
- return patterns;
874
- }
875
- function getGlobOptionsFor(type) {
876
- return GLOB_OPTIONS[type] || GLOB_OPTIONS.base;
877
- }
878
- var I18N_PATHS, SCAN_PATTERNS, GLOB_OPTIONS;
879
- var init_constants = __esm({
880
- "packages/core/config/constants.js"() {
881
- "use strict";
882
- init_utils();
883
- I18N_PATHS = {
884
- // Monorepo source structure (locales at root, not in src/)
885
- SOURCE_ROOT: "packages/core/i18n",
886
- SOURCE_LOCALES: "packages/core/i18n/locales",
887
- SOURCE_EAGER: "packages/core/i18n/locales/eager",
888
- SOURCE_LAZY: "packages/core/i18n/locales/lazy",
889
- // Published structure (same as source - no flattening needed)
890
- PUBLISHED_ROOT: "i18n",
891
- PUBLISHED_LOCALES: "i18n/locales",
892
- PUBLISHED_EAGER: "i18n/locales/eager",
893
- PUBLISHED_LAZY: "i18n/locales/lazy"
894
- };
895
- SCAN_PATTERNS = {
896
- routes: {
897
- consumer: ["src/**/*Page.tsx", "src/pages/**/*Page.tsx"],
898
- exclude: [
899
- "**/node_modules/**",
900
- "**/dist/**",
901
- "**/build/**",
902
- "**/*.test.tsx",
903
- "**/*.stories.tsx"
904
- ],
905
- extensions: [".tsx"]
906
- },
907
- css: {
908
- consumer: ["src/**/*.css"],
909
- themes: ["src/**/*.css"],
910
- extensions: [".css", ".scss", ".sass"],
911
- framework: [
912
- "packages/ui/src/**/*.css",
913
- "packages/core/components/src/**/*.css",
914
- "packages/core/templates/src/**/*.css"
915
- ]
916
- },
917
- i18n: {
918
- eager: ["src/locales/*_*.json"],
919
- lazy: ["src/**/locales/*_*.json", "!src/locales/*_*.json"],
920
- framework: {
921
- eager: [`${I18N_PATHS.SOURCE_EAGER}/*_*.json`],
922
- lazy: [`${I18N_PATHS.SOURCE_LAZY}/*_*.json`]
923
- },
924
- extensions: [".json"]
925
- },
926
- assets: {
927
- consumer: ["public/**/*"],
928
- fallback: ["manifest.json"],
929
- modern: [
930
- "logo.svg",
931
- "favicon.svg",
932
- "apple-touch-icon.png",
933
- "android-chrome-192x192.png",
934
- "android-chrome-512x512.png"
935
- ],
936
- patterns: [
937
- "favicon.svg",
938
- "favicon.ico",
939
- "favicon-*.png",
940
- "logo.svg",
941
- "logo.png",
942
- "logo.webp",
943
- "logo.avif",
944
- "apple-touch-icon*.png",
945
- "android-chrome-*.png",
946
- "manifest.json"
947
- ],
948
- fonts: ["fonts/**/*.woff2", "fonts/**/*.woff", "fonts/**/*.ttf"],
949
- framework: ["packages/ui/assets/**/*"]
950
- },
951
- pwa: {
952
- consumer: [
953
- "public/manifest.json",
954
- "public/service-worker.js",
955
- "public/sw.js",
956
- "public/icon-192x192.png",
957
- "public/icon-512x512.png",
958
- "public/favicon.ico",
959
- "public/favicon.svg",
960
- "public/apple-touch-icon.png",
961
- "public/logo.svg"
962
- ],
963
- exclude: ["**/node_modules/**", "**/dist/**", "**/build/**"],
964
- extensions: [".json", ".js", ".png", ".svg", ".ico"],
965
- framework: ["packages/ui/assets/**/*"]
966
- },
967
- globalIgnore: [
968
- "**/node_modules/**",
969
- "**/dist/**",
970
- "**/build/**",
971
- "**/.git/**",
972
- "**/coverage/**",
973
- "**/test/**"
974
- ]
975
- };
976
- GLOB_OPTIONS = {
977
- base: {
978
- absolute: true,
979
- onlyFiles: true,
980
- ignore: SCAN_PATTERNS.globalIgnore
981
- },
982
- css: {
983
- absolute: true,
984
- onlyFiles: true,
985
- ignore: [...SCAN_PATTERNS.globalIgnore, "**/*.test.css"]
986
- },
987
- routes: {
988
- absolute: true,
989
- onlyFiles: true,
990
- ignore: [
991
- ...SCAN_PATTERNS.globalIgnore,
992
- "**/*.test.tsx",
993
- "**/*.stories.tsx"
994
- ]
995
- },
996
- i18n: {
997
- absolute: true,
998
- onlyFiles: true,
999
- ignore: SCAN_PATTERNS.globalIgnore
1000
- },
1001
- assets: {
1002
- absolute: true,
1003
- onlyFiles: true,
1004
- ignore: SCAN_PATTERNS.globalIgnore
1005
- }
1006
- };
1007
- }
1008
- });
1009
-
1010
861
  // node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/utils/array.js
1011
862
  var require_array = __commonJS({
1012
863
  "node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/utils/array.js"(exports) {
@@ -6591,7 +6442,157 @@ var require_out4 = __commonJS({
6591
6442
  }
6592
6443
  });
6593
6444
 
6445
+ // packages/core/config/constants.js
6446
+ function getPatternsFor(type, repoRoot = null) {
6447
+ const patterns = SCAN_PATTERNS[type];
6448
+ if (!patterns) {
6449
+ throw new Error(`Unknown pattern type: ${type}`);
6450
+ }
6451
+ if (repoRoot && patterns.framework) {
6452
+ return {
6453
+ ...patterns,
6454
+ framework: patterns.framework.map((pattern) => `${repoRoot}/${pattern}`)
6455
+ };
6456
+ }
6457
+ return patterns;
6458
+ }
6459
+ function getGlobOptionsFor(type) {
6460
+ return GLOB_OPTIONS[type] || GLOB_OPTIONS.base;
6461
+ }
6462
+ var I18N_PATHS, SCAN_PATTERNS, GLOB_OPTIONS;
6463
+ var init_constants = __esm({
6464
+ "packages/core/config/constants.js"() {
6465
+ "use strict";
6466
+ init_utils();
6467
+ I18N_PATHS = {
6468
+ // Monorepo source structure (locales at root, not in src/)
6469
+ SOURCE_ROOT: "packages/core/i18n",
6470
+ SOURCE_LOCALES: "packages/core/i18n/locales",
6471
+ SOURCE_EAGER: "packages/core/i18n/locales/eager",
6472
+ SOURCE_LAZY: "packages/core/i18n/locales/lazy",
6473
+ // Published structure (same as source - no flattening needed)
6474
+ PUBLISHED_ROOT: "i18n",
6475
+ PUBLISHED_LOCALES: "i18n/locales",
6476
+ PUBLISHED_EAGER: "i18n/locales/eager",
6477
+ PUBLISHED_LAZY: "i18n/locales/lazy"
6478
+ };
6479
+ SCAN_PATTERNS = {
6480
+ routes: {
6481
+ consumer: ["src/**/*Page.tsx", "src/pages/**/*Page.tsx"],
6482
+ exclude: [
6483
+ "**/node_modules/**",
6484
+ "**/dist/**",
6485
+ "**/build/**",
6486
+ "**/*.test.tsx",
6487
+ "**/*.stories.tsx"
6488
+ ],
6489
+ extensions: [".tsx"]
6490
+ },
6491
+ css: {
6492
+ consumer: ["src/**/*.css"],
6493
+ themes: ["src/**/*.css"],
6494
+ extensions: [".css", ".scss", ".sass"],
6495
+ framework: [
6496
+ "packages/ui/src/**/*.css",
6497
+ "packages/core/components/src/**/*.css",
6498
+ "packages/core/templates/src/**/*.css"
6499
+ ]
6500
+ },
6501
+ i18n: {
6502
+ eager: ["src/locales/*_*.json"],
6503
+ lazy: ["src/**/locales/*_*.json", "!src/locales/*_*.json"],
6504
+ framework: {
6505
+ eager: [`${I18N_PATHS.SOURCE_EAGER}/*_*.json`],
6506
+ lazy: [`${I18N_PATHS.SOURCE_LAZY}/*_*.json`]
6507
+ },
6508
+ extensions: [".json"]
6509
+ },
6510
+ assets: {
6511
+ consumer: ["public/**/*"],
6512
+ fallback: ["manifest.json"],
6513
+ modern: [
6514
+ "logo.svg",
6515
+ "favicon.svg",
6516
+ "apple-touch-icon.png",
6517
+ "android-chrome-192x192.png",
6518
+ "android-chrome-512x512.png"
6519
+ ],
6520
+ patterns: [
6521
+ "favicon.svg",
6522
+ "favicon.ico",
6523
+ "favicon-*.png",
6524
+ "logo.svg",
6525
+ "logo.png",
6526
+ "logo.webp",
6527
+ "logo.avif",
6528
+ "apple-touch-icon*.png",
6529
+ "android-chrome-*.png",
6530
+ "manifest.json"
6531
+ ],
6532
+ fonts: ["fonts/**/*.woff2", "fonts/**/*.woff", "fonts/**/*.ttf"],
6533
+ framework: ["packages/ui/assets/**/*"]
6534
+ },
6535
+ pwa: {
6536
+ consumer: [
6537
+ "public/manifest.json",
6538
+ "public/service-worker.js",
6539
+ "public/sw.js",
6540
+ "public/icon-192x192.png",
6541
+ "public/icon-512x512.png",
6542
+ "public/favicon.ico",
6543
+ "public/favicon.svg",
6544
+ "public/apple-touch-icon.png",
6545
+ "public/logo.svg"
6546
+ ],
6547
+ exclude: ["**/node_modules/**", "**/dist/**", "**/build/**"],
6548
+ extensions: [".json", ".js", ".png", ".svg", ".ico"],
6549
+ framework: ["packages/ui/assets/**/*"]
6550
+ },
6551
+ globalIgnore: [
6552
+ "**/node_modules/**",
6553
+ "**/dist/**",
6554
+ "**/build/**",
6555
+ "**/.git/**",
6556
+ "**/coverage/**",
6557
+ "**/test/**"
6558
+ ]
6559
+ };
6560
+ GLOB_OPTIONS = {
6561
+ base: {
6562
+ absolute: true,
6563
+ onlyFiles: true,
6564
+ ignore: SCAN_PATTERNS.globalIgnore
6565
+ },
6566
+ css: {
6567
+ absolute: true,
6568
+ onlyFiles: true,
6569
+ ignore: [...SCAN_PATTERNS.globalIgnore, "**/*.test.css"]
6570
+ },
6571
+ routes: {
6572
+ absolute: true,
6573
+ onlyFiles: true,
6574
+ ignore: [
6575
+ ...SCAN_PATTERNS.globalIgnore,
6576
+ "**/*.test.tsx",
6577
+ "**/*.stories.tsx"
6578
+ ]
6579
+ },
6580
+ i18n: {
6581
+ absolute: true,
6582
+ onlyFiles: true,
6583
+ ignore: SCAN_PATTERNS.globalIgnore
6584
+ },
6585
+ assets: {
6586
+ absolute: true,
6587
+ onlyFiles: true,
6588
+ ignore: SCAN_PATTERNS.globalIgnore
6589
+ }
6590
+ };
6591
+ }
6592
+ });
6593
+
6594
6594
  // packages/core/config/utils/PathResolver.ts
6595
+ import * as fs from "node:fs";
6595
6596
  import { createRequire } from "node:module";
6596
6597
  import {
6597
6598
  resolve,
@@ -6603,7 +6604,6 @@ import {
6603
6604
  extname
6604
6605
  } from "node:path";
6605
6606
  import { fileURLToPath } from "node:url";
6606
- import * as fs from "node:fs";
6607
6607
  function safeExecuteAsync(fn, message) {
6608
6608
  return fn().catch((error2) => {
6609
6609
  throw new Error(
@@ -6616,8 +6616,8 @@ var init_PathResolver = __esm({
6616
6616
  "packages/core/config/utils/PathResolver.ts"() {
6617
6617
  "use strict";
6618
6618
  init_utils();
6619
- init_constants();
6620
6619
  import_fast_glob = __toESM(require_out4(), 1);
6620
+ init_constants();
6621
6621
  constants = {
6622
6622
  getGlobOptionsFor: getGlobOptionsFor || void 0,
6623
6623
  SCAN_PATTERNS: SCAN_PATTERNS || void 0,
@@ -7532,11 +7532,17 @@ var init_PathResolver = __esm({
7532
7532
  /**
7533
7533
  * Get path to empty.js module for optional dependency aliasing
7534
7534
  * Used by Vite and Turbopack to alias missing optional deps
7535
- * @returns Absolute path to empty.js
7535
+ * @param returnPackageSpecifier - If true, returns package specifier '@donotdev/core/empty' for Turbopack. If false, returns absolute path for Vite.
7536
+ * @returns Package specifier or absolute path to empty.js
7536
7537
  */
7537
- getEmptyModulePath() {
7538
+ getEmptyModulePath(returnPackageSpecifier = false) {
7539
+ if (returnPackageSpecifier) {
7540
+ return "@donotdev/core/empty";
7541
+ }
7542
+ const resolved = this.resolvePackage("@donotdev/core/empty");
7543
+ if (resolved) return resolved;
7538
7544
  const thisDir = dirname(fileURLToPath(import.meta.url));
7539
- return this.normalizePath(join(thisDir, "../vite/empty.js"));
7545
+ return this.normalizePath(join(thisDir, "../empty.js"));
7540
7546
  }
7541
7547
  // === PRIVATE METHODS ===
7542
7548
  /**
@@ -7732,11 +7738,11 @@ var init_pathResolver = __esm({
7732
7738
  });
7733
7739
 
7734
7740
  // packages/tooling/src/bundler/utils.ts
7741
+ import { Buffer as Buffer2 } from "node:buffer";
7735
7742
  import { createRequire as createRequire2 } from "node:module";
7736
- import { fileURLToPath as fileURLToPath2 } from "node:url";
7737
7743
  import { dirname as dirname3, resolve as resolve3 } from "node:path";
7738
- import { Buffer as Buffer2 } from "node:buffer";
7739
7744
  import process from "node:process";
7745
+ import { fileURLToPath as fileURLToPath2 } from "node:url";
7740
7746
  var require2, __filename, __dirname;
7741
7747
  var init_utils = __esm({
7742
7748
  "packages/tooling/src/bundler/utils.ts"() {
@@ -7773,7 +7779,6 @@ import { spawnSync, execSync } from "node:child_process";
7773
7779
  // packages/tooling/src/utils/app-selector.ts
7774
7780
  init_utils();
7775
7781
  init_dist2();
7776
- init_cli_output();
7777
7782
 
7778
7783
  // packages/tooling/src/utils/app-detection.ts
7779
7784
  init_utils();
@@ -7861,6 +7866,7 @@ function analyzeApp(appPath, appName) {
7861
7866
  }
7862
7867
 
7863
7868
  // packages/tooling/src/utils/app-selector.ts
7869
+ init_cli_output();
7864
7870
  async function selectApp(projectRoot, appName) {
7865
7871
  const apps = detectApps(projectRoot);
7866
7872
  if (apps.length === 0) {
@@ -7895,10 +7901,6 @@ async function selectApp(projectRoot, appName) {
7895
7901
  return apps.find((a) => a.name === selected) || null;
7896
7902
  }
7897
7903
 
7898
- // packages/tooling/src/apps/build.ts
7899
- init_errors();
7900
- init_cli_output();
7901
-
7902
7904
  // packages/tooling/src/utils/cli-input.ts
7903
7905
  init_utils();
7904
7906
  init_dist2();
@@ -7921,6 +7923,8 @@ async function askForSelection(message, choices, defaultValue = 0) {
7921
7923
  }
7922
7924
 
7923
7925
  // packages/tooling/src/apps/build.ts
7926
+ init_cli_output();
7927
+ init_errors();
7924
7928
  init_pathResolver();
7925
7929
  function validateFirebaseJson(appDir) {
7926
7930
  const firebaseJsonPath = joinPath(appDir, "firebase.json");