@galacean/effects-plugin-downgrade 2.0.0-alpha.28 → 2.0.0-alpha.29

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"douyin.mjs","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_async_to_generator.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/tslib@2.6.2/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../src/constants.ts","../src/types.ts","../src/ua-decoder.ts","../src/parser/alipay-miniprogram-parser.ts","../src/parser/wechat-miniprogram-parser.ts","../src/downgrade-judge.ts","../src/utils.ts","../src/downgrade-plugin.ts","../src/index.ts"],"sourcesContent":["function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nexport function _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\nexport { _async_to_generator as _ };\n","export function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _set_prototype_of } from \"./_set_prototype_of.js\";\n\nexport function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n 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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","export function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _array_like_to_array } from \"./_array_like_to_array.js\";\n\nexport function _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","import { _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nexport function _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","/**\n * 部分手机厂商和 iPhone 机型列表\n */\nexport const infoList = {\n vender: [\n 'SAMSUNG',\n ],\n iPhone: [\n { name: 'iPhone 15 Pro Max', model: 'iPhone16,2', width: 1290, height: 2796 },\n { name: 'iPhone 15 Pro', model: 'iPhone16,1', width: 1179, height: 2556 },\n { name: 'iPhone 15 Plus', model: 'iPhone15,5', width: 1290, height: 2796 },\n { name: 'iPhone 15', model: 'iPhone15,4', width: 1179, height: 2556 },\n { name: 'iPhone 14 Pro Max', model: 'iPhone15,3', width: 1290, height: 2796 },\n { name: 'iPhone 14 Pro', model: 'iPhone15,2', width: 1179, height: 2556 },\n { name: 'iPhone 14 Plus', model: 'iPhone14,8', width: 1284, height: 2778 },\n { name: 'iPhone 14', model: 'iPhone14,7', width: 1170, height: 2532 },\n { name: 'iPhone 13 Pro Max', model: 'iPhone14,3', width: 1284, height: 2778 },\n { name: 'iPhone 13 Pro', model: 'iPhone14,2', width: 1170, height: 2532 },\n { name: 'iPhone 13', model: 'iPhone14,5', width: 1170, height: 2532 },\n { name: 'iPhone 13 mini', model: 'iPhone14,4', width: 1080, height: 2340 },\n { name: 'iPhone SE (3rd gen)', model: 'iPhone14,6', width: 750, height: 1334 },\n { name: 'iPhone 12 Pro Max', model: 'iPhone13,4', width: 1284, height: 2778 },\n { name: 'iPhone 12 Pro', model: 'iPhone13,3', width: 1170, height: 2532 },\n { name: 'iPhone 12', model: 'iPhone13,2', width: 1170, height: 2532 },\n { name: 'iPhone 12 mini', model: 'iPhone13,1', width: 1080, height: 2340 },\n { name: 'iPhone 11 Pro Max', model: 'iPhone12,5', width: 1242, height: 2688 },\n { name: 'iPhone 11 Pro', model: 'iPhone12,3', width: 1125, height: 2436 },\n { name: 'iPhone 11', model: 'iPhone12,1', width: 828, height: 1792 },\n { name: 'iPhone SE (2nd gen)', model: 'iPhone12,8', width: 750, height: 1334 },\n { name: 'iPhone XR', model: 'iPhone11,8', width: 828, height: 1792 },\n { name: 'iPhone XS Max', model: 'iPhone11,6', width: 1242, height: 2688 },\n { name: 'iPhone XS', model: 'iPhone11,2', width: 1125, height: 2436 },\n { name: 'iPhone X', model: 'iPhone10,3', width: 1125, height: 2436 },\n { name: 'iPhone 8 Plus', model: 'iPhone10,2', width: 1080, height: 1920 },\n { name: 'iPhone 8', model: 'iPhone10,1', width: 750, height: 1334 },\n { name: 'iPhone 7 Plus', model: 'iPhone9,2', width: 1080, height: 1920 },\n { name: 'iPhone 7', model: 'iPhone9,1', width: 750, height: 1334 },\n { name: 'iPhone 6s Plus', model: 'iPhone8,2', width: 1080, height: 1920 },\n { name: 'iPhone 6s', model: 'iPhone8,1', width: 750, height: 1334 },\n { name: 'iPhone SE (1st gen)', model: 'iPhone8,4', width: 640, height: 1136 },\n { name: 'iPhone 6 Plus', model: 'iPhone7,1', width: 1080, height: 1920 },\n { name: 'iPhone 6', model: 'iPhone7,2', width: 750, height: 1334 },\n { name: 'iPhone 5C', model: 'iPhone5,3', width: 640, height: 1136 },\n { name: 'iPhone 5S', model: 'iPhone6,1', width: 640, height: 1136 },\n { name: 'iPhone 5', model: 'iPhone5,1', width: 640, height: 1136 },\n { name: 'iPhone 4S', model: 'iPhone4,1', width: 640, height: 960 },\n { name: 'iPhone 4', model: 'iPhone3,1', width: 640, height: 960 },\n { name: 'iPhone 3GS', model: 'iPhone2,1', width: 320, height: 480 },\n { name: 'iPhone 3G', model: 'iPhone1,2', width: 320, height: 480 },\n { name: 'iPhone 1st gen', model: 'iPhone1,1', width: 320, height: 480 },\n ],\n};\n\n/**\n * 被降级的硬件机型列表\n */\nexport const downgradeModels = {\n android: [\n 'OPPO R9s Plus',\n 'GM1910',\n 'V1824A',\n 'V1916A', // checked\n 'SM-G9650', // checked\n 'V1936A',\n 'MI9 PRO 5G', // checked\n 'REDMI K20',\n 'V1914A',\n 'GM1900',\n 'RMX1971',\n 'SM-A6060',\n 'SM-G9600', // checked\n 'V1922A',\n 'PBAM00', // checked\n 'PCAM10', // checked\n 'PACT00', // checked\n 'PBBM00',\n 'PCEM00',\n 'V1818A', // checked\n 'vivo X6A',\n 'vivo X6Plus A',\n ],\n iPhone: [\n 'iPhone8,4',\n 'iPhone8,2',\n 'iPhone8,1',\n 'iPhone7,2',\n 'iPhone7,1',\n 'iPhone6,2',\n 'iPhone6,1',\n 'iPhone5,4',\n 'iPhone5,3',\n 'iPhone5,2',\n 'iPhone5,1',\n 'iPhone4,3',\n 'iPhone4,2',\n 'iPhone4,1',\n 'iPhone3,3',\n 'iPhone3,2',\n 'iPhone3,1',\n 'iPhone2,1',\n 'iPhone1,2',\n 'iPhone1,1',\n ],\n};\n\n/**\n * 被降级的系统版本列表\n */\nexport const downgradeVersions = {\n android: [],\n iOS: [\n '16.7',\n '16.7.1',\n '16.7.2',\n '16.7.3',\n '16.7.4',\n '16.7.5',\n '16.7.6',\n ],\n};\n\n/**\n * 微信开发环境机型名称替换表\n */\nexport const devtoolNameMap: Record<string, Record<string, string>> = {\n wechat: {\n 'iPhone 6/7/8': 'iPhone 8',\n 'iPhone 6/7/8 Plus': 'iPhone 8 Plus',\n 'iPhone 12/13 mini': 'iPhone 13 mini',\n 'iPhone 12/13 (Pro)': 'iPhone 13 Pro',\n 'iPhone 12/13 Pro Max': 'iPhone 13 Pro Max',\n },\n};\n","import type { SceneRenderLevel } from '@galacean/effects';\n\n/**\n * 降级接口入参\n */\nexport interface DowngradeOptions {\n /**\n * 指定设备渲染等级,如果没有设置,会根据设备信息自动计算\n */\n level?: SceneRenderLevel,\n /**\n * 禁用压后台的时候自动暂停播放器\n * @default false - 不自动暂停\n */\n autoPause?: boolean,\n /**\n * 在小程序环境下,是否自动通过原生API查询设备信息\n * @default false - 不自动查询\n */\n queryDeviceInMiniApp?: boolean,\n /**\n * 设备信息,可以外部传入\n */\n deviceInfo?: DeviceInfo,\n /**\n * 是否 mock 降级\n * - true:mock 降级\n * - false: mock 不降级\n * - undefined: 不进行 mock, 用设备信息判断降级\n */\n mockDowngrade?: boolean,\n /**\n * 自定义降级回调,可针对特定机型配置特定的降级规则\n */\n downgradeCallback?: DowngradeCallback,\n}\n\n/**\n * 降级结果\n */\nexport interface DowngradeResult {\n /**\n * 是否降级\n */\n downgrade: boolean,\n /**\n * 渲染等级\n */\n level: SceneRenderLevel,\n /**\n * 降级原因\n */\n reason: string,\n /**\n * 设备信息\n */\n deviceInfo?: DeviceInfo,\n}\n\n/**\n * 设备信息\n */\nexport interface DeviceInfo {\n /**\n * 平台信息\n */\n platform?: string,\n /**\n * 系统版本\n */\n osVersion?: string,\n /**\n * 硬件机型(处理过)\n */\n model?: string,\n /**\n * 原始硬件机型\n */\n originalModel?: string,\n /**\n * 设备等级\n */\n level?: DeviceLevel,\n /**\n * 内存大小\n */\n memoryMB?: number,\n /**\n * 数据来源\n */\n sourceData?: any,\n}\n\n/**\n * 降级回调接口,可以自定义降级结果\n */\nexport type DowngradeCallback = (device: DeviceInfo) => DowngradeResult | undefined;\n\n/**\n * 微信设备信息,来自微信 JSAPI 返回的结果\n */\nexport interface WechatDeviceInfo {\n /**\n * 设备性能等级(仅 Android 支持)。\n * 取值为:\n * -2 或 0(该设备无法运行小游戏)\n * -1(性能未知)\n * >=1(设备性能值,该值越高,设备性能越好,目前最高不到50)\n */\n benchmarkLevel: number,\n /**\n * 设备品牌\n */\n brand: string,\n /**\n * 设备型号。新机型刚推出一段时间会显示unknown,微信会尽快进行适配。\n */\n model: string,\n /**\n * 操作系统及版本\n */\n system: string,\n /**\n * 客户端平台\n */\n platform: string,\n /**\n * 设备 CPU 型号(仅 Android 支持)\n */\n cpuType?: string,\n /**\n * 设备内存大小,单位为 MB\n */\n memorySize: number,\n}\n\n/**\n * 支付宝系统信息,来自支付宝 JSAPI 返回的结果\n */\nexport interface AlipaySystemInfo {\n /**\n * high: 高性能。Android 设备运行内存大于等于 4GB\n * middle: 性能中等。Android 设备运行内存大于等于 3GB 且 CPU 核心数大于 4\n * low: 性能较弱\n * unknown: 无法识别\n */\n performance?: string,\n /**\n * 手机品牌\n */\n brand?: string,\n /**\n * 手机型号。具体可参考 https://opendocs.alipay.com/mini/072v9s\n */\n model?: string,\n /**\n * 系统版本\n */\n system?: string,\n /**\n * 客户端平台:Android,iOS / iPhone OS,Harmony\n */\n platform?: string,\n}\n\n/**\n * UserAgent 的产品信息\n */\nexport interface ProductInfo {\n name: string,\n comment?: string,\n}\n\n/**\n * iPhone 机型信息\n */\nexport interface IPhoneInfo {\n name: string,\n model: string,\n width: number,\n height: number,\n}\n\n/**\n * 设备等级\n */\nexport enum DeviceLevel {\n High = 'high',\n Medium = 'medium',\n Low = 'low',\n Unknown = 'unknown',\n}\n","import { infoList } from './constants';\nimport type { DeviceInfo, ProductInfo } from './types';\nimport { DeviceLevel } from './types';\n\n/**\n * UserAgent 解析类\n *\n * 从 UserAgent 中解析出设备相关的信息,但是能获取的信息有限。\n */\nexport class UADecoder {\n device: DeviceInfo = {};\n\n constructor (userAgent?: string) {\n this.parse(userAgent ?? navigator.userAgent);\n }\n\n getDeviceInfo () {\n return this.device;\n }\n\n isIOS () {\n return this.device.platform === 'iOS';\n }\n\n isAndroid () {\n return this.device.platform === 'Android';\n }\n\n isHarmony () {\n return this.device.platform === 'Harmony';\n }\n\n isWindows () {\n return this.device.platform === 'Windows';\n }\n\n isMacintosh () {\n return this.device.platform === 'Macintosh';\n }\n\n isMobile () {\n return this.isIOS() || this.isAndroid() || this.isHarmony();\n }\n\n private parse (ua: string) {\n const pattern = /(\\w+\\/[\\w.]+)(\\s+\\([^)]+\\))?/g;\n const productInfos: ProductInfo[] = [];\n let match;\n\n while ((match = pattern.exec(ua)) !== null) {\n const name = match[1];\n const comment = match[2]?.trim();\n\n productInfos.push({ name, comment });\n }\n\n for (const productInfo of productInfos) {\n const { name, comment } = productInfo;\n\n if (name?.startsWith('Mozilla/')) {\n if (comment) {\n this.parseData(comment);\n }\n\n break;\n }\n }\n\n this.device.level = this.estimateDeviceLevel();\n this.device.sourceData = ua;\n }\n\n private parseData (data: string) {\n if (data.length && data[0] === '(') {\n data = data.substring(1);\n }\n\n if (data.length && data[data.length - 1] == ')') {\n data = data.substring(0, data.length - 1);\n }\n if (this.testIPhone(data)) {\n this.device.platform = 'iOS';\n this.device.osVersion = this.parseIOSVersion(data);\n this.device.model = this.getIPhoneModel();\n } else if (this.testIPad(data)) {\n this.device.platform = 'iOS';\n this.device.osVersion = this.parseIOSVersion(data);\n this.device.model = 'iPad';\n } else if (this.testMacintosh(data)) {\n this.device.platform = 'Mac OS';\n this.device.osVersion = this.parseMacOSVersion(data);\n } else if (this.testAndroid(data)) {\n this.device.platform = 'Android';\n this.device.osVersion = this.parseAndroidVersion(data);\n this.device.model = this.parseAndroidModel(data);\n } else if (this.testWindows(data)) {\n this.device.platform = 'Windows';\n this.device.osVersion = this.parseWindowsVersion(data);\n } else {\n console.error(`Unknown info: ${data}.`);\n }\n }\n\n private estimateDeviceLevel () {\n if (this.isIOS()) {\n if (this.device.osVersion) {\n const osVersion = parseInt(this.device.osVersion.split('.')[0]);\n\n if (osVersion < 12) {\n return DeviceLevel.Low;\n } else if (osVersion < 16) {\n return DeviceLevel.Medium;\n } else {\n return DeviceLevel.High;\n }\n } else {\n return DeviceLevel.Low;\n }\n }\n if (this.isAndroid()) {\n if (this.device.osVersion) {\n const osVersion = parseInt(this.device.osVersion.split('.')[0]);\n\n if (osVersion < 10) {\n return DeviceLevel.Low;\n } else if (osVersion < 12) {\n return DeviceLevel.Medium;\n } else {\n return DeviceLevel.High;\n }\n } else {\n return DeviceLevel.Low;\n }\n }\n\n return DeviceLevel.High;\n }\n\n private parseIOSVersion (data: string) {\n const pattern = /OS (\\d+)(?:_(\\d+))?_(\\d+)/;\n const match = data.match(pattern);\n\n if (match) {\n const versionList: string[] = [];\n\n for (let i = 1; i <= 3; i++) {\n if (match[i]) {\n versionList.push(match[i]);\n }\n }\n\n return versionList.join('.');\n }\n }\n\n private getIPhoneModel () {\n const screenWidth = window.screen.width * window.devicePixelRatio;\n const screenHeight = window.screen.height * window.devicePixelRatio;\n const match = infoList.iPhone.find(m => m.width === screenWidth && m.height === screenHeight);\n\n return match?.model ?? 'iPhone';\n }\n\n private parseAndroidVersion (data: string) {\n const pattern = /Android ([\\d.]+);/;\n const match = data.match(pattern);\n\n if (match && match.length >= 2) {\n return match[1];\n }\n }\n\n private parseAndroidModel (data: string) {\n const itemList = data.split(';');\n let lastItem;\n\n for (const item of itemList) {\n const modelPattern = /(.+?) Build/;\n const modelMatch = item.match(modelPattern);\n\n if (modelMatch && modelMatch.length >= 2) {\n return modelMatch[1].trim();\n }\n\n if (item.includes('HMSCore') && lastItem) {\n return lastItem.trim();\n }\n\n lastItem = item;\n }\n\n if (itemList.length > 0) {\n const lastItem = itemList[itemList.length - 1].trim();\n\n for (const vender of infoList.vender) {\n if (lastItem.startsWith(vender)) {\n return lastItem.substring(vender.length).trim();\n }\n }\n }\n\n if (itemList.length == 3) {\n return itemList[itemList.length - 1].trim();\n } else if (itemList.length === 4) {\n const len = itemList.length;\n\n if (itemList[len - 1].trim() === 'wv') {\n return itemList[len - 2].trim();\n }\n }\n }\n\n private parseWindowsVersion (data: string) {\n const pattern = /Windows NT ([\\d.]+);/;\n const match = data.match(pattern);\n\n if (match && match.length >= 2) {\n return match[1];\n }\n }\n\n private parseMacOSVersion (data: string) {\n const pattern = /OS X (\\d+)(?:_(\\d+))?_(\\d+)/;\n const match = data.match(pattern);\n\n if (match) {\n const versionList: string[] = [];\n\n for (let i = 1; i <= 3; i++) {\n if (match[i]) {\n versionList.push(match[i]);\n }\n }\n\n return versionList.join('.');\n }\n }\n\n private testIPhone (data: string) {\n return data.includes('iPhone');\n }\n\n private testIPad (data: string) {\n return data.includes('iPad');\n }\n\n private testAndroid (data: string) {\n return data.includes('Android');\n }\n\n private testMacintosh (data: string) {\n return data.includes('Macintosh');\n }\n\n private testWindows (data: string) {\n return data.includes('Windows');\n }\n}\n","import type { AlipaySystemInfo, DeviceInfo } from '../types';\nimport { DeviceLevel } from '../types';\n\n/**\n * 支付宝小程序系统信息解析类\n *\n * 负责解析支付宝小程序 JSAPI 返回的系统信息\n */\nexport class AlipayMiniprogramParser {\n device: DeviceInfo = {};\n\n constructor (info: AlipaySystemInfo) {\n this.parse(info);\n }\n\n getDeviceInfo () {\n return this.device;\n }\n\n private parse (info: AlipaySystemInfo) {\n this.device.platform = info.platform;\n this.device.osVersion = info.system;\n this.device.originalModel = info.model;\n this.device.model = this.getDeviceModel(info.model);\n this.device.level = this.getDeviceLevel(info.performance);\n this.device.sourceData = info;\n }\n\n private getDeviceModel (model?: string) {\n if (model) {\n const brandList = ['Huawei', 'Xiaomi', 'samsung', 'vivo', 'OPPO'];\n const brand = brandList.find(b => (model ?? '').toLowerCase().startsWith(b.toLowerCase()));\n\n if (brand) {\n return model?.substring(brand.length).trim();\n }\n }\n\n return model;\n }\n\n private getDeviceLevel (level = ''): DeviceLevel {\n const levelMap: Record<string, DeviceLevel> = {\n 'high': DeviceLevel.High,\n 'medium': DeviceLevel.Medium,\n 'middle': DeviceLevel.Medium,\n 'low': DeviceLevel.Low,\n };\n\n return levelMap[level] || DeviceLevel.Unknown;\n }\n}\n","import { infoList, devtoolNameMap } from '../constants';\nimport type { DeviceInfo, WechatDeviceInfo } from '../types';\nimport { DeviceLevel } from '../types';\n\n/**\n * 微信小程序设备信息解析类\n *\n * 负责解析微信小程序 JSAPI 返回的设备信息\n */\nexport class WechatMiniprogramParser {\n device: DeviceInfo = {};\n\n constructor (info: WechatDeviceInfo) {\n this.parse(info);\n }\n\n getDeviceInfo () {\n return this.device;\n }\n\n private parse (info: WechatDeviceInfo) {\n const osNameMatch = info.system.match(/\\w+/);\n\n if (osNameMatch) {\n this.device.platform = osNameMatch[0].trim();\n }\n\n const osVersionMatch = info.system.match(/[\\d.]+/);\n\n if (osVersionMatch) {\n this.device.osVersion = osVersionMatch[0].trim();\n }\n\n if (info.platform === 'devtools') {\n const phoneName = devtoolNameMap.wechat[info.model] ?? info.model;\n\n for (const data of infoList.iPhone) {\n if (data.name === phoneName) {\n info.model = data.model;\n\n break;\n }\n }\n }\n\n if (this.device.platform === 'iOS') {\n const modelMatch = info.model.match(/^(.*?)<(.*?)>$/);\n\n if (modelMatch) {\n this.device.model = modelMatch[2].trim();\n this.device.originalModel = info.model;\n } else {\n this.device.model = info.model;\n }\n } else {\n this.device.model = info.model;\n }\n\n if (info.benchmarkLevel <= 0) {\n this.device.level = DeviceLevel.Unknown;\n } else if (info.benchmarkLevel <= 10) {\n this.device.level = DeviceLevel.Low;\n } else if (info.benchmarkLevel <= 20) {\n this.device.level = DeviceLevel.Medium;\n } else {\n this.device.level = DeviceLevel.High;\n }\n\n this.device.memoryMB = info.memorySize;\n this.device.sourceData = info;\n }\n}\n","import { spec, type SceneRenderLevel } from '@galacean/effects';\nimport { DeviceLevel, type DeviceInfo, type DowngradeOptions, type DowngradeResult } from './types';\nimport { downgradeModels, downgradeVersions } from './constants';\n\n/**\n * 降级判断类\n *\n * 通过设备信息和降级选项判断设备是否需要降级\n */\nexport class DowngradeJudge {\n isIOS = false;\n level: SceneRenderLevel;\n\n constructor (\n public options: DowngradeOptions,\n public device: DeviceInfo,\n ) { }\n\n /**\n * 根据输入的设备信息和降级选项,以及内置的硬件机型和系统版本降级列表\n * 返回当前设备降级相关的结果\n *\n * @returns 降级结果\n */\n getDowngradeResult (): DowngradeResult {\n const { downgradeCallback } = this.options;\n\n if (downgradeCallback) {\n const result = downgradeCallback(this.device);\n\n if (result) {\n if (!result.reason) {\n result.reason = 'downgradeCallback';\n }\n\n return result;\n }\n }\n\n this.isIOS = this.device.platform === 'iOS';\n this.level = this.getRenderLevel();\n\n if (this.device.model) {\n const deviceModel = this.device.model.toLowerCase();\n const modelList = this.isIOS ? downgradeModels.iPhone : downgradeModels.android;\n const findModel = modelList.find(m => {\n const testModel = m.toLowerCase();\n\n if (this.isIOS) {\n return testModel === deviceModel;\n } else {\n return testModel.includes(deviceModel) || deviceModel.includes(testModel);\n }\n });\n\n if (findModel !== undefined) {\n return {\n downgrade: true,\n level: this.level,\n reason: 'Downgrade by model list',\n deviceInfo: this.device,\n };\n }\n }\n\n const osVersionList = this.isIOS ? downgradeVersions.iOS : downgradeVersions.android;\n const findOS = osVersionList.find(v => v === this.device.osVersion);\n\n if (findOS !== undefined) {\n return {\n downgrade: true,\n level: this.level,\n reason: 'Downgrade by OS version list',\n deviceInfo: this.device,\n };\n }\n\n return {\n downgrade: false,\n level: this.level,\n reason: '',\n deviceInfo: this.device,\n };\n }\n\n private getRenderLevel (): SceneRenderLevel {\n if (this.options.level) {\n return this.options.level;\n }\n\n if (this.device.level) {\n if (this.device.level === DeviceLevel.High) {\n return spec.RenderLevel.S;\n } else if (this.device.level === DeviceLevel.Medium) {\n return spec.RenderLevel.A;\n } else if (this.device.level === DeviceLevel.Low) {\n return spec.RenderLevel.B;\n }\n }\n\n if (this.isIOS && this.device.model) {\n if (/iPhone(\\d+),/.test(this.device.model)) {\n const gen = +RegExp.$1;\n\n if (gen <= 9) {\n return spec.RenderLevel.B;\n } else if (gen < 10) {\n return spec.RenderLevel.A;\n } else {\n return spec.RenderLevel.S;\n }\n }\n }\n\n if (this.device.memoryMB) {\n if (this.device.memoryMB < 4000) {\n return spec.RenderLevel.B;\n } else if (this.device.memoryMB < 6000) {\n return spec.RenderLevel.A;\n } else {\n return spec.RenderLevel.S;\n }\n }\n\n return this.isIOS ? spec.RenderLevel.S : spec.RenderLevel.B;\n }\n}\n","import { isIOS, isWechatMiniApp } from '@galacean/effects';\nimport { spec, getActivePlayers, logger, isAlipayMiniApp } from '@galacean/effects';\nimport type { AlipaySystemInfo, DowngradeOptions, DowngradeResult } from './types';\nimport { UADecoder } from './ua-decoder';\nimport { AlipayMiniprogramParser, WechatMiniprogramParser } from './parser';\nimport { DowngradeJudge } from './downgrade-judge';\n\nconst internalPaused = Symbol('@@_inter_pause');\nlet hasRegisterEvent = false;\n\n/**\n * 获取 GE 降级结果,不需要创建 Canvas 和 WebGL 环境。\n * 如果是小程序环境下,要确保 JSAPI 可调用\n *\n * @param options - 降级选项\n * @returns 降级结果\n */\nexport function getDowngradeResult (options: DowngradeOptions = {}): DowngradeResult {\n if (!hasRegisterEvent) {\n registerEvent(options);\n hasRegisterEvent = true;\n }\n\n const { mockDowngrade } = options;\n\n if (mockDowngrade !== undefined) {\n return {\n downgrade: mockDowngrade,\n level: options.level ?? spec.RenderLevel.S,\n reason: 'mock',\n };\n }\n\n const device = getDeviceInfo(options);\n const judge = new DowngradeJudge(options, device);\n\n return judge.getDowngradeResult();\n}\n\nfunction registerEvent (options: DowngradeOptions) {\n const { autoPause } = options;\n\n window.addEventListener('unload', () => {\n getActivePlayers().forEach(player => player.dispose());\n });\n\n if (autoPause) {\n document.addEventListener('pause', pauseAllActivePlayers);\n document.addEventListener('resume', resumePausedPlayers);\n }\n}\n\nfunction getDeviceInfo (options: DowngradeOptions) {\n const { queryDeviceInMiniApp, deviceInfo } = options;\n\n if (deviceInfo) {\n return deviceInfo;\n }\n\n if (queryDeviceInMiniApp) {\n if (isAlipayMiniApp()) {\n // 支付宝小程序\n if (my.canIUse('getSystemInfo')) {\n // https://opendocs.alipay.com/mini/api/system-info\n const info = my.getSystemInfo() as AlipaySystemInfo;\n const parser = new AlipayMiniprogramParser(info);\n\n return parser.getDeviceInfo();\n } else {\n logger.error('Can\\'t use getSystemInfo in Alipay MiniProgram.');\n }\n }\n if (isWechatMiniApp()) {\n // 微信小程序\n // @ts-expect-error\n if (wx.canIUse('getDeviceInfo')) {\n // https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getDeviceInfo.html\n // @ts-expect-error\n const info = wx.getDeviceInfo() as WechatDeviceInfo;\n const parser = new WechatMiniprogramParser(info);\n\n return parser.getDeviceInfo();\n } else {\n logger.error('Can\\'t use getDeviceInfo in WeChat MiniProgram.');\n }\n } else {\n logger.error('Non-mini program environment and try to get device info from user agent.');\n }\n }\n\n return new UADecoder().getDeviceInfo();\n}\n\n/**\n * 获取默认渲染等级\n *\n * @returns 渲染等级\n */\nexport function getDefaultRenderLevel () {\n return isIOS() ? spec.RenderLevel.S : spec.RenderLevel.B;\n}\n\nfunction pauseAllActivePlayers (e: Event) {\n if (e.target === document) {\n logger.info('Auto pause all players with data offloaded.');\n const players = getActivePlayers();\n\n players.forEach(player => {\n if (!player.paused) {\n player.pause({ offloadTexture: true });\n // @ts-expect-error\n player[internalPaused] = true;\n }\n });\n }\n}\n\nfunction resumePausedPlayers (e: Event) {\n if (e.target === document) {\n logger.info('Auto resume all players.');\n const players = getActivePlayers();\n\n players.forEach(player => {\n // @ts-expect-error\n if (player[internalPaused]) {\n void player.resume();\n // @ts-expect-error\n player[internalPaused] = false;\n }\n });\n }\n}\n","import type { SceneLoadOptions, spec } from '@galacean/effects';\nimport { AbstractPlugin, logger } from '@galacean/effects';\nimport { getDefaultRenderLevel } from './utils';\n\n/**\n * 降级插件类\n *\n * 根据 SceneLoadOptions 中传入的 downgrade 数据,判断是否降级。\n * 如果设备被降级,会在 processRawJSON 时抛出降级相关的异常和原因。\n *\n * 如果 SceneLoadOptions 中 renderLevel 没有设置,那么会根据 downgrade 数据\n * 和默认的渲染等级规则设置其中的 renderLevel 。\n */\nexport class DowngradePlugin extends AbstractPlugin {\n static override async processRawJSON (json: spec.JSONScene, options: SceneLoadOptions = {}) {\n const downgradeResult = options.pluginData?.['downgrade'];\n\n if (downgradeResult) {\n if (downgradeResult.downgrade) {\n throw new Error(`Downgraded, reason: ${downgradeResult.reason}`);\n }\n } else {\n logger.warn('No downgrade result in pluginData of SceneLoadOptions.');\n }\n\n if (!options.renderLevel) {\n options.renderLevel = downgradeResult?.level ?? getDefaultRenderLevel();\n }\n }\n}\n","import * as EFFECTS from '@galacean/effects';\nimport { VFXItem, logger, registerPlugin } from '@galacean/effects';\nimport { DowngradePlugin } from './downgrade-plugin';\n\nexport * from './utils';\nexport * from './parser';\nexport * from './ua-decoder';\nexport * from './types';\n\nexport const version = __VERSION__;\n\nregisterPlugin('downgrade', DowngradePlugin, VFXItem, true);\n\nlogger.info(`Plugin downgrade version: ${version}.`);\n\nif (version !== EFFECTS.version) {\n console.error(\n '注意:请统一 Downgrade 插件与 Player 版本,不统一的版本混用会有不可预知的后果!',\n '\\nAttention: Please ensure the Downgrade plugin is synchronized with the Player version. Mixing and matching incompatible versions may result in unpredictable consequences!'\n );\n}\n"],"names":["asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_async_to_generator","fn","self","args","arguments","apply","err","undefined","_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","writable","configurable","__generator","thisArg","body","_","label","sent","t","trys","ops","f","y","g","next","verb","Symbol","iterator","n","v","step","op","call","pop","length","push","e","SuppressedError","suppressed","message","Error","name","_array_like_to_array","arr","len","i","arr2","Array","_unsupported_iterable_to_array","minLen","toString","slice","from","test","_create_for_of_iterator_helper_loose","allowArrayLike","it","bind","isArray","infoList","vender","iPhone","model","width","height","downgradeModels","android","downgradeVersions","iOS","devtoolNameMap","wechat","DeviceLevel","UADecoder","userAgent","device","parse","navigator","getDeviceInfo","isIOS","platform","isAndroid","isHarmony","isWindows","isMacintosh","isMobile","ua","pattern","productInfos","match","exec","comment","trim","productInfo","startsWith","parseData","level","estimateDeviceLevel","sourceData","data","substring","testIPhone","osVersion","parseIOSVersion","getIPhoneModel","testIPad","testMacintosh","parseMacOSVersion","testAndroid","parseAndroidVersion","parseAndroidModel","testWindows","parseWindowsVersion","console","parseInt","split","Low","Medium","High","versionList","join","screenWidth","window","screen","devicePixelRatio","screenHeight","find","m","itemList","lastItem","item","modelPattern","modelMatch","includes","AlipayMiniprogramParser","system","originalModel","getDeviceModel","getDeviceLevel","performance","brandList","brand","b","toLowerCase","levelMap","Unknown","WechatMiniprogramParser","osNameMatch","osVersionMatch","phoneName","benchmarkLevel","memoryMB","memorySize","DowngradeJudge","options","getDowngradeResult","downgradeCallback","result","reason","getRenderLevel","deviceModel","modelList","findModel","testModel","downgrade","deviceInfo","osVersionList","findOS","spec","RenderLevel","S","A","B","RegExp","$1","internalPaused","hasRegisterEvent","registerEvent","mockDowngrade","judge","autoPause","addEventListener","getActivePlayers","forEach","player","dispose","document","pauseAllActivePlayers","resumePausedPlayers","queryDeviceInMiniApp","isAlipayMiniApp","my","canIUse","getSystemInfo","parser","logger","isWechatMiniApp","wx","getDefaultRenderLevel","target","players","paused","pause","offloadTexture","resume","DowngradePlugin","processRawJSON","json","downgradeResult","pluginData","warn","renderLevel","AbstractPlugin","version","registerPlugin","VFXItem","EFFECTS"],"mappings":"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"}
@@ -1,11 +1,22 @@
1
1
  import { type SceneRenderLevel } from '@galacean/effects';
2
2
  import { type DeviceInfo, type DowngradeOptions, type DowngradeResult } from './types';
3
+ /**
4
+ * 降级判断类
5
+ *
6
+ * 通过设备信息和降级选项判断设备是否需要降级
7
+ */
3
8
  export declare class DowngradeJudge {
4
9
  options: DowngradeOptions;
5
10
  device: DeviceInfo;
6
11
  isIOS: boolean;
7
12
  level: SceneRenderLevel;
8
13
  constructor(options: DowngradeOptions, device: DeviceInfo);
14
+ /**
15
+ * 根据输入的设备信息和降级选项,以及内置的硬件机型和系统版本降级列表
16
+ * 返回当前设备降级相关的结果
17
+ *
18
+ * @returns 降级结果
19
+ */
9
20
  getDowngradeResult(): DowngradeResult;
10
- getRenderLevel(): SceneRenderLevel;
21
+ private getRenderLevel;
11
22
  }
@@ -1,5 +1,14 @@
1
1
  import type { SceneLoadOptions, spec } from '@galacean/effects';
2
2
  import { AbstractPlugin } from '@galacean/effects';
3
+ /**
4
+ * 降级插件类
5
+ *
6
+ * 根据 SceneLoadOptions 中传入的 downgrade 数据,判断是否降级。
7
+ * 如果设备被降级,会在 processRawJSON 时抛出降级相关的异常和原因。
8
+ *
9
+ * 如果 SceneLoadOptions 中 renderLevel 没有设置,那么会根据 downgrade 数据
10
+ * 和默认的渲染等级规则设置其中的 renderLevel 。
11
+ */
3
12
  export declare class DowngradePlugin extends AbstractPlugin {
4
13
  static processRawJSON(json: spec.JSONScene, options?: SceneLoadOptions): Promise<void>;
5
14
  }
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Description: Galacean Effects player downgrade plugin
4
4
  * Author: Ant Group CO., Ltd.
5
5
  * Contributors: 飂兮
6
- * Version: v2.0.0-alpha.28
6
+ * Version: v2.0.0-alpha.29
7
7
  */
8
8
 
9
9
  'use strict';
@@ -181,17 +181,6 @@ typeof SuppressedError === "function" ? SuppressedError : function _SuppressedEr
181
181
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
182
182
  };
183
183
 
184
- function _extends() {
185
- _extends = Object.assign || function assign(target) {
186
- for(var i = 1; i < arguments.length; i++){
187
- var source = arguments[i];
188
- for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
189
- }
190
- return target;
191
- };
192
- return _extends.apply(this, arguments);
193
- }
194
-
195
184
  function _array_like_to_array(arr, len) {
196
185
  if (len == null || len > arr.length) len = arr.length;
197
186
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
@@ -227,7 +216,9 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
227
216
  throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
228
217
  }
229
218
 
230
- var infoList = {
219
+ /**
220
+ * 部分手机厂商和 iPhone 机型列表
221
+ */ var infoList = {
231
222
  vender: [
232
223
  "SAMSUNG"
233
224
  ],
@@ -486,7 +477,9 @@ var infoList = {
486
477
  }
487
478
  ]
488
479
  };
489
- var downgradeModels = {
480
+ /**
481
+ * 被降级的硬件机型列表
482
+ */ var downgradeModels = {
490
483
  android: [
491
484
  "OPPO R9s Plus",
492
485
  "GM1910",
@@ -534,7 +527,9 @@ var downgradeModels = {
534
527
  "iPhone1,1"
535
528
  ]
536
529
  };
537
- var downgradeVersions = {
530
+ /**
531
+ * 被降级的系统版本列表
532
+ */ var downgradeVersions = {
538
533
  android: [],
539
534
  iOS: [
540
535
  "16.7",
@@ -546,7 +541,9 @@ var downgradeVersions = {
546
541
  "16.7.6"
547
542
  ]
548
543
  };
549
- var devtoolNameMap = {
544
+ /**
545
+ * 微信开发环境机型名称替换表
546
+ */ var devtoolNameMap = {
550
547
  wechat: {
551
548
  "iPhone 6/7/8": "iPhone 8",
552
549
  "iPhone 6/7/8 Plus": "iPhone 8 Plus",
@@ -564,7 +561,11 @@ exports.DeviceLevel = void 0;
564
561
  DeviceLevel["Unknown"] = "unknown";
565
562
  })(exports.DeviceLevel || (exports.DeviceLevel = {}));
566
563
 
567
- var UADecoder = /*#__PURE__*/ function() {
564
+ /**
565
+ * UserAgent 解析类
566
+ *
567
+ * 从 UserAgent 中解析出设备相关的信息,但是能获取的信息有限。
568
+ */ var UADecoder = /*#__PURE__*/ function() {
568
569
  function UADecoder(userAgent) {
569
570
  this.device = {};
570
571
  this.parse(userAgent != null ? userAgent : navigator.userAgent);
@@ -777,7 +778,11 @@ var UADecoder = /*#__PURE__*/ function() {
777
778
  return UADecoder;
778
779
  }();
779
780
 
780
- var AlipayMiniprogramParser = /*#__PURE__*/ function() {
781
+ /**
782
+ * 支付宝小程序系统信息解析类
783
+ *
784
+ * 负责解析支付宝小程序 JSAPI 返回的系统信息
785
+ */ var AlipayMiniprogramParser = /*#__PURE__*/ function() {
781
786
  function AlipayMiniprogramParser(info) {
782
787
  this.device = {};
783
788
  this.parse(info);
@@ -825,7 +830,11 @@ var AlipayMiniprogramParser = /*#__PURE__*/ function() {
825
830
  return AlipayMiniprogramParser;
826
831
  }();
827
832
 
828
- var WechatMiniprogramParser = /*#__PURE__*/ function() {
833
+ /**
834
+ * 微信小程序设备信息解析类
835
+ *
836
+ * 负责解析微信小程序 JSAPI 返回的设备信息
837
+ */ var WechatMiniprogramParser = /*#__PURE__*/ function() {
829
838
  function WechatMiniprogramParser(info) {
830
839
  this.device = {};
831
840
  this.parse(info);
@@ -880,14 +889,23 @@ var WechatMiniprogramParser = /*#__PURE__*/ function() {
880
889
  return WechatMiniprogramParser;
881
890
  }();
882
891
 
883
- var DowngradeJudge = /*#__PURE__*/ function() {
892
+ /**
893
+ * 降级判断类
894
+ *
895
+ * 通过设备信息和降级选项判断设备是否需要降级
896
+ */ var DowngradeJudge = /*#__PURE__*/ function() {
884
897
  function DowngradeJudge(options, device) {
885
898
  this.options = options;
886
899
  this.device = device;
887
900
  this.isIOS = false;
888
901
  }
889
902
  var _proto = DowngradeJudge.prototype;
890
- _proto.getDowngradeResult = function getDowngradeResult() {
903
+ /**
904
+ * 根据输入的设备信息和降级选项,以及内置的硬件机型和系统版本降级列表
905
+ * 返回当前设备降级相关的结果
906
+ *
907
+ * @returns 降级结果
908
+ */ _proto.getDowngradeResult = function getDowngradeResult() {
891
909
  var _this = this;
892
910
  var downgradeCallback = this.options.downgradeCallback;
893
911
  if (downgradeCallback) {
@@ -941,6 +959,9 @@ var DowngradeJudge = /*#__PURE__*/ function() {
941
959
  };
942
960
  };
943
961
  _proto.getRenderLevel = function getRenderLevel() {
962
+ if (this.options.level) {
963
+ return this.options.level;
964
+ }
944
965
  if (this.device.level) {
945
966
  if (this.device.level === exports.DeviceLevel.High) {
946
967
  return EFFECTS.spec.RenderLevel.S;
@@ -950,15 +971,6 @@ var DowngradeJudge = /*#__PURE__*/ function() {
950
971
  return EFFECTS.spec.RenderLevel.B;
951
972
  }
952
973
  }
953
- if (this.device.memoryMB) {
954
- if (this.device.memoryMB < 4000) {
955
- return EFFECTS.spec.RenderLevel.B;
956
- } else if (this.device.memoryMB < 6000) {
957
- return EFFECTS.spec.RenderLevel.A;
958
- } else {
959
- return EFFECTS.spec.RenderLevel.S;
960
- }
961
- }
962
974
  if (this.isIOS && this.device.model) {
963
975
  if (/iPhone(\d+),/.test(this.device.model)) {
964
976
  var gen = +RegExp.$1;
@@ -971,6 +983,15 @@ var DowngradeJudge = /*#__PURE__*/ function() {
971
983
  }
972
984
  }
973
985
  }
986
+ if (this.device.memoryMB) {
987
+ if (this.device.memoryMB < 4000) {
988
+ return EFFECTS.spec.RenderLevel.B;
989
+ } else if (this.device.memoryMB < 6000) {
990
+ return EFFECTS.spec.RenderLevel.A;
991
+ } else {
992
+ return EFFECTS.spec.RenderLevel.S;
993
+ }
994
+ }
974
995
  return this.isIOS ? EFFECTS.spec.RenderLevel.S : EFFECTS.spec.RenderLevel.B;
975
996
  };
976
997
  return DowngradeJudge;
@@ -978,17 +999,26 @@ var DowngradeJudge = /*#__PURE__*/ function() {
978
999
 
979
1000
  var internalPaused = Symbol("@@_inter_pause");
980
1001
  var hasRegisterEvent = false;
981
- function getDowngradeResult(options) {
1002
+ /**
1003
+ * 获取 GE 降级结果,不需要创建 Canvas 和 WebGL 环境。
1004
+ * 如果是小程序环境下,要确保 JSAPI 可调用
1005
+ *
1006
+ * @param options - 降级选项
1007
+ * @returns 降级结果
1008
+ */ function getDowngradeResult(options) {
982
1009
  if (options === void 0) options = {};
983
1010
  if (!hasRegisterEvent) {
984
1011
  registerEvent(options);
985
1012
  hasRegisterEvent = true;
986
1013
  }
987
- var mock = options.mock;
988
- if (mock) {
989
- return _extends({}, mock, {
1014
+ var mockDowngrade = options.mockDowngrade;
1015
+ if (mockDowngrade !== undefined) {
1016
+ var _options_level;
1017
+ return {
1018
+ downgrade: mockDowngrade,
1019
+ level: (_options_level = options.level) != null ? _options_level : EFFECTS.spec.RenderLevel.S,
990
1020
  reason: "mock"
991
- });
1021
+ };
992
1022
  }
993
1023
  var device = getDeviceInfo(options);
994
1024
  var judge = new DowngradeJudge(options, device);
@@ -1041,7 +1071,11 @@ function getDeviceInfo(options) {
1041
1071
  }
1042
1072
  return new UADecoder().getDeviceInfo();
1043
1073
  }
1044
- function getDefaultRenderLevel() {
1074
+ /**
1075
+ * 获取默认渲染等级
1076
+ *
1077
+ * @returns 渲染等级
1078
+ */ function getDefaultRenderLevel() {
1045
1079
  return EFFECTS.isIOS() ? EFFECTS.spec.RenderLevel.S : EFFECTS.spec.RenderLevel.B;
1046
1080
  }
1047
1081
  function pauseAllActivePlayers(e) {
@@ -1074,7 +1108,15 @@ function resumePausedPlayers(e) {
1074
1108
  }
1075
1109
  }
1076
1110
 
1077
- var DowngradePlugin = /*#__PURE__*/ function(AbstractPlugin) {
1111
+ /**
1112
+ * 降级插件类
1113
+ *
1114
+ * 根据 SceneLoadOptions 中传入的 downgrade 数据,判断是否降级。
1115
+ * 如果设备被降级,会在 processRawJSON 时抛出降级相关的异常和原因。
1116
+ *
1117
+ * 如果 SceneLoadOptions 中 renderLevel 没有设置,那么会根据 downgrade 数据
1118
+ * 和默认的渲染等级规则设置其中的 renderLevel 。
1119
+ */ var DowngradePlugin = /*#__PURE__*/ function(AbstractPlugin) {
1078
1120
  _inherits(DowngradePlugin, AbstractPlugin);
1079
1121
  function DowngradePlugin() {
1080
1122
  return AbstractPlugin.apply(this, arguments);
@@ -1082,18 +1124,18 @@ var DowngradePlugin = /*#__PURE__*/ function(AbstractPlugin) {
1082
1124
  DowngradePlugin.processRawJSON = function processRawJSON(json, options) {
1083
1125
  if (options === void 0) options = {};
1084
1126
  return _async_to_generator(function() {
1085
- var _options_pluginData, downgradeResult, _downgradeResult_renderLevel;
1127
+ var _options_pluginData, downgradeResult, _downgradeResult_level;
1086
1128
  return __generator(this, function(_state) {
1087
1129
  downgradeResult = (_options_pluginData = options.pluginData) == null ? void 0 : _options_pluginData["downgrade"];
1088
1130
  if (downgradeResult) {
1089
1131
  if (downgradeResult.downgrade) {
1090
- throw new Error("Downgraded, reason: " + downgradeResult.reason + ".");
1132
+ throw new Error("Downgraded, reason: " + downgradeResult.reason);
1091
1133
  }
1092
1134
  } else {
1093
1135
  EFFECTS.logger.warn("No downgrade result in pluginData of SceneLoadOptions.");
1094
1136
  }
1095
1137
  if (!options.renderLevel) {
1096
- options.renderLevel = (_downgradeResult_renderLevel = downgradeResult == null ? void 0 : downgradeResult.renderLevel) != null ? _downgradeResult_renderLevel : getDefaultRenderLevel();
1138
+ options.renderLevel = (_downgradeResult_level = downgradeResult == null ? void 0 : downgradeResult.level) != null ? _downgradeResult_level : getDefaultRenderLevel();
1097
1139
  }
1098
1140
  return [
1099
1141
  2
@@ -1104,7 +1146,7 @@ var DowngradePlugin = /*#__PURE__*/ function(AbstractPlugin) {
1104
1146
  return DowngradePlugin;
1105
1147
  }(EFFECTS.AbstractPlugin);
1106
1148
 
1107
- var version = "2.0.0-alpha.28";
1149
+ var version = "2.0.0-alpha.29";
1108
1150
  EFFECTS.registerPlugin("downgrade", DowngradePlugin, EFFECTS.VFXItem, true);
1109
1151
  EFFECTS.logger.info("Plugin downgrade version: " + version + ".");
1110
1152
  if (version !== EFFECTS__namespace.version) {