@galacean/effects-plugin-alipay-downgrade 2.0.0-alpha.3 → 2.0.0-alpha.31

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.
package/dist/index.mjs CHANGED
@@ -2,305 +2,243 @@
2
2
  * Name: @galacean/effects-plugin-alipay-downgrade
3
3
  * Description: Galacean Effects player downgrade plugin for Alipay
4
4
  * Author: Ant Group CO., Ltd.
5
- * Contributors: 燃然,意绮
6
- * Version: v2.0.0-alpha.3
5
+ * Contributors: 燃然,意绮,飂兮
6
+ * Version: v2.0.0-alpha.31
7
7
  */
8
8
 
9
- import { VFXItem, isString, spec, getActivePlayers, isCanvasUsedByPlayer, disableAllPlayer, logger, AbstractPlugin, isAndroid, isIOS, registerPlugin } from '@galacean/effects';
9
+ import * as EFFECTS from '@galacean/effects';
10
+ import { isString, logger, isAlipayMiniApp, spec, isIOS, getActivePlayers, AbstractPlugin, isAndroid, registerPlugin, VFXItem } from '@galacean/effects';
10
11
 
11
- /******************************************************************************
12
- Copyright (c) Microsoft Corporation.
13
-
14
- Permission to use, copy, modify, and/or distribute this software for any
15
- purpose with or without fee is hereby granted.
16
-
17
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
18
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
19
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
20
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
21
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
22
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
23
- PERFORMANCE OF THIS SOFTWARE.
24
- ***************************************************************************** */
25
- /* global Reflect, Promise, SuppressedError, Symbol */
26
-
27
- var extendStatics = function(d, b) {
28
- extendStatics = Object.setPrototypeOf ||
29
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
30
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
31
- return extendStatics(d, b);
32
- };
33
-
34
- function __extends(d, b) {
35
- if (typeof b !== "function" && b !== null)
36
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
37
- extendStatics(d, b);
38
- function __() { this.constructor = d; }
39
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
40
- }
41
-
42
- function __awaiter(thisArg, _arguments, P, generator) {
43
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
44
- return new (P || (P = Promise))(function (resolve, reject) {
45
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
46
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
47
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
48
- step((generator = generator.apply(thisArg, _arguments || [])).next());
49
- });
50
- }
51
-
52
- function __generator(thisArg, body) {
53
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
54
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
55
- function verb(n) { return function (v) { return step([n, v]); }; }
56
- function step(op) {
57
- if (f) throw new TypeError("Generator is already executing.");
58
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
59
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
60
- if (y = 0, t) op = [op[0] & 2, t.value];
61
- switch (op[0]) {
62
- case 0: case 1: t = op; break;
63
- case 4: _.label++; return { value: op[1], done: false };
64
- case 5: _.label++; y = op[1]; op = [0]; continue;
65
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
66
- default:
67
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
68
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
69
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
70
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
71
- if (t[2]) _.ops.pop();
72
- _.trys.pop(); continue;
73
- }
74
- op = body.call(thisArg, _);
75
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
76
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
77
- }
78
- }
79
-
80
- function __read(o, n) {
81
- var m = typeof Symbol === "function" && o[Symbol.iterator];
82
- if (!m) return o;
83
- var i = m.call(o), r, ar = [], e;
84
- try {
85
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
86
- }
87
- catch (error) { e = { error: error }; }
88
- finally {
89
- try {
90
- if (r && !r.done && (m = i["return"])) m.call(i);
91
- }
92
- finally { if (e) throw e.error; }
93
- }
94
- return ar;
95
- }
96
-
97
- function __spreadArray(to, from, pack) {
98
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
99
- if (ar || !(i in from)) {
100
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
101
- ar[i] = from[i];
102
- }
103
- }
104
- return to.concat(ar || Array.prototype.slice.call(from));
105
- }
106
-
107
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
108
- var e = new Error(message);
109
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
110
- };
111
-
112
- var DowngradeVFXItem = /** @class */ (function (_super) {
113
- __extends(DowngradeVFXItem, _super);
114
- function DowngradeVFXItem() {
115
- return _super !== null && _super.apply(this, arguments) || this;
12
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
13
+ try {
14
+ var info = gen[key](arg);
15
+ var value = info.value;
16
+ } catch (error) {
17
+ reject(error);
18
+ return;
116
19
  }
117
- return DowngradeVFXItem;
118
- }(VFXItem));
119
-
120
- var mockIdPass = 'mock-pass';
121
- var mockIdFail = 'mock-fail';
122
- var DEVICE_LEVEL_HIGH = 'high';
123
- var DEVICE_LEVEL_MEDIUM = 'medium';
124
- var DEVICE_LEVEL_LOW = 'low';
125
- var DEVICE_LEVEL_NONE = 'none';
126
- var hasRegisterEvent = false;
127
- function getDowngradeResult(bizId, options) {
128
- if (options === void 0) { options = {}; }
129
- return __awaiter(this, void 0, void 0, function () {
130
- var ap, now_1;
131
- return __generator(this, function (_a) {
132
- if (!hasRegisterEvent) {
133
- registerEvent(options);
134
- hasRegisterEvent = true;
135
- }
136
- if (bizId === mockIdFail || bizId === mockIdPass) {
137
- return [2 /*return*/, Promise.resolve({ mock: { downgrade: bizId === mockIdFail } })];
138
- }
139
- ap = window.AlipayJSBridge;
140
- if (ap) {
141
- now_1 = performance.now();
142
- return [2 /*return*/, getSystemInfo().then(function (systemInfo) {
143
- return new Promise(function (resolve) {
144
- var _a;
145
- var techPoint = ['mars'];
146
- var tc = options.techPoint;
147
- if (tc) {
148
- techPoint.push.apply(techPoint, __spreadArray([], __read(tc), false));
149
- }
150
- var downgradeOptions = {
151
- bizId: bizId,
152
- scene: 0,
153
- ext: {
154
- techPoint: techPoint,
155
- },
156
- };
157
- var downgradeCallback = function (result) {
158
- var totalTime = performance.now() - now_1;
159
- console.info("downgrade time: ".concat(totalTime, "ms"));
160
- resolve({ bizId: bizId, systemInfo: systemInfo, downgradeResult: result, totalTime: totalTime });
161
- };
162
- var callBridge = (_a = options.callBridge) !== null && _a !== void 0 ? _a : ap.call;
163
- callBridge('getDowngradeResult', downgradeOptions, downgradeCallback);
164
- });
165
- })];
20
+ if (info.done) resolve(value);
21
+ else Promise.resolve(value).then(_next, _throw);
22
+ }
23
+ function _async_to_generator(fn) {
24
+ return function() {
25
+ var self = this, args = arguments;
26
+ return new Promise(function(resolve, reject) {
27
+ var gen = fn.apply(self, args);
28
+ function _next(value) {
29
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
166
30
  }
167
- else {
168
- return [2 /*return*/, Promise.resolve({ noAlipayEnv: true })];
31
+ function _throw(err) {
32
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
169
33
  }
34
+ _next(undefined);
170
35
  });
171
- });
36
+ };
172
37
  }
173
- function registerEvent(options) {
174
- var ignoreGLLost = options.ignoreGLLost, autoPause = options.autoPause;
175
- var downgradeWhenGLLost = ignoreGLLost !== true;
176
- window.addEventListener('unload', function () {
177
- getActivePlayers().forEach(function (player) { return player.dispose(); });
38
+
39
+ function _set_prototype_of(o, p) {
40
+ _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
41
+ o.__proto__ = p;
42
+ return o;
43
+ };
44
+ return _set_prototype_of(o, p);
45
+ }
46
+
47
+ function _inherits(subClass, superClass) {
48
+ if (typeof superClass !== "function" && superClass !== null) {
49
+ throw new TypeError("Super expression must either be null or a function");
50
+ }
51
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
52
+ constructor: {
53
+ value: subClass,
54
+ writable: true,
55
+ configurable: true
56
+ }
178
57
  });
179
- window.addEventListener('webglcontextlost', function (e) {
180
- if (isCanvasUsedByPlayer(e.target)) {
181
- AlipayDowngradePlugin.glLostOccurred = true;
182
- console.error('webgl lost occur');
183
- if (downgradeWhenGLLost) {
184
- console.warn('webgl lost occur, all players will be downgraded from now on');
185
- disableAllPlayer(true);
186
- getActivePlayers().forEach(function (player) { return player.dispose(); });
58
+ if (superClass) _set_prototype_of(subClass, superClass);
59
+ }
60
+
61
+ function __generator(thisArg, body) {
62
+ var _ = {
63
+ label: 0,
64
+ sent: function sent() {
65
+ if (t[0] & 1) throw t[1];
66
+ return t[1];
67
+ },
68
+ trys: [],
69
+ ops: []
70
+ }, f, y, t, g;
71
+ return g = {
72
+ next: verb(0),
73
+ "throw": verb(1),
74
+ "return": verb(2)
75
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
76
+ return this;
77
+ }), g;
78
+ function verb(n) {
79
+ return function(v) {
80
+ return step([
81
+ n,
82
+ v
83
+ ]);
84
+ };
85
+ }
86
+ function step(op) {
87
+ if (f) throw new TypeError("Generator is already executing.");
88
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
89
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
90
+ if (y = 0, t) op = [
91
+ op[0] & 2,
92
+ t.value
93
+ ];
94
+ switch(op[0]){
95
+ case 0:
96
+ case 1:
97
+ t = op;
98
+ break;
99
+ case 4:
100
+ _.label++;
101
+ return {
102
+ value: op[1],
103
+ done: false
104
+ };
105
+ case 5:
106
+ _.label++;
107
+ y = op[1];
108
+ op = [
109
+ 0
110
+ ];
111
+ continue;
112
+ case 7:
113
+ op = _.ops.pop();
114
+ _.trys.pop();
115
+ continue;
116
+ default:
117
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
118
+ _ = 0;
119
+ continue;
120
+ }
121
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
122
+ _.label = op[1];
123
+ break;
124
+ }
125
+ if (op[0] === 6 && _.label < t[1]) {
126
+ _.label = t[1];
127
+ t = op;
128
+ break;
129
+ }
130
+ if (t && _.label < t[2]) {
131
+ _.label = t[2];
132
+ _.ops.push(op);
133
+ break;
134
+ }
135
+ if (t[2]) _.ops.pop();
136
+ _.trys.pop();
137
+ continue;
187
138
  }
139
+ op = body.call(thisArg, _);
140
+ } catch (e) {
141
+ op = [
142
+ 6,
143
+ e
144
+ ];
145
+ y = 0;
146
+ } finally{
147
+ f = t = 0;
188
148
  }
189
- }, true);
190
- if (autoPause) {
191
- document.addEventListener('pause', pauseAllActivePlayers);
192
- document.addEventListener('resume', resumePausedPlayers);
149
+ if (op[0] & 5) throw op[1];
150
+ return {
151
+ value: op[0] ? op[1] : void 0,
152
+ done: true
153
+ };
193
154
  }
194
155
  }
195
- function getSystemInfo() {
196
- return __awaiter(this, void 0, void 0, function () {
197
- return __generator(this, function (_a) {
198
- return [2 /*return*/, new Promise(function (resolve, reject) {
199
- var ap = window.AlipayJSBridge;
200
- if (ap) {
201
- ap.call('getSystemInfo', function (e) {
202
- if (e.error) {
203
- reject(e);
204
- }
205
- else {
206
- resolve(e);
207
- }
208
- });
209
- }
210
- else {
211
- reject('no ap');
212
- }
213
- })];
214
- });
215
- });
156
+ typeof SuppressedError === "function" ? SuppressedError : function _SuppressedError(error, suppressed, message) {
157
+ var e = new Error(message);
158
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
159
+ };
160
+
161
+ function _extends() {
162
+ _extends = Object.assign || function assign(target) {
163
+ for(var i = 1; i < arguments.length; i++){
164
+ var source = arguments[i];
165
+ for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
166
+ }
167
+ return target;
168
+ };
169
+ return _extends.apply(this, arguments);
216
170
  }
217
- var DeviceProxy = /** @class */ (function () {
171
+
172
+ var DeviceLevel;
173
+ (function(DeviceLevel) {
174
+ DeviceLevel["High"] = "high";
175
+ DeviceLevel["Medium"] = "medium";
176
+ DeviceLevel["Low"] = "low";
177
+ DeviceLevel["Unknown"] = "unknown";
178
+ })(DeviceLevel || (DeviceLevel = {}));
179
+
180
+ var deviceModelList = [
181
+ "12,8",
182
+ "13,1",
183
+ "13,2",
184
+ "13,3",
185
+ "13,4"
186
+ ];
187
+ /**
188
+ * 设备代理类
189
+ *
190
+ * 负责将 JSAPI 返回的 SystemInfo 和 DowngradeResult 数据
191
+ * 转成设备相关的数据,在后面的降级判断中使用
192
+ */ var DeviceProxy = /*#__PURE__*/ function() {
218
193
  function DeviceProxy() {
219
- this.isIOS = false;
220
- this.model = 'DESKTOP_DEBUG';
221
- this.deviceLevel = DEVICE_LEVEL_NONE;
222
- this.isDowngrade = false;
194
+ /**
195
+ * 是否 iOS 系统
196
+ */ this.isIOS = false;
197
+ /**
198
+ * 硬件机型
199
+ */ this.model = "DESKTOP_DEBUG";
200
+ /**
201
+ * 系统版本
202
+ */ this.system = "Unknown";
203
+ /**
204
+ * 设备等级
205
+ */ this.level = DeviceLevel.Unknown;
206
+ /**
207
+ * 是否降级
208
+ */ this.isDowngrade = false;
223
209
  }
224
- DeviceProxy.prototype.getRenderLevel = function () {
225
- if (this.deviceLevel === DEVICE_LEVEL_HIGH) {
226
- return spec.RenderLevel.S;
227
- }
228
- else if (this.deviceLevel === DEVICE_LEVEL_MEDIUM) {
229
- return spec.RenderLevel.A;
230
- }
231
- else if (this.deviceLevel === DEVICE_LEVEL_LOW) {
232
- return spec.RenderLevel.B;
233
- }
234
- else {
235
- return this.isIOS ? spec.RenderLevel.S : spec.RenderLevel.B;
236
- }
237
- };
238
- DeviceProxy.prototype.hasDeviceLevel = function () {
239
- return isDeviceLevel(this.deviceLevel);
240
- };
241
- DeviceProxy.prototype.setBySystemInfo = function (systemInfo) {
242
- var performance = systemInfo.performance, platform = systemInfo.platform, _a = systemInfo.model, model = _a === void 0 ? 'UNKNOWN_DEVICE' : _a;
243
- this.isIOS = platform === 'iOS';
210
+ var _proto = DeviceProxy.prototype;
211
+ /**
212
+ * 设置 JSAPI 返回的系统信息
213
+ * @param systemInfo - JSAPI 返回的系统信息
214
+ */ _proto.setSystemInfo = function setSystemInfo(systemInfo) {
215
+ var performance = systemInfo.performance, platform = systemInfo.platform, _systemInfo_model = systemInfo.model, model = _systemInfo_model === void 0 ? "UNKNOWN_DEVICE" : _systemInfo_model, _systemInfo_system = systemInfo.system, system = _systemInfo_system === void 0 ? "Unknown" : _systemInfo_system;
216
+ this.isIOS = platform === "iOS";
244
217
  this.model = model;
245
- if (performance && !this.hasDeviceLevel()) {
246
- this.deviceLevel = performance;
247
- }
218
+ this.system = system;
219
+ this.setLevel(performance);
248
220
  };
249
- DeviceProxy.prototype.updateDeviceLevel = function () {
250
- if (this.hasDeviceLevel()) {
251
- return;
221
+ /**
222
+ * 根据传入的 JSAPI 降级结果,返回设备的降级决定
223
+ *
224
+ * @param result - JSAPI 返回的降级结果
225
+ * @returns 设备降级决定
226
+ */ _proto.getDowngradeDecision = function getDowngradeDecision(result) {
227
+ var resultType = undefined;
228
+ var resultReason = undefined;
229
+ if (result.error) {
230
+ // 无权调用的情况下不降级
231
+ return {
232
+ downgrade: result.error !== 4,
233
+ level: this.getRenderLevel(),
234
+ reason: "api error: " + result.error
235
+ };
252
236
  }
253
- if (/iPhone(\d+),/.test(this.model)) {
254
- var gen = +RegExp.$1;
255
- if (gen <= 9) {
256
- this.deviceLevel = DEVICE_LEVEL_LOW;
257
- }
258
- else if (gen < 10) {
259
- this.deviceLevel = DEVICE_LEVEL_MEDIUM;
260
- }
261
- else {
262
- this.deviceLevel = DEVICE_LEVEL_HIGH;
263
- }
264
- }
265
- };
266
- DeviceProxy.prototype.getDeviceInfo = function () {
267
- return {
268
- isIOS: this.isIOS,
269
- model: this.model,
270
- deviceLevel: this.deviceLevel,
271
- };
272
- };
273
- return DeviceProxy;
274
- }());
275
- var device = new DeviceProxy();
276
- function checkDowngradeResult(result) {
277
- if (result.mock) {
278
- var _a = result.mock, downgrade = _a.downgrade, _b = _a.deviceLevel, deviceLevel = _b === void 0 ? DEVICE_LEVEL_HIGH : _b;
279
- device.deviceLevel = deviceLevel;
280
- return { downgrade: downgrade, reason: 'mock' };
281
- }
282
- if (result.noAlipayEnv) {
283
- return { downgrade: false, reason: 'no AP env' };
284
- }
285
- if (!result.systemInfo) {
286
- return { downgrade: false, reason: 'systemInfo is required' };
287
- }
288
- if (!result.downgradeResult) {
289
- return { downgrade: false, reason: 'downgradeResult is required' };
290
- }
291
- device.setBySystemInfo(result.systemInfo);
292
- return parseDowngradeResult(result.downgradeResult);
293
- }
294
- function parseDowngradeResult(result) {
295
- var resultType = undefined;
296
- var resultReason = undefined;
297
- if (!result.error) {
298
237
  try {
299
238
  var ret = isString(result) ? JSON.parse(result) : result;
300
- if ('downgradeResultType' in ret) {
239
+ if ("downgradeResultType" in ret) {
301
240
  resultType = ret.downgradeResultType;
302
- }
303
- else if ('resultType' in ret) {
241
+ } else if ("resultType" in ret) {
304
242
  resultType = ret.resultType;
305
243
  resultReason = ret.resultReason;
306
244
  }
@@ -308,77 +246,296 @@ function parseDowngradeResult(result) {
308
246
  var deviceInfo = result.context.deviceInfo;
309
247
  if (deviceInfo) {
310
248
  var deviceLevel = deviceInfo.deviceLevel;
311
- if (isDeviceLevel(deviceLevel)) {
312
- device.deviceLevel = deviceLevel;
249
+ var newLevel = getDeviceLevel(deviceLevel);
250
+ if (newLevel !== DeviceLevel.Unknown) {
251
+ this.level = newLevel;
313
252
  }
314
253
  }
315
254
  }
316
- device.updateDeviceLevel();
317
- }
318
- catch (ex) {
319
- console.error(ex);
255
+ } catch (ex) {
256
+ logger.error(ex);
320
257
  }
321
258
  if (resultType === undefined) {
322
- return { downgrade: true, reason: 'call downgrade fail' };
259
+ return {
260
+ downgrade: true,
261
+ level: this.getRenderLevel(),
262
+ reason: "call downgrade fail"
263
+ };
264
+ }
265
+ if (resultType === 1) {
266
+ return {
267
+ downgrade: true,
268
+ level: this.getRenderLevel(),
269
+ reason: getDowngradeReason(resultReason)
270
+ };
271
+ }
272
+ if (isAlipayMiniApp() && this.downgradeForMiniprogram()) {
273
+ return {
274
+ downgrade: true,
275
+ level: this.getRenderLevel(),
276
+ reason: "Force downgrade by downgrade plugin"
277
+ };
278
+ }
279
+ return {
280
+ downgrade: false,
281
+ level: this.getRenderLevel(),
282
+ reason: "" + resultType
283
+ };
284
+ };
285
+ /**
286
+ * 获取设备渲染等级
287
+ * @returns 设备渲染等级
288
+ */ _proto.getRenderLevel = function getRenderLevel() {
289
+ if (this.level === DeviceLevel.High) {
290
+ return spec.RenderLevel.S;
291
+ } else if (this.level === DeviceLevel.Medium) {
292
+ return spec.RenderLevel.A;
293
+ } else if (this.level === DeviceLevel.Low) {
294
+ return spec.RenderLevel.B;
295
+ } else {
296
+ return this.isIOS ? spec.RenderLevel.S : spec.RenderLevel.B;
323
297
  }
324
- else {
325
- if (resultType === 1) {
326
- return { downgrade: true, reason: getDowngradeReason(resultReason) };
298
+ };
299
+ _proto.setLevel = function setLevel(level) {
300
+ this.level = getDeviceLevel(level);
301
+ if (this.level === DeviceLevel.Unknown) {
302
+ if (/iPhone(\d+),/.test(this.model)) {
303
+ var gen = +RegExp.$1;
304
+ if (gen <= 9) {
305
+ this.level = DeviceLevel.Low;
306
+ } else if (gen < 10) {
307
+ this.level = DeviceLevel.Medium;
308
+ } else {
309
+ this.level = DeviceLevel.High;
310
+ }
327
311
  }
328
- else {
329
- return { downgrade: false, reason: resultType };
312
+ }
313
+ };
314
+ _proto.downgradeForMiniprogram = function downgradeForMiniprogram() {
315
+ var _this = this;
316
+ if (this.isIOS) {
317
+ if (deviceModelList.find(function(v) {
318
+ return v === _this.model;
319
+ })) {
320
+ var versionList = this.system.split(".");
321
+ if (versionList.length > 0 && versionList[0] === "16") {
322
+ return true;
323
+ }
330
324
  }
331
325
  }
332
- }
333
- else {
334
- // 无权调用的情况下不降级
335
- return { downgrade: result.error !== 4, reason: 'api error: ' + result.error };
336
- }
337
- }
326
+ return false;
327
+ };
328
+ return DeviceProxy;
329
+ }();
338
330
  function getDowngradeReason(reason) {
339
331
  if (reason === -1) {
340
- return "".concat(reason, "-no config");
341
- }
342
- else if (reason === 0) {
343
- return "".concat(reason, "-none");
344
- }
345
- else if (reason === 1) {
346
- return "".concat(reason, "-downgrade by memory");
347
- }
348
- else if (reason === 2) {
349
- return "".concat(reason, "-downgrade by crash");
350
- }
351
- else if (reason === 3) {
352
- return "".concat(reason, "-downgrade by device");
353
- }
354
- else if (reason === 4) {
355
- return "".concat(reason, "-downgrade by force");
356
- }
357
- else {
358
- return "".concat(reason);
332
+ return "" + reason + ", unable to pull configuration";
333
+ } else if (reason === 0) {
334
+ return "" + reason + ", no downgrade";
335
+ } else if (reason === 1) {
336
+ return "" + reason + ", memory downgrade";
337
+ } else if (reason === 2) {
338
+ return "" + reason + ", crash downgrade";
339
+ } else if (reason === 3) {
340
+ return "" + reason + ", basic dimension downgrade";
341
+ } else if (reason === 4) {
342
+ return "" + reason + ", technical point downgrade";
343
+ } else if (reason === 5) {
344
+ return "" + reason + ", GPU downgrade";
345
+ } else if (reason === 6) {
346
+ return "" + reason + ", self-healing downgrade";
347
+ } else if (reason === 7) {
348
+ return "" + reason + ", 32-bit CPU downgrade";
349
+ } else {
350
+ return "" + reason;
359
351
  }
360
352
  }
361
- function getRenderLevelByDevice(renderLevel) {
362
- if (!renderLevel) {
363
- return device.getRenderLevel();
353
+ function getDeviceLevel(level) {
354
+ if (level === "high") {
355
+ return DeviceLevel.High;
356
+ } else if (level === "medium" || level === "middle") {
357
+ return DeviceLevel.Medium;
358
+ } else if (level === "low") {
359
+ return DeviceLevel.Low;
360
+ } else {
361
+ return DeviceLevel.Unknown;
364
362
  }
365
- else {
366
- return /[ABS]/.test(renderLevel) ? renderLevel : spec.RenderLevel.S;
363
+ }
364
+
365
+ var internalPaused = Symbol("@@_inter_pause");
366
+ var mockIdPass = "mock-pass";
367
+ var mockIdFail = "mock-fail";
368
+ var hasRegisterEvent = false;
369
+ /**
370
+ * 获取 GE 降级结果,在有 JSAPI 环境下调用,不需要创建 Canvas 和 WebGL 环境。
371
+ *
372
+ * @param bizId - 业务 bizId
373
+ * @param options - 降级选项
374
+ * @returns 降级结果
375
+ */ function getDowngradeResult(bizId) {
376
+ return _getDowngradeResult.apply(this, arguments);
377
+ }
378
+ function _getDowngradeResult() {
379
+ _getDowngradeResult = _async_to_generator(function(bizId, options) {
380
+ var _options_level, ap, _options_level1, systemStartTime;
381
+ return __generator(this, function(_state) {
382
+ if (options === void 0) options = {};
383
+ if (!hasRegisterEvent) {
384
+ hasRegisterEvent = true;
385
+ registerEvent(options);
386
+ }
387
+ if (bizId === mockIdFail || bizId === mockIdPass) {
388
+ return [
389
+ 2,
390
+ Promise.resolve({
391
+ bizId: bizId,
392
+ downgrade: bizId === mockIdFail,
393
+ level: (_options_level = options.level) != null ? _options_level : spec.RenderLevel.S,
394
+ reason: "mock"
395
+ })
396
+ ];
397
+ }
398
+ ap = isAlipayMiniApp() ? my : window.AlipayJSBridge;
399
+ // 当需要通过 ap 获取降级信息时,才进行降级环境的检查
400
+ if (!ap && (!options.systemInfo || !options.downgradeResult)) {
401
+ return [
402
+ 2,
403
+ {
404
+ bizId: bizId,
405
+ downgrade: false,
406
+ level: (_options_level1 = options.level) != null ? _options_level1 : spec.RenderLevel.S,
407
+ reason: "Non-Alipay environment"
408
+ }
409
+ ];
410
+ }
411
+ systemStartTime = performance.now();
412
+ return [
413
+ 2,
414
+ getSystemInfoJSAPI(options, ap).then(function(systemInfo) {
415
+ var systemEndTime = performance.now();
416
+ return getDowngradeResultJSAPI(bizId, options, ap).then(function(downgradeResult) {
417
+ var downgradeEndTime = performance.now();
418
+ logger.info("Downgrade time: " + (downgradeEndTime - systemStartTime) + "ms.");
419
+ var device = new DeviceProxy();
420
+ device.setSystemInfo(systemInfo);
421
+ var decision = device.getDowngradeDecision(downgradeResult);
422
+ if (options.level) {
423
+ decision.level = options.level;
424
+ }
425
+ var result = _extends({}, decision, {
426
+ bizId: bizId,
427
+ systemInfo: systemInfo,
428
+ systemTime: systemEndTime - systemStartTime,
429
+ downgradeResult: downgradeResult,
430
+ downgradeTime: downgradeEndTime - systemEndTime
431
+ });
432
+ return result;
433
+ });
434
+ })
435
+ ];
436
+ });
437
+ });
438
+ return _getDowngradeResult.apply(this, arguments);
439
+ }
440
+ function registerEvent(options) {
441
+ var autoPause = options.autoPause;
442
+ window.addEventListener("unload", function() {
443
+ getActivePlayers().forEach(function(player) {
444
+ return player.dispose();
445
+ });
446
+ });
447
+ if (autoPause) {
448
+ document.addEventListener("pause", pauseAllActivePlayers);
449
+ document.addEventListener("resume", resumePausedPlayers);
367
450
  }
368
451
  }
369
- function isDeviceLevel(deviceLevel) {
370
- return deviceLevel === DEVICE_LEVEL_HIGH
371
- || deviceLevel === DEVICE_LEVEL_MEDIUM
372
- || deviceLevel === DEVICE_LEVEL_LOW;
452
+ function getSystemInfoJSAPI(options, ap) {
453
+ return _getSystemInfoJSAPI.apply(this, arguments);
454
+ }
455
+ function _getSystemInfoJSAPI() {
456
+ _getSystemInfoJSAPI = _async_to_generator(function(options, ap) {
457
+ return __generator(this, function(_state) {
458
+ if (options.systemInfo) {
459
+ return [
460
+ 2,
461
+ Promise.resolve(options.systemInfo)
462
+ ];
463
+ } else {
464
+ return [
465
+ 2,
466
+ new Promise(function(resolve, reject) {
467
+ ap.call("getSystemInfo", function(e) {
468
+ if (e.error) {
469
+ reject(e);
470
+ } else {
471
+ resolve(e);
472
+ }
473
+ });
474
+ })
475
+ ];
476
+ }
477
+ });
478
+ });
479
+ return _getSystemInfoJSAPI.apply(this, arguments);
480
+ }
481
+ function getDowngradeResultJSAPI(bizId, options, ap) {
482
+ return _getDowngradeResultJSAPI.apply(this, arguments);
483
+ }
484
+ function _getDowngradeResultJSAPI() {
485
+ _getDowngradeResultJSAPI = _async_to_generator(function(bizId, options, ap) {
486
+ return __generator(this, function(_state) {
487
+ if (options.downgradeResult) {
488
+ return [
489
+ 2,
490
+ Promise.resolve(options.downgradeResult)
491
+ ];
492
+ } else {
493
+ return [
494
+ 2,
495
+ new Promise(function(resolve, reject) {
496
+ var techPoint = [
497
+ "mars"
498
+ ];
499
+ var tc = options.techPoint;
500
+ if (tc) {
501
+ var _techPoint;
502
+ (_techPoint = techPoint).push.apply(_techPoint, [].concat(tc));
503
+ }
504
+ var downgradeOptions = {
505
+ bizId: bizId,
506
+ scene: 0,
507
+ ext: {
508
+ techPoint: techPoint
509
+ }
510
+ };
511
+ var _options_callBridge;
512
+ var callBridge = (_options_callBridge = options.callBridge) != null ? _options_callBridge : ap.call;
513
+ callBridge("getDowngradeResult", downgradeOptions, function(result) {
514
+ resolve(result);
515
+ });
516
+ })
517
+ ];
518
+ }
519
+ });
520
+ });
521
+ return _getDowngradeResultJSAPI.apply(this, arguments);
522
+ }
523
+ /**
524
+ * 获取默认渲染等级
525
+ *
526
+ * @returns 渲染等级
527
+ */ function getDefaultRenderLevel() {
528
+ return isIOS() ? spec.RenderLevel.S : spec.RenderLevel.B;
373
529
  }
374
- var internalPaused = Symbol('@@_inter_pause');
375
530
  function pauseAllActivePlayers(e) {
376
531
  if (e.target === document) {
377
- logger.info('Auto pause all players with data offloaded');
532
+ logger.info("Auto pause all players with data offloaded.");
378
533
  var players = getActivePlayers();
379
- players.forEach(function (player) {
534
+ players.forEach(function(player) {
380
535
  if (!player.paused) {
381
- player.pause({ offloadTexture: true });
536
+ player.pause({
537
+ offloadTexture: true
538
+ });
382
539
  // @ts-expect-error
383
540
  player[internalPaused] = true;
384
541
  }
@@ -387,9 +544,9 @@ function pauseAllActivePlayers(e) {
387
544
  }
388
545
  function resumePausedPlayers(e) {
389
546
  if (e.target === document) {
390
- logger.info('auto resume all players');
547
+ logger.info("Auto resume all players.");
391
548
  var players = getActivePlayers();
392
- players.forEach(function (player) {
549
+ players.forEach(function(player) {
393
550
  // @ts-expect-error
394
551
  if (player[internalPaused]) {
395
552
  void player.resume();
@@ -400,119 +557,71 @@ function resumePausedPlayers(e) {
400
557
  }
401
558
  }
402
559
 
403
- var AlipayDowngradePlugin = /** @class */ (function (_super) {
404
- __extends(AlipayDowngradePlugin, _super);
560
+ /**
561
+ * Alipay 降级插件类
562
+ *
563
+ * 根据 SceneLoadOptions 中传入的 downgrade 数据,判断是否降级。
564
+ * 如果设备被降级,会在 processRawJSON 时抛出降级相关的异常和原因。
565
+ *
566
+ * 如果 SceneLoadOptions 中 renderLevel 没有设置,那么会根据 downgrade 数据
567
+ * 和默认的渲染等级规则设置其中的 renderLevel。
568
+ */ var AlipayDowngradePlugin = /*#__PURE__*/ function(AbstractPlugin) {
569
+ _inherits(AlipayDowngradePlugin, AbstractPlugin);
405
570
  function AlipayDowngradePlugin() {
406
- return _super !== null && _super.apply(this, arguments) || this;
571
+ return AbstractPlugin.apply(this, arguments);
407
572
  }
408
- AlipayDowngradePlugin.onPlayerCreated = function (player) {
409
- return __awaiter(this, void 0, void 0, function () {
410
- return __generator(this, function (_a) {
411
- if (AlipayDowngradePlugin.glLostOccurred) {
412
- console.warn('gl lost happened, new player will be destroyed.');
413
- return [2 /*return*/, player.dispose()];
414
- }
415
- return [2 /*return*/];
416
- });
417
- });
418
- };
419
- AlipayDowngradePlugin.processRawJSON = function (json, options) {
420
- var _a;
421
- if (options === void 0) { options = {}; }
422
- return __awaiter(this, void 0, void 0, function () {
423
- var downgradeResult, downgradeDecision;
424
- return __generator(this, function (_b) {
425
- if (AlipayDowngradePlugin.glLostOccurred) {
426
- return [2 /*return*/, Promise.reject('gl lost happened')];
427
- }
428
- downgradeResult = (_a = options.pluginData) === null || _a === void 0 ? void 0 : _a['downgrade'];
573
+ AlipayDowngradePlugin.processRawJSON = function processRawJSON(json, options) {
574
+ if (options === void 0) options = {};
575
+ return _async_to_generator(function() {
576
+ var _options_pluginData, downgradeResult, _downgradeResult_level;
577
+ return __generator(this, function(_state) {
578
+ downgradeResult = (_options_pluginData = options.pluginData) == null ? void 0 : _options_pluginData["downgrade"];
429
579
  if (downgradeResult) {
430
- downgradeDecision = checkDowngradeResult(downgradeResult);
431
- if (downgradeDecision.downgrade) {
432
- throw new Error("downgraded, reason: ".concat(downgradeDecision.reason));
580
+ if (downgradeResult.downgrade) {
581
+ throw new Error("Downgraded, reason: " + downgradeResult.reason);
433
582
  }
434
- }
435
- else {
436
- console.warn('No downgrade result in pluginData of SceneLoadOptions');
583
+ } else {
584
+ logger.warn("No downgrade result in pluginData of SceneLoadOptions.");
437
585
  }
438
586
  if (!options.renderLevel) {
439
- options.renderLevel = getRenderLevelByDevice(options.renderLevel);
587
+ options.renderLevel = (_downgradeResult_level = downgradeResult == null ? void 0 : downgradeResult.level) != null ? _downgradeResult_level : getDefaultRenderLevel();
440
588
  }
441
- return [2 /*return*/];
589
+ return [
590
+ 2
591
+ ];
442
592
  });
443
- });
593
+ })();
444
594
  };
445
- AlipayDowngradePlugin.glLostOccurred = false;
446
595
  return AlipayDowngradePlugin;
447
- }(AbstractPlugin));
596
+ }(AbstractPlugin);
448
597
 
449
- var prefix = '[Galacean Effects]';
598
+ var prefix = "[Galacean Effects]";
599
+ var ap = isAlipayMiniApp() ? my : window.AlipayJSBridge;
450
600
  logger.register(nativeLogger);
451
601
  function nativeLogger(type, msg) {
452
- var args = [];
453
- for (var _i = 2; _i < arguments.length; _i++) {
454
- args[_i - 2] = arguments[_i];
602
+ for(var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++){
603
+ args[_key - 2] = arguments[_key];
455
604
  }
605
+ var content = {
606
+ "message": prefix + " " + msg + " " + args.join(""),
607
+ "level": type
608
+ };
456
609
  if (isAndroid()) {
457
- androidLogger.apply(void 0, __spreadArray([type, "".concat(prefix, " ").concat(msg)], __read(args), false));
458
- }
459
- else if (isIOS()) {
460
- iOSLogger.apply(void 0, __spreadArray([type, msg], __read(args), false));
461
- }
462
- }
463
- function iOSLogger(type, msg) {
464
- var args = [];
465
- for (var _i = 2; _i < arguments.length; _i++) {
466
- args[_i - 2] = arguments[_i];
467
- }
468
- try {
469
- var ap = window.AlipayJSBridge;
470
- var content = formatMessage.apply(void 0, __spreadArray([type, msg], __read(args), false));
471
- ap === null || ap === void 0 ? void 0 : ap.call('H5APLog', {
472
- content: content,
473
- });
474
- }
475
- catch (e) {
476
- console.error(e);
477
- }
478
- }
479
- // Android H5 容器支持 console 日志直接写入 aplog
480
- function androidLogger(type, msg) {
481
- var args = [];
482
- for (var _i = 2; _i < arguments.length; _i++) {
483
- args[_i - 2] = arguments[_i];
610
+ content["anr_info"] = "mars";
484
611
  }
485
612
  try {
486
- var ap = window.AlipayJSBridge;
487
- ap === null || ap === void 0 ? void 0 : ap.call('localLog', {
488
- 'anr_info': 'mars',
489
- 'message': msg + args.join(''),
490
- 'level': type,
491
- });
492
- }
493
- catch (e) {
613
+ ap == null ? void 0 : ap.call("localLog", content);
614
+ } catch (e) {
494
615
  console.error(e);
495
616
  }
496
617
  }
497
- function formatMessage(level, msg) {
498
- var args = [];
499
- for (var _i = 2; _i < arguments.length; _i++) {
500
- args[_i - 2] = arguments[_i];
501
- }
502
- var result = [
503
- '<MARS_PLAYER>',
504
- "(".concat(level, "):"),
505
- msg,
506
- ];
507
- args.forEach(function (i) {
508
- result.push(i + '');
509
- });
510
- return result.join(' ');
511
- }
512
618
 
513
- var version = "2.0.0-alpha.3";
514
- registerPlugin('alipay-downgrade', AlipayDowngradePlugin, DowngradeVFXItem, true);
515
- logger.info('plugin alipay downgrade version: ' + version);
619
+ var version = "2.0.0-alpha.31";
620
+ registerPlugin("alipay-downgrade", AlipayDowngradePlugin, VFXItem, true);
621
+ logger.info("Plugin downgrade version: " + version + ".");
622
+ if (version !== EFFECTS.version) {
623
+ console.error("注意:请统一 Downgrade 插件与 Player 版本,不统一的版本混用会有不可预知的后果!", "\nAttention: Please ensure the Downgrade plugin is synchronized with the Player version. Mixing and matching incompatible versions may result in unpredictable consequences!");
624
+ }
516
625
 
517
- export { checkDowngradeResult, getDowngradeResult, getRenderLevelByDevice, version };
626
+ export { DeviceLevel, getDefaultRenderLevel, getDowngradeResult, version };
518
627
  //# sourceMappingURL=index.mjs.map