@idealyst/cli 1.0.33 → 1.0.35
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/templates/api/README.md +207 -0
- package/dist/templates/api/__tests__/api.test.ts +26 -0
- package/dist/templates/api/env.example +12 -0
- package/dist/templates/api/jest.config.js +23 -0
- package/dist/templates/api/jest.setup.js +9 -0
- package/dist/templates/api/package.json +62 -0
- package/dist/templates/api/prisma/schema.prisma +21 -0
- package/dist/templates/api/src/context.ts +23 -0
- package/dist/templates/api/src/controllers/UserController.ts +102 -0
- package/dist/templates/api/src/index.ts +14 -0
- package/dist/templates/api/src/lib/controller.ts +90 -0
- package/dist/templates/api/src/lib/middleware.ts +170 -0
- package/dist/templates/api/src/middleware/auth.ts +75 -0
- package/dist/templates/api/src/middleware/common.ts +103 -0
- package/dist/templates/api/src/router/index.ts +130 -0
- package/dist/templates/api/src/server.ts +50 -0
- package/dist/templates/api/src/trpc.ts +28 -0
- package/dist/templates/api/tsconfig.json +44 -0
- package/dist/templates/native/.yarnrc.yml +19 -0
- package/dist/templates/native/App.tsx +23 -0
- package/dist/templates/native/README.md +86 -0
- package/dist/templates/native/__tests__/App.test.tsx +156 -0
- package/dist/templates/native/__tests__/components.test.tsx +300 -0
- package/dist/templates/native/app.json +5 -0
- package/dist/templates/native/babel.config.js +10 -0
- package/dist/templates/native/index.js +6 -0
- package/dist/templates/native/jest.config.js +21 -0
- package/dist/templates/native/jest.setup.js +12 -0
- package/dist/templates/native/metro.config.js +27 -0
- package/dist/templates/native/package.json +44 -0
- package/dist/templates/native/src/App-with-trpc.tsx +59 -0
- package/dist/templates/native/src/utils/trpc.ts +127 -0
- package/dist/templates/native/tsconfig.json +30 -0
- package/dist/templates/shared/README.md +109 -0
- package/dist/templates/shared/__tests__/shared.test.ts +39 -0
- package/dist/templates/shared/jest.config.js +22 -0
- package/dist/templates/shared/package.json +50 -0
- package/dist/templates/shared/rollup.config.js +43 -0
- package/dist/templates/shared/src/index.ts +1 -0
- package/dist/templates/shared/tsconfig.json +25 -0
- package/dist/templates/web/README.md +90 -0
- package/dist/templates/web/__tests__/App.test.tsx +342 -0
- package/dist/templates/web/__tests__/components.test.tsx +564 -0
- package/dist/templates/web/index.html +13 -0
- package/dist/templates/web/jest.config.js +27 -0
- package/dist/templates/web/jest.setup.js +24 -0
- package/dist/templates/web/package.json +66 -0
- package/dist/templates/web/src/App-with-trpc.tsx +67 -0
- package/dist/templates/web/src/App.tsx +15 -0
- package/dist/templates/web/src/main.tsx +25 -0
- package/dist/templates/web/src/utils/trpc.ts +93 -0
- package/dist/templates/web/tsconfig.json +27 -0
- package/dist/templates/web/vite.config.ts +69 -0
- package/dist/templates/workspace/.devcontainer/devcontainer.json +140 -0
- package/dist/templates/workspace/.devcontainer/docker-compose.yml +74 -0
- package/dist/templates/workspace/.dockerignore +151 -0
- package/dist/templates/workspace/.env.example +36 -0
- package/dist/templates/workspace/.env.production +56 -0
- package/dist/templates/workspace/.yarnrc.yml +26 -0
- package/dist/templates/workspace/DOCKER.md +0 -0
- package/dist/templates/workspace/Dockerfile +93 -0
- package/dist/templates/workspace/README.md +179 -0
- package/dist/templates/workspace/docker/nginx/prod.conf +238 -0
- package/dist/templates/workspace/docker/nginx.conf +131 -0
- package/dist/templates/workspace/docker/postgres/init.sql +41 -0
- package/dist/templates/workspace/docker/prometheus/prometheus.yml +52 -0
- package/dist/templates/workspace/docker-compose.prod.yml +146 -0
- package/dist/templates/workspace/docker-compose.yml +144 -0
- package/dist/templates/workspace/jest.config.js +20 -0
- package/dist/templates/workspace/package.json +35 -0
- package/dist/templates/workspace/scripts/docker/db-backup.sh +230 -0
- package/dist/templates/workspace/scripts/docker/deploy.sh +212 -0
- package/dist/templates/workspace/scripts/docker-build.sh +151 -0
- package/dist/templates/workspace/scripts/test-runner.js +120 -0
- package/dist/templates/workspace/setup.sh +205 -0
- package/package.json +3 -2
- package/templates/workspace/.devcontainer/Dockerfile +22 -0
- package/templates/workspace/.devcontainer/devcontainer.json +0 -140
- package/templates/workspace/.devcontainer/docker-compose.yml +13 -26
- package/templates/workspace/.devcontainer/setup.sh +64 -0
- package/templates/workspace/Dockerfile +24 -6
- /package/{templates → dist/templates}/workspace/.devcontainer/post-create.sh +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
3
|
+
import { httpBatchLink } from '@trpc/client';
|
|
4
|
+
import { Screen, Text, View } from '@idealyst/components';
|
|
5
|
+
import { trpc } from './utils/trpc';
|
|
6
|
+
|
|
7
|
+
// Create tRPC client
|
|
8
|
+
const queryClient = new QueryClient();
|
|
9
|
+
|
|
10
|
+
const trpcClient = trpc.createClient({
|
|
11
|
+
links: [
|
|
12
|
+
httpBatchLink({
|
|
13
|
+
url: 'http://localhost:3000/trpc', // Update this to your API URL
|
|
14
|
+
// For device testing, you might need: 'http://192.168.1.xxx:3000/trpc'
|
|
15
|
+
// Optional: Add headers for authentication
|
|
16
|
+
// headers() {
|
|
17
|
+
// return {
|
|
18
|
+
// authorization: getAuthToken(),
|
|
19
|
+
// };
|
|
20
|
+
// },
|
|
21
|
+
}),
|
|
22
|
+
],
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
function App() {
|
|
26
|
+
// Example tRPC usage
|
|
27
|
+
const { data, isLoading, error } = trpc.hello.useQuery({ name: 'React Native' });
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<trpc.Provider client={trpcClient} queryClient={queryClient}>
|
|
31
|
+
<QueryClientProvider client={queryClient}>
|
|
32
|
+
<Screen>
|
|
33
|
+
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center', padding: 20 }}>
|
|
34
|
+
<Text variant="h1" style={{ textAlign: 'center', marginBottom: 20 }}>
|
|
35
|
+
Welcome to {{appName}}!
|
|
36
|
+
</Text>
|
|
37
|
+
<Text variant="body" style={{ textAlign: 'center', marginBottom: 20 }}>
|
|
38
|
+
This is a React Native app built with the Idealyst Framework
|
|
39
|
+
</Text>
|
|
40
|
+
|
|
41
|
+
{/* tRPC Example */}
|
|
42
|
+
<View style={{ marginTop: 20, alignItems: 'center' }}>
|
|
43
|
+
<Text variant="h3" style={{ marginBottom: 10 }}>tRPC Example:</Text>
|
|
44
|
+
{isLoading && <Text>Loading...</Text>}
|
|
45
|
+
{error && <Text>Error: {error.message}</Text>}
|
|
46
|
+
{data && <Text style={{ textAlign: 'center' }}>{data.greeting}</Text>}
|
|
47
|
+
</View>
|
|
48
|
+
|
|
49
|
+
<Text variant="caption" style={{ textAlign: 'center', marginTop: 30 }}>
|
|
50
|
+
Edit src/App.tsx to get started
|
|
51
|
+
</Text>
|
|
52
|
+
</View>
|
|
53
|
+
</Screen>
|
|
54
|
+
</QueryClientProvider>
|
|
55
|
+
</trpc.Provider>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export default App;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { createTRPCReact } from '@trpc/react-query';
|
|
2
|
+
import { createTRPCProxyClient, httpBatchLink } from '@trpc/client';
|
|
3
|
+
|
|
4
|
+
// Import your API types here when you have an API project
|
|
5
|
+
// Example: import type { AppRouter } from '@your-workspace/api';
|
|
6
|
+
|
|
7
|
+
// For now, we'll use a generic type that you can replace
|
|
8
|
+
type AppRouter = any;
|
|
9
|
+
|
|
10
|
+
// Create the tRPC React hooks
|
|
11
|
+
export const trpc = createTRPCReact<AppRouter>();
|
|
12
|
+
|
|
13
|
+
// Create a vanilla client (for use outside of React components)
|
|
14
|
+
export const trpcClient = createTRPCProxyClient<AppRouter>({
|
|
15
|
+
links: [
|
|
16
|
+
httpBatchLink({
|
|
17
|
+
url: 'http://localhost:3000/trpc', // Update this to match your API URL
|
|
18
|
+
// Optional: Add headers for authentication
|
|
19
|
+
// headers() {
|
|
20
|
+
// return {
|
|
21
|
+
// authorization: getAuthToken(),
|
|
22
|
+
// };
|
|
23
|
+
// },
|
|
24
|
+
}),
|
|
25
|
+
],
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
Usage Examples for React Native:
|
|
30
|
+
|
|
31
|
+
1. First, install the required dependencies:
|
|
32
|
+
yarn add @trpc/client @trpc/react-query @tanstack/react-query
|
|
33
|
+
|
|
34
|
+
2. Replace the AppRouter type import above with your actual API router:
|
|
35
|
+
import type { AppRouter } from '@your-workspace/api';
|
|
36
|
+
|
|
37
|
+
3. Set up the tRPC provider in your App component:
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import React from 'react';
|
|
41
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
42
|
+
import { httpBatchLink } from '@trpc/client';
|
|
43
|
+
import { trpc } from './src/utils/trpc';
|
|
44
|
+
|
|
45
|
+
const queryClient = new QueryClient();
|
|
46
|
+
|
|
47
|
+
const trpcClient = trpc.createClient({
|
|
48
|
+
links: [
|
|
49
|
+
httpBatchLink({
|
|
50
|
+
url: 'http://localhost:3000/trpc', // Use your computer's IP for device testing
|
|
51
|
+
// For device testing, you might need: 'http://192.168.1.xxx:3000/trpc'
|
|
52
|
+
}),
|
|
53
|
+
],
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
function App() {
|
|
57
|
+
return (
|
|
58
|
+
<trpc.Provider client={trpcClient} queryClient={queryClient}>
|
|
59
|
+
<QueryClientProvider client={queryClient}>
|
|
60
|
+
// Your app components
|
|
61
|
+
</QueryClientProvider>
|
|
62
|
+
</trpc.Provider>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export default App;
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
4. Use tRPC in your React Native components:
|
|
70
|
+
|
|
71
|
+
```tsx
|
|
72
|
+
import React from 'react';
|
|
73
|
+
import { View, Text, ScrollView, TouchableOpacity } from 'react-native';
|
|
74
|
+
import { trpc } from '../utils/trpc';
|
|
75
|
+
|
|
76
|
+
function UsersList() {
|
|
77
|
+
const { data: users, isLoading, refetch } = trpc.users.getAll.useQuery();
|
|
78
|
+
const createUser = trpc.users.create.useMutation({
|
|
79
|
+
onSuccess: () => {
|
|
80
|
+
refetch(); // Refresh the list after creating
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
if (isLoading) {
|
|
85
|
+
return (
|
|
86
|
+
<View>
|
|
87
|
+
<Text>Loading...</Text>
|
|
88
|
+
</View>
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return (
|
|
93
|
+
<ScrollView>
|
|
94
|
+
{users?.map(user => (
|
|
95
|
+
<View key={user.id}>
|
|
96
|
+
<Text>{user.name}</Text>
|
|
97
|
+
<Text>{user.email}</Text>
|
|
98
|
+
</View>
|
|
99
|
+
))}
|
|
100
|
+
<TouchableOpacity
|
|
101
|
+
onPress={() => createUser.mutate({
|
|
102
|
+
email: 'test@example.com',
|
|
103
|
+
name: 'Test User'
|
|
104
|
+
})}
|
|
105
|
+
>
|
|
106
|
+
<Text>Create User</Text>
|
|
107
|
+
</TouchableOpacity>
|
|
108
|
+
</ScrollView>
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
5. For device testing, make sure to:
|
|
114
|
+
- Use your computer's IP address instead of localhost
|
|
115
|
+
- Ensure your API server is accessible from the device
|
|
116
|
+
- Consider using ngrok for external testing
|
|
117
|
+
|
|
118
|
+
6. Error handling example:
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
const { data, error, isLoading } = trpc.users.getAll.useQuery();
|
|
122
|
+
|
|
123
|
+
if (error) {
|
|
124
|
+
return <Text>Error: {error.message}</Text>;
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
*/
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "@react-native/typescript-config/tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"allowJs": true,
|
|
5
|
+
"allowSyntheticDefaultImports": true,
|
|
6
|
+
"esModuleInterop": true,
|
|
7
|
+
"isolatedModules": true,
|
|
8
|
+
"jsx": "react-native",
|
|
9
|
+
"lib": ["es2017"],
|
|
10
|
+
"moduleResolution": "node",
|
|
11
|
+
"noEmit": true,
|
|
12
|
+
"strict": true,
|
|
13
|
+
"target": "esnext",
|
|
14
|
+
"skipLibCheck": true,
|
|
15
|
+
"resolveJsonModule": true,
|
|
16
|
+
"baseUrl": "./",
|
|
17
|
+
"paths": {
|
|
18
|
+
"@/*": ["./src/*"]
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"include": [
|
|
22
|
+
"src/**/*",
|
|
23
|
+
"index.js"
|
|
24
|
+
],
|
|
25
|
+
"exclude": [
|
|
26
|
+
"node_modules",
|
|
27
|
+
"android",
|
|
28
|
+
"ios"
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# {{projectName}}
|
|
2
|
+
|
|
3
|
+
{{description}}
|
|
4
|
+
|
|
5
|
+
## Getting Started
|
|
6
|
+
|
|
7
|
+
This is a shared library built with the Idealyst Framework that can be used across React Native and React web applications.
|
|
8
|
+
|
|
9
|
+
### Prerequisites
|
|
10
|
+
|
|
11
|
+
- Node.js 18+
|
|
12
|
+
- Yarn
|
|
13
|
+
|
|
14
|
+
### Installation
|
|
15
|
+
|
|
16
|
+
Install dependencies:
|
|
17
|
+
```bash
|
|
18
|
+
yarn install
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Development
|
|
22
|
+
|
|
23
|
+
Build the library:
|
|
24
|
+
```bash
|
|
25
|
+
yarn build
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Watch for changes during development:
|
|
29
|
+
```bash
|
|
30
|
+
yarn dev
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Project Structure
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
{{projectName}}/
|
|
37
|
+
├── src/
|
|
38
|
+
│ ├── components/ # Shared components
|
|
39
|
+
│ ├── utils/ # Utility functions
|
|
40
|
+
│ ├── types/ # TypeScript types
|
|
41
|
+
│ └── index.ts # Main export file
|
|
42
|
+
├── dist/ # Built library (generated)
|
|
43
|
+
├── rollup.config.js # Build configuration
|
|
44
|
+
└── tsconfig.json # TypeScript configuration
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Features
|
|
48
|
+
|
|
49
|
+
- **Cross-platform**: Works on both React Native and React web
|
|
50
|
+
- **TypeScript**: Full type safety
|
|
51
|
+
- **Tree-shakeable**: Optimized for bundle size
|
|
52
|
+
- **Peer Dependencies**: Lightweight by design
|
|
53
|
+
- **Idealyst Theme Integration**: Compatible with the Idealyst theming system
|
|
54
|
+
|
|
55
|
+
### Usage
|
|
56
|
+
|
|
57
|
+
After building, you can import and use the library in your projects:
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
import { SharedComponent, toTitleCase, ComponentProps } from '{{packageName}}';
|
|
61
|
+
|
|
62
|
+
// Use the shared component
|
|
63
|
+
<SharedComponent
|
|
64
|
+
title="Hello World"
|
|
65
|
+
description="This works on both web and mobile!"
|
|
66
|
+
/>
|
|
67
|
+
|
|
68
|
+
// Use utility functions
|
|
69
|
+
const formatted = toTitleCase('hello world'); // "Hello World"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Building for Production
|
|
73
|
+
|
|
74
|
+
Build the library:
|
|
75
|
+
```bash
|
|
76
|
+
yarn build
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This creates:
|
|
80
|
+
- `dist/index.js` - CommonJS build
|
|
81
|
+
- `dist/index.esm.js` - ES modules build
|
|
82
|
+
- `dist/index.d.ts` - TypeScript declarations
|
|
83
|
+
|
|
84
|
+
### Publishing
|
|
85
|
+
|
|
86
|
+
Before publishing, make sure to:
|
|
87
|
+
|
|
88
|
+
1. Update the version in `package.json`
|
|
89
|
+
2. Build the library: `yarn build`
|
|
90
|
+
3. Publish to npm: `npm publish`
|
|
91
|
+
|
|
92
|
+
### Development in Monorepo
|
|
93
|
+
|
|
94
|
+
If you're using this in a monorepo, you can reference it directly:
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"dependencies": {
|
|
99
|
+
"{{packageName}}": "workspace:*"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Learn More
|
|
105
|
+
|
|
106
|
+
- [Idealyst Framework Documentation](https://github.com/your-username/idealyst-framework)
|
|
107
|
+
- [React Native Documentation](https://reactnative.dev/)
|
|
108
|
+
- [React Documentation](https://react.dev/)
|
|
109
|
+
- [Rollup Documentation](https://rollupjs.org/)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { add_stuff } from '../src/index';
|
|
2
|
+
|
|
3
|
+
describe('Shared Library', () => {
|
|
4
|
+
it('should export add_stuff', () => {
|
|
5
|
+
expect(add_stuff).toBeDefined();
|
|
6
|
+
expect(typeof add_stuff).toBe('string');
|
|
7
|
+
expect(add_stuff).toBe('here');
|
|
8
|
+
});
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
describe('Sample Shared Tests', () => {
|
|
12
|
+
it('should pass a basic test', () => {
|
|
13
|
+
expect(1 + 1).toBe(2);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('should handle string operations', () => {
|
|
17
|
+
const testString = 'Hello World';
|
|
18
|
+
expect(testString).toContain('World');
|
|
19
|
+
expect(testString.length).toBe(11);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('should work with objects', () => {
|
|
23
|
+
const testObj = { name: 'test', value: 42 };
|
|
24
|
+
expect(testObj).toHaveProperty('name');
|
|
25
|
+
expect(testObj).toHaveProperty('value', 42);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('should handle arrays', () => {
|
|
29
|
+
const testArray = [1, 2, 3, 4, 5];
|
|
30
|
+
expect(testArray).toHaveLength(5);
|
|
31
|
+
expect(testArray).toContain(3);
|
|
32
|
+
expect(testArray.filter(x => x > 3)).toEqual([4, 5]);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('should work with async operations', async () => {
|
|
36
|
+
const result = await Promise.resolve('async test');
|
|
37
|
+
expect(result).toBe('async test');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** @type {import('jest').Config} */
|
|
2
|
+
module.exports = {
|
|
3
|
+
preset: 'ts-jest',
|
|
4
|
+
testEnvironment: 'node',
|
|
5
|
+
roots: ['<rootDir>/src', '<rootDir>/__tests__'],
|
|
6
|
+
testMatch: [
|
|
7
|
+
'**/__tests__/**/*.{ts,tsx,js}',
|
|
8
|
+
'**/*.{test,spec}.{ts,tsx,js}'
|
|
9
|
+
],
|
|
10
|
+
transform: {
|
|
11
|
+
'^.+\\.tsx?$': 'ts-jest',
|
|
12
|
+
},
|
|
13
|
+
collectCoverageFrom: [
|
|
14
|
+
'src/**/*.{ts,tsx}',
|
|
15
|
+
'!src/**/*.d.ts',
|
|
16
|
+
'!src/**/index.ts',
|
|
17
|
+
],
|
|
18
|
+
coverageDirectory: 'coverage',
|
|
19
|
+
coverageReporters: ['text', 'lcov'],
|
|
20
|
+
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'],
|
|
21
|
+
testTimeout: 10000,
|
|
22
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{packageName}}",
|
|
3
|
+
"version": "{{version}}",
|
|
4
|
+
"description": "{{description}}",
|
|
5
|
+
"main": "src/index.ts",
|
|
6
|
+
"module": "src/index.ts",
|
|
7
|
+
"types": "src/index.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "tsc",
|
|
10
|
+
"test": "jest",
|
|
11
|
+
"test:watch": "jest --watch",
|
|
12
|
+
"test:coverage": "jest --coverage",
|
|
13
|
+
"type-check": "tsc --noEmit"
|
|
14
|
+
},
|
|
15
|
+
"peerDependencies": {
|
|
16
|
+
"@idealyst/components": "^1.0.21",
|
|
17
|
+
"@idealyst/navigation": "^1.0.21",
|
|
18
|
+
"@idealyst/theme": "^1.0.21",
|
|
19
|
+
"react": "^19.1.0",
|
|
20
|
+
"react-native": "^0.80.1"
|
|
21
|
+
},
|
|
22
|
+
"peerDependenciesMeta": {
|
|
23
|
+
"react-native": {
|
|
24
|
+
"optional": true
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@idealyst/components": "^1.0.21",
|
|
29
|
+
"@idealyst/navigation": "^1.0.21",
|
|
30
|
+
"@idealyst/theme": "^1.0.21",
|
|
31
|
+
"@types/jest": "^29.5.12",
|
|
32
|
+
"@types/react": "^19.1.0",
|
|
33
|
+
"jest": "^29.7.0",
|
|
34
|
+
"react": "^19.1.0",
|
|
35
|
+
"react-native": "^0.80.1",
|
|
36
|
+
"ts-jest": "^29.1.2",
|
|
37
|
+
"typescript": "^5.0.0"
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"dist",
|
|
41
|
+
"src"
|
|
42
|
+
],
|
|
43
|
+
"keywords": [
|
|
44
|
+
"react",
|
|
45
|
+
"react-native",
|
|
46
|
+
"cross-platform",
|
|
47
|
+
"shared",
|
|
48
|
+
"library"
|
|
49
|
+
]
|
|
50
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const typescript = require('rollup-plugin-typescript2');
|
|
2
|
+
|
|
3
|
+
module.exports = {
|
|
4
|
+
input: 'src/index.ts',
|
|
5
|
+
output: [
|
|
6
|
+
{
|
|
7
|
+
file: 'dist/index.js',
|
|
8
|
+
format: 'cjs',
|
|
9
|
+
exports: 'named',
|
|
10
|
+
sourcemap: true,
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
file: 'dist/index.esm.js',
|
|
14
|
+
format: 'esm',
|
|
15
|
+
exports: 'named',
|
|
16
|
+
sourcemap: true,
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
plugins: [
|
|
20
|
+
typescript({
|
|
21
|
+
typescript: require('typescript'),
|
|
22
|
+
tsconfig: './tsconfig.json',
|
|
23
|
+
exclude: ['**/*.test.ts', '**/*.test.tsx', '**/*.native.ts', '**/*.native.tsx'],
|
|
24
|
+
declaration: true,
|
|
25
|
+
declarationDir: 'dist',
|
|
26
|
+
rootDir: 'src',
|
|
27
|
+
clean: true,
|
|
28
|
+
}),
|
|
29
|
+
],
|
|
30
|
+
external: [
|
|
31
|
+
'react',
|
|
32
|
+
'react-dom',
|
|
33
|
+
'react-native',
|
|
34
|
+
'react-native-unistyles',
|
|
35
|
+
'@react-native/normalize-colors',
|
|
36
|
+
'react-native-edge-to-edge',
|
|
37
|
+
'react-native-nitro-modules',
|
|
38
|
+
'@react-native-vector-icons/common',
|
|
39
|
+
'@react-native-vector-icons/material-design-icons',
|
|
40
|
+
'@mdi/js',
|
|
41
|
+
'@mdi/react',
|
|
42
|
+
],
|
|
43
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const add_stuff = "here";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"lib": ["ES2020"],
|
|
6
|
+
"moduleResolution": "node",
|
|
7
|
+
"esModuleInterop": true,
|
|
8
|
+
"allowSyntheticDefaultImports": true,
|
|
9
|
+
"strict": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"forceConsistentCasingInFileNames": true,
|
|
12
|
+
"declaration": true,
|
|
13
|
+
"declarationDir": "./dist",
|
|
14
|
+
"outDir": "./dist",
|
|
15
|
+
"rootDir": "./src",
|
|
16
|
+
"jsx": "react-jsx"
|
|
17
|
+
},
|
|
18
|
+
"include": [
|
|
19
|
+
"src/**/*"
|
|
20
|
+
],
|
|
21
|
+
"exclude": [
|
|
22
|
+
"node_modules",
|
|
23
|
+
"dist"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# {{projectName}}
|
|
2
|
+
|
|
3
|
+
{{description}}
|
|
4
|
+
|
|
5
|
+
## Getting Started
|
|
6
|
+
|
|
7
|
+
This is a React web application built with the Idealyst Framework and Vite.
|
|
8
|
+
|
|
9
|
+
### Prerequisites
|
|
10
|
+
|
|
11
|
+
- Node.js 18+
|
|
12
|
+
- Yarn
|
|
13
|
+
|
|
14
|
+
### Installation
|
|
15
|
+
|
|
16
|
+
Install dependencies:
|
|
17
|
+
```bash
|
|
18
|
+
yarn install
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Development
|
|
22
|
+
|
|
23
|
+
Start the development server:
|
|
24
|
+
```bash
|
|
25
|
+
yarn dev
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The app will be available at `http://localhost:3000`
|
|
29
|
+
|
|
30
|
+
### Building for Production
|
|
31
|
+
|
|
32
|
+
Build the app:
|
|
33
|
+
```bash
|
|
34
|
+
yarn build
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Preview the production build:
|
|
38
|
+
```bash
|
|
39
|
+
yarn preview
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Project Structure
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
{{projectName}}/
|
|
46
|
+
├── src/
|
|
47
|
+
│ ├── App.tsx # Main app component
|
|
48
|
+
│ └── main.tsx # App entry point
|
|
49
|
+
├── index.html # HTML template
|
|
50
|
+
├── vite.config.ts # Vite configuration
|
|
51
|
+
└── tsconfig.json # TypeScript configuration
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Features
|
|
55
|
+
|
|
56
|
+
- **Idealyst Components**: Cross-platform UI components
|
|
57
|
+
- **Idealyst Navigation**: Consistent navigation system
|
|
58
|
+
- **Idealyst Theme**: Unified theming across platforms
|
|
59
|
+
- **React 19.1**: Latest React version
|
|
60
|
+
- **Vite**: Fast build tool and dev server
|
|
61
|
+
- **TypeScript**: Full type safety
|
|
62
|
+
- **React Native Web**: Use React Native components on the web
|
|
63
|
+
|
|
64
|
+
### Development
|
|
65
|
+
|
|
66
|
+
The app uses the Idealyst Framework for consistent UI and navigation that works across web and mobile platforms.
|
|
67
|
+
|
|
68
|
+
Edit `src/App.tsx` to start building your application.
|
|
69
|
+
|
|
70
|
+
### Styling
|
|
71
|
+
|
|
72
|
+
The app uses Unistyles for cross-platform styling. You can create styles that work on both web and mobile:
|
|
73
|
+
|
|
74
|
+
```tsx
|
|
75
|
+
import { createStyleSheet } from 'react-native-unistyles';
|
|
76
|
+
|
|
77
|
+
const styles = createStyleSheet({
|
|
78
|
+
container: {
|
|
79
|
+
flex: 1,
|
|
80
|
+
justifyContent: 'center',
|
|
81
|
+
alignItems: 'center'
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Learn More
|
|
87
|
+
|
|
88
|
+
- [Idealyst Framework Documentation](https://github.com/your-username/idealyst-framework)
|
|
89
|
+
- [React Documentation](https://react.dev/)
|
|
90
|
+
- [Vite Documentation](https://vitejs.dev/)
|