ayakashi
Version:
The next generation web scraping framework
89 lines (87 loc) • 3.22 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateExtractor = void 0;
const mkdirp_1 = __importDefault(require("mkdirp"));
const util_1 = require("util");
const path_1 = require("path");
const fs_1 = require("fs");
const opLog_1 = require("../../opLog/opLog");
const mkdirp = util_1.promisify(mkdirp_1.default);
const writeFile = util_1.promisify(fs_1.writeFile);
const exists = util_1.promisify(fs_1.exists);
function generateExtractor(directory, name, ts) {
return __awaiter(this, void 0, void 0, function* () {
const opLog = opLog_1.getOpLog();
const ext = ts ? ".ts" : ".js";
let fileName;
if (name.indexOf(ext) > -1) {
fileName = name;
}
else {
fileName = `${name}${ext}`;
}
const extractorsFolder = path_1.join(directory, "extractors");
const filePath = path_1.join(extractorsFolder, fileName);
if (yield exists(filePath)) {
opLog.error(`extractor <${name}> already exists in ${filePath}`);
return;
}
yield mkdirp(extractorsFolder);
const content = ts ? getContentTS(name) : getContent(name);
yield writeFile(filePath, content);
opLog.info(`Created <${name}> in ${filePath}`);
});
}
exports.generateExtractor = generateExtractor;
function getContent(name) {
return (`/**
* @param {import("@ayakashi/types").IAyakashiInstance} ayakashi
*/
module.exports = function(ayakashi) {
ayakashi.registerExtractor("${name}", function() {
return {
extract: function(element) {
return element.id;
},
isValid: function(result) {
return !!result;
},
useDefault: function() {
return "no-id-found";
}
};
});
};
`);
}
function getContentTS(name) {
return (`import {IAyakashiInstance} from "@ayakashi/types";
export default async function(ayakashi: IAyakashiInstance) {
ayakashi.registerExtractor("${name}", function() {
return {
extract: function(element) {
return element.id;
},
isValid: function(result) {
return !!result;
},
useDefault: function() {
return "no-id-found";
}
};
});
}
`);
}