colyn-cli 3.1.4
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/README-en.md +85 -0
- package/README.md +85 -0
- package/bin/colyn +25 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +116 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add.d.ts +6 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.helpers.d.ts +48 -0
- package/dist/commands/add.helpers.d.ts.map +1 -0
- package/dist/commands/add.helpers.js +251 -0
- package/dist/commands/add.helpers.js.map +1 -0
- package/dist/commands/add.js +286 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/checkout.d.ts +16 -0
- package/dist/commands/checkout.d.ts.map +1 -0
- package/dist/commands/checkout.js +428 -0
- package/dist/commands/checkout.js.map +1 -0
- package/dist/commands/completion.d.ts +10 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +380 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +11 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +338 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/index.d.ts +10 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +41 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/info.d.ts +6 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +374 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.handlers.d.ts +27 -0
- package/dist/commands/init.handlers.d.ts.map +1 -0
- package/dist/commands/init.handlers.js +314 -0
- package/dist/commands/init.handlers.js.map +1 -0
- package/dist/commands/init.helpers.d.ts +42 -0
- package/dist/commands/init.helpers.d.ts.map +1 -0
- package/dist/commands/init.helpers.js +275 -0
- package/dist/commands/init.helpers.js.map +1 -0
- package/dist/commands/init.js +61 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +6 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.helpers.d.ts +32 -0
- package/dist/commands/install.helpers.d.ts.map +1 -0
- package/dist/commands/install.helpers.js +124 -0
- package/dist/commands/install.helpers.js.map +1 -0
- package/dist/commands/install.js +104 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list-project.d.ts +11 -0
- package/dist/commands/list-project.d.ts.map +1 -0
- package/dist/commands/list-project.js +260 -0
- package/dist/commands/list-project.js.map +1 -0
- package/dist/commands/list.d.ts +15 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.helpers.d.ts +50 -0
- package/dist/commands/list.helpers.d.ts.map +1 -0
- package/dist/commands/list.helpers.js +143 -0
- package/dist/commands/list.helpers.js.map +1 -0
- package/dist/commands/list.js +530 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/merge.d.ts +6 -0
- package/dist/commands/merge.d.ts.map +1 -0
- package/dist/commands/merge.helpers.d.ts +74 -0
- package/dist/commands/merge.helpers.d.ts.map +1 -0
- package/dist/commands/merge.helpers.js +307 -0
- package/dist/commands/merge.helpers.js.map +1 -0
- package/dist/commands/merge.js +260 -0
- package/dist/commands/merge.js.map +1 -0
- package/dist/commands/release.d.ts +6 -0
- package/dist/commands/release.d.ts.map +1 -0
- package/dist/commands/release.helpers.d.ts +61 -0
- package/dist/commands/release.helpers.d.ts.map +1 -0
- package/dist/commands/release.helpers.js +277 -0
- package/dist/commands/release.helpers.js.map +1 -0
- package/dist/commands/release.js +127 -0
- package/dist/commands/release.js.map +1 -0
- package/dist/commands/remove.d.ts +6 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.helpers.d.ts +59 -0
- package/dist/commands/remove.helpers.d.ts.map +1 -0
- package/dist/commands/remove.helpers.js +190 -0
- package/dist/commands/remove.helpers.js.map +1 -0
- package/dist/commands/remove.js +137 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/repair.d.ts +6 -0
- package/dist/commands/repair.d.ts.map +1 -0
- package/dist/commands/repair.helpers.d.ts +5 -0
- package/dist/commands/repair.helpers.d.ts.map +1 -0
- package/dist/commands/repair.helpers.js +499 -0
- package/dist/commands/repair.helpers.js.map +1 -0
- package/dist/commands/repair.js +28 -0
- package/dist/commands/repair.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +116 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/system-integration.d.ts +6 -0
- package/dist/commands/system-integration.d.ts.map +1 -0
- package/dist/commands/system-integration.helpers.d.ts +70 -0
- package/dist/commands/system-integration.helpers.d.ts.map +1 -0
- package/dist/commands/system-integration.helpers.js +313 -0
- package/dist/commands/system-integration.helpers.js.map +1 -0
- package/dist/commands/system-integration.js +132 -0
- package/dist/commands/system-integration.js.map +1 -0
- package/dist/commands/tmux.d.ts +11 -0
- package/dist/commands/tmux.d.ts.map +1 -0
- package/dist/commands/tmux.js +500 -0
- package/dist/commands/tmux.js.map +1 -0
- package/dist/commands/todo.d.ts +6 -0
- package/dist/commands/todo.d.ts.map +1 -0
- package/dist/commands/todo.helpers.d.ts +50 -0
- package/dist/commands/todo.helpers.d.ts.map +1 -0
- package/dist/commands/todo.helpers.js +297 -0
- package/dist/commands/todo.helpers.js.map +1 -0
- package/dist/commands/todo.js +579 -0
- package/dist/commands/todo.js.map +1 -0
- package/dist/commands/update.d.ts +18 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.helpers.d.ts +89 -0
- package/dist/commands/update.helpers.d.ts.map +1 -0
- package/dist/commands/update.helpers.js +335 -0
- package/dist/commands/update.helpers.js.map +1 -0
- package/dist/commands/update.js +187 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/core/config-loader.d.ts +47 -0
- package/dist/core/config-loader.d.ts.map +1 -0
- package/dist/core/config-loader.js +188 -0
- package/dist/core/config-loader.js.map +1 -0
- package/dist/core/config-merger.d.ts +29 -0
- package/dist/core/config-merger.d.ts.map +1 -0
- package/dist/core/config-merger.js +100 -0
- package/dist/core/config-merger.js.map +1 -0
- package/dist/core/config-migration.d.ts +64 -0
- package/dist/core/config-migration.d.ts.map +1 -0
- package/dist/core/config-migration.js +340 -0
- package/dist/core/config-migration.js.map +1 -0
- package/dist/core/config-new.d.ts +19 -0
- package/dist/core/config-new.d.ts.map +1 -0
- package/dist/core/config-new.js +58 -0
- package/dist/core/config-new.js.map +1 -0
- package/dist/core/config-schema.d.ts +221 -0
- package/dist/core/config-schema.d.ts.map +1 -0
- package/dist/core/config-schema.js +168 -0
- package/dist/core/config-schema.js.map +1 -0
- package/dist/core/config.d.ts +55 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +143 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/dev-server.d.ts +29 -0
- package/dist/core/dev-server.d.ts.map +1 -0
- package/dist/core/dev-server.js +54 -0
- package/dist/core/dev-server.js.map +1 -0
- package/dist/core/discovery.d.ts +51 -0
- package/dist/core/discovery.d.ts.map +1 -0
- package/dist/core/discovery.js +247 -0
- package/dist/core/discovery.js.map +1 -0
- package/dist/core/env.d.ts +13 -0
- package/dist/core/env.d.ts.map +1 -0
- package/dist/core/env.js +75 -0
- package/dist/core/env.js.map +1 -0
- package/dist/core/git.d.ts +31 -0
- package/dist/core/git.d.ts.map +1 -0
- package/dist/core/git.js +56 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/paths.d.ts +86 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +256 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/tmux-config.d.ts +174 -0
- package/dist/core/tmux-config.d.ts.map +1 -0
- package/dist/core/tmux-config.js +545 -0
- package/dist/core/tmux-config.js.map +1 -0
- package/dist/core/tmux-config.legacy.d.ts +243 -0
- package/dist/core/tmux-config.legacy.d.ts.map +1 -0
- package/dist/core/tmux-config.legacy.js +896 -0
- package/dist/core/tmux-config.legacy.js.map +1 -0
- package/dist/core/tmux.d.ts +214 -0
- package/dist/core/tmux.d.ts.map +1 -0
- package/dist/core/tmux.js +712 -0
- package/dist/core/tmux.js.map +1 -0
- package/dist/core/toolchain-resolver.d.ts +51 -0
- package/dist/core/toolchain-resolver.d.ts.map +1 -0
- package/dist/core/toolchain-resolver.js +364 -0
- package/dist/core/toolchain-resolver.js.map +1 -0
- package/dist/core/worktree-status.d.ts +20 -0
- package/dist/core/worktree-status.d.ts.map +1 -0
- package/dist/core/worktree-status.js +67 -0
- package/dist/core/worktree-status.js.map +1 -0
- package/dist/i18n/index.d.ts +36 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +157 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locales/en.d.ts +866 -0
- package/dist/i18n/locales/en.d.ts.map +1 -0
- package/dist/i18n/locales/en.js +985 -0
- package/dist/i18n/locales/en.js.map +1 -0
- package/dist/i18n/locales/zh-CN.d.ts +865 -0
- package/dist/i18n/locales/zh-CN.d.ts.map +1 -0
- package/dist/i18n/locales/zh-CN.js +985 -0
- package/dist/i18n/locales/zh-CN.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/builtin/gradle.d.ts +9 -0
- package/dist/plugins/builtin/gradle.d.ts.map +1 -0
- package/dist/plugins/builtin/gradle.js +164 -0
- package/dist/plugins/builtin/gradle.js.map +1 -0
- package/dist/plugins/builtin/maven.d.ts +9 -0
- package/dist/plugins/builtin/maven.d.ts.map +1 -0
- package/dist/plugins/builtin/maven.js +127 -0
- package/dist/plugins/builtin/maven.js.map +1 -0
- package/dist/plugins/builtin/npm.d.ts +9 -0
- package/dist/plugins/builtin/npm.d.ts.map +1 -0
- package/dist/plugins/builtin/npm.js +238 -0
- package/dist/plugins/builtin/npm.js.map +1 -0
- package/dist/plugins/builtin/pip.d.ts +9 -0
- package/dist/plugins/builtin/pip.d.ts.map +1 -0
- package/dist/plugins/builtin/pip.js +210 -0
- package/dist/plugins/builtin/pip.js.map +1 -0
- package/dist/plugins/builtin/xcode.d.ts +12 -0
- package/dist/plugins/builtin/xcode.d.ts.map +1 -0
- package/dist/plugins/builtin/xcode.js +438 -0
- package/dist/plugins/builtin/xcode.js.map +1 -0
- package/dist/plugins/index.d.ts +13 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +24 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/manager.d.ts +93 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +270 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/utils.d.ts +42 -0
- package/dist/plugins/utils.d.ts.map +1 -0
- package/dist/plugins/utils.js +175 -0
- package/dist/plugins/utils.js.map +1 -0
- package/dist/types/index.d.ts +104 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/plugin.d.ts +200 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +19 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/utils/logger.d.ts +42 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +80 -0
- package/dist/utils/logger.js.map +1 -0
- package/docs/en/manual/04-command-reference/README.md +58 -0
- package/docs/en/manual/README.md +108 -0
- package/docs/zh-CN/manual/04-command-reference/README.md +58 -0
- package/docs/zh-CN/manual/README.md +108 -0
- package/package.json +65 -0
- package/shell/colyn.sh +55 -0
- package/shell/completion.bash +270 -0
- package/shell/completion.zsh +167 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 配置文件 Schema 定义
|
|
3
|
+
*
|
|
4
|
+
* 使用 Zod 定义配置文件的结构和验证规则
|
|
5
|
+
* - 类型定义和运行时验证合二为一
|
|
6
|
+
* - 自动类型推断,无需手写 interface
|
|
7
|
+
* - 支持配置版本迁移
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
/**
|
|
11
|
+
* 内置命令常量
|
|
12
|
+
*/
|
|
13
|
+
export const BUILTIN_COMMANDS = {
|
|
14
|
+
/** 启动 dev server */
|
|
15
|
+
AUTO_DEV_SERVER: 'start dev server',
|
|
16
|
+
/** 继续 Claude 会话 */
|
|
17
|
+
AUTO_CLAUDE: 'continue claude session',
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* 布局类型
|
|
21
|
+
*/
|
|
22
|
+
export const LayoutTypeSchema = z.enum([
|
|
23
|
+
'single-pane',
|
|
24
|
+
'two-pane-horizontal',
|
|
25
|
+
'two-pane-vertical',
|
|
26
|
+
'three-pane',
|
|
27
|
+
'four-pane',
|
|
28
|
+
]);
|
|
29
|
+
/**
|
|
30
|
+
* Pane 命令 Schema
|
|
31
|
+
* - 内置命令:使用预定义的自动检测逻辑
|
|
32
|
+
* - string: 自定义命令
|
|
33
|
+
* - null: 不执行任何命令
|
|
34
|
+
*/
|
|
35
|
+
export const PaneCommandSchema = z.union([
|
|
36
|
+
z.literal(BUILTIN_COMMANDS.AUTO_DEV_SERVER),
|
|
37
|
+
z.literal(BUILTIN_COMMANDS.AUTO_CLAUDE),
|
|
38
|
+
z.string(),
|
|
39
|
+
z.null(),
|
|
40
|
+
]);
|
|
41
|
+
/**
|
|
42
|
+
* 单个 Pane 的配置 Schema
|
|
43
|
+
*/
|
|
44
|
+
export const PaneConfigSchema = z.object({
|
|
45
|
+
/** 要执行的命令 */
|
|
46
|
+
command: PaneCommandSchema.optional(),
|
|
47
|
+
/** Pane 大小(百分比,如 "50%") */
|
|
48
|
+
size: z.string().optional(),
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* Tmux 配置 Schema
|
|
52
|
+
*/
|
|
53
|
+
export const TmuxConfigSchema = z.object({
|
|
54
|
+
/** 是否自动运行命令 */
|
|
55
|
+
autoRun: z.boolean().optional(),
|
|
56
|
+
/** 布局类型 */
|
|
57
|
+
layout: LayoutTypeSchema.optional(),
|
|
58
|
+
/** 窗格配置 */
|
|
59
|
+
leftPane: PaneConfigSchema.optional(),
|
|
60
|
+
rightPane: PaneConfigSchema.optional(),
|
|
61
|
+
topPane: PaneConfigSchema.optional(),
|
|
62
|
+
bottomPane: PaneConfigSchema.optional(),
|
|
63
|
+
topRightPane: PaneConfigSchema.optional(),
|
|
64
|
+
bottomRightPane: PaneConfigSchema.optional(),
|
|
65
|
+
topLeftPane: PaneConfigSchema.optional(),
|
|
66
|
+
bottomLeftPane: PaneConfigSchema.optional(),
|
|
67
|
+
/** 四窗格布局的分割配置 */
|
|
68
|
+
horizontalSplit: z.string().optional(),
|
|
69
|
+
verticalSplit: z.string().optional(),
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* 系统命令配置 Schema
|
|
73
|
+
*/
|
|
74
|
+
export const SystemCommandsSchema = z.object({
|
|
75
|
+
/** 包管理器命令(默认为 'npm') */
|
|
76
|
+
npm: z.string().optional(),
|
|
77
|
+
/** Claude 命令(默认为 'claude') */
|
|
78
|
+
claude: z.string().optional(),
|
|
79
|
+
});
|
|
80
|
+
/**
|
|
81
|
+
* 工具链配置 Schema
|
|
82
|
+
* 描述单个子项目(或根目录)使用的工具链类型和专属配置
|
|
83
|
+
*/
|
|
84
|
+
export const ToolchainConfigSchema = z.object({
|
|
85
|
+
/** 工具链类型,如 'npm'、'maven'、'xcode' */
|
|
86
|
+
type: z.string(),
|
|
87
|
+
/** 工具链专属配置(由各插件的 repairSettings 写入,如 xcode 的 scheme/destination) */
|
|
88
|
+
settings: z.record(z.string(), z.unknown()).default({}),
|
|
89
|
+
});
|
|
90
|
+
/**
|
|
91
|
+
* 子项目配置 Schema(Mono Repo 模式)
|
|
92
|
+
*/
|
|
93
|
+
export const SubProjectSchema = z.object({
|
|
94
|
+
/** 子项目相对路径(相对于 worktree 根目录) */
|
|
95
|
+
path: z.string(),
|
|
96
|
+
/** 子项目使用的工具链,null 表示无工具链 */
|
|
97
|
+
toolchain: z.union([ToolchainConfigSchema, z.null()]),
|
|
98
|
+
});
|
|
99
|
+
/**
|
|
100
|
+
* Settings Schema 基础部分(不包含递归的 branchOverrides)
|
|
101
|
+
*/
|
|
102
|
+
const SettingsSchemaBase = z.object({
|
|
103
|
+
/** 配置文件版本号 */
|
|
104
|
+
version: z.number(),
|
|
105
|
+
/** 界面语言 */
|
|
106
|
+
lang: z.enum(['en', 'zh-CN']).optional(),
|
|
107
|
+
/** 系统命令配置 */
|
|
108
|
+
systemCommands: SystemCommandsSchema.optional(),
|
|
109
|
+
/** tmux 相关配置 */
|
|
110
|
+
tmux: TmuxConfigSchema.optional(),
|
|
111
|
+
/**
|
|
112
|
+
* 单项目模式:根目录工具链配置
|
|
113
|
+
* - undefined: 尚未检测(触发按需发现)
|
|
114
|
+
* - null: 明确无工具链
|
|
115
|
+
* - ToolchainConfig: 已配置的工具链
|
|
116
|
+
*/
|
|
117
|
+
toolchain: z.union([ToolchainConfigSchema, z.null()]).optional(),
|
|
118
|
+
/**
|
|
119
|
+
* Mono Repo 模式:子项目列表
|
|
120
|
+
* - undefined: 尚未检测
|
|
121
|
+
* - 数组:已配置的子项目列表
|
|
122
|
+
*/
|
|
123
|
+
projects: z.array(SubProjectSchema).optional(),
|
|
124
|
+
});
|
|
125
|
+
/**
|
|
126
|
+
* Settings Schema(支持递归的 branchOverrides)
|
|
127
|
+
*/
|
|
128
|
+
export const SettingsSchema = SettingsSchemaBase.extend({
|
|
129
|
+
/** 分支特定配置覆盖 */
|
|
130
|
+
branchOverrides: z
|
|
131
|
+
.record(z.string(), z.lazy(() => SettingsSchema))
|
|
132
|
+
.optional(),
|
|
133
|
+
});
|
|
134
|
+
/**
|
|
135
|
+
* 当前配置文件版本号
|
|
136
|
+
*/
|
|
137
|
+
export const CURRENT_CONFIG_VERSION = 4;
|
|
138
|
+
/**
|
|
139
|
+
* 验证配置对象
|
|
140
|
+
* @param data 待验证的数据
|
|
141
|
+
* @returns 验证后的配置对象
|
|
142
|
+
* @throws ZodError 如果验证失败
|
|
143
|
+
*/
|
|
144
|
+
export function validateSettings(data) {
|
|
145
|
+
return SettingsSchema.parse(data);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 验证配置对象(带友好的错误提示)
|
|
149
|
+
* @param filepath 配置文件路径(用于错误提示)
|
|
150
|
+
* @param data 待验证的数据
|
|
151
|
+
* @returns 验证后的配置对象
|
|
152
|
+
* @throws Error 如果验证失败,包含友好的错误信息
|
|
153
|
+
*/
|
|
154
|
+
export function validateSettingsWithFriendlyError(filepath, data) {
|
|
155
|
+
try {
|
|
156
|
+
return SettingsSchema.parse(data);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
if (error instanceof z.ZodError) {
|
|
160
|
+
const messages = error.issues
|
|
161
|
+
.map((e) => ` - ${e.path.join('.')}: ${e.message}`)
|
|
162
|
+
.join('\n');
|
|
163
|
+
throw new Error(`配置文件验证失败 (${filepath}):\n${messages}`);
|
|
164
|
+
}
|
|
165
|
+
throw error;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=config-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/core/config-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Colyn 全局配置管理模块
|
|
3
|
+
*
|
|
4
|
+
* 配置优先级(从高到低):
|
|
5
|
+
* 1. 环境变量(仅 COLYN_LANG)
|
|
6
|
+
* 2. 项目配置文件 (.colyn/config.json)
|
|
7
|
+
* 3. 用户配置文件 (~/.colyn/config.json)
|
|
8
|
+
* 4. 默认值
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Colyn 配置接口
|
|
12
|
+
*/
|
|
13
|
+
export interface ColynConfig {
|
|
14
|
+
/** 包管理器命令,默认为 'npm' */
|
|
15
|
+
npm: string;
|
|
16
|
+
/** 界面语言,默认为 'en' */
|
|
17
|
+
lang: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 导出用户配置目录路径(供其他模块使用)
|
|
21
|
+
*/
|
|
22
|
+
export declare function getGlobalConfigDir(): string;
|
|
23
|
+
/**
|
|
24
|
+
* 获取配置(带缓存)
|
|
25
|
+
* @param configDir .colyn 目录路径(可选,如果不提供则只使用环境变量、用户配置和默认值)
|
|
26
|
+
*/
|
|
27
|
+
export declare function getConfig(configDir?: string): Promise<ColynConfig>;
|
|
28
|
+
/**
|
|
29
|
+
* 获取包管理器命令
|
|
30
|
+
* @param configDir .colyn 目录路径(可选)
|
|
31
|
+
*/
|
|
32
|
+
export declare function getNpmCommand(configDir?: string): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* 获取语言配置
|
|
35
|
+
* @param configDir .colyn 目录路径(可选)
|
|
36
|
+
*/
|
|
37
|
+
export declare function getLang(configDir?: string): Promise<string>;
|
|
38
|
+
/**
|
|
39
|
+
* 获取运行脚本的命令
|
|
40
|
+
* 例如:如果 npm='yarn',返回 'yarn';如果 npm='npm',返回 'npm run'
|
|
41
|
+
* @param configDir .colyn 目录路径(可选)
|
|
42
|
+
*/
|
|
43
|
+
export declare function getRunCommand(configDir?: string): Promise<string>;
|
|
44
|
+
/**
|
|
45
|
+
* 清除配置缓存
|
|
46
|
+
* 用于测试或配置更新后
|
|
47
|
+
*/
|
|
48
|
+
export declare function clearConfigCache(): void;
|
|
49
|
+
/**
|
|
50
|
+
* 保存配置到文件
|
|
51
|
+
* @param configDir .colyn 目录路径
|
|
52
|
+
* @param updates 要更新的配置项
|
|
53
|
+
*/
|
|
54
|
+
export declare function saveConfig(configDir: string, updates: Partial<ColynConfig>): Promise<void>;
|
|
55
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAwDD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAUD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA4BxE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGvE;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGjE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASvE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Colyn 全局配置管理模块
|
|
3
|
+
*
|
|
4
|
+
* 配置优先级(从高到低):
|
|
5
|
+
* 1. 环境变量(仅 COLYN_LANG)
|
|
6
|
+
* 2. 项目配置文件 (.colyn/config.json)
|
|
7
|
+
* 3. 用户配置文件 (~/.colyn/config.json)
|
|
8
|
+
* 4. 默认值
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from 'fs/promises';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import * as os from 'os';
|
|
13
|
+
/**
|
|
14
|
+
* 默认配置
|
|
15
|
+
*/
|
|
16
|
+
const DEFAULT_CONFIG = {
|
|
17
|
+
npm: 'npm',
|
|
18
|
+
lang: 'en'
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* 配置缓存
|
|
22
|
+
*/
|
|
23
|
+
let cachedConfig = null;
|
|
24
|
+
let cachedConfigDir = null;
|
|
25
|
+
/**
|
|
26
|
+
* 从配置文件读取配置
|
|
27
|
+
* @param configDir .colyn 目录路径
|
|
28
|
+
*/
|
|
29
|
+
async function readConfigFile(configDir) {
|
|
30
|
+
const configPath = path.join(configDir, 'settings.json');
|
|
31
|
+
try {
|
|
32
|
+
const content = await fs.readFile(configPath, 'utf-8');
|
|
33
|
+
return JSON.parse(content);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// 配置文件不存在或解析失败,返回空对象
|
|
37
|
+
return {};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 获取用户配置目录路径
|
|
42
|
+
*/
|
|
43
|
+
function getUserConfigDir() {
|
|
44
|
+
return path.join(os.homedir(), '.config', 'colyn');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 导出用户配置目录路径(供其他模块使用)
|
|
48
|
+
*/
|
|
49
|
+
export function getGlobalConfigDir() {
|
|
50
|
+
return getUserConfigDir();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 读取用户配置文件
|
|
54
|
+
*/
|
|
55
|
+
async function readUserConfigFile() {
|
|
56
|
+
const userConfigDir = getUserConfigDir();
|
|
57
|
+
return readConfigFile(userConfigDir);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 获取配置(带缓存)
|
|
61
|
+
* @param configDir .colyn 目录路径(可选,如果不提供则只使用环境变量、用户配置和默认值)
|
|
62
|
+
*/
|
|
63
|
+
export async function getConfig(configDir) {
|
|
64
|
+
// 如果缓存有效,直接返回
|
|
65
|
+
if (cachedConfig && cachedConfigDir === configDir) {
|
|
66
|
+
return cachedConfig;
|
|
67
|
+
}
|
|
68
|
+
// 读取项目配置文件
|
|
69
|
+
const projectConfig = configDir ? await readConfigFile(configDir) : {};
|
|
70
|
+
// 读取用户配置文件
|
|
71
|
+
const userConfig = await readUserConfigFile();
|
|
72
|
+
// 合并配置(项目配置 > 用户配置 > 默认值)
|
|
73
|
+
// 支持新的 systemCommands 结构,同时向后兼容旧的扁平结构
|
|
74
|
+
const config = {
|
|
75
|
+
npm: projectConfig.systemCommands?.npm ||
|
|
76
|
+
projectConfig.npm ||
|
|
77
|
+
userConfig.systemCommands?.npm ||
|
|
78
|
+
userConfig.npm ||
|
|
79
|
+
DEFAULT_CONFIG.npm,
|
|
80
|
+
lang: process.env.COLYN_LANG || projectConfig.lang || userConfig.lang || DEFAULT_CONFIG.lang
|
|
81
|
+
};
|
|
82
|
+
// 缓存配置
|
|
83
|
+
cachedConfig = config;
|
|
84
|
+
cachedConfigDir = configDir ?? null;
|
|
85
|
+
return config;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 获取包管理器命令
|
|
89
|
+
* @param configDir .colyn 目录路径(可选)
|
|
90
|
+
*/
|
|
91
|
+
export async function getNpmCommand(configDir) {
|
|
92
|
+
const config = await getConfig(configDir);
|
|
93
|
+
return config.npm;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 获取语言配置
|
|
97
|
+
* @param configDir .colyn 目录路径(可选)
|
|
98
|
+
*/
|
|
99
|
+
export async function getLang(configDir) {
|
|
100
|
+
const config = await getConfig(configDir);
|
|
101
|
+
return config.lang;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 获取运行脚本的命令
|
|
105
|
+
* 例如:如果 npm='yarn',返回 'yarn';如果 npm='npm',返回 'npm run'
|
|
106
|
+
* @param configDir .colyn 目录路径(可选)
|
|
107
|
+
*/
|
|
108
|
+
export async function getRunCommand(configDir) {
|
|
109
|
+
const npm = await getNpmCommand(configDir);
|
|
110
|
+
// npm 需要加 'run',yarn 和 pnpm 不需要
|
|
111
|
+
if (npm === 'npm') {
|
|
112
|
+
return 'npm run';
|
|
113
|
+
}
|
|
114
|
+
return npm;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* 清除配置缓存
|
|
118
|
+
* 用于测试或配置更新后
|
|
119
|
+
*/
|
|
120
|
+
export function clearConfigCache() {
|
|
121
|
+
cachedConfig = null;
|
|
122
|
+
cachedConfigDir = null;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 保存配置到文件
|
|
126
|
+
* @param configDir .colyn 目录路径
|
|
127
|
+
* @param updates 要更新的配置项
|
|
128
|
+
*/
|
|
129
|
+
export async function saveConfig(configDir, updates) {
|
|
130
|
+
const configPath = path.join(configDir, 'settings.json');
|
|
131
|
+
// 读取现有配置
|
|
132
|
+
const existingConfig = await readConfigFile(configDir);
|
|
133
|
+
// 合并配置
|
|
134
|
+
const newConfig = {
|
|
135
|
+
...existingConfig,
|
|
136
|
+
...updates
|
|
137
|
+
};
|
|
138
|
+
// 写入文件
|
|
139
|
+
await fs.writeFile(configPath, JSON.stringify(newConfig, null, 2) + '\n', 'utf-8');
|
|
140
|
+
// 清除缓存
|
|
141
|
+
clearConfigCache();
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev Server 检测模块
|
|
3
|
+
*
|
|
4
|
+
* 检测项目的开发服务器配置并提供启动命令
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Dev Server 信息
|
|
8
|
+
*/
|
|
9
|
+
export interface DevServerInfo {
|
|
10
|
+
/** 是否检测到 dev 命令 */
|
|
11
|
+
hasDevCommand: boolean;
|
|
12
|
+
/** 启动命令(如果检测到) */
|
|
13
|
+
command?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 检测 dev server 信息
|
|
17
|
+
* @param projectDir 项目目录
|
|
18
|
+
* @param configDir .colyn 配置目录(可选,用于读取 npm 命令配置)
|
|
19
|
+
* @returns Dev server 信息
|
|
20
|
+
*/
|
|
21
|
+
export declare function detectDevServer(projectDir: string, configDir?: string): Promise<DevServerInfo>;
|
|
22
|
+
/**
|
|
23
|
+
* 获取 dev server 启动命令
|
|
24
|
+
* @param projectDir 项目目录
|
|
25
|
+
* @param configDir .colyn 配置目录(可选)
|
|
26
|
+
* @returns 启动命令,如果没有 dev 脚本返回 undefined
|
|
27
|
+
*/
|
|
28
|
+
export declare function getDevServerCommand(projectDir: string, configDir?: string): Promise<string | undefined>;
|
|
29
|
+
//# sourceMappingURL=dev-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/core/dev-server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CA+BxB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG7B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev Server 检测模块
|
|
3
|
+
*
|
|
4
|
+
* 检测项目的开发服务器配置并提供启动命令
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs/promises';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import { getRunCommand } from './config.js';
|
|
9
|
+
/**
|
|
10
|
+
* 检测 dev server 信息
|
|
11
|
+
* @param projectDir 项目目录
|
|
12
|
+
* @param configDir .colyn 配置目录(可选,用于读取 npm 命令配置)
|
|
13
|
+
* @returns Dev server 信息
|
|
14
|
+
*/
|
|
15
|
+
export async function detectDevServer(projectDir, configDir) {
|
|
16
|
+
try {
|
|
17
|
+
// 读取 package.json
|
|
18
|
+
const packageJsonPath = path.join(projectDir, 'package.json');
|
|
19
|
+
const content = await fs.readFile(packageJsonPath, 'utf-8');
|
|
20
|
+
const packageJson = JSON.parse(content);
|
|
21
|
+
// 检查是否有 dev 脚本
|
|
22
|
+
const devScript = packageJson.scripts?.dev;
|
|
23
|
+
if (devScript) {
|
|
24
|
+
// 获取运行命令
|
|
25
|
+
const runCommand = await getRunCommand(configDir);
|
|
26
|
+
const command = `${runCommand} dev`;
|
|
27
|
+
return {
|
|
28
|
+
hasDevCommand: true,
|
|
29
|
+
command
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// 没有 dev 脚本
|
|
33
|
+
return {
|
|
34
|
+
hasDevCommand: false
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// package.json 不存在或无法解析
|
|
39
|
+
return {
|
|
40
|
+
hasDevCommand: false
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 获取 dev server 启动命令
|
|
46
|
+
* @param projectDir 项目目录
|
|
47
|
+
* @param configDir .colyn 配置目录(可选)
|
|
48
|
+
* @returns 启动命令,如果没有 dev 脚本返回 undefined
|
|
49
|
+
*/
|
|
50
|
+
export async function getDevServerCommand(projectDir, configDir) {
|
|
51
|
+
const info = await detectDevServer(projectDir, configDir);
|
|
52
|
+
return info.command;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=dev-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-server.js","sourceRoot":"","sources":["../../src/core/dev-server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAY5C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,SAAkB;IAElB,IAAI,CAAC;QACH,kBAAkB;QAClB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAExC,eAAe;QACf,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC;QAE3C,IAAI,SAAS,EAAE,CAAC;YACd,SAAS;YACT,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,GAAG,UAAU,MAAM,CAAC;YAEpC,OAAO;gBACL,aAAa,EAAE,IAAI;gBACnB,OAAO;aACR,CAAC;QACJ,CAAC;QAED,YAAY;QACZ,OAAO;YACL,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;QACxB,OAAO;YACL,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB,EAClB,SAAkB;IAElB,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { WorktreeInfo } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* 项目发现信息
|
|
4
|
+
* 从文件系统动态获取,替代 config.json
|
|
5
|
+
*/
|
|
6
|
+
export interface ProjectInfo {
|
|
7
|
+
/** 主分支名称(从主分支目录的 git 获取) */
|
|
8
|
+
mainBranch: string;
|
|
9
|
+
/** 主分支端口(从 .env.local 获取) */
|
|
10
|
+
mainPort: number;
|
|
11
|
+
/** 下一个 worktree ID */
|
|
12
|
+
nextWorktreeId: number;
|
|
13
|
+
/** 所有 worktree 信息 */
|
|
14
|
+
worktrees: WorktreeInfo[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 从主分支目录获取当前分支名称
|
|
18
|
+
*/
|
|
19
|
+
export declare function getMainBranch(mainDir: string): Promise<string>;
|
|
20
|
+
/**
|
|
21
|
+
* 从主分支的 .env.local 获取端口
|
|
22
|
+
*/
|
|
23
|
+
export declare function getMainPort(mainDir: string): Promise<number>;
|
|
24
|
+
/**
|
|
25
|
+
* 扫描 worktrees 目录获取下一个可用 ID
|
|
26
|
+
*/
|
|
27
|
+
export declare function getNextWorktreeId(worktreesDir: string): Promise<number>;
|
|
28
|
+
/**
|
|
29
|
+
* 发现所有 worktree 信息
|
|
30
|
+
* 结合 git worktree list 和各目录的 .env.local
|
|
31
|
+
*/
|
|
32
|
+
export declare function discoverWorktrees(mainDir: string, worktreesDir: string): Promise<WorktreeInfo[]>;
|
|
33
|
+
/**
|
|
34
|
+
* 获取完整的项目信息
|
|
35
|
+
* 这是获取项目配置的主入口,替代原来的 loadConfig
|
|
36
|
+
*/
|
|
37
|
+
export declare function discoverProjectInfo(mainDir: string, worktreesDir: string): Promise<ProjectInfo>;
|
|
38
|
+
/**
|
|
39
|
+
* 检查分支是否已有 worktree
|
|
40
|
+
*/
|
|
41
|
+
export declare function findWorktreeByBranch(mainDir: string, worktreesDir: string, branch: string): Promise<WorktreeInfo | undefined>;
|
|
42
|
+
/**
|
|
43
|
+
* 获取当前目录的 worktree ID
|
|
44
|
+
*
|
|
45
|
+
* 从当前目录的 .env.local 读取 WORKTREE 变量,并验证与目录名一致
|
|
46
|
+
*
|
|
47
|
+
* @returns worktree ID,如果不在 worktree 目录中返回 null
|
|
48
|
+
* @throws ColynError 如果 .env.local 中的 WORKTREE 与目录名不一致
|
|
49
|
+
*/
|
|
50
|
+
export declare function getCurrentWorktreeId(): Promise<number | null>;
|
|
51
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/core/discovery.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAkCD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASpE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAalE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa7E;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC,CA8GzB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC,CActB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAGnC;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8CnE"}
|