55 lines
1.3 KiB
JavaScript
55 lines
1.3 KiB
JavaScript
'use strict';
|
|
|
|
const { BaseJsonService } = require('../base');
|
|
const {
|
|
makePackageDataUrl,
|
|
typeDefinitions,
|
|
} = require('../../lib/npm-badge-helpers');
|
|
|
|
module.exports = class NPMTypeDefinitions extends BaseJsonService {
|
|
static get category() {
|
|
return 'version';
|
|
}
|
|
|
|
static get defaultBadgeData() {
|
|
return { label: 'type definitions' };
|
|
}
|
|
|
|
static get url() {
|
|
return {
|
|
base: 'npm/types',
|
|
format: '(?:@([^/]+)/)?([^/]+)',
|
|
capture: ['scope', 'packageName'],
|
|
queryParams: ['registry_uri'],
|
|
};
|
|
}
|
|
|
|
static get examples() {
|
|
return [{
|
|
title: 'npm type definitions',
|
|
previewUrl: 'chalk',
|
|
keywords: ['node', 'typescript', 'flow'],
|
|
}];
|
|
}
|
|
|
|
async handle({ scope, packageName }, { registry_uri: registryUrl }) {
|
|
const apiUrl = makePackageDataUrl({ registryUrl, scope, packageName });
|
|
|
|
const json = await this._requestJson(apiUrl, {}, 'package not found');
|
|
|
|
let packageData;
|
|
if (scope === undefined) {
|
|
packageData = json;
|
|
} else {
|
|
const latestVersion = json['dist-tags'].latest;
|
|
packageData = json.versions[latestVersion];
|
|
}
|
|
|
|
const message = typeDefinitions(packageData);
|
|
return {
|
|
message,
|
|
color: message === 'none' ? 'lightgray' : 'blue',
|
|
};
|
|
}
|
|
};
|