@coze-arch/cli 0.0.1-alpha.8e1417 → 0.0.1-alpha.98e280

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 (50) hide show
  1. package/lib/__templates__/expo/.cozeproj/scripts/dev_run.sh +6 -10
  2. package/lib/__templates__/expo/.cozeproj/scripts/prod_build.sh +2 -2
  3. package/lib/__templates__/expo/.cozeproj/scripts/prod_run.sh +2 -2
  4. package/lib/__templates__/expo/_gitignore +1 -1
  5. package/lib/__templates__/expo/_npmrc +4 -2
  6. package/lib/__templates__/expo/{client/app.json → app.json} +4 -4
  7. package/lib/__templates__/expo/babel.config.js +19 -0
  8. package/lib/__templates__/expo/client/app/(tabs)/_layout.tsx +43 -0
  9. package/lib/__templates__/expo/client/app/(tabs)/home.tsx +1 -0
  10. package/lib/__templates__/expo/client/app/(tabs)/index.tsx +7 -0
  11. package/lib/__templates__/expo/client/app/+not-found.tsx +79 -0
  12. package/lib/__templates__/expo/client/components/ThemedText.tsx +33 -0
  13. package/lib/__templates__/expo/client/components/ThemedView.tsx +38 -0
  14. package/lib/__templates__/expo/client/constants/theme.ts +850 -0
  15. package/lib/__templates__/expo/client/index.js +12 -0
  16. package/lib/__templates__/expo/client/{src/screens → screens}/home/index.tsx +1 -0
  17. package/lib/__templates__/expo/metro.config.js +121 -0
  18. package/lib/__templates__/expo/package.json +9 -4
  19. package/lib/__templates__/expo/pnpm-lock.yaml +0 -230
  20. package/lib/__templates__/expo/tsconfig.json +24 -1
  21. package/lib/cli.js +1 -1
  22. package/package.json +3 -1
  23. package/lib/__templates__/expo/client/metro.config.js +0 -51
  24. package/lib/__templates__/expo/client/package.json +0 -92
  25. package/lib/__templates__/expo/client/src/app/index.ts +0 -1
  26. package/lib/__templates__/expo/client/src/constants/theme.ts +0 -128
  27. package/lib/__templates__/expo/client/tsconfig.json +0 -24
  28. package/lib/__templates__/expo/pnpm-workspace.yaml +0 -3
  29. package/lib/__templates__/expo/server/package.json +0 -17
  30. /package/lib/__templates__/expo/client/{src/app → app}/_layout.tsx +0 -0
  31. /package/lib/__templates__/expo/client/{src/assets → assets}/fonts/SpaceMono-Regular.ttf +0 -0
  32. /package/lib/__templates__/expo/client/{src/assets → assets}/images/adaptive-icon.png +0 -0
  33. /package/lib/__templates__/expo/client/{src/assets → assets}/images/default-avatar.png +0 -0
  34. /package/lib/__templates__/expo/client/{src/assets → assets}/images/favicon.png +0 -0
  35. /package/lib/__templates__/expo/client/{src/assets → assets}/images/icon.png +0 -0
  36. /package/lib/__templates__/expo/client/{src/assets → assets}/images/partial-react-logo.png +0 -0
  37. /package/lib/__templates__/expo/client/{src/assets → assets}/images/react-logo.png +0 -0
  38. /package/lib/__templates__/expo/client/{src/assets → assets}/images/react-logo@2x.png +0 -0
  39. /package/lib/__templates__/expo/client/{src/assets → assets}/images/react-logo@3x.png +0 -0
  40. /package/lib/__templates__/expo/client/{src/assets → assets}/images/splash-icon.png +0 -0
  41. /package/lib/__templates__/expo/client/{src/components → components}/Screen.tsx +0 -0
  42. /package/lib/__templates__/expo/client/{src/components → components}/SmartDateInput.tsx +0 -0
  43. /package/lib/__templates__/expo/client/{src/contexts → contexts}/AuthContext.tsx +0 -0
  44. /package/lib/__templates__/expo/client/{src/hooks → hooks}/useColorScheme.ts +0 -0
  45. /package/lib/__templates__/expo/client/{src/hooks → hooks}/useTheme.ts +0 -0
  46. /package/lib/__templates__/expo/client/{src/screens → screens}/home/styles.ts +0 -0
  47. /package/lib/__templates__/expo/client/{src/utils → utils}/index.ts +0 -0
  48. /package/lib/__templates__/expo/{client/eslint-formatter-simple.mjs → eslint-formatter-simple.mjs} +0 -0
  49. /package/lib/__templates__/expo/{client/eslint.config.mjs → eslint.config.mjs} +0 -0
  50. /package/lib/__templates__/expo/{server/src → src}/index.ts +0 -0
@@ -0,0 +1,12 @@
1
+ import '@expo/metro-runtime';
2
+ import { registerRootComponent } from 'expo';
3
+ import { ExpoRoot } from 'expo-router';
4
+
5
+ // 显式定义 App 组件
6
+ export function App() {
7
+ // eslint-disable-next-line no-undef
8
+ const ctx = require.context('./app');
9
+ return <ExpoRoot context={ctx} />;
10
+ }
11
+
12
+ registerRootComponent(App);
@@ -14,6 +14,7 @@ import { Screen } from '@/components/Screen';
14
14
 
15
15
  import { styles } from './styles';
16
16
 
17
+
17
18
  export default function HomeScreen() {
18
19
  const insets = useSafeAreaInsets();
19
20
  const { theme, isDark } = useTheme();
@@ -0,0 +1,121 @@
1
+ const { getDefaultConfig } = require('expo/metro-config');
2
+ const { createProxyMiddleware } = require('http-proxy-middleware');
3
+ const connect = require('connect');
4
+
5
+ const config = getDefaultConfig(__dirname);
6
+
7
+ // 安全地获取 Expo 的默认排除列表
8
+ const existingBlockList = [].concat(config.resolver.blockList || []);
9
+
10
+ config.resolver.blockList = [
11
+ ...existingBlockList,
12
+ /.*\/\.expo\/.*/, // Expo 的缓存和构建产物目录
13
+
14
+ // 1. 原生代码 (Java/C++/Objective-C)
15
+ /.*\/react-native\/ReactAndroid\/.*/,
16
+ /.*\/react-native\/ReactCommon\/.*/,
17
+
18
+ // 2. 纯开发和调试工具
19
+ // 这些工具只在开发电脑上运行,不会被打包到应用中
20
+ /.*\/@typescript-eslint\/eslint-plugin\/.*/,
21
+
22
+ // 3. 构建时数据
23
+ // 这个数据库只在打包过程中使用,应用运行时不需要
24
+ /.*\/caniuse-lite\/data\/.*/,
25
+
26
+ // 4. 通用规则
27
+ /.*\/__tests__\/.*/, // 排除所有测试目录
28
+ /.*\.git\/.*/, // 排除 Git 目录
29
+ ];
30
+
31
+ const BACKEND_TARGET = 'http://localhost:9091';
32
+
33
+ const apiProxy = createProxyMiddleware({
34
+ target: BACKEND_TARGET,
35
+ changeOrigin: true,
36
+ logLevel: 'debug',
37
+ proxyTimeout: 86400000,
38
+ onProxyReq: (proxyReq, req) => {
39
+ const accept = req.headers.accept || '';
40
+ if (accept.includes('text/event-stream')) {
41
+ proxyReq.setHeader('accept-encoding', 'identity');
42
+ }
43
+ },
44
+ onProxyRes: (proxyRes, req, res) => {
45
+ const contentType = proxyRes.headers['content-type'] || '';
46
+ if (contentType.includes('text/event-stream') || contentType.includes('application/stream')) {
47
+ res.setHeader('Cache-Control', 'no-cache');
48
+ res.setHeader('Connection', 'keep-alive');
49
+ res.setHeader('X-Accel-Buffering', 'no');
50
+ if (typeof res.flushHeaders === 'function') {
51
+ try { res.flushHeaders(); } catch {}
52
+ }
53
+ }
54
+ },
55
+ });
56
+
57
+ const streamProxy = createProxyMiddleware({
58
+ target: BACKEND_TARGET,
59
+ changeOrigin: true,
60
+ logLevel: 'debug',
61
+ ws: true,
62
+ proxyTimeout: 86400000,
63
+ onProxyReq: (proxyReq, req) => {
64
+ const upgrade = req.headers.upgrade;
65
+ const accept = req.headers.accept || '';
66
+ if (upgrade && upgrade.toLowerCase() === 'websocket') {
67
+ proxyReq.setHeader('Connection', 'upgrade');
68
+ proxyReq.setHeader('Upgrade', req.headers.upgrade);
69
+ } else if (accept.includes('text/event-stream')) {
70
+ proxyReq.setHeader('accept-encoding', 'identity');
71
+ proxyReq.setHeader('Connection', 'keep-alive');
72
+ }
73
+ },
74
+ onProxyRes: (proxyRes, req, res) => {
75
+ const contentType = proxyRes.headers['content-type'] || '';
76
+ if (contentType.includes('text/event-stream') || contentType.includes('application/stream')) {
77
+ res.setHeader('Cache-Control', 'no-cache');
78
+ res.setHeader('Connection', 'keep-alive');
79
+ res.setHeader('X-Accel-Buffering', 'no');
80
+ if (typeof res.flushHeaders === 'function') {
81
+ try { res.flushHeaders(); } catch {}
82
+ }
83
+ }
84
+ },
85
+ });
86
+
87
+ const shouldProxyToBackend = (url) => {
88
+ if (!url) return false;
89
+ if (/^\/api\/v\d+\//.test(url)) {
90
+ return true;
91
+ }
92
+ return false;
93
+ };
94
+
95
+ const isWebSocketRequest = (req) =>
96
+ !!(req.headers.upgrade && req.headers.upgrade.toLowerCase() === 'websocket');
97
+ const isSSERequest = (req) => {
98
+ const accept = req.headers.accept || '';
99
+ return accept.includes('text/event-stream');
100
+ };
101
+
102
+ config.server = {
103
+ ...config.server,
104
+ enhanceMiddleware: (metroMiddleware, metroServer) => {
105
+ return connect()
106
+ .use((req, res, next) => {
107
+ if (shouldProxyToBackend(req.url)) {
108
+ console.log(`[Metro Proxy] Forwarding ${req.method} ${req.url}`);
109
+
110
+ if (isWebSocketRequest(req) || isSSERequest(req)) {
111
+ return streamProxy(req, res, next);
112
+ }
113
+ return apiProxy(req, res, next);
114
+ }
115
+ next();
116
+ })
117
+ .use(metroMiddleware);
118
+ },
119
+ };
120
+
121
+ module.exports = config;
@@ -1,15 +1,20 @@
1
1
  {
2
2
  "name": "<%= appName %>",
3
+ "version": "1.0.0",
3
4
  "private": true,
4
- "version": "0.0.0",
5
- "main": "expo-router/entry",
5
+ "main": "client/index.js",
6
6
  "scripts": {
7
7
  "build": "bash .cozeproj/scripts/dev_build.sh",
8
- "dev": "bash .cozeproj/scripts/dev_run.sh",
9
- "start": "bash .cozeproj/scripts/prod_run.sh",
10
8
  "check-deps": "npx depcheck",
9
+ "dev": "bash .cozeproj/scripts/dev_run.sh",
11
10
  "preinstall": "npx only-allow pnpm",
11
+ "postinstall": "node ./client/scripts/install-missing-deps.js",
12
+ "install-missing": "node ./client/scripts/install-missing-deps.js",
12
13
  "lint": "expo lint",
14
+ "server": "NODE_ENV=development tsx ./src/index.ts",
15
+ "server:build": "pnpm exec esbuild src/index.ts --platform=node --packages=external --bundle --format=esm --outdir=src_dist",
16
+ "server:prod": "NODE_ENV=production PORT=${PORT:-5000} node src_dist/index.js",
17
+ "start": "expo start --web",
13
18
  "test": "jest --watchAll"
14
19
  },
15
20
  "jest": {
@@ -268,236 +268,6 @@ importers:
268
268
  specifier: ^8.32.1
269
269
  version: 8.51.0(eslint@9.39.2)(typescript@5.9.3)
270
270
 
271
- client:
272
- dependencies:
273
- '@expo/metro-runtime':
274
- specifier: ^6.1.2
275
- version: 6.1.2(expo@54.0.30)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
276
- '@expo/vector-icons':
277
- specifier: ^15.0.0
278
- version: 15.0.3(expo-font@14.0.10(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
279
- '@react-native-async-storage/async-storage':
280
- specifier: ^2.2.0
281
- version: 2.2.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
282
- '@react-native-community/datetimepicker':
283
- specifier: ^8.5.0
284
- version: 8.5.1(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
285
- '@react-native-community/slider':
286
- specifier: ^5.0.1
287
- version: 5.1.1
288
- '@react-native-masked-view/masked-view':
289
- specifier: ^0.3.2
290
- version: 0.3.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
291
- '@react-native-picker/picker':
292
- specifier: ^2.11.0
293
- version: 2.11.4(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
294
- '@react-navigation/bottom-tabs':
295
- specifier: ^7.2.0
296
- version: 7.9.0(@react-native-masked-view/masked-view@0.3.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(@react-navigation/native@7.1.26(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
297
- '@react-navigation/native':
298
- specifier: ^7.0.14
299
- version: 7.1.26(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
300
- babel-plugin-module-resolver:
301
- specifier: ^5.0.2
302
- version: 5.0.2
303
- babel-preset-expo:
304
- specifier: ^54.0.9
305
- version: 54.0.9(@babel/core@7.28.5)(@babel/runtime@7.28.4)(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-refresh@0.14.2)
306
- dayjs:
307
- specifier: ^1.11.19
308
- version: 1.11.19
309
- expo:
310
- specifier: ^54.0.7
311
- version: 54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
312
- expo-auth-session:
313
- specifier: ^7.0.9
314
- version: 7.0.10(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
315
- expo-av:
316
- specifier: ~16.0.6
317
- version: 16.0.8(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
318
- expo-blur:
319
- specifier: ~15.0.6
320
- version: 15.0.8(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
321
- expo-camera:
322
- specifier: ~17.0.10
323
- version: 17.0.10(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
324
- expo-constants:
325
- specifier: ~18.0.8
326
- version: 18.0.12(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
327
- expo-crypto:
328
- specifier: ^15.0.7
329
- version: 15.0.8(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))
330
- expo-font:
331
- specifier: ~14.0.7
332
- version: 14.0.10(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
333
- expo-haptics:
334
- specifier: ~15.0.6
335
- version: 15.0.8(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))
336
- expo-image-picker:
337
- specifier: ~17.0.7
338
- version: 17.0.10(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))
339
- expo-linear-gradient:
340
- specifier: ~15.0.6
341
- version: 15.0.8(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
342
- expo-linking:
343
- specifier: ~8.0.7
344
- version: 8.0.11(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
345
- expo-location:
346
- specifier: ~19.0.7
347
- version: 19.0.8(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))
348
- expo-router:
349
- specifier: ~6.0.0
350
- version: 6.0.21(@expo/metro-runtime@6.1.2)(@react-native-masked-view/masked-view@0.3.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(@types/react@19.1.17)(expo-constants@18.0.12)(expo-linking@8.0.11)(expo@54.0.30)(react-dom@19.1.0(react@19.1.0))(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.6(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
351
- expo-splash-screen:
352
- specifier: ~31.0.8
353
- version: 31.0.13(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))
354
- expo-status-bar:
355
- specifier: ~3.0.7
356
- version: 3.0.9(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
357
- expo-symbols:
358
- specifier: ~1.0.6
359
- version: 1.0.8(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
360
- expo-system-ui:
361
- specifier: ~6.0.9
362
- version: 6.0.9(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
363
- expo-web-browser:
364
- specifier: ~15.0.10
365
- version: 15.0.10(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
366
- react:
367
- specifier: 19.1.0
368
- version: 19.1.0
369
- react-dom:
370
- specifier: 19.1.0
371
- version: 19.1.0(react@19.1.0)
372
- react-native:
373
- specifier: 0.81.5
374
- version: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
375
- react-native-chart-kit:
376
- specifier: ^6.12.0
377
- version: 6.12.0(react-native-svg@15.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
378
- react-native-gesture-handler:
379
- specifier: ~2.28.0
380
- version: 2.28.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
381
- react-native-keyboard-aware-scroll-view:
382
- specifier: ^0.9.5
383
- version: 0.9.5(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
384
- react-native-modal-datetime-picker:
385
- specifier: 18.0.0
386
- version: 18.0.0(@react-native-community/datetimepicker@8.5.1(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
387
- react-native-reanimated:
388
- specifier: ~4.1.0
389
- version: 4.1.6(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
390
- react-native-safe-area-context:
391
- specifier: ~5.6.0
392
- version: 5.6.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
393
- react-native-screens:
394
- specifier: ~4.16.0
395
- version: 4.16.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
396
- react-native-svg:
397
- specifier: 15.15.0
398
- version: 15.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
399
- react-native-toast-message:
400
- specifier: ^2.3.3
401
- version: 2.3.3(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
402
- react-native-web:
403
- specifier: ^0.21.2
404
- version: 0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
405
- react-native-webview:
406
- specifier: ~13.15.0
407
- version: 13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
408
- react-native-worklets:
409
- specifier: 0.5.1
410
- version: 0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
411
- zod:
412
- specifier: ^4.2.1
413
- version: 4.3.2
414
- devDependencies:
415
- '@babel/core':
416
- specifier: ^7.25.2
417
- version: 7.28.5
418
- '@eslint/js':
419
- specifier: ^9.27.0
420
- version: 9.39.2
421
- '@types/jest':
422
- specifier: ^29.5.12
423
- version: 29.5.14
424
- '@types/react':
425
- specifier: ~19.1.0
426
- version: 19.1.17
427
- '@types/react-test-renderer':
428
- specifier: 19.1.0
429
- version: 19.1.0
430
- chalk:
431
- specifier: ^4.1.2
432
- version: 4.1.2
433
- connect:
434
- specifier: ^3.7.0
435
- version: 3.7.0
436
- depcheck:
437
- specifier: ^1.4.7
438
- version: 1.4.7
439
- esbuild:
440
- specifier: 0.27.2
441
- version: 0.27.2
442
- eslint:
443
- specifier: ^9.39.2
444
- version: 9.39.2
445
- eslint-formatter-compact:
446
- specifier: ^9.0.1
447
- version: 9.0.1
448
- eslint-import-resolver-typescript:
449
- specifier: ^4.4.4
450
- version: 4.4.4(eslint-plugin-import@2.32.0)(eslint@9.39.2)
451
- eslint-plugin-import:
452
- specifier: ^2.32.0
453
- version: 2.32.0(@typescript-eslint/parser@8.51.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.2)
454
- eslint-plugin-react:
455
- specifier: ^7.37.5
456
- version: 7.37.5(eslint@9.39.2)
457
- eslint-plugin-react-hooks:
458
- specifier: ^7.0.1
459
- version: 7.0.1(eslint@9.39.2)
460
- eslint-plugin-regexp:
461
- specifier: ^2.10.0
462
- version: 2.10.0(eslint@9.39.2)
463
- globals:
464
- specifier: ^16.1.0
465
- version: 16.5.0
466
- http-proxy-middleware:
467
- specifier: ^3.0.5
468
- version: 3.0.5
469
- jest:
470
- specifier: ^29.2.1
471
- version: 29.7.0(@types/node@25.0.3)
472
- jest-expo:
473
- specifier: ~54.0.10
474
- version: 54.0.16(@babel/core@7.28.5)(expo@54.0.30(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.21)(react-native-webview@13.15.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(jest@29.7.0(@types/node@25.0.3))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
475
- react-test-renderer:
476
- specifier: 19.1.0
477
- version: 19.1.0(react@19.1.0)
478
- tsx:
479
- specifier: ^4.21.0
480
- version: 4.21.0
481
- typescript:
482
- specifier: ^5.8.3
483
- version: 5.9.3
484
- typescript-eslint:
485
- specifier: ^8.32.1
486
- version: 8.51.0(eslint@9.39.2)(typescript@5.9.3)
487
-
488
- server:
489
- dependencies:
490
- express:
491
- specifier: ^4.22.1
492
- version: 4.22.1
493
- devDependencies:
494
- '@types/express':
495
- specifier: ^5.0.6
496
- version: 5.0.6
497
- tsx:
498
- specifier: ^4.21.0
499
- version: 4.21.0
500
-
501
271
  packages:
502
272
 
503
273
  '@0no-co/graphql.web@1.2.0':
@@ -1 +1,24 @@
1
- {}
1
+ {
2
+ "extends": "expo/tsconfig.base",
3
+ "compilerOptions": {
4
+ "skipLibCheck": true,
5
+ "jsx": "react-jsx",
6
+ "baseUrl": ".",
7
+ "strict": true,
8
+ "noEmit": true,
9
+ "paths": {
10
+ "@/*": ["./client/*"]
11
+ }
12
+ },
13
+ "include": ["**/*.ts", "**/*.tsx", ".expo/types/**/*.ts", "expo-env.d.ts"],
14
+ "exclude": [
15
+ "node_modules",
16
+ "**/*.spec.ts",
17
+ "**/*.test.ts",
18
+ "**/*.spec.tsx",
19
+ "**/*.test.tsx",
20
+ "dist",
21
+ "build",
22
+ "client/.expo"
23
+ ]
24
+ }
package/lib/cli.js CHANGED
@@ -1741,7 +1741,7 @@ const registerCommand = program => {
1741
1741
  });
1742
1742
  };
1743
1743
 
1744
- var version = "0.0.1-alpha.8e1417";
1744
+ var version = "0.0.1-alpha.98e280";
1745
1745
  var packageJson = {
1746
1746
  version: version};
1747
1747
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coze-arch/cli",
3
- "version": "0.0.1-alpha.8e1417",
3
+ "version": "0.0.1-alpha.98e280",
4
4
  "private": false,
5
5
  "description": "coze coding devtools cli",
6
6
  "license": "MIT",
@@ -19,6 +19,7 @@
19
19
  "scripts": {
20
20
  "prebuild": "tsx scripts/prebuild.ts",
21
21
  "build": "tsx scripts/build.ts",
22
+ "create": "tsx scripts/create-template.ts",
22
23
  "lint": "eslint ./ --cache",
23
24
  "postpublish": "bash scripts/sync-npmmirror.sh",
24
25
  "test": "vitest --run --passWithNoTests",
@@ -31,6 +32,7 @@
31
32
  },
32
33
  "dependencies": {
33
34
  "@iarna/toml": "^2.2.5",
35
+ "@inquirer/prompts": "^3.2.0",
34
36
  "ajv": "^8.17.1",
35
37
  "ajv-formats": "^3.0.1",
36
38
  "change-case": "^5.4.4",
@@ -1,51 +0,0 @@
1
- const { getDefaultConfig } = require('expo/metro-config');
2
- const { createProxyMiddleware } = require('http-proxy-middleware');
3
- const connect = require('connect');
4
-
5
- const config = getDefaultConfig(__dirname);
6
-
7
- // 安全地获取 Expo 的默认排除列表
8
- const existingBlockList = [].concat(config.resolver.blockList || []);
9
-
10
- config.resolver.blockList = [
11
- ...existingBlockList,
12
- /.*\/\.expo\/.*/, // Expo 的缓存和构建产物目录
13
-
14
- // 1. 原生代码 (Java/C++/Objective-C)
15
- /.*\/react-native\/ReactAndroid\/.*/,
16
- /.*\/react-native\/ReactCommon\/.*/,
17
-
18
- // 2. 纯开发和调试工具
19
- // 这些工具只在开发电脑上运行,不会被打包到应用中
20
- /.*\/@typescript-eslint\/eslint-plugin\/.*/,
21
-
22
- // 3. 构建时数据
23
- // 这个数据库只在打包过程中使用,应用运行时不需要
24
- /.*\/caniuse-lite\/data\/.*/,
25
-
26
- // 4. 通用规则
27
- /.*\/__tests__\/.*/, // 排除所有测试目录
28
- /.*\.git\/.*/, // 排除 Git 目录
29
- ];
30
-
31
- const apiProxy = createProxyMiddleware({
32
- target: 'http://localhost:9091',
33
- logLevel: 'debug',
34
- });
35
-
36
- config.server = {
37
- ...config.server,
38
- enhanceMiddleware: (metroMiddleware, metroServer) => {
39
- return connect()
40
- .use((req, res, next) => {
41
- if (req.url && req.url.startsWith('/api/v')) {
42
- console.log(`[Metro Proxy] Forwarding ${req.method} ${req.url}`);
43
- return apiProxy(req, res, next);
44
- }
45
- next();
46
- })
47
- .use(metroMiddleware);
48
- },
49
- }
50
-
51
- module.exports = config;
@@ -1,92 +0,0 @@
1
- {
2
- "name": "expo-app",
3
- "description": "<%= appName %>",
4
- "main": "expo-router/entry",
5
- "private": true,
6
- "scripts": {
7
- "check-deps": "npx depcheck",
8
- "postinstall": "npm run install-missing",
9
- "install-missing": "node ./scripts/install-missing-deps.js",
10
- "lint": "expo lint",
11
- "start": "expo start --web --clear",
12
- "test": "jest --watchAll"
13
- },
14
- "jest": {
15
- "preset": "jest-expo"
16
- },
17
- "dependencies": {
18
- "@expo/metro-runtime": "^6.1.2",
19
- "@expo/vector-icons": "^15.0.0",
20
- "@react-native-async-storage/async-storage": "^2.2.0",
21
- "@react-native-community/datetimepicker": "^8.5.0",
22
- "@react-native-community/slider": "^5.0.1",
23
- "@react-native-masked-view/masked-view": "^0.3.2",
24
- "@react-native-picker/picker": "^2.11.0",
25
- "@react-navigation/bottom-tabs": "^7.2.0",
26
- "@react-navigation/native": "^7.0.14",
27
- "babel-plugin-module-resolver": "^5.0.2",
28
- "babel-preset-expo": "^54.0.9",
29
- "dayjs": "^1.11.19",
30
- "expo": "^54.0.7",
31
- "expo-auth-session": "^7.0.9",
32
- "expo-av": "~16.0.6",
33
- "expo-blur": "~15.0.6",
34
- "expo-camera": "~17.0.10",
35
- "expo-constants": "~18.0.8",
36
- "expo-crypto": "^15.0.7",
37
- "expo-font": "~14.0.7",
38
- "expo-haptics": "~15.0.6",
39
- "expo-image-picker": "~17.0.7",
40
- "expo-linear-gradient": "~15.0.6",
41
- "expo-linking": "~8.0.7",
42
- "expo-location": "~19.0.7",
43
- "expo-router": "~6.0.0",
44
- "expo-splash-screen": "~31.0.8",
45
- "expo-status-bar": "~3.0.7",
46
- "expo-symbols": "~1.0.6",
47
- "expo-system-ui": "~6.0.9",
48
- "expo-web-browser": "~15.0.10",
49
- "react": "19.1.0",
50
- "react-dom": "19.1.0",
51
- "react-native": "0.81.5",
52
- "react-native-chart-kit": "^6.12.0",
53
- "react-native-gesture-handler": "~2.28.0",
54
- "react-native-keyboard-aware-scroll-view": "^0.9.5",
55
- "react-native-modal-datetime-picker": "18.0.0",
56
- "react-native-reanimated": "~4.1.0",
57
- "react-native-safe-area-context": "~5.6.0",
58
- "react-native-screens": "~4.16.0",
59
- "react-native-svg": "15.15.0",
60
- "react-native-toast-message": "^2.3.3",
61
- "react-native-web": "^0.21.2",
62
- "react-native-webview": "~13.15.0",
63
- "react-native-worklets": "0.5.1",
64
- "zod": "^4.2.1"
65
- },
66
- "devDependencies": {
67
- "@babel/core": "^7.25.2",
68
- "@eslint/js": "^9.27.0",
69
- "@types/jest": "^29.5.12",
70
- "@types/react": "~19.1.0",
71
- "@types/react-test-renderer": "19.1.0",
72
- "chalk": "^4.1.2",
73
- "depcheck": "^1.4.7",
74
- "esbuild": "0.27.2",
75
- "eslint": "^9.39.2",
76
- "eslint-formatter-compact": "^9.0.1",
77
- "eslint-import-resolver-typescript": "^4.4.4",
78
- "eslint-plugin-import": "^2.32.0",
79
- "eslint-plugin-react": "^7.37.5",
80
- "eslint-plugin-react-hooks": "^7.0.1",
81
- "eslint-plugin-regexp": "^2.10.0",
82
- "globals": "^16.1.0",
83
- "jest": "^29.2.1",
84
- "jest-expo": "~54.0.10",
85
- "react-test-renderer": "19.1.0",
86
- "tsx": "^4.21.0",
87
- "typescript": "^5.8.3",
88
- "typescript-eslint": "^8.32.1",
89
- "connect": "^3.7.0",
90
- "http-proxy-middleware": "^3.0.5"
91
- }
92
- }
@@ -1 +0,0 @@
1
- export { default } from '@/screens/home'