Server IP : 185.86.78.101 / Your IP : 216.73.216.124 Web Server : Apache System : Linux 675867-vds-valikoshka1996.gmhost.pp.ua 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/wwwroot/mifepriston.org/node_modules/npm-api/lib/ |
Upload File : |
'use strict'; const url = require('url'); const fetch = require('node-fetch'); const utils = require('./utils'); const config = require('./config'); /** * View constructor. Create an instance of a view associated with a couchdb view in the npm registry. * * ```js * const view = new View('dependedUpon'); * ``` * * @param {String} `name` Name of couchdb view to use. * @returns {Object} instance of `View` * @name View * @api public */ class View { constructor(name) { this.name = name; this.config = utils.clone(config); this.config.pathname += '/_view/' + this.name; } /** * Query the couchdb view with the provided parameters. * * ```js * let results = await view.query({ * group_level: 2, * startkey: JSON.stringify(['micromatch']), * endkey: JSON.stringify(['micromatch', {}]) * }); * ``` * @param {Object} `params` URL query parameters to pass along to the couchdb view. * @return {Promise} Results of the query when promise is resolved. * @name .query * @api public */ async query(params = {}) { const response = await fetch(this.url(params)); if (!response.ok) { throw new Error(response.statusText); } return new Promise((resolve, reject) => { let items = []; let header = {}; response.body .pipe(utils.JSONStream.parse('rows.*')) .on('header', (data) => { header = data; if (header.error) { reject(new Error(header.reason || header.error)); } }) .on('data', (data) => { items.push(data); }) .once('error', reject) .once('end', () => { resolve(items); }); }); } /** * Query the couchdb view with the provided parameters and return a stream of results. * * ```js * view.stream({ * group_level: 2, * startkey: JSON.stringify(['micromatch']), * endkey: JSON.stringify(['micromatch', {}]) * }) * .on('data', (data) => { * console.log(data); * }); * ``` * @param {Object} `params` URL query parameters to pass along to the couchdb view. * @return {Stream} Streaming results of the query. * @name .stream * @api public */ stream(params = {}) { const stream = utils.JSONStream.parse('rows.*'); fetch(this.url(params)).then(response => { if (!response.ok) { throw new Error(response.statusText); } response.body.pipe(stream) }).catch(e => stream.emit('error', e)) return stream; } /** * Build a formatted url with the provided parameters. * * @param {Object} `query` URL query parameters. * @return {String} formatted url string * @name .url * @api public */ url(query = {}) { return url.format({ ...this.config, query }); } } /** * Exposes `View` */ module.exports = View;