UNPKG

imm-noc

Version:

A tool for noc inquiry

195 lines (194 loc) 8.56 kB
#!/usr/local/bin/node "use strict"; 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const outlook_salary_1 = require("./outlook_salary"); const config_1 = require("./config"); const { ArgumentParser } = require('argparse'); const puppeteer = require("puppeteer"); const fs = require('fs'); const path = require('path'); const nocclass_1 = require("./nocclass"); const parser = new ArgumentParser({ description: 'A tool for get noc information' }); //Get noc codes by searching keywords parser.add_argument("-k", "--keywords", { help: "input key words", nargs: '+' }); parser.add_argument('-n', '--noc', { help: 'noc code' }); // about details for -d, or about search scope for -k parser.add_argument("-md", "--main_duties", { help: "input if includes main duties", action: "store_true" }); parser.add_argument("-te", "--title_examples", { help: "input if includes title examples", action: "store_true" }); // about noc related special programs parser.add_argument("-sp", "--special_programs", { help: "get related special programs", action: "store_true" }); parser.add_argument("-ws", "--with_source", { help: "get related special programs, show source link", action: "store_true" }); parser.add_argument("-wd", "--with_description", { help: "get related special programs, show program description", action: "store_true" }); // about region parser.add_argument('-p', '--province', { help: 'provide province data' }); parser.add_argument('-a', '--area', { help: 'provide area data' }); parser.add_argument('-c', '--canada', { help: 'provide canada data', action: 'store_true' }); // about outlook parser.add_argument("-s", "--starts_with", { help: "noc starts with" }); parser.add_argument("-o", "--outlook", { help: "input outlook star number" }); // utils parser.add_argument("-d", "--details", { help: "looking for noc details. tt: title, te: title example, er: employment requirement, md: main duties,gd:general description,ai: additional information,ec: exclucsion " }); parser.add_argument("-i", "--information", { help: "display information", action: 'store_true' }); parser.add_argument("-r", "--remote", { help: "get single noc info remotely(from website)", action: 'store_true' }); // batch processing parser.add_argument('-ns', '--nocs', { help: 'noc code', nargs: "+" }); const args = parser.parse_args(); var nocs; if (args.noc && !config_1.noc_list.includes(args.noc)) { console.log(`${args.noc} is not a valid noc code.`); process.exit(1); } else if (args.noc === '5124') { console.log(`${args.noc} has no data in jobbank.`); process.exit(1); } const area_index = args.area && args.area >= 0 && args.area <= 72 ? args.area : 66; // default is Vancouver const prov_index = args.province && args.province >= 0 && args.province <= 12 ? args.province : 9; // default is BC (() => __awaiter(void 0, void 0, void 0, function* () { console.time("Searching time"); // get online noc info if (args.remote && args.noc) { yield getNocOnline(args.noc); } else { // read json data nocs = getNocs(); // handle tasks handleTasks(); } console.timeEnd("Searching time"); }))(); // get noc info through web searching function getNocOnline(noc) { return __awaiter(this, void 0, void 0, function* () { const browser = yield puppeteer.launch(); const page = yield browser.newPage(); console.log(`I am searching the database online for ${noc}'s information..., be patient.`); const noc_data = yield (0, outlook_salary_1.getNocOutlookSalary)(noc, page); console.table(noc_data[noc].region[area_index]); yield page.close(); yield browser.close(); }); } // get all noc info function getNocs() { try { const filename = path.join(__dirname, './nocs.json'); const rawdata = fs.readFileSync(filename); return JSON.parse(rawdata); } catch (err) { console.log(`${err}`); process.exit(1); } } function handleTasks() { if (args.information) { if (args.province) { const areas = nocclass_1.Area.provinces[args.province]; var area_container = []; for (var i = areas[0]; i < areas[1] + 1; i++) { i >= 0 && area_container.push({ area_index: i, region: nocs['1111'].region[i].region }); } area_container.length > 0 ? console.table(area_container) : console.log("\n", nocclass_1.Area.province_names[args.province], "\n"); } else { const provs = nocs['1111'].province.map(prov => prov.region); const areas = nocs['1111'].region.map(area => area.region); console.table(provs); console.table(areas); } return; } if (args.keywords) { const nocs = new nocclass_1.Nocs(); console.table(nocs.getNocCodes(args.keywords, args.main_duties, args.title_examples)); return; } if (args.noc && args.details) { const noc_obj = new nocclass_1.Noc(args.noc); const details = noc_obj.getDetails(args.details); console.log(`\n${details.label} of NOC ${details.noc}\n`); console.log(details.content + "\n"); return; } if (args.noc && args.special_programs) { const noc = args.noc; const noc_obj = new nocclass_1.Noc(noc); const programs = noc_obj.getRelatedPrograms(); var with_source = args.with_source ? true : false; var with_description = args.with_description ? true : false; noc_obj.showRelatedPrograms(programs, with_source, with_description = with_description); return; } if (args.nocs) { if (args.province) { const the_nocs = args.nocs.map(noc => { const noc_obj = new nocclass_1.Noc(noc); return Object.assign({ noc: noc_obj.noc_code }, noc_obj.get_prov_outlook_wages(prov_index)); }); console.table(the_nocs); return; } else if (args.canada) { const the_nocs = args.nocs.map(noc => { const noc_obj = new nocclass_1.Noc(noc); return Object.assign({ noc: noc_obj.noc_code }, noc_obj.get_canada_outlook_wages()); }); console.table(the_nocs); return; } else if (args.area) { const the_nocs = args.nocs.map(noc => { const noc_obj = new nocclass_1.Noc(noc); return Object.assign({ noc: noc_obj.noc_code }, noc_obj.get_area_outlook_wages(area_index)); }); console.table(the_nocs); return; } else { const the_nocs = args.nocs.map(noc => { const noc_obj = new nocclass_1.Noc(noc); return Object.assign({ noc: noc_obj.noc_code }, noc_obj.get_area_outlook_wages(66)); }); console.table(the_nocs); return; } } if (args.starts_with && args.outlook) { const nocs = new nocclass_1.Nocs(); console.table(nocs.qualifiedNocs(args.starts_with, args.outlook, area_index)); return; } // fina a noc's job opportunity outlook in Canada scope if (args.noc && args.outlook) { const nocs = new nocclass_1.Nocs(); console.table(nocs.qualifiedPlaces(args.noc, args.outlook)); return; } // process single noc info if (args.noc) { const noc_obj = new nocclass_1.Noc(args.noc); if (args.province) { console.table(noc_obj.get_prov_outlook_wages(prov_index)); return; } else if (args.canada) { console.table(noc_obj.get_canada_outlook_wages()); return; } console.table(noc_obj.get_area_outlook_wages(area_index)); return; } }