summaryrefslogtreecommitdiffstats
path: root/node_modules/package-json/index.js
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
commite06ec920f7a5d784e674c4c4b4e6d1da3dc7391d (patch)
tree55713f725f77b44ebfec86e4eec3ce33e71458ca /node_modules/package-json/index.js
downloadwebsite_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.gz
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.bz2
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.zip
api, login, auth
Diffstat (limited to 'node_modules/package-json/index.js')
-rw-r--r--node_modules/package-json/index.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/node_modules/package-json/index.js b/node_modules/package-json/index.js
new file mode 100644
index 0000000..1e588b2
--- /dev/null
+++ b/node_modules/package-json/index.js
@@ -0,0 +1,67 @@
+'use strict';
+const url = require('url');
+const got = require('got');
+const registryUrl = require('registry-url');
+const registryAuthToken = require('registry-auth-token');
+const semver = require('semver');
+
+module.exports = (name, opts) => {
+ const scope = name.split('/')[0];
+ const regUrl = registryUrl(scope);
+ const pkgUrl = url.resolve(regUrl, encodeURIComponent(name).replace(/^%40/, '@'));
+ const authInfo = registryAuthToken(regUrl, {recursive: true});
+
+ opts = Object.assign({
+ version: 'latest'
+ }, opts);
+
+ const headers = {
+ accept: 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*'
+ };
+
+ if (opts.fullMetadata) {
+ delete headers.accept;
+ }
+
+ if (authInfo) {
+ headers.authorization = `${authInfo.type} ${authInfo.token}`;
+ }
+
+ return got(pkgUrl, {json: true, headers})
+ .then(res => {
+ let data = res.body;
+ let version = opts.version;
+
+ if (opts.allVersions) {
+ return data;
+ }
+
+ if (data['dist-tags'][version]) {
+ data = data.versions[data['dist-tags'][version]];
+ } else if (version) {
+ if (!data.versions[version]) {
+ const versions = Object.keys(data.versions);
+ version = semver.maxSatisfying(versions, version);
+
+ if (!version) {
+ throw new Error('Version doesn\'t exist');
+ }
+ }
+
+ data = data.versions[version];
+
+ if (!data) {
+ throw new Error('Version doesn\'t exist');
+ }
+ }
+
+ return data;
+ })
+ .catch(err => {
+ if (err.statusCode === 404) {
+ throw new Error(`Package \`${name}\` doesn't exist`);
+ }
+
+ throw err;
+ });
+};