@donotdev/cli 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dependencies-matrix.json +158 -74
- package/dist/bin/commands/create-app.js +43 -6
- package/dist/bin/commands/create-project.js +60 -7
- package/dist/bin/commands/deploy.js +111 -22
- package/dist/bin/dndev.js +7 -4
- package/dist/bin/donotdev.js +7 -4
- package/dist/index.js +174 -30
- package/package.json +4 -3
- package/templates/app-next/src/config/app.ts.example +1 -1
- package/templates/app-vite/index.html.example +24 -2
- package/templates/app-vite/src/config/app.ts.example +1 -1
- package/templates/app-vite/src/pages/FormPageExample.tsx.example +8 -5
- package/templates/app-vite/src/pages/ListPageExample.tsx.example +4 -7
- package/templates/root-consumer/.firebaserc.example +5 -0
- package/templates/root-consumer/entities/ExampleEntity.ts.example +2 -1
- package/templates/root-consumer/entities/demo.ts.example +1 -1
- package/templates/root-consumer/firestore.indexes.json.example +4 -0
- package/templates/root-consumer/firestore.rules.example +11 -0
- package/templates/root-consumer/guides/dndev/COMPONENTS_CRUD.md.example +9 -6
- package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +329 -57
- package/templates/root-consumer/guides/wai-way/entity_patterns.md.example +1 -1
- package/templates/root-consumer/storage.rules.example +8 -0
package/dependencies-matrix.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./dependencies-matrix.schema.json",
|
|
3
|
-
"version": "0.0.
|
|
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-
|
|
5
|
+
"lastUpdated": "2026-02-04",
|
|
6
6
|
"migrationGuides": {
|
|
7
7
|
"0.0→0.1": {
|
|
8
8
|
"path": "docs/migration/v0.0-to-v0.1.md",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"@donotdev/adv-comps": {
|
|
18
18
|
"description": "Advanced components package",
|
|
19
19
|
"packages": {
|
|
20
|
-
"@donotdev/adv-comps": "^0.0.
|
|
20
|
+
"@donotdev/adv-comps": "^0.0.9"
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
"@donotdev/auth": {
|
|
@@ -35,31 +35,31 @@
|
|
|
35
35
|
"@donotdev/components": {
|
|
36
36
|
"description": "UI components package",
|
|
37
37
|
"packages": {
|
|
38
|
-
"@donotdev/components": "^0.0.
|
|
38
|
+
"@donotdev/components": "^0.0.15"
|
|
39
39
|
}
|
|
40
40
|
},
|
|
41
41
|
"@donotdev/core": {
|
|
42
42
|
"description": "Core framework package",
|
|
43
43
|
"packages": {
|
|
44
|
-
"@donotdev/core": "^0.0.
|
|
44
|
+
"@donotdev/core": "^0.0.19"
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
"@donotdev/crud": {
|
|
48
48
|
"description": "CRUD operations package",
|
|
49
49
|
"packages": {
|
|
50
|
-
"@donotdev/crud": "^0.0.
|
|
50
|
+
"@donotdev/crud": "^0.0.10"
|
|
51
51
|
}
|
|
52
52
|
},
|
|
53
53
|
"@donotdev/firebase": {
|
|
54
54
|
"description": "Firebase provider package",
|
|
55
55
|
"packages": {
|
|
56
|
-
"@donotdev/firebase": "^0.0.
|
|
56
|
+
"@donotdev/firebase": "^0.0.8"
|
|
57
57
|
}
|
|
58
58
|
},
|
|
59
59
|
"@donotdev/functions": {
|
|
60
60
|
"description": "Firebase Functions package",
|
|
61
61
|
"packages": {
|
|
62
|
-
"@donotdev/functions": "^0.0.
|
|
62
|
+
"@donotdev/functions": "^0.0.9"
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
65
|
"@donotdev/oauth": {
|
|
@@ -71,41 +71,41 @@
|
|
|
71
71
|
"@donotdev/templates": {
|
|
72
72
|
"description": "Page templates package",
|
|
73
73
|
"packages": {
|
|
74
|
-
"@donotdev/templates": "^0.0.
|
|
74
|
+
"@donotdev/templates": "^0.0.7"
|
|
75
75
|
}
|
|
76
76
|
},
|
|
77
77
|
"@donotdev/ui": {
|
|
78
78
|
"description": "UI and routing package",
|
|
79
79
|
"packages": {
|
|
80
|
-
"@donotdev/ui": "^0.0.
|
|
80
|
+
"@donotdev/ui": "^0.0.11"
|
|
81
81
|
}
|
|
82
82
|
},
|
|
83
83
|
"react": {
|
|
84
84
|
"description": "Core React - consumers install explicitly",
|
|
85
85
|
"packages": {
|
|
86
|
-
"react": "^19.2.
|
|
87
|
-
"react-dom": "^19.2.
|
|
86
|
+
"react": "^19.2.4",
|
|
87
|
+
"react-dom": "^19.2.4"
|
|
88
88
|
}
|
|
89
89
|
},
|
|
90
90
|
"i18n": {
|
|
91
91
|
"description": "i18n libraries - auto-installed as transitive deps",
|
|
92
92
|
"packages": {
|
|
93
|
-
"i18next": "^25.
|
|
93
|
+
"i18next": "^25.8.1",
|
|
94
94
|
"i18next-browser-languagedetector": "^8.2.0",
|
|
95
95
|
"i18next-http-backend": "^3.0.2",
|
|
96
|
-
"react-i18next": "^16.5.
|
|
96
|
+
"react-i18next": "^16.5.4"
|
|
97
97
|
}
|
|
98
98
|
},
|
|
99
99
|
"zustand": {
|
|
100
100
|
"description": "State management - consumers install for custom stores",
|
|
101
101
|
"packages": {
|
|
102
|
-
"zustand": "^5.0.
|
|
102
|
+
"zustand": "^5.0.11"
|
|
103
103
|
}
|
|
104
104
|
},
|
|
105
105
|
"react-query": {
|
|
106
106
|
"description": "Data fetching - auto-installed as transitive dep",
|
|
107
107
|
"packages": {
|
|
108
|
-
"@tanstack/react-query": "^5.90.
|
|
108
|
+
"@tanstack/react-query": "^5.90.20"
|
|
109
109
|
}
|
|
110
110
|
},
|
|
111
111
|
"validation": {
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
"lucide-react": {
|
|
118
118
|
"description": "Icons - consumers install and use directly",
|
|
119
119
|
"packages": {
|
|
120
|
-
"lucide-react": "^0.
|
|
120
|
+
"lucide-react": "^0.563.0"
|
|
121
121
|
}
|
|
122
122
|
},
|
|
123
123
|
"react-day-picker": {
|
|
@@ -167,12 +167,12 @@
|
|
|
167
167
|
},
|
|
168
168
|
"shiki": {
|
|
169
169
|
"packages": {
|
|
170
|
-
"shiki": "^3.
|
|
170
|
+
"shiki": "^3.22.0"
|
|
171
171
|
}
|
|
172
172
|
},
|
|
173
173
|
"forms": {
|
|
174
174
|
"packages": {
|
|
175
|
-
"react-hook-form": "^7.71.
|
|
175
|
+
"react-hook-form": "^7.71.1"
|
|
176
176
|
}
|
|
177
177
|
},
|
|
178
178
|
"forms-resolvers": {
|
|
@@ -188,18 +188,18 @@
|
|
|
188
188
|
"markdown": {
|
|
189
189
|
"description": "Markdown parsing - marked for speed, html-react-parser for SSR",
|
|
190
190
|
"packages": {
|
|
191
|
-
"html-react-parser": "^5.2.
|
|
191
|
+
"html-react-parser": "^5.2.16",
|
|
192
192
|
"marked": "^17.0.1"
|
|
193
193
|
}
|
|
194
194
|
},
|
|
195
195
|
"routing": {
|
|
196
196
|
"packages": {
|
|
197
|
-
"react-router-dom": "^7.
|
|
197
|
+
"react-router-dom": "^7.13.0"
|
|
198
198
|
}
|
|
199
199
|
},
|
|
200
200
|
"firebase": {
|
|
201
201
|
"packages": {
|
|
202
|
-
"firebase": "^12.
|
|
202
|
+
"firebase": "^12.8.0"
|
|
203
203
|
}
|
|
204
204
|
},
|
|
205
205
|
"browser-image-compression": {
|
|
@@ -211,21 +211,21 @@
|
|
|
211
211
|
"tiptap": {
|
|
212
212
|
"description": "Rich text editor - optional peer dependency. Required: @tiptap/react, @tiptap/pm, @tiptap/starter-kit. Optional: @tiptap/extension-placeholder for placeholder text.",
|
|
213
213
|
"packages": {
|
|
214
|
-
"@tiptap/react": "^3.
|
|
215
|
-
"@tiptap/pm": "^3.
|
|
216
|
-
"@tiptap/starter-kit": "^3.
|
|
217
|
-
"@tiptap/extension-placeholder": "^3.
|
|
214
|
+
"@tiptap/react": "^3.19.0",
|
|
215
|
+
"@tiptap/pm": "^3.19.0",
|
|
216
|
+
"@tiptap/starter-kit": "^3.19.0",
|
|
217
|
+
"@tiptap/extension-placeholder": "^3.19.0"
|
|
218
218
|
}
|
|
219
219
|
},
|
|
220
220
|
"stripe": {
|
|
221
221
|
"packages": {
|
|
222
|
-
"stripe": "^20.
|
|
222
|
+
"stripe": "^20.3.0"
|
|
223
223
|
}
|
|
224
224
|
},
|
|
225
225
|
"firebase-functions": {
|
|
226
226
|
"packages": {
|
|
227
227
|
"firebase-admin": "^13.6.0",
|
|
228
|
-
"firebase-functions": "^7.0.
|
|
228
|
+
"firebase-functions": "^7.0.5"
|
|
229
229
|
}
|
|
230
230
|
},
|
|
231
231
|
"firebase-admin": {
|
|
@@ -235,8 +235,8 @@
|
|
|
235
235
|
},
|
|
236
236
|
"vercel-deps": {
|
|
237
237
|
"packages": {
|
|
238
|
-
"next": "^16.1.
|
|
239
|
-
"vercel": "^50.
|
|
238
|
+
"next": "^16.1.6",
|
|
239
|
+
"vercel": "^50.10.0"
|
|
240
240
|
}
|
|
241
241
|
},
|
|
242
242
|
"esbuild": {
|
|
@@ -246,7 +246,7 @@
|
|
|
246
246
|
},
|
|
247
247
|
"rollup": {
|
|
248
248
|
"packages": {
|
|
249
|
-
"rollup": "^4.
|
|
249
|
+
"rollup": "^4.57.1",
|
|
250
250
|
"rollup-plugin-dts": "^6.3.0"
|
|
251
251
|
}
|
|
252
252
|
},
|
|
@@ -264,7 +264,7 @@
|
|
|
264
264
|
"cli-commander": {
|
|
265
265
|
"description": "CLI command framework - CLI package only",
|
|
266
266
|
"packages": {
|
|
267
|
-
"commander": "^14.0.
|
|
267
|
+
"commander": "^14.0.3"
|
|
268
268
|
}
|
|
269
269
|
},
|
|
270
270
|
"fast-glob": {
|
|
@@ -280,10 +280,10 @@
|
|
|
280
280
|
},
|
|
281
281
|
"vite-deps": {
|
|
282
282
|
"packages": {
|
|
283
|
-
"@vitejs/plugin-react": "^5.1.
|
|
283
|
+
"@vitejs/plugin-react": "^5.1.3",
|
|
284
284
|
"react-refresh": "^0.18.0",
|
|
285
|
-
"@vitejs/plugin-basic-ssl": "^2.1.
|
|
286
|
-
"vite-tsconfig-paths": "^6.0.
|
|
285
|
+
"@vitejs/plugin-basic-ssl": "^2.1.4",
|
|
286
|
+
"vite-tsconfig-paths": "^6.0.5",
|
|
287
287
|
"@rollup/plugin-strip": "^3.0.4",
|
|
288
288
|
"rollup-plugin-visualizer": "^6.0.5",
|
|
289
289
|
"vite-plugin-pwa": "1.2.0"
|
|
@@ -291,12 +291,12 @@
|
|
|
291
291
|
},
|
|
292
292
|
"vite-deps-minimal": {
|
|
293
293
|
"packages": {
|
|
294
|
-
"vite-tsconfig-paths": "^6.0.
|
|
294
|
+
"vite-tsconfig-paths": "^6.0.5"
|
|
295
295
|
}
|
|
296
296
|
},
|
|
297
297
|
"next": {
|
|
298
298
|
"packages": {
|
|
299
|
-
"next": "^16.1.
|
|
299
|
+
"next": "^16.1.6"
|
|
300
300
|
}
|
|
301
301
|
},
|
|
302
302
|
"typescript": {
|
|
@@ -306,12 +306,12 @@
|
|
|
306
306
|
},
|
|
307
307
|
"monitoring": {
|
|
308
308
|
"packages": {
|
|
309
|
-
"@sentry/react": "^10.
|
|
309
|
+
"@sentry/react": "^10.38.0"
|
|
310
310
|
}
|
|
311
311
|
},
|
|
312
312
|
"monitoring-node": {
|
|
313
313
|
"packages": {
|
|
314
|
-
"@sentry/node": "^10.
|
|
314
|
+
"@sentry/node": "^10.38.0"
|
|
315
315
|
}
|
|
316
316
|
},
|
|
317
317
|
"postcss": {
|
|
@@ -319,7 +319,7 @@
|
|
|
319
319
|
"postcss": "^8.5.6",
|
|
320
320
|
"postcss-import": "^16.1.1",
|
|
321
321
|
"postcss-nesting": "^13.0.2",
|
|
322
|
-
"autoprefixer": "^10.4.
|
|
322
|
+
"autoprefixer": "^10.4.24"
|
|
323
323
|
}
|
|
324
324
|
},
|
|
325
325
|
"eslint": {
|
|
@@ -329,26 +329,26 @@
|
|
|
329
329
|
},
|
|
330
330
|
"types": {
|
|
331
331
|
"packages": {
|
|
332
|
-
"@types/node": "^24.10.
|
|
333
|
-
"@types/react": "^19.2.
|
|
332
|
+
"@types/node": "^24.10.10",
|
|
333
|
+
"@types/react": "^19.2.10",
|
|
334
334
|
"@types/react-dom": "^19.2.3"
|
|
335
335
|
}
|
|
336
336
|
},
|
|
337
337
|
"root-consumer-tooling": {
|
|
338
338
|
"packages": {
|
|
339
|
-
"turbo": "^2.
|
|
339
|
+
"turbo": "^2.8.3",
|
|
340
340
|
"sharp": "^0.34.5"
|
|
341
341
|
}
|
|
342
342
|
},
|
|
343
343
|
"vercel": {
|
|
344
344
|
"packages": {
|
|
345
|
-
"vercel": "^50.
|
|
345
|
+
"vercel": "^50.10.0"
|
|
346
346
|
}
|
|
347
347
|
},
|
|
348
348
|
"@donotdev/cli": {
|
|
349
349
|
"description": "Cli package",
|
|
350
350
|
"packages": {
|
|
351
|
-
"@donotdev/cli": "^0.0.
|
|
351
|
+
"@donotdev/cli": "^0.0.9"
|
|
352
352
|
}
|
|
353
353
|
},
|
|
354
354
|
"react-easy-crop": {
|
|
@@ -378,12 +378,29 @@
|
|
|
378
378
|
"lucide-react",
|
|
379
379
|
"monitoring"
|
|
380
380
|
],
|
|
381
|
-
"dependencies": [
|
|
382
|
-
|
|
381
|
+
"dependencies": [
|
|
382
|
+
"i18n",
|
|
383
|
+
"react-query",
|
|
384
|
+
"fast-glob",
|
|
385
|
+
"cli-prompts"
|
|
386
|
+
],
|
|
387
|
+
"devDependencies": [
|
|
388
|
+
"vite",
|
|
389
|
+
"next",
|
|
390
|
+
"typescript"
|
|
391
|
+
]
|
|
383
392
|
},
|
|
384
393
|
"@donotdev/components": {
|
|
385
|
-
"dependencies": [
|
|
386
|
-
|
|
394
|
+
"dependencies": [
|
|
395
|
+
"radix",
|
|
396
|
+
"styling",
|
|
397
|
+
"react-day-picker"
|
|
398
|
+
],
|
|
399
|
+
"peerDependencies": [
|
|
400
|
+
"react",
|
|
401
|
+
"shiki",
|
|
402
|
+
"lucide-react"
|
|
403
|
+
],
|
|
387
404
|
"peerDependenciesMeta": {
|
|
388
405
|
"shiki": {
|
|
389
406
|
"optional": true
|
|
@@ -399,7 +416,10 @@
|
|
|
399
416
|
"routing",
|
|
400
417
|
"validation"
|
|
401
418
|
],
|
|
402
|
-
"dependencies": [
|
|
419
|
+
"dependencies": [
|
|
420
|
+
"forms",
|
|
421
|
+
"seo"
|
|
422
|
+
],
|
|
403
423
|
"peerDependenciesMeta": {
|
|
404
424
|
"@donotdev/crud": {
|
|
405
425
|
"optional": true
|
|
@@ -407,10 +427,17 @@
|
|
|
407
427
|
}
|
|
408
428
|
},
|
|
409
429
|
"@donotdev/auth": {
|
|
410
|
-
"peerDependencies": [
|
|
430
|
+
"peerDependencies": [
|
|
431
|
+
"react",
|
|
432
|
+
"firebase"
|
|
433
|
+
]
|
|
411
434
|
},
|
|
412
435
|
"@donotdev/billing": {
|
|
413
|
-
"peerDependencies": [
|
|
436
|
+
"peerDependencies": [
|
|
437
|
+
"react",
|
|
438
|
+
"lucide-react",
|
|
439
|
+
"stripe"
|
|
440
|
+
]
|
|
414
441
|
},
|
|
415
442
|
"@donotdev/crud": {
|
|
416
443
|
"dependencies": [
|
|
@@ -420,7 +447,9 @@
|
|
|
420
447
|
"@dnd-kit",
|
|
421
448
|
"forms-resolvers"
|
|
422
449
|
],
|
|
423
|
-
"devDependencies": [
|
|
450
|
+
"devDependencies": [
|
|
451
|
+
"tiptap"
|
|
452
|
+
],
|
|
424
453
|
"peerDependencies": [
|
|
425
454
|
"@donotdev/firebase",
|
|
426
455
|
"react",
|
|
@@ -437,18 +466,30 @@
|
|
|
437
466
|
}
|
|
438
467
|
},
|
|
439
468
|
"@donotdev/firebase": {
|
|
440
|
-
"dependencies": [
|
|
441
|
-
|
|
469
|
+
"dependencies": [
|
|
470
|
+
"browser-image-compression"
|
|
471
|
+
],
|
|
472
|
+
"peerDependencies": [
|
|
473
|
+
"firebase"
|
|
474
|
+
]
|
|
442
475
|
},
|
|
443
476
|
"@donotdev/i18n": {
|
|
444
|
-
"dependencies": [
|
|
445
|
-
|
|
477
|
+
"dependencies": [
|
|
478
|
+
"i18n"
|
|
479
|
+
],
|
|
480
|
+
"peerDependencies": [
|
|
481
|
+
"lucide-react"
|
|
482
|
+
]
|
|
446
483
|
},
|
|
447
484
|
"@donotdev/stores": {
|
|
448
|
-
"dependencies": [
|
|
485
|
+
"dependencies": [
|
|
486
|
+
"zustand"
|
|
487
|
+
]
|
|
449
488
|
},
|
|
450
489
|
"@donotdev/schemas": {
|
|
451
|
-
"dependencies": [
|
|
490
|
+
"dependencies": [
|
|
491
|
+
"validation"
|
|
492
|
+
]
|
|
452
493
|
},
|
|
453
494
|
"@donotdev/types": {
|
|
454
495
|
"devDependencies": [
|
|
@@ -460,15 +501,29 @@
|
|
|
460
501
|
]
|
|
461
502
|
},
|
|
462
503
|
"@donotdev/utils": {
|
|
463
|
-
"dependencies": [
|
|
464
|
-
|
|
465
|
-
|
|
504
|
+
"dependencies": [
|
|
505
|
+
"zustand"
|
|
506
|
+
],
|
|
507
|
+
"peerDependencies": [
|
|
508
|
+
"monitoring"
|
|
509
|
+
],
|
|
510
|
+
"devDependencies": [
|
|
511
|
+
"validation",
|
|
512
|
+
"firebase",
|
|
513
|
+
"i18n"
|
|
514
|
+
]
|
|
466
515
|
},
|
|
467
516
|
"@donotdev/hooks": {
|
|
468
|
-
"dependencies": [
|
|
517
|
+
"dependencies": [
|
|
518
|
+
"react-query"
|
|
519
|
+
]
|
|
469
520
|
},
|
|
470
521
|
"@donotdev/cli": {
|
|
471
|
-
"dependencies": [
|
|
522
|
+
"dependencies": [
|
|
523
|
+
"cli-prompts",
|
|
524
|
+
"cli-commander",
|
|
525
|
+
"fast-glob"
|
|
526
|
+
]
|
|
472
527
|
},
|
|
473
528
|
"@donotdev/tooling": {
|
|
474
529
|
"dependencies": [
|
|
@@ -478,13 +533,19 @@
|
|
|
478
533
|
"esbuild",
|
|
479
534
|
"rollup"
|
|
480
535
|
],
|
|
481
|
-
"devDependencies": [
|
|
536
|
+
"devDependencies": [
|
|
537
|
+
"yaml"
|
|
538
|
+
]
|
|
482
539
|
},
|
|
483
540
|
"@donotdev/oauth": {
|
|
484
|
-
"peerDependencies": [
|
|
541
|
+
"peerDependencies": [
|
|
542
|
+
"react"
|
|
543
|
+
]
|
|
485
544
|
},
|
|
486
545
|
"@donotdev/functions": {
|
|
487
|
-
"dependencies": [
|
|
546
|
+
"dependencies": [
|
|
547
|
+
"@donotdev/core"
|
|
548
|
+
],
|
|
488
549
|
"peerDependencies": [
|
|
489
550
|
"firebase-functions",
|
|
490
551
|
"stripe",
|
|
@@ -494,7 +555,10 @@
|
|
|
494
555
|
]
|
|
495
556
|
},
|
|
496
557
|
"@donotdev/adv-comps": {
|
|
497
|
-
"peerDependencies": [
|
|
558
|
+
"peerDependencies": [
|
|
559
|
+
"react",
|
|
560
|
+
"shiki"
|
|
561
|
+
],
|
|
498
562
|
"dependencies": [],
|
|
499
563
|
"peerDependenciesMeta": {
|
|
500
564
|
"shiki": {
|
|
@@ -631,7 +695,9 @@
|
|
|
631
695
|
"lucide-react",
|
|
632
696
|
"firebase"
|
|
633
697
|
],
|
|
634
|
-
"devDependencies": [
|
|
698
|
+
"devDependencies": [
|
|
699
|
+
"root-consumer-tooling"
|
|
700
|
+
]
|
|
635
701
|
},
|
|
636
702
|
"consumer-vite": {
|
|
637
703
|
"description": "Vite app for consumers (filter inlined packages)",
|
|
@@ -655,7 +721,13 @@
|
|
|
655
721
|
"i18n",
|
|
656
722
|
"react-query"
|
|
657
723
|
],
|
|
658
|
-
"devDependencies": [
|
|
724
|
+
"devDependencies": [
|
|
725
|
+
"vite",
|
|
726
|
+
"typescript",
|
|
727
|
+
"types",
|
|
728
|
+
"vite-deps",
|
|
729
|
+
"postcss"
|
|
730
|
+
]
|
|
659
731
|
},
|
|
660
732
|
"consumer-nextjs": {
|
|
661
733
|
"description": "Nextjs app for consumers (filter inlined packages)",
|
|
@@ -678,7 +750,12 @@
|
|
|
678
750
|
"i18n",
|
|
679
751
|
"react-query"
|
|
680
752
|
],
|
|
681
|
-
"devDependencies": [
|
|
753
|
+
"devDependencies": [
|
|
754
|
+
"next",
|
|
755
|
+
"typescript",
|
|
756
|
+
"types",
|
|
757
|
+
"postcss"
|
|
758
|
+
]
|
|
682
759
|
},
|
|
683
760
|
"functions-firebase": {
|
|
684
761
|
"description": "Firebase Functions app",
|
|
@@ -701,12 +778,19 @@
|
|
|
701
778
|
"monitoring-node",
|
|
702
779
|
"stripe"
|
|
703
780
|
],
|
|
704
|
-
"devDependencies": [
|
|
781
|
+
"devDependencies": [
|
|
782
|
+
"vercel"
|
|
783
|
+
]
|
|
705
784
|
},
|
|
706
785
|
"entities": {
|
|
707
786
|
"description": "Entities workspace package",
|
|
708
|
-
"dependencies": [
|
|
709
|
-
|
|
787
|
+
"dependencies": [
|
|
788
|
+
"validation"
|
|
789
|
+
],
|
|
790
|
+
"devDependencies": [
|
|
791
|
+
"eslint",
|
|
792
|
+
"typescript"
|
|
793
|
+
]
|
|
710
794
|
},
|
|
711
795
|
"demo": {
|
|
712
796
|
"description": "Demo app template (components only)",
|
|
@@ -8693,7 +8693,7 @@ function generatePackageJson(templateName, mode, options = {}) {
|
|
|
8693
8693
|
"dependencies-matrix.json not found. This command requires the matrix file."
|
|
8694
8694
|
);
|
|
8695
8695
|
}
|
|
8696
|
-
const { matrix
|
|
8696
|
+
const { matrix } = matrixResult;
|
|
8697
8697
|
const template = matrix.templateMapping?.[templateName];
|
|
8698
8698
|
if (!template) {
|
|
8699
8699
|
throw new Error(`Template "${templateName}" not found in matrix`);
|
|
@@ -8757,6 +8757,7 @@ function generatePackageJson(templateName, mode, options = {}) {
|
|
|
8757
8757
|
}
|
|
8758
8758
|
}
|
|
8759
8759
|
if (templateName.includes("functions")) {
|
|
8760
|
+
result.main = "lib/index.js";
|
|
8760
8761
|
result.engines = { node: "20" };
|
|
8761
8762
|
if (options.appName) {
|
|
8762
8763
|
const platform = templateName.includes("vercel") ? "Vercel" : "Firebase";
|
|
@@ -8884,6 +8885,8 @@ async function createApp(appName, appConfig, workspaceRoot, templatesRoot) {
|
|
|
8884
8885
|
s.start(`Creating app: ${appName}`);
|
|
8885
8886
|
await ensureDir(appDir);
|
|
8886
8887
|
const templateDir = appTemplate === "demo" ? "app-demo" : appTemplate === "nextjs" ? "app-next" : "app-vite";
|
|
8888
|
+
const firebaseProjectId = (appConfig?.firebaseProjectId ?? "").trim() || appName.toLowerCase().replace(/\s+/g, "-");
|
|
8889
|
+
const firebaseRegion = appConfig?.firebaseRegion ?? "europe-west1";
|
|
8887
8890
|
const replacements = {
|
|
8888
8891
|
projectName: appName,
|
|
8889
8892
|
appName,
|
|
@@ -8892,11 +8895,14 @@ async function createApp(appName, appConfig, workspaceRoot, templatesRoot) {
|
|
|
8892
8895
|
needsCRUD: Boolean(appConfig.needsCRUD),
|
|
8893
8896
|
setupGithubActions: false,
|
|
8894
8897
|
appNames: [appName],
|
|
8895
|
-
firebaseProjectId
|
|
8898
|
+
firebaseProjectId,
|
|
8899
|
+
firebaseRegion,
|
|
8896
8900
|
firebaseSecretName: appName.toUpperCase().replace(/-/g, "_"),
|
|
8897
8901
|
monorepoRelativePath: "../../packages/tooling",
|
|
8898
8902
|
appTemplate,
|
|
8899
|
-
isNextjs: appTemplate === "nextjs"
|
|
8903
|
+
isNextjs: appTemplate === "nextjs",
|
|
8904
|
+
YOUR_FIREBASE_PROJECT_ID: firebaseProjectId,
|
|
8905
|
+
YOUR_REGION: firebaseRegion
|
|
8900
8906
|
};
|
|
8901
8907
|
const templateSourceDir = joinPath(templatesRoot, templateDir);
|
|
8902
8908
|
const templateFiles = await glob("**/*", {
|
|
@@ -8989,6 +8995,32 @@ async function createApp(appName, appConfig, workspaceRoot, templatesRoot) {
|
|
|
8989
8995
|
await replacePlaceholders(firebaseJsonDest, replacements);
|
|
8990
8996
|
}
|
|
8991
8997
|
}
|
|
8998
|
+
const firebasercSource = joinPath(
|
|
8999
|
+
deploymentTemplateDir,
|
|
9000
|
+
".firebaserc.example"
|
|
9001
|
+
);
|
|
9002
|
+
if (pathExists(firebasercSource)) {
|
|
9003
|
+
const firebasercDest = joinPath(appDir, ".firebaserc");
|
|
9004
|
+
await copy(firebasercSource, firebasercDest);
|
|
9005
|
+
if (await isTextFile(firebasercDest)) {
|
|
9006
|
+
await replacePlaceholders(firebasercDest, replacements);
|
|
9007
|
+
}
|
|
9008
|
+
}
|
|
9009
|
+
if (appConfig.needsBackend && appConfig.backendPlatform === "firebase") {
|
|
9010
|
+
const rulesFiles = [
|
|
9011
|
+
"firestore.rules.example",
|
|
9012
|
+
"firestore.indexes.json.example",
|
|
9013
|
+
"storage.rules.example"
|
|
9014
|
+
];
|
|
9015
|
+
for (const example of rulesFiles) {
|
|
9016
|
+
const src = joinPath(deploymentTemplateDir, example);
|
|
9017
|
+
if (pathExists(src)) {
|
|
9018
|
+
const destName = example.replace(".example", "");
|
|
9019
|
+
const dest = joinPath(appDir, destName);
|
|
9020
|
+
await copy(src, dest);
|
|
9021
|
+
}
|
|
9022
|
+
}
|
|
9023
|
+
}
|
|
8992
9024
|
if (appTemplate === "nextjs" || appConfig.needsBackend && appConfig.backendPlatform === "vercel") {
|
|
8993
9025
|
const vercelJsonSource = joinPath(
|
|
8994
9026
|
deploymentTemplateDir,
|
|
@@ -9014,12 +9046,15 @@ async function createApp(appName, appConfig, workspaceRoot, templatesRoot) {
|
|
|
9014
9046
|
}
|
|
9015
9047
|
if (isInteractive) {
|
|
9016
9048
|
Se("\u{1F389} App created successfully!");
|
|
9049
|
+
const firebaseStep = appConfig.needsBackend && appConfig.backendPlatform === "firebase" ? `2. Set Firebase project: cd apps/${appName} && firebase use --add (or edit .firebase rc)
|
|
9050
|
+
3. bun install
|
|
9051
|
+
4. bun run dev` : `2. bun install
|
|
9052
|
+
3. bun run dev`;
|
|
9017
9053
|
Me(
|
|
9018
9054
|
`Next steps:
|
|
9019
9055
|
|
|
9020
9056
|
1. cd apps/${appName}
|
|
9021
|
-
|
|
9022
|
-
3. bun run dev
|
|
9057
|
+
${firebaseStep}
|
|
9023
9058
|
|
|
9024
9059
|
Happy coding!`,
|
|
9025
9060
|
"\u{1F4CB} Next Steps"
|
|
@@ -9051,7 +9086,9 @@ async function main(options) {
|
|
|
9051
9086
|
selectedEntities: [],
|
|
9052
9087
|
userAuth: "social",
|
|
9053
9088
|
billing: true,
|
|
9054
|
-
features: []
|
|
9089
|
+
features: [],
|
|
9090
|
+
firebaseProjectId: options.firebaseProjectId,
|
|
9091
|
+
firebaseRegion: options.firebaseRegion
|
|
9055
9092
|
};
|
|
9056
9093
|
await createApp(appName, appConfig);
|
|
9057
9094
|
} else {
|