UNPKG

3.06 kBJavaScriptView Raw
1'use script'
2const fs = require('mz/fs')
3const path = require('path')
4const remark = require('remark')
5
6const Listmd = require('./util/readmd.js')
7const cutMdhead = require('./util/cutMdhead.js')
8const { O2A } = require('./util/util.js')
9
10const {
11 logger
12} = require('./config/loggerConfig.js') // winston config
13
14// config
15const mergeConfig = require('./config/mergeConfig')
16
17// Object to Array
18
19/**
20 * @description translateMds main
21 * @param {Array|Object} options
22 * @param {Boolean|String} debug
23 * @param {boolean} [isCli=false]
24 * @returns {Array<Object>} results
25 * @returns {String} results[i].text
26 * @returns {String} results[i].error
27 */
28async function translateMds(options, debug, isCli = false) {
29
30 let absoluteFile, api, tranFrom, tranTo
31 if (!options) throw logger.error('options is NULL')
32
33 // options is Array or Object
34 if (options instanceof Array) {
35 [absoluteFile, api, tranFrom, tranTo] = options
36 } else if (options instanceof Object) {
37 [absoluteFile, api, tranFrom, tranTo] = O2A(options)
38 }
39 // file is absolute
40 if (!absoluteFile || !path.isAbsolute(absoluteFile)) {
41 throw logger.error(`translateMds absoluteFile is no absolute ${absoluteFile}`)
42 }
43 // change defaultConfig from options
44 // return first option
45 if (!isCli) {
46 let opts = {
47 debug,
48 tranFrom,
49 tranTo,
50 api,
51 options
52 };
53
54 let back = mergeConfig.main(opts)
55 debug = back.debug
56 tranFrom = back.tranFrom
57 tranTo = back.tranTo
58 api = back.api
59 }
60
61 // setObjectKey.js after rewrite config.json
62 const {
63 setObjectKey
64 } = require('./setObjectKey.js')
65
66 async function t(data,opts) {
67
68 let head, body, mdAst,translateMdAst
69 [body, head] = cutMdhead(data)
70
71 // to AST
72 mdAst = remark.parse(body)
73
74 // translate Array
75 translateMdAst = await setObjectKey(mdAst, opts)
76
77 if (typeof translateMdAst !== 'string') {
78 let E = translateMdAst.Error
79 // Ast to markdown
80 body = remark().use({
81 settings: {commonmark: true, emphasis: '*', strong: '*', fences: true, paddedTable: false}
82 }).stringify(translateMdAst)
83
84 return [head+body, E]
85 }
86
87 return ['',translateMdAst]
88 }
89
90 let results = []
91
92 // get floder markdown files Array
93 const getList = isCli ? [absoluteFile] : await Listmd(absoluteFile, {deep:'all'})
94 for (i in getList) {
95 let value = getList[i]
96
97 // 去掉 .**.zh 的后缀 和 自己本身 .match(/\.[a-zA-Z]+\.md+/)
98 if(isCli){
99
100 }else{
101 if ( value.endsWith(`.${tranTo}.md`) || value.match(/\.[a-zA-Z]+\.md+/) || !value.endsWith('.md')){
102 continue
103 }
104 const {insert_flg } = require('./util/util.js')
105
106 if ( fs.existsSync( insert_flg(value,`.${tranTo}`, 3 ))){
107 continue
108 }
109 }
110
111 let readfile = await fs.readFile(value, 'utf8')
112
113 let E
114 let _translate = await t(readfile,{name:value,api}).then(x => {
115 E = x[1]
116 return x[0]
117 }).catch(x => {
118 E = x
119 return ''
120 })
121 results.push({text:_translate, error:E})
122 }
123
124 return results
125}
126
127
128module.exports = translateMds