contract-scraper
Version:
A customisable data scraper for the web based on JSON contracts
56 lines (55 loc) • 2.1 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const joi_1 = __importDefault(require("joi"));
const buildSchema = allowedTypes => {
return joi_1.default.object({
itemSelector: joi_1.default.string(),
waitForPageLoadSelector: joi_1.default.string(),
puppeteer: joi_1.default.boolean().default(true),
scriptTagSelector: joi_1.default.string(),
attributes: joi_1.default
.object({
a: joi_1.default.string(),
})
.pattern(/^/, joi_1.default.object({
type: joi_1.default
.string()
.valid(...allowedTypes)
.when('itemSelector', {
is: joi_1.default.exist(),
then: joi_1.default.forbidden(),
})
.optional(),
raw: joi_1.default.boolean(),
selector: joi_1.default.string().optional().allow(''),
attribute: joi_1.default.string(),
data: joi_1.default.object({
name: joi_1.default.string(),
key: joi_1.default.string(),
}),
itemSelector: joi_1.default.string(),
attributes: joi_1.default
.object({
a: joi_1.default.string(),
})
.pattern(/^/, joi_1.default.object({
type: joi_1.default.string().default('text'),
selector: joi_1.default.string().optional().allow(''),
attribute: joi_1.default.string(),
data: joi_1.default.object({
name: joi_1.default.string(),
key: joi_1.default.string(),
}),
}))
.when('itemSelector', {
is: joi_1.default.exist(),
then: joi_1.default.required(),
}),
}))
.required(),
});
};
exports.default = buildSchema;