* Patch all relative paths in a config JSON object to absolute paths. * * - segmentation resources + __plugin_library → jieba package * - conversion_chain dict files → main opencc package assets * * @param {Object} config - Parsed config JSON object (modified in-place). * @param {Object} jieba
(config, jieba, mainAssetsDir)
| 179 | * @param {string} mainAssetsDir - Main opencc package assets directory. |
| 180 | */ |
| 181 | function patchConfigPaths(config, jieba, mainAssetsDir) { |
| 182 | // Inject explicit plugin library path (skips dlopen search in C++) |
| 183 | if (jieba && config.segmentation) { |
| 184 | config.segmentation.__plugin_library = jieba.pluginLibrary; |
| 185 | // Absolutify segmentation resource paths (dict_path, model_path, etc.) |
| 186 | if (config.segmentation.resources) { |
| 187 | const res = config.segmentation.resources; |
| 188 | for (const key of Object.keys(res)) { |
| 189 | if (!path.isAbsolute(res[key])) { |
| 190 | res[key] = path.join(jieba.dataDir, res[key]); |
| 191 | } |
| 192 | } |
| 193 | } |
| 194 | } |
| 195 | // Absolutify normalization and conversion_chain dict file paths |
| 196 | if (Array.isArray(config.normalization)) { |
| 197 | for (const step of config.normalization) { |
| 198 | patchDictPaths(step.dict, mainAssetsDir); |
| 199 | } |
| 200 | } |
| 201 | if (Array.isArray(config.conversion_chain)) { |
| 202 | for (const step of config.conversion_chain) { |
| 203 | patchDictPaths(step.dict, mainAssetsDir); |
| 204 | } |
| 205 | } |
| 206 | } |
| 207 | |
| 208 | function resolveJiebaConfigPath(config, jieba) { |
| 209 | if (!jieba || isAbsolutePath(config)) { |
no test coverage detected