@@ -18,7 +18,9 @@ import {
18
18
logSuccess ,
19
19
logWarn ,
20
20
random ,
21
- whiteBold
21
+ whiteBold ,
22
+ isPromise ,
23
+ isBuffer
22
24
} from './utils'
23
25
24
26
import {
@@ -92,7 +94,7 @@ interface InfoFileConfig extends InfoCommonConfig {
92
94
fileName : string
93
95
filePath : string
94
96
data : Buffer
95
- } ) => Promise < Buffer > )
97
+ } ) => Promise < Buffer > | Buffer | void )
96
98
| undefined
97
99
}
98
100
@@ -197,7 +199,7 @@ interface CrawlFileConfig {
197
199
fileName : string
198
200
filePath : string
199
201
data : Buffer
200
- } ) => Promise < Buffer > )
202
+ } ) => Promise < Buffer > | Buffer | void )
201
203
| undefined
202
204
onCrawlItemComplete :
203
205
| ( ( crawlDataSingleResult : CrawlDataSingleResult < any > ) => void )
@@ -224,8 +226,9 @@ type UniteCrawlDataConfig<T> =
224
226
| CrawlDataAdvancedConfig < T >
225
227
226
228
type UniteCrawlFileConfig =
229
+ | string
227
230
| CrawlFileDetailTargetConfig
228
- | CrawlFileDetailTargetConfig [ ]
231
+ | ( string | CrawlFileDetailTargetConfig ) [ ]
229
232
| CrawlFileAdvancedConfig
230
233
231
234
/* Function */
@@ -273,7 +276,10 @@ function transformTargetToDetailTargets(
273
276
| ( string | CrawlDataDetailTargetConfig ) [ ]
274
277
) : CrawlDataDetailTargetConfig [ ]
275
278
function transformTargetToDetailTargets (
276
- config : ( string | CrawlFileDetailTargetConfig ) [ ]
279
+ config :
280
+ | string
281
+ | CrawlFileDetailTargetConfig
282
+ | ( string | CrawlFileDetailTargetConfig ) [ ]
277
283
) : CrawlFileDetailTargetConfig [ ]
278
284
function transformTargetToDetailTargets ( config : any ) {
279
285
return isArray ( config )
@@ -741,10 +747,13 @@ function createCrawlFileConfig(
741
747
advancedDetailTargetsConfig . detailTargets =
742
748
transformTargetToDetailTargets ( targets )
743
749
} else {
744
- // CrawlFileDetailTargetConfig | CrawlFileDetailTargetConfig[] 处理
745
- advancedDetailTargetsConfig . detailTargets = isArray ( originalConfig )
746
- ? originalConfig
747
- : [ originalConfig as CrawlFileDetailTargetConfig ]
750
+ // string | CrawlFileDetailTargetConfig | (string | CrawlFileDetailTargetConfig)[] 处理
751
+ advancedDetailTargetsConfig . detailTargets = transformTargetToDetailTargets (
752
+ originalConfig as
753
+ | string
754
+ | CrawlFileDetailTargetConfig
755
+ | ( string | CrawlFileDetailTargetConfig ) [ ]
756
+ )
748
757
}
749
758
750
759
loaderCommonConfigToCrawlConfig (
@@ -1022,17 +1031,17 @@ function fileSingleResultHandle(
1022
1031
1023
1032
// 在保存前的回调
1024
1033
const data = detailTargetResult . data
1025
- let dataPromise = Promise . resolve ( data )
1034
+ let onBeforeSaveItemFileResult
1026
1035
if ( onBeforeSaveItemFile ) {
1027
- dataPromise = onBeforeSaveItemFile ( {
1036
+ onBeforeSaveItemFileResult = onBeforeSaveItemFile ( {
1028
1037
id,
1029
1038
fileName,
1030
1039
filePath,
1031
1040
data
1032
1041
} )
1033
1042
}
1034
1043
1035
- const saveFileItemPending = dataPromise . then ( async ( newData ) => {
1044
+ async function saveFile ( newData : Buffer ) {
1036
1045
let isSuccess = true
1037
1046
try {
1038
1047
await writeFile ( filePath , newData )
@@ -1061,7 +1070,16 @@ function fileSingleResultHandle(
1061
1070
if ( onCrawlItemComplete ) {
1062
1071
onCrawlItemComplete ( device . result as CrawlFileSingleResult )
1063
1072
}
1064
- } )
1073
+ }
1074
+
1075
+ let saveFileItemPending
1076
+ if ( isPromise ( onBeforeSaveItemFileResult ) ) {
1077
+ saveFileItemPending = onBeforeSaveItemFileResult ! . then ( saveFile )
1078
+ } else if ( isBuffer ( onBeforeSaveItemFileResult ) ) {
1079
+ saveFileItemPending = saveFile ( onBeforeSaveItemFileResult )
1080
+ } else {
1081
+ saveFileItemPending = saveFile ( data )
1082
+ }
1065
1083
1066
1084
// 存放保存文件 Promise , 后续等待即可回到 crawlFile 函数内部等待完成即可
1067
1085
saveFilePendingQueue . push ( saveFileItemPending )
@@ -1263,12 +1281,14 @@ export function createCrawlFile(crawlBaseConfig: CrawlBaseConfig) {
1263
1281
let id = 0
1264
1282
const type = 'file'
1265
1283
1284
+ function crawlFile ( config : string ) : Promise < CrawlFileSingleResult >
1285
+
1266
1286
function crawlFile (
1267
1287
config : CrawlFileDetailTargetConfig
1268
1288
) : Promise < CrawlFileSingleResult >
1269
1289
1270
1290
function crawlFile (
1271
- config : CrawlFileDetailTargetConfig [ ]
1291
+ config : ( string | CrawlFileDetailTargetConfig ) [ ]
1272
1292
) : Promise < CrawlFileSingleResult [ ] >
1273
1293
1274
1294
function crawlFile (
0 commit comments