@crawlee/core 3.0.0-alpha.2 → 3.0.0-alpha.3
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/dist/LICENSE.md +201 -0
- package/{README.md → dist/README.md} +0 -0
- package/dist/autoscaling/autoscaled_pool.d.ts +286 -0
- package/dist/autoscaling/autoscaled_pool.d.ts.map +1 -0
- package/dist/autoscaling/autoscaled_pool.js +624 -0
- package/dist/autoscaling/autoscaled_pool.js.map +1 -0
- package/dist/autoscaling/index.d.ts +4 -0
- package/dist/autoscaling/index.d.ts.map +1 -0
- package/dist/autoscaling/index.js +7 -0
- package/dist/autoscaling/index.js.map +1 -0
- package/dist/autoscaling/snapshotter.d.ts +193 -0
- package/dist/autoscaling/snapshotter.d.ts.map +1 -0
- package/dist/autoscaling/snapshotter.js +377 -0
- package/dist/autoscaling/snapshotter.js.map +1 -0
- package/dist/autoscaling/system_status.d.ts +181 -0
- package/dist/autoscaling/system_status.d.ts.map +1 -0
- package/dist/autoscaling/system_status.js +194 -0
- package/dist/autoscaling/system_status.js.map +1 -0
- package/dist/cache_container.d.ts +18 -0
- package/dist/cache_container.d.ts.map +1 -0
- package/dist/cache_container.js +42 -0
- package/dist/cache_container.js.map +1 -0
- package/dist/configuration.d.ts +150 -0
- package/dist/configuration.d.ts.map +1 -0
- package/dist/configuration.js +284 -0
- package/dist/configuration.js.map +1 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +6 -0
- package/dist/constants.js.map +1 -0
- package/dist/crawlers/crawler_commons.d.ts +23 -0
- package/dist/crawlers/crawler_commons.d.ts.map +1 -0
- package/dist/crawlers/crawler_commons.js +3 -0
- package/dist/crawlers/crawler_commons.js.map +1 -0
- package/dist/crawlers/crawler_extension.d.ts +11 -0
- package/dist/crawlers/crawler_extension.d.ts.map +1 -0
- package/dist/crawlers/crawler_extension.js +30 -0
- package/dist/crawlers/crawler_extension.js.map +1 -0
- package/dist/crawlers/crawler_utils.d.ts +25 -0
- package/dist/crawlers/crawler_utils.d.ts.map +1 -0
- package/dist/crawlers/crawler_utils.js +72 -0
- package/dist/crawlers/crawler_utils.js.map +1 -0
- package/dist/crawlers/index.d.ts +5 -0
- package/dist/crawlers/index.d.ts.map +1 -0
- package/dist/crawlers/index.js +8 -0
- package/dist/crawlers/index.js.map +1 -0
- package/dist/crawlers/statistics.d.ts +147 -0
- package/dist/crawlers/statistics.d.ts.map +1 -0
- package/dist/crawlers/statistics.js +360 -0
- package/dist/crawlers/statistics.js.map +1 -0
- package/dist/enqueue_links/enqueue_links.d.ts +138 -0
- package/dist/enqueue_links/enqueue_links.d.ts.map +1 -0
- package/dist/enqueue_links/enqueue_links.js +123 -0
- package/dist/enqueue_links/enqueue_links.js.map +1 -0
- package/dist/enqueue_links/index.d.ts +3 -0
- package/dist/enqueue_links/index.d.ts.map +1 -0
- package/dist/enqueue_links/index.js +6 -0
- package/dist/enqueue_links/index.js.map +1 -0
- package/dist/enqueue_links/shared.d.ts +60 -0
- package/dist/enqueue_links/shared.d.ts.map +1 -0
- package/dist/enqueue_links/shared.js +148 -0
- package/dist/enqueue_links/shared.js.map +1 -0
- package/dist/errors.d.ts +8 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +12 -0
- package/dist/errors.js.map +1 -0
- package/dist/events/event_manager.d.ts +41 -0
- package/dist/events/event_manager.d.ts.map +1 -0
- package/dist/events/event_manager.js +103 -0
- package/dist/events/event_manager.js.map +1 -0
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +6 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/local_event_manager.d.ts +32 -0
- package/dist/events/local_event_manager.d.ts.map +1 -0
- package/dist/events/local_event_manager.js +114 -0
- package/dist/events/local_event_manager.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +63 -0
- package/dist/log.d.ts +3 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +12 -0
- package/dist/log.js.map +1 -0
- package/dist/package.json +82 -0
- package/dist/proxy_configuration.d.ts +181 -0
- package/dist/proxy_configuration.d.ts.map +1 -0
- package/dist/proxy_configuration.js +209 -0
- package/dist/proxy_configuration.js.map +1 -0
- package/dist/request.d.ts +174 -0
- package/dist/request.d.ts.map +1 -0
- package/dist/request.js +270 -0
- package/dist/request.js.map +1 -0
- package/dist/serialization.d.ts +33 -0
- package/dist/serialization.d.ts.map +1 -0
- package/dist/serialization.js +146 -0
- package/dist/serialization.js.map +1 -0
- package/dist/session_pool/errors.d.ts +8 -0
- package/dist/session_pool/errors.d.ts.map +1 -0
- package/dist/session_pool/errors.js +20 -0
- package/dist/session_pool/errors.js.map +1 -0
- package/dist/session_pool/events.d.ts +3 -0
- package/dist/session_pool/events.d.ts.map +1 -0
- package/dist/session_pool/events.js +6 -0
- package/dist/session_pool/events.js.map +1 -0
- package/dist/session_pool/index.d.ts +6 -0
- package/dist/session_pool/index.d.ts.map +1 -0
- package/dist/session_pool/index.js +9 -0
- package/dist/session_pool/index.js.map +1 -0
- package/dist/session_pool/session.d.ts +212 -0
- package/dist/session_pool/session.d.ts.map +1 -0
- package/dist/session_pool/session.js +360 -0
- package/dist/session_pool/session.js.map +1 -0
- package/dist/session_pool/session_pool.d.ts +222 -0
- package/dist/session_pool/session_pool.d.ts.map +1 -0
- package/dist/session_pool/session_pool.js +389 -0
- package/dist/session_pool/session_pool.js.map +1 -0
- package/dist/session_pool/session_utils.d.ts +9 -0
- package/dist/session_pool/session_utils.d.ts.map +1 -0
- package/dist/session_pool/session_utils.js +19 -0
- package/dist/session_pool/session_utils.js.map +1 -0
- package/dist/storages/dataset.d.ts +358 -0
- package/dist/storages/dataset.d.ts.map +1 -0
- package/dist/storages/dataset.js +415 -0
- package/dist/storages/dataset.js.map +1 -0
- package/dist/storages/index.d.ts +7 -0
- package/dist/storages/index.d.ts.map +1 -0
- package/dist/storages/index.js +11 -0
- package/dist/storages/index.js.map +1 -0
- package/dist/storages/key_value_store.d.ts +242 -0
- package/dist/storages/key_value_store.d.ts.map +1 -0
- package/dist/storages/key_value_store.js +319 -0
- package/dist/storages/key_value_store.js.map +1 -0
- package/dist/storages/request_list.d.ts +461 -0
- package/dist/storages/request_list.d.ts.map +1 -0
- package/dist/storages/request_list.js +715 -0
- package/dist/storages/request_list.js.map +1 -0
- package/dist/storages/request_queue.d.ts +312 -0
- package/dist/storages/request_queue.d.ts.map +1 -0
- package/dist/storages/request_queue.js +708 -0
- package/dist/storages/request_queue.js.map +1 -0
- package/dist/storages/storage.d.ts +260 -0
- package/dist/storages/storage.d.ts.map +1 -0
- package/dist/storages/storage.js +3 -0
- package/dist/storages/storage.js.map +1 -0
- package/dist/storages/storage_manager.d.ts +40 -0
- package/dist/storages/storage_manager.d.ts.map +1 -0
- package/dist/storages/storage_manager.js +119 -0
- package/dist/storages/storage_manager.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/typedefs.d.ts +12 -0
- package/dist/typedefs.d.ts.map +1 -0
- package/dist/typedefs.js +15 -0
- package/dist/typedefs.js.map +1 -0
- package/dist/validators.d.ts +21 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +26 -0
- package/dist/validators.js.map +1 -0
- package/package.json +11 -10
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.enqueueLinks = exports.EnqueueStrategy = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const tldts_1 = require("tldts");
|
|
6
|
+
const ow_1 = tslib_1.__importDefault(require("ow"));
|
|
7
|
+
const log_1 = tslib_1.__importDefault(require("@apify/log"));
|
|
8
|
+
const shared_1 = require("./shared");
|
|
9
|
+
var EnqueueStrategy;
|
|
10
|
+
(function (EnqueueStrategy) {
|
|
11
|
+
/**
|
|
12
|
+
* Matches any URLs found
|
|
13
|
+
*/
|
|
14
|
+
EnqueueStrategy["All"] = "all";
|
|
15
|
+
/**
|
|
16
|
+
* Matches any URLs that have the same subdomain as the base URL
|
|
17
|
+
*/
|
|
18
|
+
EnqueueStrategy["SameSubdomain"] = "same-subdomain";
|
|
19
|
+
/**
|
|
20
|
+
* Matches any URLs that have the same hostname.
|
|
21
|
+
* For example, `https://wow.an.example.com` and `https://example.com` will both be matched for a base url of
|
|
22
|
+
* `https://example.com`.
|
|
23
|
+
*/
|
|
24
|
+
EnqueueStrategy["SameHostname"] = "same-hostname";
|
|
25
|
+
})(EnqueueStrategy = exports.EnqueueStrategy || (exports.EnqueueStrategy = {}));
|
|
26
|
+
/**
|
|
27
|
+
* The function finds elements matching a specific CSS selector (HTML anchor (`<a>`) by default)
|
|
28
|
+
* either in a Puppeteer/Playwright page, or in a Cheerio object (parsed HTML),
|
|
29
|
+
* and enqueues the URLs in their `href` attributes to the provided {@link RequestQueue}.
|
|
30
|
+
* If you're looking to find URLs in JavaScript heavy pages where links are not available
|
|
31
|
+
* in `href` elements, but rather navigations are triggered in click handlers
|
|
32
|
+
* see {@link puppeteerUtils.enqueueLinksByClickingElements}.
|
|
33
|
+
*
|
|
34
|
+
* Optionally, the function allows you to filter the target links' URLs using an array of {@link PseudoUrl} objects
|
|
35
|
+
* and override settings of the enqueued {@link Request} objects.
|
|
36
|
+
*
|
|
37
|
+
* **Example usage**
|
|
38
|
+
*
|
|
39
|
+
* ```javascript
|
|
40
|
+
* await enqueueLinks({
|
|
41
|
+
* page,
|
|
42
|
+
* requestQueue,
|
|
43
|
+
* selector: 'a.product-detail',
|
|
44
|
+
* pseudoUrls: [
|
|
45
|
+
* 'https://www.example.com/handbags/[.*]',
|
|
46
|
+
* 'https://www.example.com/purses/[.*]'
|
|
47
|
+
* ],
|
|
48
|
+
* });
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @param options All `enqueueLinks()` parameters are passed via an options object.
|
|
52
|
+
* @returns Promise that resolves to {@link BatchAddRequestsResult} object.
|
|
53
|
+
*/
|
|
54
|
+
async function enqueueLinks(options) {
|
|
55
|
+
(0, ow_1.default)(options, ow_1.default.object.exactShape({
|
|
56
|
+
urls: ow_1.default.array.ofType(ow_1.default.string),
|
|
57
|
+
requestQueue: ow_1.default.object.hasKeys('fetchNextRequest', 'addRequest'),
|
|
58
|
+
limit: ow_1.default.optional.number,
|
|
59
|
+
selector: ow_1.default.optional.string,
|
|
60
|
+
baseUrl: ow_1.default.optional.string,
|
|
61
|
+
pseudoUrls: ow_1.default.optional.array.ofType(ow_1.default.any(ow_1.default.string, ow_1.default.object.hasKeys('purl'))),
|
|
62
|
+
globs: ow_1.default.optional.array.ofType(ow_1.default.any(ow_1.default.string, ow_1.default.object.hasKeys('glob'))),
|
|
63
|
+
regexps: ow_1.default.optional.array.ofType(ow_1.default.any(ow_1.default.regExp, ow_1.default.object.hasKeys('regexp'))),
|
|
64
|
+
transformRequestFunction: ow_1.default.optional.function,
|
|
65
|
+
strategy: ow_1.default.optional.string.oneOf([
|
|
66
|
+
EnqueueStrategy.All,
|
|
67
|
+
EnqueueStrategy.SameSubdomain,
|
|
68
|
+
EnqueueStrategy.SameHostname,
|
|
69
|
+
]),
|
|
70
|
+
}));
|
|
71
|
+
const { requestQueue, limit, urls, pseudoUrls, globs, regexps, transformRequestFunction, } = options;
|
|
72
|
+
const urlPatternObjects = [];
|
|
73
|
+
if (pseudoUrls?.length) {
|
|
74
|
+
log_1.default.deprecated('`pseudoUrls` option is deprecated, use `globs` or `regexps` instead');
|
|
75
|
+
urlPatternObjects.push(...(0, shared_1.constructRegExpObjectsFromPseudoUrls)(pseudoUrls));
|
|
76
|
+
}
|
|
77
|
+
if (globs?.length) {
|
|
78
|
+
urlPatternObjects.push(...(0, shared_1.constructGlobObjectsFromGlobs)(globs));
|
|
79
|
+
}
|
|
80
|
+
if (regexps?.length) {
|
|
81
|
+
urlPatternObjects.push(...(0, shared_1.constructRegExpObjectsFromRegExps)(regexps));
|
|
82
|
+
}
|
|
83
|
+
options.strategy ?? (options.strategy = urlPatternObjects.length > 0 ? undefined : EnqueueStrategy.SameSubdomain);
|
|
84
|
+
if (options.baseUrl) {
|
|
85
|
+
switch (options.strategy) {
|
|
86
|
+
case EnqueueStrategy.SameSubdomain:
|
|
87
|
+
// We need to get the origin of the passed in domain in the event someone sets baseUrl
|
|
88
|
+
// to an url like https://example.com/deep/default/path and one of the found urls is an
|
|
89
|
+
// absolute relative path (/path/to/page)
|
|
90
|
+
urlPatternObjects.push({ glob: `${new URL(options.baseUrl).origin}/**` });
|
|
91
|
+
break;
|
|
92
|
+
case EnqueueStrategy.SameHostname: {
|
|
93
|
+
const url = new URL(options.baseUrl);
|
|
94
|
+
// Get the actual hostname from the base url
|
|
95
|
+
const baseUrlHostname = (0, tldts_1.getDomain)(url.hostname, { mixedInputs: false });
|
|
96
|
+
if (baseUrlHostname) {
|
|
97
|
+
// We have a hostname, so we can use it to match all links on the page that point to it and any subdomains of it
|
|
98
|
+
url.hostname = baseUrlHostname;
|
|
99
|
+
urlPatternObjects.push({ glob: `${url.origin.replace(baseUrlHostname, `*.${baseUrlHostname}`)}/**` }, { glob: `${url.origin}/**` });
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// We don't have a hostname (can happen for ips for instance), so reproduce the same behavior
|
|
103
|
+
// as SameDomainAndSubdomain
|
|
104
|
+
urlPatternObjects.push({ glob: `${url.origin}/**` });
|
|
105
|
+
}
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case EnqueueStrategy.All:
|
|
109
|
+
default:
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
let requestOptions = (0, shared_1.createRequestOptions)(urls);
|
|
114
|
+
if (transformRequestFunction) {
|
|
115
|
+
requestOptions = requestOptions.map((request) => transformRequestFunction(request)).filter((r) => !!r);
|
|
116
|
+
}
|
|
117
|
+
let requests = (0, shared_1.createRequests)(requestOptions, urlPatternObjects);
|
|
118
|
+
if (limit)
|
|
119
|
+
requests = requests.slice(0, limit);
|
|
120
|
+
return requestQueue.addRequests(requests);
|
|
121
|
+
}
|
|
122
|
+
exports.enqueueLinks = enqueueLinks;
|
|
123
|
+
//# sourceMappingURL=enqueue_links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enqueue_links.js","sourceRoot":"","sources":["../../src/enqueue_links/enqueue_links.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enqueue_links/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enqueue_links/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC;AAChC,mDAAyB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Request, RequestOptions } from '../request';
|
|
2
|
+
export declare type UrlPatternObject = {
|
|
3
|
+
glob?: string;
|
|
4
|
+
regexp?: RegExp;
|
|
5
|
+
} & Pick<RequestOptions, 'method' | 'payload' | 'userData' | 'headers'>;
|
|
6
|
+
export declare type PseudoUrlObject = {
|
|
7
|
+
purl: string;
|
|
8
|
+
} & Pick<RequestOptions, 'method' | 'payload' | 'userData' | 'headers'>;
|
|
9
|
+
export declare type PseudoUrlInput = string | PseudoUrlObject;
|
|
10
|
+
export declare type GlobObject = {
|
|
11
|
+
glob: string;
|
|
12
|
+
} & Pick<RequestOptions, 'method' | 'payload' | 'userData' | 'headers'>;
|
|
13
|
+
export declare type GlobInput = string | GlobObject;
|
|
14
|
+
export declare type RegExpObject = {
|
|
15
|
+
regexp: RegExp;
|
|
16
|
+
} & Pick<RequestOptions, 'method' | 'payload' | 'userData' | 'headers'>;
|
|
17
|
+
export declare type RegExpInput = RegExp | RegExpObject;
|
|
18
|
+
/**
|
|
19
|
+
* @ignore
|
|
20
|
+
*/
|
|
21
|
+
export declare function updateEnqueueLinksPatternCache(item: GlobInput | RegExpInput | PseudoUrlInput, pattern: RegExpObject | GlobObject): void;
|
|
22
|
+
/**
|
|
23
|
+
* Helper factory used in the `enqueueLinks()` and enqueueLinksByClickingElements() function
|
|
24
|
+
* to construct RegExps from PseudoUrl strings.
|
|
25
|
+
* @ignore
|
|
26
|
+
*/
|
|
27
|
+
export declare function constructRegExpObjectsFromPseudoUrls(pseudoUrls: PseudoUrlInput[]): RegExpObject[];
|
|
28
|
+
/**
|
|
29
|
+
* Helper factory used in the `enqueueLinks()` and enqueueLinksByClickingElements() function
|
|
30
|
+
* to construct Glob objects from Glob pattern strings.
|
|
31
|
+
* @ignore
|
|
32
|
+
*/
|
|
33
|
+
export declare function constructGlobObjectsFromGlobs(globs: GlobInput[]): GlobObject[];
|
|
34
|
+
export declare function validateGlobPattern(glob: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Helper factory used in the `enqueueLinks()` and enqueueLinksByClickingElements() function
|
|
37
|
+
* to check RegExps input and return valid RegExps.
|
|
38
|
+
* @ignore
|
|
39
|
+
*/
|
|
40
|
+
export declare function constructRegExpObjectsFromRegExps(regexps: RegExpInput[]): RegExpObject[];
|
|
41
|
+
/**
|
|
42
|
+
* @ignore
|
|
43
|
+
*/
|
|
44
|
+
export declare function createRequests(requestOptions: (string | RequestOptions)[], urlPatternObjects?: UrlPatternObject[]): Request[];
|
|
45
|
+
/**
|
|
46
|
+
* @ignore
|
|
47
|
+
*/
|
|
48
|
+
export declare function createRequestOptions(sources: (string | Record<string, unknown>)[]): RequestOptions[];
|
|
49
|
+
/**
|
|
50
|
+
* Takes an Apify {@link RequestOptions} object and changes its attributes in a desired way. This user-function is used
|
|
51
|
+
* {@link enqueueLinks} to modify requests before enqueuing them.
|
|
52
|
+
*/
|
|
53
|
+
export interface RequestTransform {
|
|
54
|
+
/**
|
|
55
|
+
* @param original Request options to be modified.
|
|
56
|
+
* @returns The modified request options to enqueue.
|
|
57
|
+
*/
|
|
58
|
+
(original: RequestOptions): RequestOptions;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/enqueue_links/shared.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAYrD,oBAAY,gBAAgB,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC;AAExE,oBAAY,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC;AAErH,oBAAY,cAAc,GAAG,MAAM,GAAG,eAAe,CAAC;AAEtD,oBAAY,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC;AAEhH,oBAAY,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAE5C,oBAAY,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC;AAEpH,oBAAY,WAAW,GAAG,MAAM,GAAG,YAAY,CAAC;AAEhD;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,cAAc,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,IAAI,CAMvI;AAED;;;;GAIG;AACH,wBAAgB,oCAAoC,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,CAiBjG;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,CAiB9E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAgBxF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,cAAc,CAAC,EAAE,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,GAAG,OAAO,EAAE,CAyB7H;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,cAAc,EAAE,CAcpG;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B;;;OAGG;IACH,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc,CAAC;CAC9C"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRequestOptions = exports.createRequests = exports.constructRegExpObjectsFromRegExps = exports.validateGlobPattern = exports.constructGlobObjectsFromGlobs = exports.constructRegExpObjectsFromPseudoUrls = exports.updateEnqueueLinksPatternCache = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const url_1 = require("url");
|
|
6
|
+
const pseudo_url_1 = require("@apify/pseudo_url");
|
|
7
|
+
const minimatch_1 = tslib_1.__importDefault(require("minimatch"));
|
|
8
|
+
const request_1 = require("../request");
|
|
9
|
+
const MAX_ENQUEUE_LINKS_CACHE_SIZE = 1000;
|
|
10
|
+
/**
|
|
11
|
+
* To enable direct use of the Actor UI `globs`/`regexps`/`pseudoUrls` output while keeping high performance,
|
|
12
|
+
* all the regexps from the output are only constructed once and kept in a cache
|
|
13
|
+
* by the `enqueueLinks()` function.
|
|
14
|
+
* @ignore
|
|
15
|
+
*/
|
|
16
|
+
const enqueueLinksPatternCache = new Map();
|
|
17
|
+
/**
|
|
18
|
+
* @ignore
|
|
19
|
+
*/
|
|
20
|
+
function updateEnqueueLinksPatternCache(item, pattern) {
|
|
21
|
+
enqueueLinksPatternCache.set(item, pattern);
|
|
22
|
+
if (enqueueLinksPatternCache.size > MAX_ENQUEUE_LINKS_CACHE_SIZE) {
|
|
23
|
+
const key = enqueueLinksPatternCache.keys().next().value;
|
|
24
|
+
enqueueLinksPatternCache.delete(key);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.updateEnqueueLinksPatternCache = updateEnqueueLinksPatternCache;
|
|
28
|
+
/**
|
|
29
|
+
* Helper factory used in the `enqueueLinks()` and enqueueLinksByClickingElements() function
|
|
30
|
+
* to construct RegExps from PseudoUrl strings.
|
|
31
|
+
* @ignore
|
|
32
|
+
*/
|
|
33
|
+
function constructRegExpObjectsFromPseudoUrls(pseudoUrls) {
|
|
34
|
+
return pseudoUrls.map((item) => {
|
|
35
|
+
// Get pseudoUrl object from cache.
|
|
36
|
+
let regexpObject = enqueueLinksPatternCache.get(item);
|
|
37
|
+
if (regexpObject)
|
|
38
|
+
return regexpObject;
|
|
39
|
+
if (typeof item === 'string') {
|
|
40
|
+
regexpObject = { regexp: (0, pseudo_url_1.purlToRegExp)(item) };
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const { purl, ...requestOptions } = item;
|
|
44
|
+
regexpObject = { regexp: (0, pseudo_url_1.purlToRegExp)(purl), ...requestOptions };
|
|
45
|
+
}
|
|
46
|
+
updateEnqueueLinksPatternCache(item, regexpObject);
|
|
47
|
+
return regexpObject;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
exports.constructRegExpObjectsFromPseudoUrls = constructRegExpObjectsFromPseudoUrls;
|
|
51
|
+
/**
|
|
52
|
+
* Helper factory used in the `enqueueLinks()` and enqueueLinksByClickingElements() function
|
|
53
|
+
* to construct Glob objects from Glob pattern strings.
|
|
54
|
+
* @ignore
|
|
55
|
+
*/
|
|
56
|
+
function constructGlobObjectsFromGlobs(globs) {
|
|
57
|
+
return globs.map((item) => {
|
|
58
|
+
// Get glob object from cache.
|
|
59
|
+
let globObject = enqueueLinksPatternCache.get(item);
|
|
60
|
+
if (globObject)
|
|
61
|
+
return globObject;
|
|
62
|
+
if (typeof item === 'string') {
|
|
63
|
+
globObject = { glob: validateGlobPattern(item) };
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
const { glob, ...requestOptions } = item;
|
|
67
|
+
globObject = { glob: validateGlobPattern(glob), ...requestOptions };
|
|
68
|
+
}
|
|
69
|
+
updateEnqueueLinksPatternCache(item, globObject);
|
|
70
|
+
return globObject;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
exports.constructGlobObjectsFromGlobs = constructGlobObjectsFromGlobs;
|
|
74
|
+
function validateGlobPattern(glob) {
|
|
75
|
+
const globTrimmed = glob.trim();
|
|
76
|
+
if (globTrimmed.length === 0)
|
|
77
|
+
throw new Error(`Cannot parse Glob pattern '${globTrimmed}': it must be an non-empty string`);
|
|
78
|
+
return globTrimmed;
|
|
79
|
+
}
|
|
80
|
+
exports.validateGlobPattern = validateGlobPattern;
|
|
81
|
+
/**
|
|
82
|
+
* Helper factory used in the `enqueueLinks()` and enqueueLinksByClickingElements() function
|
|
83
|
+
* to check RegExps input and return valid RegExps.
|
|
84
|
+
* @ignore
|
|
85
|
+
*/
|
|
86
|
+
function constructRegExpObjectsFromRegExps(regexps) {
|
|
87
|
+
return regexps.map((item) => {
|
|
88
|
+
// Get regexp object from cache.
|
|
89
|
+
let regexpObject = enqueueLinksPatternCache.get(item);
|
|
90
|
+
if (regexpObject)
|
|
91
|
+
return regexpObject;
|
|
92
|
+
if (item instanceof RegExp) {
|
|
93
|
+
regexpObject = { regexp: item };
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
regexpObject = item;
|
|
97
|
+
}
|
|
98
|
+
updateEnqueueLinksPatternCache(item, regexpObject);
|
|
99
|
+
return regexpObject;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
exports.constructRegExpObjectsFromRegExps = constructRegExpObjectsFromRegExps;
|
|
103
|
+
/**
|
|
104
|
+
* @ignore
|
|
105
|
+
*/
|
|
106
|
+
function createRequests(requestOptions, urlPatternObjects) {
|
|
107
|
+
if (!urlPatternObjects || !urlPatternObjects.length) {
|
|
108
|
+
return requestOptions
|
|
109
|
+
.map((opts) => new request_1.Request(typeof opts === 'string' ? { url: opts } : opts));
|
|
110
|
+
}
|
|
111
|
+
const requests = [];
|
|
112
|
+
for (const urlPatternObject of urlPatternObjects) {
|
|
113
|
+
const { regexp, glob, ...requestRegExpOptions } = urlPatternObject;
|
|
114
|
+
for (const opts of requestOptions) {
|
|
115
|
+
const urlToMatch = typeof opts === 'string' ? opts : opts.url;
|
|
116
|
+
if ((regexp && urlToMatch.match(regexp)) || // eslint-disable-line
|
|
117
|
+
(glob && (0, minimatch_1.default)(urlToMatch, glob, { nocase: true }))) {
|
|
118
|
+
const request = typeof opts === 'string'
|
|
119
|
+
? { url: opts, ...requestRegExpOptions }
|
|
120
|
+
: { ...opts, ...requestRegExpOptions };
|
|
121
|
+
requests.push(new request_1.Request(request));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return requests;
|
|
126
|
+
}
|
|
127
|
+
exports.createRequests = createRequests;
|
|
128
|
+
/**
|
|
129
|
+
* @ignore
|
|
130
|
+
*/
|
|
131
|
+
function createRequestOptions(sources) {
|
|
132
|
+
return sources
|
|
133
|
+
.map((src) => (typeof src === 'string' ? { url: src } : src))
|
|
134
|
+
.filter(({ url }) => {
|
|
135
|
+
try {
|
|
136
|
+
return new url_1.URL(url).href;
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
})
|
|
142
|
+
.map((requestOptions) => {
|
|
143
|
+
requestOptions.userData ?? (requestOptions.userData = {});
|
|
144
|
+
return requestOptions;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
exports.createRequestOptions = createRequestOptions;
|
|
148
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/enqueue_links/shared.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,KAAK;CAAG"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TimeoutError = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* TimeoutError class.
|
|
6
|
+
* This error should be thrown after request timeout from `requestAsBrowser`.
|
|
7
|
+
* @ignore
|
|
8
|
+
*/
|
|
9
|
+
class TimeoutError extends Error {
|
|
10
|
+
}
|
|
11
|
+
exports.TimeoutError = TimeoutError;
|
|
12
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,MAAa,YAAa,SAAQ,KAAK;CAAG;AAA1C,oCAA0C"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { BetterIntervalID } from '@apify/utilities';
|
|
4
|
+
import { Configuration } from '../configuration';
|
|
5
|
+
export declare const enum EventType {
|
|
6
|
+
PERSIST_STATE = "persistState",
|
|
7
|
+
SYSTEM_INFO = "systemInfo",
|
|
8
|
+
MIGRATING = "migrating",
|
|
9
|
+
ABORTING = "aborting"
|
|
10
|
+
}
|
|
11
|
+
export declare type EventTypeName = EventType | 'systemInfo' | 'persistState' | 'migrating' | 'aborting';
|
|
12
|
+
export declare abstract class EventManager {
|
|
13
|
+
readonly config: Configuration;
|
|
14
|
+
protected events: EventEmitter;
|
|
15
|
+
protected initialized: boolean;
|
|
16
|
+
protected persistStateInterval?: BetterIntervalID;
|
|
17
|
+
protected log: import("@apify/log").Log;
|
|
18
|
+
constructor(config?: Configuration);
|
|
19
|
+
/**
|
|
20
|
+
* Initializes `Actor.events` event emitter by creating a connection to a websocket that provides them.
|
|
21
|
+
* This is an internal function that is automatically called by `Actor.main()`.
|
|
22
|
+
*/
|
|
23
|
+
init(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Closes websocket providing events from Actor infrastructure and also stops sending internal events
|
|
26
|
+
* of Apify package such as `persistState`. This is automatically called at the end of `Actor.main()`.
|
|
27
|
+
*/
|
|
28
|
+
close(): Promise<void>;
|
|
29
|
+
on(event: EventTypeName, listener: (...args: any[]) => any): void;
|
|
30
|
+
off(event: EventTypeName, listener?: (...args: any[]) => any): void;
|
|
31
|
+
emit(event: EventTypeName, ...args: unknown[]): void;
|
|
32
|
+
/**
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
listenerCount(event: EventTypeName): number;
|
|
36
|
+
/**
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
39
|
+
listeners(event: EventTypeName): (() => Promise<unknown>)[];
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=event_manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event_manager.d.ts","sourceRoot":"","sources":["../../src/events/event_manager.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAuB,gBAAgB,EAAqB,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,0BAAkB,SAAS;IACvB,aAAa,iBAAiB;IAC9B,WAAW,eAAe;IAC1B,SAAS,cAAc;IACvB,QAAQ,aAAa;CACxB;AAED,oBAAY,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,cAAc,GAAG,WAAW,GAAG,UAAU,CAAC;AAEjG,8BAAsB,YAAY;IAMlB,QAAQ,CAAC,MAAM;IAL3B,SAAS,CAAC,MAAM,eAAsB;IACtC,SAAS,CAAC,WAAW,UAAS;IAC9B,SAAS,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,CAAC;IAClD,SAAS,CAAC,GAAG,2BAAmC;gBAE3B,MAAM,gBAAkC;IAE7D;;;OAGG;IACG,IAAI;IAaV;;;OAGG;IACG,KAAK;IASX,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,IAAI;IAIjE,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,IAAI;IAQnE,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIpD;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM;IAI3C;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE;CAG9D"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventManager = exports.EventType = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const log_1 = tslib_1.__importDefault(require("@apify/log"));
|
|
6
|
+
const events_1 = require("events");
|
|
7
|
+
const utilities_1 = require("@apify/utilities");
|
|
8
|
+
const configuration_1 = require("../configuration");
|
|
9
|
+
var EventType;
|
|
10
|
+
(function (EventType) {
|
|
11
|
+
EventType["PERSIST_STATE"] = "persistState";
|
|
12
|
+
EventType["SYSTEM_INFO"] = "systemInfo";
|
|
13
|
+
EventType["MIGRATING"] = "migrating";
|
|
14
|
+
EventType["ABORTING"] = "aborting";
|
|
15
|
+
})(EventType = exports.EventType || (exports.EventType = {}));
|
|
16
|
+
class EventManager {
|
|
17
|
+
constructor(config = configuration_1.Configuration.getGlobalConfig()) {
|
|
18
|
+
Object.defineProperty(this, "config", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
configurable: true,
|
|
21
|
+
writable: true,
|
|
22
|
+
value: config
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(this, "events", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
writable: true,
|
|
28
|
+
value: new events_1.EventEmitter()
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(this, "initialized", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
configurable: true,
|
|
33
|
+
writable: true,
|
|
34
|
+
value: false
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(this, "persistStateInterval", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
configurable: true,
|
|
39
|
+
writable: true,
|
|
40
|
+
value: void 0
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(this, "log", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
configurable: true,
|
|
45
|
+
writable: true,
|
|
46
|
+
value: log_1.default.child({ prefix: 'Events' })
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Initializes `Actor.events` event emitter by creating a connection to a websocket that provides them.
|
|
51
|
+
* This is an internal function that is automatically called by `Actor.main()`.
|
|
52
|
+
*/
|
|
53
|
+
async init() {
|
|
54
|
+
if (this.initialized) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const persistStateIntervalMillis = this.config.get('persistStateIntervalMillis');
|
|
58
|
+
this.persistStateInterval = (0, utilities_1.betterSetInterval)((intervalCallback) => {
|
|
59
|
+
this.emit("persistState" /* PERSIST_STATE */, { isMigrating: false });
|
|
60
|
+
intervalCallback();
|
|
61
|
+
}, persistStateIntervalMillis);
|
|
62
|
+
this.initialized = true;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Closes websocket providing events from Actor infrastructure and also stops sending internal events
|
|
66
|
+
* of Apify package such as `persistState`. This is automatically called at the end of `Actor.main()`.
|
|
67
|
+
*/
|
|
68
|
+
async close() {
|
|
69
|
+
if (!this.initialized) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
(0, utilities_1.betterClearInterval)(this.persistStateInterval);
|
|
73
|
+
this.initialized = false;
|
|
74
|
+
}
|
|
75
|
+
on(event, listener) {
|
|
76
|
+
this.events.on(event, listener);
|
|
77
|
+
}
|
|
78
|
+
off(event, listener) {
|
|
79
|
+
if (listener) {
|
|
80
|
+
this.events.removeListener(event, listener);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
this.events.removeAllListeners(event);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
emit(event, ...args) {
|
|
87
|
+
this.events.emit(event, ...args);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* @internal
|
|
91
|
+
*/
|
|
92
|
+
listenerCount(event) {
|
|
93
|
+
return this.events.listenerCount(event);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* @internal
|
|
97
|
+
*/
|
|
98
|
+
listeners(event) {
|
|
99
|
+
return this.events.listeners(event);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.EventManager = EventManager;
|
|
103
|
+
//# sourceMappingURL=event_manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event_manager.js","sourceRoot":"","sources":["../../src/events/event_manager.ts"],"names":[],"mappings":";;;;AAAA,6DAA6B;AAC7B,mCAAsC;AACtC,gDAA4F;AAC5F,oDAAiD;AAEjD,IAAkB,SAKjB;AALD,WAAkB,SAAS;IACvB,2CAA8B,CAAA;IAC9B,uCAA0B,CAAA;IAC1B,oCAAuB,CAAA;IACvB,kCAAqB,CAAA;AACzB,CAAC,EALiB,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAK1B;AAID,MAAsB,YAAY;IAM9B,YAAqB,SAAS,6BAAa,CAAC,eAAe,EAAE;;;;;mBAAxC;;QALrB;;;;mBAAmB,IAAI,qBAAY,EAAE;WAAC;QACtC;;;;mBAAwB,KAAK;WAAC;QAC9B;;;;;WAAkD;QAClD;;;;mBAAgB,aAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;WAAC;IAEgB,CAAC;IAEjE;;;OAGG;IACH,KAAK,CAAC,IAAI;QACN,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,OAAO;SACV;QAED,MAAM,0BAA0B,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAE,CAAC;QAClF,IAAI,CAAC,oBAAoB,GAAG,IAAA,6BAAiB,EAAC,CAAC,gBAA+B,EAAE,EAAE;YAC9E,IAAI,CAAC,IAAI,qCAA0B,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3D,gBAAgB,EAAE,CAAC;QACvB,CAAC,EAAE,0BAA0B,CAAC,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACP,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,OAAO;SACV;QAED,IAAA,+BAAmB,EAAC,IAAI,CAAC,oBAAqB,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,EAAE,CAAC,KAAoB,EAAE,QAAiC;QACtD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,GAAG,CAAC,KAAoB,EAAE,QAAkC;QACxD,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC/C;aAAM;YACH,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;SACzC;IACL,CAAC;IAED,IAAI,CAAC,KAAoB,EAAE,GAAG,IAAe;QACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,KAAoB;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAoB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAA+B,CAAC;IACtE,CAAC;CACJ;AAnED,oCAmEC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./event_manager"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./local_event_manager"), exports);
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC;AAChC,gEAAsC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { EventManager } from './event_manager';
|
|
2
|
+
export declare class LocalEventManager extends EventManager {
|
|
3
|
+
private intervals;
|
|
4
|
+
private previousTicks;
|
|
5
|
+
/**
|
|
6
|
+
* Initializes `Actor.events` event emitter by creating a connection to a websocket that provides them.
|
|
7
|
+
* This is an internal function that is automatically called by `Actor.main()`.
|
|
8
|
+
*/
|
|
9
|
+
init(): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Closes websocket providing events from Actor infrastructure and also stops sending internal events
|
|
12
|
+
* of Apify package such as `persistState`.
|
|
13
|
+
* This is automatically called at the end of `Actor.main()`.
|
|
14
|
+
*/
|
|
15
|
+
close(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
emitSystemInfoEvent(intervalCallback: () => unknown): Promise<void>;
|
|
20
|
+
private getCurrentCpuTicks;
|
|
21
|
+
/**
|
|
22
|
+
* Creates a SystemInfo object based on local metrics.
|
|
23
|
+
*/
|
|
24
|
+
private createSystemInfo;
|
|
25
|
+
private createCpuInfo;
|
|
26
|
+
private createMemoryInfo;
|
|
27
|
+
/**
|
|
28
|
+
* Helper method for easier mocking.
|
|
29
|
+
*/
|
|
30
|
+
private _getMemoryInfo;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=local_event_manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local_event_manager.d.ts","sourceRoot":"","sources":["../../src/events/local_event_manager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAa,MAAM,iBAAiB,CAAC;AAO1D,qBAAa,iBAAkB,SAAQ,YAAY;IAC/C,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,aAAa,CAAyB;IAE9C;;;OAGG;IACY,IAAI;IAYnB;;;;OAIG;IACY,KAAK;IASpB;;OAEG;IACG,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,OAAO;IAQzD,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;YACW,gBAAgB;IAQ9B,OAAO,CAAC,aAAa;YAaP,gBAAgB;IAc9B;;OAEG;YACW,cAAc;CAG/B"}
|