@alicloud/alfa-core 1.4.10-alpha.1 → 1.4.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,10 +3,12 @@ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
3
3
  import _regeneratorRuntime from "@babel/runtime/regenerator";
4
4
  import { getRelease } from './getRelease';
5
5
  import cache from './cacheManager';
6
- import { getRelativePath } from './index';
6
+ import { getRelativePath, getFeatureStatus } from './index';
7
7
 
8
8
  var formatURL = function formatURL(origin, base) {
9
- return new URL(origin, base).toString();
9
+ // incorrect: new URL('../b', 'https://example.com/a/c') => https://example.com/b
10
+ // correct: new URL('../b', 'https://example.com/a/c/') => https://example.com/a/b
11
+ return new URL(origin, base.endsWith('/') ? base : "".concat(base, "/")).toString();
10
12
  };
11
13
  /**
12
14
  * format url in manifest json
@@ -46,7 +48,7 @@ export var getManifest = /*#__PURE__*/function () {
46
48
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(config) {
47
49
  var _releaseConfig$distT;
48
50
 
49
- var releaseConfig, latestVersion, manifest, logger, entry, _config$version, version, _releaseConfig$distT2, _releaseConfig$versio, _yield$cache$getRemot, _config, data;
51
+ var releaseConfig, latestVersion, manifest, logger, entry, _config$version, version, _releaseConfig$distT2, _releaseConfig$versio, _releaseConfig$nextD, nextDistTag, grayVersion, feat, _yield$cache$getRemot, requestConfig, data;
50
52
 
51
53
  return _regeneratorRuntime.wrap(function _callee$(_context) {
52
54
  while (1) {
@@ -59,69 +61,82 @@ export var getManifest = /*#__PURE__*/function () {
59
61
  releaseConfig = _context.sent;
60
62
  latestVersion = (_releaseConfig$distT = releaseConfig['dist-tags']) === null || _releaseConfig$distT === void 0 ? void 0 : _releaseConfig$distT.latest;
61
63
  manifest = config.manifest, logger = config.logger;
62
- entry = ''; // if user has custom manifest
63
64
 
64
65
  if (!manifest) {
65
- _context.next = 12;
66
+ _context.next = 11;
66
67
  break;
67
68
  }
68
69
 
69
70
  if (!(typeof manifest !== 'string')) {
70
- _context.next = 9;
71
+ _context.next = 8;
71
72
  break;
72
73
  }
73
74
 
74
75
  return _context.abrupt("return", manifest);
75
76
 
76
- case 9:
77
+ case 8:
77
78
  entry = manifest;
78
- _context.next = 14;
79
+ _context.next = 13;
79
80
  break;
80
81
 
81
- case 12:
82
+ case 11:
82
83
  _config$version = config.version, version = _config$version === void 0 ? latestVersion : _config$version;
83
84
 
84
85
  if (version) {
85
- // if version is in dist-tags, return value
86
+ // version maybe tag
86
87
  if ((_releaseConfig$distT2 = releaseConfig['dist-tags']) !== null && _releaseConfig$distT2 !== void 0 && _releaseConfig$distT2[version]) {
87
- version = releaseConfig['dist-tags'][version] || '';
88
+ version = releaseConfig['dist-tags'][version] || ''; // return gray version when
89
+
90
+ nextDistTag = (_releaseConfig$nextD = releaseConfig['next-dist-tags']) === null || _releaseConfig$nextD === void 0 ? void 0 : _releaseConfig$nextD[version];
91
+ grayVersion = nextDistTag === null || nextDistTag === void 0 ? void 0 : nextDistTag.version;
92
+
93
+ if (grayVersion) {
94
+ feat = nextDistTag === null || nextDistTag === void 0 ? void 0 : nextDistTag.featureStatus;
95
+ if (getFeatureStatus(feat)) version = grayVersion;
96
+ }
88
97
  }
89
98
 
90
- entry = ((_releaseConfig$versio = releaseConfig.versions) === null || _releaseConfig$versio === void 0 ? void 0 : _releaseConfig$versio[version].entry) || '';
99
+ entry = (_releaseConfig$versio = releaseConfig.versions) === null || _releaseConfig$versio === void 0 ? void 0 : _releaseConfig$versio[version].entry;
91
100
  }
92
101
 
93
- case 14:
94
- _context.prev = 14;
95
- _context.next = 17;
102
+ case 13:
103
+ if (entry) {
104
+ _context.next = 15;
105
+ break;
106
+ }
107
+
108
+ return _context.abrupt("return", undefined);
109
+
110
+ case 15:
111
+ _context.prev = 15;
112
+ _context.next = 18;
96
113
  return cache.getRemote(entry);
97
114
 
98
- case 17:
115
+ case 18:
99
116
  _yield$cache$getRemot = _context.sent;
100
- _config = _yield$cache$getRemot.config;
117
+ requestConfig = _yield$cache$getRemot.config;
101
118
  data = _yield$cache$getRemot.data;
102
119
  (logger === null || logger === void 0 ? void 0 : logger.setContext) && logger.setContext({
103
120
  manifest: JSON.stringify(data)
104
121
  });
105
- return _context.abrupt("return", formatManifest(data, entry, _config.url || entry));
122
+ return _context.abrupt("return", formatManifest(data, entry, requestConfig.url || entry));
106
123
 
107
- case 24:
108
- _context.prev = 24;
109
- _context.t0 = _context["catch"](14);
124
+ case 25:
125
+ _context.prev = 25;
126
+ _context.t0 = _context["catch"](15);
110
127
  (logger === null || logger === void 0 ? void 0 : logger.error) && logger.error({
111
128
  E_CODE: 'GetManifestError',
112
129
  E_MSG: _context.t0.message,
113
130
  data: JSON.stringify(releaseConfig)
114
131
  });
132
+ return _context.abrupt("return", undefined);
115
133
 
116
- case 27:
117
- return _context.abrupt("return", null);
118
-
119
- case 28:
134
+ case 29:
120
135
  case "end":
121
136
  return _context.stop();
122
137
  }
123
138
  }
124
- }, _callee, null, [[14, 24]]);
139
+ }, _callee, null, [[15, 25]]);
125
140
  }));
126
141
 
127
142
  return function getManifest(_x) {
package/es/utils/index.js CHANGED
@@ -1,5 +1,29 @@
1
+ import md5 from 'crypto-js/md5';
1
2
  export { getEnv } from './env';
2
3
  export { getLocale } from './locale';
4
+ export function getFeatureStatus(feature) {
5
+ var _ALIYUN_CONSOLE_CONFI;
6
+
7
+ if (!feature) return false;
8
+ var uid = ((_ALIYUN_CONSOLE_CONFI = window.ALIYUN_CONSOLE_CONFIG) === null || _ALIYUN_CONSOLE_CONFI === void 0 ? void 0 : _ALIYUN_CONSOLE_CONFI.MAIN_ACCOUNT_PK) || '';
9
+ var md5Uid = md5(uid).toString();
10
+ var enableBlockList = feature.enableBlockList,
11
+ enableSampling = feature.enableSampling,
12
+ enableWhiteList = feature.enableWhiteList,
13
+ sampling = feature.sampling,
14
+ blockList = feature.blockList,
15
+ whiteList = feature.whiteList;
16
+ if (enableBlockList && blockList !== null && blockList !== void 0 && blockList.includes(md5Uid)) return false;
17
+ if (enableWhiteList && whiteList !== null && whiteList !== void 0 && whiteList.includes(md5Uid)) return true;
18
+
19
+ if (enableSampling) {
20
+ var gray = uid.substring(uid.length - 2);
21
+ if (Number(gray) >= (sampling !== null && sampling !== void 0 ? sampling : 0) * 100 || sampling === 0) return false;
22
+ return true;
23
+ }
24
+
25
+ return false;
26
+ }
3
27
  export var getURL = function getURL(appConfig) {
4
28
  var entry = appConfig.entry;
5
29
  var url = '';
@@ -48,10 +72,10 @@ function trimArray(arr) {
48
72
  }
49
73
  /**
50
74
  * return relative path or full url
51
- * @param from
52
- * @param to
53
- * @param base
54
- * @returns
75
+ * @param from
76
+ * @param to
77
+ * @param base
78
+ * @returns
55
79
  */
56
80
 
57
81
 
@@ -80,7 +104,7 @@ export var getRelativePath = function getRelativePath(from, to, base) {
80
104
 
81
105
  var outputParts = [];
82
106
 
83
- for (var i = samePartsLength; i < fromParts.length; i++) {
107
+ for (var _i = samePartsLength; _i < fromParts.length; _i++) {
84
108
  outputParts.push('..');
85
109
  }
86
110
 
@@ -20,7 +20,9 @@ var _cacheManager = _interopRequireDefault(require("./cacheManager"));
20
20
  var _index = require("./index");
21
21
 
22
22
  var formatURL = function formatURL(origin, base) {
23
- return new URL(origin, base).toString();
23
+ // incorrect: new URL('../b', 'https://example.com/a/c') => https://example.com/b
24
+ // correct: new URL('../b', 'https://example.com/a/c/') => https://example.com/a/b
25
+ return new URL(origin, base.endsWith('/') ? base : "".concat(base, "/")).toString();
24
26
  };
25
27
  /**
26
28
  * format url in manifest json
@@ -60,7 +62,7 @@ var getManifest = /*#__PURE__*/function () {
60
62
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(config) {
61
63
  var _releaseConfig$distT;
62
64
 
63
- var releaseConfig, latestVersion, manifest, logger, entry, _config$version, version, _releaseConfig$distT2, _releaseConfig$versio, _yield$cache$getRemot, _config, data;
65
+ var releaseConfig, latestVersion, manifest, logger, entry, _config$version, version, _releaseConfig$distT2, _releaseConfig$versio, _releaseConfig$nextD, nextDistTag, grayVersion, feat, _yield$cache$getRemot, requestConfig, data;
64
66
 
65
67
  return _regenerator.default.wrap(function _callee$(_context) {
66
68
  while (1) {
@@ -73,69 +75,82 @@ var getManifest = /*#__PURE__*/function () {
73
75
  releaseConfig = _context.sent;
74
76
  latestVersion = (_releaseConfig$distT = releaseConfig['dist-tags']) === null || _releaseConfig$distT === void 0 ? void 0 : _releaseConfig$distT.latest;
75
77
  manifest = config.manifest, logger = config.logger;
76
- entry = ''; // if user has custom manifest
77
78
 
78
79
  if (!manifest) {
79
- _context.next = 12;
80
+ _context.next = 11;
80
81
  break;
81
82
  }
82
83
 
83
84
  if (!(typeof manifest !== 'string')) {
84
- _context.next = 9;
85
+ _context.next = 8;
85
86
  break;
86
87
  }
87
88
 
88
89
  return _context.abrupt("return", manifest);
89
90
 
90
- case 9:
91
+ case 8:
91
92
  entry = manifest;
92
- _context.next = 14;
93
+ _context.next = 13;
93
94
  break;
94
95
 
95
- case 12:
96
+ case 11:
96
97
  _config$version = config.version, version = _config$version === void 0 ? latestVersion : _config$version;
97
98
 
98
99
  if (version) {
99
- // if version is in dist-tags, return value
100
+ // version maybe tag
100
101
  if ((_releaseConfig$distT2 = releaseConfig['dist-tags']) !== null && _releaseConfig$distT2 !== void 0 && _releaseConfig$distT2[version]) {
101
- version = releaseConfig['dist-tags'][version] || '';
102
+ version = releaseConfig['dist-tags'][version] || ''; // return gray version when
103
+
104
+ nextDistTag = (_releaseConfig$nextD = releaseConfig['next-dist-tags']) === null || _releaseConfig$nextD === void 0 ? void 0 : _releaseConfig$nextD[version];
105
+ grayVersion = nextDistTag === null || nextDistTag === void 0 ? void 0 : nextDistTag.version;
106
+
107
+ if (grayVersion) {
108
+ feat = nextDistTag === null || nextDistTag === void 0 ? void 0 : nextDistTag.featureStatus;
109
+ if ((0, _index.getFeatureStatus)(feat)) version = grayVersion;
110
+ }
102
111
  }
103
112
 
104
- entry = ((_releaseConfig$versio = releaseConfig.versions) === null || _releaseConfig$versio === void 0 ? void 0 : _releaseConfig$versio[version].entry) || '';
113
+ entry = (_releaseConfig$versio = releaseConfig.versions) === null || _releaseConfig$versio === void 0 ? void 0 : _releaseConfig$versio[version].entry;
105
114
  }
106
115
 
107
- case 14:
108
- _context.prev = 14;
109
- _context.next = 17;
116
+ case 13:
117
+ if (entry) {
118
+ _context.next = 15;
119
+ break;
120
+ }
121
+
122
+ return _context.abrupt("return", undefined);
123
+
124
+ case 15:
125
+ _context.prev = 15;
126
+ _context.next = 18;
110
127
  return _cacheManager.default.getRemote(entry);
111
128
 
112
- case 17:
129
+ case 18:
113
130
  _yield$cache$getRemot = _context.sent;
114
- _config = _yield$cache$getRemot.config;
131
+ requestConfig = _yield$cache$getRemot.config;
115
132
  data = _yield$cache$getRemot.data;
116
133
  (logger === null || logger === void 0 ? void 0 : logger.setContext) && logger.setContext({
117
134
  manifest: JSON.stringify(data)
118
135
  });
119
- return _context.abrupt("return", formatManifest(data, entry, _config.url || entry));
136
+ return _context.abrupt("return", formatManifest(data, entry, requestConfig.url || entry));
120
137
 
121
- case 24:
122
- _context.prev = 24;
123
- _context.t0 = _context["catch"](14);
138
+ case 25:
139
+ _context.prev = 25;
140
+ _context.t0 = _context["catch"](15);
124
141
  (logger === null || logger === void 0 ? void 0 : logger.error) && logger.error({
125
142
  E_CODE: 'GetManifestError',
126
143
  E_MSG: _context.t0.message,
127
144
  data: JSON.stringify(releaseConfig)
128
145
  });
146
+ return _context.abrupt("return", undefined);
129
147
 
130
- case 27:
131
- return _context.abrupt("return", null);
132
-
133
- case 28:
148
+ case 29:
134
149
  case "end":
135
150
  return _context.stop();
136
151
  }
137
152
  }
138
- }, _callee, null, [[14, 24]]);
153
+ }, _callee, null, [[15, 25]]);
139
154
  }));
140
155
 
141
156
  return function getManifest(_x) {
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
@@ -9,6 +11,7 @@ Object.defineProperty(exports, "getEnv", {
9
11
  return _env.getEnv;
10
12
  }
11
13
  });
14
+ exports.getFeatureStatus = getFeatureStatus;
12
15
  Object.defineProperty(exports, "getLocale", {
13
16
  enumerable: true,
14
17
  get: function get() {
@@ -17,10 +20,36 @@ Object.defineProperty(exports, "getLocale", {
17
20
  });
18
21
  exports.getURL = exports.getRelativePath = exports.getManifestFromConfig = void 0;
19
22
 
23
+ var _md = _interopRequireDefault(require("crypto-js/md5"));
24
+
20
25
  var _env = require("./env");
21
26
 
22
27
  var _locale = require("./locale");
23
28
 
29
+ function getFeatureStatus(feature) {
30
+ var _ALIYUN_CONSOLE_CONFI;
31
+
32
+ if (!feature) return false;
33
+ var uid = ((_ALIYUN_CONSOLE_CONFI = window.ALIYUN_CONSOLE_CONFIG) === null || _ALIYUN_CONSOLE_CONFI === void 0 ? void 0 : _ALIYUN_CONSOLE_CONFI.MAIN_ACCOUNT_PK) || '';
34
+ var md5Uid = (0, _md.default)(uid).toString();
35
+ var enableBlockList = feature.enableBlockList,
36
+ enableSampling = feature.enableSampling,
37
+ enableWhiteList = feature.enableWhiteList,
38
+ sampling = feature.sampling,
39
+ blockList = feature.blockList,
40
+ whiteList = feature.whiteList;
41
+ if (enableBlockList && blockList !== null && blockList !== void 0 && blockList.includes(md5Uid)) return false;
42
+ if (enableWhiteList && whiteList !== null && whiteList !== void 0 && whiteList.includes(md5Uid)) return true;
43
+
44
+ if (enableSampling) {
45
+ var gray = uid.substring(uid.length - 2);
46
+ if (Number(gray) >= (sampling !== null && sampling !== void 0 ? sampling : 0) * 100 || sampling === 0) return false;
47
+ return true;
48
+ }
49
+
50
+ return false;
51
+ }
52
+
24
53
  var getURL = function getURL(appConfig) {
25
54
  var entry = appConfig.entry;
26
55
  var url = '';
@@ -74,10 +103,10 @@ function trimArray(arr) {
74
103
  }
75
104
  /**
76
105
  * return relative path or full url
77
- * @param from
78
- * @param to
79
- * @param base
80
- * @returns
106
+ * @param from
107
+ * @param to
108
+ * @param base
109
+ * @returns
81
110
  */
82
111
 
83
112
 
@@ -106,7 +135,7 @@ var getRelativePath = function getRelativePath(from, to, base) {
106
135
 
107
136
  var outputParts = [];
108
137
 
109
- for (var i = samePartsLength; i < fromParts.length; i++) {
138
+ for (var _i = samePartsLength; _i < fromParts.length; _i++) {
110
139
  outputParts.push('..');
111
140
  }
112
141
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alicloud/alfa-core",
3
- "version": "1.4.10-alpha.1",
3
+ "version": "1.4.11",
4
4
  "description": "MicroFront End SDK for alicloud",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -33,5 +33,5 @@
33
33
  "@alicloud/console-logger-sls": "^1.2.31",
34
34
  "@alicloud/console-os-kernal": "^1.4.7"
35
35
  },
36
- "gitHead": "3d2c643b87f1c7557f2ccf12c53d80b5a8d8d0ee"
36
+ "gitHead": "87b8e6d6811149210c81f89e3c5e46c34bd99daf"
37
37
  }
@@ -75,8 +75,21 @@ export declare type Version = string;
75
75
  export interface AlfaConfigVersion {
76
76
  [key: string]: string;
77
77
  }
78
+ export interface AlfaFeature {
79
+ enableSampling?: boolean;
80
+ enableWhiteList?: boolean;
81
+ enableBlockList?: boolean;
82
+ sampling?: number;
83
+ whiteList?: string[];
84
+ blockList?: string[];
85
+ }
86
+ interface GrayVersion {
87
+ version: string;
88
+ featureStatus: AlfaFeature;
89
+ }
78
90
  export interface AlfaReleaseConfig {
79
91
  'dist-tags'?: Partial<Record<string, string>>;
92
+ 'next-dist-tags'?: Partial<Record<string, GrayVersion>>;
80
93
  versions?: Record<Version, Partial<AlfaVersion>>;
81
94
  'locales-versions'?: Record<Version, Partial<AlfaLocaleVersion>>;
82
95
  'config-versions'?: Record<Version, Partial<AlfaConfigVersion>>;
@@ -86,14 +99,6 @@ export interface AlfaReleaseConfig {
86
99
  }
87
100
  declare type AlfaChannelLinks = Partial<Record<Channel, ChannelLinks>>;
88
101
  declare type AlfaChannelFeatures = Partial<Record<Channel, ChannelFeatures>>;
89
- interface AlfaFeature {
90
- enableSampling: boolean;
91
- enableWhiteList: boolean;
92
- enableBlockList: boolean;
93
- sampling: number;
94
- whiteList: string[];
95
- blockList: string[];
96
- }
97
102
  declare type AlfaFeatures = Partial<Record<string, AlfaFeature>>;
98
103
  export interface AlfaDynamicConfig {
99
104
  ALL_CHANNEL_LINKS?: AlfaChannelLinks;
@@ -1,2 +1,2 @@
1
1
  import { IAppConfig } from '../types';
2
- export declare const getManifest: (config: IAppConfig) => Promise<import("@alicloud/console-os-kernal/lib/type").AppManifest | null>;
2
+ export declare const getManifest: (config: IAppConfig) => Promise<import("@alicloud/console-os-kernal/lib/type").AppManifest | undefined>;
@@ -1,6 +1,7 @@
1
- import { IAppConfig } from '../types';
1
+ import { IAppConfig, AlfaFeature } from '../types';
2
2
  export { getEnv } from './env';
3
3
  export { getLocale } from './locale';
4
+ export declare function getFeatureStatus(feature?: AlfaFeature): boolean;
4
5
  export declare const getURL: (appConfig: IAppConfig) => string;
5
6
  export declare const getManifestFromConfig: (appConfig: IAppConfig) => string | import("@alicloud/console-os-kernal/lib/type").AppManifest | undefined;
6
7
  /**