@idealyst/cli 1.0.83 → 1.0.85
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/dist/generators/utils.js +1 -1
- package/dist/templates/shared/src/components/HelloWorld.tsx +40 -40
- package/dist/templates/shared/src/navigation/AppRouter.tsx +10 -10
- package/dist/templates/web/README.md +0 -16
- package/dist/templates/web/package.json +1 -1
- package/dist/templates/web/src/components/TestDemo.tsx +21 -21
- package/dist/templates/web/vite.config.ts +4 -1
- package/dist/templates/workspace/.devcontainer/devcontainer.json +1 -0
- package/package.json +1 -1
- package/templates/shared/src/components/HelloWorld.tsx +40 -40
- package/templates/shared/src/navigation/AppRouter.tsx +10 -10
- package/templates/web/README.md +0 -16
- package/templates/web/package.json +1 -1
- package/templates/web/src/components/TestDemo.tsx +21 -21
- package/templates/web/vite.config.ts +63 -42
- package/templates/workspace/.devcontainer/Dockerfile +6 -3
- package/templates/workspace/.devcontainer/devcontainer.json +1 -0
- package/templates/workspace/.devcontainer/setup.sh +0 -22
- package/dist/docs/LLM-CLI-QUICK-REFERENCE.md +0 -123
- package/dist/docs/LLM-CLI-REFERENCE.md +0 -514
- package/docs/LLM-CLI-QUICK-REFERENCE.md +0 -123
- package/docs/LLM-CLI-REFERENCE.md +0 -514
- package/templates/workspace/.devcontainer/README.md +0 -0
- package/templates/workspace/.devcontainer/fix-permissions.sh +0 -0
- package/templates/workspace/.devcontainer/post-create.sh +0 -0
|
@@ -55,7 +55,7 @@ export const HelloWorld = ({
|
|
|
55
55
|
<Screen style={{ flex: 1, padding: 20 }}>
|
|
56
56
|
<View style={{ maxWidth: 600, alignSelf: "center" }}>
|
|
57
57
|
<Text
|
|
58
|
-
size="
|
|
58
|
+
size="xl"
|
|
59
59
|
weight="bold"
|
|
60
60
|
style={{
|
|
61
61
|
marginBottom: 16,
|
|
@@ -67,7 +67,7 @@ export const HelloWorld = ({
|
|
|
67
67
|
</Text>
|
|
68
68
|
|
|
69
69
|
<Text
|
|
70
|
-
size="
|
|
70
|
+
size="lg"
|
|
71
71
|
style={{
|
|
72
72
|
marginBottom: 32,
|
|
73
73
|
textAlign: "center",
|
|
@@ -79,18 +79,18 @@ export const HelloWorld = ({
|
|
|
79
79
|
{platformText}
|
|
80
80
|
</Text>
|
|
81
81
|
{/* Framework Branding Card */}
|
|
82
|
-
<Card variant="elevated" padding="
|
|
82
|
+
<Card variant="elevated" padding="lg" intent="primary">
|
|
83
83
|
<View style={{ alignItems: "center" }}>
|
|
84
84
|
<Text style={{ fontSize: 32, marginBottom: 16 }}>🚀</Text>
|
|
85
85
|
<Text
|
|
86
|
-
size="
|
|
86
|
+
size="xl"
|
|
87
87
|
weight="bold"
|
|
88
88
|
style={{ marginBottom: 8, textAlign: "center" }}
|
|
89
89
|
>
|
|
90
90
|
Idealyst Framework
|
|
91
91
|
</Text>
|
|
92
92
|
<Text
|
|
93
|
-
size="
|
|
93
|
+
size="md"
|
|
94
94
|
style={{ marginBottom: 16, textAlign: "center" }}
|
|
95
95
|
>
|
|
96
96
|
Hello, {name}! Welcome to your cross-platform workspace.
|
|
@@ -107,28 +107,28 @@ export const HelloWorld = ({
|
|
|
107
107
|
>
|
|
108
108
|
<Card
|
|
109
109
|
variant="filled"
|
|
110
|
-
padding="
|
|
110
|
+
padding="sm"
|
|
111
111
|
style={{ backgroundColor: "rgba(255, 255, 255, 0.2)" }}
|
|
112
112
|
>
|
|
113
|
-
<Text size="
|
|
113
|
+
<Text size="sm" weight="semibold">
|
|
114
114
|
React
|
|
115
115
|
</Text>
|
|
116
116
|
</Card>
|
|
117
117
|
<Card
|
|
118
118
|
variant="filled"
|
|
119
|
-
padding="
|
|
119
|
+
padding="sm"
|
|
120
120
|
style={{ backgroundColor: "rgba(255, 255, 255, 0.2)" }}
|
|
121
121
|
>
|
|
122
|
-
<Text size="
|
|
122
|
+
<Text size="sm" weight="semibold">
|
|
123
123
|
TypeScript
|
|
124
124
|
</Text>
|
|
125
125
|
</Card>
|
|
126
126
|
<Card
|
|
127
127
|
variant="filled"
|
|
128
|
-
padding="
|
|
128
|
+
padding="sm"
|
|
129
129
|
style={{ backgroundColor: "rgba(255, 255, 255, 0.2)" }}
|
|
130
130
|
>
|
|
131
|
-
<Text size="
|
|
131
|
+
<Text size="sm" weight="semibold">
|
|
132
132
|
Cross-Platform
|
|
133
133
|
</Text>
|
|
134
134
|
</Card>
|
|
@@ -137,56 +137,56 @@ export const HelloWorld = ({
|
|
|
137
137
|
</Card>
|
|
138
138
|
|
|
139
139
|
{/* Quick Start Guide Card */}
|
|
140
|
-
<Card variant="outlined" padding="
|
|
141
|
-
<Text size="
|
|
140
|
+
<Card variant="outlined" padding="lg" style={{ marginTop: 16 }}>
|
|
141
|
+
<Text size="lg" weight="bold" style={{ marginBottom: 16 }}>
|
|
142
142
|
🎯 Quick Start Guide
|
|
143
143
|
</Text>
|
|
144
144
|
|
|
145
145
|
<View style={{ marginBottom: 16 }}>
|
|
146
|
-
<Text size="
|
|
146
|
+
<Text size="md" weight="semibold" style={{ marginBottom: 8 }}>
|
|
147
147
|
Your Workspace Overview:
|
|
148
148
|
</Text>
|
|
149
|
-
<Text size="
|
|
149
|
+
<Text size="sm" style={{ marginBottom: 4 }}>
|
|
150
150
|
• <Text weight="semibold">packages/web/</Text> - React web
|
|
151
151
|
application
|
|
152
152
|
</Text>
|
|
153
|
-
<Text size="
|
|
153
|
+
<Text size="sm" style={{ marginBottom: 4 }}>
|
|
154
154
|
• <Text weight="semibold">packages/mobile/</Text> - React Native
|
|
155
155
|
mobile app
|
|
156
156
|
</Text>
|
|
157
|
-
<Text size="
|
|
157
|
+
<Text size="sm" style={{ marginBottom: 4 }}>
|
|
158
158
|
• <Text weight="semibold">packages/shared/</Text> - Cross-platform
|
|
159
159
|
components
|
|
160
160
|
</Text>
|
|
161
|
-
<Text size="
|
|
161
|
+
<Text size="sm" style={{ marginBottom: 4 }}>
|
|
162
162
|
• <Text weight="semibold">packages/api/</Text> - tRPC API server
|
|
163
163
|
</Text>
|
|
164
164
|
</View>
|
|
165
165
|
|
|
166
166
|
<View style={{ marginBottom: 16 }}>
|
|
167
|
-
<Text size="
|
|
167
|
+
<Text size="md" weight="semibold" style={{ marginBottom: 8 }}>
|
|
168
168
|
Try Editing:
|
|
169
169
|
</Text>
|
|
170
|
-
<Text size="
|
|
170
|
+
<Text size="sm" style={{ marginBottom: 4 }}>
|
|
171
171
|
1. Edit this component in{" "}
|
|
172
172
|
<Text weight="semibold">
|
|
173
173
|
packages/shared/src/components/HelloWorld.tsx
|
|
174
174
|
</Text>
|
|
175
175
|
</Text>
|
|
176
|
-
<Text size="
|
|
176
|
+
<Text size="sm" style={{ marginBottom: 4 }}>
|
|
177
177
|
2. Watch changes appear in both web and mobile apps instantly!
|
|
178
178
|
</Text>
|
|
179
|
-
<Text size="
|
|
179
|
+
<Text size="sm" style={{ marginBottom: 4 }}>
|
|
180
180
|
3. Run <Text weight="semibold">yarn dev</Text> to start all
|
|
181
181
|
development servers
|
|
182
182
|
</Text>
|
|
183
183
|
</View>
|
|
184
184
|
|
|
185
|
-
<Card variant="filled" intent="success" padding="
|
|
186
|
-
<Text size="
|
|
185
|
+
<Card variant="filled" intent="success" padding="md">
|
|
186
|
+
<Text size="sm" weight="semibold" style={{ marginBottom: 4 }}>
|
|
187
187
|
✨ Framework Features:
|
|
188
188
|
</Text>
|
|
189
|
-
<Text size="
|
|
189
|
+
<Text size="sm">
|
|
190
190
|
Shared components • Type safety • Hot reload • Cross-platform
|
|
191
191
|
compatibility
|
|
192
192
|
</Text>
|
|
@@ -194,11 +194,11 @@ export const HelloWorld = ({
|
|
|
194
194
|
</Card>
|
|
195
195
|
|
|
196
196
|
{/* API Testing Section */}
|
|
197
|
-
<Card variant="outlined" padding="
|
|
198
|
-
<Text size="
|
|
197
|
+
<Card variant="outlined" padding="lg" style={{ marginTop: 16 }}>
|
|
198
|
+
<Text size="lg" weight="bold" style={{ marginBottom: 16 }}>
|
|
199
199
|
🚀 API Demo - Database Integration
|
|
200
200
|
</Text>
|
|
201
|
-
<Text size="
|
|
201
|
+
<Text size="md" style={{ marginBottom: 16, color: "#64748b" }}>
|
|
202
202
|
Test your full-stack integration! This section demonstrates
|
|
203
203
|
real-time database operations.
|
|
204
204
|
</Text>
|
|
@@ -206,10 +206,10 @@ export const HelloWorld = ({
|
|
|
206
206
|
{/* Create New Test Form */}
|
|
207
207
|
<Card
|
|
208
208
|
variant="filled"
|
|
209
|
-
padding="
|
|
209
|
+
padding="md"
|
|
210
210
|
style={{ marginBottom: 16, backgroundColor: "#f8fafc" }}
|
|
211
211
|
>
|
|
212
|
-
<Text size="
|
|
212
|
+
<Text size="md" weight="semibold" style={{ marginBottom: 12 }}>
|
|
213
213
|
Create New Test Entry
|
|
214
214
|
</Text>
|
|
215
215
|
|
|
@@ -240,26 +240,26 @@ export const HelloWorld = ({
|
|
|
240
240
|
|
|
241
241
|
{/* Tests List */}
|
|
242
242
|
<View>
|
|
243
|
-
<Text size="
|
|
243
|
+
<Text size="md" weight="semibold" style={{ marginBottom: 12 }}>
|
|
244
244
|
Database Records ({tests.data?.length || 0})
|
|
245
245
|
</Text>
|
|
246
246
|
|
|
247
247
|
{tests.isLoading ? (
|
|
248
|
-
<Card variant="outlined" padding="
|
|
249
|
-
<Text size="
|
|
248
|
+
<Card variant="outlined" padding="md">
|
|
249
|
+
<Text size="sm" style={{ color: "#64748b" }}>
|
|
250
250
|
Loading tests...
|
|
251
251
|
</Text>
|
|
252
252
|
</Card>
|
|
253
253
|
) : tests.data?.length === 0 ? (
|
|
254
|
-
<Card variant="outlined" padding="
|
|
255
|
-
<Text size="
|
|
254
|
+
<Card variant="outlined" padding="md">
|
|
255
|
+
<Text size="sm" style={{ color: "#64748b" }}>
|
|
256
256
|
No tests found. Create one above!
|
|
257
257
|
</Text>
|
|
258
258
|
</Card>
|
|
259
259
|
) : (
|
|
260
260
|
<View style={{ gap: 8 }}>
|
|
261
261
|
{tests.data?.map((test: any) => (
|
|
262
|
-
<Card key={test.id} variant="outlined" padding="
|
|
262
|
+
<Card key={test.id} variant="outlined" padding="md">
|
|
263
263
|
<View
|
|
264
264
|
style={{
|
|
265
265
|
flexDirection: "row",
|
|
@@ -269,26 +269,26 @@ export const HelloWorld = ({
|
|
|
269
269
|
>
|
|
270
270
|
<View style={{ flex: 1 }}>
|
|
271
271
|
<Text
|
|
272
|
-
size="
|
|
272
|
+
size="sm"
|
|
273
273
|
weight="semibold"
|
|
274
274
|
style={{ marginBottom: 4 }}
|
|
275
275
|
>
|
|
276
276
|
{test.name}
|
|
277
277
|
</Text>
|
|
278
278
|
<Text
|
|
279
|
-
size="
|
|
279
|
+
size="sm"
|
|
280
280
|
style={{ color: "#64748b", marginBottom: 4 }}
|
|
281
281
|
>
|
|
282
282
|
{test.message}
|
|
283
283
|
</Text>
|
|
284
|
-
<Text size="
|
|
284
|
+
<Text size="sm" style={{ color: "#10b981" }}>
|
|
285
285
|
Status: {test.status} •{" "}
|
|
286
286
|
{new Date(test.createdAt).toLocaleDateString()}
|
|
287
287
|
</Text>
|
|
288
288
|
</View>
|
|
289
289
|
<Button
|
|
290
290
|
variant="destructive"
|
|
291
|
-
size="
|
|
291
|
+
size="sm"
|
|
292
292
|
onPress={() => handleDeleteTest(test.id)}
|
|
293
293
|
disabled={deleteTestMutation.isLoading}
|
|
294
294
|
>
|
|
@@ -6,17 +6,17 @@ import { HelloWorld } from '../components/HelloWorld';
|
|
|
6
6
|
const HomeScreen = () => (
|
|
7
7
|
<Screen>
|
|
8
8
|
<View spacing="lg">
|
|
9
|
-
<Text size="
|
|
10
|
-
<Text size="
|
|
9
|
+
<Text size="xl" weight="bold">Home</Text>
|
|
10
|
+
<Text size="md">Welcome to your {{projectName}} app!</Text>
|
|
11
11
|
<View spacing="md" style={{ marginTop: 24 }}>
|
|
12
|
-
<Text size="
|
|
12
|
+
<Text size="sm">
|
|
13
13
|
This app uses tab navigation. Navigate between tabs using the bottom bar on mobile or the top tabs on web.
|
|
14
14
|
</Text>
|
|
15
15
|
</View>
|
|
16
16
|
|
|
17
17
|
{/* API Testing Component */}
|
|
18
18
|
<View spacing="md" style={{ marginTop: 32 }}>
|
|
19
|
-
<Text size="
|
|
19
|
+
<Text size="md" weight="semibold">API Test</Text>
|
|
20
20
|
<HelloWorld name="{{projectName}}" />
|
|
21
21
|
</View>
|
|
22
22
|
</View>
|
|
@@ -26,10 +26,10 @@ const HomeScreen = () => (
|
|
|
26
26
|
const ProfileScreen = () => (
|
|
27
27
|
<Screen>
|
|
28
28
|
<View spacing="lg">
|
|
29
|
-
<Text size="
|
|
30
|
-
<Text size="
|
|
29
|
+
<Text size="xl" weight="bold">Profile</Text>
|
|
30
|
+
<Text size="md">User profile and account settings</Text>
|
|
31
31
|
<View spacing="md" style={{ marginTop: 24 }}>
|
|
32
|
-
<Text size="
|
|
32
|
+
<Text size="sm">
|
|
33
33
|
Manage your account details and preferences here.
|
|
34
34
|
</Text>
|
|
35
35
|
</View>
|
|
@@ -40,10 +40,10 @@ const ProfileScreen = () => (
|
|
|
40
40
|
const SettingsScreen = () => (
|
|
41
41
|
<Screen>
|
|
42
42
|
<View spacing="lg">
|
|
43
|
-
<Text size="
|
|
44
|
-
<Text size="
|
|
43
|
+
<Text size="xl" weight="bold">Settings</Text>
|
|
44
|
+
<Text size="md">App configuration and preferences</Text>
|
|
45
45
|
<View spacing="md" style={{ marginTop: 24 }}>
|
|
46
|
-
<Text size="
|
|
46
|
+
<Text size="sm">
|
|
47
47
|
Customize your app experience with various settings and options.
|
|
48
48
|
</Text>
|
|
49
49
|
</View>
|
package/templates/web/README.md
CHANGED
|
@@ -122,22 +122,6 @@ The app uses the Idealyst Framework for consistent UI and navigation that works
|
|
|
122
122
|
|
|
123
123
|
Edit `src/App.tsx` to start building your application.
|
|
124
124
|
|
|
125
|
-
### Styling
|
|
126
|
-
|
|
127
|
-
The app uses Unistyles for cross-platform styling. You can create styles that work on both web and mobile:
|
|
128
|
-
|
|
129
|
-
```tsx
|
|
130
|
-
import { createStyleSheet } from 'react-native-unistyles';
|
|
131
|
-
|
|
132
|
-
const styles = createStyleSheet({
|
|
133
|
-
container: {
|
|
134
|
-
flex: 1,
|
|
135
|
-
justifyContent: 'center',
|
|
136
|
-
alignItems: 'center'
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
```
|
|
140
|
-
|
|
141
125
|
### Learn More
|
|
142
126
|
|
|
143
127
|
- [Idealyst Framework Documentation](https://github.com/your-username/idealyst-framework)
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"react-dom": "^19.1.0",
|
|
31
31
|
"react-native": "^0.80.1",
|
|
32
32
|
"react-native-edge-to-edge": "^1.6.2",
|
|
33
|
-
"react-native-nitro-modules": "0.
|
|
33
|
+
"react-native-nitro-modules": "0.30.0",
|
|
34
34
|
"react-native-unistyles": "^3.0.10",
|
|
35
35
|
"react-native-web": "^0.20.0",
|
|
36
36
|
"react-router": "^7.6.3",
|
|
@@ -37,8 +37,8 @@ export const TestDemo: React.FC = () => {
|
|
|
37
37
|
|
|
38
38
|
if (isLoading) {
|
|
39
39
|
return (
|
|
40
|
-
<Card variant="outlined" padding="
|
|
41
|
-
<Text size="
|
|
40
|
+
<Card variant="outlined" padding="lg">
|
|
41
|
+
<Text size="md">Loading tests...</Text>
|
|
42
42
|
</Card>
|
|
43
43
|
);
|
|
44
44
|
}
|
|
@@ -46,21 +46,21 @@ export const TestDemo: React.FC = () => {
|
|
|
46
46
|
return (
|
|
47
47
|
<View style={{ gap: 16 }}>
|
|
48
48
|
{/* Header */}
|
|
49
|
-
<Card variant="elevated" padding="
|
|
49
|
+
<Card variant="elevated" padding="lg" intent="primary">
|
|
50
50
|
<View style={{ alignItems: 'center' }}>
|
|
51
51
|
<Text style={{ fontSize: 24, marginBottom: 8 }}>🧪</Text>
|
|
52
|
-
<Text size="
|
|
52
|
+
<Text size="lg" weight="bold" style={{ marginBottom: 8, textAlign: 'center' }}>
|
|
53
53
|
tRPC + Database Test
|
|
54
54
|
</Text>
|
|
55
|
-
<Text size="
|
|
55
|
+
<Text size="md" style={{ textAlign: 'center' }}>
|
|
56
56
|
This demonstrates end-to-end type-safe API calls from the web app to the database.
|
|
57
57
|
</Text>
|
|
58
58
|
</View>
|
|
59
59
|
</Card>
|
|
60
60
|
|
|
61
61
|
{/* Create Test Form */}
|
|
62
|
-
<Card variant="outlined" padding="
|
|
63
|
-
<Text size="
|
|
62
|
+
<Card variant="outlined" padding="lg">
|
|
63
|
+
<Text size="md" weight="bold" style={{ marginBottom: 16 }}>
|
|
64
64
|
Create New Test
|
|
65
65
|
</Text>
|
|
66
66
|
|
|
@@ -90,15 +90,15 @@ export const TestDemo: React.FC = () => {
|
|
|
90
90
|
</Card>
|
|
91
91
|
|
|
92
92
|
{/* Test Results */}
|
|
93
|
-
<Card variant="outlined" padding="
|
|
94
|
-
<Text size="
|
|
93
|
+
<Card variant="outlined" padding="lg">
|
|
94
|
+
<Text size="md" weight="bold" style={{ marginBottom: 16 }}>
|
|
95
95
|
Test Entries ({tests?.count || 0})
|
|
96
96
|
</Text>
|
|
97
97
|
|
|
98
98
|
{tests?.data && tests.data.length > 0 ? (
|
|
99
99
|
<View style={{ gap: 12 }}>
|
|
100
100
|
{tests.data.map((test) => (
|
|
101
|
-
<Card key={test.id} variant="filled" padding="
|
|
101
|
+
<Card key={test.id} variant="filled" padding="md">
|
|
102
102
|
<View style={{
|
|
103
103
|
flexDirection: 'row',
|
|
104
104
|
justifyContent: 'space-between',
|
|
@@ -106,23 +106,23 @@ export const TestDemo: React.FC = () => {
|
|
|
106
106
|
gap: 12
|
|
107
107
|
}}>
|
|
108
108
|
<View style={{ flex: 1 }}>
|
|
109
|
-
<Text size="
|
|
109
|
+
<Text size="md" weight="semibold" style={{ marginBottom: 4 }}>
|
|
110
110
|
{test.name}
|
|
111
111
|
</Text>
|
|
112
|
-
<Text size="
|
|
112
|
+
<Text size="sm" style={{ marginBottom: 8, opacity: 0.8 }}>
|
|
113
113
|
{test.message}
|
|
114
114
|
</Text>
|
|
115
115
|
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>
|
|
116
116
|
<Card
|
|
117
117
|
variant="filled"
|
|
118
|
-
padding="
|
|
118
|
+
padding="sm"
|
|
119
119
|
intent={test.status === 'active' ? 'success' : 'neutral'}
|
|
120
120
|
>
|
|
121
|
-
<Text size="
|
|
121
|
+
<Text size="sm" weight="semibold">
|
|
122
122
|
{test.status}
|
|
123
123
|
</Text>
|
|
124
124
|
</Card>
|
|
125
|
-
<Text size="
|
|
125
|
+
<Text size="sm" style={{ opacity: 0.6 }}>
|
|
126
126
|
{new Date(test.createdAt).toLocaleDateString()}
|
|
127
127
|
</Text>
|
|
128
128
|
</View>
|
|
@@ -130,7 +130,7 @@ export const TestDemo: React.FC = () => {
|
|
|
130
130
|
<Button
|
|
131
131
|
variant="outlined"
|
|
132
132
|
intent="error"
|
|
133
|
-
size="
|
|
133
|
+
size="sm"
|
|
134
134
|
onPress={() => handleDeleteTest(test.id)}
|
|
135
135
|
disabled={deleteTestMutation.isPending}
|
|
136
136
|
>
|
|
@@ -141,8 +141,8 @@ export const TestDemo: React.FC = () => {
|
|
|
141
141
|
))}
|
|
142
142
|
</View>
|
|
143
143
|
) : (
|
|
144
|
-
<Card variant="filled" padding="
|
|
145
|
-
<Text size="
|
|
144
|
+
<Card variant="filled" padding="md" style={{ opacity: 0.6 }}>
|
|
145
|
+
<Text size="sm" style={{ textAlign: 'center' }}>
|
|
146
146
|
No tests found. Create one above to get started!
|
|
147
147
|
</Text>
|
|
148
148
|
</Card>
|
|
@@ -150,11 +150,11 @@ export const TestDemo: React.FC = () => {
|
|
|
150
150
|
</Card>
|
|
151
151
|
|
|
152
152
|
{/* Type Safety Info */}
|
|
153
|
-
<Card variant="filled" intent="success" padding="
|
|
154
|
-
<Text size="
|
|
153
|
+
<Card variant="filled" intent="success" padding="md">
|
|
154
|
+
<Text size="sm" weight="semibold" style={{ marginBottom: 4 }}>
|
|
155
155
|
✨ Type Safety Features:
|
|
156
156
|
</Text>
|
|
157
|
-
<Text size="
|
|
157
|
+
<Text size="sm">
|
|
158
158
|
• Full TypeScript types from database to frontend • tRPC ensures API type safety •
|
|
159
159
|
Prisma provides database schema validation • Real-time type checking across the stack
|
|
160
160
|
</Text>
|
|
@@ -1,28 +1,43 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import react from "@vitejs/plugin-react";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { defineConfig } from "vite";
|
|
4
|
+
import babel from "vite-plugin-babel";
|
|
5
5
|
|
|
6
6
|
// https://vitejs.dev/config/
|
|
7
7
|
export default defineConfig({
|
|
8
8
|
plugins: [
|
|
9
9
|
babel({
|
|
10
|
-
filter: (id) =>
|
|
10
|
+
filter: (id) =>
|
|
11
|
+
id.includes("node_modules/@idealyst/") ||
|
|
12
|
+
(id.includes("/packages/") &&
|
|
13
|
+
!id.includes("/packages/web/") &&
|
|
14
|
+
/\.(tsx?|jsx?)$/.test(id)),
|
|
11
15
|
babelConfig: {
|
|
12
16
|
presets: [
|
|
13
|
-
[
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
["@babel/preset-react", { runtime: "automatic" }],
|
|
18
|
+
[
|
|
19
|
+
"@babel/preset-typescript",
|
|
20
|
+
{
|
|
21
|
+
isTSX: true,
|
|
22
|
+
allExtensions: true,
|
|
23
|
+
},
|
|
24
|
+
],
|
|
17
25
|
],
|
|
18
26
|
plugins: [
|
|
19
|
-
[
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
[
|
|
28
|
+
"react-native-unistyles/plugin",
|
|
29
|
+
{
|
|
30
|
+
root: "src",
|
|
31
|
+
autoProcessPaths: [
|
|
32
|
+
"@idealyst/components",
|
|
33
|
+
"@idealyst/navigation",
|
|
34
|
+
"@idealyst/theme",
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
["@idealyst/components/plugin/web", { root: "src" }],
|
|
39
|
+
],
|
|
40
|
+
},
|
|
26
41
|
}),
|
|
27
42
|
// Then process everything else with React plugin
|
|
28
43
|
react(),
|
|
@@ -30,48 +45,54 @@ export default defineConfig({
|
|
|
30
45
|
resolve: {
|
|
31
46
|
alias: {
|
|
32
47
|
// Use absolute path to resolve react-native-web properly
|
|
33
|
-
|
|
34
|
-
|
|
48
|
+
"react-native": path.resolve(__dirname, "node_modules/react-native-web"),
|
|
49
|
+
"@react-native/normalize-colors": path.resolve(
|
|
50
|
+
__dirname,
|
|
51
|
+
"../../node_modules/@react-native/normalize-colors"
|
|
52
|
+
),
|
|
35
53
|
},
|
|
36
54
|
// Platform-specific file resolution
|
|
37
|
-
extensions: [
|
|
55
|
+
extensions: [".web.tsx", ".web.ts", ".tsx", ".ts", ".js", ".jsx"],
|
|
38
56
|
// Ensure proper resolution of package exports
|
|
39
|
-
conditions: [
|
|
57
|
+
conditions: ["browser", "import", "module", "default"],
|
|
40
58
|
// Ensure workspace dependencies resolve properly
|
|
41
|
-
preserveSymlinks: false
|
|
59
|
+
preserveSymlinks: false,
|
|
42
60
|
},
|
|
43
61
|
define: {
|
|
44
|
-
global:
|
|
62
|
+
global: "globalThis",
|
|
45
63
|
__DEV__: JSON.stringify(true),
|
|
46
64
|
},
|
|
47
65
|
optimizeDeps: {
|
|
48
66
|
include: [
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
'@mdi/js',
|
|
67
|
+
"react-native-web",
|
|
68
|
+
"react-native-unistyles",
|
|
69
|
+
"react-native-unistyles/web",
|
|
70
|
+
"@mdi/react",
|
|
71
|
+
"@mdi/js",
|
|
55
72
|
],
|
|
56
73
|
exclude: [
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
74
|
+
"react-native-edge-to-edge",
|
|
75
|
+
"react-native-nitro-modules",
|
|
76
|
+
"@idealyst/components",
|
|
77
|
+
"@idealyst/navigation",
|
|
78
|
+
"@idealyst/theme",
|
|
79
|
+
"@test/shared",
|
|
63
80
|
],
|
|
64
81
|
esbuildOptions: {
|
|
65
82
|
loader: {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
83
|
+
".tsx": "tsx",
|
|
84
|
+
".ts": "ts",
|
|
85
|
+
".jsx": "jsx",
|
|
86
|
+
".js": "jsx", // Important: treat .js files as JSX for React Native compatibility
|
|
87
|
+
},
|
|
88
|
+
alias: {
|
|
89
|
+
"react-native": path.resolve(__dirname, "node_modules/react-native-web"),
|
|
90
|
+
"@react-native/normalize-colors": path.resolve(__dirname, "../../node_modules/@react-native/normalize-colors"),
|
|
91
|
+
},
|
|
92
|
+
},
|
|
72
93
|
},
|
|
73
94
|
server: {
|
|
74
|
-
host:
|
|
95
|
+
host: "0.0.0.0",
|
|
75
96
|
port: 5173,
|
|
76
97
|
},
|
|
77
|
-
})
|
|
98
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
FROM node:20-bullseye
|
|
2
2
|
|
|
3
|
-
# Install additional tools
|
|
3
|
+
# Install additional tools including gosu for proper user switching
|
|
4
4
|
RUN apt-get update && apt-get install -y \
|
|
5
5
|
git \
|
|
6
6
|
postgresql-client \
|
|
@@ -18,6 +18,9 @@ RUN git config --global init.defaultBranch main
|
|
|
18
18
|
# Create workspace directory
|
|
19
19
|
RUN mkdir -p /workspace
|
|
20
20
|
WORKDIR /workspace
|
|
21
|
+
RUN chown -R node:node /workspace
|
|
21
22
|
|
|
22
|
-
#
|
|
23
|
-
|
|
23
|
+
# Note: We don't switch to node user here anymore - entrypoint.sh will do it
|
|
24
|
+
# This allows the entrypoint to fix permissions as root first
|
|
25
|
+
|
|
26
|
+
USER node
|
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
echo "🚀 Setting up Idealyst development environment..."
|
|
4
4
|
|
|
5
|
-
# Install dependencies
|
|
6
|
-
echo "📦 Installing dependencies..."
|
|
7
|
-
yarn install
|
|
8
|
-
|
|
9
5
|
# Create environment file if it doesn't exist
|
|
10
6
|
if [ ! -f ".env" ]; then
|
|
11
7
|
echo "📝 Creating .env file..."
|
|
@@ -42,24 +38,6 @@ until pg_isready -h postgres -p 5432 -U postgres; do
|
|
|
42
38
|
sleep 1
|
|
43
39
|
done
|
|
44
40
|
|
|
45
|
-
echo "✅ Database is ready!"
|
|
46
|
-
|
|
47
|
-
# Run database migrations if they exist
|
|
48
|
-
if [ -d "packages" ]; then
|
|
49
|
-
echo "🗄️ Setting up database..."
|
|
50
|
-
|
|
51
|
-
# Check if any package has prisma
|
|
52
|
-
for package_dir in packages/*/; do
|
|
53
|
-
if [ -f "${package_dir}prisma/schema.prisma" ]; then
|
|
54
|
-
echo "Running Prisma setup for $(basename "$package_dir")..."
|
|
55
|
-
cd "$package_dir"
|
|
56
|
-
npx prisma generate
|
|
57
|
-
npx prisma db push
|
|
58
|
-
cd /workspace
|
|
59
|
-
fi
|
|
60
|
-
done
|
|
61
|
-
fi
|
|
62
|
-
|
|
63
41
|
echo "Add Figma MCP to Claude Code"
|
|
64
42
|
claude mcp add -t sse figma-mcp http://figma-mcp:3333/sse
|
|
65
43
|
|