crawlee-one 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/README.md +81 -0
  2. package/dist/cjs/cli/cli.d.ts +1 -0
  3. package/dist/cjs/cli/cli.js +61 -0
  4. package/dist/cjs/cli/cli.js.map +1 -0
  5. package/dist/cjs/cli/index.d.ts +2 -0
  6. package/dist/cjs/cli/index.js +6 -0
  7. package/dist/cjs/cli/index.js.map +1 -0
  8. package/dist/cjs/index.d.ts +24 -0
  9. package/dist/cjs/index.js +43 -0
  10. package/dist/cjs/index.js.map +1 -0
  11. package/dist/cjs/lib/actions/dom.d.ts +102 -0
  12. package/dist/cjs/lib/actions/dom.js +743 -0
  13. package/dist/cjs/lib/actions/dom.js.map +1 -0
  14. package/dist/cjs/lib/actions/domUtils.d.ts +42 -0
  15. package/dist/cjs/lib/actions/domUtils.js +126 -0
  16. package/dist/cjs/lib/actions/domUtils.js.map +1 -0
  17. package/dist/cjs/lib/actions/page.d.ts +69 -0
  18. package/dist/cjs/lib/actions/page.js +205 -0
  19. package/dist/cjs/lib/actions/page.js.map +1 -0
  20. package/dist/cjs/lib/actions/scrapeListing.d.ts +78 -0
  21. package/dist/cjs/lib/actions/scrapeListing.js +242 -0
  22. package/dist/cjs/lib/actions/scrapeListing.js.map +1 -0
  23. package/dist/cjs/lib/actor/actor.d.ts +90 -0
  24. package/dist/cjs/lib/actor/actor.js +306 -0
  25. package/dist/cjs/lib/actor/actor.js.map +1 -0
  26. package/dist/cjs/lib/actor/types.d.ts +162 -0
  27. package/dist/cjs/lib/actor/types.js +3 -0
  28. package/dist/cjs/lib/actor/types.js.map +1 -0
  29. package/dist/cjs/lib/actor.d.ts +189 -0
  30. package/dist/cjs/lib/actor.js +225 -0
  31. package/dist/cjs/lib/actor.js.map +1 -0
  32. package/dist/cjs/lib/actorSpec.d.ts +20 -0
  33. package/dist/cjs/lib/actorSpec.js +3 -0
  34. package/dist/cjs/lib/actorSpec.js.map +1 -0
  35. package/dist/cjs/lib/config.d.ts +561 -0
  36. package/dist/cjs/lib/config.js +707 -0
  37. package/dist/cjs/lib/config.js.map +1 -0
  38. package/dist/cjs/lib/dataset/maxCount.d.ts +30 -0
  39. package/dist/cjs/lib/dataset/maxCount.js +55 -0
  40. package/dist/cjs/lib/dataset/maxCount.js.map +1 -0
  41. package/dist/cjs/lib/dataset/pushData.d.ts +123 -0
  42. package/dist/cjs/lib/dataset/pushData.js +182 -0
  43. package/dist/cjs/lib/dataset/pushData.js.map +1 -0
  44. package/dist/cjs/lib/dataset.d.ts +98 -0
  45. package/dist/cjs/lib/dataset.js +122 -0
  46. package/dist/cjs/lib/dataset.js.map +1 -0
  47. package/dist/cjs/lib/dom.d.ts +78 -0
  48. package/dist/cjs/lib/dom.js +243 -0
  49. package/dist/cjs/lib/dom.js.map +1 -0
  50. package/dist/cjs/lib/error/errorHandler.d.ts +112 -0
  51. package/dist/cjs/lib/error/errorHandler.js +164 -0
  52. package/dist/cjs/lib/error/errorHandler.js.map +1 -0
  53. package/dist/cjs/lib/error/sentry.d.ts +11 -0
  54. package/dist/cjs/lib/error/sentry.js +60 -0
  55. package/dist/cjs/lib/error/sentry.js.map +1 -0
  56. package/dist/cjs/lib/integrations/apify.d.ts +67 -0
  57. package/dist/cjs/lib/integrations/apify.js +106 -0
  58. package/dist/cjs/lib/integrations/apify.js.map +1 -0
  59. package/dist/cjs/lib/integrations/types.d.ts +274 -0
  60. package/dist/cjs/lib/integrations/types.js +3 -0
  61. package/dist/cjs/lib/integrations/types.js.map +1 -0
  62. package/dist/cjs/lib/io/dataset.d.ts +67 -0
  63. package/dist/cjs/lib/io/dataset.js +86 -0
  64. package/dist/cjs/lib/io/dataset.js.map +1 -0
  65. package/dist/cjs/lib/io/maxCount.d.ts +30 -0
  66. package/dist/cjs/lib/io/maxCount.js +55 -0
  67. package/dist/cjs/lib/io/maxCount.js.map +1 -0
  68. package/dist/cjs/lib/io/pushData.d.ts +124 -0
  69. package/dist/cjs/lib/io/pushData.js +193 -0
  70. package/dist/cjs/lib/io/pushData.js.map +1 -0
  71. package/dist/cjs/lib/io/pushRequests.d.ts +38 -0
  72. package/dist/cjs/lib/io/pushRequests.js +63 -0
  73. package/dist/cjs/lib/io/pushRequests.js.map +1 -0
  74. package/dist/cjs/lib/io/requestQueue.d.ts +28 -0
  75. package/dist/cjs/lib/io/requestQueue.js +40 -0
  76. package/dist/cjs/lib/io/requestQueue.js.map +1 -0
  77. package/dist/cjs/lib/log.d.ts +38 -0
  78. package/dist/cjs/lib/log.js +54 -0
  79. package/dist/cjs/lib/log.js.map +1 -0
  80. package/dist/cjs/lib/migrate/localMigrator.d.ts +10 -0
  81. package/dist/cjs/lib/migrate/localMigrator.js +57 -0
  82. package/dist/cjs/lib/migrate/localMigrator.js.map +1 -0
  83. package/dist/cjs/lib/migrate/localState.d.ts +7 -0
  84. package/dist/cjs/lib/migrate/localState.js +43 -0
  85. package/dist/cjs/lib/migrate/localState.js.map +1 -0
  86. package/dist/cjs/lib/migrate/types.d.ts +6 -0
  87. package/dist/cjs/lib/migrate/types.js +3 -0
  88. package/dist/cjs/lib/migrate/types.js.map +1 -0
  89. package/dist/cjs/lib/readme/readme.d.ts +65 -0
  90. package/dist/cjs/lib/readme/readme.js +534 -0
  91. package/dist/cjs/lib/readme/readme.js.map +1 -0
  92. package/dist/cjs/lib/readme/types.d.ts +260 -0
  93. package/dist/cjs/lib/readme/types.js +54 -0
  94. package/dist/cjs/lib/readme/types.js.map +1 -0
  95. package/dist/cjs/lib/router.d.ts +132 -0
  96. package/dist/cjs/lib/router.js +165 -0
  97. package/dist/cjs/lib/router.js.map +1 -0
  98. package/dist/cjs/lib/scraper/scrapeListing.d.ts +78 -0
  99. package/dist/cjs/lib/scraper/scrapeListing.js +242 -0
  100. package/dist/cjs/lib/scraper/scrapeListing.js.map +1 -0
  101. package/dist/cjs/lib/test/actor.d.ts +21 -0
  102. package/dist/cjs/lib/test/actor.js +56 -0
  103. package/dist/cjs/lib/test/actor.js.map +1 -0
  104. package/dist/cjs/lib/test/mockApifyClient.d.ts +32 -0
  105. package/dist/cjs/lib/test/mockApifyClient.js +176 -0
  106. package/dist/cjs/lib/test/mockApifyClient.js.map +1 -0
  107. package/dist/cjs/types.d.ts +31 -0
  108. package/dist/cjs/types.js +3 -0
  109. package/dist/cjs/types.js.map +1 -0
  110. package/dist/cjs/utils/async.d.ts +19 -0
  111. package/dist/cjs/utils/async.js +74 -0
  112. package/dist/cjs/utils/async.js.map +1 -0
  113. package/dist/cjs/utils/error.d.ts +1 -0
  114. package/dist/cjs/utils/error.js +10 -0
  115. package/dist/cjs/utils/error.js.map +1 -0
  116. package/dist/cjs/utils/format.d.ts +9 -0
  117. package/dist/cjs/utils/format.js +19 -0
  118. package/dist/cjs/utils/format.js.map +1 -0
  119. package/dist/cjs/utils/package.d.ts +15 -0
  120. package/dist/cjs/utils/package.js +25 -0
  121. package/dist/cjs/utils/package.js.map +1 -0
  122. package/dist/cjs/utils/types.d.ts +6 -0
  123. package/dist/cjs/utils/types.js +9 -0
  124. package/dist/cjs/utils/types.js.map +1 -0
  125. package/dist/cjs/utils/url.d.ts +9 -0
  126. package/dist/cjs/utils/url.js +32 -0
  127. package/dist/cjs/utils/url.js.map +1 -0
  128. package/dist/cjs/utils/valueMonitor.d.ts +31 -0
  129. package/dist/cjs/utils/valueMonitor.js +91 -0
  130. package/dist/cjs/utils/valueMonitor.js.map +1 -0
  131. package/package.json +85 -0
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.createSizeMonitor = exports.createValueMonitor = void 0;
13
+ /**
14
+ * ValueMonitor checks and caches a (maybe remote) value, and triggers callbacks
15
+ * based on the value.
16
+ *
17
+ * You can think of it as a light replacement for reactivity (Vue) feature.
18
+ */
19
+ const createValueMonitor = (fetchValueFn, options) => {
20
+ var _a;
21
+ const ttlInMs = (_a = options === null || options === void 0 ? void 0 : options.ttlInMs) !== null && _a !== void 0 ? _a : 5000;
22
+ let currValue = null;
23
+ let lastFetchTimestamp = null;
24
+ const callbacks = [];
25
+ const registerCallback = (callback) => {
26
+ callbacks.push(callback);
27
+ return () => deregisterCallback(callback);
28
+ };
29
+ const deregisterCallback = (callback) => {
30
+ const index = callbacks.indexOf(callback);
31
+ callbacks.splice(index, 1);
32
+ };
33
+ const isStale = () => {
34
+ if (lastFetchTimestamp == null)
35
+ return true;
36
+ const now = new Date().getTime();
37
+ const expiry = lastFetchTimestamp + ttlInMs;
38
+ return now >= expiry;
39
+ };
40
+ const refreshValue = () => __awaiter(void 0, void 0, void 0, function* () {
41
+ const oldValue = currValue;
42
+ const newValue = (currValue = yield fetchValueFn(oldValue));
43
+ lastFetchTimestamp = new Date().getTime();
44
+ for (const cb of callbacks) {
45
+ yield cb(newValue, oldValue);
46
+ }
47
+ return currValue;
48
+ });
49
+ const getValue = () => {
50
+ return isStale() ? refreshValue() : currValue;
51
+ };
52
+ return {
53
+ value: getValue,
54
+ isStale,
55
+ refresh: refreshValue,
56
+ onValue: registerCallback,
57
+ };
58
+ };
59
+ exports.createValueMonitor = createValueMonitor;
60
+ /**
61
+ * Variant of ValueMonitor that is used for monitoring size of stores like Apify Dataset or RequestQueue.
62
+ * - Pass an array of items to `shortenToSize` to shorten the array to the size
63
+ * that still fits the store.
64
+ */
65
+ const createSizeMonitor = (maxSize, sizeGetter, onMaxSizeReached, options) => {
66
+ const valueMonitor = (0, exports.createValueMonitor)(sizeGetter, options);
67
+ const prepareSize = () => __awaiter(void 0, void 0, void 0, function* () {
68
+ const size = yield valueMonitor.value();
69
+ if (typeof size === 'number' && size >= 0 && !valueMonitor.isStale())
70
+ return size;
71
+ const newSize = yield valueMonitor.refresh();
72
+ return newSize;
73
+ });
74
+ const shortenToSize = (arr) => __awaiter(void 0, void 0, void 0, function* () {
75
+ const currSize = yield prepareSize();
76
+ return arr.slice(0, maxSize - currSize);
77
+ });
78
+ // Define handlers for when the value is updated
79
+ valueMonitor.onValue((newSize) => __awaiter(void 0, void 0, void 0, function* () {
80
+ if (newSize >= maxSize)
81
+ yield onMaxSizeReached();
82
+ }));
83
+ const isFull = () => __awaiter(void 0, void 0, void 0, function* () {
84
+ const currSize = yield prepareSize();
85
+ return currSize >= maxSize;
86
+ });
87
+ return Object.assign(Object.assign({}, valueMonitor), { shortenToSize,
88
+ isFull });
89
+ };
90
+ exports.createSizeMonitor = createSizeMonitor;
91
+ //# sourceMappingURL=valueMonitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valueMonitor.js","sourceRoot":"","sources":["../../../src/utils/valueMonitor.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MaybePromise } from './types';\n\nexport type ValueCallback<T> = (value: T, oldValue: T | null) => MaybePromise<any>;\nexport interface ValueMonitorOptions {\n /** How long (in milliseconds) after fetching the value can we use it before we have to re-fetch it. */\n ttlInMs?: number;\n}\n\n/**\n * ValueMonitor checks and caches a (maybe remote) value, and triggers callbacks\n * based on the value.\n *\n * You can think of it as a light replacement for reactivity (Vue) feature.\n */\nexport const createValueMonitor = <T>(\n fetchValueFn: (oldValue: T | null) => MaybePromise<T>,\n options?: ValueMonitorOptions\n) => {\n const ttlInMs = options?.ttlInMs ?? 5000;\n\n let currValue: T | null = null;\n let lastFetchTimestamp: number | null = null;\n const callbacks: ValueCallback<T>[] = [];\n\n const registerCallback = (callback: ValueCallback<T>) => {\n callbacks.push(callback);\n return () => deregisterCallback(callback);\n };\n\n const deregisterCallback = (callback: ValueCallback<T>) => {\n const index = callbacks.indexOf(callback);\n callbacks.splice(index, 1);\n };\n\n const isStale = () => {\n if (lastFetchTimestamp == null) return true;\n\n const now = new Date().getTime();\n const expiry = lastFetchTimestamp + ttlInMs;\n return now >= expiry;\n };\n\n const refreshValue = async () => {\n const oldValue = currValue;\n const newValue = (currValue = await fetchValueFn(oldValue));\n lastFetchTimestamp = new Date().getTime();\n\n for (const cb of callbacks) {\n await cb(newValue, oldValue);\n }\n\n return currValue as T;\n };\n\n const getValue = () => {\n return isStale() ? refreshValue() : currValue;\n };\n\n return {\n value: getValue,\n isStale,\n refresh: refreshValue,\n onValue: registerCallback,\n };\n};\n\n/**\n * Variant of ValueMonitor that is used for monitoring size of stores like Apify Dataset or RequestQueue.\n * - Pass an array of items to `shortenToSize` to shorten the array to the size\n * that still fits the store.\n */\nexport const createSizeMonitor = (\n maxSize: number,\n sizeGetter: () => MaybePromise<number>,\n onMaxSizeReached: () => MaybePromise<void>,\n options?: ValueMonitorOptions\n) => {\n const valueMonitor = createValueMonitor<number>(sizeGetter, options);\n\n const prepareSize = async () => {\n const size = await valueMonitor.value();\n if (typeof size === 'number' && size >= 0 && !valueMonitor.isStale()) return size;\n const newSize = await valueMonitor.refresh();\n return newSize;\n };\n\n const shortenToSize = async <T>(arr: T[]) => {\n const currSize = await prepareSize();\n return arr.slice(0, maxSize - currSize);\n };\n\n // Define handlers for when the value is updated\n valueMonitor.onValue(async (newSize) => {\n if (newSize >= maxSize) await onMaxSizeReached();\n });\n\n const isFull = async () => {\n const currSize = await prepareSize();\n return currSize >= maxSize;\n };\n\n return {\n ...valueMonitor,\n shortenToSize,\n isFull,\n };\n};\n"]}
package/package.json ADDED
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "crawlee-one",
3
+ "version": "1.0.0",
4
+ "private": false,
5
+ "description": "Crawlee One is a framework built on top of Crawlee and Apify for writing robust and highly configurable web scrapers",
6
+ "author": "Juro Oravec <juraj.oravec.josefson@gmail.com>",
7
+ "homepage": "https://github.com/jurooravec/crawlee-one#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/jurooravec/crawlee-one.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/jurooravec/crawlee-one/issues"
14
+ },
15
+ "license": "MIT",
16
+ "keywords": [
17
+ "crawlee",
18
+ "crawlee-one",
19
+ "apify",
20
+ "actor",
21
+ "crawler",
22
+ "scraper",
23
+ "template"
24
+ ],
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "exports": {
29
+ ".": "./dist/cjs/index.js",
30
+ "./apify": "./dist/cjs/lib/integrations/apify.js"
31
+ },
32
+ "module": "dist/esm/index.js",
33
+ "types": "dist/cjs/index.d.js",
34
+ "bin": "dist/cjs/cli/index.js",
35
+ "engines": {
36
+ "node": ">=16.0.0"
37
+ },
38
+ "scripts": {
39
+ "start": "npm run start:dev",
40
+ "start:prod": "node dist/cjs/index.js",
41
+ "start:dev": "ts-node ./src/index.ts",
42
+ "build": "npm run build:cjs",
43
+ "build:all": "npm run build:cjs && npm run build:esm",
44
+ "build:cjs": "tsc -p tsconfig.cjs.json",
45
+ "build:esm": "tsc -p tsconfig.esm.json",
46
+ "lint": "eslint ./src --ext .ts",
47
+ "lint:fix": "eslint ./src --ext .ts --fix",
48
+ "test": "vitest run",
49
+ "coverage": "vitest run --coverage"
50
+ },
51
+ "devDependencies": {
52
+ "@types/lodash": "^4.14.194",
53
+ "@typescript-eslint/eslint-plugin": "^4.33.0",
54
+ "@typescript-eslint/parser": "^4.33.0",
55
+ "eslint": "^7.32.0",
56
+ "eslint-config-prettier": "^6.15.0",
57
+ "eslint-plugin-prettier": "^3.4.1",
58
+ "playwright": "^1.32.3",
59
+ "prettier": "^2.5.1",
60
+ "ts-node": "^10.9.1",
61
+ "typescript": "^5.0.4",
62
+ "vitest": "^0.30.1"
63
+ },
64
+ "peerDependencies": {
65
+ "@sentry/node": "^7.50.0",
66
+ "actor-spec": "^0.4.1",
67
+ "apify": "^3.1.x",
68
+ "apify-actor-config": "^1.0.3",
69
+ "apify-client": "^2.7.x",
70
+ "cheerio": "^1.0.0-rc.12",
71
+ "crawlee": "^3.3.1",
72
+ "joi": "^17.9.2",
73
+ "playwright": "^1.32.x",
74
+ "vitest": "^0.30.1"
75
+ },
76
+ "dependencies": {
77
+ "commander": "^10.0.1",
78
+ "dotenv": "^16.0.3",
79
+ "eta": "^2.0.1",
80
+ "glob": "^10.2.2",
81
+ "lodash": "^4.17.21",
82
+ "millify": "^6.1.0",
83
+ "pkginfo": "^0.4.1"
84
+ }
85
+ }