@workclaw/cli 1.0.318 → 1.0.320
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.md +16 -16
- package/dist/box/installer/installer.d.ts.map +1 -1
- package/dist/{index-BunArs0A.js → index-CzXh8eTR.js} +34 -28
- package/dist/index.js +1 -1
- package/dist/local/apis/index.d.ts +3 -3
- package/dist/local/apis/index.d.ts.map +1 -1
- package/dist/local/installer/installer.d.ts +2 -1
- package/dist/local/installer/installer.d.ts.map +1 -1
- package/dist/shared/utils/path.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -100,27 +100,27 @@ npx @workclaw/cli --help
|
|
|
100
100
|
|
|
101
101
|
### local 命令参数
|
|
102
102
|
|
|
103
|
-
| 参数 | 说明
|
|
104
|
-
| ---------------- |
|
|
105
|
-
| --phone | 手机号码(登录账号),未填写时会交互式提示输入
|
|
106
|
-
| --user-pass | 用户密码,未填写时会交互式提示输入
|
|
103
|
+
| 参数 | 说明 |
|
|
104
|
+
| ---------------- | ------------------------------------------ |
|
|
105
|
+
| --phone | 手机号码(登录账号),未填写时会交互式提示输入 |
|
|
106
|
+
| --user-pass | 用户密码,未填写时会交互式提示输入 |
|
|
107
107
|
| --env | 环境 (test/prod/custom),默认 test,未填写时会交互式提示选择 |
|
|
108
|
-
| --customIp | 自定义环境后端 IP,仅当 env 为 custom 时使用
|
|
109
|
-
| --plugin-version | 插件版本号(默认安装最新版)
|
|
110
|
-
| --openclaw-path | OpenClaw 安装目录(默认 \~/.openclaw)
|
|
111
|
-
| --debug | 开启调试日志
|
|
108
|
+
| --customIp | 自定义环境后端 IP,仅当 env 为 custom 时使用 |
|
|
109
|
+
| --plugin-version | 插件版本号(默认安装最新版) |
|
|
110
|
+
| --openclaw-path | OpenClaw 安装目录(默认 \~/.openclaw) |
|
|
111
|
+
| --debug | 开启调试日志 |
|
|
112
112
|
|
|
113
113
|
### box 命令参数
|
|
114
114
|
|
|
115
|
-
| 参数 | 说明
|
|
116
|
-
| ---------------- |
|
|
117
|
-
| --app-key | App Key,未填写时会交互式提示输入
|
|
118
|
-
| --app-secret | App Secret,未填写时会交互式提示输入
|
|
115
|
+
| 参数 | 说明 |
|
|
116
|
+
| ---------------- | ------------------------------------------ |
|
|
117
|
+
| --app-key | App Key,未填写时会交互式提示输入 |
|
|
118
|
+
| --app-secret | App Secret,未填写时会交互式提示输入 |
|
|
119
119
|
| --env | 环境 (test/prod/custom),默认 test,未填写时会交互式提示选择 |
|
|
120
|
-
| --customIp | 自定义环境后端 IP,仅当 env 为 custom 时使用
|
|
121
|
-
| --plugin-version | 插件版本号(默认安装最新版)
|
|
122
|
-
| --openclaw-path | OpenClaw 安装目录(默认 \~/.openclaw)
|
|
123
|
-
| --debug | 开启调试日志
|
|
120
|
+
| --customIp | 自定义环境后端 IP,仅当 env 为 custom 时使用 |
|
|
121
|
+
| --plugin-version | 插件版本号(默认安装最新版) |
|
|
122
|
+
| --openclaw-path | OpenClaw 安装目录(默认 \~/.openclaw) |
|
|
123
|
+
| --debug | 开启调试日志 |
|
|
124
124
|
|
|
125
125
|
## 💡 使用示例
|
|
126
126
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../src/box/installer/installer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAsDhE,qBAAa,YAAY;IAIX,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,UAAU,CAAa;gBAEX,MAAM,EAAE,kBAAkB;IAI9C,cAAc,IAAI,IAAI;IAyBtB,OAAO,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../src/box/installer/installer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAsDhE,qBAAa,YAAY;IAIX,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,UAAU,CAAa;gBAEX,MAAM,EAAE,kBAAkB;IAI9C,cAAc,IAAI,IAAI;IAyBtB,OAAO,CAAC,QAAQ;IAmChB,OAAO,CAAC,aAAa;IAMrB,aAAa,IAAI,MAAM;IAIvB,OAAO,CAAC,cAAc;IAOhB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YA0BhB,eAAe;YA0Bf,iBAAiB;YAoHjB,cAAc;CAmR7B"}
|
|
@@ -28,10 +28,10 @@ function validateOpenclawPath(openclawPath) {
|
|
|
28
28
|
debugLog(`[路径验证] 失败: 路径不是绝对路径`);
|
|
29
29
|
throw new Error(`路径必须是绝对路径,当前输入: ${openclawPath}`);
|
|
30
30
|
}
|
|
31
|
-
const invalidChars = /[
|
|
31
|
+
const invalidChars = /[<>"|?*]/.test(openclawPath);
|
|
32
32
|
if (invalidChars) {
|
|
33
33
|
debugLog(`[路径验证] 失败: 路径包含特殊字符`);
|
|
34
|
-
throw new Error('路径不能包含特殊字符: < >
|
|
34
|
+
throw new Error('路径不能包含特殊字符: < > " | ? *');
|
|
35
35
|
}
|
|
36
36
|
debugLog(`[路径验证] 通过: ${openclawPath}`);
|
|
37
37
|
}
|
|
@@ -174,6 +174,7 @@ class BoxInstaller {
|
|
|
174
174
|
}
|
|
175
175
|
getPaths() {
|
|
176
176
|
const env = this.config.env || "test";
|
|
177
|
+
debugLog(`[getConfig] env=${env}, customIp=${this.config.customIp}`);
|
|
177
178
|
const config = getConfig(env, this.config.customIp);
|
|
178
179
|
let baseDir;
|
|
179
180
|
if (this.config.openclawPath) {
|
|
@@ -509,7 +510,7 @@ class BoxInstaller {
|
|
|
509
510
|
// 应用密钥
|
|
510
511
|
appSecret: this.config.appSecret,
|
|
511
512
|
// API 基础 URL
|
|
512
|
-
baseUrl: this.config.customIp
|
|
513
|
+
baseUrl: this.config.customIp ? `http://${this.config.customIp}` : config.DEFAULT_BASE_URL,
|
|
513
514
|
// WebSocket URL
|
|
514
515
|
websocketUrl: this.config.wsUrl || config.DEFAULT_WS_URL,
|
|
515
516
|
// 允许不安全的 TLS 连接
|
|
@@ -832,8 +833,7 @@ async function httpPost(url, data, config) {
|
|
|
832
833
|
}
|
|
833
834
|
}
|
|
834
835
|
}
|
|
835
|
-
async function login(phone, password,
|
|
836
|
-
const config = getConfig(env);
|
|
836
|
+
async function login(phone, password, config) {
|
|
837
837
|
const url = `${config.API.TUZAI_BASE_URL}/user/login/pass`;
|
|
838
838
|
debugLog("[登录] 开始登录...");
|
|
839
839
|
debugLog(`[登录] 请求地址: ${url}`);
|
|
@@ -859,8 +859,7 @@ async function login(phone, password, env) {
|
|
|
859
859
|
throw new AppError2(ERROR_CODES.LOGIN_FAILED, error.message);
|
|
860
860
|
}
|
|
861
861
|
}
|
|
862
|
-
async function fetchBoundConfig(token, phone,
|
|
863
|
-
const config = getConfig(env);
|
|
862
|
+
async function fetchBoundConfig(token, phone, config) {
|
|
864
863
|
const url = `${config.API.TUZAI_BASE_URL}/work-bot/local/bound/init`;
|
|
865
864
|
debugLog("[获取绑定配置] 开始获取绑定配置...");
|
|
866
865
|
debugLog(`[获取绑定配置] 请求地址: ${url}`);
|
|
@@ -4828,12 +4827,16 @@ function deepMerge(target, source) {
|
|
|
4828
4827
|
return result;
|
|
4829
4828
|
}
|
|
4830
4829
|
class LocalInstaller {
|
|
4830
|
+
spinner;
|
|
4831
|
+
prefixText = "";
|
|
4832
|
+
config;
|
|
4833
|
+
envConfig;
|
|
4831
4834
|
constructor(config) {
|
|
4832
4835
|
this.config = config;
|
|
4836
|
+
const env = this.config.env || "test";
|
|
4837
|
+
this.envConfig = getConfig(env, this.config.customIp);
|
|
4833
4838
|
this.spinner = ora({ color: "cyan" }).start();
|
|
4834
4839
|
}
|
|
4835
|
-
spinner;
|
|
4836
|
-
prefixText = "";
|
|
4837
4840
|
validateConfig() {
|
|
4838
4841
|
debugLog("[验证配置] 检查手机号码和密码...");
|
|
4839
4842
|
if (!this.config.phone) {
|
|
@@ -4845,7 +4848,7 @@ class LocalInstaller {
|
|
|
4845
4848
|
if (this.config.env === "custom") {
|
|
4846
4849
|
debugLog("[验证配置] 检查自定义环境 IP...");
|
|
4847
4850
|
if (!this.config.customIp) {
|
|
4848
|
-
throw new AppError2(ERROR_CODES.INVALID_ARGUMENT, "自定义环境必须提供 --
|
|
4851
|
+
throw new AppError2(ERROR_CODES.INVALID_ARGUMENT, "自定义环境必须提供 --custom-ip 参数");
|
|
4849
4852
|
}
|
|
4850
4853
|
const result = ipv4Schema.safeParse(this.config.customIp);
|
|
4851
4854
|
if (!result.success) {
|
|
@@ -4860,7 +4863,6 @@ class LocalInstaller {
|
|
|
4860
4863
|
debugLog("[安装开始]");
|
|
4861
4864
|
this.validateConfig();
|
|
4862
4865
|
const env = this.config.env || "test";
|
|
4863
|
-
const config = getConfig(env, this.config.customIp);
|
|
4864
4866
|
let baseDir;
|
|
4865
4867
|
if (this.config.openclawPath) {
|
|
4866
4868
|
debugLog(`[路径验证] 验证自定义路径: ${this.config.openclawPath}`);
|
|
@@ -4873,15 +4875,15 @@ class LocalInstaller {
|
|
|
4873
4875
|
baseDir = this.config.openclawPath;
|
|
4874
4876
|
} else {
|
|
4875
4877
|
const homeDir = getHomeDir();
|
|
4876
|
-
baseDir = path.join(homeDir,
|
|
4878
|
+
baseDir = path.join(homeDir, this.envConfig.DIRS.OPENCLAW);
|
|
4877
4879
|
}
|
|
4878
4880
|
const paths = {
|
|
4879
4881
|
home: baseDir,
|
|
4880
|
-
extensions: path.join(baseDir,
|
|
4881
|
-
target: path.join(baseDir,
|
|
4882
|
-
config: path.join(baseDir,
|
|
4883
|
-
workspace: path.join(baseDir,
|
|
4884
|
-
temp: path.join(baseDir,
|
|
4882
|
+
extensions: path.join(baseDir, this.envConfig.DIRS.EXTENSIONS),
|
|
4883
|
+
target: path.join(baseDir, this.envConfig.DIRS.EXTENSIONS, this.envConfig.PLUGIN_NAME),
|
|
4884
|
+
config: path.join(baseDir, this.envConfig.DIRS.CONFIG_FILE),
|
|
4885
|
+
workspace: path.join(baseDir, this.envConfig.DIRS.WORKSPACE),
|
|
4886
|
+
temp: path.join(baseDir, this.envConfig.DIRS.TEMP)
|
|
4885
4887
|
};
|
|
4886
4888
|
debugLog(`[路径配置] home=${paths.home}`);
|
|
4887
4889
|
debugLog(`[路径配置] extensions=${paths.extensions}`);
|
|
@@ -4892,7 +4894,13 @@ class LocalInstaller {
|
|
|
4892
4894
|
const boundConfig = await this.doFetchBoundConfig(token);
|
|
4893
4895
|
await this.doCleanOldFiles(paths.target);
|
|
4894
4896
|
await this.doDownloadFromNpm(paths);
|
|
4895
|
-
await this.doUpdateConfig(paths, boundConfig
|
|
4897
|
+
await this.doUpdateConfig(paths, boundConfig);
|
|
4898
|
+
try {
|
|
4899
|
+
await fs.rm(paths.temp, { recursive: true, force: true });
|
|
4900
|
+
debugLog("[安装完成] 清理根临时目录完成");
|
|
4901
|
+
} catch {
|
|
4902
|
+
debugLog("[安装完成] 清理根临时目录失败(忽略)");
|
|
4903
|
+
}
|
|
4896
4904
|
this.spinner.stop();
|
|
4897
4905
|
} catch (error) {
|
|
4898
4906
|
this.spinner.stop();
|
|
@@ -4909,7 +4917,6 @@ class LocalInstaller {
|
|
|
4909
4917
|
return PLUGIN_PACKAGE_NAME;
|
|
4910
4918
|
}
|
|
4911
4919
|
async doLogin() {
|
|
4912
|
-
const env = this.config.env || "test";
|
|
4913
4920
|
this.spinner.prefixText = this.prefixText;
|
|
4914
4921
|
this.spinner.text = chalk.cyan("正在验证账号...");
|
|
4915
4922
|
debugLog(`[用户登录] 手机号: ${this.config.phone}`);
|
|
@@ -4920,18 +4927,17 @@ class LocalInstaller {
|
|
|
4920
4927
|
}
|
|
4921
4928
|
debugLog("[用户登录] 密码加密成功");
|
|
4922
4929
|
debugLog("[用户登录] 调用登录接口...");
|
|
4923
|
-
const token = await login(this.config.phone, encryptedPassword,
|
|
4930
|
+
const token = await login(this.config.phone, encryptedPassword, this.envConfig);
|
|
4924
4931
|
this.prefixText += chalk.green(` ✓ 账号验证成功
|
|
4925
4932
|
`);
|
|
4926
4933
|
debugLog("[用户登录] 登录成功");
|
|
4927
4934
|
return token;
|
|
4928
4935
|
}
|
|
4929
4936
|
async doFetchBoundConfig(token) {
|
|
4930
|
-
const env = this.config.env || "test";
|
|
4931
4937
|
this.spinner.prefixText = this.prefixText;
|
|
4932
4938
|
this.spinner.text = chalk.cyan("正在获取绑定信息...");
|
|
4933
4939
|
debugLog("[获取配置] 调用绑定配置接口...");
|
|
4934
|
-
const boundConfig = await fetchBoundConfig(token, this.config.phone,
|
|
4940
|
+
const boundConfig = await fetchBoundConfig(token, this.config.phone, this.envConfig);
|
|
4935
4941
|
debugLog(`[获取配置] agentId=${boundConfig.agentId}, appKey=${boundConfig.appKey?.slice(0, 8)}...`);
|
|
4936
4942
|
this.prefixText += chalk.green(` ✓ 绑定信息获取成功
|
|
4937
4943
|
`);
|
|
@@ -5044,12 +5050,12 @@ class LocalInstaller {
|
|
|
5044
5050
|
`);
|
|
5045
5051
|
try {
|
|
5046
5052
|
await fs.rm(tempDir, { recursive: true, force: true });
|
|
5047
|
-
debugLog("[下载插件]
|
|
5053
|
+
debugLog("[下载插件] 清理临时下载目录完成");
|
|
5048
5054
|
} catch {
|
|
5049
|
-
debugLog("[下载插件]
|
|
5055
|
+
debugLog("[下载插件] 清理临时下载目录失败(忽略)");
|
|
5050
5056
|
}
|
|
5051
5057
|
}
|
|
5052
|
-
async doUpdateConfig(paths, boundConfig
|
|
5058
|
+
async doUpdateConfig(paths, boundConfig) {
|
|
5053
5059
|
this.spinner.prefixText = this.prefixText;
|
|
5054
5060
|
this.spinner.text = chalk.cyan("正在生成配置...");
|
|
5055
5061
|
debugLog("[更新配置] 创建目录...");
|
|
@@ -5065,7 +5071,7 @@ class LocalInstaller {
|
|
|
5065
5071
|
} catch {
|
|
5066
5072
|
debugLog("[更新配置] 无原有配置");
|
|
5067
5073
|
}
|
|
5068
|
-
const config =
|
|
5074
|
+
const config = this.envConfig;
|
|
5069
5075
|
const newConfig = {
|
|
5070
5076
|
// diagnostics: 诊断配置
|
|
5071
5077
|
diagnostics: {
|
|
@@ -5161,7 +5167,7 @@ class LocalInstaller {
|
|
|
5161
5167
|
connectionMode: "websocket",
|
|
5162
5168
|
appKey: boundConfig.appKey,
|
|
5163
5169
|
appSecret: boundConfig.appSecret,
|
|
5164
|
-
baseUrl: this.config.customIp
|
|
5170
|
+
baseUrl: this.config.customIp ? `http://${this.config.customIp}` : config.DEFAULT_BASE_URL,
|
|
5165
5171
|
websocketUrl: this.config.wsUrl || config.DEFAULT_WS_URL,
|
|
5166
5172
|
allowInsecureTls: true,
|
|
5167
5173
|
allowRawJsonPayload: true,
|
|
@@ -5392,7 +5398,7 @@ async function createLocalCommand(options) {
|
|
|
5392
5398
|
}
|
|
5393
5399
|
}
|
|
5394
5400
|
function registerCommands(program2) {
|
|
5395
|
-
program2.command("local").description("本地账户安装(需要登录)").option("-e, --env <env>", "环境 (test/prod/custom)").option("--phone <phone>", "手机号码").option("--user-pass <userPass>", "用户密码").option("--
|
|
5401
|
+
program2.command("local").description("本地账户安装(需要登录)").option("-e, --env <env>", "环境 (test/prod/custom)").option("--phone <phone>", "手机号码").option("--user-pass <userPass>", "用户密码").option("--custom-ip <ip>", "自定义后端 IP(仅 custom 环境生效)").option("--ws-url <url>", "自定义 WebSocket URL(仅 custom 环境生效,默认自动生成)").option("--plugin-version <plugin-version>", "插件版本号(默认最新版)").option("--openclaw-path <path>", "OpenClaw 安装目录路径(默认 ~/.openclaw)").option("--debug", "开启调试日志").action(createLocalCommand);
|
|
5396
5402
|
}
|
|
5397
5403
|
const __filename$1 = fileURLToPath(import.meta.url);
|
|
5398
5404
|
const __dirname$1 = dirname(__filename$1);
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { AxiosRequestConfig } from 'axios';
|
|
2
2
|
import { BoundConfig } from '../types';
|
|
3
|
-
import {
|
|
3
|
+
import { ConfigInterface } from '../../shared/config';
|
|
4
4
|
export interface HttpResponse<T = any> {
|
|
5
5
|
status: number;
|
|
6
6
|
data: T;
|
|
7
7
|
}
|
|
8
8
|
export declare function httpPost<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<HttpResponse<T>>;
|
|
9
|
-
export declare function login(phone: string, password: string,
|
|
10
|
-
export declare function fetchBoundConfig(token: string, phone: string,
|
|
9
|
+
export declare function login(phone: string, password: string, config: ConfigInterface): Promise<string>;
|
|
10
|
+
export declare function fetchBoundConfig(token: string, phone: string, config: ConfigInterface): Promise<BoundConfig>;
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/local/apis/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA6B,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/local/apis/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA6B,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAKtD,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,GAAG;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,CAAC,CAAA;CACR;AAWD,wBAAsB,QAAQ,CAAC,CAAC,GAAG,GAAG,EACpC,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CA+C1B;AAED,wBAAsB,KAAK,CACzB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,WAAW,CAAC,CAyDtB"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { LocalInstallerConfig } from '../types';
|
|
2
2
|
export declare class LocalInstaller {
|
|
3
|
-
private config;
|
|
4
3
|
private spinner;
|
|
5
4
|
private prefixText;
|
|
5
|
+
private readonly config;
|
|
6
|
+
private readonly envConfig;
|
|
6
7
|
constructor(config: LocalInstallerConfig);
|
|
7
8
|
validateConfig(): void;
|
|
8
9
|
install(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../src/local/installer/installer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA6B,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAuD/E,qBAAa,cAAc;
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../src/local/installer/installer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA6B,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAuD/E,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;gBAE/B,MAAM,EAAE,oBAAoB;IAOxC,cAAc,IAAI,IAAI;IAyBhB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyD9B,aAAa,IAAI,MAAM;IAIvB,OAAO,CAAC,cAAc;YAOR,OAAO;YAoBP,kBAAkB;YAalB,eAAe;YAmBf,iBAAiB;YAmHjB,cAAc;CAiN7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/path.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/path.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAkB/D"}
|