@donotdev/cli 0.0.6 → 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 (82) hide show
  1. package/dependencies-matrix.json +25 -7
  2. package/dist/bin/commands/build.js +156 -158
  3. package/dist/bin/commands/bump.js +153 -153
  4. package/dist/bin/commands/cacheout.js +154 -154
  5. package/dist/bin/commands/create-app.js +184 -156
  6. package/dist/bin/commands/create-project.js +154 -154
  7. package/dist/bin/commands/deploy.js +470 -470
  8. package/dist/bin/commands/dev.js +155 -155
  9. package/dist/bin/commands/emu.js +155 -155
  10. package/dist/bin/commands/format.js +154 -154
  11. package/dist/bin/commands/lint.js +157 -154
  12. package/dist/bin/commands/preview.js +155 -155
  13. package/dist/bin/commands/sync-secrets.js +155 -155
  14. package/dist/bin/commands/wai.d.ts +11 -0
  15. package/dist/bin/commands/wai.d.ts.map +1 -0
  16. package/dist/bin/commands/wai.js +12 -0
  17. package/dist/bin/commands/wai.js.map +1 -0
  18. package/dist/bin/dndev.js +24 -8
  19. package/dist/bin/donotdev.js +24 -8
  20. package/dist/index.js +524 -497
  21. package/package.json +1 -1
  22. package/templates/app-demo/src/config/app.ts.example +12 -0
  23. package/templates/app-next/src/config/app.ts.example +75 -48
  24. package/templates/app-vite/index.html.example +71 -37
  25. package/templates/app-vite/src/config/app.ts.example +75 -47
  26. package/templates/app-vite/src/pages/FormPageExample.tsx.example +152 -0
  27. package/templates/app-vite/src/pages/HomePage.tsx.example +81 -134
  28. package/templates/app-vite/src/pages/ListPageExample.tsx.example +88 -0
  29. package/templates/functions-firebase/build.mjs.example +8 -1
  30. package/templates/functions-firebase/functions-firebase/build.mjs.example +8 -1
  31. package/templates/functions-firebase/functions-firebase/src/index.ts.example +19 -25
  32. package/templates/functions-firebase/functions.config.js.example +35 -0
  33. package/templates/root-consumer/entities/ExampleEntity.ts.example +223 -0
  34. package/templates/root-consumer/entities/demo.ts.example +562 -0
  35. package/templates/root-consumer/entities/index.ts.example +15 -0
  36. package/templates/root-consumer/guides/{AGENT_START_HERE.md.example → dndev/AGENT_START_HERE.md.example} +22 -0
  37. package/templates/root-consumer/guides/dndev/COMPONENTS_CRUD.md.example +231 -0
  38. package/templates/root-consumer/guides/{SETUP_AUTH.md.example → dndev/SETUP_AUTH.md.example} +30 -0
  39. package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +473 -0
  40. package/templates/root-consumer/guides/dndev/SETUP_FUNCTIONS.md.example +116 -0
  41. package/templates/root-consumer/guides/wai-way/WAI_WAY_CLI.md.example +404 -0
  42. package/templates/root-consumer/guides/wai-way/agents/architect.md.example +78 -0
  43. package/templates/root-consumer/guides/wai-way/agents/builder.md.example +87 -0
  44. package/templates/root-consumer/guides/wai-way/agents/extractor.md.example +325 -0
  45. package/templates/root-consumer/guides/wai-way/agents/polisher.md.example +100 -0
  46. package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +281 -0
  47. package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +77 -0
  48. package/templates/root-consumer/guides/wai-way/blueprints/2_entities.md.example +104 -0
  49. package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +124 -0
  50. package/templates/root-consumer/guides/wai-way/blueprints/4_configure.md.example +165 -0
  51. package/templates/root-consumer/guides/wai-way/context_map.json.example +95 -0
  52. package/templates/root-consumer/guides/wai-way/entity_patterns.md.example +840 -0
  53. package/templates/root-consumer/guides/wai-way/page_patterns.md.example +686 -0
  54. package/templates/root-consumer/guides/wai-way/presets_guide.md.example +217 -0
  55. package/templates/root-consumer/guides/wai-way/spec_template.md.example +312 -0
  56. package/templates/functions-firebase/functions-firebase/src/crud/createEntity.ts.example +0 -19
  57. package/templates/functions-firebase/functions-firebase/src/crud/deleteEntity.ts.example +0 -14
  58. package/templates/functions-firebase/functions-firebase/src/crud/getEntity.ts.example +0 -14
  59. package/templates/functions-firebase/functions-firebase/src/crud/index.ts.example +0 -12
  60. package/templates/functions-firebase/functions-firebase/src/crud/listEntities.ts.example +0 -14
  61. package/templates/functions-firebase/functions-firebase/src/crud/updateEntity.ts.example +0 -14
  62. package/templates/root-consumer/guides/COMPONENTS_CRUD.md.example +0 -70
  63. package/templates/root-consumer/guides/SETUP_CRUD.md.example +0 -1244
  64. package/templates/root-consumer/guides/SETUP_FUNCTIONS.md.example +0 -114
  65. /package/templates/root-consumer/guides/{COMPONENTS_ADV.md.example → dndev/COMPONENTS_ADV.md.example} +0 -0
  66. /package/templates/root-consumer/guides/{COMPONENTS_ATOMIC.md.example → dndev/COMPONENTS_ATOMIC.md.example} +0 -0
  67. /package/templates/root-consumer/guides/{COMPONENTS_UI.md.example → dndev/COMPONENTS_UI.md.example} +0 -0
  68. /package/templates/root-consumer/guides/{ENV_SETUP.md.example → dndev/ENV_SETUP.md.example} +0 -0
  69. /package/templates/root-consumer/guides/{INDEX.md.example → dndev/INDEX.md.example} +0 -0
  70. /package/templates/root-consumer/guides/{SETUP_APP_CONFIG.md.example → dndev/SETUP_APP_CONFIG.md.example} +0 -0
  71. /package/templates/root-consumer/guides/{SETUP_BILLING.md.example → dndev/SETUP_BILLING.md.example} +0 -0
  72. /package/templates/root-consumer/guides/{SETUP_I18N.md.example → dndev/SETUP_I18N.md.example} +0 -0
  73. /package/templates/root-consumer/guides/{SETUP_LAYOUTS.md.example → dndev/SETUP_LAYOUTS.md.example} +0 -0
  74. /package/templates/root-consumer/guides/{SETUP_OAUTH.md.example → dndev/SETUP_OAUTH.md.example} +0 -0
  75. /package/templates/root-consumer/guides/{SETUP_PAGES.md.example → dndev/SETUP_PAGES.md.example} +0 -0
  76. /package/templates/root-consumer/guides/{SETUP_PWA.md.example → dndev/SETUP_PWA.md.example} +0 -0
  77. /package/templates/root-consumer/guides/{SETUP_THEMES.md.example → dndev/SETUP_THEMES.md.example} +0 -0
  78. /package/templates/root-consumer/guides/{USE_ROUTING.md.example → dndev/USE_ROUTING.md.example} +0 -0
  79. /package/templates/root-consumer/guides/{advanced → dndev/advanced}/APP_CHECK.md.example +0 -0
  80. /package/templates/root-consumer/guides/{advanced → dndev/advanced}/COOKIE_REFERENCE.md.example +0 -0
  81. /package/templates/root-consumer/guides/{advanced → dndev/advanced}/EMULATORS.md.example +0 -0
  82. /package/templates/root-consumer/guides/{advanced → dndev/advanced}/VERSION_CONTROL.md.example +0 -0
@@ -0,0 +1,223 @@
1
+ /**
2
+ * @fileoverview Example Entity Definition
3
+ *
4
+ * COPY THIS FILE and rename to your entity (e.g., Product.ts, Task.ts, Customer.ts)
5
+ *
6
+ * HOW ENTITIES WORK:
7
+ * 1. Define fields with types, visibility, validation
8
+ * 2. Set access rules (who can create/read/update/delete)
9
+ * 3. Choose which fields show in list vs card vs form views
10
+ * 4. Framework generates: Firestore queries, forms, lists, cards automatically
11
+ *
12
+ * FIRESTORE PATH: `products/{productId}` (collection name from 'collection' prop)
13
+ */
14
+
15
+ import { defineEntity } from '@donotdev/core';
16
+
17
+ // ============================================================================
18
+ // ENTITY DEFINITION
19
+ // ============================================================================
20
+
21
+ export const productEntity = defineEntity({
22
+ // Entity name - used for i18n keys, display labels
23
+ name: 'Product',
24
+
25
+ // Firestore collection path
26
+ collection: 'products',
27
+
28
+ // Fields shown in EntityList table (column order matters)
29
+ listFields: ['name', 'category', 'price', 'status'],
30
+
31
+ // Fields shown in EntityCardList (card layout)
32
+ listCardFields: ['images', 'name', 'price', 'category'],
33
+
34
+ // ==========================================================================
35
+ // ACCESS RULES - Who can do what
36
+ // ==========================================================================
37
+ //
38
+ // 'guest' → Anyone (including not logged in)
39
+ // 'user' → Any logged-in user
40
+ // 'owner' → Only the document owner (createdById matches)
41
+ // 'admin' → Only admin role
42
+ //
43
+ access: {
44
+ create: 'admin', // Only admins can create products
45
+ read: 'guest', // Anyone can view products (public catalog)
46
+ update: 'admin', // Only admins can edit
47
+ delete: 'admin', // Only admins can delete
48
+ },
49
+
50
+ // ==========================================================================
51
+ // FIELD DEFINITIONS
52
+ // ==========================================================================
53
+ //
54
+ // FIELD TYPES:
55
+ // 'text' → Single-line text input
56
+ // 'textarea' → Multi-line text
57
+ // 'number' → Numeric input
58
+ // 'email' → Email with validation
59
+ // 'tel' → Phone number with country picker
60
+ // 'select' → Dropdown with options
61
+ // 'combobox' → Searchable dropdown
62
+ // 'switch' → Toggle on/off
63
+ // 'checkbox' → Multiple selections
64
+ // 'date' → Date picker
65
+ // 'timestamp' → Date + time
66
+ // 'images' → Image upload (multiple)
67
+ // 'reference' → Link to another entity
68
+ //
69
+ // VISIBILITY:
70
+ // 'guest' → Everyone can see this field
71
+ // 'user' → Only logged-in users
72
+ // 'owner' → Only document owner
73
+ // 'admin' → Only admins
74
+ //
75
+ // EDITABLE:
76
+ // 'admin' → Only admins can edit
77
+ // 'owner' → Only owner can edit
78
+ // 'create-only' → Set on creation, read-only after
79
+ //
80
+ fields: {
81
+ // ==========================================================================
82
+ // PUBLIC FIELDS - Visible to all, editable by admin
83
+ // ==========================================================================
84
+
85
+ name: {
86
+ name: 'name',
87
+ label: 'name', // i18n key: products.fields.name
88
+ type: 'text',
89
+ visibility: 'guest',
90
+ editable: 'admin',
91
+ validation: { required: true },
92
+ },
93
+
94
+ description: {
95
+ name: 'description',
96
+ label: 'description',
97
+ type: 'textarea',
98
+ visibility: 'guest',
99
+ editable: 'admin',
100
+ validation: { required: false },
101
+ },
102
+
103
+ category: {
104
+ name: 'category',
105
+ label: 'category',
106
+ type: 'select',
107
+ visibility: 'guest',
108
+ editable: 'admin',
109
+ validation: {
110
+ required: true,
111
+ options: [
112
+ { value: 'electronics', label: 'category.electronics' },
113
+ { value: 'clothing', label: 'category.clothing' },
114
+ { value: 'home', label: 'category.home' },
115
+ { value: 'other', label: 'category.other' },
116
+ ],
117
+ },
118
+ },
119
+
120
+ price: {
121
+ name: 'price',
122
+ label: 'price',
123
+ type: 'number',
124
+ visibility: 'guest',
125
+ editable: 'admin',
126
+ validation: { required: true },
127
+ },
128
+
129
+ images: {
130
+ name: 'images',
131
+ label: 'images',
132
+ type: 'images',
133
+ visibility: 'guest',
134
+ editable: 'admin',
135
+ validation: { required: false },
136
+ },
137
+
138
+ // ==========================================================================
139
+ // ADMIN-ONLY FIELDS - Hidden from public, visible to admins
140
+ // ==========================================================================
141
+
142
+ cost: {
143
+ name: 'cost',
144
+ label: 'cost',
145
+ type: 'number',
146
+ visibility: 'admin', // Only admins see this
147
+ editable: 'admin',
148
+ validation: { required: false },
149
+ },
150
+
151
+ supplier: {
152
+ name: 'supplier',
153
+ label: 'supplier',
154
+ type: 'text',
155
+ visibility: 'admin',
156
+ editable: 'admin',
157
+ validation: { required: false },
158
+ },
159
+
160
+ // ==========================================================================
161
+ // STATUS FIELD - Framework provides draft/available/deleted by default
162
+ // ==========================================================================
163
+ // Add custom status options that extend framework defaults:
164
+
165
+ status: {
166
+ name: 'status',
167
+ label: 'status',
168
+ type: 'select',
169
+ visibility: 'admin',
170
+ validation: {
171
+ options: [
172
+ // Framework adds: draft, available, deleted
173
+ // Add your custom statuses:
174
+ { value: 'featured', label: 'status.featured' },
175
+ { value: 'clearance', label: 'status.clearance' },
176
+ ],
177
+ },
178
+ },
179
+ },
180
+ });
181
+
182
+ // ============================================================================
183
+ // USAGE EXAMPLES
184
+ // ============================================================================
185
+ //
186
+ // In a List Page:
187
+ // ```tsx
188
+ // import { EntityList } from '@donotdev/crud';
189
+ // import { productEntity } from '../entities/ExampleEntity';
190
+ //
191
+ // export default function ProductsListPage() {
192
+ // return (
193
+ // <PageContainer>
194
+ // <EntityList entity={productEntity} />
195
+ // </PageContainer>
196
+ // );
197
+ // }
198
+ // ```
199
+ //
200
+ // In a Form Page:
201
+ // ```tsx
202
+ // import { EntityFormRenderer, useCrud } from '@donotdev/crud';
203
+ // import { productEntity } from '../entities/ExampleEntity';
204
+ //
205
+ // export default function ProductPage() {
206
+ // const { get, add, update } = useCrud(productEntity);
207
+ // // ... see ExampleFormPage.tsx for full pattern
208
+ // }
209
+ // ```
210
+ //
211
+ // In a Card Grid:
212
+ // ```tsx
213
+ // import { EntityCardList } from '@donotdev/crud';
214
+ // import { productEntity } from '../entities/ExampleEntity';
215
+ //
216
+ // export default function ProductsGridPage() {
217
+ // return (
218
+ // <PageContainer>
219
+ // <EntityCardList entity={productEntity} />
220
+ // </PageContainer>
221
+ // );
222
+ // }
223
+ // ```