grf-cli 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.
- package/LICENSE +21 -0
- package/README.md +503 -0
- package/README.zh-CN.md +503 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +74 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add.d.ts +7 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +92 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/clean.d.ts +7 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +171 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/config.d.ts +7 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +170 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/list.d.ts +7 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +149 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/load.d.ts +8 -0
- package/dist/commands/load.d.ts.map +1 -0
- package/dist/commands/load.js +239 -0
- package/dist/commands/load.js.map +1 -0
- package/dist/commands/unload.d.ts +7 -0
- package/dist/commands/unload.d.ts.map +1 -0
- package/dist/commands/unload.js +738 -0
- package/dist/commands/unload.js.map +1 -0
- package/dist/commands/update.d.ts +7 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +471 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/use.d.ts +8 -0
- package/dist/commands/use.d.ts.map +1 -0
- package/dist/commands/use.js +224 -0
- package/dist/commands/use.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 +179 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/filesystem.d.ts +74 -0
- package/dist/core/filesystem.d.ts.map +1 -0
- package/dist/core/filesystem.js +300 -0
- package/dist/core/filesystem.js.map +1 -0
- package/dist/core/git.d.ts +75 -0
- package/dist/core/git.d.ts.map +1 -0
- package/dist/core/git.js +169 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/loading.d.ts +85 -0
- package/dist/core/loading.d.ts.map +1 -0
- package/dist/core/loading.js +224 -0
- package/dist/core/loading.js.map +1 -0
- package/dist/core/repository.d.ts +120 -0
- package/dist/core/repository.d.ts.map +1 -0
- package/dist/core/repository.js +374 -0
- package/dist/core/repository.js.map +1 -0
- package/dist/core/sync.d.ts +72 -0
- package/dist/core/sync.d.ts.map +1 -0
- package/dist/core/sync.js +226 -0
- package/dist/core/sync.js.map +1 -0
- package/dist/types/index.d.ts +135 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +63 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* loading.json 管理模块
|
|
4
|
+
* 用于追踪已加载的参考代码仓库
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.getLoadingFilePath = getLoadingFilePath;
|
|
41
|
+
exports.readLoadingConfig = readLoadingConfig;
|
|
42
|
+
exports.writeLoadingConfig = writeLoadingConfig;
|
|
43
|
+
exports.addEntry = addEntry;
|
|
44
|
+
exports.getEntries = getEntries;
|
|
45
|
+
exports.getEntryById = getEntryById;
|
|
46
|
+
exports.getEntryByTargetPath = getEntryByTargetPath;
|
|
47
|
+
exports.getEntriesByRepoName = getEntriesByRepoName;
|
|
48
|
+
exports.removeEntry = removeEntry;
|
|
49
|
+
exports.removeEntryByTargetPath = removeEntryByTargetPath;
|
|
50
|
+
exports.clearAllEntries = clearAllEntries;
|
|
51
|
+
exports.updateEntry = updateEntry;
|
|
52
|
+
const fs = __importStar(require("fs/promises"));
|
|
53
|
+
const path = __importStar(require("path"));
|
|
54
|
+
const crypto_1 = require("crypto");
|
|
55
|
+
/** loading.json 文件名 */
|
|
56
|
+
const LOADING_FILE_NAME = "loading.json";
|
|
57
|
+
/** .gitreference 目录名 */
|
|
58
|
+
const GITREFERENCE_DIR = ".gitreference";
|
|
59
|
+
/** 当前配置版本 */
|
|
60
|
+
const CONFIG_VERSION = "1.0.0";
|
|
61
|
+
/**
|
|
62
|
+
* 获取 loading.json 文件路径
|
|
63
|
+
* @param projectRoot 项目根目录,默认为当前工作目录
|
|
64
|
+
* @returns loading.json 的绝对路径
|
|
65
|
+
*/
|
|
66
|
+
function getLoadingFilePath(projectRoot = process.cwd()) {
|
|
67
|
+
return path.join(projectRoot, GITREFERENCE_DIR, LOADING_FILE_NAME);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 读取 loading.json 配置
|
|
71
|
+
* @param projectRoot 项目根目录
|
|
72
|
+
* @returns 加载配置,如果文件不存在则返回空配置
|
|
73
|
+
*/
|
|
74
|
+
async function readLoadingConfig(projectRoot = process.cwd()) {
|
|
75
|
+
const filePath = getLoadingFilePath(projectRoot);
|
|
76
|
+
try {
|
|
77
|
+
const content = await fs.readFile(filePath, "utf-8");
|
|
78
|
+
return JSON.parse(content);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
// 文件不存在或解析失败,返回空配置
|
|
82
|
+
return {
|
|
83
|
+
version: CONFIG_VERSION,
|
|
84
|
+
entries: [],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 写入 loading.json 配置
|
|
90
|
+
* @param config 加载配置
|
|
91
|
+
* @param projectRoot 项目根目录
|
|
92
|
+
*/
|
|
93
|
+
async function writeLoadingConfig(config, projectRoot = process.cwd()) {
|
|
94
|
+
const filePath = getLoadingFilePath(projectRoot);
|
|
95
|
+
const dirPath = path.dirname(filePath);
|
|
96
|
+
// 确保目录存在
|
|
97
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
98
|
+
// 写入文件
|
|
99
|
+
await fs.writeFile(filePath, JSON.stringify(config, null, 2), "utf-8");
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 添加加载条目
|
|
103
|
+
* @param entry 加载条目(不含 id 和 loadedAt)
|
|
104
|
+
* @param projectRoot 项目根目录
|
|
105
|
+
* @returns 添加的完整条目
|
|
106
|
+
*/
|
|
107
|
+
async function addEntry(entry, projectRoot = process.cwd()) {
|
|
108
|
+
const config = await readLoadingConfig(projectRoot);
|
|
109
|
+
const newEntry = {
|
|
110
|
+
...entry,
|
|
111
|
+
id: (0, crypto_1.randomUUID)(),
|
|
112
|
+
loadedAt: new Date().toISOString(),
|
|
113
|
+
};
|
|
114
|
+
config.entries.push(newEntry);
|
|
115
|
+
await writeLoadingConfig(config, projectRoot);
|
|
116
|
+
return newEntry;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 获取所有加载条目
|
|
120
|
+
* @param projectRoot 项目根目录
|
|
121
|
+
* @returns 加载条目列表
|
|
122
|
+
*/
|
|
123
|
+
async function getEntries(projectRoot = process.cwd()) {
|
|
124
|
+
const config = await readLoadingConfig(projectRoot);
|
|
125
|
+
return config.entries;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* 根据 ID 获取加载条目
|
|
129
|
+
* @param id 条目 ID
|
|
130
|
+
* @param projectRoot 项目根目录
|
|
131
|
+
* @returns 加载条目,如果不存在则返回 undefined
|
|
132
|
+
*/
|
|
133
|
+
async function getEntryById(id, projectRoot = process.cwd()) {
|
|
134
|
+
const config = await readLoadingConfig(projectRoot);
|
|
135
|
+
return config.entries.find((entry) => entry.id === id);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* 根据目标路径获取加载条目
|
|
139
|
+
* @param targetPath 目标路径
|
|
140
|
+
* @param projectRoot 项目根目录
|
|
141
|
+
* @returns 加载条目,如果不存在则返回 undefined
|
|
142
|
+
*/
|
|
143
|
+
async function getEntryByTargetPath(targetPath, projectRoot = process.cwd()) {
|
|
144
|
+
const config = await readLoadingConfig(projectRoot);
|
|
145
|
+
// 标准化路径进行比较
|
|
146
|
+
const normalizedTarget = path.normalize(targetPath);
|
|
147
|
+
return config.entries.find((entry) => path.normalize(entry.targetPath) === normalizedTarget);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 根据仓库名称获取加载条目
|
|
151
|
+
* @param repoName 仓库名称
|
|
152
|
+
* @param projectRoot 项目根目录
|
|
153
|
+
* @returns 匹配的加载条目列表
|
|
154
|
+
*/
|
|
155
|
+
async function getEntriesByRepoName(repoName, projectRoot = process.cwd()) {
|
|
156
|
+
const config = await readLoadingConfig(projectRoot);
|
|
157
|
+
return config.entries.filter((entry) => entry.repoName.includes(repoName));
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* 删除加载条目
|
|
161
|
+
* @param id 条目 ID
|
|
162
|
+
* @param projectRoot 项目根目录
|
|
163
|
+
* @returns 是否成功删除
|
|
164
|
+
*/
|
|
165
|
+
async function removeEntry(id, projectRoot = process.cwd()) {
|
|
166
|
+
const config = await readLoadingConfig(projectRoot);
|
|
167
|
+
const index = config.entries.findIndex((entry) => entry.id === id);
|
|
168
|
+
if (index === -1) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
config.entries.splice(index, 1);
|
|
172
|
+
await writeLoadingConfig(config, projectRoot);
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* 根据目标路径删除加载条目
|
|
177
|
+
* @param targetPath 目标路径
|
|
178
|
+
* @param projectRoot 项目根目录
|
|
179
|
+
* @returns 被删除的条目,如果不存在则返回 undefined
|
|
180
|
+
*/
|
|
181
|
+
async function removeEntryByTargetPath(targetPath, projectRoot = process.cwd()) {
|
|
182
|
+
const config = await readLoadingConfig(projectRoot);
|
|
183
|
+
const normalizedTarget = path.normalize(targetPath);
|
|
184
|
+
const index = config.entries.findIndex((entry) => path.normalize(entry.targetPath) === normalizedTarget);
|
|
185
|
+
if (index === -1) {
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
const [removed] = config.entries.splice(index, 1);
|
|
189
|
+
await writeLoadingConfig(config, projectRoot);
|
|
190
|
+
return removed;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* 清空所有加载条目
|
|
194
|
+
* @param projectRoot 项目根目录
|
|
195
|
+
*/
|
|
196
|
+
async function clearAllEntries(projectRoot = process.cwd()) {
|
|
197
|
+
const config = {
|
|
198
|
+
version: CONFIG_VERSION,
|
|
199
|
+
entries: [],
|
|
200
|
+
};
|
|
201
|
+
await writeLoadingConfig(config, projectRoot);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* 更新加载条目
|
|
205
|
+
* @param id 条目 ID
|
|
206
|
+
* @param updates 要更新的字段
|
|
207
|
+
* @param projectRoot 项目根目录
|
|
208
|
+
* @returns 更新后的条目,如果不存在则返回 undefined
|
|
209
|
+
*/
|
|
210
|
+
async function updateEntry(id, updates, projectRoot = process.cwd()) {
|
|
211
|
+
const config = await readLoadingConfig(projectRoot);
|
|
212
|
+
const index = config.entries.findIndex((entry) => entry.id === id);
|
|
213
|
+
if (index === -1) {
|
|
214
|
+
return undefined;
|
|
215
|
+
}
|
|
216
|
+
config.entries[index] = {
|
|
217
|
+
...config.entries[index],
|
|
218
|
+
...updates,
|
|
219
|
+
updatedAt: new Date().toISOString(),
|
|
220
|
+
};
|
|
221
|
+
await writeLoadingConfig(config, projectRoot);
|
|
222
|
+
return config.entries[index];
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=loading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading.js","sourceRoot":"","sources":["../../src/core/loading.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository 模块
|
|
3
|
+
* 负责仓库的增删改查操作,整合配置、Git 和文件系统模块
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 添加仓库选项
|
|
7
|
+
*/
|
|
8
|
+
export interface AddOptions {
|
|
9
|
+
/** 自定义仓库名称 */
|
|
10
|
+
name?: string;
|
|
11
|
+
/** 指定分支 */
|
|
12
|
+
branch?: string;
|
|
13
|
+
/** 是否浅克隆 */
|
|
14
|
+
shallow?: boolean;
|
|
15
|
+
/** 浅克隆深度 */
|
|
16
|
+
depth?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 仓库信息(用于 list 命令返回)
|
|
20
|
+
*/
|
|
21
|
+
export interface RepoInfo {
|
|
22
|
+
/** 仓库名称(如 github.com/user/repo) */
|
|
23
|
+
name: string;
|
|
24
|
+
/** 远程 URL */
|
|
25
|
+
url: string;
|
|
26
|
+
/** 本地路径 */
|
|
27
|
+
path: string;
|
|
28
|
+
/** 当前 commit ID */
|
|
29
|
+
commitId: string;
|
|
30
|
+
/** 分支名 */
|
|
31
|
+
branch?: string;
|
|
32
|
+
/** 添加时间 */
|
|
33
|
+
addedAt: string;
|
|
34
|
+
/** 更新时间 */
|
|
35
|
+
updatedAt: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 解析后的仓库 URL 信息
|
|
39
|
+
*/
|
|
40
|
+
export interface ParsedRepoUrl {
|
|
41
|
+
/** 主机名(如 github.com) */
|
|
42
|
+
host: string;
|
|
43
|
+
/** 所有者/组织名 */
|
|
44
|
+
owner: string;
|
|
45
|
+
/** 仓库名 */
|
|
46
|
+
repo: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 解析 Git URL
|
|
50
|
+
* 支持 HTTPS 和 SSH 格式
|
|
51
|
+
* @param url Git 仓库 URL
|
|
52
|
+
* @returns 解析后的 URL 信息
|
|
53
|
+
* @throws GrfError 如果 URL 格式无效
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* // HTTPS 格式
|
|
57
|
+
* parseRepoUrl('https://github.com/facebook/react.git')
|
|
58
|
+
* // -> { host: 'github.com', owner: 'facebook', repo: 'react' }
|
|
59
|
+
*
|
|
60
|
+
* // SSH 格式
|
|
61
|
+
* parseRepoUrl('git@github.com:facebook/react.git')
|
|
62
|
+
* // -> { host: 'github.com', owner: 'facebook', repo: 'react' }
|
|
63
|
+
*/
|
|
64
|
+
export declare function parseRepoUrl(url: string): ParsedRepoUrl;
|
|
65
|
+
/**
|
|
66
|
+
* 根据 URL 生成本地存储路径
|
|
67
|
+
* @param url Git 仓库 URL
|
|
68
|
+
* @returns 本地存储路径
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* getRepoStoragePath('https://github.com/facebook/react.git')
|
|
72
|
+
* // -> ~/.gitreference/repos/github.com/facebook/react
|
|
73
|
+
*/
|
|
74
|
+
export declare function getRepoStoragePath(url: string): string;
|
|
75
|
+
/**
|
|
76
|
+
* 添加仓库
|
|
77
|
+
* @param url Git 仓库 URL
|
|
78
|
+
* @param options 添加选项
|
|
79
|
+
* @returns 仓库信息
|
|
80
|
+
*/
|
|
81
|
+
export declare function add(url: string, options?: AddOptions): Promise<RepoInfo>;
|
|
82
|
+
/**
|
|
83
|
+
* 根据名称获取仓库信息
|
|
84
|
+
* @param name 仓库名称(完整路径或简短名称)
|
|
85
|
+
* @returns 仓库信息,不存在返回 null
|
|
86
|
+
*/
|
|
87
|
+
export declare function get(name: string): Promise<RepoInfo | null>;
|
|
88
|
+
/**
|
|
89
|
+
* 列出所有仓库
|
|
90
|
+
* @returns 仓库信息数组
|
|
91
|
+
*/
|
|
92
|
+
export declare function list(): Promise<RepoInfo[]>;
|
|
93
|
+
/**
|
|
94
|
+
* 删除仓库
|
|
95
|
+
* @param name 仓库名称
|
|
96
|
+
* @throws GrfError 如果仓库不存在
|
|
97
|
+
*/
|
|
98
|
+
export declare function remove(name: string): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* 检查仓库是否存在
|
|
101
|
+
* @param name 仓库名称
|
|
102
|
+
* @returns 是否存在
|
|
103
|
+
*/
|
|
104
|
+
export declare function exists(name: string): Promise<boolean>;
|
|
105
|
+
/**
|
|
106
|
+
* 将仓库名称解析为本地路径
|
|
107
|
+
* @param name 仓库名称(完整名称或简短名称)
|
|
108
|
+
* @returns 本地路径
|
|
109
|
+
* @throws GrfError 如果仓库不存在
|
|
110
|
+
*/
|
|
111
|
+
export declare function resolvePath(name: string): Promise<string>;
|
|
112
|
+
/**
|
|
113
|
+
* 切换仓库分支
|
|
114
|
+
* @param name 仓库名称
|
|
115
|
+
* @param branch 目标分支
|
|
116
|
+
* @returns 更新后的仓库信息
|
|
117
|
+
* @throws GrfError 如果仓库不存在或切换失败
|
|
118
|
+
*/
|
|
119
|
+
export declare function switchBranch(name: string, branch: string): Promise<RepoInfo>;
|
|
120
|
+
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/core/repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,cAAc;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU;IACV,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CA8BvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtD;AAWD;;;;;GAKG;AACH,wBAAsB,GAAG,CACvB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,QAAQ,CAAC,CA+DnB;AA0CD;;;;GAIG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAyChE;AAED;;;GAGG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAoBhD;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxD;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsB3D;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ/D;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAsCnB"}
|