@crawlee/core 4.0.0-beta.7 → 4.0.0-beta.71

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.
Files changed (253) hide show
  1. package/README.md +17 -13
  2. package/autoscaling/autoscaled_pool.d.ts +3 -5
  3. package/autoscaling/autoscaled_pool.d.ts.map +1 -1
  4. package/autoscaling/autoscaled_pool.js +3 -9
  5. package/autoscaling/autoscaled_pool.js.map +1 -1
  6. package/autoscaling/snapshotter.d.ts +3 -13
  7. package/autoscaling/snapshotter.d.ts.map +1 -1
  8. package/autoscaling/snapshotter.js +18 -29
  9. package/autoscaling/snapshotter.js.map +1 -1
  10. package/autoscaling/system_status.d.ts +0 -3
  11. package/autoscaling/system_status.d.ts.map +1 -1
  12. package/autoscaling/system_status.js +2 -3
  13. package/autoscaling/system_status.js.map +1 -1
  14. package/configuration.d.ts +88 -227
  15. package/configuration.d.ts.map +1 -1
  16. package/configuration.js +162 -223
  17. package/configuration.js.map +1 -1
  18. package/cookie_utils.d.ts +4 -2
  19. package/cookie_utils.d.ts.map +1 -1
  20. package/cookie_utils.js +18 -12
  21. package/cookie_utils.js.map +1 -1
  22. package/crawlers/context_pipeline.d.ts +71 -0
  23. package/crawlers/context_pipeline.d.ts.map +1 -0
  24. package/crawlers/context_pipeline.js +123 -0
  25. package/crawlers/context_pipeline.js.map +1 -0
  26. package/crawlers/crawler_commons.d.ts +20 -29
  27. package/crawlers/crawler_commons.d.ts.map +1 -1
  28. package/crawlers/crawler_commons.js +12 -20
  29. package/crawlers/crawler_commons.js.map +1 -1
  30. package/crawlers/crawler_utils.d.ts +2 -2
  31. package/crawlers/crawler_utils.d.ts.map +1 -1
  32. package/crawlers/crawler_utils.js +1 -1
  33. package/crawlers/crawler_utils.js.map +1 -1
  34. package/crawlers/error_snapshotter.d.ts +3 -2
  35. package/crawlers/error_snapshotter.d.ts.map +1 -1
  36. package/crawlers/error_snapshotter.js +2 -2
  37. package/crawlers/error_snapshotter.js.map +1 -1
  38. package/crawlers/error_tracker.d.ts +2 -1
  39. package/crawlers/error_tracker.d.ts.map +1 -1
  40. package/crawlers/error_tracker.js.map +1 -1
  41. package/crawlers/index.d.ts +1 -1
  42. package/crawlers/index.d.ts.map +1 -1
  43. package/crawlers/index.js +1 -1
  44. package/crawlers/index.js.map +1 -1
  45. package/crawlers/internals/types.d.ts +8 -0
  46. package/crawlers/internals/types.d.ts.map +1 -0
  47. package/crawlers/internals/types.js +2 -0
  48. package/crawlers/internals/types.js.map +1 -0
  49. package/crawlers/statistics.d.ts +16 -16
  50. package/crawlers/statistics.d.ts.map +1 -1
  51. package/crawlers/statistics.js +22 -25
  52. package/crawlers/statistics.js.map +1 -1
  53. package/enqueue_links/enqueue_links.d.ts +36 -21
  54. package/enqueue_links/enqueue_links.d.ts.map +1 -1
  55. package/enqueue_links/enqueue_links.js +47 -26
  56. package/enqueue_links/enqueue_links.js.map +1 -1
  57. package/enqueue_links/shared.d.ts +25 -8
  58. package/enqueue_links/shared.d.ts.map +1 -1
  59. package/enqueue_links/shared.js +69 -37
  60. package/enqueue_links/shared.js.map +1 -1
  61. package/errors.d.ts +33 -3
  62. package/errors.d.ts.map +1 -1
  63. package/errors.js +48 -4
  64. package/errors.js.map +1 -1
  65. package/events/event_manager.d.ts +34 -7
  66. package/events/event_manager.d.ts.map +1 -1
  67. package/events/event_manager.js +8 -9
  68. package/events/event_manager.js.map +1 -1
  69. package/events/local_event_manager.d.ts +14 -4
  70. package/events/local_event_manager.d.ts.map +1 -1
  71. package/events/local_event_manager.js +33 -39
  72. package/events/local_event_manager.js.map +1 -1
  73. package/index.d.ts +4 -2
  74. package/index.d.ts.map +1 -1
  75. package/index.js +3 -1
  76. package/index.js.map +1 -1
  77. package/log.d.ts +82 -2
  78. package/log.d.ts.map +1 -1
  79. package/log.js +102 -0
  80. package/log.js.map +1 -1
  81. package/memory-storage/consts.d.ts +5 -0
  82. package/memory-storage/consts.d.ts.map +1 -0
  83. package/memory-storage/consts.js +5 -0
  84. package/memory-storage/consts.js.map +1 -0
  85. package/memory-storage/index.d.ts +2 -0
  86. package/memory-storage/index.d.ts.map +1 -0
  87. package/memory-storage/index.js +2 -0
  88. package/memory-storage/index.js.map +1 -0
  89. package/memory-storage/memory-storage.d.ts +47 -0
  90. package/memory-storage/memory-storage.d.ts.map +1 -0
  91. package/memory-storage/memory-storage.js +137 -0
  92. package/memory-storage/memory-storage.js.map +1 -0
  93. package/memory-storage/resource-clients/common/base-client.d.ts +5 -0
  94. package/memory-storage/resource-clients/common/base-client.d.ts.map +1 -0
  95. package/memory-storage/resource-clients/common/base-client.js +7 -0
  96. package/memory-storage/resource-clients/common/base-client.js.map +1 -0
  97. package/memory-storage/resource-clients/dataset.d.ts +41 -0
  98. package/memory-storage/resource-clients/dataset.d.ts.map +1 -0
  99. package/memory-storage/resource-clients/dataset.js +114 -0
  100. package/memory-storage/resource-clients/dataset.js.map +1 -0
  101. package/memory-storage/resource-clients/key-value-store.d.ts +64 -0
  102. package/memory-storage/resource-clients/key-value-store.d.ts.map +1 -0
  103. package/memory-storage/resource-clients/key-value-store.js +204 -0
  104. package/memory-storage/resource-clients/key-value-store.js.map +1 -0
  105. package/memory-storage/resource-clients/request-queue.d.ts +97 -0
  106. package/memory-storage/resource-clients/request-queue.d.ts.map +1 -0
  107. package/memory-storage/resource-clients/request-queue.js +422 -0
  108. package/memory-storage/resource-clients/request-queue.js.map +1 -0
  109. package/memory-storage/utils.d.ts +12 -0
  110. package/memory-storage/utils.d.ts.map +1 -0
  111. package/memory-storage/utils.js +28 -0
  112. package/memory-storage/utils.js.map +1 -0
  113. package/package.json +12 -10
  114. package/proxy_configuration.d.ts +14 -148
  115. package/proxy_configuration.d.ts.map +1 -1
  116. package/proxy_configuration.js +19 -167
  117. package/proxy_configuration.js.map +1 -1
  118. package/recoverable_state.d.ts +121 -0
  119. package/recoverable_state.d.ts.map +1 -0
  120. package/recoverable_state.js +142 -0
  121. package/recoverable_state.js.map +1 -0
  122. package/request.d.ts +84 -12
  123. package/request.d.ts.map +1 -1
  124. package/request.js +107 -27
  125. package/request.js.map +1 -1
  126. package/router.d.ts.map +1 -1
  127. package/router.js.map +1 -1
  128. package/serialization.js +1 -1
  129. package/serialization.js.map +1 -1
  130. package/service_locator.d.ts +157 -0
  131. package/service_locator.d.ts.map +1 -0
  132. package/service_locator.js +239 -0
  133. package/service_locator.js.map +1 -0
  134. package/session_pool/consts.d.ts +1 -1
  135. package/session_pool/consts.d.ts.map +1 -1
  136. package/session_pool/consts.js +1 -1
  137. package/session_pool/consts.js.map +1 -1
  138. package/session_pool/fingerprint.d.ts +10 -0
  139. package/session_pool/fingerprint.d.ts.map +1 -0
  140. package/session_pool/fingerprint.js +31 -0
  141. package/session_pool/fingerprint.js.map +1 -0
  142. package/session_pool/index.d.ts +0 -1
  143. package/session_pool/index.d.ts.map +1 -1
  144. package/session_pool/index.js +0 -1
  145. package/session_pool/index.js.map +1 -1
  146. package/session_pool/session.d.ts +35 -72
  147. package/session_pool/session.d.ts.map +1 -1
  148. package/session_pool/session.js +46 -98
  149. package/session_pool/session.js.map +1 -1
  150. package/session_pool/session_pool.d.ts +71 -71
  151. package/session_pool/session_pool.d.ts.map +1 -1
  152. package/session_pool/session_pool.js +111 -99
  153. package/session_pool/session_pool.js.map +1 -1
  154. package/storages/access_checking.d.ts.map +1 -1
  155. package/storages/access_checking.js +5 -1
  156. package/storages/access_checking.js.map +1 -1
  157. package/storages/dataset.d.ts +98 -47
  158. package/storages/dataset.d.ts.map +1 -1
  159. package/storages/dataset.js +166 -123
  160. package/storages/dataset.js.map +1 -1
  161. package/storages/index.d.ts +8 -6
  162. package/storages/index.d.ts.map +1 -1
  163. package/storages/index.js +6 -6
  164. package/storages/index.js.map +1 -1
  165. package/storages/key_value_store.d.ts +163 -33
  166. package/storages/key_value_store.d.ts.map +1 -1
  167. package/storages/key_value_store.js +267 -119
  168. package/storages/key_value_store.js.map +1 -1
  169. package/storages/key_value_store_codec.d.ts +33 -0
  170. package/storages/key_value_store_codec.d.ts.map +1 -0
  171. package/storages/key_value_store_codec.js +114 -0
  172. package/storages/key_value_store_codec.js.map +1 -0
  173. package/storages/request_list.d.ts +32 -81
  174. package/storages/request_list.d.ts.map +1 -1
  175. package/storages/request_list.js +49 -39
  176. package/storages/request_list.js.map +1 -1
  177. package/storages/request_loader.d.ts +97 -0
  178. package/storages/request_loader.d.ts.map +1 -0
  179. package/storages/request_loader.js +2 -0
  180. package/storages/request_loader.js.map +1 -0
  181. package/storages/request_manager.d.ts +34 -0
  182. package/storages/request_manager.d.ts.map +1 -0
  183. package/storages/request_manager.js +2 -0
  184. package/storages/request_manager.js.map +1 -0
  185. package/storages/request_manager_tandem.d.ts +107 -0
  186. package/storages/request_manager_tandem.d.ts.map +1 -0
  187. package/storages/request_manager_tandem.js +198 -0
  188. package/storages/request_manager_tandem.js.map +1 -0
  189. package/storages/request_queue.d.ts +282 -45
  190. package/storages/request_queue.d.ts.map +1 -1
  191. package/storages/request_queue.js +592 -213
  192. package/storages/request_queue.js.map +1 -1
  193. package/storages/{sitemap_request_list.d.ts → sitemap_request_loader.d.ts} +29 -24
  194. package/storages/sitemap_request_loader.d.ts.map +1 -0
  195. package/storages/{sitemap_request_list.js → sitemap_request_loader.js} +50 -46
  196. package/storages/sitemap_request_loader.js.map +1 -0
  197. package/storages/storage_instance_manager.d.ts +92 -0
  198. package/storages/storage_instance_manager.d.ts.map +1 -0
  199. package/storages/storage_instance_manager.js +261 -0
  200. package/storages/storage_instance_manager.js.map +1 -0
  201. package/storages/storage_stats.d.ts +49 -0
  202. package/storages/storage_stats.d.ts.map +1 -0
  203. package/storages/storage_stats.js +30 -0
  204. package/storages/storage_stats.js.map +1 -0
  205. package/storages/utils.d.ts +51 -5
  206. package/storages/utils.d.ts.map +1 -1
  207. package/storages/utils.js +60 -8
  208. package/storages/utils.js.map +1 -1
  209. package/typedefs.d.ts +1 -1
  210. package/typedefs.d.ts.map +1 -1
  211. package/validators.d.ts +8 -0
  212. package/validators.d.ts.map +1 -1
  213. package/validators.js +8 -0
  214. package/validators.js.map +1 -1
  215. package/crawlers/crawler_extension.d.ts +0 -12
  216. package/crawlers/crawler_extension.d.ts.map +0 -1
  217. package/crawlers/crawler_extension.js +0 -14
  218. package/crawlers/crawler_extension.js.map +0 -1
  219. package/http_clients/base-http-client.d.ts +0 -134
  220. package/http_clients/base-http-client.d.ts.map +0 -1
  221. package/http_clients/base-http-client.js +0 -33
  222. package/http_clients/base-http-client.js.map +0 -1
  223. package/http_clients/form-data-like.d.ts +0 -67
  224. package/http_clients/form-data-like.d.ts.map +0 -1
  225. package/http_clients/form-data-like.js +0 -5
  226. package/http_clients/form-data-like.js.map +0 -1
  227. package/http_clients/got-scraping-http-client.d.ts +0 -15
  228. package/http_clients/got-scraping-http-client.d.ts.map +0 -1
  229. package/http_clients/got-scraping-http-client.js +0 -69
  230. package/http_clients/got-scraping-http-client.js.map +0 -1
  231. package/http_clients/index.d.ts +0 -3
  232. package/http_clients/index.d.ts.map +0 -1
  233. package/http_clients/index.js +0 -3
  234. package/http_clients/index.js.map +0 -1
  235. package/session_pool/events.d.ts +0 -3
  236. package/session_pool/events.d.ts.map +0 -1
  237. package/session_pool/events.js +0 -3
  238. package/session_pool/events.js.map +0 -1
  239. package/storages/request_provider.d.ts +0 -307
  240. package/storages/request_provider.d.ts.map +0 -1
  241. package/storages/request_provider.js +0 -555
  242. package/storages/request_provider.js.map +0 -1
  243. package/storages/request_queue_v2.d.ts +0 -87
  244. package/storages/request_queue_v2.d.ts.map +0 -1
  245. package/storages/request_queue_v2.js +0 -438
  246. package/storages/request_queue_v2.js.map +0 -1
  247. package/storages/sitemap_request_list.d.ts.map +0 -1
  248. package/storages/sitemap_request_list.js.map +0 -1
  249. package/storages/storage_manager.d.ts +0 -58
  250. package/storages/storage_manager.d.ts.map +0 -1
  251. package/storages/storage_manager.js +0 -105
  252. package/storages/storage_manager.js.map +0 -1
  253. package/tsconfig.build.tsbuildinfo +0 -1
@@ -0,0 +1,261 @@
1
+ import { AsyncQueue } from '@sapphire/async-queue';
2
+ /** Reserved alias for the default (unnamed) storage. */
3
+ const DEFAULT_STORAGE_ALIAS = '__default__';
4
+ /**
5
+ * Three-tier cache for storage instances, modelled after crawlee-python's `_StorageCache`.
6
+ *
7
+ * Each tier maps `[storageClass][key][backendCacheKey] → instance`:
8
+ * - `byId` — keyed by the backend-assigned storage id
9
+ * - `byName` — keyed by the persistent storage name
10
+ * - `byAlias` — keyed by a run-scoped alias (e.g. `'__default__'` for unnamed storages)
11
+ */
12
+ class StorageCache {
13
+ byId = new Map();
14
+ byName = new Map();
15
+ byAlias = new Map();
16
+ get(cls, { id, name, alias, backendCacheKey, }) {
17
+ for (const [tier, key] of [
18
+ [this.byId, id],
19
+ [this.byName, name],
20
+ [this.byAlias, alias],
21
+ ]) {
22
+ if (key === undefined)
23
+ continue;
24
+ const cached = tier.get(cls)?.get(key)?.get(backendCacheKey);
25
+ if (cached) {
26
+ if (cached instanceof cls) {
27
+ return cached;
28
+ }
29
+ throw new Error('Cached storage instance type mismatch.');
30
+ }
31
+ }
32
+ return undefined;
33
+ }
34
+ /** Write a single entry into a given tier. */
35
+ setInMap(tier, cls, key, instance, backendCacheKey) {
36
+ if (!tier.has(cls))
37
+ tier.set(cls, new Map());
38
+ const keyMap = tier.get(cls);
39
+ if (!keyMap.has(key))
40
+ keyMap.set(key, new Map());
41
+ keyMap.get(key).set(backendCacheKey, instance);
42
+ }
43
+ /**
44
+ * Cache an instance under its actual id, name, and an optional alias.
45
+ */
46
+ set(cls, instance, backendCacheKey, alias) {
47
+ // Always cache by id.
48
+ this.setInMap(this.byId, cls, instance.id, instance, backendCacheKey);
49
+ // Cache by name — only for named storages.
50
+ if (instance.name) {
51
+ this.setInMap(this.byName, cls, instance.name, instance, backendCacheKey);
52
+ }
53
+ // Cache by alias — only for unnamed storages opened via alias.
54
+ if (alias !== undefined) {
55
+ this.setInMap(this.byAlias, cls, alias, instance, backendCacheKey);
56
+ }
57
+ }
58
+ removeFromCache(instance) {
59
+ const storageType = instance.constructor;
60
+ for (const tier of [this.byId, this.byName, this.byAlias]) {
61
+ const classMap = tier.get(storageType);
62
+ if (!classMap)
63
+ continue;
64
+ for (const keyMap of classMap.values()) {
65
+ for (const [cacheKey, cached] of keyMap) {
66
+ if (cached === instance) {
67
+ keyMap.delete(cacheKey);
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ /**
74
+ * Ensure that the same string is not used as both a name and an alias for the same
75
+ * storage class + backend combination. Mirrors crawlee-python's `_check_name_alias_conflict`.
76
+ */
77
+ checkNameAliasConflict(cls, { name, alias, backendCacheKey }) {
78
+ if (alias) {
79
+ const existingByName = this.byName.get(cls)?.get(alias)?.get(backendCacheKey);
80
+ if (existingByName) {
81
+ throw new Error(`Cannot open storage with alias "${alias}" because a named storage with the same identifier already exists.`);
82
+ }
83
+ }
84
+ if (name) {
85
+ const existingByAlias = this.byAlias.get(cls)?.get(name)?.get(backendCacheKey);
86
+ if (existingByAlias) {
87
+ throw new Error(`Cannot open storage with name "${name}" because an alias storage with the same identifier already exists.` +
88
+ ` If you meant to open the alias storage, use { alias: "${name}" } instead.`);
89
+ }
90
+ }
91
+ }
92
+ /** Iterate all cached instances across all storage types. */
93
+ *allValues() {
94
+ const seen = new Set();
95
+ for (const classMap of this.byId.values()) {
96
+ for (const keyMap of classMap.values()) {
97
+ for (const instance of keyMap.values()) {
98
+ if (!seen.has(instance)) {
99
+ seen.add(instance);
100
+ yield instance;
101
+ }
102
+ }
103
+ }
104
+ }
105
+ }
106
+ clear() {
107
+ this.byId.clear();
108
+ this.byName.clear();
109
+ this.byAlias.clear();
110
+ }
111
+ }
112
+ /**
113
+ * Unified manager for opening and caching storage instances (Dataset, KeyValueStore, RequestQueue).
114
+ *
115
+ * A single instance manages all storage types. Instances are cached by
116
+ * `(storageClass, id/name/alias, backendCacheKey)` so the same storage is never opened twice.
117
+ *
118
+ * The manager itself does not resolve identifiers — callers pass explicit `id`, `name`, or `alias` (at most one),
119
+ * and a pre-bound `backendOpener` promise. When none of `id`, `name`, `alias` are provided, the manager automatically
120
+ * assigns a reserved default alias.
121
+ *
122
+ * @ignore
123
+ */
124
+ export class StorageInstanceManager {
125
+ cache = new StorageCache();
126
+ openerLocks = new Map();
127
+ /**
128
+ * Open (or retrieve from cache) a storage instance.
129
+ *
130
+ * @param cls The storage class constructor (e.g. `Dataset`, `KeyValueStore`, `RequestQueue`).
131
+ * @param id Storage ID (mutually exclusive with `name` and `alias`).
132
+ * @param name Storage name (mutually exclusive with `id` and `alias`).
133
+ * @param alias Run-scoped alias (mutually exclusive with `id` and `name`).
134
+ * Automatically assigned when no identifier is provided.
135
+ * @param backendOpener A **lazy** factory that creates the sub-backend.
136
+ * Only called on a cache miss.
137
+ * @param backendCacheKey Opaque key identifying the storage backend, so that the same logical
138
+ * storage opened through different clients is cached separately.
139
+ */
140
+ async openStorage(cls, { id, name, alias, backendOpener, backendCacheKey, }) {
141
+ // Auto-set alias='__default__' when no parameters are specified (mirrors crawlee-python).
142
+ if (!id && !name && !alias) {
143
+ alias = DEFAULT_STORAGE_ALIAS;
144
+ }
145
+ // Fast-path cache check (no lock).
146
+ if (alias !== undefined) {
147
+ const cached = this.cache.get(cls, { alias, backendCacheKey });
148
+ if (cached)
149
+ return cached;
150
+ }
151
+ else if (id) {
152
+ const cached = this.cache.get(cls, { id, backendCacheKey });
153
+ if (cached)
154
+ return cached;
155
+ }
156
+ else if (name) {
157
+ const cached = this.cache.get(cls, { name, backendCacheKey });
158
+ if (cached)
159
+ return cached;
160
+ }
161
+ const identifierKey = id ?? name ?? alias ?? DEFAULT_STORAGE_ALIAS;
162
+ const lockKey = `${cls.name}:${identifierKey}:${backendCacheKey}`;
163
+ if (!this.openerLocks.has(lockKey)) {
164
+ this.openerLocks.set(lockKey, new AsyncQueue());
165
+ }
166
+ const queue = this.openerLocks.get(lockKey);
167
+ await queue.wait();
168
+ try {
169
+ // Double-check cache under lock (another caller may have filled it while we waited).
170
+ if (alias !== undefined) {
171
+ const cached = this.cache.get(cls, { alias, backendCacheKey });
172
+ if (cached)
173
+ return cached;
174
+ }
175
+ else if (id) {
176
+ const cached = this.cache.get(cls, { id, backendCacheKey });
177
+ if (cached)
178
+ return cached;
179
+ }
180
+ else if (name) {
181
+ const cached = this.cache.get(cls, { name, backendCacheKey });
182
+ if (cached)
183
+ return cached;
184
+ }
185
+ // Prevent the same string from being used as both a name and an alias.
186
+ this.cache.checkNameAliasConflict(cls, { name, alias, backendCacheKey });
187
+ // Cache miss — create the sub-backend and storage instance.
188
+ const subBackend = await backendOpener();
189
+ const storageInfo = await subBackend.getMetadata();
190
+ const instance = new cls({
191
+ id: storageInfo.id,
192
+ name: storageInfo.name,
193
+ backend: subBackend,
194
+ });
195
+ // Atomic cache writes (no awaits between these).
196
+ this.cache.set(cls, instance, backendCacheKey, alias);
197
+ return instance;
198
+ }
199
+ finally {
200
+ queue.shift();
201
+ // Clean up idle locks so the map doesn't grow unboundedly
202
+ // (mirrors crawlee-python's WeakValueDictionary behaviour).
203
+ if (queue.remaining === 0) {
204
+ this.openerLocks.delete(lockKey);
205
+ }
206
+ }
207
+ }
208
+ /**
209
+ * Remove a storage instance from the cache (called from `storage.drop()`).
210
+ */
211
+ removeFromCache(instance) {
212
+ this.cache.removeFromCache(instance);
213
+ }
214
+ /**
215
+ * Clear the entire cache. Also calls `clearCache()` on any cached KeyValueStore
216
+ * instances (duck-typed to avoid importing KeyValueStore and circular dependencies).
217
+ * Called during service locator reset.
218
+ */
219
+ clearCache() {
220
+ for (const instance of this.cache.allValues()) {
221
+ if ('clearCache' in instance && typeof instance.clearCache === 'function') {
222
+ instance.clearCache();
223
+ }
224
+ }
225
+ this.cache.clear();
226
+ }
227
+ }
228
+ /**
229
+ * Decompose a user-provided `identifier` (the `Dataset.open()` / `KeyValueStore.open()` /
230
+ * `RequestQueue.open()` argument) into separate `id`, `name`, and `alias` fields that
231
+ * the `StorageInstanceManager` and `StorageBackend.create*Client` expect.
232
+ *
233
+ * - `null` / `undefined` / `{}` → default storage alias
234
+ * - `string` → resolved via `storageExists` (ID-first, then name)
235
+ * - `{ id }` → `{ id }`
236
+ * - `{ name }` → `{ name }`
237
+ * - `{ alias }` → `{ alias }`
238
+ */
239
+ export async function resolveStorageIdentifier(identifier, storageBackend, storageType) {
240
+ if (identifier === null || identifier === undefined) {
241
+ return { alias: DEFAULT_STORAGE_ALIAS };
242
+ }
243
+ if (typeof identifier === 'string') {
244
+ if (storageBackend.storageExists && (await storageBackend.storageExists(identifier, storageType))) {
245
+ return { id: identifier };
246
+ }
247
+ return { name: identifier };
248
+ }
249
+ if (identifier.id) {
250
+ return { id: identifier.id };
251
+ }
252
+ if (identifier.name) {
253
+ return { name: identifier.name };
254
+ }
255
+ if ('alias' in identifier && identifier.alias) {
256
+ return { alias: identifier.alias };
257
+ }
258
+ // Empty object — treated as default storage.
259
+ return { alias: DEFAULT_STORAGE_ALIAS };
260
+ }
261
+ //# sourceMappingURL=storage_instance_manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage_instance_manager.js","sourceRoot":"","sources":["../../src/storages/storage_instance_manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Backend-independent usage counters tracked by the storage frontend classes
3
+ * ({@link Dataset}, {@link KeyValueStore}, {@link RequestQueue}).
4
+ *
5
+ * These count the operations the frontend issues against its underlying storage backend, so they are
6
+ * meaningful for any storage backend (memory, file system, cloud). They are tallied per client call
7
+ * — e.g. iterating a key-value store increments `readCount` once per record fetched and `listCount`
8
+ * once per listed page. Backend-specific figures that the frontend cannot compute (such as the number
9
+ * of bytes stored) are intentionally not included here; read those from the backend's own API instead.
10
+ */
11
+ /** Usage counters for a {@link Dataset}. */
12
+ export interface DatasetStats {
13
+ /** Number of read operations issued to the dataset client (e.g. `getData`). */
14
+ readCount: number;
15
+ /** Number of write operations issued to the dataset client (e.g. `pushData`). */
16
+ writeCount: number;
17
+ }
18
+ /** Usage counters for a {@link KeyValueStore}. */
19
+ export interface KeyValueStoreStats {
20
+ /** Number of read operations issued to the key-value store client (e.g. `getValue`). */
21
+ readCount: number;
22
+ /** Number of write operations issued to the key-value store client (e.g. `setValue`). */
23
+ writeCount: number;
24
+ /** Number of delete operations issued to the key-value store client (e.g. `deleteValue`). */
25
+ deleteCount: number;
26
+ /** Number of listing operations issued to the key-value store client (e.g. `listKeys`). */
27
+ listCount: number;
28
+ }
29
+ /** Usage counters for a {@link RequestQueue}. */
30
+ export interface RequestQueueStats {
31
+ /** Number of write operations issued to the request queue client (add / handle / reclaim). */
32
+ writeCount: number;
33
+ /** Number of queue-head reads issued to the request queue client (`fetchNextRequest`). */
34
+ headItemReadCount: number;
35
+ }
36
+ /**
37
+ * A tiny mutable counter that the storage frontends increment on each client call and expose through
38
+ * a read-only `stats` snapshot. Generic over the concrete counter shape so each storage type gets only
39
+ * the buckets that make sense for it.
40
+ */
41
+ export declare class StorageStatsTracker<T extends Record<keyof T, number>> {
42
+ private readonly counters;
43
+ constructor(initial: T);
44
+ /** Increment a counter bucket by `by` (default `1`). */
45
+ add(key: keyof T, by?: number): void;
46
+ /** Return a snapshot of the current counters. The returned object is a copy and safe to keep. */
47
+ get current(): T;
48
+ }
49
+ //# sourceMappingURL=storage_stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage_stats.d.ts","sourceRoot":"","sources":["../../src/storages/storage_stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IACzB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,qDAAqD;AACrD,MAAM,WAAW,kBAAkB;IAC/B,wFAAwF;IACxF,SAAS,EAAE,MAAM,CAAC;IAClB,yFAAyF;IACzF,UAAU,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,WAAW,EAAE,MAAM,CAAC;IACpB,2FAA2F;IAC3F,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,oDAAoD;AACpD,MAAM,WAAW,iBAAiB;IAC9B,8FAA8F;IAC9F,UAAU,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,iBAAiB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;GAIG;AACH,qBAAa,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAI;gBAEjB,OAAO,EAAE,CAAC;IAItB,wDAAwD;IACxD,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,SAAI,GAAG,IAAI;IAI/B,iGAAiG;IACjG,IAAI,OAAO,IAAI,CAAC,CAEf;CACJ"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Backend-independent usage counters tracked by the storage frontend classes
3
+ * ({@link Dataset}, {@link KeyValueStore}, {@link RequestQueue}).
4
+ *
5
+ * These count the operations the frontend issues against its underlying storage backend, so they are
6
+ * meaningful for any storage backend (memory, file system, cloud). They are tallied per client call
7
+ * — e.g. iterating a key-value store increments `readCount` once per record fetched and `listCount`
8
+ * once per listed page. Backend-specific figures that the frontend cannot compute (such as the number
9
+ * of bytes stored) are intentionally not included here; read those from the backend's own API instead.
10
+ */
11
+ /**
12
+ * A tiny mutable counter that the storage frontends increment on each client call and expose through
13
+ * a read-only `stats` snapshot. Generic over the concrete counter shape so each storage type gets only
14
+ * the buckets that make sense for it.
15
+ */
16
+ export class StorageStatsTracker {
17
+ counters;
18
+ constructor(initial) {
19
+ this.counters = { ...initial };
20
+ }
21
+ /** Increment a counter bucket by `by` (default `1`). */
22
+ add(key, by = 1) {
23
+ this.counters[key] += by;
24
+ }
25
+ /** Return a snapshot of the current counters. The returned object is a copy and safe to keep. */
26
+ get current() {
27
+ return { ...this.counters };
28
+ }
29
+ }
30
+ //# sourceMappingURL=storage_stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage_stats.js","sourceRoot":"","sources":["../../src/storages/storage_stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA8BH;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IACX,QAAQ,CAAI;IAE7B,YAAY,OAAU;QAClB,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,wDAAwD;IACxD,GAAG,CAAC,GAAY,EAAE,EAAE,GAAG,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAY,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,iGAAiG;IACjG,IAAI,OAAO;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;CACJ"}
@@ -1,5 +1,6 @@
1
- import type { Dictionary, StorageClient } from '@crawlee/types';
1
+ import type { BaseHttpClient, Dictionary, StorageBackend } from '@crawlee/types';
2
2
  import { Configuration } from '../configuration.js';
3
+ import type { ProxyConfiguration } from '../proxy_configuration.js';
3
4
  /**
4
5
  * Options for purging default storage.
5
6
  */
@@ -9,7 +10,7 @@ interface PurgeDefaultStorageOptions {
9
10
  */
10
11
  onlyPurgeOnce?: boolean;
11
12
  config?: Configuration;
12
- client?: StorageClient;
13
+ storageBackend?: StorageBackend;
13
14
  }
14
15
  /**
15
16
  * Cleans up the local storage folder (defaults to `./storage`) created when running code locally.
@@ -19,7 +20,7 @@ interface PurgeDefaultStorageOptions {
19
20
  * explicitly, e.g. via `RequestList.open()`). We can disable that via `purgeOnStart` {@link Configuration}
20
21
  * option or by setting `CRAWLEE_PURGE_ON_START` environment variable to `0` or `false`.
21
22
  *
22
- * This is a shortcut for running (optional) `purge` method on the StorageClient interface, in other words
23
+ * This is a shortcut for running (optional) `purge` method on the StorageBackend interface, in other words
23
24
  * it will call the `purge` method of the underlying storage implementation we are currently using. You can
24
25
  * make sure the storage is purged only once for a given execution context if you set `onlyPurgeOnce` to `true` in
25
26
  * the `options` object
@@ -33,10 +34,10 @@ export declare function purgeDefaultStorages(options?: PurgeDefaultStorageOption
33
34
  * explicitly, e.g. via `RequestList.open()`). We can disable that via `purgeOnStart` {@link Configuration}
34
35
  * option or by setting `CRAWLEE_PURGE_ON_START` environment variable to `0` or `false`.
35
36
  *
36
- * This is a shortcut for running (optional) `purge` method on the StorageClient interface, in other words
37
+ * This is a shortcut for running (optional) `purge` method on the StorageBackend interface, in other words
37
38
  * it will call the `purge` method of the underlying storage implementation we are currently using.
38
39
  */
39
- export declare function purgeDefaultStorages(config?: Configuration, client?: StorageClient): Promise<void>;
40
+ export declare function purgeDefaultStorages(config?: Configuration, storageBackend?: StorageBackend): Promise<void>;
40
41
  export interface UseStateOptions {
41
42
  config?: Configuration;
42
43
  /**
@@ -89,5 +90,50 @@ export declare const API_PROCESSED_REQUESTS_DELAY_MILLIS = 10000;
89
90
  * @internal
90
91
  */
91
92
  export declare const MAX_QUERIES_FOR_CONSISTENCY = 6;
93
+ /** @internal */
94
+ export interface DualIterableOptions<TItem, TRawPage> {
95
+ /** Factory that returns an async generator yielding pages. */
96
+ createPages: () => AsyncGenerator<TRawPage>;
97
+ /** Extracts individual items from a page (for iteration). */
98
+ extractItems: (page: TRawPage) => TItem[];
99
+ }
100
+ /**
101
+ * Creates an object that is both an `AsyncIterable<TItem>` (for `for await...of`)
102
+ * and a `Promise<TItem[]>` (for `await`) from a single async page generator.
103
+ *
104
+ * - `await result` drains all pages from a fresh generator and returns every
105
+ * item as a flat array.
106
+ * - `for await (const item of result)` streams all items across all pages,
107
+ * yielding them one by one without buffering everything in memory.
108
+ *
109
+ * Each usage path creates its own generator instance, so `await` and
110
+ * `for await...of` never interfere with each other.
111
+ *
112
+ * @internal
113
+ */
114
+ export declare function createDualIterable<TItem, TRawPage>(options: DualIterableOptions<TItem, TRawPage>): AsyncIterable<TItem> & Promise<TItem[]>;
115
+ /**
116
+ * Options for the static `open()` method on storage classes ({@link Dataset}, {@link KeyValueStore}, {@link RequestQueue}).
117
+ */
118
+ export interface StorageOpenOptions {
119
+ /**
120
+ * SDK configuration instance, defaults to the static register.
121
+ */
122
+ config?: Configuration;
123
+ /**
124
+ * Optional storage backend that should be used to open storages.
125
+ */
126
+ storageBackend?: StorageBackend;
127
+ /**
128
+ * Used to pass the proxy configuration for the `requestsFromUrl` objects.
129
+ * Takes advantage of the internal address rotation and authentication process.
130
+ * If undefined, the `requestsFromUrl` requests will be made without proxy.
131
+ */
132
+ proxyConfiguration?: ProxyConfiguration;
133
+ /**
134
+ * HTTP client to be used to download the list of URLs in `RequestQueue`.
135
+ */
136
+ httpClient?: BaseHttpClient;
137
+ }
92
138
  export {};
93
139
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/storages/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD;;GAEG;AACH,UAAU,0BAA0B;IAChC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAChG;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAwB1G,MAAM,WAAW,eAAe;IAC5B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EAChE,IAAI,CAAC,EAAE,MAAM,EACb,YAAY,GAAS,KAAK,EAC1B,OAAO,CAAC,EAAE,eAAe,kBAM5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,UAI7C;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,OAAO,CAAC;AAErD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;;GAIG;AACH,eAAO,MAAM,mCAAmC,QAAS,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,2BAA2B,IAAI,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/storages/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEjF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIpE;;GAEG;AACH,UAAU,0BAA0B;IAChC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,cAAc,CAAC,EAAE,cAAc,CAAC;CACnC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAChG;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAwBnH,MAAM,WAAW,eAAe;IAC5B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EAChE,IAAI,CAAC,EAAE,MAAM,EACb,YAAY,GAAS,KAAK,EAC1B,OAAO,CAAC,EAAE,eAAe,kBAM5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,UAI7C;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,OAAO,CAAC;AAErD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;;GAIG;AACH,eAAO,MAAM,mCAAmC,QAAS,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,gBAAgB;AAChB,MAAM,WAAW,mBAAmB,CAAC,KAAK,EAAE,QAAQ;IAChD,8DAA8D;IAC9D,WAAW,EAAE,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,6DAA6D;IAC7D,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,KAAK,EAAE,CAAC;CAC7C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAC9C,OAAO,EAAE,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAC9C,aAAa,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CA6CzC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B;;OAEG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAExC;;OAEG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;CAC/B"}
package/storages/utils.js CHANGED
@@ -1,18 +1,19 @@
1
1
  import crypto from 'node:crypto';
2
2
  import { Configuration } from '../configuration.js';
3
+ import { serviceLocator } from '../service_locator.js';
3
4
  import { KeyValueStore } from './key_value_store.js';
4
- export async function purgeDefaultStorages(configOrOptions, client) {
5
+ export async function purgeDefaultStorages(configOrOptions, storageBackend) {
5
6
  const options = configOrOptions instanceof Configuration
6
7
  ? {
7
- client,
8
+ storageBackend,
8
9
  config: configOrOptions,
9
10
  }
10
11
  : (configOrOptions ?? {});
11
- const { config = Configuration.getGlobalConfig(), onlyPurgeOnce = false } = options;
12
- ({ client = config.getStorageClient() } = options);
13
- const casted = client;
12
+ const { config = serviceLocator.getConfiguration(), onlyPurgeOnce = false } = options;
13
+ ({ storageBackend = serviceLocator.getStorageBackend() } = options);
14
+ const casted = storageBackend;
14
15
  // if `onlyPurgeOnce` is true, will purge anytime this function is called, otherwise - only on start
15
- if (!onlyPurgeOnce || (config.get('purgeOnStart') && !casted.__purged)) {
16
+ if (!onlyPurgeOnce || (config.purgeOnStart && !casted.__purged)) {
16
17
  casted.__purged = true;
17
18
  await casted.purge?.();
18
19
  }
@@ -27,8 +28,8 @@ export async function purgeDefaultStorages(configOrOptions, client) {
27
28
  * @param options An optional object parameter where a custom `keyValueStoreName` and `config` can be passed in.
28
29
  */
29
30
  export async function useState(name, defaultValue = {}, options) {
30
- const kvStore = await KeyValueStore.open(options?.keyValueStoreName, {
31
- config: options?.config || Configuration.getGlobalConfig(),
31
+ const kvStore = await KeyValueStore.open(options?.keyValueStoreName ? { name: options.keyValueStoreName } : null, {
32
+ config: options?.config || serviceLocator.getConfiguration(),
32
33
  });
33
34
  return kvStore.getAutoSavedValue(name || 'CRAWLEE_GLOBAL_STATE', defaultValue);
34
35
  }
@@ -69,4 +70,55 @@ export const API_PROCESSED_REQUESTS_DELAY_MILLIS = 10_000;
69
70
  * @internal
70
71
  */
71
72
  export const MAX_QUERIES_FOR_CONSISTENCY = 6;
73
+ /**
74
+ * Creates an object that is both an `AsyncIterable<TItem>` (for `for await...of`)
75
+ * and a `Promise<TItem[]>` (for `await`) from a single async page generator.
76
+ *
77
+ * - `await result` drains all pages from a fresh generator and returns every
78
+ * item as a flat array.
79
+ * - `for await (const item of result)` streams all items across all pages,
80
+ * yielding them one by one without buffering everything in memory.
81
+ *
82
+ * Each usage path creates its own generator instance, so `await` and
83
+ * `for await...of` never interfere with each other.
84
+ *
85
+ * @internal
86
+ */
87
+ export function createDualIterable(options) {
88
+ const { createPages, extractItems } = options;
89
+ let cached = null;
90
+ function getOrCreate() {
91
+ if (!cached) {
92
+ cached = (async () => {
93
+ const items = [];
94
+ for await (const page of createPages()) {
95
+ items.push(...extractItems(page));
96
+ }
97
+ return items;
98
+ })();
99
+ }
100
+ return cached;
101
+ }
102
+ async function* iterateAll() {
103
+ for await (const page of createPages()) {
104
+ yield* extractItems(page);
105
+ }
106
+ }
107
+ const result = {
108
+ [Symbol.asyncIterator]() {
109
+ return iterateAll();
110
+ },
111
+ then(onfulfilled, onrejected) {
112
+ return getOrCreate().then(onfulfilled, onrejected);
113
+ },
114
+ catch(onrejected) {
115
+ return getOrCreate().catch(onrejected);
116
+ },
117
+ finally(onfinally) {
118
+ return getOrCreate().finally(onfinally);
119
+ },
120
+ [Symbol.toStringTag]: 'DualIterable',
121
+ };
122
+ return result;
123
+ }
72
124
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/storages/utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAIjC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAwCrD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,eAA4D,EAC5D,MAAsB;IAEtB,MAAM,OAAO,GACT,eAAe,YAAY,aAAa;QACpC,CAAC,CAAC;YACI,MAAM;YACN,MAAM,EAAE,eAAe;SAC1B;QACH,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,eAAe,EAAE,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACpF,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,MAAgD,CAAC;IAEhE,oGAAoG;IACpG,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,MAAM,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IAC3B,CAAC;AACL,CAAC;AAWD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC1B,IAAa,EACb,eAAe,EAAW,EAC1B,OAAyB;IAEzB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE;QACjE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,aAAa,CAAC,eAAe,EAAE;KAC7D,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,iBAAiB,CAAQ,IAAI,IAAI,sBAAsB,EAAE,YAAY,CAAC,CAAC;AAC1F,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEjG,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,IAAI,CAAC;AAErD,gBAAgB;AAChB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,MAAM,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/storages/utils.ts"],"names":[],"mappings":"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"}
package/typedefs.d.ts CHANGED
@@ -6,5 +6,5 @@ export type Awaitable<T> = T | PromiseLike<T>;
6
6
  export declare function entries<T extends {}>(obj: T): [keyof T, T[keyof T]][];
7
7
  /** @ignore */
8
8
  export declare function keys<T extends {}>(obj: T): (keyof T)[];
9
- export declare type AllowedHttpMethods = 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE' | 'OPTIONS' | 'CONNECT' | 'PATCH';
9
+ export type { AllowedHttpMethods } from '@crawlee/types';
10
10
  //# sourceMappingURL=typedefs.d.ts.map
package/typedefs.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"typedefs.d.ts","sourceRoot":"","sources":["../src/typedefs.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEjE,cAAc;AACd,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAE9C,cAAc;AACd,wBAAgB,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,GACV,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACxD;AAED,cAAc;AACd,wBAAgB,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,GACV,CAAC,MAAM,CAAC,CAAC,EAAE,CACzC;AAED,MAAM,CAAC,OAAO,MAAM,kBAAkB,GAChC,KAAK,GACL,MAAM,GACN,MAAM,GACN,KAAK,GACL,QAAQ,GACR,OAAO,GACP,SAAS,GACT,SAAS,GACT,OAAO,CAAC"}
1
+ {"version":3,"file":"typedefs.d.ts","sourceRoot":"","sources":["../src/typedefs.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEjE,cAAc;AACd,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAE9C,cAAc;AACd,wBAAgB,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,GACV,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACxD;AAED,cAAc;AACd,wBAAgB,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,GACV,CAAC,MAAM,CAAC,CAAC,EAAE,CACzC;AAED,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
package/validators.d.ts CHANGED
@@ -17,5 +17,13 @@ export declare const validators: {
17
17
  validator: boolean;
18
18
  message: (label: string) => string;
19
19
  };
20
+ browserPool: (value: Dictionary) => {
21
+ validator: boolean;
22
+ message: (label: string) => string;
23
+ };
24
+ sessionPool: (value: Dictionary) => {
25
+ validator: boolean;
26
+ message: (label: string) => string;
27
+ };
20
28
  };
21
29
  //# sourceMappingURL=validators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,gBAAgB;AAChB,eAAO,MAAM,UAAU;yBAEE,UAAU;;yBAEV,MAAM;;gCAEC,UAAU;;yBAEjB,MAAM;;yBAEN,UAAU;;yBAEV,MAAM;;0BAEL,UAAU;;yBAEX,MAAM;;CAE9B,CAAC"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,gBAAgB;AAChB,eAAO,MAAM,UAAU;yBAEE,UAAU;;yBAEV,MAAM;;gCAEC,UAAU;;yBAEjB,MAAM;;yBAEN,UAAU;;yBAEV,MAAM;;0BAEL,UAAU;;yBAEX,MAAM;;yBAEN,UAAU;;yBAEV,MAAM;;yBAGN,UAAU;;yBAEV,MAAM;;CAG9B,CAAC"}
package/validators.js CHANGED
@@ -18,5 +18,13 @@ export const validators = {
18
18
  validator: ow.isValid(value, ow.object.hasKeys('fetchNextRequest', 'addRequest')),
19
19
  message: (label) => `Expected argument '${label}' to be a RequestQueue, got something else.`,
20
20
  }),
21
+ browserPool: (value) => ({
22
+ validator: ow.isValid(value, ow.object.hasKeys('newPage', 'closePage', 'extractPageState', 'injectPageState')),
23
+ message: (label) => `Expected argument '${label}' to implement the IBrowserPool interface (missing one of 'newPage', 'closePage', 'extractPageState', 'injectPageState'), got something else.`,
24
+ }),
25
+ sessionPool: (value) => ({
26
+ validator: ow.isValid(value, ow.object.hasKeys('getSession')),
27
+ message: (label) => `Expected argument '${label}' to implement the ISessionPool interface (missing 'getSession'), got something else.`,
28
+ }),
21
29
  };
22
30
  //# sourceMappingURL=validators.js.map
package/validators.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,gBAAgB;AAChB,MAAM,CAAC,MAAM,UAAU,GAAG;IACtB,6DAA6D;IAC7D,WAAW,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;QACjC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9E,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,sBAAsB,KAAK,+CAA+C;KACzG,CAAC;IACF,kBAAkB,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;QACxC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACzE,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,sBAAsB,KAAK,mDAAmD;KAC7G,CAAC;IACF,WAAW,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;QACjC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;QACnF,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,sBAAsB,KAAK,4CAA4C;KACtG,CAAC;IACF,YAAY,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;QAClC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;QACjF,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,sBAAsB,KAAK,6CAA6C;KACvG,CAAC;CACL,CAAC"}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,gBAAgB;AAChB,MAAM,CAAC,MAAM,UAAU,GAAG;IACtB,6DAA6D;IAC7D,WAAW,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;QACjC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9E,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,sBAAsB,KAAK,+CAA+C;KACzG,CAAC;IACF,kBAAkB,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;QACxC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACzE,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,sBAAsB,KAAK,mDAAmD;KAC7G,CAAC;IACF,WAAW,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;QACjC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;QACnF,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,sBAAsB,KAAK,4CAA4C;KACtG,CAAC;IACF,YAAY,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;QAClC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;QACjF,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,sBAAsB,KAAK,6CAA6C;KACvG,CAAC;IACF,WAAW,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;QACjC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;QAC9G,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CACvB,sBAAsB,KAAK,+IAA+I;KACjL,CAAC;IACF,WAAW,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;QACjC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7D,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CACvB,sBAAsB,KAAK,uFAAuF;KACzH,CAAC;CACL,CAAC"}
@@ -1,12 +0,0 @@
1
- import { type Log } from '../log.js';
2
- /**
3
- * Abstract class with pre-defined method to connect to the Crawlers class by the "use" crawler method.
4
- * @category Crawlers
5
- * @ignore
6
- */
7
- export declare abstract class CrawlerExtension {
8
- name: string;
9
- log: Log;
10
- getCrawlerOptions(): Record<string, unknown>;
11
- }
12
- //# sourceMappingURL=crawler_extension.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crawler_extension.d.ts","sourceRoot":"","sources":["../../src/crawlers/crawler_extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAqB,MAAM,WAAW,CAAC;AAExD;;;;GAIG;AACH,8BAAsB,gBAAgB;IAClC,IAAI,SAAyB;IAC7B,GAAG,EAAE,GAAG,CAA2C;IAEnD,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/C"}