@cosui/genui-toolkit 1.0.0

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 (83) hide show
  1. package/README.md +43 -0
  2. package/bin/genui +2 -0
  3. package/dist/auth.d.ts +3 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +132 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/check/artifact.d.ts +16 -0
  8. package/dist/check/artifact.d.ts.map +1 -0
  9. package/dist/check/artifact.js +209 -0
  10. package/dist/check/artifact.js.map +1 -0
  11. package/dist/check/checker.d.ts +6 -0
  12. package/dist/check/checker.d.ts.map +1 -0
  13. package/dist/check/checker.js +79 -0
  14. package/dist/check/checker.js.map +1 -0
  15. package/dist/check/cli.d.ts +5 -0
  16. package/dist/check/cli.d.ts.map +1 -0
  17. package/dist/check/cli.js +110 -0
  18. package/dist/check/cli.js.map +1 -0
  19. package/dist/check/rules/artifact.d.ts +3 -0
  20. package/dist/check/rules/artifact.d.ts.map +1 -0
  21. package/dist/check/rules/artifact.js +96 -0
  22. package/dist/check/rules/artifact.js.map +1 -0
  23. package/dist/check/rules/common.d.ts +16 -0
  24. package/dist/check/rules/common.d.ts.map +1 -0
  25. package/dist/check/rules/common.js +60 -0
  26. package/dist/check/rules/common.js.map +1 -0
  27. package/dist/check/rules/file.d.ts +3 -0
  28. package/dist/check/rules/file.d.ts.map +1 -0
  29. package/dist/check/rules/file.js +157 -0
  30. package/dist/check/rules/file.js.map +1 -0
  31. package/dist/check/rules/html.d.ts +3 -0
  32. package/dist/check/rules/html.d.ts.map +1 -0
  33. package/dist/check/rules/html.js +414 -0
  34. package/dist/check/rules/html.js.map +1 -0
  35. package/dist/check/rules/index.d.ts +6 -0
  36. package/dist/check/rules/index.d.ts.map +1 -0
  37. package/dist/check/rules/index.js +59 -0
  38. package/dist/check/rules/index.js.map +1 -0
  39. package/dist/check/rules/javascript.d.ts +3 -0
  40. package/dist/check/rules/javascript.d.ts.map +1 -0
  41. package/dist/check/rules/javascript.js +541 -0
  42. package/dist/check/rules/javascript.js.map +1 -0
  43. package/dist/check/rules/svg.d.ts +8 -0
  44. package/dist/check/rules/svg.d.ts.map +1 -0
  45. package/dist/check/rules/svg.js +100 -0
  46. package/dist/check/rules/svg.js.map +1 -0
  47. package/dist/check/types.d.ts +50 -0
  48. package/dist/check/types.d.ts.map +1 -0
  49. package/dist/check/types.js +3 -0
  50. package/dist/check/types.js.map +1 -0
  51. package/dist/cli.d.ts +3 -0
  52. package/dist/cli.d.ts.map +1 -0
  53. package/dist/cli.js +62 -0
  54. package/dist/cli.js.map +1 -0
  55. package/dist/config.d.ts +8 -0
  56. package/dist/config.d.ts.map +1 -0
  57. package/dist/config.js +64 -0
  58. package/dist/config.js.map +1 -0
  59. package/dist/env.d.ts +2 -0
  60. package/dist/env.d.ts.map +1 -0
  61. package/dist/env.js +25 -0
  62. package/dist/env.js.map +1 -0
  63. package/dist/output.d.ts +8 -0
  64. package/dist/output.d.ts.map +1 -0
  65. package/dist/output.js +42 -0
  66. package/dist/output.js.map +1 -0
  67. package/dist/preview.d.ts +21 -0
  68. package/dist/preview.d.ts.map +1 -0
  69. package/dist/preview.js +295 -0
  70. package/dist/preview.js.map +1 -0
  71. package/dist/project.d.ts +5 -0
  72. package/dist/project.d.ts.map +1 -0
  73. package/dist/project.js +22 -0
  74. package/dist/project.js.map +1 -0
  75. package/dist/push.d.ts +2 -0
  76. package/dist/push.d.ts.map +1 -0
  77. package/dist/push.js +322 -0
  78. package/dist/push.js.map +1 -0
  79. package/dist/remote.d.ts +15 -0
  80. package/dist/remote.d.ts.map +1 -0
  81. package/dist/remote.js +73 -0
  82. package/dist/remote.js.map +1 -0
  83. package/package.json +27 -0
package/dist/push.js ADDED
@@ -0,0 +1,322 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runPush = runPush;
7
+ const node_crypto_1 = require("node:crypto");
8
+ const node_fs_1 = __importDefault(require("node:fs"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const promises_1 = __importDefault(require("node:readline/promises"));
11
+ const minimist_1 = __importDefault(require("minimist"));
12
+ const cli_js_1 = require("./check/cli.js");
13
+ const auth_js_1 = require("./auth.js");
14
+ const config_js_1 = require("./config.js");
15
+ const project_js_1 = require("./project.js");
16
+ const remote_js_1 = require("./remote.js");
17
+ const output_js_1 = require("./output.js");
18
+ const preview_js_1 = require("./preview.js");
19
+ const MAX_LOGO_SIZE = 5 * 1024 * 1024;
20
+ function readAppConfig() {
21
+ const configPath = node_path_1.default.resolve('app.json');
22
+ if (!node_fs_1.default.existsSync(configPath)) {
23
+ return { _: [] };
24
+ }
25
+ let config = {};
26
+ try {
27
+ config = JSON.parse(node_fs_1.default.readFileSync(configPath, 'utf8'));
28
+ }
29
+ catch (error) {
30
+ throw new Error(`app.json 格式错误:${error instanceof Error ? error.message : String(error)}`);
31
+ }
32
+ if (!config || typeof config !== 'object' || Array.isArray(config)) {
33
+ throw new Error('app.json 必须是 JSON 对象');
34
+ }
35
+ return {
36
+ _: [],
37
+ appkey: config.appkey || config.appKey,
38
+ 'project-path': config.projectPath || config['project-path'],
39
+ name: config.name,
40
+ logo: config.logo,
41
+ brief: config.brief,
42
+ description: config.description || config.desc,
43
+ };
44
+ }
45
+ function mergeArgs(config, cli) {
46
+ const explicit = Object.fromEntries(Object.entries(cli).filter(([key, value]) => key === '_' || value !== undefined));
47
+ return { ...config, ...explicit };
48
+ }
49
+ function validateLogo(filePath) {
50
+ const resolved = node_path_1.default.resolve(filePath);
51
+ if (!node_fs_1.default.existsSync(resolved) || !node_fs_1.default.statSync(resolved).isFile()) {
52
+ throw new Error(`Logo 文件不存在:${resolved}`);
53
+ }
54
+ if (node_fs_1.default.statSync(resolved).size > MAX_LOGO_SIZE) {
55
+ throw new Error('Logo 不能超过 5MB');
56
+ }
57
+ }
58
+ function validateText(label, value, limit) {
59
+ if (value && [...value].length > limit) {
60
+ throw new Error(`${label}不能超过 ${limit} 字`);
61
+ }
62
+ }
63
+ async function uploadFile(filePath, label) {
64
+ const resolved = node_path_1.default.resolve(filePath);
65
+ if (!node_fs_1.default.existsSync(resolved) || !node_fs_1.default.statSync(resolved).isFile()) {
66
+ throw new Error(`${label} 文件不存在:${resolved}`);
67
+ }
68
+ const form = new FormData();
69
+ form.append('file', new Blob([node_fs_1.default.readFileSync(resolved)]), node_path_1.default.basename(resolved));
70
+ const result = await (0, remote_js_1.request)('/api/app/upload', {
71
+ method: 'POST',
72
+ body: form,
73
+ });
74
+ return result;
75
+ }
76
+ async function confirm(message) {
77
+ if (!process.stdin.isTTY) {
78
+ throw new Error('发布需要确认;自动化环境请显式传入 --yes');
79
+ }
80
+ const prompt = promises_1.default.createInterface({ input: process.stdin, output: process.stdout });
81
+ const answer = await prompt.question(`${message} [y/N] `);
82
+ prompt.close();
83
+ return /^y(es)?$/i.test(answer.trim());
84
+ }
85
+ function ruleIssues(error) {
86
+ if (!error || typeof error !== 'object' || !('responseData' in error)) {
87
+ return [];
88
+ }
89
+ const responseData = error.responseData;
90
+ const issues = responseData?.issues;
91
+ if (!Array.isArray(issues)) {
92
+ return [];
93
+ }
94
+ return issues.flatMap(issue => {
95
+ if (!issue || typeof issue !== 'object') {
96
+ return [];
97
+ }
98
+ const rule = String(issue.ruled
99
+ || issue.ruleId
100
+ || '-');
101
+ const description = String(issue.description || '');
102
+ const messages = issue.messages;
103
+ return Array.isArray(messages)
104
+ ? [{ file: String(responseData?.file || '-'), rule, description, messages: messages.map(String) }]
105
+ : [];
106
+ });
107
+ }
108
+ function red(text) {
109
+ return process.env.NO_COLOR ? text : `\u001B[31m${text}\u001B[39m`;
110
+ }
111
+ async function onlineApp(appkey) {
112
+ if (!appkey) {
113
+ return undefined;
114
+ }
115
+ const { list: apps } = await (0, remote_js_1.request)('/api/app/list');
116
+ const app = apps.find(item => item.appKey === appkey);
117
+ if (!app) {
118
+ throw new Error(`未找到应用:${appkey}`);
119
+ }
120
+ const detail = await (0, remote_js_1.request)(`/api/app/${app.appId}`);
121
+ return { ...detail, status: app.status };
122
+ }
123
+ async function push(args) {
124
+ const projectPath = args.p || args['project-path'];
125
+ validateText('应用名称', args.name, 10);
126
+ validateText('应用简介', args.brief, 15);
127
+ validateText('应用摘要', args.description || args.desc, 50);
128
+ if (args.logo) {
129
+ validateLogo(args.logo);
130
+ }
131
+ if (!args.appkey) {
132
+ const missing = [
133
+ !projectPath && '--project-path', !args.name && '--name', !args.logo && '--logo',
134
+ !args.brief && '--brief', !args.description && !args.desc && '--description',
135
+ ].filter(Boolean);
136
+ if (missing.length) {
137
+ throw new Error(`新增应用缺少必填参数:${missing.join('、')}`);
138
+ }
139
+ }
140
+ else if (!projectPath && !args.name && !args.logo && !args.brief && !args.description && !args.desc) {
141
+ throw new Error('更新应用时,除 --appkey 外至少需要提供一个要更新的参数');
142
+ }
143
+ const entry = projectPath ? (0, project_js_1.resolveProject)(projectPath).entry : undefined;
144
+ if (entry) {
145
+ output_js_1.output.stage('代码诊断');
146
+ output_js_1.output.info('正在进行代码诊断');
147
+ const oldExitCode = process.exitCode;
148
+ process.exitCode = undefined;
149
+ try {
150
+ await (0, cli_js_1.runCheck)([entry]);
151
+ if (process.exitCode) {
152
+ throw new Error('规则检查未通过,已停止发布');
153
+ }
154
+ }
155
+ finally {
156
+ process.exitCode = oldExitCode;
157
+ }
158
+ if (!args['dry-run'] && !args.yes) {
159
+ output_js_1.output.stage('应用预览');
160
+ output_js_1.output.info('正在启动预览服务');
161
+ const preview = await (0, preview_js_1.startPreview)(entry, 0, args.name || '', args.description || args.desc || '');
162
+ try {
163
+ output_js_1.output.success('预览服务启动完成');
164
+ await (0, preview_js_1.showPreview)(preview);
165
+ const previewApproved = await confirm('请确认预览效果,是否继续发布?');
166
+ if (!previewApproved) {
167
+ output_js_1.output.warning('已取消发布');
168
+ return;
169
+ }
170
+ output_js_1.output.success('预览确认通过');
171
+ }
172
+ finally {
173
+ await preview.close();
174
+ }
175
+ }
176
+ }
177
+ output_js_1.output.stage('登录状态');
178
+ output_js_1.output.info('正在检查登录状态');
179
+ if (!(0, config_js_1.getToken)()) {
180
+ output_js_1.output.info('未登录,正在调起登录');
181
+ await (0, auth_js_1.runLogin)([]);
182
+ }
183
+ else {
184
+ output_js_1.output.success('当前已登录');
185
+ }
186
+ output_js_1.output.stage('应用信息');
187
+ output_js_1.output.info('正在检查应用信息');
188
+ const online = await onlineApp(args.appkey);
189
+ if (online?.status === 1) {
190
+ throw new Error('应用正在审核中,请等待审核通过后再重新发布');
191
+ }
192
+ const name = args.name || online?.name;
193
+ const brief = args.brief || online?.brief;
194
+ const description = args.description || args.desc || online?.description;
195
+ const missing = [
196
+ !entry && !online?.originFileUrl && '--project-path', !name && '--name',
197
+ !args.logo && !online?.logo && '--logo',
198
+ !brief && '--brief', !description && '--description',
199
+ ].filter(Boolean);
200
+ if (missing.length) {
201
+ throw new Error(`应用缺少必填数据:${missing.join('、')}`);
202
+ }
203
+ validateText('应用名称', name, 10);
204
+ validateText('应用简介', brief, 15);
205
+ validateText('应用摘要', description, 50);
206
+ output_js_1.output.success('应用信息检查完成');
207
+ output_js_1.output.table([
208
+ { 字段: '发布类型', 值: args.appkey ? '更新已有应用' : '新增应用' },
209
+ { 字段: 'appKey', 值: args.appkey || '-' },
210
+ { 字段: '项目文件', 值: entry || online?.originFileUrl },
211
+ { 字段: '应用名称', 值: name },
212
+ { 字段: 'Logo', 值: args.logo ? node_path_1.default.resolve(args.logo) : online?.logo },
213
+ { 字段: '应用简介', 值: brief },
214
+ { 字段: '应用摘要', 值: description },
215
+ { 字段: '状态', 值: '待提交' },
216
+ ]);
217
+ if (args['dry-run']) {
218
+ output_js_1.output.success('发布信息预检完成,未上传文件或提交审核');
219
+ return;
220
+ }
221
+ if (!args.yes) {
222
+ output_js_1.output.warning('一旦发布,需要等待审核通过后才能重新发布');
223
+ const submitApproved = await confirm('是否确认发布?');
224
+ if (!submitApproved) {
225
+ output_js_1.output.warning('已取消发布');
226
+ return;
227
+ }
228
+ }
229
+ output_js_1.output.stage('文件上传');
230
+ output_js_1.output.info('正在准备上传文件');
231
+ const localHash = entry
232
+ ? (0, node_crypto_1.createHash)('sha256').update(node_fs_1.default.readFileSync(entry)).digest('hex')
233
+ : undefined;
234
+ const onlineProject = online?.originFileUrl
235
+ && online.originFileName
236
+ && online.originFileSize
237
+ && online.originFileHash ? {
238
+ originFileUrl: online.originFileUrl,
239
+ originFileName: online.originFileName,
240
+ originFileSize: online.originFileSize,
241
+ originFileHash: online.originFileHash,
242
+ files: online.files,
243
+ } : undefined;
244
+ output_js_1.output.info(entry ? '正在处理项目文件' : '复用线上项目文件');
245
+ const projectUpload = entry && onlineProject?.originFileHash !== localHash
246
+ ? await uploadFile(entry, '项目文件')
247
+ : !onlineProject && entry ? await uploadFile(entry, '项目文件') : undefined;
248
+ const project = projectUpload && entry ? {
249
+ ...projectUpload,
250
+ originFileName: projectUpload.originFileName || node_path_1.default.basename(entry),
251
+ originFileSize: projectUpload.originFileSize || String(node_fs_1.default.statSync(entry).size),
252
+ originFileHash: projectUpload.originFileHash || localHash,
253
+ } : onlineProject;
254
+ if (!project) {
255
+ throw new Error('项目线上数据不完整,请使用 --project-path 重新上传');
256
+ }
257
+ output_js_1.output.info(args.logo ? '正在上传 Logo' : '复用线上 Logo');
258
+ const logo = args.logo ? (await uploadFile(args.logo, 'Logo')).originFileUrl : online?.logo;
259
+ if (!logo) {
260
+ throw new Error('Logo 上传响应缺少 url');
261
+ }
262
+ const files = project.files || [];
263
+ output_js_1.output.success('文件上传完成');
264
+ output_js_1.output.stage('提交审核');
265
+ output_js_1.output.info('正在提交审核');
266
+ const result = await (0, remote_js_1.request)('/api/app/submit', {
267
+ method: 'POST',
268
+ headers: { 'content-type': 'application/json' },
269
+ body: JSON.stringify({
270
+ appId: online?.appId,
271
+ name,
272
+ logo,
273
+ brief,
274
+ description,
275
+ originFileUrl: project.originFileUrl,
276
+ originFileName: project.originFileName,
277
+ originFileSize: project.originFileSize,
278
+ originFileHash: project.originFileHash,
279
+ files,
280
+ }),
281
+ }, false);
282
+ if (result.status !== 0 || !result.data) {
283
+ throw new Error(result.message || '提交审核失败');
284
+ }
285
+ output_js_1.output.success('提交审核完成');
286
+ output_js_1.output.table([{
287
+ appKey: result.data.appKey,
288
+ name,
289
+ status: '发布成功',
290
+ message: '已进入审核阶段',
291
+ }]);
292
+ console.log('更多详情可到 https://ziyuan.baidu.com/aitoolset/index 查看');
293
+ }
294
+ async function runPush(argv) {
295
+ const cliArgs = (0, minimist_1.default)(argv, {
296
+ alias: {
297
+ p: 'project-path', a: 'appkey', n: 'name', l: 'logo',
298
+ b: 'brief', d: 'description',
299
+ },
300
+ boolean: ['yes', 'dry-run'],
301
+ });
302
+ const args = mergeArgs(readAppConfig(), cliArgs);
303
+ try {
304
+ await push(args);
305
+ }
306
+ catch (error) {
307
+ const message = error instanceof Error ? error.message : String(error);
308
+ const issues = ruleIssues(error);
309
+ if (issues.length) {
310
+ output_js_1.output.stage('规则检查未通过');
311
+ console.log(issues.map(({ file, rule, description, messages }) => `${file}\n${red(rule)}${description ? `:${description}` : ''}\n${messages.join('\n')}`).join('\n\n'));
312
+ }
313
+ else {
314
+ console.error(`执行失败,失败原因:${message}`);
315
+ }
316
+ if (error && typeof error === 'object') {
317
+ Object.assign(error, { handled: true });
318
+ }
319
+ throw error;
320
+ }
321
+ }
322
+ //# sourceMappingURL=push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface AppListItem {
2
+ appId: number;
3
+ appKey: string;
4
+ name: string;
5
+ status: number;
6
+ }
7
+ export interface AppListResponse {
8
+ total: number;
9
+ pageNo: number;
10
+ pageSize: number;
11
+ list: AppListItem[];
12
+ }
13
+ export declare function request<T>(pathname: string, init?: RequestInit, unwrapData?: boolean): Promise<T>;
14
+ export declare function runList(argv: string[]): Promise<void>;
15
+ //# sourceMappingURL=remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,WAAW,EAAE,CAAC;CACvB;AAqCD,wBAAsB,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAkBxG;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB3D"}
package/dist/remote.js ADDED
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.request = request;
4
+ exports.runList = runList;
5
+ const auth_js_1 = require("./auth.js");
6
+ const config_js_1 = require("./config.js");
7
+ const output_js_1 = require("./output.js");
8
+ const STATUS_LABELS = {
9
+ 0: '待提审',
10
+ 1: '审核中',
11
+ 2: '未通过',
12
+ 3: '已上线',
13
+ 4: '已下线',
14
+ 5: '审核通过',
15
+ };
16
+ async function fetchWithToken(pathname, init) {
17
+ const headers = new Headers(init.headers);
18
+ headers.set('Authorization', `Bearer ${(0, config_js_1.requireToken)()}`);
19
+ try {
20
+ const response = await fetch(`${config_js_1.apiBase}${pathname}`, {
21
+ ...init,
22
+ headers,
23
+ });
24
+ const body = await response.json().catch(() => ({}));
25
+ return { response, body };
26
+ }
27
+ catch (error) {
28
+ const detail = error instanceof Error && error.cause && typeof error.cause === 'object'
29
+ && 'code' in error.cause && error.cause.code === 'ECONNREFUSED'
30
+ ? `服务未启动或端口不可达(${config_js_1.apiBase})`
31
+ : `网络错误(${config_js_1.apiBase})`;
32
+ throw new Error(detail);
33
+ }
34
+ }
35
+ async function request(pathname, init = {}, unwrapData = true) {
36
+ let { response, body } = await fetchWithToken(pathname, init);
37
+ const errorCode = String(body.errorCode || '');
38
+ if (response.status === 401 && ['TOKEN_INVALID', 'TOKEN_EXPIRED'].includes(errorCode)) {
39
+ output_js_1.output.warning('登录态已失效,请重新登录');
40
+ (0, config_js_1.clearToken)();
41
+ await (0, auth_js_1.runLogin)([]);
42
+ ({ response, body } = await fetchWithToken(pathname, init));
43
+ }
44
+ if (!response.ok) {
45
+ const error = new Error(String(body.message || `请求失败 (${response.status})`));
46
+ Object.assign(error, { errorCode: body.errorCode, responseData: body.data });
47
+ throw error;
48
+ }
49
+ return (unwrapData ? body.data ?? body : body);
50
+ }
51
+ async function runList(argv) {
52
+ if (argv.length) {
53
+ throw new Error('list 命令不接受参数');
54
+ }
55
+ if (!(0, config_js_1.getToken)()) {
56
+ await (0, auth_js_1.runLogin)([]);
57
+ }
58
+ const { list: apps } = await request('/api/app/list');
59
+ if (!apps.length) {
60
+ console.log(`┌──────────┬─────────────┬──────────────┐
61
+ │ 应用名称 │ 项目 appkey │ 应用审核状态 │
62
+ ├──────────┼─────────────┼──────────────┤
63
+ │ 暂无应用 │ - │ - │
64
+ └──────────┴─────────────┴──────────────┘`);
65
+ return;
66
+ }
67
+ output_js_1.output.table(apps.map(({ name, appKey, status }) => ({
68
+ 应用名称: name,
69
+ '项目 appkey': appKey,
70
+ 应用审核状态: STATUS_LABELS[status] || status,
71
+ })));
72
+ }
73
+ //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@cosui/genui-toolkit",
3
+ "version": "1.0.0",
4
+ "description": "GenUI 工具集",
5
+ "main": "dist/cli.js",
6
+ "bin": {
7
+ "genui": "./bin/genui"
8
+ },
9
+ "files": [
10
+ "bin",
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "engines": {
15
+ "node": ">=20"
16
+ },
17
+ "license": "Apache-2.0",
18
+ "dependencies": {
19
+ "minimist": "^1.2.8",
20
+ "parse5": "^7.3.0",
21
+ "postcss": "^8.5.26",
22
+ "qrcode": "^1.5.4",
23
+ "qrcode-terminal": "^0.12.0",
24
+ "typescript": "^5.9.3",
25
+ "yauzl": "^3.4.0"
26
+ }
27
+ }