crawlee-one 2.0.2 → 2.0.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/README.md CHANGED
@@ -670,11 +670,11 @@ version: 1
670
670
  schema:
671
671
  crawlers:
672
672
  main:
673
- type: 'playwright',
674
- routes: ['listingPage', 'detailPage'],
673
+ type: 'playwright'
674
+ routes: ['listingPage', 'detailPage']
675
675
  other:
676
- type: 'cheerio',
677
- routes: ['someNoJSPage'],
676
+ type: 'cheerio'
677
+ routes: ['someNoJSPage']
678
678
  ```
679
679
 
680
680
  CrawleeOne uses
@@ -467,7 +467,7 @@ export declare const inputInputValidationFields: {
467
467
  export declare const startUrlsInputValidationFields: {
468
468
  startUrls: Joi.ArraySchema<any[]>;
469
469
  startUrlsFromDataset: Joi.StringSchema<string>;
470
- startUrlsFromFunction: Joi.StringSchema<string>;
470
+ startUrlsFromFunction: (Joi.StringSchema<string> | Joi.FunctionSchema<Function>)[];
471
471
  };
472
472
  export declare const loggingInputValidationFields: {
473
473
  logLevel: Joi.StringSchema<string>;
@@ -556,7 +556,7 @@ export declare const allActorInputValidationFields: {
556
556
  proxy: Joi.ObjectSchema<any>;
557
557
  startUrls: Joi.ArraySchema<any[]>;
558
558
  startUrlsFromDataset: Joi.StringSchema<string>;
559
- startUrlsFromFunction: Joi.StringSchema<string>;
559
+ startUrlsFromFunction: (Joi.StringSchema<string> | Joi.FunctionSchema<Function>)[];
560
560
  inputExtendUrl: Joi.StringSchema<string>;
561
561
  inputExtendFromFunction: Joi.StringSchema<string>;
562
562
  };
@@ -659,7 +659,7 @@ exports.inputInputValidationFields = {
659
659
  exports.startUrlsInputValidationFields = {
660
660
  startUrls: joi_1.default.array().items(joi_1.default.string().min(1), joi_1.default.object()).optional(),
661
661
  startUrlsFromDataset: joi_1.default.string().min(1).pattern(new RegExp(datasetIdWithFieldPattern)).optional(), // prettier-ignore
662
- startUrlsFromFunction: joi_1.default.string().min(1).optional(),
662
+ startUrlsFromFunction: [joi_1.default.string().min(1).optional(), joi_1.default.func().optional()],
663
663
  };
664
664
  exports.loggingInputValidationFields = {
665
665
  logLevel: joi_1.default.string().valid(...log_1.LOG_LEVEL).optional(), // prettier-ignore
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/lib/input.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Actor } from 'apify';\nimport type { CheerioCrawlerOptions } from 'crawlee';\nimport {\n createBooleanField,\n createIntegerField,\n createObjectField,\n createStringField,\n createArrayField,\n Field,\n} from 'apify-actor-config';\nimport Joi from 'joi';\n\nimport type { CrawlerUrl } from '../types';\nimport { LOG_LEVEL, LogLevel } from './log';\nimport type { CrawleeOneHookFn } from './actor/types';\n\nexport type AllActorInputs = InputActorInput &\n CrawlerConfigActorInput &\n PerfActorInput &\n StartUrlsActorInput &\n LoggingActorInput &\n ProxyActorInput &\n PrivacyActorInput &\n RequestActorInput &\n OutputActorInput &\n MetamorphActorInput;\n\n/** Crawler config fields that can be overriden from the actor input */\nexport type CrawlerConfigActorInput = Pick<\n CheerioCrawlerOptions,\n | 'navigationTimeoutSecs'\n | 'ignoreSslErrors'\n | 'additionalMimeTypes'\n | 'suggestResponseEncoding'\n | 'forceResponseEncoding'\n | 'requestHandlerTimeoutSecs'\n | 'maxRequestRetries'\n | 'maxRequestsPerCrawl'\n | 'maxRequestsPerMinute'\n | 'minConcurrency'\n | 'maxConcurrency'\n | 'keepAlive'\n>;\n\n/** Common input fields related to extending Actor input with remote or generated data */\nexport interface InputActorInput {\n /**\n * If set, the Actor input is extended with a config from this URL.\n *\n * For example, you can store your actor input in a source control, and import it here.\n *\n * In case of a conflict (if a field is defined both in Actor input and in imported input)\n * the Actor input overwrites the imported fields.\n *\n * The URL must point to a JSON file containing a single object (the config).\n */\n inputExtendUrl?: string;\n /**\n * If set, the Actor input is extended with a config from this custom function.\n *\n * For example, you can store your actor input in a source control, and import it here.\n *\n * In case of a conflict (if a field is defined both in Actor input and in imported input)\n * the Actor input overwrites the imported fields.\n *\n * The URL must point to a JSON file containing a single object (the config).\n */\n inputExtendFromFunction?: string | CrawleeOneHookFn<[], AllActorInputs>;\n}\n\n/** Common input fields related to performance which are not part of the CrawlerConfig */\nexport interface PerfActorInput {\n /**\n * If set, multiple Requests will be handled by a single Actor instance.\n *\n * See official docs: https://docs.apify.com/platform/actors/development/performance#batch-jobs-win-over-the-single-jobs\n *\n * Example: If set to 20, then up to 20 requests will be handled in a single \"go\".\n */\n perfBatchSize?: number;\n /**\n * How long to wait between entries within a single batch.\n *\n * Increase this value if you're using batching and you're sending requests to the scraped website too fast.\n *\n * Example: If set to 1, then after each entry in a batch, wait 1 second before continuing.\n */\n perfBatchWaitSecs?: number;\n}\n\n/** Common input fields for defining URLs to scrape */\nexport interface StartUrlsActorInput {\n /** URLs to start with, defined manually as a list of strings or crawler requests */\n startUrls?: CrawlerUrl[];\n /**\n * Import starting URLs from an existing Dataset.\n *\n * String is in the format `datasetID#field` (e.g. `datasetid123#url`).\n */\n startUrlsFromDataset?: string;\n /**\n * Import or generate starting URLs using a custom function.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * ```js\n * // Example: Create and load URLs from a Dataset by combining multiple fields\n * async ({ io, input, state, itemCacheKey }) => {\n * const dataset = await io.openDataset(datasetNameOrId);\n * const data = await dataset.getData();\n * const urls = data.items.map((item) => `https://example.com/u/${item.userId}/list/${item.listId}`);\n * return urls;\n * }\n * ```\n */\n startUrlsFromFunction?: string | CrawleeOneHookFn<[], CrawlerUrl[]>;\n}\n\n/** Common input fields related to logging setup */\nexport interface LoggingActorInput {\n logLevel?: LogLevel;\n /**\n * Whether to report actor errors to telemetry such as <a href=\"https://sentry.io/\">Sentry</a>.\n *\n * This info is used by the author of this actor to identify broken integrations,\n * and track down and fix issues.\n */\n errorTelemetry?: boolean;\n /**\n * Dataset ID to which errors should be captured.\n *\n * Default: `'REPORTING'`.\n */\n errorReportingDatasetId?: string;\n}\n\n/** Common input fields related to proxy setup */\nexport interface ProxyActorInput {\n proxy?: Parameters<Actor['createProxyConfiguration']>[0];\n}\n\n/** Common input fields related to actor requests */\nexport interface RequestActorInput {\n /**\n * If set, only at most this many requests will be scraped.\n *\n * The count is determined from the RequestQueue that's used for the Actor run.\n *\n * This means that if `requestMaxEntries` is set to 50, but the\n * associated RequestQueue already handled 40 requests, then only 10 new requests\n * will be handled.\n */\n requestMaxEntries?: number;\n\n /**\n * Option to freely transform a request using a custom function before pushing it to the RequestQueue.\n *\n * If not set, the request will remain as is.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the second argument.\n *\n * `async (entry, { io, input, state, itemCacheKey }) => { ... }`\n */\n requestTransform?:\n | string\n | CrawleeOneHookFn<[Exclude<CrawlerUrl, string>], Exclude<CrawlerUrl, string>>;\n /**\n * Use this if you need to run one-time initialization code before `requestTransform`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => { ... }`\n */\n requestTransformBefore?: string | CrawleeOneHookFn;\n /**\n * Use this if you need to run one-time teardown code after `requestTransform`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => { ... }`\n */\n requestTransformAfter?: string | CrawleeOneHookFn;\n\n /**\n * Option to filter a request using a custom function before pushing it to the RequestQueue.\n *\n * If not set, all requests will be included.\n *\n * This is done after `requestTransform`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the second argument.\n *\n * `async (entry, { io, input, state, itemCacheKey }) => boolean`\n */\n requestFilter?: string | CrawleeOneHookFn<[Exclude<CrawlerUrl, string>], unknown>;\n /**\n * Use this if you need to run one-time initialization code before `requestFilter`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => boolean`\n */\n requestFilterBefore?: string | CrawleeOneHookFn;\n /**\n * Use this if you need to run one-time initialization code after `requestFilter`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => boolean`\n */\n requestFilterAfter?: string | CrawleeOneHookFn;\n\n /** ID of the RequestQueue to which the requests should be pushed */\n requestQueueId?: string;\n}\n\n/** Common input fields related to actor output */\nexport interface OutputActorInput {\n /**\n * If set, only at most this many entries will be scraped.\n *\n * The count is determined from the Dataset that's used for the Actor run.\n *\n * This means that if `outputMaxEntries` is set to 50, but the\n * associated Dataset already has 40 items in it, then only 10 new entries\n * will be saved.\n */\n outputMaxEntries?: number;\n /**\n * Option to select a subset of keys/fields of an entry that\n * will be pushed to the dataset.\n *\n * If not set, all fields on an entry will be pushed to the dataset.\n *\n * This is done after `outputRenameFields`.\n *\n * Keys can be nested, e.g. `\"someProp.value[0]\"`. Nested path is\n * resolved using Lodash.get().\n */\n outputPickFields?: string[];\n /**\n * Option to remap the keys before pushing the entries to the dataset.\n *\n * This is done before `outputRenameFields`.\n *\n * Keys can be nested, e.g. `\"someProp.value[0]\"`. Nested path is\n * resolved using Lodash.get().\n */\n outputRenameFields?: Record<string, string>;\n\n /**\n * Option to freely transform the output data object using a custom function before pushing it to the dataset.\n *\n * If not set, the data will remain as is.\n *\n * This is done after `outputPickFields` and `outputRenameFields`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the second argument.\n *\n * `async (entry, { io, input, state, itemCacheKey }) => { ... }`\n */\n outputTransform?: string | CrawleeOneHookFn<[item: any], any>;\n /**\n * Use this if you need to run one-time initialization code before `outputTransform`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => { ... }`\n */\n outputTransformBefore?: string | CrawleeOneHookFn;\n /**\n * Use this if you need to run one-time teardown code after `outputTransform`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => { ... }`\n */\n outputTransformAfter?: string | CrawleeOneHookFn;\n\n /**\n * Option to filter out the data using a custom function before pushing it to the dataset.\n *\n * If not set, all entries will be included.\n *\n * This is done after `outputPickFields`, `outputRenameFields`, and `outputTransform`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the second argument.\n *\n * `async (entry, { io, input, state, itemCacheKey }) => boolean`\n */\n outputFilter?: string | CrawleeOneHookFn<[item: any], any>;\n /**\n * Use this if you need to run one-time initialization code before `outputFilter`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => boolean`\n */\n outputFilterBefore?: string | CrawleeOneHookFn;\n /**\n * Use this if you need to run one-time initialization code after `outputFilter`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => boolean`\n */\n outputFilterAfter?: string | CrawleeOneHookFn;\n\n /** ID or name of the dataset to which the data should be pushed */\n outputDatasetId?: string;\n\n /** ID or name of the key-value store used as cache */\n outputCacheStoreId?: string;\n /** Define fields that will be used for cache key */\n outputCachePrimaryKeys?: string[];\n /** Define whether we want to add, remove, or overwrite cached entries with results from the actor run */\n outputCacheActionOnResult?: 'add' | 'remove' | 'overwrite' | null;\n}\n\n/** Common input fields related to actor metamorphing */\nexport interface MetamorphActorInput {\n /**\n * If you want to run another actor with the same dataset after\n * this actor has finished (AKA metamorph into another actor),\n * then set the ID of the target actor.\n *\n * See https://docs.apify.com/sdk/python/docs/concepts/interacting-with-other-actors#actormetamorph\n */\n metamorphActorId?: string;\n /**\n * Tag or number of the target actor build to metamorph into (e.g. `beta` or `1.2.345`).\n *\n * See https://docs.apify.com/sdk/python/docs/concepts/interacting-with-other-actors#actormetamorph\n */\n metamorphActorBuild?: string;\n /**\n * Input passed to the follow-up (metamorph) actor.\n *\n * See https://docs.apify.com/sdk/python/docs/concepts/interacting-with-other-actors#actormetamorph\n */\n metamorphActorInput?: object;\n}\n\n/** Common input fields related to privacy setup */\nexport interface PrivacyActorInput {\n includePersonalData?: boolean;\n}\n\nconst datasetIdPattern = '^[a-zA-Z0-9][a-zA-Z0-9-]*$';\nconst datasetIdWithFieldPattern = `${datasetIdPattern.slice(0, -1)}#.+$`;\n\nconst newLine = (n: number) => '<br/>'.repeat(n);\n\nconst createHookFnExample = (\n args: Record<string, string>,\n mainCode: string,\n includeGuides: boolean\n) => {\n const formattedArgs = Object.keys(args).length ? Object.keys(args).join(', ') + ', ' : '';\n const formattedArgDesc = Object.entries(args).length\n ? Object.entries(args).map(([arg, desc]) => ` * \\`${arg}\\` - ${desc}.`)\n : ` *`;\n const formattedMainCode = mainCode\n .split('\\n')\n .map((s) => '// ' + s)\n .join('\\n');\n\n const guides = `//\n// /* ========== SEE BELOW FOR MORE EXAMPLES ========= */\n//\n// /**\n// * ======= ACCESSING DATASET ========\n// * To save/load/access entries in Dataset.\n// * Docs:\n// * - https://docs.apify.com/platform/storage/dataset\n// * - https://docs.apify.com/sdk/js/docs/guides/result-storage#dataset\n// * - https://docs.apify.com/sdk/js/docs/examples/map-and-reduce\n// */\n// // const dataset = await io.openDataset('MyDatasetId');\n// // const info = await dataset.getInfo();\n// // console.log(info.itemCount);\n// // // => 0\n//\n// /**\n// * ======= ACCESSING REMOTE DATA ========\n// * Use \\`sendRequest\\` to get data from the internet:\n// * Docs:\n// * - https://github.com/apify/got-scraping\n// */\n// // const catFact = await sendRequest.get('https://cat-fact.herokuapp.com/facts/5887e1d85c873e0011036889').json();\n// // console.log(catFact.text);\n// // // => \"Cats make about 100 different sounds. Dogs make only about 10.\",\n//\n// /**\n// * ======= USING CACHE ========\n// * To save the entry to the KeyValue cache (or retrieve it), you can use\n// * \\`itemCacheKey\\` to create the entry's ID for you:\n// */\n// // const cacheId = itemCacheKey(item, input.cachePrimaryKeys);\n// // const cache = await io.openKeyValueStore('MyStoreId');\n// // cache.setValue(cacheId, entry);`;\n\n const hookFnExample = `\n/**\n * Inputs:\n${formattedArgDesc}\n * \\`ctx.io\\` - Instance of CrawleeOneIO that manages results (Dataset), Requests (RequestQueue), and cache (KeyValueStore). By default this is the Apify Actor class, see https://docs.apify.com/sdk/js/reference/class/Actor.\n * \\`ctx.input\\` - The input object that was passed to this Actor.\n * \\`ctx.state\\` - An object you can use to persist state across all your custom functions.\n * \\`ctx.sendRequest\\` - Fetch remote data. Uses 'got-scraping', same as Apify's \\`sendRequest\\`.\n * See https://crawlee.dev/docs/guides/got-scraping\n * \\`ctx.itemCacheKey\\` - A function you can use to get cacheID for current \\`entry\\`.\n * It takes the entry itself, and a list of properties to be used for hashing.\n * By default, you should pass \\`input.cachePrimaryKeys\\` to it.\n *\n */\n// async (${formattedArgs}{ io, input, state, sendRequest, itemCacheKey }) => {\n${formattedMainCode}\n${includeGuides ? guides : '//'}\n// };`;\n return hookFnExample;\n};\n\nconst CODE_EXAMPLES = {\n // Input\n inputExtendFromFunction: `// Example: Load Actor config from GitHub URL (public)\nconst config = await sendRequest.get('https://raw.githubusercontent.com/username/project/main/config.json').json();\n\n// Increase concurrency during off-peak hours\n// NOTE: Imagine we're targetting a small server, that can be slower during the day\nconst hours = new Date().getUTCHours();\nconst isOffPeak = hours < 6 || hours > 20;\nconfig.maxConcurrency = isOffPeak ? 8 : 3;\n\nreturn config;`,\n startUrlsFromFunction: `// Example: Create and load URLs from a Dataset by combining multiple fields\nconst dataset = await io.openDataset(datasetNameOrId);\nconst data = await dataset.getData();\nconst urls = data.items.map((item) => \\`https://example.com/u/\\${item.userId}/list/\\${item.listId}\\`);\nreturn urls;`,\n\n // Output\n outputTransform: `// Example: Add extra custom fields like aggregates\nreturn {\n ...entry,\n imagesCount: entry.images.length,\n};`,\n outputTransformBefore: `// Example: Fetch data or run code BEFORE entries are scraped.\nstate.categories = await sendRequest.get('https://example.com/my-categories').json();`,\n outputTransformAfter: `// Example: Fetch data or run code AFTER entries are scraped.\ndelete state.categories;`,\n outputFilter: `// Example: Filter entries based on number of images they have (at least 5)\nreturn entry.images.length > 5;`,\n outputFilterBefore: `// Example: Fetch data or run code BEFORE entries are scraped.\nstate.categories = await sendRequest.get('https://example.com/my-categories').json();`,\n outputFilterAfter: `// Example: Fetch data or run code AFTER entries are scraped.\ndelete state.categories;`,\n\n // Requests\n requestTransform: `// Example: Tag requests\n// (maybe because we use RequestQueue that pools multiple scrapers)\nrequest.userData.tag = \"VARIANT_A\";\nreturn requestQueue;`,\n requestTransformBefore: `// Example: Fetch data or run code BEFORE requests are processed.\nstate.categories = await sendRequest.get('https://example.com/my-categories').json();`,\n requestTransformAfter: `// Example: Fetch data or run code AFTER requests are processed.\ndelete state.categories;`,\n requestFilter: `// Example: Filter requests based on their tag\n// (maybe because we use RequestQueue that pools multiple scrapers)\nreturn request.userData.tag === \"VARIANT_A\";`,\n requestFilterBefore: `// Example: Fetch data or run code BEFORE requests are processed.\nstate.categories = await sendRequest.get('https://example.com/my-categories').json();`,\n requestFilterAfter: `// Example: Fetch data or run code AFTER requests are processed.\ndelete state.categories;`,\n};\n\n/** Common input fields related to actor input */\nexport const inputInput = {\n inputExtendUrl: createStringField({\n title: 'Extend Actor input from URL',\n type: 'string',\n editor: 'textfield',\n description: `Extend Actor input with a config from a URL.${newLine(1)}\n For example, you can store your actor input in a source control, and import it here.${newLine(1)}\n In case of a conflict (if a field is defined both in Actor input and in imported input) the Actor input overwrites the imported fields.${newLine(1)}\n The URL is requested with GET method, and must point to a JSON file containing a single object (the config).${newLine(1)}\n If you need to send a POST request or to modify the response further, use \\`inputExtendFromFunction\\` instead.`,\n example: 'https://raw.githubusercontent.com/jfairbank/programming-elm.com/master/cat-breeds.json',\n nullable: true,\n sectionCaption: 'Programmatic Input (Advanced)',\n sectionDescription:\n \"With these options you can configure other Actor options programmatically or from remote source.\",\n }), // prettier-ignore\n\n inputExtendFromFunction: createStringField({\n title: 'Extend Actor input from custom function',\n type: 'string',\n editor: 'javascript',\n description: `Extend Actor input with a config defined by a custom function.${newLine(1)}\n For example, you can store your actor input in a source control, and import it here.${newLine(1)}\n In case of a conflict (if a field is defined both in Actor input and in imported input) the Actor input overwrites the imported fields.${newLine(1)}\n The function must return an object (the config).`,\n example: createHookFnExample({}, CODE_EXAMPLES.inputExtendFromFunction, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.inputExtendFromFunction, true),\n nullable: true,\n }), // prettier-ignore\n} satisfies Record<keyof InputActorInput, Field>;\n\n/** Common input fields related to crawler setup */\nexport const crawlerInput = {\n maxRequestRetries: createIntegerField({\n title: 'maxRequestRetries',\n type: 'integer',\n description:\n 'Indicates how many times the request is retried if <a href=\"https://crawlee.dev/api/basic-crawler/interface/BasicCrawlerOptions#requestHandler\">BasicCrawlerOptions.requestHandler</a> fails.',\n example: 3,\n prefill: 3,\n minimum: 0,\n nullable: true,\n sectionCaption: 'Crawler configuration (Advanced)',\n sectionDescription:\n \"These options are applied directly to the Crawler. In majority of cases you don't need to change these. See https://crawlee.dev/api/basic-crawler/interface/BasicCrawlerOptions\",\n }),\n maxRequestsPerMinute: createIntegerField({\n title: 'maxRequestsPerMinute',\n type: 'integer',\n description:\n 'The maximum number of requests per minute the crawler should run. We can pass any positive, non-zero integer.',\n example: 120,\n prefill: 120,\n minimum: 1,\n nullable: true,\n }),\n maxRequestsPerCrawl: createIntegerField({\n title: 'maxRequestsPerCrawl',\n type: 'integer',\n description: `Maximum number of pages that the crawler will open. The crawl will stop when this limit is reached.\n ${newLine(1)} <strong>NOTE:</strong> In cases of parallel crawling, the actual number of pages visited might be slightly higher than this value.`,\n minimum: 1,\n nullable: true,\n }), // prettier-ignore\n minConcurrency: createIntegerField({\n title: 'minConcurrency',\n type: 'integer',\n description: `Sets the minimum concurrency (parallelism) for the crawl.${newLine(1)}\n <strong>WARNING:</strong> If we set this value too high with respect to the available system memory and CPU, our crawler will run extremely slow or crash. If not sure, it's better to keep the default value and the concurrency will scale up automatically.`,\n example: 1,\n prefill: 1,\n minimum: 1,\n nullable: true,\n }), // prettier-ignore\n maxConcurrency: createIntegerField({\n title: 'maxConcurrency',\n type: 'integer',\n description: 'Sets the maximum concurrency (parallelism) for the crawl.',\n minimum: 1,\n nullable: true,\n }),\n navigationTimeoutSecs: createIntegerField({\n title: 'navigationTimeoutSecs',\n type: 'integer',\n description:\n 'Timeout in which the HTTP request to the resource needs to finish, given in seconds.',\n minimum: 0,\n nullable: true,\n }),\n requestHandlerTimeoutSecs: createIntegerField({\n title: 'requestHandlerTimeoutSecs',\n type: 'integer',\n description:\n 'Timeout in which the function passed as <a href=\"https://crawlee.dev/api/basic-crawler/interface/BasicCrawlerOptions#requestHandler\">BasicCrawlerOptions.requestHandler</a> needs to finish, in seconds.',\n example: 180,\n prefill: 180,\n minimum: 0,\n nullable: true,\n }),\n keepAlive: createBooleanField({\n title: 'keepAlive',\n type: 'boolean',\n description:\n 'Allows to keep the crawler alive even if the RequestQueue gets empty. With keepAlive: true the crawler will keep running, waiting for more requests to come.',\n nullable: true,\n }),\n ignoreSslErrors: createBooleanField({\n title: 'ignoreSslErrors',\n type: 'boolean',\n description: 'If set to true, SSL certificate errors will be ignored.',\n nullable: true,\n }),\n additionalMimeTypes: createArrayField({\n title: 'additionalMimeTypes',\n type: 'array',\n description:\n 'An array of MIME types you want the crawler to load and process. By default, only text/html and application/xhtml+xml MIME types are supported.',\n editor: 'stringList',\n uniqueItems: true,\n nullable: true,\n }),\n suggestResponseEncoding: createStringField({\n title: 'suggestResponseEncoding',\n type: 'string',\n description:\n 'By default this crawler will extract correct encoding from the HTTP response headers. There are some websites which use invalid headers. Those are encoded using the UTF-8 encoding. If those sites actually use a different encoding, the response will be corrupted. You can use suggestResponseEncoding to fall back to a certain encoding, if you know that your target website uses it. To force a certain encoding, disregarding the response headers, use forceResponseEncoding.',\n editor: 'textfield',\n nullable: true,\n }),\n forceResponseEncoding: createStringField({\n title: 'forceResponseEncoding',\n type: 'string',\n description:\n 'By default this crawler will extract correct encoding from the HTTP response headers. Use forceResponseEncoding to force a certain encoding, disregarding the response headers. To only provide a default for missing encodings, use suggestResponseEncoding.',\n editor: 'textfield',\n nullable: true,\n }),\n} satisfies Record<keyof CrawlerConfigActorInput, Field>;\n\n/** Common input fields related to performance which are not part of the CrawlerConfig */\nexport const perfInput = {\n perfBatchSize: createIntegerField({\n title: 'Batch requests',\n type: 'integer',\n description: `If set, multiple Requests will be handled by a single Actor instance.${newLine(1)}\n Example: If set to 20, then up to 20 requests will be handled in a single \"go\", after which the actor instance will reset.${newLine(1)}\n <a href=\"https://docs.apify.com/platform/actors/development/performance#batch-jobs-win-over-the-single-jobs\">See Apify documentation</a>.`,\n example: 20,\n minimum: 0,\n nullable: true,\n sectionCaption: 'Performance configuration (Advanced)',\n sectionDescription: 'Standalone performance options. These are not passed to the Crawler.',\n }), // prettier-ignore\n perfBatchWaitSecs: createIntegerField({\n title: 'Wait (in seconds) between processing requests in a single batch',\n type: 'integer',\n description: `How long to wait between entries within a single batch.${newLine(1)}\n Increase this value if you're using batching and you're sending requests to the scraped website too fast.${newLine(1)}\n Example: If set to 1, then after each entry in a batch, wait 1 second before continuing.`,\n example: 1,\n minimum: 0,\n nullable: true,\n }), // prettier-ignore\n} satisfies Record<keyof PerfActorInput, Field>;\n\n/** Common input fields for defining URLs to scrape */\nexport const startUrlsInput = {\n startUrls: createArrayField({\n title: 'Start URLs',\n type: 'array',\n description: `List of URLs to scrape.`,\n editor: 'requestListSources',\n sectionCaption: 'Starting URLs',\n }),\n startUrlsFromDataset: createStringField({\n title: 'Start URLs from Dataset',\n type: 'string',\n editor: 'textfield',\n description: `Import URLs to scrape from an existing Dataset.${newLine(1)}\n The dataset and the field to import from should be written as \\`{datasetID}#{field}\\`.${newLine(1)}\n Example: \\`datasetid123#url\\` will take URLs from dataset \\`datasetid123\\` from field \\`url\\`.`,\n pattern: datasetIdWithFieldPattern,\n example: 'datasetid123#url',\n nullable: true,\n }), // prettier-ignore\n startUrlsFromFunction: createStringField({\n title: 'Start URLs from custom function',\n type: 'string',\n description: `Import or generate URLs to scrape using a custom function.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.startUrlsFromFunction, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.startUrlsFromFunction, true),\n nullable: true,\n }), // prettier-ignore\n} satisfies Record<keyof StartUrlsActorInput, Field>;\n\n/** Common input fields related to logging setup */\nexport const loggingInput = {\n logLevel: createStringField<LogLevel>({\n title: 'Log Level',\n type: 'string',\n editor: 'select',\n description: 'Select how detailed should be the logging.',\n enum: ['off', 'debug', 'info', 'warn', 'error'] satisfies LogLevel[],\n enumTitles: [\n 'No logging (off)',\n 'Debug and higher priority',\n 'Info and higher priority',\n 'Warning and higher priority',\n 'Error and higher priority',\n ],\n example: 'info',\n prefill: 'info',\n default: 'info',\n nullable: true,\n sectionCaption: 'Logging & Error handling (Advanced)',\n sectionDescription:\n 'Configure how to handle errors or what should be displayed in the log console.',\n }),\n errorReportingDatasetId: createStringField({\n title: 'Error reporting dataset ID',\n type: 'string',\n editor: 'textfield',\n description: `Dataset ID to which errors should be captured.${newLine(1)}\n Default: \\`'REPORTING'\\`.${newLine(1)}\n <strong>NOTE:</strong> Dataset name can only contain letters 'a' through 'z', the digits '0' through '9', and the hyphen ('-') but only in the middle of the string (e.g. 'my-value-1')`,\n example: 'REPORTING',\n prefill: 'REPORTING',\n default: 'REPORTING',\n pattern: datasetIdPattern,\n nullable: true,\n }),\n errorTelemetry: createBooleanField({\n title: 'Send errors to telemetry service like Sentry',\n type: 'boolean',\n editor: 'checkbox',\n description: `Whether to report actor errors to telemetry such as <a href=\"https://sentry.io/\">Sentry</a>.${newLine(1)}\n This info is used by the author of this actor to identify broken integrations,\n and track down and fix issues.`,\n example: true,\n default: true,\n nullable: true,\n }), // prettier-ignore\n} satisfies Record<keyof LoggingActorInput, Field>;\n\n/** Common input fields related to proxy setup */\nexport const proxyInput = {\n proxy: createObjectField({\n title: 'Proxy configuration',\n type: 'object',\n description: 'Select proxies to be used by your crawler.',\n editor: 'proxy',\n sectionCaption: 'Proxy',\n sectionDescription: 'Configure the proxy',\n }),\n} satisfies Record<keyof ProxyActorInput, Field>;\n\n/** Common input fields related to proxy setup */\nexport const privacyInput = {\n includePersonalData: createBooleanField({\n title: 'Include personal data',\n type: 'boolean',\n description: `By default, fields that are potential personal data are censored. Toggle this option on to get the un-uncensored values.${newLine(1)}\n <strong>WARNING:</strong> Turn this on ONLY if you have consent, legal basis for using the data, or at your own risk. <a href=\"https://gdpr.eu/eu-gdpr-personal-data/\">Learn more</a>`,\n default: false,\n example: false,\n nullable: true,\n sectionCaption: 'Privacy & Data governance (GDPR)',\n }), // prettier-ignore\n} satisfies Record<keyof PrivacyActorInput, Field>;\n\n/** Common input fields related to actor request */\nexport const requestInput = {\n requestMaxEntries: createIntegerField({\n title: 'Limit the number of requests',\n type: 'integer',\n description: `If set, only at most this many requests will be processed.${newLine(1)}\n The count is determined from the RequestQueue that's used for the Actor run.${newLine(1)}\n This means that if \\`requestMaxEntries\\` is set to 50, but the associated queue already handled 40 requests, then only 10 new requests will be handled.`,\n example: 50,\n prefill: 50,\n minimum: 0,\n nullable: true,\n sectionCaption: 'Requests limit, transformation & filtering (Advanced)',\n }), // prettier-ignore\n\n requestTransform: createStringField({\n title: 'Transform requests',\n type: 'string',\n description: `Freely transform the request object using a custom function.${newLine(1)}\n If not set, the request will remain as is.`,\n editor: 'javascript',\n example: createHookFnExample({ request: 'Request holding URL to be scraped' }, CODE_EXAMPLES.requestTransform, false),\n prefill: createHookFnExample({ request: 'Request holding URL to be scraped' }, CODE_EXAMPLES.requestTransform, true),\n nullable: true,\n }), // prettier-ignore\n requestTransformBefore: createStringField({\n title: 'Transform requests - Setup',\n type: 'string',\n description: `Use this if you need to run one-time initialization code before \\`requestTransform\\`.`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.requestTransformBefore, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.requestTransformBefore, true),\n nullable: true,\n }), // prettier-ignore\n requestTransformAfter: createStringField({\n title: 'Transform requests - Teardown',\n type: 'string',\n description: `Use this if you need to run one-time teardown code after \\`requestTransform\\`.`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.requestTransformAfter, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.requestTransformAfter, true),\n nullable: true,\n }), // prettier-ignore\n\n requestFilter: createStringField({\n title: 'Filter requests',\n type: 'string',\n description: `Decide which requests should be processed by using a custom function.${newLine(1)}\n If not set, all requests will be included.${newLine(1)}\n This is done after \\`requestTransform\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({ request: 'Request holding URL to be scraped' }, CODE_EXAMPLES.requestFilter, false),\n prefill: createHookFnExample({ request: 'Request holding URL to be scraped' }, CODE_EXAMPLES.requestFilter, true),\n nullable: true,\n }), // prettier-ignore\n requestFilterBefore: createStringField({\n title: 'Filter requests - Setup',\n type: 'string',\n description: `Use this if you need to run one-time initialization code before \\`requestFilter\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.requestFilterBefore, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.requestFilterBefore, true),\n nullable: true,\n }), // prettier-ignore\n requestFilterAfter: createStringField({\n title: 'Filter requests - Teardown',\n type: 'string',\n description: `Use this if you need to run one-time teardown code after \\`requestFilter\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.requestFilterAfter, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.requestFilterAfter, true),\n nullable: true,\n }), // prettier-ignore\n\n requestQueueId: createStringField({\n title: 'RequestQueue ID',\n type: 'string',\n description: `By default, requests are stored in the default request queue.\n Set this option if you want to use a non-default queue.\n <a href=\"https://docs.apify.com/sdk/python/docs/concepts/storages#opening-named-and-unnamed-storages\">Learn more</a>${newLine(1)}\n <strong>NOTE:</strong> RequestQueue name can only contain letters 'a' through 'z', the digits '0' through '9', and the hyphen ('-') but only in the middle of the string (e.g. 'my-value-1')`,\n editor: 'textfield',\n example: 'mIJVZsRQrDQf4rUAf',\n pattern: datasetIdPattern,\n nullable: true,\n }), // prettier-ignore\n} satisfies Record<keyof RequestActorInput, Field>;\n\n/** Common input fields related to actor output */\nexport const outputInput = {\n outputMaxEntries: createIntegerField({\n title: 'Limit the number of scraped entries',\n type: 'integer',\n description: `If set, only at most this many entries will be scraped.${newLine(1)}\n The count is determined from the Dataset that's used for the Actor run.${newLine(1)}\n This means that if \\`outputMaxEntries\\` is set to 50, but the associated Dataset already has 40 items in it, then only 10 new entries will be saved.`,\n example: 50,\n prefill: 50,\n minimum: 0,\n nullable: true,\n sectionCaption: 'Output size, transformation & filtering (T in ETL) (Advanced)',\n }),\n outputRenameFields: createObjectField({\n title: 'Rename dataset fields',\n type: 'object',\n description: `Rename fields (columns) of the output data.${newLine(1)}\n If not set, all fields will have their original names.${newLine(1)}\n This is done before \\`outputPickFields\\`.${newLine(1)}\n Keys can be nested, e.g. \\`\"someProp.value[0]\"\\`.\n Nested path is resolved using <a href=\"https://lodash.com/docs/4.17.15#get\">Lodash.get()</a>.`,\n editor: 'json',\n example: { oldFieldName: 'newFieldName' },\n nullable: true,\n }),\n outputPickFields: createArrayField({\n title: 'Pick dataset fields',\n type: 'array',\n description: `Select a subset of fields of an entry that will be pushed to the dataset.${newLine(1)}\n If not set, all fields on an entry will be pushed to the dataset.${newLine(1)}\n This is done after \\`outputRenameFields\\`.${newLine(1)}\n Keys can be nested, e.g. \\`\"someProp.value[0]\"\\`.\n Nested path is resolved using <a href=\"https://lodash.com/docs/4.17.15#get\">Lodash.get()</a>.`,\n editor: 'stringList',\n example: ['fieldName', 'another.nested[0].field'],\n nullable: true,\n }), // prettier-ignore\n\n outputTransform: createStringField({\n title: 'Transform entries',\n type: 'string',\n description: `Freely transform the output data object using a custom function.${newLine(1)}\n If not set, the data will remain as is.${newLine(1)}\n This is done after \\`outputPickFields\\` and \\`outputRenameFields\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({ entry: 'Scraped entry' }, CODE_EXAMPLES.outputTransform, false),\n prefill: createHookFnExample({ entry: 'Scraped entry' }, CODE_EXAMPLES.outputTransform, true),\n nullable: true,\n }), // prettier-ignore\n outputTransformBefore: createStringField({\n title: 'Transform entries - Setup',\n type: 'string',\n description: `Use this if you need to run one-time initialization code before \\`outputTransform\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.outputTransformBefore, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.outputTransformBefore, true),\n nullable: true,\n }), // prettier-ignore\n outputTransformAfter: createStringField({\n title: 'Transform entries - Teardown',\n type: 'string',\n description: `Use this if you need to run one-time teardown code after \\`outputTransform\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.outputTransformAfter, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.outputTransformAfter, true),\n nullable: true,\n }), // prettier-ignore\n\n outputFilter: createStringField({\n title: 'Filter entries',\n type: 'string',\n description: `Decide which scraped entries should be included in the output by using a custom function.${newLine(1)}\n If not set, all scraped entries will be included.${newLine(1)}\n This is done after \\`outputPickFields\\`, \\`outputRenameFields\\`, and \\`outputTransform\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({ entry: 'Scraped entry' }, CODE_EXAMPLES.outputFilter, false),\n prefill: createHookFnExample({ entry: 'Scraped entry' }, CODE_EXAMPLES.outputFilter, true),\n nullable: true,\n }), // prettier-ignore\n outputFilterBefore: createStringField({\n title: 'Filter entries - Setup',\n type: 'string',\n description: `Use this if you need to run one-time initialization code before \\`outputFilter\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.outputFilterBefore, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.outputFilterBefore, true),\n nullable: true,\n }), // prettier-ignore\n outputFilterAfter: createStringField({\n title: 'Filter entries - Teardown',\n type: 'string',\n description: `Use this if you need to run one-time teardown code after \\`outputFilter\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.outputFilterAfter, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.outputFilterAfter, true),\n nullable: true,\n }), // prettier-ignore\n\n outputDatasetId: createStringField({\n title: 'Dataset ID',\n type: 'string',\n description: `By default, data is written to Default dataset.\n Set this option if you want to write data to non-default dataset.\n <a href=\"https://docs.apify.com/sdk/python/docs/concepts/storages#opening-named-and-unnamed-storages\">Learn more</a>${newLine(1)}\n <strong>NOTE:</strong> Dataset name can only contain letters 'a' through 'z', the digits '0' through '9', and the hyphen ('-') but only in the middle of the string (e.g. 'my-value-1')`,\n editor: 'textfield',\n example: 'mIJVZsRQrDQf4rUAf',\n pattern: datasetIdPattern,\n nullable: true,\n sectionCaption: 'Output Dataset & Caching (L in ETL) (Advanced)',\n }), // prettier-ignore\n\n outputCacheStoreId: createStringField({\n title: 'Cache ID',\n type: 'string',\n description: `Set this option if you want to cache scraped entries in <a href=\"https://docs.apify.com/sdk/js/docs/guides/result-storage#key-value-store\">Apify's Key-value store</a>.${newLine(1)}\n This is useful for example when you want to scrape only NEW entries. In such case, you can use the \\`outputFilter\\` option to define a custom function to filter out entries already found in the cache.\n <a href=\"https://docs.apify.com/sdk/python/docs/concepts/storages#working-with-key-value-stores\">Learn more</a>${newLine(1)}\n <strong>NOTE:</strong> Cache name can only contain letters 'a' through 'z', the digits '0' through '9', and the hyphen ('-') but only in the middle of the string (e.g. 'my-value-1')`,\n editor: 'textfield',\n example: 'mIJVZsRQrDQf4rUAf',\n pattern: datasetIdPattern,\n nullable: true,\n }), // prettier-ignore\n outputCachePrimaryKeys: createArrayField<string[]>({\n title: 'Cache primary keys',\n type: 'array',\n description: `Specify fields that uniquely identify entries (primary keys), so entries can be compared against the cache.${newLine(1)}\n <strong>NOTE:</strong> If not set, the entries are hashed based on all fields`,\n editor: 'stringList',\n example: ['name', 'city'],\n nullable: true,\n }), // prettier-ignore\n outputCacheActionOnResult: createStringField<\n NonNullable<OutputActorInput['outputCacheActionOnResult']>\n >({\n title: 'Cache action on result',\n type: 'string',\n description: `Specify whether scraped results should be added to, removed from, or overwrite the cache.${newLine(1)}\n - <strong>add<strong> - Adds scraped results to the cache${newLine(1)}\n - <strong>remove<strong> - Removes scraped results from the cache${newLine(1)}\n - <strong>set<strong> - First clears all entries from the cache, then adds scraped results to the cache${newLine(1)}\n <strong>NOTE:</strong> No action happens when this field is empty.`,\n editor: 'select',\n enum: ['add', 'remove', 'overwrite'],\n example: 'add',\n nullable: true,\n }), // prettier-ignore\n} satisfies Record<keyof OutputActorInput, Field>;\n\n/** Common input fields related to actor metamorphing */\nexport const metamorphInput = {\n metamorphActorId: createStringField({\n title: 'Metamorph actor ID - metamorph to another actor at the end',\n type: 'string',\n description: `Use this option if you want to run another actor with the same dataset after this actor has finished (AKA metamorph into another actor). <a href=\"https://docs.apify.com/sdk/python/docs/concepts/interacting-with-other-actors#actormetamorph\">Learn more</a> ${newLine(1)}\n New actor is identified by its ID, e.g. \"apify/web-scraper\".`,\n editor: 'textfield',\n example: 'apify/web-scraper',\n nullable: true,\n sectionCaption: 'Integrations (Metamorphing) (Advanced)',\n }), // prettier-ignore\n metamorphActorBuild: createStringField({\n title: 'Metamorph actor build',\n type: 'string',\n description: `Tag or number of the target actor build to metamorph into (e.g. 'beta' or '1.2.345')`,\n editor: 'textfield',\n example: '1.2.345',\n nullable: true,\n }),\n metamorphActorInput: createObjectField({\n title: 'Metamorph actor input',\n type: 'object',\n description: `Input object passed to the follow-up (metamorph) actor. <a href=\"https://docs.apify.com/sdk/python/docs/concepts/interacting-with-other-actors#actormetamorph\">Learn more</a>`,\n editor: 'json',\n example: { uploadDatasetToGDrive: true },\n nullable: true,\n }),\n} satisfies Record<keyof MetamorphActorInput, Field>;\n\nexport const allActorInputs = {\n ...inputInput,\n ...startUrlsInput,\n ...proxyInput,\n ...privacyInput,\n ...requestInput,\n ...outputInput,\n ...crawlerInput,\n ...perfInput,\n ...loggingInput,\n ...metamorphInput,\n} satisfies Record<keyof AllActorInputs, Field>;\n\nexport const crawlerInputValidationFields = {\n navigationTimeoutSecs: Joi.number().integer().min(0).optional(),\n ignoreSslErrors: Joi.boolean().optional(),\n additionalMimeTypes: Joi.array().items(Joi.string().min(1)).optional(),\n suggestResponseEncoding: Joi.string().min(1).optional(),\n forceResponseEncoding: Joi.string().min(1).optional(),\n requestHandlerTimeoutSecs: Joi.number().integer().min(0).optional(),\n maxRequestRetries: Joi.number().integer().min(0).optional(),\n maxRequestsPerCrawl: Joi.number().integer().min(0).optional(),\n maxRequestsPerMinute: Joi.number().integer().min(0).optional(),\n minConcurrency: Joi.number().integer().min(0).optional(),\n maxConcurrency: Joi.number().integer().min(0).optional(),\n keepAlive: Joi.boolean().optional(),\n} satisfies Record<keyof CrawlerConfigActorInput, Joi.Schema>;\n\nexport const perfInputValidationFields = {\n perfBatchSize: Joi.number().integer().min(0).optional(),\n perfBatchWaitSecs: Joi.number().integer().min(0).optional(),\n} satisfies Record<keyof PerfActorInput, Joi.Schema>;\n\nexport const inputInputValidationFields = {\n inputExtendUrl: Joi.string().min(1).uri().optional(),\n inputExtendFromFunction: Joi.string().min(1).optional(),\n} satisfies Record<keyof InputActorInput, Joi.Schema>;\n\nexport const startUrlsInputValidationFields = {\n startUrls: Joi.array().items(Joi.string().min(1), Joi.object()).optional(),\n startUrlsFromDataset: Joi.string().min(1).pattern(new RegExp(datasetIdWithFieldPattern)).optional(), // prettier-ignore\n startUrlsFromFunction: Joi.string().min(1).optional(),\n} satisfies Record<keyof StartUrlsActorInput, Joi.Schema>;\n\nexport const loggingInputValidationFields = {\n logLevel: Joi.string().valid(...LOG_LEVEL).optional(), // prettier-ignore\n errorReportingDatasetId: Joi.string().min(1).pattern(new RegExp(datasetIdPattern)).optional(), // prettier-ignore\n errorTelemetry: Joi.boolean().optional(),\n} satisfies Record<keyof LoggingActorInput, Joi.Schema>;\n\nexport const proxyInputValidationFields = {\n proxy: Joi.object().optional(), // NOTE: Expand this type?\n} satisfies Record<keyof ProxyActorInput, Joi.Schema>;\n\nexport const privacyInputValidationFields = {\n includePersonalData: Joi.boolean().optional(),\n} satisfies Record<keyof PrivacyActorInput, Joi.Schema>;\n\nexport const requestInputValidationFields = {\n requestMaxEntries: Joi.number().integer().min(0).optional(),\n\n requestTransform: Joi.string().min(1).optional(),\n requestTransformBefore: Joi.string().min(1).optional(),\n requestTransformAfter: Joi.string().min(1).optional(),\n requestFilter: Joi.string().min(1).optional(),\n requestFilterBefore: Joi.string().min(1).optional(),\n requestFilterAfter: Joi.string().min(1).optional(),\n\n requestQueueId: Joi.string().min(1).pattern(new RegExp(datasetIdPattern)).optional(), // prettier-ignore\n} satisfies Record<keyof RequestActorInput, Joi.Schema>;\n\nexport const outputInputValidationFields = {\n outputMaxEntries: Joi.number().integer().min(0).optional(),\n\n outputPickFields: Joi.array().items(Joi.string().min(1)).optional(),\n // https://stackoverflow.com/a/49898360/9788634\n outputRenameFields: Joi.object().pattern(/./, Joi.string().min(1)).optional(),\n\n outputTransform: Joi.string().min(1).optional(),\n outputTransformBefore: Joi.string().min(1).optional(),\n outputTransformAfter: Joi.string().min(1).optional(),\n outputFilter: Joi.string().min(1).optional(),\n outputFilterBefore: Joi.string().min(1).optional(),\n outputFilterAfter: Joi.string().min(1).optional(),\n\n outputCacheStoreId: Joi.string().min(1).pattern(new RegExp(datasetIdPattern)).optional(), // prettier-ignore\n outputCachePrimaryKeys: Joi.array().items(Joi.string().min(1)).optional(),\n outputCacheActionOnResult: Joi.string().min(1).allow('add', 'remove', 'overwrite').optional(), // prettier-ignore\n\n outputDatasetId: Joi.string().min(1).pattern(new RegExp(datasetIdPattern)).optional(), // prettier-ignore\n} satisfies Record<keyof OutputActorInput, Joi.Schema>;\n\nexport const metamorphInputValidationFields = {\n metamorphActorId: Joi.string().min(1).optional(),\n metamorphActorBuild: Joi.string().min(1).optional(),\n metamorphActorInput: Joi.object().unknown(true).optional(),\n} satisfies Record<keyof MetamorphActorInput, Joi.Schema>;\n\nexport const allActorInputValidationFields = {\n ...inputInputValidationFields,\n ...startUrlsInputValidationFields,\n ...proxyInputValidationFields,\n ...privacyInputValidationFields,\n ...requestInputValidationFields,\n ...outputInputValidationFields,\n ...crawlerInputValidationFields,\n ...perfInputValidationFields,\n ...loggingInputValidationFields,\n ...metamorphInputValidationFields,\n} satisfies Record<keyof AllActorInputs, Joi.Schema>;\n"]}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/lib/input.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Actor } from 'apify';\nimport type { CheerioCrawlerOptions } from 'crawlee';\nimport {\n createBooleanField,\n createIntegerField,\n createObjectField,\n createStringField,\n createArrayField,\n Field,\n} from 'apify-actor-config';\nimport Joi from 'joi';\n\nimport type { CrawlerUrl } from '../types';\nimport { LOG_LEVEL, LogLevel } from './log';\nimport type { CrawleeOneHookFn } from './actor/types';\n\nexport type AllActorInputs = InputActorInput &\n CrawlerConfigActorInput &\n PerfActorInput &\n StartUrlsActorInput &\n LoggingActorInput &\n ProxyActorInput &\n PrivacyActorInput &\n RequestActorInput &\n OutputActorInput &\n MetamorphActorInput;\n\n/** Crawler config fields that can be overriden from the actor input */\nexport type CrawlerConfigActorInput = Pick<\n CheerioCrawlerOptions,\n | 'navigationTimeoutSecs'\n | 'ignoreSslErrors'\n | 'additionalMimeTypes'\n | 'suggestResponseEncoding'\n | 'forceResponseEncoding'\n | 'requestHandlerTimeoutSecs'\n | 'maxRequestRetries'\n | 'maxRequestsPerCrawl'\n | 'maxRequestsPerMinute'\n | 'minConcurrency'\n | 'maxConcurrency'\n | 'keepAlive'\n>;\n\n/** Common input fields related to extending Actor input with remote or generated data */\nexport interface InputActorInput {\n /**\n * If set, the Actor input is extended with a config from this URL.\n *\n * For example, you can store your actor input in a source control, and import it here.\n *\n * In case of a conflict (if a field is defined both in Actor input and in imported input)\n * the Actor input overwrites the imported fields.\n *\n * The URL must point to a JSON file containing a single object (the config).\n */\n inputExtendUrl?: string;\n /**\n * If set, the Actor input is extended with a config from this custom function.\n *\n * For example, you can store your actor input in a source control, and import it here.\n *\n * In case of a conflict (if a field is defined both in Actor input and in imported input)\n * the Actor input overwrites the imported fields.\n *\n * The URL must point to a JSON file containing a single object (the config).\n */\n inputExtendFromFunction?: string | CrawleeOneHookFn<[], AllActorInputs>;\n}\n\n/** Common input fields related to performance which are not part of the CrawlerConfig */\nexport interface PerfActorInput {\n /**\n * If set, multiple Requests will be handled by a single Actor instance.\n *\n * See official docs: https://docs.apify.com/platform/actors/development/performance#batch-jobs-win-over-the-single-jobs\n *\n * Example: If set to 20, then up to 20 requests will be handled in a single \"go\".\n */\n perfBatchSize?: number;\n /**\n * How long to wait between entries within a single batch.\n *\n * Increase this value if you're using batching and you're sending requests to the scraped website too fast.\n *\n * Example: If set to 1, then after each entry in a batch, wait 1 second before continuing.\n */\n perfBatchWaitSecs?: number;\n}\n\n/** Common input fields for defining URLs to scrape */\nexport interface StartUrlsActorInput {\n /** URLs to start with, defined manually as a list of strings or crawler requests */\n startUrls?: CrawlerUrl[];\n /**\n * Import starting URLs from an existing Dataset.\n *\n * String is in the format `datasetID#field` (e.g. `datasetid123#url`).\n */\n startUrlsFromDataset?: string;\n /**\n * Import or generate starting URLs using a custom function.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * ```js\n * // Example: Create and load URLs from a Dataset by combining multiple fields\n * async ({ io, input, state, itemCacheKey }) => {\n * const dataset = await io.openDataset(datasetNameOrId);\n * const data = await dataset.getData();\n * const urls = data.items.map((item) => `https://example.com/u/${item.userId}/list/${item.listId}`);\n * return urls;\n * }\n * ```\n */\n startUrlsFromFunction?: string | CrawleeOneHookFn<[], CrawlerUrl[]>;\n}\n\n/** Common input fields related to logging setup */\nexport interface LoggingActorInput {\n logLevel?: LogLevel;\n /**\n * Whether to report actor errors to telemetry such as <a href=\"https://sentry.io/\">Sentry</a>.\n *\n * This info is used by the author of this actor to identify broken integrations,\n * and track down and fix issues.\n */\n errorTelemetry?: boolean;\n /**\n * Dataset ID to which errors should be captured.\n *\n * Default: `'REPORTING'`.\n */\n errorReportingDatasetId?: string;\n}\n\n/** Common input fields related to proxy setup */\nexport interface ProxyActorInput {\n proxy?: Parameters<Actor['createProxyConfiguration']>[0];\n}\n\n/** Common input fields related to actor requests */\nexport interface RequestActorInput {\n /**\n * If set, only at most this many requests will be scraped.\n *\n * The count is determined from the RequestQueue that's used for the Actor run.\n *\n * This means that if `requestMaxEntries` is set to 50, but the\n * associated RequestQueue already handled 40 requests, then only 10 new requests\n * will be handled.\n */\n requestMaxEntries?: number;\n\n /**\n * Option to freely transform a request using a custom function before pushing it to the RequestQueue.\n *\n * If not set, the request will remain as is.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the second argument.\n *\n * `async (entry, { io, input, state, itemCacheKey }) => { ... }`\n */\n requestTransform?:\n | string\n | CrawleeOneHookFn<[Exclude<CrawlerUrl, string>], Exclude<CrawlerUrl, string>>;\n /**\n * Use this if you need to run one-time initialization code before `requestTransform`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => { ... }`\n */\n requestTransformBefore?: string | CrawleeOneHookFn;\n /**\n * Use this if you need to run one-time teardown code after `requestTransform`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => { ... }`\n */\n requestTransformAfter?: string | CrawleeOneHookFn;\n\n /**\n * Option to filter a request using a custom function before pushing it to the RequestQueue.\n *\n * If not set, all requests will be included.\n *\n * This is done after `requestTransform`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the second argument.\n *\n * `async (entry, { io, input, state, itemCacheKey }) => boolean`\n */\n requestFilter?: string | CrawleeOneHookFn<[Exclude<CrawlerUrl, string>], unknown>;\n /**\n * Use this if you need to run one-time initialization code before `requestFilter`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => boolean`\n */\n requestFilterBefore?: string | CrawleeOneHookFn;\n /**\n * Use this if you need to run one-time initialization code after `requestFilter`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => boolean`\n */\n requestFilterAfter?: string | CrawleeOneHookFn;\n\n /** ID of the RequestQueue to which the requests should be pushed */\n requestQueueId?: string;\n}\n\n/** Common input fields related to actor output */\nexport interface OutputActorInput {\n /**\n * If set, only at most this many entries will be scraped.\n *\n * The count is determined from the Dataset that's used for the Actor run.\n *\n * This means that if `outputMaxEntries` is set to 50, but the\n * associated Dataset already has 40 items in it, then only 10 new entries\n * will be saved.\n */\n outputMaxEntries?: number;\n /**\n * Option to select a subset of keys/fields of an entry that\n * will be pushed to the dataset.\n *\n * If not set, all fields on an entry will be pushed to the dataset.\n *\n * This is done after `outputRenameFields`.\n *\n * Keys can be nested, e.g. `\"someProp.value[0]\"`. Nested path is\n * resolved using Lodash.get().\n */\n outputPickFields?: string[];\n /**\n * Option to remap the keys before pushing the entries to the dataset.\n *\n * This is done before `outputRenameFields`.\n *\n * Keys can be nested, e.g. `\"someProp.value[0]\"`. Nested path is\n * resolved using Lodash.get().\n */\n outputRenameFields?: Record<string, string>;\n\n /**\n * Option to freely transform the output data object using a custom function before pushing it to the dataset.\n *\n * If not set, the data will remain as is.\n *\n * This is done after `outputPickFields` and `outputRenameFields`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the second argument.\n *\n * `async (entry, { io, input, state, itemCacheKey }) => { ... }`\n */\n outputTransform?: string | CrawleeOneHookFn<[item: any], any>;\n /**\n * Use this if you need to run one-time initialization code before `outputTransform`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => { ... }`\n */\n outputTransformBefore?: string | CrawleeOneHookFn;\n /**\n * Use this if you need to run one-time teardown code after `outputTransform`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => { ... }`\n */\n outputTransformAfter?: string | CrawleeOneHookFn;\n\n /**\n * Option to filter out the data using a custom function before pushing it to the dataset.\n *\n * If not set, all entries will be included.\n *\n * This is done after `outputPickFields`, `outputRenameFields`, and `outputTransform`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the second argument.\n *\n * `async (entry, { io, input, state, itemCacheKey }) => boolean`\n */\n outputFilter?: string | CrawleeOneHookFn<[item: any], any>;\n /**\n * Use this if you need to run one-time initialization code before `outputFilter`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => boolean`\n */\n outputFilterBefore?: string | CrawleeOneHookFn;\n /**\n * Use this if you need to run one-time initialization code after `outputFilter`.\n *\n * The function has access to Apify's Actor class (under variable `io`), and actor's input\n * and a shared state in the first argument.\n *\n * `async ({ io, input, state, itemCacheKey }) => boolean`\n */\n outputFilterAfter?: string | CrawleeOneHookFn;\n\n /** ID or name of the dataset to which the data should be pushed */\n outputDatasetId?: string;\n\n /** ID or name of the key-value store used as cache */\n outputCacheStoreId?: string;\n /** Define fields that will be used for cache key */\n outputCachePrimaryKeys?: string[];\n /** Define whether we want to add, remove, or overwrite cached entries with results from the actor run */\n outputCacheActionOnResult?: 'add' | 'remove' | 'overwrite' | null;\n}\n\n/** Common input fields related to actor metamorphing */\nexport interface MetamorphActorInput {\n /**\n * If you want to run another actor with the same dataset after\n * this actor has finished (AKA metamorph into another actor),\n * then set the ID of the target actor.\n *\n * See https://docs.apify.com/sdk/python/docs/concepts/interacting-with-other-actors#actormetamorph\n */\n metamorphActorId?: string;\n /**\n * Tag or number of the target actor build to metamorph into (e.g. `beta` or `1.2.345`).\n *\n * See https://docs.apify.com/sdk/python/docs/concepts/interacting-with-other-actors#actormetamorph\n */\n metamorphActorBuild?: string;\n /**\n * Input passed to the follow-up (metamorph) actor.\n *\n * See https://docs.apify.com/sdk/python/docs/concepts/interacting-with-other-actors#actormetamorph\n */\n metamorphActorInput?: object;\n}\n\n/** Common input fields related to privacy setup */\nexport interface PrivacyActorInput {\n includePersonalData?: boolean;\n}\n\nconst datasetIdPattern = '^[a-zA-Z0-9][a-zA-Z0-9-]*$';\nconst datasetIdWithFieldPattern = `${datasetIdPattern.slice(0, -1)}#.+$`;\n\nconst newLine = (n: number) => '<br/>'.repeat(n);\n\nconst createHookFnExample = (\n args: Record<string, string>,\n mainCode: string,\n includeGuides: boolean\n) => {\n const formattedArgs = Object.keys(args).length ? Object.keys(args).join(', ') + ', ' : '';\n const formattedArgDesc = Object.entries(args).length\n ? Object.entries(args).map(([arg, desc]) => ` * \\`${arg}\\` - ${desc}.`)\n : ` *`;\n const formattedMainCode = mainCode\n .split('\\n')\n .map((s) => '// ' + s)\n .join('\\n');\n\n const guides = `//\n// /* ========== SEE BELOW FOR MORE EXAMPLES ========= */\n//\n// /**\n// * ======= ACCESSING DATASET ========\n// * To save/load/access entries in Dataset.\n// * Docs:\n// * - https://docs.apify.com/platform/storage/dataset\n// * - https://docs.apify.com/sdk/js/docs/guides/result-storage#dataset\n// * - https://docs.apify.com/sdk/js/docs/examples/map-and-reduce\n// */\n// // const dataset = await io.openDataset('MyDatasetId');\n// // const info = await dataset.getInfo();\n// // console.log(info.itemCount);\n// // // => 0\n//\n// /**\n// * ======= ACCESSING REMOTE DATA ========\n// * Use \\`sendRequest\\` to get data from the internet:\n// * Docs:\n// * - https://github.com/apify/got-scraping\n// */\n// // const catFact = await sendRequest.get('https://cat-fact.herokuapp.com/facts/5887e1d85c873e0011036889').json();\n// // console.log(catFact.text);\n// // // => \"Cats make about 100 different sounds. Dogs make only about 10.\",\n//\n// /**\n// * ======= USING CACHE ========\n// * To save the entry to the KeyValue cache (or retrieve it), you can use\n// * \\`itemCacheKey\\` to create the entry's ID for you:\n// */\n// // const cacheId = itemCacheKey(item, input.cachePrimaryKeys);\n// // const cache = await io.openKeyValueStore('MyStoreId');\n// // cache.setValue(cacheId, entry);`;\n\n const hookFnExample = `\n/**\n * Inputs:\n${formattedArgDesc}\n * \\`ctx.io\\` - Instance of CrawleeOneIO that manages results (Dataset), Requests (RequestQueue), and cache (KeyValueStore). By default this is the Apify Actor class, see https://docs.apify.com/sdk/js/reference/class/Actor.\n * \\`ctx.input\\` - The input object that was passed to this Actor.\n * \\`ctx.state\\` - An object you can use to persist state across all your custom functions.\n * \\`ctx.sendRequest\\` - Fetch remote data. Uses 'got-scraping', same as Apify's \\`sendRequest\\`.\n * See https://crawlee.dev/docs/guides/got-scraping\n * \\`ctx.itemCacheKey\\` - A function you can use to get cacheID for current \\`entry\\`.\n * It takes the entry itself, and a list of properties to be used for hashing.\n * By default, you should pass \\`input.cachePrimaryKeys\\` to it.\n *\n */\n// async (${formattedArgs}{ io, input, state, sendRequest, itemCacheKey }) => {\n${formattedMainCode}\n${includeGuides ? guides : '//'}\n// };`;\n return hookFnExample;\n};\n\nconst CODE_EXAMPLES = {\n // Input\n inputExtendFromFunction: `// Example: Load Actor config from GitHub URL (public)\nconst config = await sendRequest.get('https://raw.githubusercontent.com/username/project/main/config.json').json();\n\n// Increase concurrency during off-peak hours\n// NOTE: Imagine we're targetting a small server, that can be slower during the day\nconst hours = new Date().getUTCHours();\nconst isOffPeak = hours < 6 || hours > 20;\nconfig.maxConcurrency = isOffPeak ? 8 : 3;\n\nreturn config;`,\n startUrlsFromFunction: `// Example: Create and load URLs from a Dataset by combining multiple fields\nconst dataset = await io.openDataset(datasetNameOrId);\nconst data = await dataset.getData();\nconst urls = data.items.map((item) => \\`https://example.com/u/\\${item.userId}/list/\\${item.listId}\\`);\nreturn urls;`,\n\n // Output\n outputTransform: `// Example: Add extra custom fields like aggregates\nreturn {\n ...entry,\n imagesCount: entry.images.length,\n};`,\n outputTransformBefore: `// Example: Fetch data or run code BEFORE entries are scraped.\nstate.categories = await sendRequest.get('https://example.com/my-categories').json();`,\n outputTransformAfter: `// Example: Fetch data or run code AFTER entries are scraped.\ndelete state.categories;`,\n outputFilter: `// Example: Filter entries based on number of images they have (at least 5)\nreturn entry.images.length > 5;`,\n outputFilterBefore: `// Example: Fetch data or run code BEFORE entries are scraped.\nstate.categories = await sendRequest.get('https://example.com/my-categories').json();`,\n outputFilterAfter: `// Example: Fetch data or run code AFTER entries are scraped.\ndelete state.categories;`,\n\n // Requests\n requestTransform: `// Example: Tag requests\n// (maybe because we use RequestQueue that pools multiple scrapers)\nrequest.userData.tag = \"VARIANT_A\";\nreturn requestQueue;`,\n requestTransformBefore: `// Example: Fetch data or run code BEFORE requests are processed.\nstate.categories = await sendRequest.get('https://example.com/my-categories').json();`,\n requestTransformAfter: `// Example: Fetch data or run code AFTER requests are processed.\ndelete state.categories;`,\n requestFilter: `// Example: Filter requests based on their tag\n// (maybe because we use RequestQueue that pools multiple scrapers)\nreturn request.userData.tag === \"VARIANT_A\";`,\n requestFilterBefore: `// Example: Fetch data or run code BEFORE requests are processed.\nstate.categories = await sendRequest.get('https://example.com/my-categories').json();`,\n requestFilterAfter: `// Example: Fetch data or run code AFTER requests are processed.\ndelete state.categories;`,\n};\n\n/** Common input fields related to actor input */\nexport const inputInput = {\n inputExtendUrl: createStringField({\n title: 'Extend Actor input from URL',\n type: 'string',\n editor: 'textfield',\n description: `Extend Actor input with a config from a URL.${newLine(1)}\n For example, you can store your actor input in a source control, and import it here.${newLine(1)}\n In case of a conflict (if a field is defined both in Actor input and in imported input) the Actor input overwrites the imported fields.${newLine(1)}\n The URL is requested with GET method, and must point to a JSON file containing a single object (the config).${newLine(1)}\n If you need to send a POST request or to modify the response further, use \\`inputExtendFromFunction\\` instead.`,\n example: 'https://raw.githubusercontent.com/jfairbank/programming-elm.com/master/cat-breeds.json',\n nullable: true,\n sectionCaption: 'Programmatic Input (Advanced)',\n sectionDescription:\n \"With these options you can configure other Actor options programmatically or from remote source.\",\n }), // prettier-ignore\n\n inputExtendFromFunction: createStringField({\n title: 'Extend Actor input from custom function',\n type: 'string',\n editor: 'javascript',\n description: `Extend Actor input with a config defined by a custom function.${newLine(1)}\n For example, you can store your actor input in a source control, and import it here.${newLine(1)}\n In case of a conflict (if a field is defined both in Actor input and in imported input) the Actor input overwrites the imported fields.${newLine(1)}\n The function must return an object (the config).`,\n example: createHookFnExample({}, CODE_EXAMPLES.inputExtendFromFunction, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.inputExtendFromFunction, true),\n nullable: true,\n }), // prettier-ignore\n} satisfies Record<keyof InputActorInput, Field>;\n\n/** Common input fields related to crawler setup */\nexport const crawlerInput = {\n maxRequestRetries: createIntegerField({\n title: 'maxRequestRetries',\n type: 'integer',\n description:\n 'Indicates how many times the request is retried if <a href=\"https://crawlee.dev/api/basic-crawler/interface/BasicCrawlerOptions#requestHandler\">BasicCrawlerOptions.requestHandler</a> fails.',\n example: 3,\n prefill: 3,\n minimum: 0,\n nullable: true,\n sectionCaption: 'Crawler configuration (Advanced)',\n sectionDescription:\n \"These options are applied directly to the Crawler. In majority of cases you don't need to change these. See https://crawlee.dev/api/basic-crawler/interface/BasicCrawlerOptions\",\n }),\n maxRequestsPerMinute: createIntegerField({\n title: 'maxRequestsPerMinute',\n type: 'integer',\n description:\n 'The maximum number of requests per minute the crawler should run. We can pass any positive, non-zero integer.',\n example: 120,\n prefill: 120,\n minimum: 1,\n nullable: true,\n }),\n maxRequestsPerCrawl: createIntegerField({\n title: 'maxRequestsPerCrawl',\n type: 'integer',\n description: `Maximum number of pages that the crawler will open. The crawl will stop when this limit is reached.\n ${newLine(1)} <strong>NOTE:</strong> In cases of parallel crawling, the actual number of pages visited might be slightly higher than this value.`,\n minimum: 1,\n nullable: true,\n }), // prettier-ignore\n minConcurrency: createIntegerField({\n title: 'minConcurrency',\n type: 'integer',\n description: `Sets the minimum concurrency (parallelism) for the crawl.${newLine(1)}\n <strong>WARNING:</strong> If we set this value too high with respect to the available system memory and CPU, our crawler will run extremely slow or crash. If not sure, it's better to keep the default value and the concurrency will scale up automatically.`,\n example: 1,\n prefill: 1,\n minimum: 1,\n nullable: true,\n }), // prettier-ignore\n maxConcurrency: createIntegerField({\n title: 'maxConcurrency',\n type: 'integer',\n description: 'Sets the maximum concurrency (parallelism) for the crawl.',\n minimum: 1,\n nullable: true,\n }),\n navigationTimeoutSecs: createIntegerField({\n title: 'navigationTimeoutSecs',\n type: 'integer',\n description:\n 'Timeout in which the HTTP request to the resource needs to finish, given in seconds.',\n minimum: 0,\n nullable: true,\n }),\n requestHandlerTimeoutSecs: createIntegerField({\n title: 'requestHandlerTimeoutSecs',\n type: 'integer',\n description:\n 'Timeout in which the function passed as <a href=\"https://crawlee.dev/api/basic-crawler/interface/BasicCrawlerOptions#requestHandler\">BasicCrawlerOptions.requestHandler</a> needs to finish, in seconds.',\n example: 180,\n prefill: 180,\n minimum: 0,\n nullable: true,\n }),\n keepAlive: createBooleanField({\n title: 'keepAlive',\n type: 'boolean',\n description:\n 'Allows to keep the crawler alive even if the RequestQueue gets empty. With keepAlive: true the crawler will keep running, waiting for more requests to come.',\n nullable: true,\n }),\n ignoreSslErrors: createBooleanField({\n title: 'ignoreSslErrors',\n type: 'boolean',\n description: 'If set to true, SSL certificate errors will be ignored.',\n nullable: true,\n }),\n additionalMimeTypes: createArrayField({\n title: 'additionalMimeTypes',\n type: 'array',\n description:\n 'An array of MIME types you want the crawler to load and process. By default, only text/html and application/xhtml+xml MIME types are supported.',\n editor: 'stringList',\n uniqueItems: true,\n nullable: true,\n }),\n suggestResponseEncoding: createStringField({\n title: 'suggestResponseEncoding',\n type: 'string',\n description:\n 'By default this crawler will extract correct encoding from the HTTP response headers. There are some websites which use invalid headers. Those are encoded using the UTF-8 encoding. If those sites actually use a different encoding, the response will be corrupted. You can use suggestResponseEncoding to fall back to a certain encoding, if you know that your target website uses it. To force a certain encoding, disregarding the response headers, use forceResponseEncoding.',\n editor: 'textfield',\n nullable: true,\n }),\n forceResponseEncoding: createStringField({\n title: 'forceResponseEncoding',\n type: 'string',\n description:\n 'By default this crawler will extract correct encoding from the HTTP response headers. Use forceResponseEncoding to force a certain encoding, disregarding the response headers. To only provide a default for missing encodings, use suggestResponseEncoding.',\n editor: 'textfield',\n nullable: true,\n }),\n} satisfies Record<keyof CrawlerConfigActorInput, Field>;\n\n/** Common input fields related to performance which are not part of the CrawlerConfig */\nexport const perfInput = {\n perfBatchSize: createIntegerField({\n title: 'Batch requests',\n type: 'integer',\n description: `If set, multiple Requests will be handled by a single Actor instance.${newLine(1)}\n Example: If set to 20, then up to 20 requests will be handled in a single \"go\", after which the actor instance will reset.${newLine(1)}\n <a href=\"https://docs.apify.com/platform/actors/development/performance#batch-jobs-win-over-the-single-jobs\">See Apify documentation</a>.`,\n example: 20,\n minimum: 0,\n nullable: true,\n sectionCaption: 'Performance configuration (Advanced)',\n sectionDescription: 'Standalone performance options. These are not passed to the Crawler.',\n }), // prettier-ignore\n perfBatchWaitSecs: createIntegerField({\n title: 'Wait (in seconds) between processing requests in a single batch',\n type: 'integer',\n description: `How long to wait between entries within a single batch.${newLine(1)}\n Increase this value if you're using batching and you're sending requests to the scraped website too fast.${newLine(1)}\n Example: If set to 1, then after each entry in a batch, wait 1 second before continuing.`,\n example: 1,\n minimum: 0,\n nullable: true,\n }), // prettier-ignore\n} satisfies Record<keyof PerfActorInput, Field>;\n\n/** Common input fields for defining URLs to scrape */\nexport const startUrlsInput = {\n startUrls: createArrayField({\n title: 'Start URLs',\n type: 'array',\n description: `List of URLs to scrape.`,\n editor: 'requestListSources',\n sectionCaption: 'Starting URLs',\n }),\n startUrlsFromDataset: createStringField({\n title: 'Start URLs from Dataset',\n type: 'string',\n editor: 'textfield',\n description: `Import URLs to scrape from an existing Dataset.${newLine(1)}\n The dataset and the field to import from should be written as \\`{datasetID}#{field}\\`.${newLine(1)}\n Example: \\`datasetid123#url\\` will take URLs from dataset \\`datasetid123\\` from field \\`url\\`.`,\n pattern: datasetIdWithFieldPattern,\n example: 'datasetid123#url',\n nullable: true,\n }), // prettier-ignore\n startUrlsFromFunction: createStringField({\n title: 'Start URLs from custom function',\n type: 'string',\n description: `Import or generate URLs to scrape using a custom function.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.startUrlsFromFunction, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.startUrlsFromFunction, true),\n nullable: true,\n }), // prettier-ignore\n} satisfies Record<keyof StartUrlsActorInput, Field>;\n\n/** Common input fields related to logging setup */\nexport const loggingInput = {\n logLevel: createStringField<LogLevel>({\n title: 'Log Level',\n type: 'string',\n editor: 'select',\n description: 'Select how detailed should be the logging.',\n enum: ['off', 'debug', 'info', 'warn', 'error'] satisfies LogLevel[],\n enumTitles: [\n 'No logging (off)',\n 'Debug and higher priority',\n 'Info and higher priority',\n 'Warning and higher priority',\n 'Error and higher priority',\n ],\n example: 'info',\n prefill: 'info',\n default: 'info',\n nullable: true,\n sectionCaption: 'Logging & Error handling (Advanced)',\n sectionDescription:\n 'Configure how to handle errors or what should be displayed in the log console.',\n }),\n errorReportingDatasetId: createStringField({\n title: 'Error reporting dataset ID',\n type: 'string',\n editor: 'textfield',\n description: `Dataset ID to which errors should be captured.${newLine(1)}\n Default: \\`'REPORTING'\\`.${newLine(1)}\n <strong>NOTE:</strong> Dataset name can only contain letters 'a' through 'z', the digits '0' through '9', and the hyphen ('-') but only in the middle of the string (e.g. 'my-value-1')`,\n example: 'REPORTING',\n prefill: 'REPORTING',\n default: 'REPORTING',\n pattern: datasetIdPattern,\n nullable: true,\n }),\n errorTelemetry: createBooleanField({\n title: 'Send errors to telemetry service like Sentry',\n type: 'boolean',\n editor: 'checkbox',\n description: `Whether to report actor errors to telemetry such as <a href=\"https://sentry.io/\">Sentry</a>.${newLine(1)}\n This info is used by the author of this actor to identify broken integrations,\n and track down and fix issues.`,\n example: true,\n default: true,\n nullable: true,\n }), // prettier-ignore\n} satisfies Record<keyof LoggingActorInput, Field>;\n\n/** Common input fields related to proxy setup */\nexport const proxyInput = {\n proxy: createObjectField({\n title: 'Proxy configuration',\n type: 'object',\n description: 'Select proxies to be used by your crawler.',\n editor: 'proxy',\n sectionCaption: 'Proxy',\n sectionDescription: 'Configure the proxy',\n }),\n} satisfies Record<keyof ProxyActorInput, Field>;\n\n/** Common input fields related to proxy setup */\nexport const privacyInput = {\n includePersonalData: createBooleanField({\n title: 'Include personal data',\n type: 'boolean',\n description: `By default, fields that are potential personal data are censored. Toggle this option on to get the un-uncensored values.${newLine(1)}\n <strong>WARNING:</strong> Turn this on ONLY if you have consent, legal basis for using the data, or at your own risk. <a href=\"https://gdpr.eu/eu-gdpr-personal-data/\">Learn more</a>`,\n default: false,\n example: false,\n nullable: true,\n sectionCaption: 'Privacy & Data governance (GDPR)',\n }), // prettier-ignore\n} satisfies Record<keyof PrivacyActorInput, Field>;\n\n/** Common input fields related to actor request */\nexport const requestInput = {\n requestMaxEntries: createIntegerField({\n title: 'Limit the number of requests',\n type: 'integer',\n description: `If set, only at most this many requests will be processed.${newLine(1)}\n The count is determined from the RequestQueue that's used for the Actor run.${newLine(1)}\n This means that if \\`requestMaxEntries\\` is set to 50, but the associated queue already handled 40 requests, then only 10 new requests will be handled.`,\n example: 50,\n prefill: 50,\n minimum: 0,\n nullable: true,\n sectionCaption: 'Requests limit, transformation & filtering (Advanced)',\n }), // prettier-ignore\n\n requestTransform: createStringField({\n title: 'Transform requests',\n type: 'string',\n description: `Freely transform the request object using a custom function.${newLine(1)}\n If not set, the request will remain as is.`,\n editor: 'javascript',\n example: createHookFnExample({ request: 'Request holding URL to be scraped' }, CODE_EXAMPLES.requestTransform, false),\n prefill: createHookFnExample({ request: 'Request holding URL to be scraped' }, CODE_EXAMPLES.requestTransform, true),\n nullable: true,\n }), // prettier-ignore\n requestTransformBefore: createStringField({\n title: 'Transform requests - Setup',\n type: 'string',\n description: `Use this if you need to run one-time initialization code before \\`requestTransform\\`.`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.requestTransformBefore, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.requestTransformBefore, true),\n nullable: true,\n }), // prettier-ignore\n requestTransformAfter: createStringField({\n title: 'Transform requests - Teardown',\n type: 'string',\n description: `Use this if you need to run one-time teardown code after \\`requestTransform\\`.`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.requestTransformAfter, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.requestTransformAfter, true),\n nullable: true,\n }), // prettier-ignore\n\n requestFilter: createStringField({\n title: 'Filter requests',\n type: 'string',\n description: `Decide which requests should be processed by using a custom function.${newLine(1)}\n If not set, all requests will be included.${newLine(1)}\n This is done after \\`requestTransform\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({ request: 'Request holding URL to be scraped' }, CODE_EXAMPLES.requestFilter, false),\n prefill: createHookFnExample({ request: 'Request holding URL to be scraped' }, CODE_EXAMPLES.requestFilter, true),\n nullable: true,\n }), // prettier-ignore\n requestFilterBefore: createStringField({\n title: 'Filter requests - Setup',\n type: 'string',\n description: `Use this if you need to run one-time initialization code before \\`requestFilter\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.requestFilterBefore, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.requestFilterBefore, true),\n nullable: true,\n }), // prettier-ignore\n requestFilterAfter: createStringField({\n title: 'Filter requests - Teardown',\n type: 'string',\n description: `Use this if you need to run one-time teardown code after \\`requestFilter\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.requestFilterAfter, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.requestFilterAfter, true),\n nullable: true,\n }), // prettier-ignore\n\n requestQueueId: createStringField({\n title: 'RequestQueue ID',\n type: 'string',\n description: `By default, requests are stored in the default request queue.\n Set this option if you want to use a non-default queue.\n <a href=\"https://docs.apify.com/sdk/python/docs/concepts/storages#opening-named-and-unnamed-storages\">Learn more</a>${newLine(1)}\n <strong>NOTE:</strong> RequestQueue name can only contain letters 'a' through 'z', the digits '0' through '9', and the hyphen ('-') but only in the middle of the string (e.g. 'my-value-1')`,\n editor: 'textfield',\n example: 'mIJVZsRQrDQf4rUAf',\n pattern: datasetIdPattern,\n nullable: true,\n }), // prettier-ignore\n} satisfies Record<keyof RequestActorInput, Field>;\n\n/** Common input fields related to actor output */\nexport const outputInput = {\n outputMaxEntries: createIntegerField({\n title: 'Limit the number of scraped entries',\n type: 'integer',\n description: `If set, only at most this many entries will be scraped.${newLine(1)}\n The count is determined from the Dataset that's used for the Actor run.${newLine(1)}\n This means that if \\`outputMaxEntries\\` is set to 50, but the associated Dataset already has 40 items in it, then only 10 new entries will be saved.`,\n example: 50,\n prefill: 50,\n minimum: 0,\n nullable: true,\n sectionCaption: 'Output size, transformation & filtering (T in ETL) (Advanced)',\n }),\n outputRenameFields: createObjectField({\n title: 'Rename dataset fields',\n type: 'object',\n description: `Rename fields (columns) of the output data.${newLine(1)}\n If not set, all fields will have their original names.${newLine(1)}\n This is done before \\`outputPickFields\\`.${newLine(1)}\n Keys can be nested, e.g. \\`\"someProp.value[0]\"\\`.\n Nested path is resolved using <a href=\"https://lodash.com/docs/4.17.15#get\">Lodash.get()</a>.`,\n editor: 'json',\n example: { oldFieldName: 'newFieldName' },\n nullable: true,\n }),\n outputPickFields: createArrayField({\n title: 'Pick dataset fields',\n type: 'array',\n description: `Select a subset of fields of an entry that will be pushed to the dataset.${newLine(1)}\n If not set, all fields on an entry will be pushed to the dataset.${newLine(1)}\n This is done after \\`outputRenameFields\\`.${newLine(1)}\n Keys can be nested, e.g. \\`\"someProp.value[0]\"\\`.\n Nested path is resolved using <a href=\"https://lodash.com/docs/4.17.15#get\">Lodash.get()</a>.`,\n editor: 'stringList',\n example: ['fieldName', 'another.nested[0].field'],\n nullable: true,\n }), // prettier-ignore\n\n outputTransform: createStringField({\n title: 'Transform entries',\n type: 'string',\n description: `Freely transform the output data object using a custom function.${newLine(1)}\n If not set, the data will remain as is.${newLine(1)}\n This is done after \\`outputPickFields\\` and \\`outputRenameFields\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({ entry: 'Scraped entry' }, CODE_EXAMPLES.outputTransform, false),\n prefill: createHookFnExample({ entry: 'Scraped entry' }, CODE_EXAMPLES.outputTransform, true),\n nullable: true,\n }), // prettier-ignore\n outputTransformBefore: createStringField({\n title: 'Transform entries - Setup',\n type: 'string',\n description: `Use this if you need to run one-time initialization code before \\`outputTransform\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.outputTransformBefore, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.outputTransformBefore, true),\n nullable: true,\n }), // prettier-ignore\n outputTransformAfter: createStringField({\n title: 'Transform entries - Teardown',\n type: 'string',\n description: `Use this if you need to run one-time teardown code after \\`outputTransform\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.outputTransformAfter, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.outputTransformAfter, true),\n nullable: true,\n }), // prettier-ignore\n\n outputFilter: createStringField({\n title: 'Filter entries',\n type: 'string',\n description: `Decide which scraped entries should be included in the output by using a custom function.${newLine(1)}\n If not set, all scraped entries will be included.${newLine(1)}\n This is done after \\`outputPickFields\\`, \\`outputRenameFields\\`, and \\`outputTransform\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({ entry: 'Scraped entry' }, CODE_EXAMPLES.outputFilter, false),\n prefill: createHookFnExample({ entry: 'Scraped entry' }, CODE_EXAMPLES.outputFilter, true),\n nullable: true,\n }), // prettier-ignore\n outputFilterBefore: createStringField({\n title: 'Filter entries - Setup',\n type: 'string',\n description: `Use this if you need to run one-time initialization code before \\`outputFilter\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.outputFilterBefore, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.outputFilterBefore, true),\n nullable: true,\n }), // prettier-ignore\n outputFilterAfter: createStringField({\n title: 'Filter entries - Teardown',\n type: 'string',\n description: `Use this if you need to run one-time teardown code after \\`outputFilter\\`.${newLine(1)}`,\n editor: 'javascript',\n example: createHookFnExample({}, CODE_EXAMPLES.outputFilterAfter, false),\n prefill: createHookFnExample({}, CODE_EXAMPLES.outputFilterAfter, true),\n nullable: true,\n }), // prettier-ignore\n\n outputDatasetId: createStringField({\n title: 'Dataset ID',\n type: 'string',\n description: `By default, data is written to Default dataset.\n Set this option if you want to write data to non-default dataset.\n <a href=\"https://docs.apify.com/sdk/python/docs/concepts/storages#opening-named-and-unnamed-storages\">Learn more</a>${newLine(1)}\n <strong>NOTE:</strong> Dataset name can only contain letters 'a' through 'z', the digits '0' through '9', and the hyphen ('-') but only in the middle of the string (e.g. 'my-value-1')`,\n editor: 'textfield',\n example: 'mIJVZsRQrDQf4rUAf',\n pattern: datasetIdPattern,\n nullable: true,\n sectionCaption: 'Output Dataset & Caching (L in ETL) (Advanced)',\n }), // prettier-ignore\n\n outputCacheStoreId: createStringField({\n title: 'Cache ID',\n type: 'string',\n description: `Set this option if you want to cache scraped entries in <a href=\"https://docs.apify.com/sdk/js/docs/guides/result-storage#key-value-store\">Apify's Key-value store</a>.${newLine(1)}\n This is useful for example when you want to scrape only NEW entries. In such case, you can use the \\`outputFilter\\` option to define a custom function to filter out entries already found in the cache.\n <a href=\"https://docs.apify.com/sdk/python/docs/concepts/storages#working-with-key-value-stores\">Learn more</a>${newLine(1)}\n <strong>NOTE:</strong> Cache name can only contain letters 'a' through 'z', the digits '0' through '9', and the hyphen ('-') but only in the middle of the string (e.g. 'my-value-1')`,\n editor: 'textfield',\n example: 'mIJVZsRQrDQf4rUAf',\n pattern: datasetIdPattern,\n nullable: true,\n }), // prettier-ignore\n outputCachePrimaryKeys: createArrayField<string[]>({\n title: 'Cache primary keys',\n type: 'array',\n description: `Specify fields that uniquely identify entries (primary keys), so entries can be compared against the cache.${newLine(1)}\n <strong>NOTE:</strong> If not set, the entries are hashed based on all fields`,\n editor: 'stringList',\n example: ['name', 'city'],\n nullable: true,\n }), // prettier-ignore\n outputCacheActionOnResult: createStringField<\n NonNullable<OutputActorInput['outputCacheActionOnResult']>\n >({\n title: 'Cache action on result',\n type: 'string',\n description: `Specify whether scraped results should be added to, removed from, or overwrite the cache.${newLine(1)}\n - <strong>add<strong> - Adds scraped results to the cache${newLine(1)}\n - <strong>remove<strong> - Removes scraped results from the cache${newLine(1)}\n - <strong>set<strong> - First clears all entries from the cache, then adds scraped results to the cache${newLine(1)}\n <strong>NOTE:</strong> No action happens when this field is empty.`,\n editor: 'select',\n enum: ['add', 'remove', 'overwrite'],\n example: 'add',\n nullable: true,\n }), // prettier-ignore\n} satisfies Record<keyof OutputActorInput, Field>;\n\n/** Common input fields related to actor metamorphing */\nexport const metamorphInput = {\n metamorphActorId: createStringField({\n title: 'Metamorph actor ID - metamorph to another actor at the end',\n type: 'string',\n description: `Use this option if you want to run another actor with the same dataset after this actor has finished (AKA metamorph into another actor). <a href=\"https://docs.apify.com/sdk/python/docs/concepts/interacting-with-other-actors#actormetamorph\">Learn more</a> ${newLine(1)}\n New actor is identified by its ID, e.g. \"apify/web-scraper\".`,\n editor: 'textfield',\n example: 'apify/web-scraper',\n nullable: true,\n sectionCaption: 'Integrations (Metamorphing) (Advanced)',\n }), // prettier-ignore\n metamorphActorBuild: createStringField({\n title: 'Metamorph actor build',\n type: 'string',\n description: `Tag or number of the target actor build to metamorph into (e.g. 'beta' or '1.2.345')`,\n editor: 'textfield',\n example: '1.2.345',\n nullable: true,\n }),\n metamorphActorInput: createObjectField({\n title: 'Metamorph actor input',\n type: 'object',\n description: `Input object passed to the follow-up (metamorph) actor. <a href=\"https://docs.apify.com/sdk/python/docs/concepts/interacting-with-other-actors#actormetamorph\">Learn more</a>`,\n editor: 'json',\n example: { uploadDatasetToGDrive: true },\n nullable: true,\n }),\n} satisfies Record<keyof MetamorphActorInput, Field>;\n\nexport const allActorInputs = {\n ...inputInput,\n ...startUrlsInput,\n ...proxyInput,\n ...privacyInput,\n ...requestInput,\n ...outputInput,\n ...crawlerInput,\n ...perfInput,\n ...loggingInput,\n ...metamorphInput,\n} satisfies Record<keyof AllActorInputs, Field>;\n\nexport const crawlerInputValidationFields = {\n navigationTimeoutSecs: Joi.number().integer().min(0).optional(),\n ignoreSslErrors: Joi.boolean().optional(),\n additionalMimeTypes: Joi.array().items(Joi.string().min(1)).optional(),\n suggestResponseEncoding: Joi.string().min(1).optional(),\n forceResponseEncoding: Joi.string().min(1).optional(),\n requestHandlerTimeoutSecs: Joi.number().integer().min(0).optional(),\n maxRequestRetries: Joi.number().integer().min(0).optional(),\n maxRequestsPerCrawl: Joi.number().integer().min(0).optional(),\n maxRequestsPerMinute: Joi.number().integer().min(0).optional(),\n minConcurrency: Joi.number().integer().min(0).optional(),\n maxConcurrency: Joi.number().integer().min(0).optional(),\n keepAlive: Joi.boolean().optional(),\n} satisfies Record<keyof CrawlerConfigActorInput, Joi.Schema>;\n\nexport const perfInputValidationFields = {\n perfBatchSize: Joi.number().integer().min(0).optional(),\n perfBatchWaitSecs: Joi.number().integer().min(0).optional(),\n} satisfies Record<keyof PerfActorInput, Joi.Schema>;\n\nexport const inputInputValidationFields = {\n inputExtendUrl: Joi.string().min(1).uri().optional(),\n inputExtendFromFunction: Joi.string().min(1).optional(),\n} satisfies Record<keyof InputActorInput, Joi.Schema>;\n\nexport const startUrlsInputValidationFields = {\n startUrls: Joi.array().items(Joi.string().min(1), Joi.object()).optional(),\n startUrlsFromDataset: Joi.string().min(1).pattern(new RegExp(datasetIdWithFieldPattern)).optional(), // prettier-ignore\n startUrlsFromFunction: [Joi.string().min(1).optional(), Joi.func().optional()],\n} satisfies Record<keyof StartUrlsActorInput, Joi.Schema | Joi.Schema[]>;\n\nexport const loggingInputValidationFields = {\n logLevel: Joi.string().valid(...LOG_LEVEL).optional(), // prettier-ignore\n errorReportingDatasetId: Joi.string().min(1).pattern(new RegExp(datasetIdPattern)).optional(), // prettier-ignore\n errorTelemetry: Joi.boolean().optional(),\n} satisfies Record<keyof LoggingActorInput, Joi.Schema>;\n\nexport const proxyInputValidationFields = {\n proxy: Joi.object().optional(), // NOTE: Expand this type?\n} satisfies Record<keyof ProxyActorInput, Joi.Schema>;\n\nexport const privacyInputValidationFields = {\n includePersonalData: Joi.boolean().optional(),\n} satisfies Record<keyof PrivacyActorInput, Joi.Schema>;\n\nexport const requestInputValidationFields = {\n requestMaxEntries: Joi.number().integer().min(0).optional(),\n\n requestTransform: Joi.string().min(1).optional(),\n requestTransformBefore: Joi.string().min(1).optional(),\n requestTransformAfter: Joi.string().min(1).optional(),\n requestFilter: Joi.string().min(1).optional(),\n requestFilterBefore: Joi.string().min(1).optional(),\n requestFilterAfter: Joi.string().min(1).optional(),\n\n requestQueueId: Joi.string().min(1).pattern(new RegExp(datasetIdPattern)).optional(), // prettier-ignore\n} satisfies Record<keyof RequestActorInput, Joi.Schema>;\n\nexport const outputInputValidationFields = {\n outputMaxEntries: Joi.number().integer().min(0).optional(),\n\n outputPickFields: Joi.array().items(Joi.string().min(1)).optional(),\n // https://stackoverflow.com/a/49898360/9788634\n outputRenameFields: Joi.object().pattern(/./, Joi.string().min(1)).optional(),\n\n outputTransform: Joi.string().min(1).optional(),\n outputTransformBefore: Joi.string().min(1).optional(),\n outputTransformAfter: Joi.string().min(1).optional(),\n outputFilter: Joi.string().min(1).optional(),\n outputFilterBefore: Joi.string().min(1).optional(),\n outputFilterAfter: Joi.string().min(1).optional(),\n\n outputCacheStoreId: Joi.string().min(1).pattern(new RegExp(datasetIdPattern)).optional(), // prettier-ignore\n outputCachePrimaryKeys: Joi.array().items(Joi.string().min(1)).optional(),\n outputCacheActionOnResult: Joi.string().min(1).allow('add', 'remove', 'overwrite').optional(), // prettier-ignore\n\n outputDatasetId: Joi.string().min(1).pattern(new RegExp(datasetIdPattern)).optional(), // prettier-ignore\n} satisfies Record<keyof OutputActorInput, Joi.Schema>;\n\nexport const metamorphInputValidationFields = {\n metamorphActorId: Joi.string().min(1).optional(),\n metamorphActorBuild: Joi.string().min(1).optional(),\n metamorphActorInput: Joi.object().unknown(true).optional(),\n} satisfies Record<keyof MetamorphActorInput, Joi.Schema>;\n\nexport const allActorInputValidationFields = {\n ...inputInputValidationFields,\n ...startUrlsInputValidationFields,\n ...proxyInputValidationFields,\n ...privacyInputValidationFields,\n ...requestInputValidationFields,\n ...outputInputValidationFields,\n ...crawlerInputValidationFields,\n ...perfInputValidationFields,\n ...loggingInputValidationFields,\n ...metamorphInputValidationFields,\n} satisfies Record<keyof AllActorInputs, Joi.Schema | Joi.Schema[]>;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crawlee-one",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "private": false,
5
5
  "description": "CrawleeOne is a framework built on top of Crawlee and Apify for writing robust and highly configurable web scrapers",
6
6
  "author": "Juro Oravec <juraj.oravec.josefson@gmail.com>",