@thor123141245r/ai-translate 0.0.0 → 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/README.md +71 -22
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +77 -0
- package/dist/cli.js.map +1 -1
- package/dist/i18n/align.d.ts +3 -0
- package/dist/i18n/align.d.ts.map +1 -0
- package/dist/i18n/align.js +46 -0
- package/dist/i18n/align.js.map +1 -0
- package/dist/i18n/cache.d.ts +14 -0
- package/dist/i18n/cache.d.ts.map +1 -0
- package/dist/i18n/cache.js +36 -0
- package/dist/i18n/cache.js.map +1 -0
- package/dist/i18n/command.d.ts +7 -0
- package/dist/i18n/command.d.ts.map +1 -0
- package/dist/i18n/command.js +84 -0
- package/dist/i18n/command.js.map +1 -0
- package/dist/i18n/extract.d.ts +7 -0
- package/dist/i18n/extract.d.ts.map +1 -0
- package/dist/i18n/extract.js +24 -0
- package/dist/i18n/extract.js.map +1 -0
- package/dist/i18n/json-path.d.ts +7 -0
- package/dist/i18n/json-path.d.ts.map +1 -0
- package/dist/i18n/json-path.js +61 -0
- package/dist/i18n/json-path.js.map +1 -0
- package/dist/i18n/parse.d.ts +6 -0
- package/dist/i18n/parse.d.ts.map +1 -0
- package/dist/i18n/parse.js +44 -0
- package/dist/i18n/parse.js.map +1 -0
- package/dist/i18n/placeholders.d.ts +7 -0
- package/dist/i18n/placeholders.d.ts.map +1 -0
- package/dist/i18n/placeholders.js +44 -0
- package/dist/i18n/placeholders.js.map +1 -0
- package/dist/i18n/prompt.d.ts +13 -0
- package/dist/i18n/prompt.d.ts.map +1 -0
- package/dist/i18n/prompt.js +37 -0
- package/dist/i18n/prompt.js.map +1 -0
- package/dist/i18n/translate.d.ts +29 -0
- package/dist/i18n/translate.d.ts.map +1 -0
- package/dist/i18n/translate.js +199 -0
- package/dist/i18n/translate.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
- package/.agentdocs/code-changes/2026-01-22/AI/347/277/273/350/257/221/345/231/250TS/345/256/236/347/216/260-/345/256/236/347/216/260.md +0 -22
- package/.agentdocs/code-changes/2026-01-23/CLI/345/210/206/345/217/221-npx/345/256/236/347/216/260.md +0 -18
- package/.agentdocs/code-changes/2026-01-23/sora-watermask-remover-/345/233/275/351/231/205/345/214/226/347/277/273/350/257/221-/345/256/236/347/216/260.md +0 -37
- package/.agentdocs/code-changes/2026-01-23//351/205/215/347/275/256/350/257/273/345/217/226-/347/216/257/345/242/203/345/217/230/351/207/217/344/274/230/345/205/210-/345/256/236/347/216/260.md +0 -22
- package/.agentdocs/plans/2026-01-22/AI/347/277/273/350/257/221/345/231/250TS/345/256/236/347/216/260-/344/274/230/345/214/226/346/226/271/346/241/210.md +0 -67
- package/.agentdocs/plans/2026-01-23/CLI/345/210/206/345/217/221-npx/346/226/271/346/241/210.md +0 -60
- package/.agentdocs/plans/2026-01-23/sora-watermask-remover-/345/233/275/351/231/205/345/214/226/347/277/273/350/257/221-/344/274/230/345/214/226/346/226/271/346/241/210.md +0 -51
- package/.agentdocs/plans/2026-01-23//351/205/215/347/275/256/350/257/273/345/217/226-/347/216/257/345/242/203/345/217/230/351/207/217/344/274/230/345/205/210-/344/274/230/345/214/226/346/226/271/346/241/210.md +0 -80
- package/SKILL.md +0 -103
- package/src/asyncTransform.ts +0 -31
- package/src/bin/ai-translate.ts +0 -5
- package/src/cli.ts +0 -313
- package/src/index.ts +0 -9
- package/src/logger.ts +0 -3
- package/src/model.ts +0 -139
- package/src/prompt.ts +0 -71
- package/src/split.ts +0 -111
- package/src/utils.ts +0 -15
- package/tsconfig.json +0 -19
package/README.md
CHANGED
|
@@ -1,12 +1,23 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ai-translate:可复用的 AI 翻译 CLI 与 i18n JSON 批量翻译
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
本仓库是 npm 包 `@thor123141245r/ai-translate` 的源码,提供两类能力:
|
|
4
|
+
- 通用文件翻译:把任意文本文件分块后交给大模型翻译(适合 Markdown、代码注释、技术文档等)
|
|
5
|
+
- i18n JSON 翻译:以 `en.json` 为标准,批量生成/补齐多语言 JSON(严格保留 key 与结构,只翻译字符串 value)
|
|
6
|
+
|
|
7
|
+
设计目标是“结构在本地处理,模型只做翻译”,避免把大文件或结构化数据整段塞进模型上下文导致不稳定。
|
|
4
8
|
|
|
5
9
|
## 功能概览
|
|
6
|
-
- CLI
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
+
- CLI:
|
|
11
|
+
- `ai-translate` 通用文件翻译
|
|
12
|
+
- `ai-translate i18n` i18n JSON 批量翻译
|
|
13
|
+
- 模块:`AiTranslateTransform`、`TextSplitterStream`、`translateI18nDir` 等可复用组件
|
|
14
|
+
- 配置:`.ai-translate.json` 本地或全局配置(支持环境变量覆盖)
|
|
15
|
+
- 兼容多模型提供方:ollama / openai / anthropic / mistral / deepseek(通过 LangChain 官方 SDK)
|
|
16
|
+
- i18n 专用能力:
|
|
17
|
+
- 仅翻译 value,不改 key
|
|
18
|
+
- 批处理调用,避免上下文混乱
|
|
19
|
+
- 占位符保护(例如 `{{name}}`、`{name}`、`%s`)
|
|
20
|
+
- 本地缓存,减少重复翻译
|
|
10
21
|
|
|
11
22
|
## 参数一览
|
|
12
23
|
|
|
@@ -22,6 +33,7 @@
|
|
|
22
33
|
| `-o`, `--output FILE` | 输出文件路径 | |
|
|
23
34
|
| `--format FORMAT` | 指定输入格式 | 支持 `cpp`、`go`、`java`、`js`、`php`、`proto`、`python`、`rst`、`ruby`、`rust`、`scala`、`swift`、`markdown`、`latex`、`html` |
|
|
24
35
|
| `set KEY VALUE` | 写入配置项 | `KEY` 见下表 |
|
|
36
|
+
| `i18n` | 以 `en.json` 为标准批量翻译多语言 JSON | 只翻译 value,不改 key/结构 |
|
|
25
37
|
|
|
26
38
|
### 配置参数
|
|
27
39
|
| 参数 | 作用 | 默认值 |
|
|
@@ -34,26 +46,19 @@
|
|
|
34
46
|
| `maxRetries` | 最大重试次数 | `10` |
|
|
35
47
|
| `chunkSize` | 文本分块大小 | `1000` |
|
|
36
48
|
|
|
37
|
-
##
|
|
38
|
-
```bash
|
|
39
|
-
npm install
|
|
40
|
-
```
|
|
49
|
+
## 快速开始
|
|
41
50
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
npm run build
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## npx / pnpx 使用
|
|
48
|
-
无需全局安装,直接运行:
|
|
51
|
+
### 1) 安装与运行方式
|
|
52
|
+
无需全局安装,推荐直接用 `npx` / `pnpx`:
|
|
49
53
|
```bash
|
|
50
54
|
npx @thor123141245r/ai-translate --help
|
|
51
55
|
pnpx @thor123141245r/ai-translate --help
|
|
52
56
|
```
|
|
53
57
|
|
|
54
|
-
|
|
58
|
+
也可以本仓库本地开发:
|
|
55
59
|
```bash
|
|
56
|
-
|
|
60
|
+
npm install
|
|
61
|
+
npm run build
|
|
57
62
|
```
|
|
58
63
|
|
|
59
64
|
### CLI 用法
|
|
@@ -65,6 +70,48 @@ node dist/bin/ai-translate.js -f Spanish -t English -i input.md -o output.md
|
|
|
65
70
|
echo "translate" | node dist/bin/ai-translate.js -f en -t en -c .
|
|
66
71
|
```
|
|
67
72
|
|
|
73
|
+
#### 通用文件翻译的工作方式
|
|
74
|
+
1. 根据 `--format` 或输入文件扩展名推断格式
|
|
75
|
+
2. 使用 LangChain 的 text splitter 按格式分块(默认 chunkSize=1000)
|
|
76
|
+
3. 每个分块通过统一 Prompt 交给模型翻译
|
|
77
|
+
4. 输出会尽量保留原始空白与结构
|
|
78
|
+
|
|
79
|
+
### i18n JSON 用法(en.json 作为标准)
|
|
80
|
+
直接把 `en.json` 当纯文本翻译会破坏 JSON 结构与 key。本仓库提供 `i18n` 子命令:以源语言 JSON 为标准,按 key 路径逐条翻译字符串 value,并把结果写回目标语言文件。
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# 也可以用 npx 直接运行
|
|
84
|
+
npx @thor123141245r/ai-translate i18n --base ./src/i18n/pages/sora-watermask-remover --source en --targets ru
|
|
85
|
+
|
|
86
|
+
# 目录内:存在 en.json / ru.json / de.json ...
|
|
87
|
+
# 默认 mode=fill:保留已有翻译,只补齐缺失项
|
|
88
|
+
node dist/bin/ai-translate.js i18n --base ./src/i18n/pages/sora-watermask-remover --source en
|
|
89
|
+
|
|
90
|
+
# 指定目标语言(若目录里还没有目标文件,也会生成)
|
|
91
|
+
node dist/bin/ai-translate.js i18n --base ./src/i18n/pages/sora-watermask-remover --source en --targets ru,de
|
|
92
|
+
|
|
93
|
+
# 覆盖重翻(慎用)
|
|
94
|
+
node dist/bin/ai-translate.js i18n --base ./src/i18n/pages/sora-watermask-remover --source en --targets ru --mode overwrite
|
|
95
|
+
|
|
96
|
+
# 仅预览统计(不写文件)
|
|
97
|
+
node dist/bin/ai-translate.js i18n --base ./src/i18n/pages/sora-watermask-remover --source en --dry
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
#### i18n JSON 翻译的工作方式
|
|
101
|
+
- 读取 `--base` 目录下的源文件(默认 `{source}.json`,例如 `en.json`)
|
|
102
|
+
- 目标文件默认按 `{lang}.json` 命名(例如 `ru.json`)
|
|
103
|
+
- 本地解析 JSON,并提取所有“叶子字符串 value”作为待翻译单元
|
|
104
|
+
- 以批处理的方式调用模型:模型一次只处理一组短文本,不会拿到整份 JSON
|
|
105
|
+
- 翻译结果按原 key 路径写回,严格不改动 key
|
|
106
|
+
- 默认会在目录下写入缓存文件 `.ai-translate.cache.json`,避免重复翻译
|
|
107
|
+
|
|
108
|
+
#### i18n 模式的常用参数
|
|
109
|
+
- `--mode fill`:只补齐缺失项(推荐默认)
|
|
110
|
+
- `--mode overwrite`:强制重翻全部字符串 value
|
|
111
|
+
- `--mode prune`:对齐结构并清理目标文件中多余 key
|
|
112
|
+
- `--batchMaxItems` / `--batchMaxChars`:控制每次调用模型的批处理大小
|
|
113
|
+
- `--cache`:自定义缓存文件名(相对于 `--base` 目录)
|
|
114
|
+
|
|
68
115
|
### 开发态直接运行
|
|
69
116
|
```bash
|
|
70
117
|
npm run dev:cli -- -f en -t zh-CN -i input.md -o output.md
|
|
@@ -112,9 +159,11 @@ node dist/bin/ai-translate.js set chunkSize 1000
|
|
|
112
159
|
- 模型调用使用 `@langchain/*` 系列 ChatModel
|
|
113
160
|
- 配置管理使用 `@commenthol/app-config`
|
|
114
161
|
|
|
115
|
-
##
|
|
162
|
+
## 注意事项
|
|
163
|
+
- i18n 场景请优先使用 `ai-translate i18n`,不要直接把 `en.json` 当纯文本翻译
|
|
164
|
+
- 生产环境注意避免输出冗长日志与敏感信息
|
|
165
|
+
|
|
166
|
+
## 最小自测
|
|
116
167
|
```bash
|
|
117
168
|
npm run validate
|
|
118
169
|
```
|
|
119
|
-
|
|
120
|
-
该脚本使用伪模型进行本地验证,确保分块与转换流程可用。
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA2LA,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,EAAE;;;CAoBxC,CAAA;AAWD,eAAO,MAAM,cAAc,GAAI,KAAK,OAAO,OAAO,SAEjD,CAAA;AAuFD,eAAO,MAAM,GAAG,GAAU,OAAO,MAAM,EAAE,kBA8ExC,CAAA"}
|
package/dist/cli.js
CHANGED
|
@@ -6,6 +6,7 @@ import { AppConfig, StringSchema, v } from '@commenthol/app-config';
|
|
|
6
6
|
import { logger } from './logger.js';
|
|
7
7
|
import { modelFactory, AiTranslateTransform } from './model.js';
|
|
8
8
|
import { TextSplitterStream, recursiveChunkTextSplitter, getFormatByExtension } from './split.js';
|
|
9
|
+
import { runI18nCommand } from './i18n/command.js';
|
|
9
10
|
const log = logger('cli');
|
|
10
11
|
const help = {};
|
|
11
12
|
help._ = `
|
|
@@ -17,6 +18,7 @@ Usage:
|
|
|
17
18
|
|
|
18
19
|
Commands:
|
|
19
20
|
set set config value
|
|
21
|
+
i18n translate i18n json files based on a source json
|
|
20
22
|
|
|
21
23
|
Flags:
|
|
22
24
|
-h, --help Help for ai-translate
|
|
@@ -62,6 +64,29 @@ Available KEYs:
|
|
|
62
64
|
maxRetries max. number of retries; default=10
|
|
63
65
|
chunkSize number of chunks used in text-splitter; default=1000
|
|
64
66
|
`;
|
|
67
|
+
help.i18n = `
|
|
68
|
+
Translate i18n JSON files based on a source JSON (default: en.json)
|
|
69
|
+
|
|
70
|
+
Reads source file (like en.json) in a directory, and writes translated files
|
|
71
|
+
like ru.json, de.json... while preserving keys and structure.
|
|
72
|
+
|
|
73
|
+
Usage:
|
|
74
|
+
ai-translate [flags] i18n --base DIR [--source en] [--targets ru,de]
|
|
75
|
+
|
|
76
|
+
Required:
|
|
77
|
+
--base DIR directory containing source json and target json files
|
|
78
|
+
|
|
79
|
+
Optional:
|
|
80
|
+
--source LANG source language code; default="en"
|
|
81
|
+
--file FILE source file name; default="{source}.json"
|
|
82
|
+
--targets LIST comma/space separated target languages; if omitted,
|
|
83
|
+
infer from existing *.json in DIR (excluding source)
|
|
84
|
+
--mode MODE fill|overwrite|prune; default="fill"
|
|
85
|
+
--dry dry run (no file writes)
|
|
86
|
+
--cache FILE cache file name under DIR; default=".ai-translate.cache.json"
|
|
87
|
+
--batchMaxItems N max items per model call; default=40
|
|
88
|
+
--batchMaxChars N max chars per model call; default=6000
|
|
89
|
+
`;
|
|
65
90
|
const PACKAGE_JSON = '../package.json';
|
|
66
91
|
const APP = 'ai-translate';
|
|
67
92
|
const CONF_FILE = `.${APP}.json`;
|
|
@@ -71,6 +96,9 @@ const commands = {
|
|
|
71
96
|
const key = nextArg(argv);
|
|
72
97
|
const value = nextArg(argv);
|
|
73
98
|
c.set = [key, value];
|
|
99
|
+
},
|
|
100
|
+
i18n: (c) => {
|
|
101
|
+
c.i18n = true;
|
|
74
102
|
}
|
|
75
103
|
};
|
|
76
104
|
const flags = {
|
|
@@ -103,6 +131,49 @@ const flags = {
|
|
|
103
131
|
const format = nextArg(argv);
|
|
104
132
|
if (format)
|
|
105
133
|
f.format = format;
|
|
134
|
+
},
|
|
135
|
+
'--base': (f, argv) => {
|
|
136
|
+
const dir = nextArg(argv);
|
|
137
|
+
if (dir)
|
|
138
|
+
f.base = dir;
|
|
139
|
+
},
|
|
140
|
+
'--source': (f, argv) => {
|
|
141
|
+
const lang = nextArg(argv);
|
|
142
|
+
if (lang)
|
|
143
|
+
f.source = lang;
|
|
144
|
+
},
|
|
145
|
+
'--file': (f, argv) => {
|
|
146
|
+
const name = nextArg(argv);
|
|
147
|
+
if (name)
|
|
148
|
+
f.file = name;
|
|
149
|
+
},
|
|
150
|
+
'--targets': (f, argv) => {
|
|
151
|
+
const list = nextArg(argv);
|
|
152
|
+
if (list)
|
|
153
|
+
f.targets = list;
|
|
154
|
+
},
|
|
155
|
+
'--mode': (f, argv) => {
|
|
156
|
+
const m = nextArg(argv);
|
|
157
|
+
if (m)
|
|
158
|
+
f.mode = m;
|
|
159
|
+
},
|
|
160
|
+
'--dry': (f) => {
|
|
161
|
+
f.dry = true;
|
|
162
|
+
},
|
|
163
|
+
'--cache': (f, argv) => {
|
|
164
|
+
const name = nextArg(argv);
|
|
165
|
+
if (name)
|
|
166
|
+
f.cache = name;
|
|
167
|
+
},
|
|
168
|
+
'--batchMaxItems': (f, argv) => {
|
|
169
|
+
const n = nextArg(argv);
|
|
170
|
+
if (n)
|
|
171
|
+
f.batchMaxItems = n;
|
|
172
|
+
},
|
|
173
|
+
'--batchMaxChars': (f, argv) => {
|
|
174
|
+
const n = nextArg(argv);
|
|
175
|
+
if (n)
|
|
176
|
+
f.batchMaxChars = n;
|
|
106
177
|
}
|
|
107
178
|
};
|
|
108
179
|
flags['-h'] = flags['--help'];
|
|
@@ -228,6 +299,12 @@ export const cli = async (args) => {
|
|
|
228
299
|
}
|
|
229
300
|
return;
|
|
230
301
|
}
|
|
302
|
+
if (cmd.i18n) {
|
|
303
|
+
const runtimeConfig = resolveRuntimeConfig(appConf.config);
|
|
304
|
+
const model = modelFactory(runtimeConfig);
|
|
305
|
+
await runI18nCommand({ console: _console, model, argvOpts: opts });
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
231
308
|
const sourceLanguage = String(opts.sourceLanguage || DEFAULT_LANG);
|
|
232
309
|
const targetLanguage = String(opts.targetLanguage || DEFAULT_LANG);
|
|
233
310
|
const reader = opts.input ? fs.createReadStream(String(opts.input)) : process.stdin;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"align.d.ts","sourceRoot":"","sources":["../../src/i18n/align.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAA;AAEtD,eAAO,MAAM,cAAc,GACzB,QAAQ,OAAO,EACf,QAAQ,OAAO,EACf,MAAM,SAAS,KACd,OA6CF,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { isPlainObject } from './json-path.js';
|
|
2
|
+
export const alignStructure = (source, target, mode) => {
|
|
3
|
+
if (Array.isArray(source)) {
|
|
4
|
+
const tgt = Array.isArray(target) ? target : [];
|
|
5
|
+
const out = [];
|
|
6
|
+
for (let i = 0; i < source.length; i++) {
|
|
7
|
+
out[i] = alignStructure(source[i], tgt[i], mode);
|
|
8
|
+
}
|
|
9
|
+
// arrays are treated as schema-bound; "prune" for arrays is implicit
|
|
10
|
+
return out;
|
|
11
|
+
}
|
|
12
|
+
if (isPlainObject(source)) {
|
|
13
|
+
const tgt = isPlainObject(target) ? target : {};
|
|
14
|
+
const out = {};
|
|
15
|
+
for (const [k, v] of Object.entries(source)) {
|
|
16
|
+
out[k] = alignStructure(v, tgt[k], mode);
|
|
17
|
+
}
|
|
18
|
+
if (mode !== 'prune') {
|
|
19
|
+
// keep target-only keys (user may have custom keys)
|
|
20
|
+
for (const [k, v] of Object.entries(tgt)) {
|
|
21
|
+
if (!(k in out))
|
|
22
|
+
out[k] = v;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
// leaf: keep existing target scalar if type matches; otherwise copy source
|
|
28
|
+
if (typeof source === 'string') {
|
|
29
|
+
if (typeof target === 'string')
|
|
30
|
+
return target;
|
|
31
|
+
// In fill mode, missing values should stay empty so they get translated.
|
|
32
|
+
if (mode === 'fill')
|
|
33
|
+
return '';
|
|
34
|
+
return source;
|
|
35
|
+
}
|
|
36
|
+
if (typeof source === 'number') {
|
|
37
|
+
return typeof target === 'number' ? target : source;
|
|
38
|
+
}
|
|
39
|
+
if (typeof source === 'boolean') {
|
|
40
|
+
return typeof target === 'boolean' ? target : source;
|
|
41
|
+
}
|
|
42
|
+
if (source === null)
|
|
43
|
+
return null;
|
|
44
|
+
return target ?? source;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=align.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"align.js","sourceRoot":"","sources":["../../src/i18n/align.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAI9C,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,MAAe,EACf,MAAe,EACf,IAAe,EACN,EAAE;IACX,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;QAC/C,MAAM,GAAG,GAAc,EAAE,CAAA;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAClD,CAAC;QACD,qEAAqE;QACrE,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;QAC/C,MAAM,GAAG,GAA4B,EAAE,CAAA;QAEvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,EAAG,GAA+B,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QACvE,CAAC;QAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,oDAAoD;YACpD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;oBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,2EAA2E;IAC3E,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAA;QAC7C,yEAAyE;QACzE,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,EAAE,CAAA;QAC9B,OAAO,MAAM,CAAA;IACf,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAA;IACrD,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAA;IACtD,CAAC;IACD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAEhC,OAAO,MAAM,IAAI,MAAM,CAAA;AACzB,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type CacheDataV1 = {
|
|
2
|
+
v: 1;
|
|
3
|
+
entries: Record<string, string>;
|
|
4
|
+
};
|
|
5
|
+
export declare class TranslationCache {
|
|
6
|
+
private readonly _file?;
|
|
7
|
+
private readonly _map;
|
|
8
|
+
constructor(file?: string);
|
|
9
|
+
load(): void;
|
|
10
|
+
get(key: string): string | undefined;
|
|
11
|
+
set(key: string, value: string): void;
|
|
12
|
+
save(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/i18n/cache.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,EAAE,CAAC,CAAA;IACJ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC,CAAA;AAID,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;gBAErC,IAAI,CAAC,EAAE,MAAM;IAIzB,IAAI;IAWJ,GAAG,CAAC,GAAG,EAAE,MAAM;IAIf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAI9B,IAAI;CAKL"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
const empty = { v: 1, entries: {} };
|
|
3
|
+
export class TranslationCache {
|
|
4
|
+
_file;
|
|
5
|
+
_map = new Map();
|
|
6
|
+
constructor(file) {
|
|
7
|
+
this._file = file;
|
|
8
|
+
}
|
|
9
|
+
load() {
|
|
10
|
+
if (!this._file)
|
|
11
|
+
return;
|
|
12
|
+
if (!fs.existsSync(this._file))
|
|
13
|
+
return;
|
|
14
|
+
const raw = fs.readFileSync(this._file, 'utf-8');
|
|
15
|
+
const parsed = JSON.parse(raw);
|
|
16
|
+
if (!parsed || parsed.v !== 1 || typeof parsed.entries !== 'object')
|
|
17
|
+
return;
|
|
18
|
+
for (const [k, v] of Object.entries(parsed.entries)) {
|
|
19
|
+
if (typeof v === 'string')
|
|
20
|
+
this._map.set(k, v);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
get(key) {
|
|
24
|
+
return this._map.get(key);
|
|
25
|
+
}
|
|
26
|
+
set(key, value) {
|
|
27
|
+
this._map.set(key, value);
|
|
28
|
+
}
|
|
29
|
+
save() {
|
|
30
|
+
if (!this._file)
|
|
31
|
+
return;
|
|
32
|
+
const data = { ...empty, entries: Object.fromEntries(this._map.entries()) };
|
|
33
|
+
fs.writeFileSync(this._file, JSON.stringify(data, null, 2) + '\n', 'utf-8');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/i18n/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AAOxB,MAAM,KAAK,GAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;AAEhD,MAAM,OAAO,gBAAgB;IACV,KAAK,CAAS;IACd,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEjD,YAAY,IAAa;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAM;QACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAM;QACtC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAA;QAC7C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAM;QAC3E,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAa;QAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAM;QACvB,MAAM,IAAI,GAAgB,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAA;QACxF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;IAC7E,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
|
|
2
|
+
export declare const runI18nCommand: (opts: {
|
|
3
|
+
console: Pick<typeof console, "log" | "error">;
|
|
4
|
+
model: BaseChatModel;
|
|
5
|
+
argvOpts: Record<string, unknown>;
|
|
6
|
+
}) => Promise<void>;
|
|
7
|
+
//# sourceMappingURL=command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/i18n/command.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAA;AA4BhF,eAAO,MAAM,cAAc,GAAU,MAAM;IACzC,OAAO,EAAE,IAAI,CAAC,OAAO,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,CAAA;IAC9C,KAAK,EAAE,aAAa,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC,kBA2DA,CAAA"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { translateI18nDir } from './translate.js';
|
|
4
|
+
const splitTargets = (raw) => {
|
|
5
|
+
if (typeof raw !== 'string')
|
|
6
|
+
return [];
|
|
7
|
+
return raw
|
|
8
|
+
.split(/[,\s]+/g)
|
|
9
|
+
.map((s) => s.trim())
|
|
10
|
+
.filter(Boolean);
|
|
11
|
+
};
|
|
12
|
+
const inferTargetsFromDir = (baseDir, sourceLang) => {
|
|
13
|
+
if (!fs.existsSync(baseDir))
|
|
14
|
+
return [];
|
|
15
|
+
const entries = fs.readdirSync(baseDir, { withFileTypes: true });
|
|
16
|
+
const langs = [];
|
|
17
|
+
for (const e of entries) {
|
|
18
|
+
if (!e.isFile())
|
|
19
|
+
continue;
|
|
20
|
+
if (!e.name.endsWith('.json'))
|
|
21
|
+
continue;
|
|
22
|
+
if (e.name.startsWith('.'))
|
|
23
|
+
continue;
|
|
24
|
+
const lang = e.name.replace(/\.json$/i, '');
|
|
25
|
+
if (!lang)
|
|
26
|
+
continue;
|
|
27
|
+
if (lang === sourceLang)
|
|
28
|
+
continue;
|
|
29
|
+
langs.push(lang);
|
|
30
|
+
}
|
|
31
|
+
return langs.sort();
|
|
32
|
+
};
|
|
33
|
+
export const runI18nCommand = async (opts) => {
|
|
34
|
+
const baseDir = String(opts.argvOpts.base || '');
|
|
35
|
+
if (!baseDir) {
|
|
36
|
+
throw new Error('missing --base DIR');
|
|
37
|
+
}
|
|
38
|
+
const resolvedBaseDir = path.resolve(process.cwd(), baseDir);
|
|
39
|
+
const sourceLang = String(opts.argvOpts.source || 'en');
|
|
40
|
+
const mode = String(opts.argvOpts.mode || 'fill');
|
|
41
|
+
if (!['fill', 'overwrite', 'prune'].includes(mode)) {
|
|
42
|
+
throw new Error('invalid --mode, expected fill|overwrite|prune');
|
|
43
|
+
}
|
|
44
|
+
const targets = splitTargets(opts.argvOpts.targets);
|
|
45
|
+
const inferredTargets = targets.length
|
|
46
|
+
? targets
|
|
47
|
+
: inferTargetsFromDir(resolvedBaseDir, sourceLang);
|
|
48
|
+
if (!inferredTargets.length) {
|
|
49
|
+
throw new Error('missing --targets, and no existing target *.json files were found');
|
|
50
|
+
}
|
|
51
|
+
const dryRun = Boolean(opts.argvOpts.dry);
|
|
52
|
+
const fileName = typeof opts.argvOpts.file === 'string' ? String(opts.argvOpts.file) : undefined;
|
|
53
|
+
const batchMaxItems = opts.argvOpts.batchMaxItems ? Number(opts.argvOpts.batchMaxItems) : undefined;
|
|
54
|
+
const batchMaxChars = opts.argvOpts.batchMaxChars ? Number(opts.argvOpts.batchMaxChars) : undefined;
|
|
55
|
+
const cacheFile = typeof opts.argvOpts.cache === 'string' && String(opts.argvOpts.cache).trim()
|
|
56
|
+
? path.resolve(resolvedBaseDir, String(opts.argvOpts.cache))
|
|
57
|
+
: path.resolve(resolvedBaseDir, '.ai-translate.cache.json');
|
|
58
|
+
const options = {
|
|
59
|
+
baseDir: resolvedBaseDir,
|
|
60
|
+
sourceLang,
|
|
61
|
+
targets: inferredTargets,
|
|
62
|
+
mode,
|
|
63
|
+
dryRun,
|
|
64
|
+
fileName,
|
|
65
|
+
batchMaxItems,
|
|
66
|
+
batchMaxChars,
|
|
67
|
+
cacheFile
|
|
68
|
+
};
|
|
69
|
+
const stats = await translateI18nDir({ model: opts.model, options });
|
|
70
|
+
for (const s of stats) {
|
|
71
|
+
opts.console.log([
|
|
72
|
+
`[i18n] target=${s.targetLang}`,
|
|
73
|
+
`total=${s.totalStrings}`,
|
|
74
|
+
`skipExisting=${s.skippedExisting}`,
|
|
75
|
+
`cache=${s.usedCache}`,
|
|
76
|
+
`toTranslate=${s.toTranslate}`,
|
|
77
|
+
`translated=${s.translated}`,
|
|
78
|
+
`failed=${s.failed}`,
|
|
79
|
+
dryRun ? 'dryRun=true' : 'dryRun=false',
|
|
80
|
+
`out=${s.targetFile}`
|
|
81
|
+
].join(' '));
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/i18n/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/i18n/extract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAG9C,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,OAAO,KAAG,UAAU,EAuB5D,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { isPlainObject } from './json-path.js';
|
|
2
|
+
export const extractLeafStrings = (root) => {
|
|
3
|
+
const out = [];
|
|
4
|
+
const walk = (node, path) => {
|
|
5
|
+
if (typeof node === 'string') {
|
|
6
|
+
out.push({ path, value: node });
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
if (Array.isArray(node)) {
|
|
10
|
+
for (let i = 0; i < node.length; i++) {
|
|
11
|
+
walk(node[i], path.concat(i));
|
|
12
|
+
}
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (isPlainObject(node)) {
|
|
16
|
+
for (const [k, v] of Object.entries(node)) {
|
|
17
|
+
walk(v, path.concat(k));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
walk(root, []);
|
|
22
|
+
return out;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/i18n/extract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAO9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAa,EAAgB,EAAE;IAChE,MAAM,GAAG,GAAiB,EAAE,CAAA;IAE5B,MAAM,IAAI,GAAG,CAAC,IAAa,EAAE,IAAc,EAAE,EAAE;QAC7C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/B,OAAM;QACR,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;YAC/B,CAAC;YACD,OAAM;QACR,CAAC;QACD,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;YACzB,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACd,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type JsonPathSegment = string | number;
|
|
2
|
+
export type JsonPath = JsonPathSegment[];
|
|
3
|
+
export declare const isPlainObject: (value: unknown) => value is Record<string, unknown>;
|
|
4
|
+
export declare const getAtPath: (root: unknown, path: JsonPath) => unknown;
|
|
5
|
+
export declare const setAtPath: (root: unknown, path: JsonPath, value: unknown) => void;
|
|
6
|
+
export declare const pathToString: (path: JsonPath) => string;
|
|
7
|
+
//# sourceMappingURL=json-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-path.d.ts","sourceRoot":"","sources":["../../src/i18n/json-path.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,CAAA;AAC7C,MAAM,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAA;AAExC,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAI7E,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,MAAM,OAAO,EAAE,MAAM,QAAQ,KAAG,OAYzD,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,MAAM,OAAO,EAAE,MAAM,QAAQ,EAAE,OAAO,OAAO,SA4BtE,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,QAAQ,WAIjB,CAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export const isPlainObject = (value) => {
|
|
2
|
+
if (!value || typeof value !== 'object')
|
|
3
|
+
return false;
|
|
4
|
+
if (Array.isArray(value))
|
|
5
|
+
return false;
|
|
6
|
+
return Object.prototype.toString.call(value) === '[object Object]';
|
|
7
|
+
};
|
|
8
|
+
export const getAtPath = (root, path) => {
|
|
9
|
+
let cur = root;
|
|
10
|
+
for (const seg of path) {
|
|
11
|
+
if (typeof seg === 'number') {
|
|
12
|
+
if (!Array.isArray(cur))
|
|
13
|
+
return undefined;
|
|
14
|
+
cur = cur[seg];
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
if (!isPlainObject(cur))
|
|
18
|
+
return undefined;
|
|
19
|
+
cur = cur[seg];
|
|
20
|
+
}
|
|
21
|
+
return cur;
|
|
22
|
+
};
|
|
23
|
+
export const setAtPath = (root, path, value) => {
|
|
24
|
+
if (!root || typeof root !== 'object')
|
|
25
|
+
return;
|
|
26
|
+
let cur = root;
|
|
27
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
28
|
+
const seg = path[i];
|
|
29
|
+
const nextSeg = path[i + 1];
|
|
30
|
+
if (typeof seg === 'number') {
|
|
31
|
+
if (!Array.isArray(cur))
|
|
32
|
+
return;
|
|
33
|
+
if (cur[seg] === undefined || cur[seg] === null || typeof cur[seg] !== 'object') {
|
|
34
|
+
cur[seg] = typeof nextSeg === 'number' ? [] : {};
|
|
35
|
+
}
|
|
36
|
+
cur = cur[seg];
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (!isPlainObject(cur))
|
|
40
|
+
return;
|
|
41
|
+
if (cur[seg] === undefined || cur[seg] === null || typeof cur[seg] !== 'object') {
|
|
42
|
+
cur[seg] = typeof nextSeg === 'number' ? [] : {};
|
|
43
|
+
}
|
|
44
|
+
cur = cur[seg];
|
|
45
|
+
}
|
|
46
|
+
const last = path[path.length - 1];
|
|
47
|
+
if (typeof last === 'number') {
|
|
48
|
+
if (!Array.isArray(cur))
|
|
49
|
+
return;
|
|
50
|
+
cur[last] = value;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (!isPlainObject(cur))
|
|
54
|
+
return;
|
|
55
|
+
cur[last] = value;
|
|
56
|
+
};
|
|
57
|
+
export const pathToString = (path) => path
|
|
58
|
+
.map((seg) => (typeof seg === 'number' ? `[${seg}]` : seg))
|
|
59
|
+
.join('.')
|
|
60
|
+
.replace(/\.\[/g, '[');
|
|
61
|
+
//# sourceMappingURL=json-path.js.map
|