UNPKG

bing-image-search

Version:
232 lines (231 loc) 10.6 kB
"use strict"; var _argparse = require("argparse"); var _bingImageSearchAsyncIterator = _interopRequireDefault(require("bing-image-search-async-iterator")); var _package = require("../package.json"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } function _asyncIterator(r) { var n, t, o, e = 2; for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { if (t && null != (n = r[t])) return n.call(r); if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); t = "@@asyncIterator", o = "@@iterator"; } throw new TypeError("Object is not async iterable"); } function AsyncFromSyncIterator(r) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var n = r.done; return Promise.resolve(r.value).then(function (r) { return { value: r, done: n }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) { this.s = r, this.n = r.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, return: function _return(r) { var n = this.s.return; return void 0 === n ? Promise.resolve({ value: r, done: !0 }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); }, throw: function _throw(r) { var n = this.s.return; return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(r); } function keyValuePairsToObject(kvps = []) { return kvps.reduce((acc, [k, v]) => { acc[k] = v; return acc; }, {}); } _asyncToGenerator(function* () { try { const parser = new _argparse.ArgumentParser({ version: _package.version, addHelp: true, description: 'Bing Image Search' }); const defaultAG = parser.addArgumentGroup({ description: 'Basic arguments' }); defaultAG.addArgument(['query'], { help: 'Search query string' }); defaultAG.addArgument(['--key'], { help: 'API Key (or set BING_IMAGE_SEARCH_API_KEY instead)', defaultValue: process.env.BING_IMAGE_SEARCH_API_KEY, required: process.env.BING_IMAGE_SEARCH_API_KEY == null }); defaultAG.addArgument(['--amount'], { help: 'Total results desired (default: 2000)', type: 'int', defaultValue: 2000 }); defaultAG.addArgument(['--market'], { help: 'Market code (e.g., "en-US")' }); defaultAG.addArgument(['--safeSearch'], { help: 'Safe search ("Off", "Moderate", "Strict")', metavar: 'MODE', choices: ['Off', 'Moderate', 'Strict'] }); const filtersAG = parser.addArgumentGroup({ description: 'Filter arguments' }); filtersAG.addArgument(['--aspect'], { help: 'Aspect ratio ("Square", "Wide", "Tall", "All")', metavar: 'ASPECT', choices: ['Square', 'Wide', 'Tall', 'All'] }); filtersAG.addArgument(['--color'], { help: 'Color ("ColorOnly", "Monochrome", "Black", "Blue", "Brown", "Gray", "Green", "Orange", "Pink", "Purple", "Red", "Teal", "White", "Yellow")', metavar: 'COLOR', choices: ['ColorOnly', 'Monochrome', 'Black', 'Blue', 'Brown', 'Gray', 'Green', 'Orange', 'Pink', 'Purple', 'Red', 'Teal', 'White', 'Yellow'] }); filtersAG.addArgument(['--imageContent'], { help: 'Content type ("Face", "Portrait")', metavar: 'TYPE', choices: ['Face', 'Portrait'] }); filtersAG.addArgument(['--imageType'], { help: 'Image type ("AnimatedGif", "AnimatedGifHttps", "Clipart", "Line", "Photo", "Shopping", "Transparent")', metavar: 'TYPE', choices: ['AnimatedGif', 'AnimatedGifHttps', 'Clipart', 'Line', 'Photo', 'Shopping', 'Transparent'] }); filtersAG.addArgument(['--license'], { help: 'Image license type ("Any", "Public", "Share", "ShareCommercially", "Modify", "ModifyCommercially", "All"); "Any" excludes images without known license', metavar: 'LICENSE', choices: ['Any', 'Public', 'Share', 'ShareCommercially', 'Modify', 'ModifyCommercially', 'All'] }); filtersAG.addArgument(['--freshness'], { help: 'Discovery time ("Day", "Week", "Month")', metavar: 'VALUE', choices: ['Day', 'Week', 'Month'] }); filtersAG.addArgument(['--size'], { help: 'Image size ("Small", "Medium", "Large", "Wallpaper", "All")', metavar: 'SIZE', choices: ['Small', 'Medium', 'Large', 'Wallpaper', 'All'] }); filtersAG.addArgument(['--width'], { help: 'Width is equal to VALUE', type: 'int', metavar: 'VALUE' }); filtersAG.addArgument(['--height'], { help: 'Height is equal to VALUE', type: 'int', metavar: 'VALUE' }); filtersAG.addArgument(['--minWidth'], { help: 'Width is greater than or equal to VALUE', type: 'int', metavar: 'VALUE' }); filtersAG.addArgument(['--minHeight'], { help: 'Height is greater than or equal to VALUE', type: 'int', metavar: 'VALUE' }); filtersAG.addArgument(['--maxWidth'], { help: 'Width is less than or equal to VALUE', type: 'int', metavar: 'VALUE' }); filtersAG.addArgument(['--maxHeight'], { help: 'Height is less than or equal to VALUE', type: 'int', metavar: 'VALUE' }); filtersAG.addArgument(['--minFileSize'], { help: 'File is size greater than or equal to VALUE', type: 'int', metavar: 'VALUE' }); filtersAG.addArgument(['--maxFileSize'], { help: 'File is size less than or equal to VALUE', type: 'int', metavar: 'VALUE' }); const specialAG = parser.addArgumentGroup({ description: 'Special arguments' }); specialAG.addArgument(['--offset'], _objectSpread({ help: 'Initial offset for API call (default: 0)', type: 'int', defaultValue: 0 }, { help: _argparse.Const.SUPPRESS })); specialAG.addArgument(['--count'], _objectSpread({ help: 'Result count per API call (default: 150)', type: 'int', defaultValue: 150 }, { help: _argparse.Const.SUPPRESS })); specialAG.addArgument(['--indent'], { help: 'Spaces to indent JSON outputs (default: 2)', type: 'int', defaultValue: 2, metavar: 'SPACES' }); specialAG.addArgument(['--qparam'], { help: 'Add query param (multiples allowed)', nargs: 2, action: 'append', metavar: ['KEY', 'VALUE'], defaultValue: [] }); specialAG.addArgument(['--hparam'], { help: 'Add header param (multiples allowed)', nargs: 2, action: 'append', metavar: ['KEY', 'VALUE'], defaultValue: [] }); specialAG.addArgument(['--raw'], { help: 'Do not unwrap search results from API responses', nargs: 0 }); const args = parser.parseArgs(); const searchOpts = { query: args.query, key: args.key, amount: args.amount, market: args.market, safeSearch: args.safeSearch, aspect: args.aspect, color: args.color, imageContent: args.imageContent, imageType: args.imageType, license: args.license, freshness: args.freshness, size: args.size, width: args.width, height: args.height, minWidth: args.minWidth, minHeight: args.minHeight, maxWidth: args.maxWidth, maxHeight: args.maxHeight, minFileSize: args.minFileSize, maxFileSize: args.maxFileSize, offset: args.offset, count: args.count, queryParams: keyValuePairsToObject(args.qparam), headerParams: keyValuePairsToObject(args.hparam) }; var _iteratorAbruptCompletion = false; var _didIteratorError = false; var _iteratorError; try { for (var _iterator = _asyncIterator((0, _bingImageSearchAsyncIterator.default)(searchOpts)), _step; _iteratorAbruptCompletion = !(_step = yield _iterator.next()).done; _iteratorAbruptCompletion = false) { const response = _step.value; { const outputFn = obj => console.log(JSON.stringify(obj, null, args.indent)); if (args.raw) { outputFn(response); } else { response.value.forEach(outputFn); } } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (_iteratorAbruptCompletion && _iterator.return != null) { yield _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } catch (err) { process.exitCode = 1; console.error(err.message); } })();