template-replacement 3.3.2 → 3.4.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/.editorconfig +8 -0
- package/.oxfmtrc.jsonc +7 -0
- package/.oxlintrc.json +3 -0
- package/README.md +39 -9
- package/core/base.ts +54 -55
- package/core/general.ts +37 -9
- package/core/sign.ts +43 -8
- package/dispatcher/general.ts +2 -1
- package/dispatcher/sign.ts +2 -1
- package/dispatcher/workerGeneral.ts +1 -1
- package/dispatcher/workerSign.ts +1 -1
- package/dist/base-DQz39fXI.js +249 -0
- package/dist/index-oILo_kXG.js +46 -0
- package/dist/main/general.js +1373 -1401
- package/dist/main/sign.js +1559 -1573
- package/dist/replace/general.js +281 -306
- package/dist/replace/sign.js +304 -315
- package/download/index.ts +13 -13
- package/download/stream.ts +29 -28
- package/eslint.config.ts +28 -0
- package/fileSystem/db/index.ts +25 -25
- package/fileSystem/db/indexedDBCache.ts +142 -124
- package/fileSystem/index.ts +5 -8
- package/fileSystem/interface.ts +4 -5
- package/fileSystem/opfs/index.ts +40 -36
- package/helper/index.ts +144 -116
- package/index.ts +9 -17
- package/office/zip.ts +106 -97
- package/package.json +17 -11
- package/replace/base.ts +203 -214
- package/replace/general.ts +44 -19
- package/replace/image.ts +88 -86
- package/replace/interface.ts +29 -24
- package/replace/paramsData.ts +108 -96
- package/replace/sign.ts +79 -43
- package/task/urlDownloadTask.ts +54 -63
- package/temp/index.ts +139 -131
- package/temp/interface.ts +8 -8
- package/tsconfig.json +1 -1
- package/vite.config.ts +11 -14
- package/worker/child/agency.ts +49 -41
- package/worker/child/base.ts +125 -89
- package/worker/child/general.ts +2 -3
- package/worker/child/sign.ts +4 -4
- package/worker/index.ts +52 -51
- package/worker/interface.ts +9 -6
- package/worker/main/general.ts +5 -5
- package/worker/main/index.ts +191 -66
- package/worker/main/sign.ts +5 -5
- package/worker/type.ts +16 -15
- package/dist/assets/template_replacement_core_wasm_bg.wasm +0 -0
- package/dist/assets/template_replacement_sign_core_wasm_bg.wasm +0 -0
- package/dist/base-BuKBOMgk.js +0 -269
- package/dist/general.d.ts +0 -1
- package/dist/index-tFDVIkZX.js +0 -46
- package/dist/sign.d.ts +0 -1
package/replace/base.ts
CHANGED
|
@@ -1,228 +1,217 @@
|
|
|
1
|
-
import Interface, { media } from './interface'
|
|
2
|
-
import {
|
|
3
|
-
import paramsData from './paramsData'
|
|
4
|
-
import Temp from '../temp'
|
|
5
|
-
import { fileTypes } from '../helper'
|
|
6
|
-
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import Interface, { media } from './interface'
|
|
2
|
+
import { AsyncCoreInterface } from '../core/base'
|
|
3
|
+
import paramsData from './paramsData'
|
|
4
|
+
import Temp from '../temp'
|
|
5
|
+
import { fileTypes } from '../helper'
|
|
6
|
+
|
|
7
|
+
export type filesTidyResultItem = {
|
|
8
|
+
names: string[]
|
|
9
|
+
uint8Arrays: Uint8Array[]
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type filesTidyResult = {
|
|
13
|
+
//需要解密的文件
|
|
14
|
+
decode: filesTidyResultItem,
|
|
15
|
+
//不需要解密的文件
|
|
16
|
+
noDecode: filesTidyResultItem
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//整理模板文件
|
|
20
|
+
async function tempFilesTidy(files: Temp[] = []): Promise<filesTidyResult> {
|
|
21
|
+
//等待文件加载完成
|
|
22
|
+
const tasks = []
|
|
23
|
+
for (const file of files) {
|
|
24
|
+
tasks.push(file.getBuffer())
|
|
25
|
+
}
|
|
26
|
+
await Promise.all(tasks)
|
|
27
|
+
|
|
28
|
+
const result: filesTidyResult = {
|
|
29
|
+
decode: {
|
|
30
|
+
names: [],
|
|
31
|
+
uint8Arrays: [],
|
|
32
|
+
},
|
|
33
|
+
noDecode: {
|
|
34
|
+
names: [],
|
|
35
|
+
uint8Arrays: [],
|
|
36
|
+
},
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
//整理出需要解密和不需要解密的文件
|
|
40
|
+
for (const file of files) {
|
|
41
|
+
if (!file.uint8Array) {
|
|
42
|
+
continue
|
|
13
43
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
44
|
+
if (file.isDecode) {
|
|
45
|
+
result.decode.names.push(file.name)
|
|
46
|
+
result.decode.uint8Arrays.push(file.uint8Array)
|
|
47
|
+
} else {
|
|
48
|
+
result.noDecode.names.push(file.name)
|
|
49
|
+
result.noDecode.uint8Arrays.push(file.uint8Array)
|
|
17
50
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
51
|
+
}
|
|
52
|
+
return result
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export default class Base implements Interface {
|
|
56
|
+
#files: Temp[] = []
|
|
57
|
+
#core: AsyncCoreInterface
|
|
58
|
+
|
|
59
|
+
constructor(core: AsyncCoreInterface) {
|
|
60
|
+
this.#core = core
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
addTempFile(tempFile: Temp) {
|
|
64
|
+
this.#files.push(tempFile)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
clear(): void {
|
|
68
|
+
this.#files.length = 0
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
//提取单个文件内的所有变量
|
|
72
|
+
async extractOneFileVariables(variables: Record<string, string[]>, file: Temp): Promise<void> {
|
|
73
|
+
const buffer = await file.getBuffer()
|
|
74
|
+
if (!buffer) {
|
|
75
|
+
return
|
|
21
76
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (!files) {
|
|
25
|
-
files = this.#files
|
|
26
|
-
}
|
|
27
|
-
const data: Record<string, string[]> = {}
|
|
28
|
-
const tasks = []
|
|
29
|
-
for (const file of files) {
|
|
30
|
-
tasks.push(new Promise<void>(async (resolve, reject) => {
|
|
31
|
-
const buffer = await file.getBuffer()
|
|
32
|
-
if (buffer && (file.isDecode || (await file.type()) !== fileTypes.unknown)) {
|
|
33
|
-
data[file.name] = await this.#core.extract_one_file_variable_names(buffer, file.isDecode)
|
|
34
|
-
}
|
|
35
|
-
resolve()
|
|
36
|
-
}))
|
|
37
|
-
}
|
|
38
|
-
await Promise.all(tasks)
|
|
39
|
-
return data
|
|
77
|
+
if ((await file.type()) === fileTypes.unknown && !file.isDecode) {
|
|
78
|
+
return
|
|
40
79
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
data[file.name] = []
|
|
54
|
-
if (medias && Array.isArray(medias)) {
|
|
55
|
-
for (const m of medias) {
|
|
56
|
-
if (m.id && m.data) {
|
|
57
|
-
data[file.name].push({
|
|
58
|
-
id: m.id,
|
|
59
|
-
data: new Uint8Array(m.data)
|
|
60
|
-
})
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
resolve()
|
|
66
|
-
}))
|
|
67
|
-
}
|
|
68
|
-
await Promise.all(tasks)
|
|
69
|
-
return data
|
|
80
|
+
variables[file.name] = await this.#core.extract_one_file_variable_names(
|
|
81
|
+
buffer,
|
|
82
|
+
file.isDecode,
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
//提取多个文件内的所有变量
|
|
87
|
+
async extractVariables(
|
|
88
|
+
files: Temp[] | undefined,
|
|
89
|
+
): Promise<Record<string, string[]>> {
|
|
90
|
+
if (!files) {
|
|
91
|
+
files = this.#files
|
|
70
92
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
93
|
+
const variables: Record<string, string[]> = {}
|
|
94
|
+
const tasks = []
|
|
95
|
+
for (const file of files) {
|
|
96
|
+
tasks.push(this.extractOneFileVariables(variables, file))
|
|
74
97
|
}
|
|
75
|
-
|
|
76
|
-
|
|
98
|
+
await Promise.allSettled(tasks)
|
|
99
|
+
return variables
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
//提取单个文件内的所有媒体文件
|
|
103
|
+
async extractOneFileMedias(medias: Record<string, media[]>, file: Temp): Promise<void> {
|
|
104
|
+
const buffer = await file.getBuffer()
|
|
105
|
+
if (!buffer) {
|
|
106
|
+
return
|
|
77
107
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return ""
|
|
108
|
+
if ((await file.type()) === fileTypes.unknown && !file.isDecode) {
|
|
109
|
+
return
|
|
81
110
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
const tasks = []
|
|
90
|
-
for (const file of files) {
|
|
91
|
-
tasks.push(file.getBuffer())
|
|
92
|
-
}
|
|
93
|
-
await Promise.all(tasks)
|
|
94
|
-
|
|
95
|
-
const fileMap: { decode: { names: string[], uint8Arrays: Uint8Array[] }, noDecode: { names: string[], uint8Arrays: Uint8Array[] }} = {
|
|
96
|
-
//需要解密的文件
|
|
97
|
-
decode: {
|
|
98
|
-
names: [],
|
|
99
|
-
uint8Arrays: [],
|
|
100
|
-
},
|
|
101
|
-
//不需要解密的文件
|
|
102
|
-
noDecode: {
|
|
103
|
-
names: [],
|
|
104
|
-
uint8Arrays: [],
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
//整理出需要解密和不需要解密的文件
|
|
109
|
-
for (const file of files) {
|
|
110
|
-
if (!file.uint8Array) {
|
|
111
|
-
continue;
|
|
112
|
-
}
|
|
113
|
-
if (file.isDecode) {
|
|
114
|
-
fileMap.decode.names.push(file.name)
|
|
115
|
-
fileMap.decode.uint8Arrays.push(file.uint8Array)
|
|
116
|
-
} else {
|
|
117
|
-
fileMap.noDecode.names.push(file.name)
|
|
118
|
-
fileMap.noDecode.uint8Arrays.push(file.uint8Array)
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
//分别处理需要解密和不需要解密的文件
|
|
122
|
-
const res = await Promise.all([
|
|
123
|
-
this._execute(params, fileMap.noDecode.names, fileMap.noDecode.uint8Arrays, false),
|
|
124
|
-
this._execute(params, fileMap.decode.names, fileMap.decode.uint8Arrays, true),
|
|
125
|
-
])
|
|
126
|
-
|
|
127
|
-
return {
|
|
128
|
-
...res[0],
|
|
129
|
-
...res[1],
|
|
130
|
-
}
|
|
111
|
+
const res = await this.#core.extract_one_file_medias(
|
|
112
|
+
buffer,
|
|
113
|
+
file.isDecode,
|
|
114
|
+
)
|
|
115
|
+
medias[file.name] = []
|
|
116
|
+
if (!Array.isArray(res)) {
|
|
117
|
+
return
|
|
131
118
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
for (let index = 0; index < res.length; index++) {
|
|
140
|
-
const file = res[index]
|
|
141
|
-
if (file.length) {
|
|
142
|
-
resData[names[index]] = file
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
return resData
|
|
119
|
+
for (const { id, data } of res) {
|
|
120
|
+
if (id && data) {
|
|
121
|
+
medias[file.name].push({
|
|
122
|
+
id: id,
|
|
123
|
+
data: new Uint8Array(data),
|
|
124
|
+
})
|
|
125
|
+
}
|
|
146
126
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
for (const file of files) {
|
|
156
|
-
tasks.push(file.getBuffer())
|
|
157
|
-
}
|
|
158
|
-
await Promise.all(tasks)
|
|
159
|
-
|
|
160
|
-
const fileMap: { decode: { names: string[], uint8Arrays: Uint8Array[] }, noDecode: { names: string[], uint8Arrays: Uint8Array[] }} = {
|
|
161
|
-
//需要解密的文件
|
|
162
|
-
decode: {
|
|
163
|
-
names: [],
|
|
164
|
-
uint8Arrays: [],
|
|
165
|
-
},
|
|
166
|
-
//不需要解密的文件
|
|
167
|
-
noDecode: {
|
|
168
|
-
names: [],
|
|
169
|
-
uint8Arrays: [],
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
//整理出需要解密和不需要解密的文件
|
|
174
|
-
for (const file of files) {
|
|
175
|
-
if (!file.uint8Array) {
|
|
176
|
-
continue;
|
|
177
|
-
}
|
|
178
|
-
if (file.isDecode) {
|
|
179
|
-
fileMap.decode.names.push(file.name)
|
|
180
|
-
fileMap.decode.uint8Arrays.push(file.uint8Array)
|
|
181
|
-
} else {
|
|
182
|
-
fileMap.noDecode.names.push(file.name)
|
|
183
|
-
fileMap.noDecode.uint8Arrays.push(file.uint8Array)
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
//分别处理需要解密和不需要解密的文件
|
|
187
|
-
const res = await Promise.all([
|
|
188
|
-
this._executeMultipleParams(paramsList, fileMap.noDecode.names, fileMap.noDecode.uint8Arrays, false),
|
|
189
|
-
this._executeMultipleParams(paramsList, fileMap.decode.names, fileMap.decode.uint8Arrays, true),
|
|
190
|
-
])
|
|
191
|
-
|
|
192
|
-
const result = []
|
|
193
|
-
for (let i = 0; i < res[0].length; i++) {
|
|
194
|
-
result.push({...res[0][i], ...res[1][i]})
|
|
195
|
-
}
|
|
196
|
-
return result
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
//提取多个文件内的所有媒体文件
|
|
130
|
+
async extractMedias(
|
|
131
|
+
files: Temp[] | undefined,
|
|
132
|
+
): Promise<Record<string, media[]>> {
|
|
133
|
+
if (!files) {
|
|
134
|
+
files = this.#files
|
|
197
135
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
if (!uint8Arrays.length) {
|
|
203
|
-
return result
|
|
204
|
-
}
|
|
205
|
-
const resFileList = await this.handleMultipleParams(paramsList, uint8Arrays, isDecode)
|
|
206
|
-
|
|
207
|
-
let resFileIndex = 0
|
|
208
|
-
for (let index = 0; index < paramsList.length; index++) {
|
|
209
|
-
const resultItem: Record<string, Uint8Array> = {}
|
|
210
|
-
for (const name of names) {
|
|
211
|
-
const file = resFileList[resFileIndex++]
|
|
212
|
-
if (file.length) {
|
|
213
|
-
resultItem[name] = file
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
result[index] = resultItem
|
|
217
|
-
}
|
|
218
|
-
return result
|
|
136
|
+
const medias: Record<string, media[]> = {}
|
|
137
|
+
const tasks = []
|
|
138
|
+
for (const file of files) {
|
|
139
|
+
tasks.push(this.extractOneFileMedias(medias, file))
|
|
219
140
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
141
|
+
await Promise.all(tasks)
|
|
142
|
+
return medias
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
async handle(
|
|
146
|
+
paramsData: paramsData,
|
|
147
|
+
files: Uint8Array[],
|
|
148
|
+
encode_files: Uint8Array[],
|
|
149
|
+
): Promise<Uint8Array[]> {
|
|
150
|
+
return []
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
async handleMultipleParams(
|
|
154
|
+
paramsData: paramsData[],
|
|
155
|
+
files: Uint8Array[],
|
|
156
|
+
encode_files: Uint8Array[],
|
|
157
|
+
): Promise<Uint8Array[]> {
|
|
158
|
+
return []
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async sign(data: unknown): Promise<string> {
|
|
162
|
+
return ''
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
async execute(
|
|
166
|
+
params: paramsData,
|
|
167
|
+
files: Temp[] | undefined,
|
|
168
|
+
): Promise<Record<string, Uint8Array>> {
|
|
169
|
+
const { noDecode, decode } = await tempFilesTidy(files ?? this.#files)
|
|
170
|
+
const res = await this.handle(params, noDecode.uint8Arrays, decode.uint8Arrays);
|
|
171
|
+
const result: Record<string, Uint8Array> = {}
|
|
172
|
+
let i = 0
|
|
173
|
+
for (const name of noDecode.names) {
|
|
174
|
+
result[name] = res[i++] ?? new Uint8Array()
|
|
223
175
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
176
|
+
for (const name of decode.names) {
|
|
177
|
+
result[name] = res[i++] ?? new Uint8Array()
|
|
178
|
+
}
|
|
179
|
+
return result
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
async executeMultipleParams(
|
|
183
|
+
paramsList: paramsData[],
|
|
184
|
+
files: Temp[] | undefined,
|
|
185
|
+
): Promise<Record<string, Uint8Array>[]> {
|
|
186
|
+
const { noDecode, decode } = await tempFilesTidy(files ?? this.#files)
|
|
187
|
+
const resFileList = await this.handleMultipleParams(paramsList, noDecode.uint8Arrays, decode.uint8Arrays);
|
|
188
|
+
const result: Record<string, Uint8Array>[] = Array(paramsList.length)
|
|
189
|
+
|
|
190
|
+
let resFileIndex = 0
|
|
191
|
+
for (let index = 0; index < paramsList.length; index++) {
|
|
192
|
+
const resultItem: Record<string, Uint8Array> = {}
|
|
193
|
+
for (const name of noDecode.names) {
|
|
194
|
+
const file = resFileList[resFileIndex++]
|
|
195
|
+
if (file.length) {
|
|
196
|
+
resultItem[name] = file
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
for (const name of decode.names) {
|
|
200
|
+
const file = resFileList[resFileIndex++]
|
|
201
|
+
if (file.length) {
|
|
202
|
+
resultItem[name] = file
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
result[index] = resultItem
|
|
227
206
|
}
|
|
228
|
-
|
|
207
|
+
return result
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
async fileEncrypt(file: Uint8Array): Promise<Uint8Array> {
|
|
211
|
+
return this.#core.file_encrypt(file)
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
async filesEncrypt(files: Uint8Array[]): Promise<Uint8Array[]> {
|
|
215
|
+
return this.#core.files_encrypt(files)
|
|
216
|
+
}
|
|
217
|
+
}
|
package/replace/general.ts
CHANGED
|
@@ -1,23 +1,48 @@
|
|
|
1
|
-
import Base from './base'
|
|
2
|
-
import core, {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import Base from './base'
|
|
2
|
+
import core, {
|
|
3
|
+
replace_batch,
|
|
4
|
+
replace_batch_multiple_params
|
|
5
|
+
} from '../core/general'
|
|
6
|
+
import paramsData, { replaceParams } from './paramsData'
|
|
5
7
|
export default class General extends Base {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
constructor() {
|
|
9
|
+
super(core())
|
|
10
|
+
}
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
async handle(
|
|
13
|
+
paramsData: paramsData,
|
|
14
|
+
files: Uint8Array[],
|
|
15
|
+
encode_files: Uint8Array[],
|
|
16
|
+
): Promise<Uint8Array[]> {
|
|
17
|
+
const [params, mediaBuffers] = await paramsData.toReplaceParams()
|
|
18
|
+
return replace_batch(params, mediaBuffers, files, encode_files)
|
|
19
|
+
}
|
|
14
20
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
async handleMultipleParams(
|
|
22
|
+
paramsList: paramsData[],
|
|
23
|
+
files: Uint8Array[],
|
|
24
|
+
encode_files: Uint8Array[],
|
|
25
|
+
): Promise<Uint8Array[]> {
|
|
26
|
+
const mediaBuffers: Uint8Array[] = [],
|
|
27
|
+
newParamsListTasks: Promise<replaceParams>[] = []
|
|
28
|
+
for (const paramsData of paramsList) {
|
|
29
|
+
newParamsListTasks.push(
|
|
30
|
+
new Promise<replaceParams>((resolve, reject) => {
|
|
31
|
+
paramsData
|
|
32
|
+
.toReplaceParams(mediaBuffers)
|
|
33
|
+
.then(([params]) => {
|
|
34
|
+
resolve(params)
|
|
35
|
+
})
|
|
36
|
+
.catch(reject)
|
|
37
|
+
}),
|
|
38
|
+
)
|
|
22
39
|
}
|
|
23
|
-
|
|
40
|
+
const newParamsList = await Promise.all(newParamsListTasks)
|
|
41
|
+
return replace_batch_multiple_params(
|
|
42
|
+
newParamsList,
|
|
43
|
+
mediaBuffers,
|
|
44
|
+
files,
|
|
45
|
+
encode_files,
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
}
|