Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/export package version constant #4065

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
245 changes: 124 additions & 121 deletions .eslintrc.js

Large diffs are not rendered by default.

25 changes: 20 additions & 5 deletions Gruntfile.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// eslint-disable-next-line strict
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt);

Expand Down Expand Up @@ -37,6 +38,10 @@ module.exports = function(grunt) {
}
},

package2env: {
all: {}
},

usebanner: {
all: {
options: {
Expand Down Expand Up @@ -70,8 +75,8 @@ module.exports = function(grunt) {
src: ['test/unit/**/*.js']
},
options: {
timeout: 30000,
},
timeout: 30000
}
},

watch: {
Expand All @@ -88,20 +93,30 @@ module.exports = function(grunt) {
webpack: require('./webpack.config.js')
});

grunt.registerMultiTask('package2bower', 'Sync package.json to bower.json', function () {
grunt.registerMultiTask('package2bower', 'Sync package.json to bower.json', function() {
var npm = grunt.file.readJSON('package.json');
var bower = grunt.file.readJSON('bower.json');
var fields = this.data.fields || [];

for (var i=0, l=fields.length; i<l; i++) {
for (var i = 0, l = fields.length; i < l; i++) {
var field = fields[i];
bower[field] = npm[field];
}

grunt.file.write('bower.json', JSON.stringify(bower, null, 2));
});

grunt.registerMultiTask('package2env', 'Sync package.json to env.json', function() {
var npm = grunt.file.readJSON('package.json');
grunt.file.write('./lib/env/data.js', [
'module.exports = ',
JSON.stringify({
version: npm.version
}, null, 2),
';'].join(''));
});

grunt.registerTask('test', 'Run the jasmine and mocha tests', ['eslint', 'mochaTest', 'karma:single', 'ts']);
grunt.registerTask('build', 'Run webpack and bundle the source', ['clean', 'webpack']);
grunt.registerTask('version', 'Sync version info for a release', ['usebanner', 'package2bower']);
grunt.registerTask('version', 'Sync version info for a release', ['usebanner', 'package2bower', 'package2env']);
};
1 change: 1 addition & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ export interface AxiosStatic extends AxiosInstance {
Cancel: CancelStatic;
CancelToken: CancelTokenStatic;
Axios: typeof Axios;
readonly VERSION: string;
isCancel(value: any): boolean;
all<T>(values: (T | Promise<T>)[]): Promise<T[]>;
spread<T, R>(callback: (...args: T[]) => R): (array: T[]) => R;
Expand Down
4 changes: 2 additions & 2 deletions lib/adapters/http.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ var httpFollow = require('follow-redirects').http;
var httpsFollow = require('follow-redirects').https;
var url = require('url');
var zlib = require('zlib');
var pkg = require('./../../package.json');
var VERSION = require('./../env/data').version;
var createError = require('../core/createError');
var enhanceError = require('../core/enhanceError');

Expand Down Expand Up @@ -68,7 +68,7 @@ module.exports = function httpAdapter(config) {
// Otherwise, use specified value
} else {
// Only set header if it hasn't been set in config
headers['User-Agent'] = 'axios/' + pkg.version;
headers['User-Agent'] = 'axios/' + VERSION;
}

if (data && !utils.isStream(data)) {
Expand Down
1 change: 1 addition & 0 deletions lib/axios.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ axios.Axios = Axios;
axios.Cancel = require('./cancel/Cancel');
axios.CancelToken = require('./cancel/CancelToken');
axios.isCancel = require('./cancel/isCancel');
axios.VERSION = require('./env/data').version;

// Expose all/spread
axios.all = function all(promises) {
Expand Down
6 changes: 3 additions & 3 deletions lib/core/Axios.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ Axios.prototype.request = function request(config) {

if (transitional !== undefined) {
validator.assertOptions(transitional, {
silentJSONParsing: validators.transitional(validators.boolean, '1.0.0'),
forcedJSONParsing: validators.transitional(validators.boolean, '1.0.0'),
clarifyTimeoutError: validators.transitional(validators.boolean, '1.0.0')
silentJSONParsing: validators.transitional(validators.boolean),
forcedJSONParsing: validators.transitional(validators.boolean),
clarifyTimeoutError: validators.transitional(validators.boolean)
}, false);
}

Expand Down
3 changes: 3 additions & 0 deletions lib/env/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# axios // env

The `data.js` file is updated automatically when the package version is upgrading. Please do not edit it manually.
3 changes: 3 additions & 0 deletions lib/env/data.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
"version": "0.21.4"
};
37 changes: 7 additions & 30 deletions lib/helpers/validator.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

var pkg = require('./../../package.json');
var VERSION = require('../env/data').version;

var validators = {};

Expand All @@ -12,48 +12,26 @@ var validators = {};
});

var deprecatedWarnings = {};
var currentVerArr = pkg.version.split('.');

/**
* Compare package versions
* @param {string} version
* @param {string?} thanVersion
* @returns {boolean}
*/
function isOlderVersion(version, thanVersion) {
var pkgVersionArr = thanVersion ? thanVersion.split('.') : currentVerArr;
var destVer = version.split('.');
for (var i = 0; i < 3; i++) {
if (pkgVersionArr[i] > destVer[i]) {
return true;
} else if (pkgVersionArr[i] < destVer[i]) {
return false;
}
}
return false;
}

/**
* Transitional option validator
* @param {function|boolean?} validator
* @param {string?} version
* @param {string} message
* @param {function|boolean?} validator - set to false if the transitional option has been removed
* @param {string?} version - deprecated version / removed since version
* @param {string?} message - some message with additional info
* @returns {function}
*/
validators.transitional = function transitional(validator, version, message) {
var isDeprecated = version && isOlderVersion(version);

function formatMessage(opt, desc) {
return '[Axios v' + pkg.version + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
}

// eslint-disable-next-line func-names
return function(value, opt, opts) {
if (validator === false) {
throw new Error(formatMessage(opt, ' has been removed in ' + version));
throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));
}

if (isDeprecated && !deprecatedWarnings[opt]) {
if (version && !deprecatedWarnings[opt]) {
deprecatedWarnings[opt] = true;
// eslint-disable-next-line no-console
console.warn(
Expand Down Expand Up @@ -99,7 +77,6 @@ function assertOptions(options, schema, allowUnknown) {
}

module.exports = {
isOlderVersion: isOlderVersion,
assertOptions: assertOptions,
validators: validators
};
21 changes: 3 additions & 18 deletions test/specs/helpers/validator.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,8 @@

var validator = require('../../../lib/helpers/validator');

describe('validator::isOlderVersion', function () {
it('should return true if dest version is older than the package version', function () {
expect(validator.isOlderVersion('0.0.1', '1.0.0')).toEqual(true);
expect(validator.isOlderVersion('0.0.1', '0.1.0')).toEqual(true);
expect(validator.isOlderVersion('0.0.1', '0.0.1')).toEqual(false);


expect(validator.isOlderVersion('100.0.0', '1.0.0')).toEqual(false);
expect(validator.isOlderVersion('100.0.0', '0.1.0')).toEqual(false);
expect(validator.isOlderVersion('100.0.0', '0.0.1')).toEqual(false);

expect(validator.isOlderVersion('0.10000.0', '1000.0.1')).toEqual(true);
});
});

describe('validator::assertOptions', function () {
it('should throw only if unknown an option was passed', function () {
describe('validator::assertOptions', function() {
it('should throw only if unknown an option was passed', function() {
expect(function() {
validator.assertOptions({
x: true
Expand All @@ -37,7 +22,7 @@ describe('validator::assertOptions', function () {
}).not.toThrow(new Error('Unknown option x'));
});

it('should throw TypeError only if option type doesn\'t match', function () {
it('should throw TypeError only if option type doesn\'t match', function() {
expect(function() {
validator.assertOptions({
x: 123
Expand Down
1 change: 1 addition & 0 deletions test/specs/instance.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ describe('instance', function () {
'all',
'spread',
'isAxiosError',
'VERSION',
'default'].indexOf(prop) > -1) {
continue;
}
Expand Down