@apify/input_schema 3.6.3 → 3.7.1
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/cjs/index.cjs +40 -52
- package/cjs/index.cjs.map +1 -1
- package/cjs/index.d.ts +76 -4
- package/esm/index.d.mts +76 -4
- package/esm/index.mjs +40 -52
- package/esm/index.mjs.map +1 -1
- package/package.json +2 -2
package/cjs/index.cjs
CHANGED
|
@@ -53,8 +53,7 @@ var intlStrings = {
|
|
|
53
53
|
};
|
|
54
54
|
function m(stringId, variables) {
|
|
55
55
|
let text = intlStrings[stringId];
|
|
56
|
-
if (!text)
|
|
57
|
-
return stringId;
|
|
56
|
+
if (!text) return stringId;
|
|
58
57
|
if (variables) {
|
|
59
58
|
Object.keys(variables).forEach((variableName) => {
|
|
60
59
|
text = text.split(`{${variableName}}`).join(variables[variableName]);
|
|
@@ -378,17 +377,19 @@ function parseAjvError(error, rootName, properties = {}, input = {}) {
|
|
|
378
377
|
}
|
|
379
378
|
__name(parseAjvError, "parseAjvError");
|
|
380
379
|
var validateAgainstSchemaOrThrow = /* @__PURE__ */ __name((validator, obj, inputSchema, rootName) => {
|
|
381
|
-
if (validator.validate(inputSchema, obj))
|
|
382
|
-
return;
|
|
380
|
+
if (validator.validate(inputSchema, obj)) return;
|
|
383
381
|
const errorMessage = parseAjvError(validator.errors[0], rootName)?.message;
|
|
384
382
|
throw new Error(`Input schema is not valid (${errorMessage})`);
|
|
385
383
|
}, "validateAgainstSchemaOrThrow");
|
|
386
|
-
|
|
387
|
-
const schemaWithoutProperties = {
|
|
388
|
-
|
|
384
|
+
function validateBasicStructure(validator, obj) {
|
|
385
|
+
const schemaWithoutProperties = {
|
|
386
|
+
...schema_default,
|
|
387
|
+
properties: { ...schema_default.properties, properties: { type: "object" } }
|
|
388
|
+
};
|
|
389
389
|
validateAgainstSchemaOrThrow(validator, obj, schemaWithoutProperties, "schema");
|
|
390
|
-
}
|
|
391
|
-
|
|
390
|
+
}
|
|
391
|
+
__name(validateBasicStructure, "validateBasicStructure");
|
|
392
|
+
function validateField(validator, fieldSchema, fieldKey) {
|
|
392
393
|
const matchingDefinitions = Object.values(definitions).filter((definition2) => {
|
|
393
394
|
return definition2.properties.type.enum ? definition2.properties.type.enum[0] === fieldSchema.type : Array.isArray(fieldSchema.type);
|
|
394
395
|
});
|
|
@@ -402,29 +403,32 @@ var validateField = /* @__PURE__ */ __name((validator, fieldSchema, fieldKey) =>
|
|
|
402
403
|
}
|
|
403
404
|
if (fieldSchema.enum) {
|
|
404
405
|
const definition2 = matchingDefinitions.filter((item) => !!item.properties.enum).pop();
|
|
405
|
-
if (!definition2)
|
|
406
|
-
throw new Error('Input schema validation failed to find "enum property" definition');
|
|
406
|
+
if (!definition2) throw new Error('Input schema validation failed to find "enum property" definition');
|
|
407
407
|
validateAgainstSchemaOrThrow(validator, fieldSchema, definition2, `schema.properties.${fieldKey}.enum`);
|
|
408
408
|
return;
|
|
409
409
|
}
|
|
410
410
|
const definition = matchingDefinitions.filter((item) => !item.properties.enum).pop();
|
|
411
|
-
if (!definition)
|
|
412
|
-
throw new Error('Input schema validation failed to find other than "enum property" definition');
|
|
411
|
+
if (!definition) throw new Error('Input schema validation failed to find other than "enum property" definition');
|
|
413
412
|
validateAgainstSchemaOrThrow(validator, fieldSchema, definition, `schema.properties.${fieldKey}`);
|
|
414
|
-
}
|
|
413
|
+
}
|
|
414
|
+
__name(validateField, "validateField");
|
|
415
|
+
function validateProperties(inputSchema, validator) {
|
|
416
|
+
Object.entries(inputSchema.properties).forEach(
|
|
417
|
+
([fieldKey, fieldSchema]) => validateField(validator, fieldSchema, fieldKey)
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
__name(validateProperties, "validateProperties");
|
|
415
421
|
function validateExistenceOfRequiredFields(inputSchema) {
|
|
416
|
-
if (!inputSchema?.required?.length)
|
|
417
|
-
return;
|
|
422
|
+
if (!inputSchema?.required?.length) return;
|
|
418
423
|
Object.values(inputSchema?.required).forEach((fieldKey) => {
|
|
419
|
-
if (inputSchema?.properties[fieldKey])
|
|
420
|
-
return;
|
|
424
|
+
if (inputSchema?.properties[fieldKey]) return;
|
|
421
425
|
throw new Error(m("inputSchema.validation.missingRequiredField", { fieldKey }));
|
|
422
426
|
});
|
|
423
427
|
}
|
|
424
428
|
__name(validateExistenceOfRequiredFields, "validateExistenceOfRequiredFields");
|
|
425
429
|
function validateInputSchema(validator, inputSchema) {
|
|
426
430
|
validateBasicStructure(validator, inputSchema);
|
|
427
|
-
|
|
431
|
+
validateProperties(inputSchema, validator);
|
|
428
432
|
validateExistenceOfRequiredFields(inputSchema);
|
|
429
433
|
validateAgainstSchemaOrThrow(validator, inputSchema, schema_default, "schema");
|
|
430
434
|
}
|
|
@@ -432,13 +436,12 @@ __name(validateInputSchema, "validateInputSchema");
|
|
|
432
436
|
|
|
433
437
|
// src/utilities.ts
|
|
434
438
|
var import_consts = require("@apify/consts");
|
|
435
|
-
var import_countries_list = require("countries-list");
|
|
436
439
|
var import_acorn_loose = require("acorn-loose");
|
|
440
|
+
var import_countries_list = require("countries-list");
|
|
437
441
|
function validateProxyField(fieldKey, value, isRequired = false, options = null) {
|
|
438
442
|
const fieldErrors = [];
|
|
439
443
|
if (isRequired) {
|
|
440
|
-
if (value === null)
|
|
441
|
-
return fieldErrors;
|
|
444
|
+
if (value === null) return fieldErrors;
|
|
442
445
|
if (!value) {
|
|
443
446
|
const message = m("inputSchema.validation.required", { rootName: "input", fieldKey });
|
|
444
447
|
fieldErrors.push(message);
|
|
@@ -450,14 +453,12 @@ function validateProxyField(fieldKey, value, isRequired = false, options = null)
|
|
|
450
453
|
return fieldErrors;
|
|
451
454
|
}
|
|
452
455
|
}
|
|
453
|
-
if (!value)
|
|
454
|
-
return fieldErrors;
|
|
456
|
+
if (!value) return fieldErrors;
|
|
455
457
|
const { useApifyProxy, proxyUrls, apifyProxyGroups, apifyProxyCountry } = value;
|
|
456
458
|
if (!useApifyProxy && Array.isArray(proxyUrls)) {
|
|
457
459
|
let invalidUrl = false;
|
|
458
460
|
proxyUrls.forEach((url) => {
|
|
459
|
-
if (!import_consts.PROXY_URL_REGEX.test(url.trim()))
|
|
460
|
-
invalidUrl = url.trim();
|
|
461
|
+
if (!import_consts.PROXY_URL_REGEX.test(url.trim())) invalidUrl = url.trim();
|
|
461
462
|
});
|
|
462
463
|
if (invalidUrl) {
|
|
463
464
|
fieldErrors.push(m("inputSchema.validation.customProxyInvalid", { invalidUrl }));
|
|
@@ -466,13 +467,11 @@ function validateProxyField(fieldKey, value, isRequired = false, options = null)
|
|
|
466
467
|
if (!useApifyProxy && apifyProxyCountry) {
|
|
467
468
|
fieldErrors.push(m("inputSchema.validation.apifyProxyCountryWithoutApifyProxyForbidden"));
|
|
468
469
|
}
|
|
469
|
-
if (!useApifyProxy)
|
|
470
|
-
return fieldErrors;
|
|
470
|
+
if (!useApifyProxy) return fieldErrors;
|
|
471
471
|
if (apifyProxyCountry && !import_countries_list.countries[apifyProxyCountry]) {
|
|
472
472
|
fieldErrors.push(m("inputSchema.validation.apifyProxyCountryInvalid", { invalidCountry: apifyProxyCountry }));
|
|
473
473
|
}
|
|
474
|
-
if (!options)
|
|
475
|
-
return fieldErrors;
|
|
474
|
+
if (!options) return fieldErrors;
|
|
476
475
|
const isStringsArray = /* @__PURE__ */ __name((array) => array.every((item) => typeof item === "string"), "isStringsArray");
|
|
477
476
|
if (apifyProxyGroups && !(Array.isArray(apifyProxyGroups) && isStringsArray(apifyProxyGroups))) {
|
|
478
477
|
fieldErrors.push(m("inputSchema.validation.proxyGroupMustBeArrayOfStrings", { rootName: "input", fieldKey }));
|
|
@@ -524,14 +523,10 @@ function validateInputUsingValidator(validator, inputSchema, input, options = {}
|
|
|
524
523
|
if (editor === "requestListSources") {
|
|
525
524
|
const invalidIndexes = [];
|
|
526
525
|
value.forEach((item, index) => {
|
|
527
|
-
if (!item)
|
|
528
|
-
|
|
529
|
-
else if (
|
|
530
|
-
|
|
531
|
-
else if (item.url && !import_consts.URL_REGEX.test(item.url))
|
|
532
|
-
invalidIndexes.push(index);
|
|
533
|
-
else if (item.requestsFromUrl && !import_consts.URL_REGEX.test(item.requestsFromUrl))
|
|
534
|
-
invalidIndexes.push(index);
|
|
526
|
+
if (!item) invalidIndexes.push(index);
|
|
527
|
+
else if (!item.url && !item.requestsFromUrl) invalidIndexes.push(index);
|
|
528
|
+
else if (item.url && !import_consts.URL_REGEX.test(item.url)) invalidIndexes.push(index);
|
|
529
|
+
else if (item.requestsFromUrl && !import_consts.URL_REGEX.test(item.requestsFromUrl)) invalidIndexes.push(index);
|
|
535
530
|
});
|
|
536
531
|
if (invalidIndexes.length) {
|
|
537
532
|
fieldErrors.push(m("inputSchema.validation.requestListSourcesInvalid", {
|
|
@@ -545,8 +540,7 @@ function validateInputUsingValidator(validator, inputSchema, input, options = {}
|
|
|
545
540
|
const check = new RegExp(patternKey);
|
|
546
541
|
const invalidIndexes = [];
|
|
547
542
|
value.forEach((item, index) => {
|
|
548
|
-
if (!check.test(item.key))
|
|
549
|
-
invalidIndexes.push(index);
|
|
543
|
+
if (!check.test(item.key)) invalidIndexes.push(index);
|
|
550
544
|
});
|
|
551
545
|
if (invalidIndexes.length) {
|
|
552
546
|
fieldErrors.push(m("inputSchema.validation.arrayKeysInvalid", {
|
|
@@ -561,8 +555,7 @@ function validateInputUsingValidator(validator, inputSchema, input, options = {}
|
|
|
561
555
|
const check = new RegExp(patternValue);
|
|
562
556
|
const invalidIndexes = [];
|
|
563
557
|
value.forEach((item, index) => {
|
|
564
|
-
if (!check.test(item.value))
|
|
565
|
-
invalidIndexes.push(index);
|
|
558
|
+
if (!check.test(item.value)) invalidIndexes.push(index);
|
|
566
559
|
});
|
|
567
560
|
if (invalidIndexes.length) {
|
|
568
561
|
fieldErrors.push(m("inputSchema.validation.arrayValuesInvalid", {
|
|
@@ -576,8 +569,7 @@ function validateInputUsingValidator(validator, inputSchema, input, options = {}
|
|
|
576
569
|
const check = new RegExp(patternValue);
|
|
577
570
|
const invalidIndexes = [];
|
|
578
571
|
value.forEach((item, index) => {
|
|
579
|
-
if (!check.test(item))
|
|
580
|
-
invalidIndexes.push(index);
|
|
572
|
+
if (!check.test(item)) invalidIndexes.push(index);
|
|
581
573
|
});
|
|
582
574
|
if (invalidIndexes.length) {
|
|
583
575
|
fieldErrors.push(m("inputSchema.validation.arrayValuesInvalid", {
|
|
@@ -594,8 +586,7 @@ function validateInputUsingValidator(validator, inputSchema, input, options = {}
|
|
|
594
586
|
const check = new RegExp(patternKey);
|
|
595
587
|
const invalidKeys = [];
|
|
596
588
|
Object.keys(value).forEach((key) => {
|
|
597
|
-
if (!check.test(key))
|
|
598
|
-
invalidKeys.push(key);
|
|
589
|
+
if (!check.test(key)) invalidKeys.push(key);
|
|
599
590
|
});
|
|
600
591
|
if (invalidKeys.length) {
|
|
601
592
|
fieldErrors.push(m("inputSchema.validation.objectKeysInvalid", {
|
|
@@ -611,8 +602,7 @@ function validateInputUsingValidator(validator, inputSchema, input, options = {}
|
|
|
611
602
|
const invalidKeys = [];
|
|
612
603
|
Object.keys(value).forEach((key) => {
|
|
613
604
|
const propertyValue = value[key];
|
|
614
|
-
if (typeof propertyValue !== "string" || !check.test(propertyValue))
|
|
615
|
-
invalidKeys.push(key);
|
|
605
|
+
if (typeof propertyValue !== "string" || !check.test(propertyValue)) invalidKeys.push(key);
|
|
616
606
|
});
|
|
617
607
|
if (invalidKeys.length) {
|
|
618
608
|
fieldErrors.push(m("inputSchema.validation.objectValuesInvalid", {
|
|
@@ -637,8 +627,7 @@ function makeInputJsFieldsReadable(json, jsFields, jsonSpacing = 4, globalSpacin
|
|
|
637
627
|
const replacements = {};
|
|
638
628
|
jsFields.forEach((field) => {
|
|
639
629
|
let maybeFunction = parsedJson[field];
|
|
640
|
-
if (!maybeFunction || typeof maybeFunction !== "string")
|
|
641
|
-
return;
|
|
630
|
+
if (!maybeFunction || typeof maybeFunction !== "string") return;
|
|
642
631
|
let ast;
|
|
643
632
|
try {
|
|
644
633
|
ast = (0, import_acorn_loose.parse)(maybeFunction, { ecmaVersion: "latest" });
|
|
@@ -647,8 +636,7 @@ function makeInputJsFieldsReadable(json, jsFields, jsonSpacing = 4, globalSpacin
|
|
|
647
636
|
}
|
|
648
637
|
const isMultiline = maybeFunction.includes("\n");
|
|
649
638
|
const isSingleFunction = ast && ast.body.length === 1 && (ast.body[0].type === "FunctionDeclaration" || ast.body[0].type === "ExpressionStatement" && ast.body[0].expression.type === "ArrowFunctionExpression");
|
|
650
|
-
if (!isSingleFunction && !isMultiline)
|
|
651
|
-
return;
|
|
639
|
+
if (!isSingleFunction && !isMultiline) return;
|
|
652
640
|
const spaces = new Array(isSingleFunction ? jsonSpacing : jsonSpacing * 2).fill(" ").join("");
|
|
653
641
|
maybeFunction = maybeFunction.split("\n").join(`
|
|
654
642
|
${spaces}`).trim();
|
package/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/intl.ts","../../src/schema.json","../../src/input_schema.ts","../../src/utilities.ts"],"sourcesContent":["export * from './intl';\nexport * from './input_schema';\nexport * from './utilities';\n","const intlStrings = {\n 'inputSchema.validation.generic':\n 'Field {rootName}.{fieldKey} {message}',\n 'inputSchema.validation.required':\n 'Field {rootName}.{fieldKey} is required',\n 'inputSchema.validation.proxyRequired':\n 'Field {rootName}.{fieldKey} is required. Please provide custom proxy URLs or use Apify Proxy.',\n 'inputSchema.validation.requestListSourcesInvalid':\n 'Items in {rootName}.{fieldKey} at positions [{invalidIndexes}] do not contain valid URLs',\n 'inputSchema.validation.arrayKeysInvalid':\n 'Keys in {rootName}.{fieldKey} at positions [{invalidIndexes}] must match regular expression \"{pattern}\"',\n 'inputSchema.validation.arrayValuesInvalid':\n 'Values in {rootName}.{fieldKey} at positions [{invalidIndexes}] must match regular expression \"{pattern}\"',\n 'inputSchema.validation.objectKeysInvalid':\n 'Keys [{invalidKeys}] in {rootName}.{fieldKey} must match regular expression \"{pattern}',\n 'inputSchema.validation.objectValuesInvalid':\n 'Keys [{invalidKeys}] in {rootName}.{fieldKey} must have string value which matches regular expression \"{pattern}\"',\n 'inputSchema.validation.additionalProperty':\n 'Property {rootName}.{fieldKey} is not allowed.',\n 'inputSchema.validation.proxyGroupsNotAvailable':\n 'You currently do not have access to proxy groups: {groups}',\n 'inputSchema.validation.customProxyInvalid':\n 'Proxy URL \"{invalidUrl}\" has invalid format, it must be http[s]://[username[:password]]@hostname:port.',\n 'inputSchema.validation.apifyProxyCountryInvalid':\n 'Country code \"{invalidCountry}\" is invalid. Only ISO 3166-1 alpha-2 country codes are supported.',\n 'inputSchema.validation.apifyProxyCountryWithoutApifyProxyForbidden':\n 'The country for Apify Proxy can be specified only when using Apify Proxy.',\n 'inputSchema.validation.noAvailableAutoProxy':\n 'Currently you do not have access to any proxy group usable in automatic mode.',\n 'inputSchema.validation.noMatchingDefinition':\n 'Field schema.properties.{fieldKey} is not matching any input schema type definition. Please make sure that it\\'s type is valid.',\n 'inputSchema.validation.missingRequiredField':\n 'Field schema.properties.{fieldKey} does not exist, but it is specified in schema.required. Either define the field or remove it from schema.required.',\n 'inputSchema.validation.proxyGroupMustBeArrayOfStrings':\n 'Field {rootName}.{fieldKey}.apifyProxyGroups must be an array of strings.',\n};\n\n/**\n * Helper function to simulate intl formatMessage function\n */\nexport function m(stringId: string, variables?: Record<string, any>) {\n let text = intlStrings[stringId];\n if (!text) return stringId;\n\n if (variables) {\n Object.keys(variables).forEach((variableName) => {\n text = text.split(`{${variableName}}`).join(variables[variableName]);\n });\n }\n\n return text;\n}\n","{\n \"title\": \"JSON schema of Apify Actor INPUT_SCHEMA.json\",\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"schemaVersion\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"maximum\": 1\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"enum\": [\"object\"]\n },\n \"required\": {\n \"type\": \"array\",\n \"minItems\": 0,\n \"items\": { \"type\": \"string\" },\n \"uniqueItems\": true\n },\n \"additionalProperties\": {\n \"type\": \"boolean\"\n },\n \"properties\": {\n \"type\": \"object\",\n \"patternProperties\": {\n \"^\": {\n \"oneOf\": [\n { \"$ref\": \"#/definitions/stringProperty\" },\n { \"$ref\": \"#/definitions/stringEnumProperty\" },\n { \"$ref\": \"#/definitions/arrayProperty\" },\n { \"$ref\": \"#/definitions/objectProperty\" },\n { \"$ref\": \"#/definitions/integerProperty\" },\n { \"$ref\": \"#/definitions/booleanProperty\" },\n { \"$ref\": \"#/definitions/anyProperty\" }\n ]\n }\n }\n }\n },\n \"additionalProperties\": false,\n \"required\": [\"title\", \"type\", \"properties\", \"schemaVersion\"],\n \"definitions\": {\n \"stringEnumProperty\": {\n \"title\": \"Enum property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"editor\": { \"enum\": [\"select\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"string\" },\n \"prefill\": { \"type\": \"string\" },\n \"example\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" },\n \"enum\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"minItems\": 1,\n \"uniqueItems\": true\n },\n \"enumTitles\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"minItems\": 1\n }\n },\n \"required\": [\"type\", \"title\", \"description\", \"enum\"]\n },\n \"stringProperty\": {\n \"title\": \"String property\",\n \"type\": \"object\",\n \"additionalProperties\": true,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"editor\": { \"enum\": [\"javascript\", \"python\", \"textfield\", \"textarea\", \"datepicker\", \"hidden\"] },\n \"isSecret\": { \"type\": \"boolean\" }\n },\n \"required\": [\"type\", \"title\", \"description\", \"editor\"],\n \"if\": {\n \"properties\": {\n \"isSecret\": {\n \"not\": {\n \"const\": true\n }\n }\n }\n },\n \"then\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"string\" },\n \"prefill\": { \"type\": \"string\" },\n \"example\": { \"type\": \"string\" },\n \"pattern\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minLength\": { \"type\": \"integer\" },\n \"maxLength\": { \"type\": \"integer\" },\n \"editor\": { \"enum\": [\"javascript\", \"python\", \"textfield\", \"textarea\", \"datepicker\", \"hidden\"] },\n \"isSecret\": { \"type\": \"boolean\" },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n }\n },\n \"else\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"example\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"editor\": { \"enum\": [\"textfield\", \"textarea\", \"hidden\"] },\n \"isSecret\": { \"type\": \"boolean\" },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n }\n }\n },\n \"arrayProperty\": {\n \"title\": \"Array property\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"enum\": [\"array\"] },\n \"editor\": { \"enum\": [\"json\", \"requestListSources\", \"pseudoUrls\", \"globs\", \"keyValue\", \"stringList\", \"select\", \"hidden\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"array\" },\n \"prefill\": { \"type\": \"array\" },\n \"example\": { \"type\": \"array\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minItems\": { \"type\": \"integer\" },\n \"maxItems\": { \"type\": \"integer\" },\n \"uniqueItems\": { \"type\": \"boolean\" },\n\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"additionalProperties\": true,\n \"required\": [\"type\", \"title\", \"description\", \"editor\"],\n \"if\": {\n \"properties\": {\n \"editor\": { \"const\": \"select\" }\n }\n },\n \"then\": {\n \"required\": [\"items\"],\n \"properties\": {\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"enum\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"uniqueItems\": true\n },\n \"enumTitles\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n },\n \"required\": [\"type\", \"enum\"]\n }\n }\n },\n \"else\": {\n \"properties\": {\n \"placeholderKey\": { \"type\": \"string\" },\n \"placeholderValue\": { \"type\": \"string\" },\n \"patternKey\": { \"type\": \"string\" },\n \"patternValue\": { \"type\": \"string\" }\n }\n }\n },\n \"objectProperty\": {\n \"title\": \"Object property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"object\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"object\" },\n \"prefill\": { \"type\": \"object\" },\n \"example\": { \"type\": \"object\" },\n \"patternKey\": { \"type\": \"string\" },\n \"patternValue\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minProperties\": { \"type\": \"integer\" },\n \"maxProperties\": { \"type\": \"integer\" },\n\n \"editor\": { \"enum\": [\"json\", \"proxy\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\", \"editor\"]\n },\n \"integerProperty\": {\n \"title\": \"Integer property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"integer\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"integer\" },\n \"prefill\": { \"type\": \"integer\" },\n \"example\": { \"type\": \"integer\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minimum\": { \"type\": \"integer\" },\n \"maximum\": { \"type\": \"integer\" },\n \"unit\": { \"type\": \"string\" },\n \"editor\": { \"enum\": [\"number\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\"]\n },\n \"booleanProperty\": {\n \"title\": \"Boolean property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"boolean\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"boolean\" },\n \"prefill\": { \"type\": \"boolean\" },\n \"example\": { \"type\": \"boolean\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"groupCaption\": { \"type\": \"string\" },\n \"groupDescription\": { \"type\": \"string\" },\n \"editor\": { \"enum\": [\"checkbox\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\"]\n },\n \"anyProperty\": {\n \"title\": \"Any property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"type\": [\"array\"],\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"]\n },\n \"uniqueItems\": true,\n \"additionalItems\": false,\n \"minItems\": 1\n },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"] },\n \"prefill\": { \"type\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"] },\n \"example\": { \"type\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"] },\n \"nullable\": { \"type\": \"boolean\" },\n \"editor\": { \"enum\": [\"json\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\", \"editor\"]\n }\n }\n}\n","import Ajv, { ErrorObject } from 'ajv';\nimport schema from './schema.json';\nimport { m } from './intl';\n\nexport { schema as inputSchema };\nconst { definitions } = schema;\n\n/**\n * This function parses AJV error and transforms it into a readable string.\n *\n * @param error An error as returned from AJV.\n * @param rootName Usually 'input' or 'schema' based on if we are passing the input or schema.\n * @param properties (Used only when parsing input errors) List of input schema properties.\n * @param input (Used only when parsing input errors) Actual input that is being parsed.\n * @returns {null|{fieldKey: *, message: *}}\n */\nexport function parseAjvError(\n error: ErrorObject,\n rootName: string,\n properties: Record<string, { nullable?: boolean }> = {},\n input: Record<string, unknown> = {},\n): { fieldKey: string; message: string } | null {\n // There are 3 possible errors comming from validation:\n // - either { keword: 'anything', instancePath: '/someField', message: 'error message that we can use' }\n // - or { keyword: 'additionalProperties', params: { additionalProperty: 'field' }, message: 'must NOT have additional properties' }\n // - or { keyword: 'required', instancePath: '', params.missingProperty: 'someField' }\n\n let fieldKey: string;\n let message: string;\n\n // If error is with keyword type, it means that type of input is incorrect\n // this can mean that provided value is null\n if (error.keyword === 'type') {\n fieldKey = error.instancePath.split('/').pop()!;\n // Check if value is null and field is nullable, if yes, then skip this error\n if (properties[fieldKey] && properties[fieldKey].nullable && input[fieldKey] === null) {\n return null;\n }\n message = m('inputSchema.validation.generic', { rootName, fieldKey, message: error.message });\n } else if (error.keyword === 'required') {\n fieldKey = error.params.missingProperty;\n message = m('inputSchema.validation.required', { rootName, fieldKey });\n } else if (error.keyword === 'additionalProperties') {\n fieldKey = error.params.additionalProperty;\n message = m('inputSchema.validation.additionalProperty', { rootName, fieldKey });\n } else if (error.keyword === 'enum') {\n fieldKey = error.instancePath.split('/').pop()!;\n const errorMessage = `${error.message}: \"${error.params.allowedValues.join('\", \"')}\"`;\n message = m('inputSchema.validation.generic', { rootName, fieldKey, message: errorMessage });\n } else {\n fieldKey = error.instancePath.split('/').pop()!;\n message = m('inputSchema.validation.generic', { rootName, fieldKey, message: error.message });\n }\n\n return { fieldKey, message };\n}\n\n/**\n * Validates given object against schema and throws a human readable error.\n */\nconst validateAgainstSchemaOrThrow = <T> (validator: Ajv, obj: T, inputSchema: any, rootName: string) => {\n if (validator.validate(inputSchema, obj)) return;\n\n const errorMessage = parseAjvError(validator.errors![0], rootName)?.message;\n throw new Error(`Input schema is not valid (${errorMessage})`);\n};\n\n/**\n * This validates given object only against the basic input schema without checking the particular fields.\n * We override schema.properties.properties not to validate field defitions.\n */\nconst validateBasicStructure = <T> (validator: Ajv, obj: T) => {\n const schemaWithoutProperties = { ...schema };\n schemaWithoutProperties.properties = { ...schema.properties, properties: { type: 'object' } as any };\n validateAgainstSchemaOrThrow(validator, obj, schemaWithoutProperties, 'schema');\n};\n\n/**\n * Validates particular field against it's schema.\n */\nconst validateField = <T extends Record<string, any>> (validator: Ajv, fieldSchema: T, fieldKey: string) => {\n const matchingDefinitions = Object\n .values<any>(definitions) // cast as any, as the code in first branch seems to be invalid\n .filter((definition) => {\n return definition.properties.type.enum\n // This is a normal case where fieldSchema.type can be only one possible value matching definition.properties.type.enum.0\n ? definition.properties.type.enum[0] === fieldSchema.type\n // This is a type \"Any\" where fieldSchema.type is an array of possible values\n : Array.isArray(fieldSchema.type);\n });\n\n // There is not matching definition.\n if (matchingDefinitions.length === 0) {\n const errorMessage = m('inputSchema.validation.noMatchingDefinition', { fieldKey });\n throw new Error(`Input schema is not valid (${errorMessage})`);\n }\n\n // If there is only one matching then we are done and simply compare it.\n if (matchingDefinitions.length === 1) {\n validateAgainstSchemaOrThrow(validator, fieldSchema, matchingDefinitions[0], `schema.properties.${fieldKey}`);\n return;\n }\n\n // If there are more matching definitions then the type is string and we need to get the right one.\n // If the definition contains \"enum\" property then it's enum type.\n if (fieldSchema.enum) {\n const definition = matchingDefinitions.filter((item) => !!item.properties.enum).pop();\n if (!definition) throw new Error('Input schema validation failed to find \"enum property\" definition');\n validateAgainstSchemaOrThrow(validator, fieldSchema, definition, `schema.properties.${fieldKey}.enum`);\n return;\n }\n // Otherwise we use the other definition.\n const definition = matchingDefinitions.filter((item) => !item.properties.enum).pop();\n if (!definition) throw new Error('Input schema validation failed to find other than \"enum property\" definition');\n\n validateAgainstSchemaOrThrow(validator, fieldSchema, definition, `schema.properties.${fieldKey}`);\n};\n\n/**\n * Validates that all required fields are present in properties list\n */\nexport function validateExistenceOfRequiredFields<T extends Record<string, any>>(inputSchema: T) {\n // If the input schema does not have any required fields, we do not need to validate them\n if (!inputSchema?.required?.length) return;\n\n Object.values(inputSchema?.required).forEach((fieldKey) => {\n // If the required field is present in the list of properties, we can check the next one\n if (inputSchema?.properties[fieldKey as string]) return;\n\n // The required field is not defined in list of properties. Which means the schema is not valid.\n throw new Error(m('inputSchema.validation.missingRequiredField', { fieldKey }));\n });\n}\n\n/**\n * This function validates given input schema first just for basic structure then each field one by one,\n * then checks that all required fields are present and finally checks fully against the whole schema.\n *\n * This way we get the most accurate error message for user.\n */\nexport function validateInputSchema<T extends Record<string, any>>(validator: Ajv, inputSchema: T) {\n // First validate just basic structure without fields.\n validateBasicStructure(validator, inputSchema);\n\n // Then validate each field separately.\n Object.entries<any>(inputSchema.properties).forEach(([fieldKey, fieldSchema]) => validateField(validator, fieldSchema, fieldKey));\n\n // Next validate if required fields are actually present in the schema\n validateExistenceOfRequiredFields(inputSchema);\n\n // Finally just to be sure run validation against the whole shema.\n validateAgainstSchemaOrThrow(validator, inputSchema, schema, 'schema');\n}\n","import { PROXY_URL_REGEX, URL_REGEX } from '@apify/consts';\nimport { countries } from 'countries-list';\nimport { ValidateFunction } from 'ajv';\nimport { parse } from 'acorn-loose';\nimport { m } from './intl';\nimport { parseAjvError } from './input_schema';\n\n/**\n * Validates input field configured with proxy editor\n * @param fieldKey Proxy field value\n * @param value Proxy field value\n * @param [isRequired] Whether the field is required or not\n * @param [options] Information about proxy groups availability\n * @param [options.hasAutoProxyGroups] Informs validation whether user has atleast one proxy group available in auto mode\n * @param [options.availableProxyGroups] List of available proxy groups\n * @param [options.disabledProxyGroups] Object with groupId as key and error message as value (mostly for residential/SERP)\n */\nfunction validateProxyField(\n fieldKey: Record<string, unknown>,\n value: Record<string, any>,\n isRequired = false,\n options: { hasAutoProxyGroups?: boolean; availableProxyGroups?: string[]; disabledProxyGroups?: Record<string, unknown> } | null = null,\n) {\n const fieldErrors: any[] = [];\n if (isRequired) {\n // Nullable error is already handled by AJV\n if (value === null) return fieldErrors;\n if (!value) {\n const message = m('inputSchema.validation.required', { rootName: 'input', fieldKey });\n fieldErrors.push(message);\n return fieldErrors;\n }\n\n const { useApifyProxy, proxyUrls } = value;\n if (!useApifyProxy && (!Array.isArray(proxyUrls) || proxyUrls.length === 0)) {\n fieldErrors.push(m('inputSchema.validation.proxyRequired', { rootName: 'input', fieldKey }));\n return fieldErrors;\n }\n }\n\n // Input is not required, so missing value is valid\n if (!value) return fieldErrors;\n\n const { useApifyProxy, proxyUrls, apifyProxyGroups, apifyProxyCountry } = value;\n\n if (!useApifyProxy && Array.isArray(proxyUrls)) {\n let invalidUrl = false;\n proxyUrls.forEach((url) => {\n if (!PROXY_URL_REGEX.test(url.trim())) invalidUrl = url.trim();\n });\n if (invalidUrl) {\n fieldErrors.push(m('inputSchema.validation.customProxyInvalid', { invalidUrl }));\n }\n }\n\n // Apify proxy country can be set only when using Apify proxy\n if (!useApifyProxy && apifyProxyCountry) {\n fieldErrors.push(m('inputSchema.validation.apifyProxyCountryWithoutApifyProxyForbidden'));\n }\n\n // If Apify proxy is not used skip additional checks\n if (!useApifyProxy) return fieldErrors;\n\n // If Apify proxy is used, check if there is a selected country and if so, check that it's valid (empty or a valid country code)\n if (apifyProxyCountry && !countries[apifyProxyCountry]) {\n fieldErrors.push(m('inputSchema.validation.apifyProxyCountryInvalid', { invalidCountry: apifyProxyCountry }));\n }\n\n // If options are not provided skip additional checks\n if (!options) return fieldErrors;\n\n // if apifyProxyGroups exists it must be an array of strings\n const isStringsArray = (array: Array<string>) => array.every((item) => typeof item === 'string');\n if (apifyProxyGroups && !(Array.isArray(apifyProxyGroups) && isStringsArray(apifyProxyGroups))) {\n fieldErrors.push(m('inputSchema.validation.proxyGroupMustBeArrayOfStrings', { rootName: 'input', fieldKey }));\n return fieldErrors;\n }\n\n const selectedProxyGroups = (apifyProxyGroups || []);\n\n // Auto mode, check that user has access to alteast one proxy group usable in this mode\n if (!selectedProxyGroups.length && !options.hasAutoProxyGroups) {\n fieldErrors.push(m('inputSchema.validation.noAvailableAutoProxy'));\n return fieldErrors;\n }\n\n // Check if proxy groups selected by user are available to him\n const availableProxyGroupsById = {};\n (options.availableProxyGroups || []).forEach((group) => { availableProxyGroupsById[group] = true; });\n const unavailableProxyGroups = selectedProxyGroups.filter((group: string) => !availableProxyGroupsById[group]);\n\n if (unavailableProxyGroups.length) {\n fieldErrors.push(m('inputSchema.validation.proxyGroupsNotAvailable', {\n rootName: 'input',\n fieldKey,\n groups: unavailableProxyGroups.join(', '),\n }));\n }\n\n // Check if any of the proxy groups are blocked and if yes then output the associated message\n const blockedProxyGroupsById = options.disabledProxyGroups || {};\n selectedProxyGroups\n .filter((group: string) => blockedProxyGroupsById[group])\n .forEach((blockedGroup: string) => {\n fieldErrors.push(blockedProxyGroupsById[blockedGroup]);\n });\n\n return fieldErrors;\n}\n\n/**\n * Uses AJV validator to validate input with input schema and then\n * does custom validation for our own properties (nullable, patternKey, patternValue)\n * @param validator Initialized AJV validator\n * @param inputSchema Valid input schema in object\n * @param input Input object to be validated\n * @param options (Optional) Additional validation configuration for certain fields\n */\nexport function validateInputUsingValidator(\n validator: ValidateFunction,\n inputSchema: Record<string, any>,\n input: Record<string, unknown>,\n options: Record<string, any> = {},\n) {\n const isValid = validator(input); // Check if input is valid based on schema values\n\n const { properties } = inputSchema;\n const required = inputSchema.required || [];\n\n let errors: { fieldKey: string, message: string }[] = [];\n // Process AJV validation errors\n if (!isValid) {\n errors = validator.errors!\n .map((error) => parseAjvError(error, 'input', properties, input))\n .filter((error) => !!error) as any[];\n }\n\n Object.keys(properties).forEach((property) => {\n const value = input[property] as Record<string, any>;\n const { type, editor, patternKey, patternValue } = properties[property];\n const fieldErrors = [];\n // Check that proxy is required, if yes, valides that it's correctly setup\n if (type === 'object' && editor === 'proxy') {\n const proxyValidationErrors = validateProxyField(property as any, value, required.includes(property), options.proxy);\n proxyValidationErrors.forEach((error) => {\n fieldErrors.push(error);\n });\n }\n // Check that array items fit patternKey and patternValue\n if (type === 'array' && value && Array.isArray(value)) {\n if (editor === 'requestListSources') {\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!item) invalidIndexes.push(index);\n else if (!item.url && !item.requestsFromUrl) invalidIndexes.push(index);\n else if (item.url && !URL_REGEX.test(item.url)) invalidIndexes.push(index);\n else if (item.requestsFromUrl && !URL_REGEX.test(item.requestsFromUrl)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.requestListSourcesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n }));\n }\n }\n // If patternKey is provided, then validate keys of objects in array\n if (patternKey && editor === 'keyValue') {\n const check = new RegExp(patternKey);\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!check.test(item.key)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.arrayKeysInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n pattern: patternKey,\n }));\n }\n }\n // If patternValue is provided and editor is keyValue, then validate values of objecs in array\n if (patternValue && editor === 'keyValue') {\n const check = new RegExp(patternValue);\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!check.test(item.value)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.arrayValuesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n pattern: patternValue,\n }));\n }\n // If patternValue is provided and editor is stringList, then validate each item in array\n } else if (patternValue && editor === 'stringList') {\n const check = new RegExp(patternValue);\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!check.test(item)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.arrayValuesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n pattern: patternValue,\n }));\n }\n }\n }\n // Check that object items fit patternKey and patternValue\n if (type === 'object' && value) {\n if (patternKey) {\n const check = new RegExp(patternKey);\n const invalidKeys: any[] = [];\n Object.keys(value).forEach((key) => {\n if (!check.test(key)) invalidKeys.push(key);\n });\n if (invalidKeys.length) {\n fieldErrors.push(m('inputSchema.validation.objectKeysInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidKeys: invalidKeys.join(','),\n pattern: patternKey,\n }));\n }\n }\n if (patternValue) {\n const check = new RegExp(patternValue);\n const invalidKeys: any[] = [];\n Object.keys(value).forEach((key) => {\n const propertyValue = value[key];\n if (typeof propertyValue !== 'string' || !check.test(propertyValue)) invalidKeys.push(key);\n });\n if (invalidKeys.length) {\n fieldErrors.push(m('inputSchema.validation.objectValuesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidKeys: invalidKeys.join(','),\n pattern: patternValue,\n }));\n }\n }\n }\n if (fieldErrors.length > 0) {\n const message = fieldErrors.join(', ');\n errors.push({ fieldKey: property, message });\n }\n });\n\n return errors;\n}\n\n/**\n * This functions parses all given JSON and then takes each of the jsFields.\n * Then if the field:\n * - is valid JS single function it replaces its single line string with a function delacation.\n * - is valid multiline JS code then replaces its single line string with `multiline` string\n * Then stringifies the code with given number of jsonSpacing spaces and finally prefixes whole\n * stringified JSON except the first line with globalSpacing spaces.\n */\nexport function makeInputJsFieldsReadable(json: string, jsFields: string[], jsonSpacing = 4, globalSpacing = 0): string {\n const parsedJson = JSON.parse(json);\n const replacements: Record<string, any> = {};\n\n jsFields.forEach((field) => {\n let maybeFunction = parsedJson[field];\n if (!maybeFunction || typeof maybeFunction !== 'string') return;\n\n let ast;\n try {\n ast = parse(maybeFunction, { ecmaVersion: 'latest' });\n } catch (err) {\n // Don't do anything in a case of invalid JS code.\n return;\n }\n\n const isMultiline = maybeFunction.includes('\\n');\n const isSingleFunction = ast\n && ast.body.length === 1\n && (\n ast.body[0].type === 'FunctionDeclaration'\n || (ast.body[0].type === 'ExpressionStatement' && ast.body[0].expression.type === 'ArrowFunctionExpression')\n );\n\n // If it's not a function declaration or multiline JS code then we do nothing.\n if (!isSingleFunction && !isMultiline) return;\n\n const spaces = (new Array(isSingleFunction ? jsonSpacing : jsonSpacing * 2)).fill(' ').join('');\n maybeFunction = maybeFunction\n .split('\\n').join(`\\n${spaces}`) // This prefixes each line with spaces.\n .trim(); // Trim whitespace on both sides\n\n const replacementValue = isSingleFunction\n ? maybeFunction.replace(/[;]+$/g, '') // Remove trailing semicolons\n : `\\`${maybeFunction}\\``;\n const replacementToken = `<<<REPLACEMENT_TOKEN:${Math.random()}>>>`;\n replacements[replacementToken] = replacementValue;\n parsedJson[field] = replacementToken;\n });\n\n let niceJson = JSON.stringify(parsedJson, null, jsonSpacing);\n\n Object.entries(replacements).forEach(([replacementToken, replacementValue]) => {\n niceJson = niceJson.replace(`\"${replacementToken}\"`, replacementValue);\n });\n\n const globalSpaces = (new Array(globalSpacing)).fill(' ').join('');\n niceJson = niceJson.split('\\n').join(`\\n${globalSpaces}`);\n\n return niceJson;\n}\n"],"mappings":"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","names":["definition","useApifyProxy","proxyUrls"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/intl.ts","../../src/schema.json","../../src/input_schema.ts","../../src/utilities.ts"],"sourcesContent":["export * from './intl';\nexport * from './input_schema';\nexport {\n StringFieldDefinition,\n BooleanFieldDefinition,\n IntegerFieldDefinition,\n ObjectFieldDefinition,\n ArrayFieldDefinition,\n MixedFieldDefinition,\n FieldDefinition,\n InputSchema,\n} from './types';\nexport * from './utilities';\n","const intlStrings = {\n 'inputSchema.validation.generic':\n 'Field {rootName}.{fieldKey} {message}',\n 'inputSchema.validation.required':\n 'Field {rootName}.{fieldKey} is required',\n 'inputSchema.validation.proxyRequired':\n 'Field {rootName}.{fieldKey} is required. Please provide custom proxy URLs or use Apify Proxy.',\n 'inputSchema.validation.requestListSourcesInvalid':\n 'Items in {rootName}.{fieldKey} at positions [{invalidIndexes}] do not contain valid URLs',\n 'inputSchema.validation.arrayKeysInvalid':\n 'Keys in {rootName}.{fieldKey} at positions [{invalidIndexes}] must match regular expression \"{pattern}\"',\n 'inputSchema.validation.arrayValuesInvalid':\n 'Values in {rootName}.{fieldKey} at positions [{invalidIndexes}] must match regular expression \"{pattern}\"',\n 'inputSchema.validation.objectKeysInvalid':\n 'Keys [{invalidKeys}] in {rootName}.{fieldKey} must match regular expression \"{pattern}',\n 'inputSchema.validation.objectValuesInvalid':\n 'Keys [{invalidKeys}] in {rootName}.{fieldKey} must have string value which matches regular expression \"{pattern}\"',\n 'inputSchema.validation.additionalProperty':\n 'Property {rootName}.{fieldKey} is not allowed.',\n 'inputSchema.validation.proxyGroupsNotAvailable':\n 'You currently do not have access to proxy groups: {groups}',\n 'inputSchema.validation.customProxyInvalid':\n 'Proxy URL \"{invalidUrl}\" has invalid format, it must be http[s]://[username[:password]]@hostname:port.',\n 'inputSchema.validation.apifyProxyCountryInvalid':\n 'Country code \"{invalidCountry}\" is invalid. Only ISO 3166-1 alpha-2 country codes are supported.',\n 'inputSchema.validation.apifyProxyCountryWithoutApifyProxyForbidden':\n 'The country for Apify Proxy can be specified only when using Apify Proxy.',\n 'inputSchema.validation.noAvailableAutoProxy':\n 'Currently you do not have access to any proxy group usable in automatic mode.',\n 'inputSchema.validation.noMatchingDefinition':\n 'Field schema.properties.{fieldKey} is not matching any input schema type definition. Please make sure that it\\'s type is valid.',\n 'inputSchema.validation.missingRequiredField':\n 'Field schema.properties.{fieldKey} does not exist, but it is specified in schema.required. Either define the field or remove it from schema.required.',\n 'inputSchema.validation.proxyGroupMustBeArrayOfStrings':\n 'Field {rootName}.{fieldKey}.apifyProxyGroups must be an array of strings.',\n};\n\n/**\n * Helper function to simulate intl formatMessage function\n */\nexport function m(stringId: string, variables?: Record<string, any>) {\n let text = intlStrings[stringId as keyof typeof intlStrings];\n if (!text) return stringId;\n\n if (variables) {\n Object.keys(variables).forEach((variableName) => {\n text = text.split(`{${variableName}}`).join(variables[variableName]);\n });\n }\n\n return text;\n}\n","{\n \"title\": \"JSON schema of Apify Actor INPUT_SCHEMA.json\",\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"schemaVersion\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"maximum\": 1\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"enum\": [\"object\"]\n },\n \"required\": {\n \"type\": \"array\",\n \"minItems\": 0,\n \"items\": { \"type\": \"string\" },\n \"uniqueItems\": true\n },\n \"additionalProperties\": {\n \"type\": \"boolean\"\n },\n \"properties\": {\n \"type\": \"object\",\n \"patternProperties\": {\n \"^\": {\n \"oneOf\": [\n { \"$ref\": \"#/definitions/stringProperty\" },\n { \"$ref\": \"#/definitions/stringEnumProperty\" },\n { \"$ref\": \"#/definitions/arrayProperty\" },\n { \"$ref\": \"#/definitions/objectProperty\" },\n { \"$ref\": \"#/definitions/integerProperty\" },\n { \"$ref\": \"#/definitions/booleanProperty\" },\n { \"$ref\": \"#/definitions/anyProperty\" }\n ]\n }\n }\n }\n },\n \"additionalProperties\": false,\n \"required\": [\"title\", \"type\", \"properties\", \"schemaVersion\"],\n \"definitions\": {\n \"stringEnumProperty\": {\n \"title\": \"Enum property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"editor\": { \"enum\": [\"select\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"string\" },\n \"prefill\": { \"type\": \"string\" },\n \"example\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" },\n \"enum\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"minItems\": 1,\n \"uniqueItems\": true\n },\n \"enumTitles\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"minItems\": 1\n }\n },\n \"required\": [\"type\", \"title\", \"description\", \"enum\"]\n },\n \"stringProperty\": {\n \"title\": \"String property\",\n \"type\": \"object\",\n \"additionalProperties\": true,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"editor\": { \"enum\": [\"javascript\", \"python\", \"textfield\", \"textarea\", \"datepicker\", \"hidden\"] },\n \"isSecret\": { \"type\": \"boolean\" }\n },\n \"required\": [\"type\", \"title\", \"description\", \"editor\"],\n \"if\": {\n \"properties\": {\n \"isSecret\": {\n \"not\": {\n \"const\": true\n }\n }\n }\n },\n \"then\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"string\" },\n \"prefill\": { \"type\": \"string\" },\n \"example\": { \"type\": \"string\" },\n \"pattern\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minLength\": { \"type\": \"integer\" },\n \"maxLength\": { \"type\": \"integer\" },\n \"editor\": { \"enum\": [\"javascript\", \"python\", \"textfield\", \"textarea\", \"datepicker\", \"hidden\"] },\n \"isSecret\": { \"type\": \"boolean\" },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n }\n },\n \"else\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"example\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"editor\": { \"enum\": [\"textfield\", \"textarea\", \"hidden\"] },\n \"isSecret\": { \"type\": \"boolean\" },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n }\n }\n },\n \"arrayProperty\": {\n \"title\": \"Array property\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"enum\": [\"array\"] },\n \"editor\": { \"enum\": [\"json\", \"requestListSources\", \"pseudoUrls\", \"globs\", \"keyValue\", \"stringList\", \"select\", \"hidden\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"array\" },\n \"prefill\": { \"type\": \"array\" },\n \"example\": { \"type\": \"array\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minItems\": { \"type\": \"integer\" },\n \"maxItems\": { \"type\": \"integer\" },\n \"uniqueItems\": { \"type\": \"boolean\" },\n\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"additionalProperties\": true,\n \"required\": [\"type\", \"title\", \"description\", \"editor\"],\n \"if\": {\n \"properties\": {\n \"editor\": { \"const\": \"select\" }\n }\n },\n \"then\": {\n \"required\": [\"items\"],\n \"properties\": {\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"enum\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"uniqueItems\": true\n },\n \"enumTitles\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n },\n \"required\": [\"type\", \"enum\"]\n }\n }\n },\n \"else\": {\n \"properties\": {\n \"placeholderKey\": { \"type\": \"string\" },\n \"placeholderValue\": { \"type\": \"string\" },\n \"patternKey\": { \"type\": \"string\" },\n \"patternValue\": { \"type\": \"string\" }\n }\n }\n },\n \"objectProperty\": {\n \"title\": \"Object property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"object\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"object\" },\n \"prefill\": { \"type\": \"object\" },\n \"example\": { \"type\": \"object\" },\n \"patternKey\": { \"type\": \"string\" },\n \"patternValue\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minProperties\": { \"type\": \"integer\" },\n \"maxProperties\": { \"type\": \"integer\" },\n\n \"editor\": { \"enum\": [\"json\", \"proxy\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\", \"editor\"]\n },\n \"integerProperty\": {\n \"title\": \"Integer property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"integer\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"integer\" },\n \"prefill\": { \"type\": \"integer\" },\n \"example\": { \"type\": \"integer\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minimum\": { \"type\": \"integer\" },\n \"maximum\": { \"type\": \"integer\" },\n \"unit\": { \"type\": \"string\" },\n \"editor\": { \"enum\": [\"number\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\"]\n },\n \"booleanProperty\": {\n \"title\": \"Boolean property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"boolean\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"boolean\" },\n \"prefill\": { \"type\": \"boolean\" },\n \"example\": { \"type\": \"boolean\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"groupCaption\": { \"type\": \"string\" },\n \"groupDescription\": { \"type\": \"string\" },\n \"editor\": { \"enum\": [\"checkbox\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\"]\n },\n \"anyProperty\": {\n \"title\": \"Any property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"type\": [\"array\"],\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"]\n },\n \"uniqueItems\": true,\n \"additionalItems\": false,\n \"minItems\": 1\n },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"] },\n \"prefill\": { \"type\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"] },\n \"example\": { \"type\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"] },\n \"nullable\": { \"type\": \"boolean\" },\n \"editor\": { \"enum\": [\"json\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\", \"editor\"]\n }\n }\n}\n","import Ajv, { ErrorObject, Schema } from 'ajv';\n\nimport { m } from './intl';\nimport schema from './schema.json';\nimport {\n FieldDefinition,\n InputSchema,\n InputSchemaBaseChecked,\n StringFieldDefinition,\n} from './types';\n\nexport { schema as inputSchema };\n\nconst { definitions } = schema;\n\n/**\n * This function parses AJV error and transforms it into a readable string.\n *\n * @param error An error as returned from AJV.\n * @param rootName Usually 'input' or 'schema' based on if we are passing the input or schema.\n * @param properties (Used only when parsing input errors) List of input schema properties.\n * @param input (Used only when parsing input errors) Actual input that is being parsed.\n * @returns {null|{fieldKey: *, message: *}}\n */\nexport function parseAjvError(\n error: ErrorObject,\n rootName: string,\n properties: Record<string, { nullable?: boolean }> = {},\n input: Record<string, unknown> = {},\n): { fieldKey: string; message: string } | null {\n // There are 3 possible errors comming from validation:\n // - either { keword: 'anything', instancePath: '/someField', message: 'error message that we can use' }\n // - or { keyword: 'additionalProperties', params: { additionalProperty: 'field' }, message: 'must NOT have additional properties' }\n // - or { keyword: 'required', instancePath: '', params.missingProperty: 'someField' }\n\n let fieldKey: string;\n let message: string;\n\n // If error is with keyword type, it means that type of input is incorrect\n // this can mean that provided value is null\n if (error.keyword === 'type') {\n fieldKey = error.instancePath.split('/').pop()!;\n // Check if value is null and field is nullable, if yes, then skip this error\n if (properties[fieldKey] && properties[fieldKey].nullable && input[fieldKey] === null) {\n return null;\n }\n message = m('inputSchema.validation.generic', { rootName, fieldKey, message: error.message });\n } else if (error.keyword === 'required') {\n fieldKey = error.params.missingProperty;\n message = m('inputSchema.validation.required', { rootName, fieldKey });\n } else if (error.keyword === 'additionalProperties') {\n fieldKey = error.params.additionalProperty;\n message = m('inputSchema.validation.additionalProperty', { rootName, fieldKey });\n } else if (error.keyword === 'enum') {\n fieldKey = error.instancePath.split('/').pop()!;\n const errorMessage = `${error.message}: \"${error.params.allowedValues.join('\", \"')}\"`;\n message = m('inputSchema.validation.generic', { rootName, fieldKey, message: errorMessage });\n } else {\n fieldKey = error.instancePath.split('/').pop()!;\n message = m('inputSchema.validation.generic', { rootName, fieldKey, message: error.message });\n }\n\n return { fieldKey, message };\n}\n\n/**\n * Validates given object against schema and throws a human-readable error.\n */\nconst validateAgainstSchemaOrThrow = (validator: Ajv, obj: Record<string, unknown>, inputSchema: Schema, rootName: string) => {\n if (validator.validate(inputSchema, obj)) return;\n\n const errorMessage = parseAjvError(validator.errors![0], rootName)?.message;\n throw new Error(`Input schema is not valid (${errorMessage})`);\n};\n\n/**\n * This validates given object only against the basic input schema without checking the particular fields.\n * We override schema.properties.properties not to validate field definitions.\n */\nfunction validateBasicStructure(validator: Ajv, obj: Record<string, unknown>): asserts obj is InputSchemaBaseChecked {\n const schemaWithoutProperties = {\n ...schema,\n properties: { ...schema.properties, properties: { type: 'object' } as any },\n };\n validateAgainstSchemaOrThrow(validator, obj, schemaWithoutProperties, 'schema');\n}\n\n/**\n * Validates particular field against it's schema.\n */\nfunction validateField(validator: Ajv, fieldSchema: Record<string, unknown>, fieldKey: string): asserts fieldSchema is FieldDefinition {\n const matchingDefinitions = Object\n .values<any>(definitions) // cast as any, as the code in first branch seems to be invalid\n .filter((definition) => {\n return definition.properties.type.enum\n // This is a normal case where fieldSchema.type can be only one possible value matching definition.properties.type.enum.0\n ? definition.properties.type.enum[0] === fieldSchema.type\n // This is a type \"Any\" where fieldSchema.type is an array of possible values\n : Array.isArray(fieldSchema.type);\n });\n\n // There is not matching definition.\n if (matchingDefinitions.length === 0) {\n const errorMessage = m('inputSchema.validation.noMatchingDefinition', { fieldKey });\n throw new Error(`Input schema is not valid (${errorMessage})`);\n }\n\n // If there is only one matching then we are done and simply compare it.\n if (matchingDefinitions.length === 1) {\n validateAgainstSchemaOrThrow(validator, fieldSchema, matchingDefinitions[0], `schema.properties.${fieldKey}`);\n return;\n }\n\n // If there are more matching definitions then the type is string, and we need to get the right one.\n // If the definition contains \"enum\" property then it's enum type.\n if ((fieldSchema as StringFieldDefinition).enum) {\n const definition = matchingDefinitions.filter((item) => !!item.properties.enum).pop();\n if (!definition) throw new Error('Input schema validation failed to find \"enum property\" definition');\n validateAgainstSchemaOrThrow(validator, fieldSchema, definition, `schema.properties.${fieldKey}.enum`);\n return;\n }\n // Otherwise we use the other definition.\n const definition = matchingDefinitions.filter((item) => !item.properties.enum).pop();\n if (!definition) throw new Error('Input schema validation failed to find other than \"enum property\" definition');\n\n validateAgainstSchemaOrThrow(validator, fieldSchema, definition, `schema.properties.${fieldKey}`);\n}\n\n/**\n * Validates all properties in the input schema\n */\nfunction validateProperties(inputSchema: InputSchemaBaseChecked, validator: Ajv): asserts inputSchema is InputSchema {\n Object.entries(inputSchema.properties).forEach(([fieldKey, fieldSchema]) => (\n validateField(validator, fieldSchema, fieldKey)),\n );\n}\n\n/**\n * Validates that all required fields are present in properties list\n */\nexport function validateExistenceOfRequiredFields(inputSchema: InputSchema) {\n // If the input schema does not have any required fields, we do not need to validate them\n if (!inputSchema?.required?.length) return;\n\n Object.values(inputSchema?.required).forEach((fieldKey) => {\n // If the required field is present in the list of properties, we can check the next one\n if (inputSchema?.properties[fieldKey as string]) return;\n\n // The required field is not defined in list of properties. Which means the schema is not valid.\n throw new Error(m('inputSchema.validation.missingRequiredField', { fieldKey }));\n });\n}\n\n/**\n * This function validates given input schema first just for basic structure then each field one by one,\n * then checks that all required fields are present and finally checks fully against the whole schema.\n *\n * This way we get the most accurate error message for user.\n */\nexport function validateInputSchema(validator: Ajv, inputSchema: Record<string, unknown>): asserts inputSchema is InputSchema {\n // First validate just basic structure without fields.\n validateBasicStructure(validator, inputSchema);\n\n // Then validate each field separately.\n validateProperties(inputSchema, validator);\n\n // Next validate if required fields are actually present in the schema\n validateExistenceOfRequiredFields(inputSchema);\n\n // Finally just to be sure run validation against the whole schema.\n validateAgainstSchemaOrThrow(validator, inputSchema, schema, 'schema');\n}\n","import { PROXY_URL_REGEX, URL_REGEX } from '@apify/consts';\nimport { parse } from 'acorn-loose';\nimport { ValidateFunction } from 'ajv';\nimport { countries } from 'countries-list';\n\nimport { parseAjvError } from './input_schema';\nimport { m } from './intl';\n\n/**\n * Validates input field configured with proxy editor\n * @param fieldKey Proxy field value\n * @param value Proxy field value\n * @param [isRequired] Whether the field is required or not\n * @param [options] Information about proxy groups availability\n * @param [options.hasAutoProxyGroups] Informs validation whether user has atleast one proxy group available in auto mode\n * @param [options.availableProxyGroups] List of available proxy groups\n * @param [options.disabledProxyGroups] Object with groupId as key and error message as value (mostly for residential/SERP)\n */\nfunction validateProxyField(\n fieldKey: Record<string, unknown>,\n value: Record<string, any>,\n isRequired = false,\n options: { hasAutoProxyGroups?: boolean; availableProxyGroups?: string[]; disabledProxyGroups?: Record<string, unknown> } | null = null,\n) {\n const fieldErrors: any[] = [];\n if (isRequired) {\n // Nullable error is already handled by AJV\n if (value === null) return fieldErrors;\n if (!value) {\n const message = m('inputSchema.validation.required', { rootName: 'input', fieldKey });\n fieldErrors.push(message);\n return fieldErrors;\n }\n\n const { useApifyProxy, proxyUrls } = value;\n if (!useApifyProxy && (!Array.isArray(proxyUrls) || proxyUrls.length === 0)) {\n fieldErrors.push(m('inputSchema.validation.proxyRequired', { rootName: 'input', fieldKey }));\n return fieldErrors;\n }\n }\n\n // Input is not required, so missing value is valid\n if (!value) return fieldErrors;\n\n const { useApifyProxy, proxyUrls, apifyProxyGroups, apifyProxyCountry } = value;\n\n if (!useApifyProxy && Array.isArray(proxyUrls)) {\n let invalidUrl = false;\n proxyUrls.forEach((url) => {\n if (!PROXY_URL_REGEX.test(url.trim())) invalidUrl = url.trim();\n });\n if (invalidUrl) {\n fieldErrors.push(m('inputSchema.validation.customProxyInvalid', { invalidUrl }));\n }\n }\n\n // Apify proxy country can be set only when using Apify proxy\n if (!useApifyProxy && apifyProxyCountry) {\n fieldErrors.push(m('inputSchema.validation.apifyProxyCountryWithoutApifyProxyForbidden'));\n }\n\n // If Apify proxy is not used skip additional checks\n if (!useApifyProxy) return fieldErrors;\n\n // If Apify proxy is used, check if there is a selected country and if so, check that it's valid (empty or a valid country code)\n if (apifyProxyCountry && !countries[apifyProxyCountry as keyof typeof countries]) {\n fieldErrors.push(m('inputSchema.validation.apifyProxyCountryInvalid', { invalidCountry: apifyProxyCountry }));\n }\n\n // If options are not provided skip additional checks\n if (!options) return fieldErrors;\n\n // if apifyProxyGroups exists it must be an array of strings\n const isStringsArray = (array: Array<string>) => array.every((item) => typeof item === 'string');\n if (apifyProxyGroups && !(Array.isArray(apifyProxyGroups) && isStringsArray(apifyProxyGroups))) {\n fieldErrors.push(m('inputSchema.validation.proxyGroupMustBeArrayOfStrings', { rootName: 'input', fieldKey }));\n return fieldErrors;\n }\n\n const selectedProxyGroups = (apifyProxyGroups || []);\n\n // Auto mode, check that user has access to alteast one proxy group usable in this mode\n if (!selectedProxyGroups.length && !options.hasAutoProxyGroups) {\n fieldErrors.push(m('inputSchema.validation.noAvailableAutoProxy'));\n return fieldErrors;\n }\n\n // Check if proxy groups selected by user are available to him\n const availableProxyGroupsById = {} as Record<string, boolean>;\n (options.availableProxyGroups || []).forEach((group) => { availableProxyGroupsById[group] = true; });\n const unavailableProxyGroups = selectedProxyGroups.filter((group: string) => !availableProxyGroupsById[group]);\n\n if (unavailableProxyGroups.length) {\n fieldErrors.push(m('inputSchema.validation.proxyGroupsNotAvailable', {\n rootName: 'input',\n fieldKey,\n groups: unavailableProxyGroups.join(', '),\n }));\n }\n\n // Check if any of the proxy groups are blocked and if yes then output the associated message\n const blockedProxyGroupsById = options.disabledProxyGroups || {};\n selectedProxyGroups\n .filter((group: string) => blockedProxyGroupsById[group])\n .forEach((blockedGroup: string) => {\n fieldErrors.push(blockedProxyGroupsById[blockedGroup]);\n });\n\n return fieldErrors;\n}\n\n/**\n * Uses AJV validator to validate input with input schema and then\n * does custom validation for our own properties (nullable, patternKey, patternValue)\n * @param validator Initialized AJV validator\n * @param inputSchema Valid input schema in object\n * @param input Input object to be validated\n * @param options (Optional) Additional validation configuration for certain fields\n */\nexport function validateInputUsingValidator(\n validator: ValidateFunction,\n inputSchema: Record<string, any>,\n input: Record<string, unknown>,\n options: Record<string, any> = {},\n) {\n const isValid = validator(input); // Check if input is valid based on schema values\n\n const { properties } = inputSchema;\n const required = inputSchema.required || [];\n\n let errors: { fieldKey: string, message: string }[] = [];\n // Process AJV validation errors\n if (!isValid) {\n errors = validator.errors!\n .map((error) => parseAjvError(error, 'input', properties, input))\n .filter((error) => !!error) as any[];\n }\n\n Object.keys(properties).forEach((property) => {\n const value = input[property] as Record<string, any>;\n const { type, editor, patternKey, patternValue } = properties[property];\n const fieldErrors = [];\n // Check that proxy is required, if yes, valides that it's correctly setup\n if (type === 'object' && editor === 'proxy') {\n const proxyValidationErrors = validateProxyField(property as any, value, required.includes(property), options.proxy);\n proxyValidationErrors.forEach((error) => {\n fieldErrors.push(error);\n });\n }\n // Check that array items fit patternKey and patternValue\n if (type === 'array' && value && Array.isArray(value)) {\n if (editor === 'requestListSources') {\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!item) invalidIndexes.push(index);\n else if (!item.url && !item.requestsFromUrl) invalidIndexes.push(index);\n else if (item.url && !URL_REGEX.test(item.url)) invalidIndexes.push(index);\n else if (item.requestsFromUrl && !URL_REGEX.test(item.requestsFromUrl)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.requestListSourcesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n }));\n }\n }\n // If patternKey is provided, then validate keys of objects in array\n if (patternKey && editor === 'keyValue') {\n const check = new RegExp(patternKey);\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!check.test(item.key)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.arrayKeysInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n pattern: patternKey,\n }));\n }\n }\n // If patternValue is provided and editor is keyValue, then validate values of objecs in array\n if (patternValue && editor === 'keyValue') {\n const check = new RegExp(patternValue);\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!check.test(item.value)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.arrayValuesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n pattern: patternValue,\n }));\n }\n // If patternValue is provided and editor is stringList, then validate each item in array\n } else if (patternValue && editor === 'stringList') {\n const check = new RegExp(patternValue);\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!check.test(item)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.arrayValuesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n pattern: patternValue,\n }));\n }\n }\n }\n // Check that object items fit patternKey and patternValue\n if (type === 'object' && value) {\n if (patternKey) {\n const check = new RegExp(patternKey);\n const invalidKeys: any[] = [];\n Object.keys(value).forEach((key) => {\n if (!check.test(key)) invalidKeys.push(key);\n });\n if (invalidKeys.length) {\n fieldErrors.push(m('inputSchema.validation.objectKeysInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidKeys: invalidKeys.join(','),\n pattern: patternKey,\n }));\n }\n }\n if (patternValue) {\n const check = new RegExp(patternValue);\n const invalidKeys: any[] = [];\n Object.keys(value).forEach((key) => {\n const propertyValue = value[key];\n if (typeof propertyValue !== 'string' || !check.test(propertyValue)) invalidKeys.push(key);\n });\n if (invalidKeys.length) {\n fieldErrors.push(m('inputSchema.validation.objectValuesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidKeys: invalidKeys.join(','),\n pattern: patternValue,\n }));\n }\n }\n }\n if (fieldErrors.length > 0) {\n const message = fieldErrors.join(', ');\n errors.push({ fieldKey: property, message });\n }\n });\n\n return errors;\n}\n\n/**\n * This functions parses all given JSON and then takes each of the jsFields.\n * Then if the field:\n * - is valid JS single function it replaces its single line string with a function delacation.\n * - is valid multiline JS code then replaces its single line string with `multiline` string\n * Then stringifies the code with given number of jsonSpacing spaces and finally prefixes whole\n * stringified JSON except the first line with globalSpacing spaces.\n */\nexport function makeInputJsFieldsReadable(json: string, jsFields: string[], jsonSpacing = 4, globalSpacing = 0): string {\n const parsedJson = JSON.parse(json);\n const replacements: Record<string, any> = {};\n\n jsFields.forEach((field) => {\n let maybeFunction = parsedJson[field];\n if (!maybeFunction || typeof maybeFunction !== 'string') return;\n\n let ast;\n try {\n ast = parse(maybeFunction, { ecmaVersion: 'latest' });\n } catch (err) {\n // Don't do anything in a case of invalid JS code.\n return;\n }\n\n const isMultiline = maybeFunction.includes('\\n');\n const isSingleFunction = ast\n && ast.body.length === 1\n && (\n ast.body[0].type === 'FunctionDeclaration'\n || (ast.body[0].type === 'ExpressionStatement' && ast.body[0].expression.type === 'ArrowFunctionExpression')\n );\n\n // If it's not a function declaration or multiline JS code then we do nothing.\n if (!isSingleFunction && !isMultiline) return;\n\n const spaces = (new Array(isSingleFunction ? jsonSpacing : jsonSpacing * 2)).fill(' ').join('');\n maybeFunction = maybeFunction\n .split('\\n').join(`\\n${spaces}`) // This prefixes each line with spaces.\n .trim(); // Trim whitespace on both sides\n\n const replacementValue = isSingleFunction\n ? maybeFunction.replace(/[;]+$/g, '') // Remove trailing semicolons\n : `\\`${maybeFunction}\\``;\n const replacementToken = `<<<REPLACEMENT_TOKEN:${Math.random()}>>>`;\n replacements[replacementToken] = replacementValue;\n parsedJson[field] = replacementToken;\n });\n\n let niceJson = JSON.stringify(parsedJson, null, jsonSpacing);\n\n Object.entries(replacements).forEach(([replacementToken, replacementValue]) => {\n niceJson = niceJson.replace(`\"${replacementToken}\"`, replacementValue);\n });\n\n const globalSpaces = (new Array(globalSpacing)).fill(' ').join('');\n niceJson = niceJson.split('\\n').join(`\\n${globalSpaces}`);\n\n return niceJson;\n}\n"],"mappings":"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","names":["definition","useApifyProxy","proxyUrls"]}
|
package/cjs/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import Ajv, { ErrorObject, ValidateFunction } from 'ajv';
|
|
|
3
3
|
/**
|
|
4
4
|
* Helper function to simulate intl formatMessage function
|
|
5
5
|
*/
|
|
6
|
-
declare function m(stringId: string, variables?: Record<string, any>):
|
|
6
|
+
declare function m(stringId: string, variables?: Record<string, any>): string;
|
|
7
7
|
|
|
8
8
|
var title = "JSON schema of Apify Actor INPUT_SCHEMA.json";
|
|
9
9
|
var type = "object";
|
|
@@ -662,6 +662,78 @@ var schema = {
|
|
|
662
662
|
definitions: definitions
|
|
663
663
|
};
|
|
664
664
|
|
|
665
|
+
type CommonFieldDefinition<T> = {
|
|
666
|
+
title: string;
|
|
667
|
+
description: string;
|
|
668
|
+
default?: T;
|
|
669
|
+
prefill?: T;
|
|
670
|
+
example?: T;
|
|
671
|
+
nullable?: boolean;
|
|
672
|
+
sectionCaption?: string;
|
|
673
|
+
sectionDescription?: string;
|
|
674
|
+
};
|
|
675
|
+
type StringFieldDefinition = CommonFieldDefinition<string> & {
|
|
676
|
+
type: 'string';
|
|
677
|
+
editor: 'textfield' | 'textarea' | 'javascript' | 'python' | 'select' | 'datepicker' | 'hidden' | 'json';
|
|
678
|
+
pattern?: string;
|
|
679
|
+
minLength?: number;
|
|
680
|
+
maxLength?: number;
|
|
681
|
+
enum?: readonly string[];
|
|
682
|
+
enumTitles?: readonly string[];
|
|
683
|
+
isSecret?: boolean;
|
|
684
|
+
};
|
|
685
|
+
type BooleanFieldDefinition = CommonFieldDefinition<boolean> & {
|
|
686
|
+
type: 'boolean';
|
|
687
|
+
editor?: 'checkbox' | 'hidden';
|
|
688
|
+
groupCaption?: string;
|
|
689
|
+
groupDescription?: string;
|
|
690
|
+
};
|
|
691
|
+
type IntegerFieldDefinition = CommonFieldDefinition<number> & {
|
|
692
|
+
type: 'integer';
|
|
693
|
+
editor?: 'number' | 'hidden';
|
|
694
|
+
maximum?: number;
|
|
695
|
+
minimum?: number;
|
|
696
|
+
unit?: string;
|
|
697
|
+
};
|
|
698
|
+
type ObjectFieldDefinition = CommonFieldDefinition<object> & {
|
|
699
|
+
type: 'object';
|
|
700
|
+
editor: 'json' | 'proxy' | 'hidden';
|
|
701
|
+
patternKey?: string;
|
|
702
|
+
patternValue?: string;
|
|
703
|
+
maxProperties?: number;
|
|
704
|
+
minProperties?: number;
|
|
705
|
+
};
|
|
706
|
+
type ArrayFieldDefinition = CommonFieldDefinition<Array<unknown>> & {
|
|
707
|
+
type: 'array';
|
|
708
|
+
editor: 'json' | 'requestListSources' | 'pseudoUrls' | 'globs' | 'keyValue' | 'stringList' | 'select' | 'hidden';
|
|
709
|
+
placeholderKey?: string;
|
|
710
|
+
placeholderValue?: string;
|
|
711
|
+
patternKey?: string;
|
|
712
|
+
patternValue?: string;
|
|
713
|
+
maxItems?: number;
|
|
714
|
+
minItems?: number;
|
|
715
|
+
uniqueItems?: boolean;
|
|
716
|
+
items?: unknown;
|
|
717
|
+
};
|
|
718
|
+
type AllTypes = StringFieldDefinition['type'] | BooleanFieldDefinition['type'] | IntegerFieldDefinition['type'] | ObjectFieldDefinition['type'] | ArrayFieldDefinition['type'];
|
|
719
|
+
type MixedFieldDefinition = CommonFieldDefinition<never> & {
|
|
720
|
+
type: readonly AllTypes[];
|
|
721
|
+
editor: 'json';
|
|
722
|
+
};
|
|
723
|
+
type FieldDefinition = StringFieldDefinition | BooleanFieldDefinition | IntegerFieldDefinition | ObjectFieldDefinition | ArrayFieldDefinition | MixedFieldDefinition;
|
|
724
|
+
/**
|
|
725
|
+
* Type with checked base & properties
|
|
726
|
+
*/
|
|
727
|
+
type InputSchema = {
|
|
728
|
+
type: 'object';
|
|
729
|
+
title: string;
|
|
730
|
+
description?: string;
|
|
731
|
+
schemaVersion: number;
|
|
732
|
+
properties: Record<string, FieldDefinition>;
|
|
733
|
+
required?: readonly string[];
|
|
734
|
+
$schema?: unknown;
|
|
735
|
+
};
|
|
736
|
+
|
|
665
737
|
/**
|
|
666
738
|
* This function parses AJV error and transforms it into a readable string.
|
|
667
739
|
*
|
|
@@ -680,14 +752,14 @@ declare function parseAjvError(error: ErrorObject, rootName: string, properties?
|
|
|
680
752
|
/**
|
|
681
753
|
* Validates that all required fields are present in properties list
|
|
682
754
|
*/
|
|
683
|
-
declare function validateExistenceOfRequiredFields
|
|
755
|
+
declare function validateExistenceOfRequiredFields(inputSchema: InputSchema): void;
|
|
684
756
|
/**
|
|
685
757
|
* This function validates given input schema first just for basic structure then each field one by one,
|
|
686
758
|
* then checks that all required fields are present and finally checks fully against the whole schema.
|
|
687
759
|
*
|
|
688
760
|
* This way we get the most accurate error message for user.
|
|
689
761
|
*/
|
|
690
|
-
declare function validateInputSchema
|
|
762
|
+
declare function validateInputSchema(validator: Ajv, inputSchema: Record<string, unknown>): asserts inputSchema is InputSchema;
|
|
691
763
|
|
|
692
764
|
/**
|
|
693
765
|
* Uses AJV validator to validate input with input schema and then
|
|
@@ -711,4 +783,4 @@ declare function validateInputUsingValidator(validator: ValidateFunction, inputS
|
|
|
711
783
|
*/
|
|
712
784
|
declare function makeInputJsFieldsReadable(json: string, jsFields: string[], jsonSpacing?: number, globalSpacing?: number): string;
|
|
713
785
|
|
|
714
|
-
export { schema as inputSchema, m, makeInputJsFieldsReadable, parseAjvError, validateExistenceOfRequiredFields, validateInputSchema, validateInputUsingValidator };
|
|
786
|
+
export { type ArrayFieldDefinition, type BooleanFieldDefinition, type FieldDefinition, type InputSchema, type IntegerFieldDefinition, type MixedFieldDefinition, type ObjectFieldDefinition, type StringFieldDefinition, schema as inputSchema, m, makeInputJsFieldsReadable, parseAjvError, validateExistenceOfRequiredFields, validateInputSchema, validateInputUsingValidator };
|
package/esm/index.d.mts
CHANGED
|
@@ -3,7 +3,7 @@ import Ajv, { ErrorObject, ValidateFunction } from 'ajv';
|
|
|
3
3
|
/**
|
|
4
4
|
* Helper function to simulate intl formatMessage function
|
|
5
5
|
*/
|
|
6
|
-
declare function m(stringId: string, variables?: Record<string, any>):
|
|
6
|
+
declare function m(stringId: string, variables?: Record<string, any>): string;
|
|
7
7
|
|
|
8
8
|
var title = "JSON schema of Apify Actor INPUT_SCHEMA.json";
|
|
9
9
|
var type = "object";
|
|
@@ -662,6 +662,78 @@ var schema = {
|
|
|
662
662
|
definitions: definitions
|
|
663
663
|
};
|
|
664
664
|
|
|
665
|
+
type CommonFieldDefinition<T> = {
|
|
666
|
+
title: string;
|
|
667
|
+
description: string;
|
|
668
|
+
default?: T;
|
|
669
|
+
prefill?: T;
|
|
670
|
+
example?: T;
|
|
671
|
+
nullable?: boolean;
|
|
672
|
+
sectionCaption?: string;
|
|
673
|
+
sectionDescription?: string;
|
|
674
|
+
};
|
|
675
|
+
type StringFieldDefinition = CommonFieldDefinition<string> & {
|
|
676
|
+
type: 'string';
|
|
677
|
+
editor: 'textfield' | 'textarea' | 'javascript' | 'python' | 'select' | 'datepicker' | 'hidden' | 'json';
|
|
678
|
+
pattern?: string;
|
|
679
|
+
minLength?: number;
|
|
680
|
+
maxLength?: number;
|
|
681
|
+
enum?: readonly string[];
|
|
682
|
+
enumTitles?: readonly string[];
|
|
683
|
+
isSecret?: boolean;
|
|
684
|
+
};
|
|
685
|
+
type BooleanFieldDefinition = CommonFieldDefinition<boolean> & {
|
|
686
|
+
type: 'boolean';
|
|
687
|
+
editor?: 'checkbox' | 'hidden';
|
|
688
|
+
groupCaption?: string;
|
|
689
|
+
groupDescription?: string;
|
|
690
|
+
};
|
|
691
|
+
type IntegerFieldDefinition = CommonFieldDefinition<number> & {
|
|
692
|
+
type: 'integer';
|
|
693
|
+
editor?: 'number' | 'hidden';
|
|
694
|
+
maximum?: number;
|
|
695
|
+
minimum?: number;
|
|
696
|
+
unit?: string;
|
|
697
|
+
};
|
|
698
|
+
type ObjectFieldDefinition = CommonFieldDefinition<object> & {
|
|
699
|
+
type: 'object';
|
|
700
|
+
editor: 'json' | 'proxy' | 'hidden';
|
|
701
|
+
patternKey?: string;
|
|
702
|
+
patternValue?: string;
|
|
703
|
+
maxProperties?: number;
|
|
704
|
+
minProperties?: number;
|
|
705
|
+
};
|
|
706
|
+
type ArrayFieldDefinition = CommonFieldDefinition<Array<unknown>> & {
|
|
707
|
+
type: 'array';
|
|
708
|
+
editor: 'json' | 'requestListSources' | 'pseudoUrls' | 'globs' | 'keyValue' | 'stringList' | 'select' | 'hidden';
|
|
709
|
+
placeholderKey?: string;
|
|
710
|
+
placeholderValue?: string;
|
|
711
|
+
patternKey?: string;
|
|
712
|
+
patternValue?: string;
|
|
713
|
+
maxItems?: number;
|
|
714
|
+
minItems?: number;
|
|
715
|
+
uniqueItems?: boolean;
|
|
716
|
+
items?: unknown;
|
|
717
|
+
};
|
|
718
|
+
type AllTypes = StringFieldDefinition['type'] | BooleanFieldDefinition['type'] | IntegerFieldDefinition['type'] | ObjectFieldDefinition['type'] | ArrayFieldDefinition['type'];
|
|
719
|
+
type MixedFieldDefinition = CommonFieldDefinition<never> & {
|
|
720
|
+
type: readonly AllTypes[];
|
|
721
|
+
editor: 'json';
|
|
722
|
+
};
|
|
723
|
+
type FieldDefinition = StringFieldDefinition | BooleanFieldDefinition | IntegerFieldDefinition | ObjectFieldDefinition | ArrayFieldDefinition | MixedFieldDefinition;
|
|
724
|
+
/**
|
|
725
|
+
* Type with checked base & properties
|
|
726
|
+
*/
|
|
727
|
+
type InputSchema = {
|
|
728
|
+
type: 'object';
|
|
729
|
+
title: string;
|
|
730
|
+
description?: string;
|
|
731
|
+
schemaVersion: number;
|
|
732
|
+
properties: Record<string, FieldDefinition>;
|
|
733
|
+
required?: readonly string[];
|
|
734
|
+
$schema?: unknown;
|
|
735
|
+
};
|
|
736
|
+
|
|
665
737
|
/**
|
|
666
738
|
* This function parses AJV error and transforms it into a readable string.
|
|
667
739
|
*
|
|
@@ -680,14 +752,14 @@ declare function parseAjvError(error: ErrorObject, rootName: string, properties?
|
|
|
680
752
|
/**
|
|
681
753
|
* Validates that all required fields are present in properties list
|
|
682
754
|
*/
|
|
683
|
-
declare function validateExistenceOfRequiredFields
|
|
755
|
+
declare function validateExistenceOfRequiredFields(inputSchema: InputSchema): void;
|
|
684
756
|
/**
|
|
685
757
|
* This function validates given input schema first just for basic structure then each field one by one,
|
|
686
758
|
* then checks that all required fields are present and finally checks fully against the whole schema.
|
|
687
759
|
*
|
|
688
760
|
* This way we get the most accurate error message for user.
|
|
689
761
|
*/
|
|
690
|
-
declare function validateInputSchema
|
|
762
|
+
declare function validateInputSchema(validator: Ajv, inputSchema: Record<string, unknown>): asserts inputSchema is InputSchema;
|
|
691
763
|
|
|
692
764
|
/**
|
|
693
765
|
* Uses AJV validator to validate input with input schema and then
|
|
@@ -711,4 +783,4 @@ declare function validateInputUsingValidator(validator: ValidateFunction, inputS
|
|
|
711
783
|
*/
|
|
712
784
|
declare function makeInputJsFieldsReadable(json: string, jsFields: string[], jsonSpacing?: number, globalSpacing?: number): string;
|
|
713
785
|
|
|
714
|
-
export { schema as inputSchema, m, makeInputJsFieldsReadable, parseAjvError, validateExistenceOfRequiredFields, validateInputSchema, validateInputUsingValidator };
|
|
786
|
+
export { type ArrayFieldDefinition, type BooleanFieldDefinition, type FieldDefinition, type InputSchema, type IntegerFieldDefinition, type MixedFieldDefinition, type ObjectFieldDefinition, type StringFieldDefinition, schema as inputSchema, m, makeInputJsFieldsReadable, parseAjvError, validateExistenceOfRequiredFields, validateInputSchema, validateInputUsingValidator };
|
package/esm/index.mjs
CHANGED
|
@@ -23,8 +23,7 @@ var intlStrings = {
|
|
|
23
23
|
};
|
|
24
24
|
function m(stringId, variables) {
|
|
25
25
|
let text = intlStrings[stringId];
|
|
26
|
-
if (!text)
|
|
27
|
-
return stringId;
|
|
26
|
+
if (!text) return stringId;
|
|
28
27
|
if (variables) {
|
|
29
28
|
Object.keys(variables).forEach((variableName) => {
|
|
30
29
|
text = text.split(`{${variableName}}`).join(variables[variableName]);
|
|
@@ -348,17 +347,19 @@ function parseAjvError(error, rootName, properties = {}, input = {}) {
|
|
|
348
347
|
}
|
|
349
348
|
__name(parseAjvError, "parseAjvError");
|
|
350
349
|
var validateAgainstSchemaOrThrow = /* @__PURE__ */ __name((validator, obj, inputSchema, rootName) => {
|
|
351
|
-
if (validator.validate(inputSchema, obj))
|
|
352
|
-
return;
|
|
350
|
+
if (validator.validate(inputSchema, obj)) return;
|
|
353
351
|
const errorMessage = parseAjvError(validator.errors[0], rootName)?.message;
|
|
354
352
|
throw new Error(`Input schema is not valid (${errorMessage})`);
|
|
355
353
|
}, "validateAgainstSchemaOrThrow");
|
|
356
|
-
|
|
357
|
-
const schemaWithoutProperties = {
|
|
358
|
-
|
|
354
|
+
function validateBasicStructure(validator, obj) {
|
|
355
|
+
const schemaWithoutProperties = {
|
|
356
|
+
...schema_default,
|
|
357
|
+
properties: { ...schema_default.properties, properties: { type: "object" } }
|
|
358
|
+
};
|
|
359
359
|
validateAgainstSchemaOrThrow(validator, obj, schemaWithoutProperties, "schema");
|
|
360
|
-
}
|
|
361
|
-
|
|
360
|
+
}
|
|
361
|
+
__name(validateBasicStructure, "validateBasicStructure");
|
|
362
|
+
function validateField(validator, fieldSchema, fieldKey) {
|
|
362
363
|
const matchingDefinitions = Object.values(definitions).filter((definition2) => {
|
|
363
364
|
return definition2.properties.type.enum ? definition2.properties.type.enum[0] === fieldSchema.type : Array.isArray(fieldSchema.type);
|
|
364
365
|
});
|
|
@@ -372,29 +373,32 @@ var validateField = /* @__PURE__ */ __name((validator, fieldSchema, fieldKey) =>
|
|
|
372
373
|
}
|
|
373
374
|
if (fieldSchema.enum) {
|
|
374
375
|
const definition2 = matchingDefinitions.filter((item) => !!item.properties.enum).pop();
|
|
375
|
-
if (!definition2)
|
|
376
|
-
throw new Error('Input schema validation failed to find "enum property" definition');
|
|
376
|
+
if (!definition2) throw new Error('Input schema validation failed to find "enum property" definition');
|
|
377
377
|
validateAgainstSchemaOrThrow(validator, fieldSchema, definition2, `schema.properties.${fieldKey}.enum`);
|
|
378
378
|
return;
|
|
379
379
|
}
|
|
380
380
|
const definition = matchingDefinitions.filter((item) => !item.properties.enum).pop();
|
|
381
|
-
if (!definition)
|
|
382
|
-
throw new Error('Input schema validation failed to find other than "enum property" definition');
|
|
381
|
+
if (!definition) throw new Error('Input schema validation failed to find other than "enum property" definition');
|
|
383
382
|
validateAgainstSchemaOrThrow(validator, fieldSchema, definition, `schema.properties.${fieldKey}`);
|
|
384
|
-
}
|
|
383
|
+
}
|
|
384
|
+
__name(validateField, "validateField");
|
|
385
|
+
function validateProperties(inputSchema, validator) {
|
|
386
|
+
Object.entries(inputSchema.properties).forEach(
|
|
387
|
+
([fieldKey, fieldSchema]) => validateField(validator, fieldSchema, fieldKey)
|
|
388
|
+
);
|
|
389
|
+
}
|
|
390
|
+
__name(validateProperties, "validateProperties");
|
|
385
391
|
function validateExistenceOfRequiredFields(inputSchema) {
|
|
386
|
-
if (!inputSchema?.required?.length)
|
|
387
|
-
return;
|
|
392
|
+
if (!inputSchema?.required?.length) return;
|
|
388
393
|
Object.values(inputSchema?.required).forEach((fieldKey) => {
|
|
389
|
-
if (inputSchema?.properties[fieldKey])
|
|
390
|
-
return;
|
|
394
|
+
if (inputSchema?.properties[fieldKey]) return;
|
|
391
395
|
throw new Error(m("inputSchema.validation.missingRequiredField", { fieldKey }));
|
|
392
396
|
});
|
|
393
397
|
}
|
|
394
398
|
__name(validateExistenceOfRequiredFields, "validateExistenceOfRequiredFields");
|
|
395
399
|
function validateInputSchema(validator, inputSchema) {
|
|
396
400
|
validateBasicStructure(validator, inputSchema);
|
|
397
|
-
|
|
401
|
+
validateProperties(inputSchema, validator);
|
|
398
402
|
validateExistenceOfRequiredFields(inputSchema);
|
|
399
403
|
validateAgainstSchemaOrThrow(validator, inputSchema, schema_default, "schema");
|
|
400
404
|
}
|
|
@@ -402,13 +406,12 @@ __name(validateInputSchema, "validateInputSchema");
|
|
|
402
406
|
|
|
403
407
|
// src/utilities.ts
|
|
404
408
|
import { PROXY_URL_REGEX, URL_REGEX } from "@apify/consts";
|
|
405
|
-
import { countries } from "countries-list";
|
|
406
409
|
import { parse } from "acorn-loose";
|
|
410
|
+
import { countries } from "countries-list";
|
|
407
411
|
function validateProxyField(fieldKey, value, isRequired = false, options = null) {
|
|
408
412
|
const fieldErrors = [];
|
|
409
413
|
if (isRequired) {
|
|
410
|
-
if (value === null)
|
|
411
|
-
return fieldErrors;
|
|
414
|
+
if (value === null) return fieldErrors;
|
|
412
415
|
if (!value) {
|
|
413
416
|
const message = m("inputSchema.validation.required", { rootName: "input", fieldKey });
|
|
414
417
|
fieldErrors.push(message);
|
|
@@ -420,14 +423,12 @@ function validateProxyField(fieldKey, value, isRequired = false, options = null)
|
|
|
420
423
|
return fieldErrors;
|
|
421
424
|
}
|
|
422
425
|
}
|
|
423
|
-
if (!value)
|
|
424
|
-
return fieldErrors;
|
|
426
|
+
if (!value) return fieldErrors;
|
|
425
427
|
const { useApifyProxy, proxyUrls, apifyProxyGroups, apifyProxyCountry } = value;
|
|
426
428
|
if (!useApifyProxy && Array.isArray(proxyUrls)) {
|
|
427
429
|
let invalidUrl = false;
|
|
428
430
|
proxyUrls.forEach((url) => {
|
|
429
|
-
if (!PROXY_URL_REGEX.test(url.trim()))
|
|
430
|
-
invalidUrl = url.trim();
|
|
431
|
+
if (!PROXY_URL_REGEX.test(url.trim())) invalidUrl = url.trim();
|
|
431
432
|
});
|
|
432
433
|
if (invalidUrl) {
|
|
433
434
|
fieldErrors.push(m("inputSchema.validation.customProxyInvalid", { invalidUrl }));
|
|
@@ -436,13 +437,11 @@ function validateProxyField(fieldKey, value, isRequired = false, options = null)
|
|
|
436
437
|
if (!useApifyProxy && apifyProxyCountry) {
|
|
437
438
|
fieldErrors.push(m("inputSchema.validation.apifyProxyCountryWithoutApifyProxyForbidden"));
|
|
438
439
|
}
|
|
439
|
-
if (!useApifyProxy)
|
|
440
|
-
return fieldErrors;
|
|
440
|
+
if (!useApifyProxy) return fieldErrors;
|
|
441
441
|
if (apifyProxyCountry && !countries[apifyProxyCountry]) {
|
|
442
442
|
fieldErrors.push(m("inputSchema.validation.apifyProxyCountryInvalid", { invalidCountry: apifyProxyCountry }));
|
|
443
443
|
}
|
|
444
|
-
if (!options)
|
|
445
|
-
return fieldErrors;
|
|
444
|
+
if (!options) return fieldErrors;
|
|
446
445
|
const isStringsArray = /* @__PURE__ */ __name((array) => array.every((item) => typeof item === "string"), "isStringsArray");
|
|
447
446
|
if (apifyProxyGroups && !(Array.isArray(apifyProxyGroups) && isStringsArray(apifyProxyGroups))) {
|
|
448
447
|
fieldErrors.push(m("inputSchema.validation.proxyGroupMustBeArrayOfStrings", { rootName: "input", fieldKey }));
|
|
@@ -494,14 +493,10 @@ function validateInputUsingValidator(validator, inputSchema, input, options = {}
|
|
|
494
493
|
if (editor === "requestListSources") {
|
|
495
494
|
const invalidIndexes = [];
|
|
496
495
|
value.forEach((item, index) => {
|
|
497
|
-
if (!item)
|
|
498
|
-
|
|
499
|
-
else if (
|
|
500
|
-
|
|
501
|
-
else if (item.url && !URL_REGEX.test(item.url))
|
|
502
|
-
invalidIndexes.push(index);
|
|
503
|
-
else if (item.requestsFromUrl && !URL_REGEX.test(item.requestsFromUrl))
|
|
504
|
-
invalidIndexes.push(index);
|
|
496
|
+
if (!item) invalidIndexes.push(index);
|
|
497
|
+
else if (!item.url && !item.requestsFromUrl) invalidIndexes.push(index);
|
|
498
|
+
else if (item.url && !URL_REGEX.test(item.url)) invalidIndexes.push(index);
|
|
499
|
+
else if (item.requestsFromUrl && !URL_REGEX.test(item.requestsFromUrl)) invalidIndexes.push(index);
|
|
505
500
|
});
|
|
506
501
|
if (invalidIndexes.length) {
|
|
507
502
|
fieldErrors.push(m("inputSchema.validation.requestListSourcesInvalid", {
|
|
@@ -515,8 +510,7 @@ function validateInputUsingValidator(validator, inputSchema, input, options = {}
|
|
|
515
510
|
const check = new RegExp(patternKey);
|
|
516
511
|
const invalidIndexes = [];
|
|
517
512
|
value.forEach((item, index) => {
|
|
518
|
-
if (!check.test(item.key))
|
|
519
|
-
invalidIndexes.push(index);
|
|
513
|
+
if (!check.test(item.key)) invalidIndexes.push(index);
|
|
520
514
|
});
|
|
521
515
|
if (invalidIndexes.length) {
|
|
522
516
|
fieldErrors.push(m("inputSchema.validation.arrayKeysInvalid", {
|
|
@@ -531,8 +525,7 @@ function validateInputUsingValidator(validator, inputSchema, input, options = {}
|
|
|
531
525
|
const check = new RegExp(patternValue);
|
|
532
526
|
const invalidIndexes = [];
|
|
533
527
|
value.forEach((item, index) => {
|
|
534
|
-
if (!check.test(item.value))
|
|
535
|
-
invalidIndexes.push(index);
|
|
528
|
+
if (!check.test(item.value)) invalidIndexes.push(index);
|
|
536
529
|
});
|
|
537
530
|
if (invalidIndexes.length) {
|
|
538
531
|
fieldErrors.push(m("inputSchema.validation.arrayValuesInvalid", {
|
|
@@ -546,8 +539,7 @@ function validateInputUsingValidator(validator, inputSchema, input, options = {}
|
|
|
546
539
|
const check = new RegExp(patternValue);
|
|
547
540
|
const invalidIndexes = [];
|
|
548
541
|
value.forEach((item, index) => {
|
|
549
|
-
if (!check.test(item))
|
|
550
|
-
invalidIndexes.push(index);
|
|
542
|
+
if (!check.test(item)) invalidIndexes.push(index);
|
|
551
543
|
});
|
|
552
544
|
if (invalidIndexes.length) {
|
|
553
545
|
fieldErrors.push(m("inputSchema.validation.arrayValuesInvalid", {
|
|
@@ -564,8 +556,7 @@ function validateInputUsingValidator(validator, inputSchema, input, options = {}
|
|
|
564
556
|
const check = new RegExp(patternKey);
|
|
565
557
|
const invalidKeys = [];
|
|
566
558
|
Object.keys(value).forEach((key) => {
|
|
567
|
-
if (!check.test(key))
|
|
568
|
-
invalidKeys.push(key);
|
|
559
|
+
if (!check.test(key)) invalidKeys.push(key);
|
|
569
560
|
});
|
|
570
561
|
if (invalidKeys.length) {
|
|
571
562
|
fieldErrors.push(m("inputSchema.validation.objectKeysInvalid", {
|
|
@@ -581,8 +572,7 @@ function validateInputUsingValidator(validator, inputSchema, input, options = {}
|
|
|
581
572
|
const invalidKeys = [];
|
|
582
573
|
Object.keys(value).forEach((key) => {
|
|
583
574
|
const propertyValue = value[key];
|
|
584
|
-
if (typeof propertyValue !== "string" || !check.test(propertyValue))
|
|
585
|
-
invalidKeys.push(key);
|
|
575
|
+
if (typeof propertyValue !== "string" || !check.test(propertyValue)) invalidKeys.push(key);
|
|
586
576
|
});
|
|
587
577
|
if (invalidKeys.length) {
|
|
588
578
|
fieldErrors.push(m("inputSchema.validation.objectValuesInvalid", {
|
|
@@ -607,8 +597,7 @@ function makeInputJsFieldsReadable(json, jsFields, jsonSpacing = 4, globalSpacin
|
|
|
607
597
|
const replacements = {};
|
|
608
598
|
jsFields.forEach((field) => {
|
|
609
599
|
let maybeFunction = parsedJson[field];
|
|
610
|
-
if (!maybeFunction || typeof maybeFunction !== "string")
|
|
611
|
-
return;
|
|
600
|
+
if (!maybeFunction || typeof maybeFunction !== "string") return;
|
|
612
601
|
let ast;
|
|
613
602
|
try {
|
|
614
603
|
ast = parse(maybeFunction, { ecmaVersion: "latest" });
|
|
@@ -617,8 +606,7 @@ function makeInputJsFieldsReadable(json, jsFields, jsonSpacing = 4, globalSpacin
|
|
|
617
606
|
}
|
|
618
607
|
const isMultiline = maybeFunction.includes("\n");
|
|
619
608
|
const isSingleFunction = ast && ast.body.length === 1 && (ast.body[0].type === "FunctionDeclaration" || ast.body[0].type === "ExpressionStatement" && ast.body[0].expression.type === "ArrowFunctionExpression");
|
|
620
|
-
if (!isSingleFunction && !isMultiline)
|
|
621
|
-
return;
|
|
609
|
+
if (!isSingleFunction && !isMultiline) return;
|
|
622
610
|
const spaces = new Array(isSingleFunction ? jsonSpacing : jsonSpacing * 2).fill(" ").join("");
|
|
623
611
|
maybeFunction = maybeFunction.split("\n").join(`
|
|
624
612
|
${spaces}`).trim();
|
package/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/intl.ts","../../src/schema.json","../../src/input_schema.ts","../../src/utilities.ts"],"sourcesContent":["const intlStrings = {\n 'inputSchema.validation.generic':\n 'Field {rootName}.{fieldKey} {message}',\n 'inputSchema.validation.required':\n 'Field {rootName}.{fieldKey} is required',\n 'inputSchema.validation.proxyRequired':\n 'Field {rootName}.{fieldKey} is required. Please provide custom proxy URLs or use Apify Proxy.',\n 'inputSchema.validation.requestListSourcesInvalid':\n 'Items in {rootName}.{fieldKey} at positions [{invalidIndexes}] do not contain valid URLs',\n 'inputSchema.validation.arrayKeysInvalid':\n 'Keys in {rootName}.{fieldKey} at positions [{invalidIndexes}] must match regular expression \"{pattern}\"',\n 'inputSchema.validation.arrayValuesInvalid':\n 'Values in {rootName}.{fieldKey} at positions [{invalidIndexes}] must match regular expression \"{pattern}\"',\n 'inputSchema.validation.objectKeysInvalid':\n 'Keys [{invalidKeys}] in {rootName}.{fieldKey} must match regular expression \"{pattern}',\n 'inputSchema.validation.objectValuesInvalid':\n 'Keys [{invalidKeys}] in {rootName}.{fieldKey} must have string value which matches regular expression \"{pattern}\"',\n 'inputSchema.validation.additionalProperty':\n 'Property {rootName}.{fieldKey} is not allowed.',\n 'inputSchema.validation.proxyGroupsNotAvailable':\n 'You currently do not have access to proxy groups: {groups}',\n 'inputSchema.validation.customProxyInvalid':\n 'Proxy URL \"{invalidUrl}\" has invalid format, it must be http[s]://[username[:password]]@hostname:port.',\n 'inputSchema.validation.apifyProxyCountryInvalid':\n 'Country code \"{invalidCountry}\" is invalid. Only ISO 3166-1 alpha-2 country codes are supported.',\n 'inputSchema.validation.apifyProxyCountryWithoutApifyProxyForbidden':\n 'The country for Apify Proxy can be specified only when using Apify Proxy.',\n 'inputSchema.validation.noAvailableAutoProxy':\n 'Currently you do not have access to any proxy group usable in automatic mode.',\n 'inputSchema.validation.noMatchingDefinition':\n 'Field schema.properties.{fieldKey} is not matching any input schema type definition. Please make sure that it\\'s type is valid.',\n 'inputSchema.validation.missingRequiredField':\n 'Field schema.properties.{fieldKey} does not exist, but it is specified in schema.required. Either define the field or remove it from schema.required.',\n 'inputSchema.validation.proxyGroupMustBeArrayOfStrings':\n 'Field {rootName}.{fieldKey}.apifyProxyGroups must be an array of strings.',\n};\n\n/**\n * Helper function to simulate intl formatMessage function\n */\nexport function m(stringId: string, variables?: Record<string, any>) {\n let text = intlStrings[stringId];\n if (!text) return stringId;\n\n if (variables) {\n Object.keys(variables).forEach((variableName) => {\n text = text.split(`{${variableName}}`).join(variables[variableName]);\n });\n }\n\n return text;\n}\n","{\n \"title\": \"JSON schema of Apify Actor INPUT_SCHEMA.json\",\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"schemaVersion\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"maximum\": 1\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"enum\": [\"object\"]\n },\n \"required\": {\n \"type\": \"array\",\n \"minItems\": 0,\n \"items\": { \"type\": \"string\" },\n \"uniqueItems\": true\n },\n \"additionalProperties\": {\n \"type\": \"boolean\"\n },\n \"properties\": {\n \"type\": \"object\",\n \"patternProperties\": {\n \"^\": {\n \"oneOf\": [\n { \"$ref\": \"#/definitions/stringProperty\" },\n { \"$ref\": \"#/definitions/stringEnumProperty\" },\n { \"$ref\": \"#/definitions/arrayProperty\" },\n { \"$ref\": \"#/definitions/objectProperty\" },\n { \"$ref\": \"#/definitions/integerProperty\" },\n { \"$ref\": \"#/definitions/booleanProperty\" },\n { \"$ref\": \"#/definitions/anyProperty\" }\n ]\n }\n }\n }\n },\n \"additionalProperties\": false,\n \"required\": [\"title\", \"type\", \"properties\", \"schemaVersion\"],\n \"definitions\": {\n \"stringEnumProperty\": {\n \"title\": \"Enum property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"editor\": { \"enum\": [\"select\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"string\" },\n \"prefill\": { \"type\": \"string\" },\n \"example\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" },\n \"enum\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"minItems\": 1,\n \"uniqueItems\": true\n },\n \"enumTitles\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"minItems\": 1\n }\n },\n \"required\": [\"type\", \"title\", \"description\", \"enum\"]\n },\n \"stringProperty\": {\n \"title\": \"String property\",\n \"type\": \"object\",\n \"additionalProperties\": true,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"editor\": { \"enum\": [\"javascript\", \"python\", \"textfield\", \"textarea\", \"datepicker\", \"hidden\"] },\n \"isSecret\": { \"type\": \"boolean\" }\n },\n \"required\": [\"type\", \"title\", \"description\", \"editor\"],\n \"if\": {\n \"properties\": {\n \"isSecret\": {\n \"not\": {\n \"const\": true\n }\n }\n }\n },\n \"then\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"string\" },\n \"prefill\": { \"type\": \"string\" },\n \"example\": { \"type\": \"string\" },\n \"pattern\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minLength\": { \"type\": \"integer\" },\n \"maxLength\": { \"type\": \"integer\" },\n \"editor\": { \"enum\": [\"javascript\", \"python\", \"textfield\", \"textarea\", \"datepicker\", \"hidden\"] },\n \"isSecret\": { \"type\": \"boolean\" },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n }\n },\n \"else\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"example\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"editor\": { \"enum\": [\"textfield\", \"textarea\", \"hidden\"] },\n \"isSecret\": { \"type\": \"boolean\" },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n }\n }\n },\n \"arrayProperty\": {\n \"title\": \"Array property\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"enum\": [\"array\"] },\n \"editor\": { \"enum\": [\"json\", \"requestListSources\", \"pseudoUrls\", \"globs\", \"keyValue\", \"stringList\", \"select\", \"hidden\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"array\" },\n \"prefill\": { \"type\": \"array\" },\n \"example\": { \"type\": \"array\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minItems\": { \"type\": \"integer\" },\n \"maxItems\": { \"type\": \"integer\" },\n \"uniqueItems\": { \"type\": \"boolean\" },\n\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"additionalProperties\": true,\n \"required\": [\"type\", \"title\", \"description\", \"editor\"],\n \"if\": {\n \"properties\": {\n \"editor\": { \"const\": \"select\" }\n }\n },\n \"then\": {\n \"required\": [\"items\"],\n \"properties\": {\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"enum\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"uniqueItems\": true\n },\n \"enumTitles\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n },\n \"required\": [\"type\", \"enum\"]\n }\n }\n },\n \"else\": {\n \"properties\": {\n \"placeholderKey\": { \"type\": \"string\" },\n \"placeholderValue\": { \"type\": \"string\" },\n \"patternKey\": { \"type\": \"string\" },\n \"patternValue\": { \"type\": \"string\" }\n }\n }\n },\n \"objectProperty\": {\n \"title\": \"Object property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"object\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"object\" },\n \"prefill\": { \"type\": \"object\" },\n \"example\": { \"type\": \"object\" },\n \"patternKey\": { \"type\": \"string\" },\n \"patternValue\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minProperties\": { \"type\": \"integer\" },\n \"maxProperties\": { \"type\": \"integer\" },\n\n \"editor\": { \"enum\": [\"json\", \"proxy\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\", \"editor\"]\n },\n \"integerProperty\": {\n \"title\": \"Integer property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"integer\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"integer\" },\n \"prefill\": { \"type\": \"integer\" },\n \"example\": { \"type\": \"integer\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minimum\": { \"type\": \"integer\" },\n \"maximum\": { \"type\": \"integer\" },\n \"unit\": { \"type\": \"string\" },\n \"editor\": { \"enum\": [\"number\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\"]\n },\n \"booleanProperty\": {\n \"title\": \"Boolean property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"boolean\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"boolean\" },\n \"prefill\": { \"type\": \"boolean\" },\n \"example\": { \"type\": \"boolean\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"groupCaption\": { \"type\": \"string\" },\n \"groupDescription\": { \"type\": \"string\" },\n \"editor\": { \"enum\": [\"checkbox\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\"]\n },\n \"anyProperty\": {\n \"title\": \"Any property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"type\": [\"array\"],\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"]\n },\n \"uniqueItems\": true,\n \"additionalItems\": false,\n \"minItems\": 1\n },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"] },\n \"prefill\": { \"type\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"] },\n \"example\": { \"type\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"] },\n \"nullable\": { \"type\": \"boolean\" },\n \"editor\": { \"enum\": [\"json\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\", \"editor\"]\n }\n }\n}\n","import Ajv, { ErrorObject } from 'ajv';\nimport schema from './schema.json';\nimport { m } from './intl';\n\nexport { schema as inputSchema };\nconst { definitions } = schema;\n\n/**\n * This function parses AJV error and transforms it into a readable string.\n *\n * @param error An error as returned from AJV.\n * @param rootName Usually 'input' or 'schema' based on if we are passing the input or schema.\n * @param properties (Used only when parsing input errors) List of input schema properties.\n * @param input (Used only when parsing input errors) Actual input that is being parsed.\n * @returns {null|{fieldKey: *, message: *}}\n */\nexport function parseAjvError(\n error: ErrorObject,\n rootName: string,\n properties: Record<string, { nullable?: boolean }> = {},\n input: Record<string, unknown> = {},\n): { fieldKey: string; message: string } | null {\n // There are 3 possible errors comming from validation:\n // - either { keword: 'anything', instancePath: '/someField', message: 'error message that we can use' }\n // - or { keyword: 'additionalProperties', params: { additionalProperty: 'field' }, message: 'must NOT have additional properties' }\n // - or { keyword: 'required', instancePath: '', params.missingProperty: 'someField' }\n\n let fieldKey: string;\n let message: string;\n\n // If error is with keyword type, it means that type of input is incorrect\n // this can mean that provided value is null\n if (error.keyword === 'type') {\n fieldKey = error.instancePath.split('/').pop()!;\n // Check if value is null and field is nullable, if yes, then skip this error\n if (properties[fieldKey] && properties[fieldKey].nullable && input[fieldKey] === null) {\n return null;\n }\n message = m('inputSchema.validation.generic', { rootName, fieldKey, message: error.message });\n } else if (error.keyword === 'required') {\n fieldKey = error.params.missingProperty;\n message = m('inputSchema.validation.required', { rootName, fieldKey });\n } else if (error.keyword === 'additionalProperties') {\n fieldKey = error.params.additionalProperty;\n message = m('inputSchema.validation.additionalProperty', { rootName, fieldKey });\n } else if (error.keyword === 'enum') {\n fieldKey = error.instancePath.split('/').pop()!;\n const errorMessage = `${error.message}: \"${error.params.allowedValues.join('\", \"')}\"`;\n message = m('inputSchema.validation.generic', { rootName, fieldKey, message: errorMessage });\n } else {\n fieldKey = error.instancePath.split('/').pop()!;\n message = m('inputSchema.validation.generic', { rootName, fieldKey, message: error.message });\n }\n\n return { fieldKey, message };\n}\n\n/**\n * Validates given object against schema and throws a human readable error.\n */\nconst validateAgainstSchemaOrThrow = <T> (validator: Ajv, obj: T, inputSchema: any, rootName: string) => {\n if (validator.validate(inputSchema, obj)) return;\n\n const errorMessage = parseAjvError(validator.errors![0], rootName)?.message;\n throw new Error(`Input schema is not valid (${errorMessage})`);\n};\n\n/**\n * This validates given object only against the basic input schema without checking the particular fields.\n * We override schema.properties.properties not to validate field defitions.\n */\nconst validateBasicStructure = <T> (validator: Ajv, obj: T) => {\n const schemaWithoutProperties = { ...schema };\n schemaWithoutProperties.properties = { ...schema.properties, properties: { type: 'object' } as any };\n validateAgainstSchemaOrThrow(validator, obj, schemaWithoutProperties, 'schema');\n};\n\n/**\n * Validates particular field against it's schema.\n */\nconst validateField = <T extends Record<string, any>> (validator: Ajv, fieldSchema: T, fieldKey: string) => {\n const matchingDefinitions = Object\n .values<any>(definitions) // cast as any, as the code in first branch seems to be invalid\n .filter((definition) => {\n return definition.properties.type.enum\n // This is a normal case where fieldSchema.type can be only one possible value matching definition.properties.type.enum.0\n ? definition.properties.type.enum[0] === fieldSchema.type\n // This is a type \"Any\" where fieldSchema.type is an array of possible values\n : Array.isArray(fieldSchema.type);\n });\n\n // There is not matching definition.\n if (matchingDefinitions.length === 0) {\n const errorMessage = m('inputSchema.validation.noMatchingDefinition', { fieldKey });\n throw new Error(`Input schema is not valid (${errorMessage})`);\n }\n\n // If there is only one matching then we are done and simply compare it.\n if (matchingDefinitions.length === 1) {\n validateAgainstSchemaOrThrow(validator, fieldSchema, matchingDefinitions[0], `schema.properties.${fieldKey}`);\n return;\n }\n\n // If there are more matching definitions then the type is string and we need to get the right one.\n // If the definition contains \"enum\" property then it's enum type.\n if (fieldSchema.enum) {\n const definition = matchingDefinitions.filter((item) => !!item.properties.enum).pop();\n if (!definition) throw new Error('Input schema validation failed to find \"enum property\" definition');\n validateAgainstSchemaOrThrow(validator, fieldSchema, definition, `schema.properties.${fieldKey}.enum`);\n return;\n }\n // Otherwise we use the other definition.\n const definition = matchingDefinitions.filter((item) => !item.properties.enum).pop();\n if (!definition) throw new Error('Input schema validation failed to find other than \"enum property\" definition');\n\n validateAgainstSchemaOrThrow(validator, fieldSchema, definition, `schema.properties.${fieldKey}`);\n};\n\n/**\n * Validates that all required fields are present in properties list\n */\nexport function validateExistenceOfRequiredFields<T extends Record<string, any>>(inputSchema: T) {\n // If the input schema does not have any required fields, we do not need to validate them\n if (!inputSchema?.required?.length) return;\n\n Object.values(inputSchema?.required).forEach((fieldKey) => {\n // If the required field is present in the list of properties, we can check the next one\n if (inputSchema?.properties[fieldKey as string]) return;\n\n // The required field is not defined in list of properties. Which means the schema is not valid.\n throw new Error(m('inputSchema.validation.missingRequiredField', { fieldKey }));\n });\n}\n\n/**\n * This function validates given input schema first just for basic structure then each field one by one,\n * then checks that all required fields are present and finally checks fully against the whole schema.\n *\n * This way we get the most accurate error message for user.\n */\nexport function validateInputSchema<T extends Record<string, any>>(validator: Ajv, inputSchema: T) {\n // First validate just basic structure without fields.\n validateBasicStructure(validator, inputSchema);\n\n // Then validate each field separately.\n Object.entries<any>(inputSchema.properties).forEach(([fieldKey, fieldSchema]) => validateField(validator, fieldSchema, fieldKey));\n\n // Next validate if required fields are actually present in the schema\n validateExistenceOfRequiredFields(inputSchema);\n\n // Finally just to be sure run validation against the whole shema.\n validateAgainstSchemaOrThrow(validator, inputSchema, schema, 'schema');\n}\n","import { PROXY_URL_REGEX, URL_REGEX } from '@apify/consts';\nimport { countries } from 'countries-list';\nimport { ValidateFunction } from 'ajv';\nimport { parse } from 'acorn-loose';\nimport { m } from './intl';\nimport { parseAjvError } from './input_schema';\n\n/**\n * Validates input field configured with proxy editor\n * @param fieldKey Proxy field value\n * @param value Proxy field value\n * @param [isRequired] Whether the field is required or not\n * @param [options] Information about proxy groups availability\n * @param [options.hasAutoProxyGroups] Informs validation whether user has atleast one proxy group available in auto mode\n * @param [options.availableProxyGroups] List of available proxy groups\n * @param [options.disabledProxyGroups] Object with groupId as key and error message as value (mostly for residential/SERP)\n */\nfunction validateProxyField(\n fieldKey: Record<string, unknown>,\n value: Record<string, any>,\n isRequired = false,\n options: { hasAutoProxyGroups?: boolean; availableProxyGroups?: string[]; disabledProxyGroups?: Record<string, unknown> } | null = null,\n) {\n const fieldErrors: any[] = [];\n if (isRequired) {\n // Nullable error is already handled by AJV\n if (value === null) return fieldErrors;\n if (!value) {\n const message = m('inputSchema.validation.required', { rootName: 'input', fieldKey });\n fieldErrors.push(message);\n return fieldErrors;\n }\n\n const { useApifyProxy, proxyUrls } = value;\n if (!useApifyProxy && (!Array.isArray(proxyUrls) || proxyUrls.length === 0)) {\n fieldErrors.push(m('inputSchema.validation.proxyRequired', { rootName: 'input', fieldKey }));\n return fieldErrors;\n }\n }\n\n // Input is not required, so missing value is valid\n if (!value) return fieldErrors;\n\n const { useApifyProxy, proxyUrls, apifyProxyGroups, apifyProxyCountry } = value;\n\n if (!useApifyProxy && Array.isArray(proxyUrls)) {\n let invalidUrl = false;\n proxyUrls.forEach((url) => {\n if (!PROXY_URL_REGEX.test(url.trim())) invalidUrl = url.trim();\n });\n if (invalidUrl) {\n fieldErrors.push(m('inputSchema.validation.customProxyInvalid', { invalidUrl }));\n }\n }\n\n // Apify proxy country can be set only when using Apify proxy\n if (!useApifyProxy && apifyProxyCountry) {\n fieldErrors.push(m('inputSchema.validation.apifyProxyCountryWithoutApifyProxyForbidden'));\n }\n\n // If Apify proxy is not used skip additional checks\n if (!useApifyProxy) return fieldErrors;\n\n // If Apify proxy is used, check if there is a selected country and if so, check that it's valid (empty or a valid country code)\n if (apifyProxyCountry && !countries[apifyProxyCountry]) {\n fieldErrors.push(m('inputSchema.validation.apifyProxyCountryInvalid', { invalidCountry: apifyProxyCountry }));\n }\n\n // If options are not provided skip additional checks\n if (!options) return fieldErrors;\n\n // if apifyProxyGroups exists it must be an array of strings\n const isStringsArray = (array: Array<string>) => array.every((item) => typeof item === 'string');\n if (apifyProxyGroups && !(Array.isArray(apifyProxyGroups) && isStringsArray(apifyProxyGroups))) {\n fieldErrors.push(m('inputSchema.validation.proxyGroupMustBeArrayOfStrings', { rootName: 'input', fieldKey }));\n return fieldErrors;\n }\n\n const selectedProxyGroups = (apifyProxyGroups || []);\n\n // Auto mode, check that user has access to alteast one proxy group usable in this mode\n if (!selectedProxyGroups.length && !options.hasAutoProxyGroups) {\n fieldErrors.push(m('inputSchema.validation.noAvailableAutoProxy'));\n return fieldErrors;\n }\n\n // Check if proxy groups selected by user are available to him\n const availableProxyGroupsById = {};\n (options.availableProxyGroups || []).forEach((group) => { availableProxyGroupsById[group] = true; });\n const unavailableProxyGroups = selectedProxyGroups.filter((group: string) => !availableProxyGroupsById[group]);\n\n if (unavailableProxyGroups.length) {\n fieldErrors.push(m('inputSchema.validation.proxyGroupsNotAvailable', {\n rootName: 'input',\n fieldKey,\n groups: unavailableProxyGroups.join(', '),\n }));\n }\n\n // Check if any of the proxy groups are blocked and if yes then output the associated message\n const blockedProxyGroupsById = options.disabledProxyGroups || {};\n selectedProxyGroups\n .filter((group: string) => blockedProxyGroupsById[group])\n .forEach((blockedGroup: string) => {\n fieldErrors.push(blockedProxyGroupsById[blockedGroup]);\n });\n\n return fieldErrors;\n}\n\n/**\n * Uses AJV validator to validate input with input schema and then\n * does custom validation for our own properties (nullable, patternKey, patternValue)\n * @param validator Initialized AJV validator\n * @param inputSchema Valid input schema in object\n * @param input Input object to be validated\n * @param options (Optional) Additional validation configuration for certain fields\n */\nexport function validateInputUsingValidator(\n validator: ValidateFunction,\n inputSchema: Record<string, any>,\n input: Record<string, unknown>,\n options: Record<string, any> = {},\n) {\n const isValid = validator(input); // Check if input is valid based on schema values\n\n const { properties } = inputSchema;\n const required = inputSchema.required || [];\n\n let errors: { fieldKey: string, message: string }[] = [];\n // Process AJV validation errors\n if (!isValid) {\n errors = validator.errors!\n .map((error) => parseAjvError(error, 'input', properties, input))\n .filter((error) => !!error) as any[];\n }\n\n Object.keys(properties).forEach((property) => {\n const value = input[property] as Record<string, any>;\n const { type, editor, patternKey, patternValue } = properties[property];\n const fieldErrors = [];\n // Check that proxy is required, if yes, valides that it's correctly setup\n if (type === 'object' && editor === 'proxy') {\n const proxyValidationErrors = validateProxyField(property as any, value, required.includes(property), options.proxy);\n proxyValidationErrors.forEach((error) => {\n fieldErrors.push(error);\n });\n }\n // Check that array items fit patternKey and patternValue\n if (type === 'array' && value && Array.isArray(value)) {\n if (editor === 'requestListSources') {\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!item) invalidIndexes.push(index);\n else if (!item.url && !item.requestsFromUrl) invalidIndexes.push(index);\n else if (item.url && !URL_REGEX.test(item.url)) invalidIndexes.push(index);\n else if (item.requestsFromUrl && !URL_REGEX.test(item.requestsFromUrl)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.requestListSourcesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n }));\n }\n }\n // If patternKey is provided, then validate keys of objects in array\n if (patternKey && editor === 'keyValue') {\n const check = new RegExp(patternKey);\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!check.test(item.key)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.arrayKeysInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n pattern: patternKey,\n }));\n }\n }\n // If patternValue is provided and editor is keyValue, then validate values of objecs in array\n if (patternValue && editor === 'keyValue') {\n const check = new RegExp(patternValue);\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!check.test(item.value)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.arrayValuesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n pattern: patternValue,\n }));\n }\n // If patternValue is provided and editor is stringList, then validate each item in array\n } else if (patternValue && editor === 'stringList') {\n const check = new RegExp(patternValue);\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!check.test(item)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.arrayValuesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n pattern: patternValue,\n }));\n }\n }\n }\n // Check that object items fit patternKey and patternValue\n if (type === 'object' && value) {\n if (patternKey) {\n const check = new RegExp(patternKey);\n const invalidKeys: any[] = [];\n Object.keys(value).forEach((key) => {\n if (!check.test(key)) invalidKeys.push(key);\n });\n if (invalidKeys.length) {\n fieldErrors.push(m('inputSchema.validation.objectKeysInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidKeys: invalidKeys.join(','),\n pattern: patternKey,\n }));\n }\n }\n if (patternValue) {\n const check = new RegExp(patternValue);\n const invalidKeys: any[] = [];\n Object.keys(value).forEach((key) => {\n const propertyValue = value[key];\n if (typeof propertyValue !== 'string' || !check.test(propertyValue)) invalidKeys.push(key);\n });\n if (invalidKeys.length) {\n fieldErrors.push(m('inputSchema.validation.objectValuesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidKeys: invalidKeys.join(','),\n pattern: patternValue,\n }));\n }\n }\n }\n if (fieldErrors.length > 0) {\n const message = fieldErrors.join(', ');\n errors.push({ fieldKey: property, message });\n }\n });\n\n return errors;\n}\n\n/**\n * This functions parses all given JSON and then takes each of the jsFields.\n * Then if the field:\n * - is valid JS single function it replaces its single line string with a function delacation.\n * - is valid multiline JS code then replaces its single line string with `multiline` string\n * Then stringifies the code with given number of jsonSpacing spaces and finally prefixes whole\n * stringified JSON except the first line with globalSpacing spaces.\n */\nexport function makeInputJsFieldsReadable(json: string, jsFields: string[], jsonSpacing = 4, globalSpacing = 0): string {\n const parsedJson = JSON.parse(json);\n const replacements: Record<string, any> = {};\n\n jsFields.forEach((field) => {\n let maybeFunction = parsedJson[field];\n if (!maybeFunction || typeof maybeFunction !== 'string') return;\n\n let ast;\n try {\n ast = parse(maybeFunction, { ecmaVersion: 'latest' });\n } catch (err) {\n // Don't do anything in a case of invalid JS code.\n return;\n }\n\n const isMultiline = maybeFunction.includes('\\n');\n const isSingleFunction = ast\n && ast.body.length === 1\n && (\n ast.body[0].type === 'FunctionDeclaration'\n || (ast.body[0].type === 'ExpressionStatement' && ast.body[0].expression.type === 'ArrowFunctionExpression')\n );\n\n // If it's not a function declaration or multiline JS code then we do nothing.\n if (!isSingleFunction && !isMultiline) return;\n\n const spaces = (new Array(isSingleFunction ? jsonSpacing : jsonSpacing * 2)).fill(' ').join('');\n maybeFunction = maybeFunction\n .split('\\n').join(`\\n${spaces}`) // This prefixes each line with spaces.\n .trim(); // Trim whitespace on both sides\n\n const replacementValue = isSingleFunction\n ? maybeFunction.replace(/[;]+$/g, '') // Remove trailing semicolons\n : `\\`${maybeFunction}\\``;\n const replacementToken = `<<<REPLACEMENT_TOKEN:${Math.random()}>>>`;\n replacements[replacementToken] = replacementValue;\n parsedJson[field] = replacementToken;\n });\n\n let niceJson = JSON.stringify(parsedJson, null, jsonSpacing);\n\n Object.entries(replacements).forEach(([replacementToken, replacementValue]) => {\n niceJson = niceJson.replace(`\"${replacementToken}\"`, replacementValue);\n });\n\n const globalSpaces = (new Array(globalSpacing)).fill(' ').join('');\n niceJson = niceJson.split('\\n').join(`\\n${globalSpaces}`);\n\n return niceJson;\n}\n"],"mappings":"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","names":["definition","useApifyProxy","proxyUrls"]}
|
|
1
|
+
{"version":3,"sources":["../../src/intl.ts","../../src/schema.json","../../src/input_schema.ts","../../src/utilities.ts"],"sourcesContent":["const intlStrings = {\n 'inputSchema.validation.generic':\n 'Field {rootName}.{fieldKey} {message}',\n 'inputSchema.validation.required':\n 'Field {rootName}.{fieldKey} is required',\n 'inputSchema.validation.proxyRequired':\n 'Field {rootName}.{fieldKey} is required. Please provide custom proxy URLs or use Apify Proxy.',\n 'inputSchema.validation.requestListSourcesInvalid':\n 'Items in {rootName}.{fieldKey} at positions [{invalidIndexes}] do not contain valid URLs',\n 'inputSchema.validation.arrayKeysInvalid':\n 'Keys in {rootName}.{fieldKey} at positions [{invalidIndexes}] must match regular expression \"{pattern}\"',\n 'inputSchema.validation.arrayValuesInvalid':\n 'Values in {rootName}.{fieldKey} at positions [{invalidIndexes}] must match regular expression \"{pattern}\"',\n 'inputSchema.validation.objectKeysInvalid':\n 'Keys [{invalidKeys}] in {rootName}.{fieldKey} must match regular expression \"{pattern}',\n 'inputSchema.validation.objectValuesInvalid':\n 'Keys [{invalidKeys}] in {rootName}.{fieldKey} must have string value which matches regular expression \"{pattern}\"',\n 'inputSchema.validation.additionalProperty':\n 'Property {rootName}.{fieldKey} is not allowed.',\n 'inputSchema.validation.proxyGroupsNotAvailable':\n 'You currently do not have access to proxy groups: {groups}',\n 'inputSchema.validation.customProxyInvalid':\n 'Proxy URL \"{invalidUrl}\" has invalid format, it must be http[s]://[username[:password]]@hostname:port.',\n 'inputSchema.validation.apifyProxyCountryInvalid':\n 'Country code \"{invalidCountry}\" is invalid. Only ISO 3166-1 alpha-2 country codes are supported.',\n 'inputSchema.validation.apifyProxyCountryWithoutApifyProxyForbidden':\n 'The country for Apify Proxy can be specified only when using Apify Proxy.',\n 'inputSchema.validation.noAvailableAutoProxy':\n 'Currently you do not have access to any proxy group usable in automatic mode.',\n 'inputSchema.validation.noMatchingDefinition':\n 'Field schema.properties.{fieldKey} is not matching any input schema type definition. Please make sure that it\\'s type is valid.',\n 'inputSchema.validation.missingRequiredField':\n 'Field schema.properties.{fieldKey} does not exist, but it is specified in schema.required. Either define the field or remove it from schema.required.',\n 'inputSchema.validation.proxyGroupMustBeArrayOfStrings':\n 'Field {rootName}.{fieldKey}.apifyProxyGroups must be an array of strings.',\n};\n\n/**\n * Helper function to simulate intl formatMessage function\n */\nexport function m(stringId: string, variables?: Record<string, any>) {\n let text = intlStrings[stringId as keyof typeof intlStrings];\n if (!text) return stringId;\n\n if (variables) {\n Object.keys(variables).forEach((variableName) => {\n text = text.split(`{${variableName}}`).join(variables[variableName]);\n });\n }\n\n return text;\n}\n","{\n \"title\": \"JSON schema of Apify Actor INPUT_SCHEMA.json\",\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"schemaVersion\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"maximum\": 1\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"enum\": [\"object\"]\n },\n \"required\": {\n \"type\": \"array\",\n \"minItems\": 0,\n \"items\": { \"type\": \"string\" },\n \"uniqueItems\": true\n },\n \"additionalProperties\": {\n \"type\": \"boolean\"\n },\n \"properties\": {\n \"type\": \"object\",\n \"patternProperties\": {\n \"^\": {\n \"oneOf\": [\n { \"$ref\": \"#/definitions/stringProperty\" },\n { \"$ref\": \"#/definitions/stringEnumProperty\" },\n { \"$ref\": \"#/definitions/arrayProperty\" },\n { \"$ref\": \"#/definitions/objectProperty\" },\n { \"$ref\": \"#/definitions/integerProperty\" },\n { \"$ref\": \"#/definitions/booleanProperty\" },\n { \"$ref\": \"#/definitions/anyProperty\" }\n ]\n }\n }\n }\n },\n \"additionalProperties\": false,\n \"required\": [\"title\", \"type\", \"properties\", \"schemaVersion\"],\n \"definitions\": {\n \"stringEnumProperty\": {\n \"title\": \"Enum property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"editor\": { \"enum\": [\"select\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"string\" },\n \"prefill\": { \"type\": \"string\" },\n \"example\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" },\n \"enum\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"minItems\": 1,\n \"uniqueItems\": true\n },\n \"enumTitles\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"minItems\": 1\n }\n },\n \"required\": [\"type\", \"title\", \"description\", \"enum\"]\n },\n \"stringProperty\": {\n \"title\": \"String property\",\n \"type\": \"object\",\n \"additionalProperties\": true,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"editor\": { \"enum\": [\"javascript\", \"python\", \"textfield\", \"textarea\", \"datepicker\", \"hidden\"] },\n \"isSecret\": { \"type\": \"boolean\" }\n },\n \"required\": [\"type\", \"title\", \"description\", \"editor\"],\n \"if\": {\n \"properties\": {\n \"isSecret\": {\n \"not\": {\n \"const\": true\n }\n }\n }\n },\n \"then\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"string\" },\n \"prefill\": { \"type\": \"string\" },\n \"example\": { \"type\": \"string\" },\n \"pattern\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minLength\": { \"type\": \"integer\" },\n \"maxLength\": { \"type\": \"integer\" },\n \"editor\": { \"enum\": [\"javascript\", \"python\", \"textfield\", \"textarea\", \"datepicker\", \"hidden\"] },\n \"isSecret\": { \"type\": \"boolean\" },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n }\n },\n \"else\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"example\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"editor\": { \"enum\": [\"textfield\", \"textarea\", \"hidden\"] },\n \"isSecret\": { \"type\": \"boolean\" },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n }\n }\n },\n \"arrayProperty\": {\n \"title\": \"Array property\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"enum\": [\"array\"] },\n \"editor\": { \"enum\": [\"json\", \"requestListSources\", \"pseudoUrls\", \"globs\", \"keyValue\", \"stringList\", \"select\", \"hidden\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"array\" },\n \"prefill\": { \"type\": \"array\" },\n \"example\": { \"type\": \"array\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minItems\": { \"type\": \"integer\" },\n \"maxItems\": { \"type\": \"integer\" },\n \"uniqueItems\": { \"type\": \"boolean\" },\n\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"additionalProperties\": true,\n \"required\": [\"type\", \"title\", \"description\", \"editor\"],\n \"if\": {\n \"properties\": {\n \"editor\": { \"const\": \"select\" }\n }\n },\n \"then\": {\n \"required\": [\"items\"],\n \"properties\": {\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"string\"] },\n \"enum\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"uniqueItems\": true\n },\n \"enumTitles\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n },\n \"required\": [\"type\", \"enum\"]\n }\n }\n },\n \"else\": {\n \"properties\": {\n \"placeholderKey\": { \"type\": \"string\" },\n \"placeholderValue\": { \"type\": \"string\" },\n \"patternKey\": { \"type\": \"string\" },\n \"patternValue\": { \"type\": \"string\" }\n }\n }\n },\n \"objectProperty\": {\n \"title\": \"Object property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"object\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"object\" },\n \"prefill\": { \"type\": \"object\" },\n \"example\": { \"type\": \"object\" },\n \"patternKey\": { \"type\": \"string\" },\n \"patternValue\": { \"type\": \"string\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minProperties\": { \"type\": \"integer\" },\n \"maxProperties\": { \"type\": \"integer\" },\n\n \"editor\": { \"enum\": [\"json\", \"proxy\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\", \"editor\"]\n },\n \"integerProperty\": {\n \"title\": \"Integer property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"integer\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"integer\" },\n \"prefill\": { \"type\": \"integer\" },\n \"example\": { \"type\": \"integer\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"minimum\": { \"type\": \"integer\" },\n \"maximum\": { \"type\": \"integer\" },\n \"unit\": { \"type\": \"string\" },\n \"editor\": { \"enum\": [\"number\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\"]\n },\n \"booleanProperty\": {\n \"title\": \"Boolean property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": { \"enum\": [\"boolean\"] },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": \"boolean\" },\n \"prefill\": { \"type\": \"boolean\" },\n \"example\": { \"type\": \"boolean\" },\n \"nullable\": { \"type\": \"boolean\" },\n \"groupCaption\": { \"type\": \"string\" },\n \"groupDescription\": { \"type\": \"string\" },\n \"editor\": { \"enum\": [\"checkbox\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\"]\n },\n \"anyProperty\": {\n \"title\": \"Any property\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"type\": [\"array\"],\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"]\n },\n \"uniqueItems\": true,\n \"additionalItems\": false,\n \"minItems\": 1\n },\n \"title\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"default\": { \"type\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"] },\n \"prefill\": { \"type\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"] },\n \"example\": { \"type\": [\"object\", \"array\", \"string\", \"integer\", \"boolean\"] },\n \"nullable\": { \"type\": \"boolean\" },\n \"editor\": { \"enum\": [\"json\", \"hidden\"] },\n \"sectionCaption\": { \"type\": \"string\" },\n \"sectionDescription\": { \"type\": \"string\" }\n },\n \"required\": [\"type\", \"title\", \"description\", \"editor\"]\n }\n }\n}\n","import Ajv, { ErrorObject, Schema } from 'ajv';\n\nimport { m } from './intl';\nimport schema from './schema.json';\nimport {\n FieldDefinition,\n InputSchema,\n InputSchemaBaseChecked,\n StringFieldDefinition,\n} from './types';\n\nexport { schema as inputSchema };\n\nconst { definitions } = schema;\n\n/**\n * This function parses AJV error and transforms it into a readable string.\n *\n * @param error An error as returned from AJV.\n * @param rootName Usually 'input' or 'schema' based on if we are passing the input or schema.\n * @param properties (Used only when parsing input errors) List of input schema properties.\n * @param input (Used only when parsing input errors) Actual input that is being parsed.\n * @returns {null|{fieldKey: *, message: *}}\n */\nexport function parseAjvError(\n error: ErrorObject,\n rootName: string,\n properties: Record<string, { nullable?: boolean }> = {},\n input: Record<string, unknown> = {},\n): { fieldKey: string; message: string } | null {\n // There are 3 possible errors comming from validation:\n // - either { keword: 'anything', instancePath: '/someField', message: 'error message that we can use' }\n // - or { keyword: 'additionalProperties', params: { additionalProperty: 'field' }, message: 'must NOT have additional properties' }\n // - or { keyword: 'required', instancePath: '', params.missingProperty: 'someField' }\n\n let fieldKey: string;\n let message: string;\n\n // If error is with keyword type, it means that type of input is incorrect\n // this can mean that provided value is null\n if (error.keyword === 'type') {\n fieldKey = error.instancePath.split('/').pop()!;\n // Check if value is null and field is nullable, if yes, then skip this error\n if (properties[fieldKey] && properties[fieldKey].nullable && input[fieldKey] === null) {\n return null;\n }\n message = m('inputSchema.validation.generic', { rootName, fieldKey, message: error.message });\n } else if (error.keyword === 'required') {\n fieldKey = error.params.missingProperty;\n message = m('inputSchema.validation.required', { rootName, fieldKey });\n } else if (error.keyword === 'additionalProperties') {\n fieldKey = error.params.additionalProperty;\n message = m('inputSchema.validation.additionalProperty', { rootName, fieldKey });\n } else if (error.keyword === 'enum') {\n fieldKey = error.instancePath.split('/').pop()!;\n const errorMessage = `${error.message}: \"${error.params.allowedValues.join('\", \"')}\"`;\n message = m('inputSchema.validation.generic', { rootName, fieldKey, message: errorMessage });\n } else {\n fieldKey = error.instancePath.split('/').pop()!;\n message = m('inputSchema.validation.generic', { rootName, fieldKey, message: error.message });\n }\n\n return { fieldKey, message };\n}\n\n/**\n * Validates given object against schema and throws a human-readable error.\n */\nconst validateAgainstSchemaOrThrow = (validator: Ajv, obj: Record<string, unknown>, inputSchema: Schema, rootName: string) => {\n if (validator.validate(inputSchema, obj)) return;\n\n const errorMessage = parseAjvError(validator.errors![0], rootName)?.message;\n throw new Error(`Input schema is not valid (${errorMessage})`);\n};\n\n/**\n * This validates given object only against the basic input schema without checking the particular fields.\n * We override schema.properties.properties not to validate field definitions.\n */\nfunction validateBasicStructure(validator: Ajv, obj: Record<string, unknown>): asserts obj is InputSchemaBaseChecked {\n const schemaWithoutProperties = {\n ...schema,\n properties: { ...schema.properties, properties: { type: 'object' } as any },\n };\n validateAgainstSchemaOrThrow(validator, obj, schemaWithoutProperties, 'schema');\n}\n\n/**\n * Validates particular field against it's schema.\n */\nfunction validateField(validator: Ajv, fieldSchema: Record<string, unknown>, fieldKey: string): asserts fieldSchema is FieldDefinition {\n const matchingDefinitions = Object\n .values<any>(definitions) // cast as any, as the code in first branch seems to be invalid\n .filter((definition) => {\n return definition.properties.type.enum\n // This is a normal case where fieldSchema.type can be only one possible value matching definition.properties.type.enum.0\n ? definition.properties.type.enum[0] === fieldSchema.type\n // This is a type \"Any\" where fieldSchema.type is an array of possible values\n : Array.isArray(fieldSchema.type);\n });\n\n // There is not matching definition.\n if (matchingDefinitions.length === 0) {\n const errorMessage = m('inputSchema.validation.noMatchingDefinition', { fieldKey });\n throw new Error(`Input schema is not valid (${errorMessage})`);\n }\n\n // If there is only one matching then we are done and simply compare it.\n if (matchingDefinitions.length === 1) {\n validateAgainstSchemaOrThrow(validator, fieldSchema, matchingDefinitions[0], `schema.properties.${fieldKey}`);\n return;\n }\n\n // If there are more matching definitions then the type is string, and we need to get the right one.\n // If the definition contains \"enum\" property then it's enum type.\n if ((fieldSchema as StringFieldDefinition).enum) {\n const definition = matchingDefinitions.filter((item) => !!item.properties.enum).pop();\n if (!definition) throw new Error('Input schema validation failed to find \"enum property\" definition');\n validateAgainstSchemaOrThrow(validator, fieldSchema, definition, `schema.properties.${fieldKey}.enum`);\n return;\n }\n // Otherwise we use the other definition.\n const definition = matchingDefinitions.filter((item) => !item.properties.enum).pop();\n if (!definition) throw new Error('Input schema validation failed to find other than \"enum property\" definition');\n\n validateAgainstSchemaOrThrow(validator, fieldSchema, definition, `schema.properties.${fieldKey}`);\n}\n\n/**\n * Validates all properties in the input schema\n */\nfunction validateProperties(inputSchema: InputSchemaBaseChecked, validator: Ajv): asserts inputSchema is InputSchema {\n Object.entries(inputSchema.properties).forEach(([fieldKey, fieldSchema]) => (\n validateField(validator, fieldSchema, fieldKey)),\n );\n}\n\n/**\n * Validates that all required fields are present in properties list\n */\nexport function validateExistenceOfRequiredFields(inputSchema: InputSchema) {\n // If the input schema does not have any required fields, we do not need to validate them\n if (!inputSchema?.required?.length) return;\n\n Object.values(inputSchema?.required).forEach((fieldKey) => {\n // If the required field is present in the list of properties, we can check the next one\n if (inputSchema?.properties[fieldKey as string]) return;\n\n // The required field is not defined in list of properties. Which means the schema is not valid.\n throw new Error(m('inputSchema.validation.missingRequiredField', { fieldKey }));\n });\n}\n\n/**\n * This function validates given input schema first just for basic structure then each field one by one,\n * then checks that all required fields are present and finally checks fully against the whole schema.\n *\n * This way we get the most accurate error message for user.\n */\nexport function validateInputSchema(validator: Ajv, inputSchema: Record<string, unknown>): asserts inputSchema is InputSchema {\n // First validate just basic structure without fields.\n validateBasicStructure(validator, inputSchema);\n\n // Then validate each field separately.\n validateProperties(inputSchema, validator);\n\n // Next validate if required fields are actually present in the schema\n validateExistenceOfRequiredFields(inputSchema);\n\n // Finally just to be sure run validation against the whole schema.\n validateAgainstSchemaOrThrow(validator, inputSchema, schema, 'schema');\n}\n","import { PROXY_URL_REGEX, URL_REGEX } from '@apify/consts';\nimport { parse } from 'acorn-loose';\nimport { ValidateFunction } from 'ajv';\nimport { countries } from 'countries-list';\n\nimport { parseAjvError } from './input_schema';\nimport { m } from './intl';\n\n/**\n * Validates input field configured with proxy editor\n * @param fieldKey Proxy field value\n * @param value Proxy field value\n * @param [isRequired] Whether the field is required or not\n * @param [options] Information about proxy groups availability\n * @param [options.hasAutoProxyGroups] Informs validation whether user has atleast one proxy group available in auto mode\n * @param [options.availableProxyGroups] List of available proxy groups\n * @param [options.disabledProxyGroups] Object with groupId as key and error message as value (mostly for residential/SERP)\n */\nfunction validateProxyField(\n fieldKey: Record<string, unknown>,\n value: Record<string, any>,\n isRequired = false,\n options: { hasAutoProxyGroups?: boolean; availableProxyGroups?: string[]; disabledProxyGroups?: Record<string, unknown> } | null = null,\n) {\n const fieldErrors: any[] = [];\n if (isRequired) {\n // Nullable error is already handled by AJV\n if (value === null) return fieldErrors;\n if (!value) {\n const message = m('inputSchema.validation.required', { rootName: 'input', fieldKey });\n fieldErrors.push(message);\n return fieldErrors;\n }\n\n const { useApifyProxy, proxyUrls } = value;\n if (!useApifyProxy && (!Array.isArray(proxyUrls) || proxyUrls.length === 0)) {\n fieldErrors.push(m('inputSchema.validation.proxyRequired', { rootName: 'input', fieldKey }));\n return fieldErrors;\n }\n }\n\n // Input is not required, so missing value is valid\n if (!value) return fieldErrors;\n\n const { useApifyProxy, proxyUrls, apifyProxyGroups, apifyProxyCountry } = value;\n\n if (!useApifyProxy && Array.isArray(proxyUrls)) {\n let invalidUrl = false;\n proxyUrls.forEach((url) => {\n if (!PROXY_URL_REGEX.test(url.trim())) invalidUrl = url.trim();\n });\n if (invalidUrl) {\n fieldErrors.push(m('inputSchema.validation.customProxyInvalid', { invalidUrl }));\n }\n }\n\n // Apify proxy country can be set only when using Apify proxy\n if (!useApifyProxy && apifyProxyCountry) {\n fieldErrors.push(m('inputSchema.validation.apifyProxyCountryWithoutApifyProxyForbidden'));\n }\n\n // If Apify proxy is not used skip additional checks\n if (!useApifyProxy) return fieldErrors;\n\n // If Apify proxy is used, check if there is a selected country and if so, check that it's valid (empty or a valid country code)\n if (apifyProxyCountry && !countries[apifyProxyCountry as keyof typeof countries]) {\n fieldErrors.push(m('inputSchema.validation.apifyProxyCountryInvalid', { invalidCountry: apifyProxyCountry }));\n }\n\n // If options are not provided skip additional checks\n if (!options) return fieldErrors;\n\n // if apifyProxyGroups exists it must be an array of strings\n const isStringsArray = (array: Array<string>) => array.every((item) => typeof item === 'string');\n if (apifyProxyGroups && !(Array.isArray(apifyProxyGroups) && isStringsArray(apifyProxyGroups))) {\n fieldErrors.push(m('inputSchema.validation.proxyGroupMustBeArrayOfStrings', { rootName: 'input', fieldKey }));\n return fieldErrors;\n }\n\n const selectedProxyGroups = (apifyProxyGroups || []);\n\n // Auto mode, check that user has access to alteast one proxy group usable in this mode\n if (!selectedProxyGroups.length && !options.hasAutoProxyGroups) {\n fieldErrors.push(m('inputSchema.validation.noAvailableAutoProxy'));\n return fieldErrors;\n }\n\n // Check if proxy groups selected by user are available to him\n const availableProxyGroupsById = {} as Record<string, boolean>;\n (options.availableProxyGroups || []).forEach((group) => { availableProxyGroupsById[group] = true; });\n const unavailableProxyGroups = selectedProxyGroups.filter((group: string) => !availableProxyGroupsById[group]);\n\n if (unavailableProxyGroups.length) {\n fieldErrors.push(m('inputSchema.validation.proxyGroupsNotAvailable', {\n rootName: 'input',\n fieldKey,\n groups: unavailableProxyGroups.join(', '),\n }));\n }\n\n // Check if any of the proxy groups are blocked and if yes then output the associated message\n const blockedProxyGroupsById = options.disabledProxyGroups || {};\n selectedProxyGroups\n .filter((group: string) => blockedProxyGroupsById[group])\n .forEach((blockedGroup: string) => {\n fieldErrors.push(blockedProxyGroupsById[blockedGroup]);\n });\n\n return fieldErrors;\n}\n\n/**\n * Uses AJV validator to validate input with input schema and then\n * does custom validation for our own properties (nullable, patternKey, patternValue)\n * @param validator Initialized AJV validator\n * @param inputSchema Valid input schema in object\n * @param input Input object to be validated\n * @param options (Optional) Additional validation configuration for certain fields\n */\nexport function validateInputUsingValidator(\n validator: ValidateFunction,\n inputSchema: Record<string, any>,\n input: Record<string, unknown>,\n options: Record<string, any> = {},\n) {\n const isValid = validator(input); // Check if input is valid based on schema values\n\n const { properties } = inputSchema;\n const required = inputSchema.required || [];\n\n let errors: { fieldKey: string, message: string }[] = [];\n // Process AJV validation errors\n if (!isValid) {\n errors = validator.errors!\n .map((error) => parseAjvError(error, 'input', properties, input))\n .filter((error) => !!error) as any[];\n }\n\n Object.keys(properties).forEach((property) => {\n const value = input[property] as Record<string, any>;\n const { type, editor, patternKey, patternValue } = properties[property];\n const fieldErrors = [];\n // Check that proxy is required, if yes, valides that it's correctly setup\n if (type === 'object' && editor === 'proxy') {\n const proxyValidationErrors = validateProxyField(property as any, value, required.includes(property), options.proxy);\n proxyValidationErrors.forEach((error) => {\n fieldErrors.push(error);\n });\n }\n // Check that array items fit patternKey and patternValue\n if (type === 'array' && value && Array.isArray(value)) {\n if (editor === 'requestListSources') {\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!item) invalidIndexes.push(index);\n else if (!item.url && !item.requestsFromUrl) invalidIndexes.push(index);\n else if (item.url && !URL_REGEX.test(item.url)) invalidIndexes.push(index);\n else if (item.requestsFromUrl && !URL_REGEX.test(item.requestsFromUrl)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.requestListSourcesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n }));\n }\n }\n // If patternKey is provided, then validate keys of objects in array\n if (patternKey && editor === 'keyValue') {\n const check = new RegExp(patternKey);\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!check.test(item.key)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.arrayKeysInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n pattern: patternKey,\n }));\n }\n }\n // If patternValue is provided and editor is keyValue, then validate values of objecs in array\n if (patternValue && editor === 'keyValue') {\n const check = new RegExp(patternValue);\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!check.test(item.value)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.arrayValuesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n pattern: patternValue,\n }));\n }\n // If patternValue is provided and editor is stringList, then validate each item in array\n } else if (patternValue && editor === 'stringList') {\n const check = new RegExp(patternValue);\n const invalidIndexes: any[] = [];\n value.forEach((item, index) => {\n if (!check.test(item)) invalidIndexes.push(index);\n });\n if (invalidIndexes.length) {\n fieldErrors.push(m('inputSchema.validation.arrayValuesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidIndexes: invalidIndexes.join(','),\n pattern: patternValue,\n }));\n }\n }\n }\n // Check that object items fit patternKey and patternValue\n if (type === 'object' && value) {\n if (patternKey) {\n const check = new RegExp(patternKey);\n const invalidKeys: any[] = [];\n Object.keys(value).forEach((key) => {\n if (!check.test(key)) invalidKeys.push(key);\n });\n if (invalidKeys.length) {\n fieldErrors.push(m('inputSchema.validation.objectKeysInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidKeys: invalidKeys.join(','),\n pattern: patternKey,\n }));\n }\n }\n if (patternValue) {\n const check = new RegExp(patternValue);\n const invalidKeys: any[] = [];\n Object.keys(value).forEach((key) => {\n const propertyValue = value[key];\n if (typeof propertyValue !== 'string' || !check.test(propertyValue)) invalidKeys.push(key);\n });\n if (invalidKeys.length) {\n fieldErrors.push(m('inputSchema.validation.objectValuesInvalid', {\n rootName: 'input',\n fieldKey: property,\n invalidKeys: invalidKeys.join(','),\n pattern: patternValue,\n }));\n }\n }\n }\n if (fieldErrors.length > 0) {\n const message = fieldErrors.join(', ');\n errors.push({ fieldKey: property, message });\n }\n });\n\n return errors;\n}\n\n/**\n * This functions parses all given JSON and then takes each of the jsFields.\n * Then if the field:\n * - is valid JS single function it replaces its single line string with a function delacation.\n * - is valid multiline JS code then replaces its single line string with `multiline` string\n * Then stringifies the code with given number of jsonSpacing spaces and finally prefixes whole\n * stringified JSON except the first line with globalSpacing spaces.\n */\nexport function makeInputJsFieldsReadable(json: string, jsFields: string[], jsonSpacing = 4, globalSpacing = 0): string {\n const parsedJson = JSON.parse(json);\n const replacements: Record<string, any> = {};\n\n jsFields.forEach((field) => {\n let maybeFunction = parsedJson[field];\n if (!maybeFunction || typeof maybeFunction !== 'string') return;\n\n let ast;\n try {\n ast = parse(maybeFunction, { ecmaVersion: 'latest' });\n } catch (err) {\n // Don't do anything in a case of invalid JS code.\n return;\n }\n\n const isMultiline = maybeFunction.includes('\\n');\n const isSingleFunction = ast\n && ast.body.length === 1\n && (\n ast.body[0].type === 'FunctionDeclaration'\n || (ast.body[0].type === 'ExpressionStatement' && ast.body[0].expression.type === 'ArrowFunctionExpression')\n );\n\n // If it's not a function declaration or multiline JS code then we do nothing.\n if (!isSingleFunction && !isMultiline) return;\n\n const spaces = (new Array(isSingleFunction ? jsonSpacing : jsonSpacing * 2)).fill(' ').join('');\n maybeFunction = maybeFunction\n .split('\\n').join(`\\n${spaces}`) // This prefixes each line with spaces.\n .trim(); // Trim whitespace on both sides\n\n const replacementValue = isSingleFunction\n ? maybeFunction.replace(/[;]+$/g, '') // Remove trailing semicolons\n : `\\`${maybeFunction}\\``;\n const replacementToken = `<<<REPLACEMENT_TOKEN:${Math.random()}>>>`;\n replacements[replacementToken] = replacementValue;\n parsedJson[field] = replacementToken;\n });\n\n let niceJson = JSON.stringify(parsedJson, null, jsonSpacing);\n\n Object.entries(replacements).forEach(([replacementToken, replacementValue]) => {\n niceJson = niceJson.replace(`\"${replacementToken}\"`, replacementValue);\n });\n\n const globalSpaces = (new Array(globalSpacing)).fill(' ').join('');\n niceJson = niceJson.split('\\n').join(`\\n${globalSpaces}`);\n\n return niceJson;\n}\n"],"mappings":"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","names":["definition","useApifyProxy","proxyUrls"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apify/input_schema",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.7.1",
|
|
4
4
|
"description": "Tools and constants shared across Apify projects.",
|
|
5
5
|
"main": "./cjs/index.cjs",
|
|
6
6
|
"module": "./esm/index.mjs",
|
|
@@ -55,5 +55,5 @@
|
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"ajv": "^8.0.0"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "33a42ef830b2d1d2bd6858b591f46b8fefd197cb"
|
|
59
59
|
}
|