Skip to content

Commit 78f24d7

Browse files
committed
refactor: build UA with platform info provided by adapters
1 parent 9c33ebc commit 78f24d7

File tree

14 files changed

+188
-193
lines changed

14 files changed

+188
-193
lines changed

package-lock.json

Lines changed: 41 additions & 64 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"precommit": "pretty-quick --staged",
1212
"lint": "tsc storage.d.ts --strict",
1313
"test": "npm run lint && npm run test:node",
14-
"test:node": "cross-env NODE_ENV=test nyc --reporter lcov --reporter text mocha --timeout 300000 test/index.js",
14+
"test:node": "cross-env NODE_ENV=test PLATFORM=NODE_JS nyc --reporter lcov --reporter text mocha --timeout 300000 test/index.js",
1515
"test:real": "cross-env REAL_BACKEND=1 npm run test:node",
1616
"docs": "jsdoc src README.md package.json -d docs -c .jsdocrc.json",
1717
"build:node": "cross-env PLATFORM=NODE_JS babel src --out-dir dist/node",
@@ -23,10 +23,10 @@
2323
"prepublishOnly": "./script/check-version.js"
2424
},
2525
"dependencies": {
26-
"@leancloud/adapter-types": "^1.0.2",
27-
"@leancloud/platform-adapters-browser": "^1.0.2",
28-
"@leancloud/platform-adapters-node": "^1.0.2",
29-
"@leancloud/platform-adapters-weapp": "^1.0.3",
26+
"@leancloud/adapter-types": "^3.0.0",
27+
"@leancloud/platform-adapters-browser": "^1.1.0",
28+
"@leancloud/platform-adapters-node": "^1.1.0",
29+
"@leancloud/platform-adapters-weapp": "^1.2.0",
3030
"babel-runtime": "^6.26.0",
3131
"debug": "^3.1.0",
3232
"eventemitter3": "^2.0.3",
@@ -75,7 +75,6 @@
7575
"browser": {
7676
"@leancloud/platform-adapters-node": "@leancloud/platform-adapters-browser",
7777
"./src/utils/parse-base64.js": "./src/utils/parse-base64-browser.js",
78-
"./src/ua/comments.js": "./src/ua/comments-browser.js",
7978
"./dist/node/entry/index.js": "./dist/av.js"
8079
},
8180
"react-native": {

src/adapter.js

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,29 @@
11
const _ = require('underscore');
2-
const adapters = {};
2+
const EventEmitter = require('eventemitter3');
3+
const { inherits } = require('./utils');
34

4-
const getAdapter = name => {
5-
const adapter = adapters[name];
6-
if (adapter === undefined) {
7-
throw new Error(`${name} adapter is not configured`);
8-
}
9-
return adapter;
10-
};
11-
const setAdapters = newAdapters => {
12-
_.extend(adapters, newAdapters);
13-
};
5+
const AdapterManager = inherits(EventEmitter, {
6+
constructor() {
7+
EventEmitter.apply(this);
8+
this._adapters = {};
9+
},
10+
getAdapter(name) {
11+
const adapter = this._adapters[name];
12+
if (adapter === undefined) {
13+
throw new Error(`${name} adapter is not configured`);
14+
}
15+
return adapter;
16+
},
17+
setAdapters(newAdapters) {
18+
_.extend(this._adapters, newAdapters);
19+
_.keys(newAdapters).forEach(name => this.emit(name, newAdapters[name]));
20+
},
21+
});
22+
23+
const adapterManager = new AdapterManager();
1424

1525
module.exports = {
16-
getAdapter,
17-
setAdapters,
26+
getAdapter: adapterManager.getAdapter.bind(adapterManager),
27+
setAdapters: adapterManager.setAdapters.bind(adapterManager),
28+
adapterManager,
1829
};

src/app-router.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { ajax } = require('./utils');
1+
const ajax = require('./utils/ajax');
22
const Cache = require('./cache');
33

44
function AppRouter(AV) {

src/av.js

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
const _ = require('underscore');
22
const uuid = require('uuid/v4');
33
const debug = require('debug');
4-
const getUA = require('./ua');
54
const { inherits, parseDate } = require('./utils');
6-
const { setAdapters } = require('./adapter');
5+
const version = require('./version');
6+
const { setAdapters, adapterManager } = require('./adapter');
77

88
const AV = global.AV || {};
99

@@ -16,12 +16,33 @@ AV._config = {
1616
requestTimeout: null,
1717
};
1818

19+
const initialUserAgent = `LeanCloud-JS-SDK/${version}`;
20+
1921
// configs shared by all AV instances
2022
AV._sharedConfig = {
21-
userAgent: getUA(),
23+
userAgent: initialUserAgent,
2224
liveQueryRealtime: null,
2325
};
2426

27+
adapterManager.on('platformInfo', platformInfo => {
28+
let ua = initialUserAgent;
29+
if (platformInfo) {
30+
if (platformInfo.userAgent) {
31+
ua = platformInfo.userAgent;
32+
} else {
33+
let comments = platformInfo.name;
34+
if (platformInfo.version) {
35+
comments += `/${platformInfo.version}`;
36+
}
37+
if (platformInfo.extra) {
38+
comments += `; ${platformInfo.extra}`;
39+
}
40+
ua += ` (${comments})`;
41+
}
42+
}
43+
AV._sharedConfig.userAgent = ua;
44+
});
45+
2546
/**
2647
* Contains all AV API classes and functions.
2748
* @namespace AV

src/entry/use-adapters.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
const adapters = require('@leancloud/platform-adapters-node');
2-
const getUA = require('../ua');
3-
const comments = (process.env.PLATFORM === 'NODE_JS'
4-
? [process.env.PLATFORM]
5-
: []
6-
).concat(require('../ua/comments'));
72

83
module.exports = AV => {
94
AV.setAdapters(adapters);
10-
AV._sharedConfig.userAgent = getUA(comments);
115
return AV;
126
};

src/request.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ const _ = require('underscore');
22
const md5 = require('md5');
33
const { extend } = require('underscore');
44
const AV = require('./av');
5-
const { getSessionToken, ajax } = require('./utils');
5+
const { getSessionToken } = require('./utils');
6+
const ajax = require('./utils/ajax');
67

78
// 计算 X-LC-Sign 的签名方法
89
const sign = (key, isMasterKey) => {

src/ua/comments-browser.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/ua/comments.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/ua/index.js

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)