Skip to content

Commit 776c098

Browse files
committed
Bug Fixes: Incorrect type hints and type constraints
1 parent 729d654 commit 776c098

File tree

4 files changed

+162
-76
lines changed

4 files changed

+162
-76
lines changed

rollup.config.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ console.log(outputMap)
1919
export default {
2020
input: 'src/index.ts',
2121
output: outputMap,
22+
treeshake: {
23+
tryCatchDeoptimization: false,
24+
unknownGlobalSideEffects: false
25+
},
2226
plugins: [
2327
tsPlugin(),
2428
getBabelOutputPlugin({

src/api.ts

Lines changed: 71 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,9 @@ import {
2929
StartPollingConfig,
3030
LoaderCrawlPageConfig,
3131
CrawlPageConfigObject,
32-
CrawlPageRes,
3332
LoaderCrawlDataConfig,
3433
LoaderCrawlFileConfig,
3534
CrawlDataSingleRes,
36-
CrawlDataRes,
37-
CrawlFileRes,
3835
CrawlFileSingleRes,
3936
CrawlDataConfigObject,
4037
LoaderPageRequestConfig,
@@ -320,10 +317,30 @@ export function createCrawlPage(baseConfig: LoaderXCrawlBaseConfig) {
320317
// 通过 爬取cId 找到对应爬取, 再通过 爬取id 找到 page
321318
const errorPageContainer = new Map<number, Map<number, Page>>()
322319

323-
async function crawlPage<T extends CrawlPageConfig>(
324-
config: T,
320+
function crawlPage(
321+
config: string,
325322
callback?: (res: CrawlPageSingleRes) => void
326-
): Promise<CrawlPageRes<T>> {
323+
): Promise<CrawlPageSingleRes>
324+
325+
function crawlPage(
326+
config: PageRequestConfig,
327+
callback?: (res: CrawlPageSingleRes) => void
328+
): Promise<CrawlPageSingleRes>
329+
330+
function crawlPage(
331+
config: (string | PageRequestConfig)[],
332+
callback?: (res: CrawlPageSingleRes) => void
333+
): Promise<CrawlPageSingleRes[]>
334+
335+
function crawlPage(
336+
config: CrawlPageConfigObject,
337+
callback?: (res: CrawlPageSingleRes) => void
338+
): Promise<CrawlPageSingleRes[]>
339+
340+
async function crawlPage(
341+
config: CrawlPageConfig,
342+
callback?: (res: CrawlPageSingleRes) => void
343+
): Promise<CrawlPageSingleRes | CrawlPageSingleRes[]> {
327344
const cId = ++cIdCount
328345

329346
// 创建浏览器
@@ -405,7 +422,7 @@ export function createCrawlPage(baseConfig: LoaderXCrawlBaseConfig) {
405422
? crawlResArr
406423
: crawlResArr[0]
407424

408-
return crawlRes as CrawlPageRes<T>
425+
return crawlRes
409426
}
410427

411428
async function crawlPageSingle(
@@ -466,10 +483,30 @@ export function createCrawlPage(baseConfig: LoaderXCrawlBaseConfig) {
466483
}
467484

468485
export function createCrawlData(baseConfig: LoaderXCrawlBaseConfig) {
469-
async function crawlData<D = any, T extends CrawlDataConfig = any>(
470-
config: T,
471-
callback?: (res: CrawlDataSingleRes<D>) => void
472-
): Promise<CrawlDataRes<D, T>> {
486+
function crawlData<T = any>(
487+
config: string,
488+
callback?: (res: CrawlDataSingleRes<T>) => void
489+
): Promise<CrawlDataSingleRes<T>>
490+
491+
function crawlData<T = any>(
492+
config: DataRequestConfig,
493+
callback?: (res: CrawlDataSingleRes<T>) => void
494+
): Promise<CrawlDataSingleRes<T>>
495+
496+
function crawlData<T = any>(
497+
config: (string | DataRequestConfig)[],
498+
callback?: (res: CrawlDataSingleRes<T>) => void
499+
): Promise<CrawlDataSingleRes<T>[]>
500+
501+
function crawlData<T = any>(
502+
config: CrawlDataConfigObject,
503+
callback?: (res: CrawlDataSingleRes<T>) => void
504+
): Promise<CrawlDataSingleRes<T>[]>
505+
506+
async function crawlData<T = any>(
507+
config: CrawlDataConfig,
508+
callback?: (res: CrawlDataSingleRes<T>) => void
509+
): Promise<CrawlDataSingleRes<T> | CrawlDataSingleRes<T>[]> {
473510
const { requestConfigs, intervalTime } = loaderDataConfig(
474511
baseConfig,
475512
config
@@ -484,7 +521,7 @@ export function createCrawlData(baseConfig: LoaderXCrawlBaseConfig) {
484521
crawlRequestSingle
485522
)
486523

487-
const crawlResArr: CrawlDataSingleRes<D>[] = controllerRes.map((item) => {
524+
const crawlResArr: CrawlDataSingleRes<T>[] = controllerRes.map((item) => {
488525
const {
489526
id,
490527
isSuccess,
@@ -494,7 +531,7 @@ export function createCrawlData(baseConfig: LoaderXCrawlBaseConfig) {
494531
crawlSingleRes
495532
} = item
496533

497-
const crawlRes: CrawlDataSingleRes<D> = {
534+
const crawlRes: CrawlDataSingleRes<T> = {
498535
id,
499536
isSuccess,
500537
maxRetry,
@@ -507,7 +544,7 @@ export function createCrawlData(baseConfig: LoaderXCrawlBaseConfig) {
507544
if (isSuccess && crawlSingleRes) {
508545
const contentType = crawlSingleRes.headers['content-type'] ?? ''
509546

510-
const data: D = contentType.includes('text')
547+
const data: T = contentType.includes('text')
511548
? crawlSingleRes.data.toString()
512549
: JSON.parse(crawlSingleRes.data.toString())
513550

@@ -527,17 +564,32 @@ export function createCrawlData(baseConfig: LoaderXCrawlBaseConfig) {
527564
? crawlResArr
528565
: crawlResArr[0]
529566

530-
return crawlRes as CrawlDataRes<D, T>
567+
return crawlRes
531568
}
532569

533570
return crawlData
534571
}
535572

536573
export function createCrawlFile(baseConfig: LoaderXCrawlBaseConfig) {
537-
async function crawlFile<T extends CrawlFileConfig>(
538-
config: T,
574+
function crawlFile(
575+
config: FileRequestConfig,
576+
callback?: (res: CrawlFileSingleRes) => void
577+
): Promise<CrawlFileSingleRes>
578+
579+
function crawlFile(
580+
config: FileRequestConfig[],
581+
callback?: (res: CrawlFileSingleRes) => void
582+
): Promise<CrawlFileSingleRes[]>
583+
584+
function crawlFile(
585+
config: CrawlFileConfigObject,
586+
callback?: (res: CrawlFileSingleRes) => void
587+
): Promise<CrawlFileSingleRes[]>
588+
589+
async function crawlFile(
590+
config: CrawlFileConfig,
539591
callback?: (res: CrawlFileSingleRes) => void
540-
): Promise<CrawlFileRes<T>> {
592+
): Promise<CrawlFileSingleRes | CrawlFileSingleRes[]> {
541593
const { requestConfigs, intervalTime, fileConfig } = loaderFileConfig(
542594
baseConfig,
543595
config
@@ -685,7 +737,7 @@ export function createCrawlFile(baseConfig: LoaderXCrawlBaseConfig) {
685737
? crawlResArr
686738
: crawlResArr[0]
687739

688-
return crawlRes as CrawlFileRes<T>
740+
return crawlRes
689741
}
690742

691743
return crawlFile

src/types/api.ts

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,28 @@ export interface LoaderCrawlFileConfig
3131
requestConfigs: LoaderFileRequestConfig[]
3232
}
3333

34+
// Function overloading crawl config
35+
export type CrawlPageConfig =
36+
| string
37+
| PageRequestConfig
38+
| (string | PageRequestConfig)[]
39+
| CrawlPageConfigObject
40+
41+
export type CrawlDataConfig =
42+
| string
43+
| DataRequestConfig
44+
| (string | DataRequestConfig)[]
45+
| CrawlDataConfigObject
46+
47+
export type CrawlFileConfig =
48+
| FileRequestConfig
49+
| FileRequestConfig[]
50+
| CrawlFileConfigObject
51+
3452
/* API Config */
53+
// API Config Other
3554
export type IntervalTime = number | { max: number; min?: number }
3655

37-
// RequestConfig
3856
export type Method =
3957
| 'get'
4058
| 'GET'
@@ -62,6 +80,7 @@ export type PageRequestConfigCookies =
6280
| Protocol.Network.CookieParam
6381
| Protocol.Network.CookieParam[]
6482

83+
// API Config Request
6584
export interface PageRequestConfig {
6685
url: string
6786
headers?: AnyObject
@@ -96,7 +115,7 @@ export interface FileRequestConfig {
96115
extension?: string
97116
}
98117

99-
// CrawlConfig
118+
// API Config Crawl
100119
export interface CrawlPageConfigObject {
101120
requestConfigs: (string | PageRequestConfig)[]
102121
proxy?: string
@@ -132,23 +151,6 @@ export interface CrawlFileConfigObject {
132151
}
133152
}
134153

135-
export type CrawlPageConfig =
136-
| string
137-
| PageRequestConfig
138-
| (string | PageRequestConfig)[]
139-
| CrawlPageConfigObject
140-
141-
export type CrawlDataConfig =
142-
| string
143-
| DataRequestConfig
144-
| (string | DataRequestConfig)[]
145-
| CrawlDataConfigObject
146-
147-
export type CrawlFileConfig =
148-
| FileRequestConfig
149-
| FileRequestConfig[]
150-
| CrawlFileConfigObject
151-
152154
export interface StartPollingConfig {
153155
d?: number
154156
h?: number
@@ -195,21 +197,3 @@ export interface CrawlFileSingleRes extends CrawlCommonRes {
195197
}
196198
} | null
197199
}
198-
199-
export type CrawlPageRes<R extends CrawlPageConfig> = R extends
200-
| (string | PageRequestConfig)[]
201-
| CrawlPageConfigObject
202-
? CrawlPageSingleRes[]
203-
: CrawlPageSingleRes
204-
205-
export type CrawlDataRes<D, R extends CrawlDataConfig> = R extends
206-
| (string | DataRequestConfig)[]
207-
| CrawlDataConfigObject
208-
? CrawlDataSingleRes<D>[]
209-
: CrawlDataSingleRes<D>
210-
211-
export type CrawlFileRes<R extends CrawlFileConfig> = R extends
212-
| FileRequestConfig[]
213-
| CrawlFileConfigObject
214-
? CrawlFileSingleRes[]
215-
: CrawlFileSingleRes

src/types/index.ts

Lines changed: 66 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import {
2-
CrawlFileConfig,
3-
CrawlPageConfig,
42
StartPollingConfig,
53
IntervalTime,
6-
CrawlPageRes,
7-
CrawlDataConfig,
84
CrawlPageSingleRes,
9-
CrawlDataRes,
105
CrawlDataSingleRes,
116
CrawlFileSingleRes,
12-
CrawlFileRes
7+
CrawlFileConfigObject,
8+
FileRequestConfig,
9+
DataRequestConfig,
10+
CrawlDataConfigObject,
11+
PageRequestConfig,
12+
CrawlPageConfigObject
1313
} from './api'
1414

1515
export interface XCrawlBaseConfig {
@@ -28,20 +28,66 @@ export type LoaderXCrawlBaseConfig = XCrawlBaseConfig & {
2828
}
2929

3030
export interface XCrawlInstance {
31-
crawlPage: <T extends CrawlPageConfig>(
32-
config: T,
33-
callback?: ((res: CrawlPageSingleRes) => void) | undefined
34-
) => Promise<CrawlPageRes<T>>
35-
36-
crawlData: <D = any, T extends CrawlDataConfig = CrawlDataConfig>(
37-
config: T,
38-
callback?: ((res: CrawlDataSingleRes<D>) => void) | undefined
39-
) => Promise<CrawlDataRes<D, T>>
40-
41-
crawlFile: <T extends CrawlFileConfig>(
42-
config: T,
43-
callback?: ((res: CrawlFileSingleRes) => void) | undefined
44-
) => Promise<CrawlFileRes<T>>
31+
crawlPage: {
32+
(
33+
config: string,
34+
callback?: (res: CrawlPageSingleRes) => void
35+
): Promise<CrawlPageSingleRes>
36+
37+
(
38+
config: PageRequestConfig,
39+
callback?: (res: CrawlPageSingleRes) => void
40+
): Promise<CrawlPageSingleRes>
41+
42+
(
43+
config: (string | PageRequestConfig)[],
44+
callback?: (res: CrawlPageSingleRes) => void
45+
): Promise<CrawlPageSingleRes[]>
46+
47+
(
48+
config: CrawlPageConfigObject,
49+
callback?: (res: CrawlPageSingleRes) => void
50+
): Promise<CrawlPageSingleRes[]>
51+
}
52+
53+
crawlData: {
54+
<T = any>(
55+
config: DataRequestConfig,
56+
callback?: (res: CrawlDataSingleRes<T>) => void
57+
): Promise<CrawlDataSingleRes<T>>
58+
59+
<T = any>(
60+
config: string,
61+
callback?: (res: CrawlDataSingleRes<T>) => void
62+
): Promise<CrawlDataSingleRes<T>>
63+
64+
<T = any>(
65+
config: (string | DataRequestConfig)[],
66+
callback?: (res: CrawlDataSingleRes<T>) => void
67+
): Promise<CrawlDataSingleRes<T>[]>
68+
69+
<T = any>(
70+
config: CrawlDataConfigObject,
71+
callback?: (res: CrawlDataSingleRes<T>) => void
72+
): Promise<CrawlDataSingleRes<T>[]>
73+
}
74+
75+
crawlFile: {
76+
(
77+
config: FileRequestConfig,
78+
callback?: (res: CrawlFileSingleRes) => void
79+
): Promise<CrawlFileSingleRes>
80+
81+
(
82+
config: FileRequestConfig[],
83+
callback?: (res: CrawlFileSingleRes) => void
84+
): Promise<CrawlFileSingleRes[]>
85+
86+
(
87+
config: CrawlFileConfigObject,
88+
callback?: (res: CrawlFileSingleRes) => void
89+
): Promise<CrawlFileSingleRes[]>
90+
}
4591

4692
startPolling: (
4793
config: StartPollingConfig,

0 commit comments

Comments
 (0)