@coze-arch/cli 0.0.1-alpha.c53937 → 0.0.1-alpha.cac8f5
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/lib/__templates__/expo/.coze +3 -3
- package/lib/__templates__/expo/.cozeproj/scripts/dev_build.sh +46 -0
- package/lib/__templates__/expo/.cozeproj/scripts/dev_run.sh +220 -0
- package/lib/__templates__/expo/.cozeproj/scripts/prod_build.sh +2 -2
- package/lib/__templates__/expo/.cozeproj/scripts/prod_run.sh +3 -4
- package/lib/__templates__/expo/.cozeproj/scripts/server_dev_run.sh +45 -0
- package/lib/__templates__/expo/README.md +68 -7
- package/lib/__templates__/expo/_gitignore +1 -1
- package/lib/__templates__/expo/_npmrc +2 -4
- package/lib/__templates__/expo/client/app/_layout.tsx +14 -14
- package/lib/__templates__/expo/client/app/index.tsx +1 -0
- package/lib/__templates__/expo/client/app.config.ts +76 -0
- package/lib/__templates__/expo/client/components/ThemedText.tsx +33 -0
- package/lib/__templates__/expo/client/components/ThemedView.tsx +38 -0
- package/lib/__templates__/expo/client/constants/theme.ts +109 -68
- package/lib/__templates__/expo/client/declarations.d.ts +5 -0
- package/lib/__templates__/expo/{eslint.config.mjs → client/eslint.config.mjs} +14 -10
- package/lib/__templates__/expo/client/hooks/useColorScheme.ts +34 -1
- package/lib/__templates__/expo/client/hooks/useTheme.ts +26 -6
- package/lib/__templates__/expo/client/metro.config.js +121 -0
- package/lib/__templates__/expo/client/package.json +93 -0
- package/lib/__templates__/expo/client/screens/demo/index.tsx +25 -0
- package/lib/__templates__/expo/client/screens/demo/styles.ts +28 -0
- package/lib/__templates__/expo/client/scripts/install-missing-deps.js +1 -0
- package/lib/__templates__/expo/client/tsconfig.json +24 -0
- package/lib/__templates__/expo/client/utils/index.ts +22 -0
- package/lib/__templates__/expo/eslint-plugins/fontawesome6/index.js +9 -0
- package/lib/__templates__/expo/eslint-plugins/fontawesome6/names.js +2486 -0
- package/lib/__templates__/expo/eslint-plugins/fontawesome6/rule.js +155 -0
- package/lib/__templates__/expo/package.json +8 -107
- package/lib/__templates__/expo/pnpm-lock.yaml +451 -867
- package/lib/__templates__/expo/pnpm-workspace.yaml +3 -0
- package/lib/__templates__/expo/server/build.js +21 -0
- package/lib/__templates__/expo/server/package.json +32 -0
- package/lib/__templates__/expo/server/src/index.ts +19 -0
- package/lib/__templates__/expo/server/tsconfig.json +24 -0
- package/lib/__templates__/expo/template.config.js +1 -0
- package/lib/__templates__/expo/tsconfig.json +1 -24
- package/lib/__templates__/nextjs/.coze +1 -0
- package/lib/__templates__/nextjs/_npmrc +1 -0
- package/lib/__templates__/nextjs/next.config.ts +12 -0
- package/lib/__templates__/nextjs/package.json +8 -2
- package/lib/__templates__/nextjs/pnpm-lock.yaml +1465 -1706
- package/lib/__templates__/nextjs/scripts/prepare.sh +9 -0
- package/lib/__templates__/nextjs/src/app/globals.css +109 -89
- package/lib/__templates__/nextjs/src/app/layout.tsx +1 -12
- package/lib/__templates__/nextjs/src/app/page.tsx +35 -23
- package/lib/__templates__/nextjs/src/components/ui/resizable.tsx +29 -22
- package/lib/__templates__/nextjs/src/components/ui/sidebar.tsx +228 -230
- package/lib/__templates__/nextjs/template.config.js +30 -0
- package/lib/__templates__/templates.json +61 -43
- package/lib/__templates__/vite/.coze +1 -0
- package/lib/__templates__/vite/_npmrc +1 -0
- package/lib/__templates__/vite/eslint.config.mjs +9 -0
- package/lib/__templates__/vite/package.json +10 -1
- package/lib/__templates__/vite/pnpm-lock.yaml +3115 -126
- package/lib/__templates__/vite/scripts/prepare.sh +9 -0
- package/lib/__templates__/vite/src/main.ts +1 -2
- package/lib/__templates__/vite/template.config.js +30 -4
- package/lib/cli.js +201 -57
- package/package.json +8 -3
- package/lib/__templates__/expo/.cozeproj/scripts/deploy_build.sh +0 -109
- package/lib/__templates__/expo/.cozeproj/scripts/deploy_run.sh +0 -235
- package/lib/__templates__/expo/app.json +0 -63
- package/lib/__templates__/expo/babel.config.js +0 -19
- package/lib/__templates__/expo/client/app/(tabs)/_layout.tsx +0 -43
- package/lib/__templates__/expo/client/app/(tabs)/home.tsx +0 -1
- package/lib/__templates__/expo/client/app/(tabs)/index.tsx +0 -7
- package/lib/__templates__/expo/client/app/+not-found.tsx +0 -79
- package/lib/__templates__/expo/client/index.js +0 -12
- package/lib/__templates__/expo/client/screens/home/index.tsx +0 -51
- package/lib/__templates__/expo/client/screens/home/styles.ts +0 -60
- package/lib/__templates__/expo/metro.config.js +0 -51
- package/lib/__templates__/expo/src/index.ts +0 -12
- package/lib/__templates__/nextjs/.vscode/settings.json +0 -121
- package/lib/__templates__/vite/.vscode/settings.json +0 -7
- /package/lib/__templates__/expo/{eslint-formatter-simple.mjs → client/eslint-formatter-simple.mjs} +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
const names = require('./names')
|
|
2
|
+
|
|
3
|
+
const DEFAULTS = {
|
|
4
|
+
whitelist: names,
|
|
5
|
+
componentName: 'FontAwesome6',
|
|
6
|
+
attributeName: 'name',
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
function getJSXAttribute(openingElement, attrName) {
|
|
10
|
+
return openingElement.attributes.find(
|
|
11
|
+
(attr) =>
|
|
12
|
+
attr &&
|
|
13
|
+
attr.type === 'JSXAttribute' &&
|
|
14
|
+
attr.name &&
|
|
15
|
+
attr.name.name === attrName
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function getStringLiteralValue(attribute) {
|
|
20
|
+
if (!attribute || !attribute.value) return null;
|
|
21
|
+
|
|
22
|
+
const val = attribute.value;
|
|
23
|
+
|
|
24
|
+
// <Comp name="hello" />
|
|
25
|
+
if (val.type === 'Literal' && typeof val.value === 'string') {
|
|
26
|
+
return val.value;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// <Comp name={'hello'} />
|
|
30
|
+
if (
|
|
31
|
+
val.type === 'JSXExpressionContainer' &&
|
|
32
|
+
val.expression &&
|
|
33
|
+
val.expression.type === 'Literal' &&
|
|
34
|
+
typeof val.expression.value === 'string'
|
|
35
|
+
) {
|
|
36
|
+
return val.expression.value;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// <Comp name={`hello`} /> template literal without expressions
|
|
40
|
+
if (
|
|
41
|
+
val.type === 'JSXExpressionContainer' &&
|
|
42
|
+
val.expression &&
|
|
43
|
+
val.expression.type === 'TemplateLiteral' &&
|
|
44
|
+
val.expression.expressions.length === 0
|
|
45
|
+
) {
|
|
46
|
+
return val.expression.quasis[0]?.value?.cooked ?? null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
module.exports = {
|
|
53
|
+
meta: {
|
|
54
|
+
type: 'problem',
|
|
55
|
+
docs: {
|
|
56
|
+
description:
|
|
57
|
+
'Ensure FontAwesome6 name prop is a string literal in whitelist',
|
|
58
|
+
recommended: false,
|
|
59
|
+
},
|
|
60
|
+
schema: [
|
|
61
|
+
{
|
|
62
|
+
type: 'object',
|
|
63
|
+
additionalProperties: false,
|
|
64
|
+
properties: {
|
|
65
|
+
whitelist: {
|
|
66
|
+
type: 'array',
|
|
67
|
+
items: { type: 'string' },
|
|
68
|
+
default: DEFAULTS.whitelist,
|
|
69
|
+
},
|
|
70
|
+
componentName: {
|
|
71
|
+
type: 'string',
|
|
72
|
+
default: DEFAULTS.componentName,
|
|
73
|
+
},
|
|
74
|
+
attributeName: {
|
|
75
|
+
type: 'string',
|
|
76
|
+
default: DEFAULTS.attributeName,
|
|
77
|
+
},
|
|
78
|
+
caseSensitive: {
|
|
79
|
+
type: 'boolean',
|
|
80
|
+
default: true
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
messages: {
|
|
86
|
+
invalidName:
|
|
87
|
+
'{{componentName}} 中不存在图标 {{name}},请更换为其他图标',
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
create(context) {
|
|
92
|
+
const options = context.options && context.options[0] ? context.options[0] : {};
|
|
93
|
+
const componentName = options.componentName || DEFAULTS.componentName;
|
|
94
|
+
const attributeName = options.attributeName || DEFAULTS.attributeName;
|
|
95
|
+
const caseSensitive = options.caseSensitive ?? true;
|
|
96
|
+
|
|
97
|
+
const whitelistRaw = Array.isArray(options.whitelist)
|
|
98
|
+
? options.whitelist
|
|
99
|
+
: DEFAULTS.whitelist;
|
|
100
|
+
|
|
101
|
+
const normalize = (s) =>
|
|
102
|
+
caseSensitive ? String(s) : String(s).toLowerCase();
|
|
103
|
+
|
|
104
|
+
const whitelist = new Set(whitelistRaw.map(normalize));
|
|
105
|
+
|
|
106
|
+
function isTargetComponent(node) {
|
|
107
|
+
// Supports: <FontAwesome6 />, <NS.FontAwesome6 />
|
|
108
|
+
const nameNode = node.name;
|
|
109
|
+
if (!nameNode) return false;
|
|
110
|
+
|
|
111
|
+
if (nameNode.type === 'JSXIdentifier') {
|
|
112
|
+
return nameNode.name === componentName;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (nameNode.type === 'JSXMemberExpression') {
|
|
116
|
+
// e.g., UI.FontAwesome6
|
|
117
|
+
let base = nameNode;
|
|
118
|
+
while (base.type === 'JSXMemberExpression') {
|
|
119
|
+
if (base.property && base.property.name === componentName) {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
base = base.object;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return {
|
|
130
|
+
JSXOpeningElement(opening) {
|
|
131
|
+
if (!isTargetComponent(opening)) return;
|
|
132
|
+
|
|
133
|
+
const attrNode = getJSXAttribute(opening, attributeName);
|
|
134
|
+
if (!attrNode) return;
|
|
135
|
+
|
|
136
|
+
const literal = getStringLiteralValue(attrNode);
|
|
137
|
+
|
|
138
|
+
// Only lint when it's a string literal
|
|
139
|
+
if (literal == null) return;
|
|
140
|
+
|
|
141
|
+
const normalized = normalize(literal);
|
|
142
|
+
if (!whitelist.has(normalized)) {
|
|
143
|
+
context.report({
|
|
144
|
+
node: attrNode.value || attrNode,
|
|
145
|
+
messageId: 'invalidName',
|
|
146
|
+
data: {
|
|
147
|
+
componentName,
|
|
148
|
+
name: literal,
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
},
|
|
155
|
+
};
|
|
@@ -1,114 +1,15 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
3
|
-
"version": "1.0.0",
|
|
2
|
+
"name": "expo-express-monorepo",
|
|
4
3
|
"private": true,
|
|
5
|
-
"
|
|
4
|
+
"version": "0.0.0",
|
|
6
5
|
"scripts": {
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
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",
|
|
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",
|
|
18
|
-
"test": "jest --watchAll"
|
|
19
|
-
},
|
|
20
|
-
"jest": {
|
|
21
|
-
"preset": "jest-expo"
|
|
22
|
-
},
|
|
23
|
-
"dependencies": {
|
|
24
|
-
"@aws-sdk/client-s3": "^3.958.0",
|
|
25
|
-
"@aws-sdk/lib-storage": "^3.958.0",
|
|
26
|
-
"@expo/metro-runtime": "^6.1.2",
|
|
27
|
-
"@expo/vector-icons": "^15.0.0",
|
|
28
|
-
"@react-native-async-storage/async-storage": "^2.2.0",
|
|
29
|
-
"@react-native-community/datetimepicker": "^8.5.0",
|
|
30
|
-
"@react-native-community/slider": "^5.0.1",
|
|
31
|
-
"@react-native-masked-view/masked-view": "^0.3.2",
|
|
32
|
-
"@react-native-picker/picker": "^2.11.0",
|
|
33
|
-
"@react-navigation/bottom-tabs": "^7.2.0",
|
|
34
|
-
"@react-navigation/native": "^7.0.14",
|
|
35
|
-
"ajv": "^8.17.1",
|
|
36
|
-
"ajv-formats": "^3.0.1",
|
|
37
|
-
"connect": "^3.7.0",
|
|
38
|
-
"coze-coding-dev-sdk": "^0.5.5",
|
|
39
|
-
"dayjs": "^1.11.19",
|
|
40
|
-
"drizzle-kit": "^0.31.8",
|
|
41
|
-
"drizzle-orm": "^0.45.1",
|
|
42
|
-
"drizzle-zod": "^0.8.3",
|
|
43
|
-
"expo": "^54.0.7",
|
|
44
|
-
"expo-auth-session": "^7.0.9",
|
|
45
|
-
"expo-av": "~16.0.6",
|
|
46
|
-
"expo-blur": "~15.0.6",
|
|
47
|
-
"expo-camera": "~17.0.10",
|
|
48
|
-
"expo-constants": "~18.0.8",
|
|
49
|
-
"expo-crypto": "^15.0.7",
|
|
50
|
-
"expo-font": "~14.0.7",
|
|
51
|
-
"expo-haptics": "~15.0.6",
|
|
52
|
-
"expo-image-picker": "~17.0.7",
|
|
53
|
-
"expo-linear-gradient": "~15.0.6",
|
|
54
|
-
"expo-linking": "~8.0.7",
|
|
55
|
-
"expo-location": "~19.0.7",
|
|
56
|
-
"expo-router": "~6.0.0",
|
|
57
|
-
"expo-splash-screen": "~31.0.8",
|
|
58
|
-
"expo-status-bar": "~3.0.7",
|
|
59
|
-
"expo-symbols": "~1.0.6",
|
|
60
|
-
"expo-system-ui": "~6.0.9",
|
|
61
|
-
"expo-web-browser": "~15.0.10",
|
|
62
|
-
"express": "^4.22.1",
|
|
63
|
-
"http-proxy-middleware": "^3.0.5",
|
|
64
|
-
"multer": "^2.0.2",
|
|
65
|
-
"pg": "^8.16.3",
|
|
66
|
-
"react": "19.1.0",
|
|
67
|
-
"react-dom": "19.1.0",
|
|
68
|
-
"react-native": "0.81.5",
|
|
69
|
-
"react-native-chart-kit": "^6.12.0",
|
|
70
|
-
"react-native-gesture-handler": "~2.28.0",
|
|
71
|
-
"react-native-keyboard-aware-scroll-view": "^0.9.5",
|
|
72
|
-
"react-native-modal-datetime-picker": "18.0.0",
|
|
73
|
-
"react-native-reanimated": "~4.1.0",
|
|
74
|
-
"react-native-safe-area-context": "~5.6.0",
|
|
75
|
-
"react-native-screens": "~4.16.0",
|
|
76
|
-
"react-native-svg": "15.15.0",
|
|
77
|
-
"react-native-toast-message": "^2.3.3",
|
|
78
|
-
"react-native-web": "^0.21.2",
|
|
79
|
-
"react-native-webview": "~13.15.0",
|
|
80
|
-
"react-native-worklets": "0.5.1",
|
|
81
|
-
"zod": "^4.2.1"
|
|
82
|
-
},
|
|
83
|
-
"devDependencies": {
|
|
84
|
-
"@babel/core": "^7.25.2",
|
|
85
|
-
"@eslint/js": "^9.27.0",
|
|
86
|
-
"@types/express": "^5.0.6",
|
|
87
|
-
"@types/jest": "^29.5.12",
|
|
88
|
-
"@types/multer": "^2.0.0",
|
|
89
|
-
"@types/pg": "^8.16.0",
|
|
90
|
-
"@types/react": "~19.1.0",
|
|
91
|
-
"@types/react-test-renderer": "19.1.0",
|
|
92
|
-
"babel-plugin-module-resolver": "^5.0.2",
|
|
93
|
-
"babel-preset-expo": "^54.0.9",
|
|
94
|
-
"chalk": "^4.1.2",
|
|
95
|
-
"depcheck": "^1.4.7",
|
|
96
|
-
"esbuild": "0.27.2",
|
|
97
|
-
"eslint": "^9.39.2",
|
|
98
|
-
"eslint-formatter-compact": "^9.0.1",
|
|
99
|
-
"eslint-import-resolver-typescript": "^4.4.4",
|
|
100
|
-
"eslint-plugin-import": "^2.32.0",
|
|
101
|
-
"eslint-plugin-react": "^7.37.5",
|
|
102
|
-
"eslint-plugin-react-hooks": "^7.0.1",
|
|
103
|
-
"eslint-plugin-regexp": "^2.10.0",
|
|
104
|
-
"globals": "^16.1.0",
|
|
105
|
-
"jest": "^29.2.1",
|
|
106
|
-
"jest-expo": "~54.0.10",
|
|
107
|
-
"react-test-renderer": "19.1.0",
|
|
108
|
-
"tsx": "^4.21.0",
|
|
109
|
-
"typescript": "^5.8.3",
|
|
110
|
-
"typescript-eslint": "^8.32.1"
|
|
6
|
+
"dev": "bash .cozeproj/scripts/dev_run.sh",
|
|
7
|
+
"build": "bash .cozeproj/scripts/prod_build.sh",
|
|
8
|
+
"start": "bash .cozeproj/scripts/prod_run.sh",
|
|
9
|
+
"preinstall": "npx only-allow pnpm"
|
|
111
10
|
},
|
|
11
|
+
"dependencies": {},
|
|
12
|
+
"devDependencies": {},
|
|
112
13
|
"packageManager": "pnpm@9.0.0",
|
|
113
14
|
"engines": {
|
|
114
15
|
"pnpm": ">=9.0.0"
|