@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.
- package/dependencies-matrix.json +25 -7
- package/dist/bin/commands/build.js +156 -158
- package/dist/bin/commands/bump.js +153 -153
- package/dist/bin/commands/cacheout.js +154 -154
- package/dist/bin/commands/create-app.js +184 -156
- package/dist/bin/commands/create-project.js +154 -154
- package/dist/bin/commands/deploy.js +470 -470
- package/dist/bin/commands/dev.js +155 -155
- package/dist/bin/commands/emu.js +155 -155
- package/dist/bin/commands/format.js +154 -154
- package/dist/bin/commands/lint.js +157 -154
- package/dist/bin/commands/preview.js +155 -155
- package/dist/bin/commands/sync-secrets.js +155 -155
- package/dist/bin/commands/wai.d.ts +11 -0
- package/dist/bin/commands/wai.d.ts.map +1 -0
- package/dist/bin/commands/wai.js +12 -0
- package/dist/bin/commands/wai.js.map +1 -0
- package/dist/bin/dndev.js +24 -8
- package/dist/bin/donotdev.js +24 -8
- package/dist/index.js +524 -497
- package/package.json +1 -1
- package/templates/app-demo/src/config/app.ts.example +12 -0
- package/templates/app-next/src/config/app.ts.example +75 -48
- package/templates/app-vite/index.html.example +71 -37
- package/templates/app-vite/src/config/app.ts.example +75 -47
- package/templates/app-vite/src/pages/FormPageExample.tsx.example +152 -0
- package/templates/app-vite/src/pages/HomePage.tsx.example +81 -134
- package/templates/app-vite/src/pages/ListPageExample.tsx.example +88 -0
- package/templates/functions-firebase/build.mjs.example +8 -1
- package/templates/functions-firebase/functions-firebase/build.mjs.example +8 -1
- package/templates/functions-firebase/functions-firebase/src/index.ts.example +19 -25
- package/templates/functions-firebase/functions.config.js.example +35 -0
- package/templates/root-consumer/entities/ExampleEntity.ts.example +223 -0
- package/templates/root-consumer/entities/demo.ts.example +562 -0
- package/templates/root-consumer/entities/index.ts.example +15 -0
- package/templates/root-consumer/guides/{AGENT_START_HERE.md.example → dndev/AGENT_START_HERE.md.example} +22 -0
- package/templates/root-consumer/guides/dndev/COMPONENTS_CRUD.md.example +231 -0
- package/templates/root-consumer/guides/{SETUP_AUTH.md.example → dndev/SETUP_AUTH.md.example} +30 -0
- package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +473 -0
- package/templates/root-consumer/guides/dndev/SETUP_FUNCTIONS.md.example +116 -0
- package/templates/root-consumer/guides/wai-way/WAI_WAY_CLI.md.example +404 -0
- package/templates/root-consumer/guides/wai-way/agents/architect.md.example +78 -0
- package/templates/root-consumer/guides/wai-way/agents/builder.md.example +87 -0
- package/templates/root-consumer/guides/wai-way/agents/extractor.md.example +325 -0
- package/templates/root-consumer/guides/wai-way/agents/polisher.md.example +100 -0
- package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +281 -0
- package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +77 -0
- package/templates/root-consumer/guides/wai-way/blueprints/2_entities.md.example +104 -0
- package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +124 -0
- package/templates/root-consumer/guides/wai-way/blueprints/4_configure.md.example +165 -0
- package/templates/root-consumer/guides/wai-way/context_map.json.example +95 -0
- package/templates/root-consumer/guides/wai-way/entity_patterns.md.example +840 -0
- package/templates/root-consumer/guides/wai-way/page_patterns.md.example +686 -0
- package/templates/root-consumer/guides/wai-way/presets_guide.md.example +217 -0
- package/templates/root-consumer/guides/wai-way/spec_template.md.example +312 -0
- package/templates/functions-firebase/functions-firebase/src/crud/createEntity.ts.example +0 -19
- package/templates/functions-firebase/functions-firebase/src/crud/deleteEntity.ts.example +0 -14
- package/templates/functions-firebase/functions-firebase/src/crud/getEntity.ts.example +0 -14
- package/templates/functions-firebase/functions-firebase/src/crud/index.ts.example +0 -12
- package/templates/functions-firebase/functions-firebase/src/crud/listEntities.ts.example +0 -14
- package/templates/functions-firebase/functions-firebase/src/crud/updateEntity.ts.example +0 -14
- package/templates/root-consumer/guides/COMPONENTS_CRUD.md.example +0 -70
- package/templates/root-consumer/guides/SETUP_CRUD.md.example +0 -1244
- package/templates/root-consumer/guides/SETUP_FUNCTIONS.md.example +0 -114
- /package/templates/root-consumer/guides/{COMPONENTS_ADV.md.example → dndev/COMPONENTS_ADV.md.example} +0 -0
- /package/templates/root-consumer/guides/{COMPONENTS_ATOMIC.md.example → dndev/COMPONENTS_ATOMIC.md.example} +0 -0
- /package/templates/root-consumer/guides/{COMPONENTS_UI.md.example → dndev/COMPONENTS_UI.md.example} +0 -0
- /package/templates/root-consumer/guides/{ENV_SETUP.md.example → dndev/ENV_SETUP.md.example} +0 -0
- /package/templates/root-consumer/guides/{INDEX.md.example → dndev/INDEX.md.example} +0 -0
- /package/templates/root-consumer/guides/{SETUP_APP_CONFIG.md.example → dndev/SETUP_APP_CONFIG.md.example} +0 -0
- /package/templates/root-consumer/guides/{SETUP_BILLING.md.example → dndev/SETUP_BILLING.md.example} +0 -0
- /package/templates/root-consumer/guides/{SETUP_I18N.md.example → dndev/SETUP_I18N.md.example} +0 -0
- /package/templates/root-consumer/guides/{SETUP_LAYOUTS.md.example → dndev/SETUP_LAYOUTS.md.example} +0 -0
- /package/templates/root-consumer/guides/{SETUP_OAUTH.md.example → dndev/SETUP_OAUTH.md.example} +0 -0
- /package/templates/root-consumer/guides/{SETUP_PAGES.md.example → dndev/SETUP_PAGES.md.example} +0 -0
- /package/templates/root-consumer/guides/{SETUP_PWA.md.example → dndev/SETUP_PWA.md.example} +0 -0
- /package/templates/root-consumer/guides/{SETUP_THEMES.md.example → dndev/SETUP_THEMES.md.example} +0 -0
- /package/templates/root-consumer/guides/{USE_ROUTING.md.example → dndev/USE_ROUTING.md.example} +0 -0
- /package/templates/root-consumer/guides/{advanced → dndev/advanced}/APP_CHECK.md.example +0 -0
- /package/templates/root-consumer/guides/{advanced → dndev/advanced}/COOKIE_REFERENCE.md.example +0 -0
- /package/templates/root-consumer/guides/{advanced → dndev/advanced}/EMULATORS.md.example +0 -0
- /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
|
+
// ```
|