facebetter 1.0.11 → 1.0.12
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/facebetter.esm.js +70 -41
- package/dist/facebetter.esm.js.map +1 -1
- package/dist/facebetter.js +70 -40
- package/dist/facebetter.js.map +1 -1
- package/package.json +2 -2
package/dist/facebetter.esm.js
CHANGED
|
@@ -139,6 +139,34 @@ const ProcessMode$1 = {
|
|
|
139
139
|
Video: 1 // 视频模式
|
|
140
140
|
};
|
|
141
141
|
|
|
142
|
+
/**
|
|
143
|
+
* Virtual background options class
|
|
144
|
+
* Matches the C++/Java/OC API design
|
|
145
|
+
*/
|
|
146
|
+
let VirtualBackgroundOptions$1 = class VirtualBackgroundOptions {
|
|
147
|
+
/**
|
|
148
|
+
* Creates a new VirtualBackgroundOptions instance
|
|
149
|
+
* @param {Object} [options] - Options object
|
|
150
|
+
* @param {number} [options.mode] - Background mode (use BackgroundMode enum)
|
|
151
|
+
* @param {ImageData|HTMLImageElement|HTMLCanvasElement} [options.backgroundImage] - Background image (required when mode is Image)
|
|
152
|
+
*/
|
|
153
|
+
constructor(options = {}) {
|
|
154
|
+
this.mode = options.mode !== undefined ? options.mode : BackgroundMode$1.None;
|
|
155
|
+
this.backgroundImage = options.backgroundImage || null;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Validates the options
|
|
160
|
+
* @returns {boolean} True if valid
|
|
161
|
+
*/
|
|
162
|
+
isValid() {
|
|
163
|
+
if (this.mode === BackgroundMode$1.Image) {
|
|
164
|
+
return this.backgroundImage !== null;
|
|
165
|
+
}
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
|
|
142
170
|
var constants = /*#__PURE__*/Object.freeze({
|
|
143
171
|
__proto__: null,
|
|
144
172
|
BackgroundMode: BackgroundMode$1,
|
|
@@ -146,7 +174,8 @@ var constants = /*#__PURE__*/Object.freeze({
|
|
|
146
174
|
BeautyType: BeautyType$1,
|
|
147
175
|
MakeupParam: MakeupParam$1,
|
|
148
176
|
ProcessMode: ProcessMode$1,
|
|
149
|
-
ReshapeParam: ReshapeParam$1
|
|
177
|
+
ReshapeParam: ReshapeParam$1,
|
|
178
|
+
VirtualBackgroundOptions: VirtualBackgroundOptions$1
|
|
150
179
|
});
|
|
151
180
|
|
|
152
181
|
/**
|
|
@@ -561,59 +590,58 @@ class BeautyEffectEngine {
|
|
|
561
590
|
}
|
|
562
591
|
|
|
563
592
|
/**
|
|
564
|
-
* Sets virtual background
|
|
565
|
-
* @param {
|
|
593
|
+
* Sets virtual background options (unified API, matches C++/Java/OC)
|
|
594
|
+
* @param {VirtualBackgroundOptions|Object} options - Virtual background options
|
|
595
|
+
* @param {number} [options.mode] - Background mode (use BackgroundMode enum)
|
|
596
|
+
* @param {ImageData|HTMLImageElement|HTMLCanvasElement} [options.backgroundImage] - Background image (required when mode is Image)
|
|
566
597
|
*/
|
|
567
|
-
|
|
598
|
+
setVirtualBackground(options) {
|
|
568
599
|
this._ensureInitialized();
|
|
569
600
|
const Module = this._getWasmModule();
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
checkResult(result, 'Failed to set virtual background mode');
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
/**
|
|
582
|
-
* Sets virtual background image
|
|
583
|
-
* @param {ImageData|HTMLImageElement|HTMLCanvasElement} image - Background image
|
|
584
|
-
*/
|
|
585
|
-
setVirtualBackgroundImage(image) {
|
|
586
|
-
this._ensureInitialized();
|
|
587
|
-
const imageData = this._toImageData(image);
|
|
588
|
-
const Module = this._getWasmModule();
|
|
589
|
-
|
|
590
|
-
const bufferSize = imageData.width * imageData.height * 4;
|
|
591
|
-
const imageBufferPtr = Module._malloc(bufferSize);
|
|
592
|
-
|
|
601
|
+
|
|
602
|
+
// Support both VirtualBackgroundOptions object and plain object
|
|
603
|
+
const opts = options.mode !== undefined ? options : { mode: BackgroundMode$1.None, backgroundImage: null };
|
|
604
|
+
|
|
605
|
+
let imageData = null;
|
|
606
|
+
let imageBufferPtr = null;
|
|
607
|
+
|
|
593
608
|
try {
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
609
|
+
// 如果提供了背景图片,转换为 ImageData 并准备缓冲区
|
|
610
|
+
if (opts.backgroundImage) {
|
|
611
|
+
imageData = this._toImageData(opts.backgroundImage);
|
|
612
|
+
const bufferSize = imageData.width * imageData.height * 4;
|
|
613
|
+
imageBufferPtr = Module._malloc(bufferSize);
|
|
614
|
+
|
|
615
|
+
const buffer = this._getWasmBuffer();
|
|
616
|
+
const view = new Uint8Array(buffer, imageBufferPtr, bufferSize);
|
|
617
|
+
view.set(imageData.data);
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
// 使用统一的 SetVirtualBackground C 接口(与其他平台一致)
|
|
598
621
|
const result = Module.ccall(
|
|
599
|
-
'
|
|
622
|
+
'SetVirtualBackground',
|
|
600
623
|
'number',
|
|
601
|
-
['number', 'number', 'number', 'number', 'number'],
|
|
624
|
+
['number', 'number', 'number', 'number', 'number', 'number'],
|
|
602
625
|
[
|
|
603
626
|
this.enginePtr,
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
imageData.
|
|
607
|
-
imageData.
|
|
627
|
+
opts.mode,
|
|
628
|
+
imageBufferPtr || 0, // 如果为 null,传递 0
|
|
629
|
+
imageData ? imageData.width : 0,
|
|
630
|
+
imageData ? imageData.height : 0,
|
|
631
|
+
imageData ? imageData.width * 4 : 0
|
|
608
632
|
]
|
|
609
633
|
);
|
|
610
|
-
|
|
611
|
-
checkResult(result, 'Failed to set virtual background
|
|
634
|
+
|
|
635
|
+
checkResult(result, 'Failed to set virtual background');
|
|
612
636
|
} finally {
|
|
613
|
-
|
|
637
|
+
// 释放内存
|
|
638
|
+
if (imageBufferPtr) {
|
|
639
|
+
Module._free(imageBufferPtr);
|
|
640
|
+
}
|
|
614
641
|
}
|
|
615
642
|
}
|
|
616
643
|
|
|
644
|
+
|
|
617
645
|
/**
|
|
618
646
|
* Ensures buffers are allocated for the given dimensions
|
|
619
647
|
* @private
|
|
@@ -1052,6 +1080,7 @@ const ReshapeParam = ReshapeParam$1;
|
|
|
1052
1080
|
const MakeupParam = MakeupParam$1;
|
|
1053
1081
|
const BackgroundMode = BackgroundMode$1;
|
|
1054
1082
|
const ProcessMode = ProcessMode$1;
|
|
1083
|
+
const VirtualBackgroundOptions = VirtualBackgroundOptions$1;
|
|
1055
1084
|
|
|
1056
1085
|
// Default export
|
|
1057
1086
|
var index = {
|
|
@@ -1062,5 +1091,5 @@ var index = {
|
|
|
1062
1091
|
loadWasmModule
|
|
1063
1092
|
};
|
|
1064
1093
|
|
|
1065
|
-
export { BackgroundMode, BasicParam, ESMBeautyEffectEngine as BeautyEffectEngine, BeautyType, EngineConfig, FacebetterError, MakeupParam, ProcessMode, ReshapeParam, createBeautyEffectEngine, index as default, getWasmBuffer, getWasmModule, loadWasmModule };
|
|
1094
|
+
export { BackgroundMode, BasicParam, ESMBeautyEffectEngine as BeautyEffectEngine, BeautyType, EngineConfig, FacebetterError, MakeupParam, ProcessMode, ReshapeParam, VirtualBackgroundOptions, createBeautyEffectEngine, index as default, getWasmBuffer, getWasmModule, loadWasmModule };
|
|
1066
1095
|
//# sourceMappingURL=facebetter.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facebetter.esm.js","sources":["../src/core/errors.js","../src/core/config.js","../src/core/constants.js","../src/core/engine.js","../src/browser/image-utils.js","../src/esm/index.js"],"sourcesContent":["/**\n * Facebetter Error Classes\n * Platform-agnostic error handling\n */\n\n/**\n * Facebetter error class\n */\nexport class FacebetterError extends Error {\n constructor(message, code = -1) {\n super(message);\n this.name = 'FacebetterError';\n this.code = code;\n }\n}\n\n/**\n * Checks if a result code indicates success\n * @param {number} result - Result code from WASM function\n * @throws {FacebetterError} If result indicates failure\n */\nexport function checkResult(result, errorMessage = 'Operation failed') {\n if (result !== 0) {\n throw new FacebetterError(`${errorMessage} (error code: ${result})`, result);\n }\n}\n\n","/**\n * Engine Configuration\n * Platform-agnostic configuration class\n */\n\nimport { FacebetterError } from './errors.js';\n\n/**\n * Engine configuration class\n * Similar to EngineConfig struct in C++/Java/OC\n */\nexport class EngineConfig {\n /**\n * Creates a new EngineConfig instance\n * @param {Object} config - Configuration object\n * @param {string} [config.appId] - Application ID (required if licenseJson is not provided)\n * @param {string} [config.appKey] - Application key (required if licenseJson is not provided)\n * @param {string} [config.licenseJson] - License JSON string (optional, if provided, appId and appKey are not required)\n */\n constructor(config = {}) {\n this.appId = config.appId || null;\n this.appKey = config.appKey || null;\n this.licenseJson = config.licenseJson || null;\n this.resourcePath = '/facebetter/resource.bundle';\n }\n\n /**\n * Validates the configuration\n * @returns {boolean} True if valid\n */\n isValid() {\n // 如果提供了 licenseJson,则使用授权数据验证\n if (this.licenseJson) {\n return typeof this.licenseJson === 'string' && this.licenseJson.trim() !== '';\n }\n // 否则需要 appId 和 appKey\n return this.appId && typeof this.appId === 'string' && this.appId.trim() !== '' &&\n this.appKey && typeof this.appKey === 'string' && this.appKey.trim() !== '';\n }\n\n /**\n * Returns a string representation of the config\n * @returns {string} String representation\n */\n toString() {\n return `EngineConfig{appId='${this.appId ? this.appId.substring(0, Math.min(this.appId.length, 8)) + '...' : 'null'}', appKey='${this.appKey ? '***' : 'null'}', licenseJson=${this.licenseJson ? 'provided' : 'null'}}`;\n }\n}\n\n","/**\n * Facebetter Constants and Enums\n * Platform-agnostic constants\n */\n\n/**\n * Beauty type enumeration\n */\nexport const BeautyType = {\n Basic: 0, // 基础美颜\n Reshape: 1, // 面部重塑\n Makeup: 2, // 美妆效果\n VirtualBackground: 3 // 虚拟背景\n};\n\n/**\n * Basic beauty parameter enumeration\n */\nexport const BasicParam = {\n Smoothing: 0, // 磨皮\n Sharpening: 1, // 锐化\n Whitening: 2, // 美白\n Rosiness: 3 // 红润\n};\n\n/**\n * Face reshape parameter enumeration\n */\nexport const ReshapeParam = {\n FaceThin: 0, // 瘦脸\n FaceVShape: 1, // V脸\n FaceNarrow: 2, // 窄脸\n FaceShort: 3, // 短脸\n Cheekbone: 4, // 颧骨\n Jawbone: 5, // 下颌骨\n Chin: 6, // 下巴\n NoseSlim: 7, // 瘦鼻梁\n EyeSize: 8, // 大眼\n EyeDistance: 9 // 眼距\n};\n\n/**\n * Makeup parameter enumeration\n */\nexport const MakeupParam = {\n Lipstick: 0, // 口红\n Blush: 1 // 腮红\n};\n\n/**\n * Background mode enumeration\n */\nexport const BackgroundMode = {\n None: 0, // 无背景处理\n Blur: 1, // 模糊背景\n Image: 2 // 背景图片替换\n};\n\n/**\n * Process mode enumeration\n */\nexport const ProcessMode = {\n Image: 0, // 图片模式\n Video: 1 // 视频模式\n};\n\n","/**\n * Beauty Effect Engine Core\n * Platform-agnostic engine implementation with dependency injection\n */\n\nimport { EngineConfig } from './config.js';\nimport { FacebetterError, checkResult } from './errors.js';\nimport { ProcessMode } from './constants.js';\n\n/**\n * Beauty effect engine class\n * Provides high-level API for face beauty effects processing\n * Uses dependency injection for platform-specific functionality\n */\nexport class BeautyEffectEngine {\n /**\n * Creates a new BeautyEffectEngine instance\n * @param {EngineConfig|Object} config - EngineConfig object or configuration object\n * @param {Object} platformAPI - Platform-specific API (injected)\n * @param {Function} platformAPI.loadWasmModule - WASM module loader\n * @param {Function} platformAPI.getWasmModule - Get WASM module instance\n * @param {Function} platformAPI.getWasmBuffer - Get WASM memory buffer\n * @param {Function} platformAPI.toImageData - Convert to ImageData\n * @param {Function} platformAPI.verifyAppKeyOnline - Verify app key online\n * @param {Function} [platformAPI.ensureGPUPixelCanvas] - Ensure GPU canvas exists (browser only)\n * @param {Function} [platformAPI.cleanupGPUPixelCanvas] - Cleanup GPU canvas (browser only)\n */\n constructor(config, platformAPI) {\n if (!config) {\n throw new FacebetterError('Config is required. Expected EngineConfig or configuration object');\n }\n\n if (!platformAPI) {\n throw new FacebetterError('Platform API is required');\n }\n\n // 如果传入的是 EngineConfig 实例,直接使用;否则创建新的 EngineConfig\n let engineConfig;\n if (config instanceof EngineConfig) {\n engineConfig = config;\n } else if (config && typeof config === 'object') {\n engineConfig = new EngineConfig(config);\n } else {\n throw new FacebetterError('Invalid configuration. Expected EngineConfig or configuration object');\n }\n\n if (!engineConfig.isValid()) {\n throw new FacebetterError('Invalid config: ' + engineConfig.toString());\n }\n\n this.config = engineConfig;\n this.appId = engineConfig.appId;\n this.appKey = engineConfig.appKey;\n this.licenseJson = engineConfig.licenseJson;\n this.resourcePath = '/facebetter/resource.bundle';\n this.enginePtr = null;\n this.initialized = false;\n this.srcBufferPtr = null;\n this.dstBufferPtr = null;\n this.bufferSize = 0;\n \n // Store platform API\n this._platformAPI = platformAPI;\n this._loadWasmModule = platformAPI.loadWasmModule;\n this._getWasmModule = platformAPI.getWasmModule;\n this._getWasmBuffer = platformAPI.getWasmBuffer;\n this._toImageData = platformAPI.toImageData;\n this._verifyAppKeyOnline = platformAPI.verifyAppKeyOnline;\n this._ensureGPUPixelCanvas = platformAPI.ensureGPUPixelCanvas;\n this._cleanupGPUPixelCanvas = platformAPI.cleanupGPUPixelCanvas;\n \n // Browser-specific state\n this._gpupixelCanvas = null;\n this._createdGPUPixelCanvas = false;\n this._offscreenCanvas = null;\n this._offscreenCtx = null;\n \n // Automatically create gpupixel_canvas if it doesn't exist (browser only)\n if (this._ensureGPUPixelCanvas) {\n this._ensureGPUPixelCanvas();\n }\n \n // Start loading WASM module immediately in constructor\n this._wasmLoadPromise = this._loadWasmModule();\n this._initPromise = null;\n }\n\n /**\n * Creates a timeout promise\n * @private\n * @param {number} timeout - Timeout in milliseconds\n * @param {string} operation - Operation name for error message\n * @returns {Promise} Promise that rejects after timeout\n */\n _createTimeout(timeout, operation) {\n return new Promise((_, reject) => {\n setTimeout(() => {\n reject(new FacebetterError(\n `${operation} timed out after ${timeout}ms. Please check your network connection or try increasing the timeout.`,\n 'TIMEOUT'\n ));\n }, timeout);\n });\n }\n\n /**\n * Enhances error with context information\n * @private\n * @param {Error} error - Original error\n * @param {string} context - Context information\n * @returns {FacebetterError} Enhanced error\n */\n _enhanceError(error, context) {\n if (error instanceof FacebetterError) {\n return error;\n }\n\n let errorCode = 'UNKNOWN_ERROR';\n let message = error.message || 'Unknown error occurred';\n\n // Categorize errors\n if (error.message?.includes('timeout') || error.message?.includes('TIMEOUT')) {\n errorCode = 'TIMEOUT';\n } else if (error.message?.includes('network') || error.message?.includes('fetch')) {\n errorCode = 'NETWORK_ERROR';\n } else if (error.message?.includes('WASM') || error.message?.includes('wasm')) {\n errorCode = 'WASM_LOAD_ERROR';\n } else if (error.message?.includes('license') || error.message?.includes('auth')) {\n errorCode = 'LICENSE_ERROR';\n }\n\n return new FacebetterError(\n context ? `${context}: ${message}` : message,\n errorCode\n );\n }\n\n /**\n * Initializes the engine\n * @param {Object} [options] - Initialization options\n * @param {number} [options.timeout] - Timeout in milliseconds (default: 30000 for WASM, 10000 for auth)\n * @param {number} [options.authTimeout] - Timeout for online authentication in milliseconds (default: 10000)\n * @returns {Promise<void>} Promise that resolves when initialization is complete\n */\n async init(options = {}) {\n // 并发控制:如果已经初始化,直接返回\n if (this.initialized) {\n return;\n }\n\n // 并发控制:如果正在初始化,返回同一个 Promise\n if (this._initPromise) {\n return this._initPromise;\n }\n\n // 创建初始化 Promise\n this._initPromise = (async () => {\n try {\n const wasmTimeout = options.timeout || 30000;\n const authTimeout = options.authTimeout || 10000;\n\n // 等待 WASM 模块加载(带超时)\n try {\n await Promise.race([\n this._wasmLoadPromise,\n this._createTimeout(wasmTimeout, 'WASM module loading')\n ]);\n } catch (error) {\n throw this._enhanceError(error, 'Failed to load WASM module');\n }\n\n const Module = this._getWasmModule();\n\n let licenseJsonToUse = this.licenseJson;\n\n // 如果用户提供了 appId 和 appKey(但没有提供 licenseJson),则在 JS 层发送 HTTP 请求\n if (this.appId && this.appKey && !this.licenseJson && this._verifyAppKeyOnline) {\n try {\n // 在线认证(带超时)\n const authResponse = await Promise.race([\n this._verifyAppKeyOnline(this.appId, this.appKey),\n this._createTimeout(authTimeout, 'Online authentication')\n ]);\n \n if (!authResponse) {\n throw new FacebetterError(\n 'Failed to get server response from online_auth API. The server returned an empty response.',\n 'AUTH_EMPTY_RESPONSE'\n );\n }\n\n // 将服务器响应转换为 JSON 字符串,作为 licenseJson 传递给 WASM 层\n licenseJsonToUse = JSON.stringify(authResponse);\n console.log('Online auth response received, using as licenseJson');\n } catch (error) {\n if (error instanceof FacebetterError && error.code === 'TIMEOUT') {\n throw new FacebetterError(\n `Online authentication timed out after ${authTimeout}ms. Please check your network connection or provide licenseJson directly.`,\n 'AUTH_TIMEOUT'\n );\n }\n throw this._enhanceError(error, 'Failed to verify app key online');\n }\n }\n\n // 如果用户直接提供了 licenseJson,则直接使用\n // 如果通过 appId/appKey 获取到了响应,则使用响应作为 licenseJson\n // WASM 层只需要验证 licenseJson,不需要发送 HTTP 请求\n const enginePtr = Module.ccall(\n 'CreateBeautyEffectEngine',\n 'number',\n ['string', 'string'],\n [\n this.resourcePath,\n licenseJsonToUse || '' // 使用 licenseJson 验证\n ]\n );\n\n if (!enginePtr) {\n throw new FacebetterError(\n 'Failed to create BeautyEffect engine. This may be due to invalid license or resource path issues.',\n 'ENGINE_CREATE_FAILED'\n );\n }\n\n this.enginePtr = enginePtr;\n this.initialized = true;\n this._initPromise = null; // 清除 Promise 缓存,允许重新初始化(如果需要)\n } catch (error) {\n this._initPromise = null; // 清除 Promise 缓存,允许重试\n throw error;\n }\n })();\n\n return this._initPromise;\n }\n\n /**\n * Destroys the engine and releases resources\n */\n destroy() {\n if (!this.initialized || !this.enginePtr) {\n return;\n }\n\n const Module = this._getWasmModule();\n\n if (this.srcBufferPtr) {\n Module._free(this.srcBufferPtr);\n this.srcBufferPtr = null;\n }\n\n if (this.dstBufferPtr) {\n Module._free(this.dstBufferPtr);\n this.dstBufferPtr = null;\n }\n\n Module.ccall('DestroyBeautyEffectEngine', null, ['number'], [this.enginePtr]);\n this.enginePtr = null;\n this.initialized = false;\n this.bufferSize = 0;\n this._initPromise = null; // 清除初始化 Promise\n \n // Clean up offscreen canvas\n if (this._offscreenCanvas) {\n this._offscreenCanvas = null;\n this._offscreenCtx = null;\n }\n \n // Clean up gpupixel_canvas if we created it\n if (this._cleanupGPUPixelCanvas) {\n this._cleanupGPUPixelCanvas();\n }\n }\n\n /**\n * Sets log configuration\n * Can be called before init() since SetLogConfig is a global function\n * @param {Object} config - Log configuration\n * @param {boolean} config.consoleEnabled - Enable console logging\n * @param {boolean} config.fileEnabled - Enable file logging\n * @param {number} config.level - Log level\n * @param {string} config.fileName - Log file name\n * @returns {Promise<void>} Promise that resolves when log config is set\n */\n async setLogConfig(config) {\n // Wait for WASM module to be loaded (started in constructor)\n await this._wasmLoadPromise;\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'SetLogConfig',\n 'number',\n ['bool', 'bool', 'number', 'string'],\n [\n config.consoleEnabled || false,\n config.fileEnabled || false,\n config.level || 0,\n config.fileName || ''\n ]\n );\n\n checkResult(result, 'Failed to set log config');\n }\n\n /**\n * Enables or disables a beauty type\n * @param {number} beautyType - Beauty type (use BeautyType enum)\n * @param {boolean} enabled - Enable or disable\n */\n setBeautyTypeEnabled(beautyType, enabled) {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'SetBeautyTypeEnabled',\n 'number',\n ['number', 'number', 'number'],\n [this.enginePtr, beautyType, enabled ? 1 : 0]\n );\n\n checkResult(result, `Failed to ${enabled ? 'enable' : 'disable'} beauty type`);\n }\n\n /**\n * Checks if a beauty type is enabled\n * @param {number} beautyType - Beauty type (use BeautyType enum)\n * @returns {boolean} True if enabled\n */\n isBeautyTypeEnabled(beautyType) {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'IsBeautyTypeEnabled',\n 'number',\n ['number', 'number'],\n [this.enginePtr, beautyType]\n );\n\n if (result === -1) {\n throw new FacebetterError('Failed to check beauty type status');\n }\n\n return result === 1;\n }\n\n /**\n * Disables all beauty types\n */\n disableAllBeautyTypes() {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'DisableAllBeautyTypes',\n 'number',\n ['number'],\n [this.enginePtr]\n );\n\n checkResult(result, 'Failed to disable all beauty types');\n }\n\n /**\n * Sets a basic beauty parameter\n * @param {number} param - Parameter (use BasicParam enum)\n * @param {number} value - Parameter value (0.0 - 1.0)\n */\n setBasicParam(param, value) {\n this._ensureInitialized();\n this._setBeautyParam('SetBeautyParamBasic', param, value);\n }\n\n /**\n * Sets a reshape parameter\n * @param {number} param - Parameter (use ReshapeParam enum)\n * @param {number} value - Parameter value (0.0 - 1.0)\n */\n setReshapeParam(param, value) {\n this._ensureInitialized();\n this._setBeautyParam('SetBeautyParamReshape', param, value);\n }\n\n /**\n * Sets a makeup parameter\n * @param {number} param - Parameter (use MakeupParam enum)\n * @param {number} value - Parameter value (0.0 - 1.0)\n */\n setMakeupParam(param, value) {\n this._ensureInitialized();\n this._setBeautyParam('SetBeautyParamMakeup', param, value);\n }\n\n /**\n * Internal method to set beauty parameters\n * @private\n */\n _setBeautyParam(functionName, param, value) {\n if (value < 0 || value > 1) {\n throw new FacebetterError('Parameter value must be between 0.0 and 1.0');\n }\n\n const Module = this._getWasmModule();\n const result = Module.ccall(\n functionName,\n 'number',\n ['number', 'number', 'number'],\n [this.enginePtr, param, value]\n );\n\n checkResult(result, `Failed to set beauty parameter`);\n }\n\n /**\n * Sets virtual background mode\n * @param {number} mode - Background mode (use BackgroundMode enum)\n */\n setVirtualBackgroundMode(mode) {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'SetVirtualBackgroundMode',\n 'number',\n ['number', 'number'],\n [this.enginePtr, mode]\n );\n\n checkResult(result, 'Failed to set virtual background mode');\n }\n\n /**\n * Sets virtual background image\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement} image - Background image\n */\n setVirtualBackgroundImage(image) {\n this._ensureInitialized();\n const imageData = this._toImageData(image);\n const Module = this._getWasmModule();\n\n const bufferSize = imageData.width * imageData.height * 4;\n const imageBufferPtr = Module._malloc(bufferSize);\n\n try {\n const buffer = this._getWasmBuffer();\n const view = new Uint8Array(buffer, imageBufferPtr, bufferSize);\n view.set(imageData.data);\n\n const result = Module.ccall(\n 'SetVirtualBackgroundImage',\n 'number',\n ['number', 'number', 'number', 'number', 'number'],\n [\n this.enginePtr,\n imageBufferPtr,\n imageData.width,\n imageData.height,\n imageData.width * 4\n ]\n );\n\n checkResult(result, 'Failed to set virtual background image');\n } finally {\n Module._free(imageBufferPtr);\n }\n }\n\n /**\n * Ensures buffers are allocated for the given dimensions\n * @private\n */\n _ensureBuffers(width, height) {\n const requiredSize = width * height * 4;\n\n if (this.bufferSize < requiredSize) {\n const Module = this._getWasmModule();\n\n if (this.srcBufferPtr) {\n Module._free(this.srcBufferPtr);\n }\n if (this.dstBufferPtr) {\n Module._free(this.dstBufferPtr);\n }\n\n this.srcBufferPtr = Module._malloc(requiredSize);\n this.dstBufferPtr = Module._malloc(requiredSize);\n this.bufferSize = requiredSize;\n\n if (!this.srcBufferPtr || !this.dstBufferPtr) {\n throw new FacebetterError('Failed to allocate memory buffers');\n }\n }\n }\n\n /**\n * Processes an image\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|Uint8ClampedArray} input - Input image\n * @param {number} width - Image width (required if input is Uint8ClampedArray)\n * @param {number} height - Image height (required if input is Uint8ClampedArray)\n * @param {number} processMode - Process mode (use ProcessMode enum, default: ProcessMode.Image)\n * @returns {ImageData} Processed image data\n */\n processImage(input, width, height, processMode = ProcessMode.Image) {\n this._ensureInitialized();\n const imageData = this._platformAPI.toImageData(input, width, height);\n const Module = this._getWasmModule();\n\n this._ensureBuffers(imageData.width, imageData.height);\n\n const bufferSize = imageData.width * imageData.height * 4;\n\n try {\n const buffer = this._getWasmBuffer();\n \n const srcView = new Uint8Array(buffer, this.srcBufferPtr, bufferSize);\n srcView.set(imageData.data);\n\n const result = Module.ccall(\n 'ProcessImageRGBA',\n 'number',\n ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n [\n this.enginePtr,\n this.srcBufferPtr,\n imageData.width,\n imageData.height,\n imageData.width * 4,\n this.dstBufferPtr,\n processMode\n ]\n );\n\n checkResult(result, 'Failed to process image');\n\n const currentBuffer = this._getWasmBuffer();\n const dstView = new Uint8Array(currentBuffer, this.dstBufferPtr, bufferSize);\n const processedData = new Uint8ClampedArray(dstView);\n\n return new ImageData(processedData, imageData.width, imageData.height);\n } catch (error) {\n if (error instanceof FacebetterError) {\n throw error;\n }\n throw new FacebetterError(`Image processing error: ${error.message}`);\n }\n }\n\n /**\n * Ensures the engine is initialized\n * @private\n * @throws {FacebetterError} If engine is not initialized\n */\n _ensureInitialized() {\n if (!this.initialized || !this.enginePtr) {\n throw new FacebetterError('Engine not initialized. Call init() first.');\n }\n }\n\n /**\n * Ensures gpupixel_canvas exists in the DOM (browser only)\n * This canvas is required by GPUPixel for WebGL context creation\n * @private\n */\n _ensureGPUPixelCanvas() {\n if (typeof document === 'undefined') {\n return;\n }\n \n let canvas = document.getElementById('gpupixel_canvas');\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = 'gpupixel_canvas';\n canvas.style.display = 'none';\n canvas.width = 1;\n canvas.height = 1;\n document.body.appendChild(canvas);\n this._createdGPUPixelCanvas = true;\n }\n this._gpupixelCanvas = canvas;\n }\n\n /**\n * Cleans up gpupixel_canvas if it was created by this engine instance (browser only)\n * @private\n */\n _cleanupGPUPixelCanvas() {\n if (this._createdGPUPixelCanvas && this._gpupixelCanvas) {\n this._gpupixelCanvas.remove();\n this._gpupixelCanvas = null;\n this._createdGPUPixelCanvas = false;\n }\n }\n\n /**\n * Ensures offscreen canvas exists and matches the required dimensions (browser only)\n * This canvas is reused for video processing to avoid creating temporary canvases\n * @private\n * @param {number} width - Required canvas width\n * @param {number} height - Required canvas height\n */\n _ensureOffscreenCanvas(width, height) {\n if (typeof document === 'undefined') {\n return null;\n }\n \n if (!this._offscreenCanvas || \n this._offscreenCanvas.width !== width || \n this._offscreenCanvas.height !== height) {\n this._offscreenCanvas = document.createElement('canvas');\n this._offscreenCanvas.width = width;\n this._offscreenCanvas.height = height;\n this._offscreenCtx = this._offscreenCanvas.getContext('2d', { willReadFrequently: true });\n }\n return this._offscreenCanvas;\n }\n\n}\n\n","/**\n * Browser-specific Image Utilities\n * Uses DOM APIs (canvas, ImageData, etc.)\n */\n\nimport { FacebetterError } from '../core/errors.js';\n\n/**\n * Converts various image sources to ImageData (browser version)\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|Uint8ClampedArray} source - Image source\n * @param {number} width - Image width (required if source is Uint8ClampedArray)\n * @param {number} height - Image height (required if source is Uint8ClampedArray)\n * @returns {ImageData} ImageData object\n */\nexport function toImageData(source, width, height) {\n if (source instanceof ImageData) {\n return source;\n }\n\n if (source instanceof HTMLCanvasElement || source instanceof HTMLVideoElement) {\n const canvas = source instanceof HTMLCanvasElement ? source : document.createElement('canvas');\n if (source instanceof HTMLVideoElement) {\n canvas.width = source.videoWidth;\n canvas.height = source.videoHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(source, 0, 0);\n }\n const ctx = canvas.getContext('2d');\n return ctx.getImageData(0, 0, canvas.width, canvas.height);\n }\n\n if (source instanceof HTMLImageElement) {\n const canvas = document.createElement('canvas');\n canvas.width = source.naturalWidth || source.width;\n canvas.height = source.naturalHeight || source.height;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(source, 0, 0);\n return ctx.getImageData(0, 0, canvas.width, canvas.height);\n }\n\n if (source instanceof Uint8ClampedArray) {\n if (width === undefined || height === undefined) {\n throw new FacebetterError('Width and height are required when source is Uint8ClampedArray');\n }\n return new ImageData(source, width, height);\n }\n\n throw new FacebetterError('Unsupported image source type');\n}\n\n/**\n * Gets User-Agent string for web platform\n * @returns {string} User-Agent string\n */\nexport function getUserAgentString() {\n return 'FB/1.0 (web; wasm32)';\n}\n\n/**\n * Generates HMAC-SHA256 signature (browser version)\n * @param {string} key - HMAC key (app_key)\n * @param {string} data - Data to sign (timestamp string)\n * @returns {Promise<string>} Promise that resolves with hex-encoded signature\n */\nexport async function generateHMACSignature(key, data) {\n const encoder = new TextEncoder();\n const keyData = encoder.encode(key);\n const messageData = encoder.encode(data);\n\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n const signature = await crypto.subtle.sign('HMAC', cryptoKey, messageData);\n\n // Convert to hex string\n const hashArray = Array.from(new Uint8Array(signature));\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n return hashHex;\n}\n\n/**\n * Calls online_auth API to verify app_key (browser version)\n * @param {string} appId - Application ID\n * @param {string} appKey - Application key\n * @returns {Promise<Object>} Promise that resolves with response data\n */\nexport async function verifyAppKeyOnline(appId, appKey) {\n try {\n const timestamp = Math.floor(Date.now() / 1000);\n const timestampStr = timestamp.toString();\n const hmacSignature = await generateHMACSignature(appKey, timestampStr);\n\n const requestBody = {\n p_app_id: appId,\n p_hmac_signature: hmacSignature,\n p_timestamp: timestamp,\n p_user_agent: getUserAgentString()\n };\n\n const response = await fetch('https://facebetter.pixpark.net/rest/v1/rpc/online_auth', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': getUserAgentString()\n },\n body: JSON.stringify(requestBody)\n });\n\n const responseData = await response.json();\n return responseData;\n } catch (error) {\n console.error('Online auth request failed:', error);\n return null;\n }\n}\n\n","/**\n * ESM Entry Point\n * For Vue/React/Vite/Webpack (ES Module)\n * Uses facebetter-core npm package for WASM module loading\n */\n\nimport { BeautyEffectEngine } from '../core/engine.js';\nimport { EngineConfig } from '../core/config.js';\nimport { FacebetterError } from '../core/errors.js';\nimport * as constants from '../core/constants.js';\n\n// ESM-specific WASM loader\nlet wasmModuleInstance = null;\nlet wasmModulePromise = null;\n\n/**\n * Loads the WebAssembly module (ESM version)\n * Supports ESM format WASM modules (generated with MODULARIZE and EXPORT_ES6)\n * With SINGLE_FILE=1, WASM binary and data files are embedded in the JS file\n * @param {Object} [options] - Options\n * @param {string} [options.wasmUrl] - Custom WASM module URL (defaults to facebetter-core npm package)\n * @param {Function} [options.locateFile] - Custom locateFile function (usually not needed with SINGLE_FILE=1)\n * @returns {Promise<Object>} Promise that resolves with the WASM module\n */\nexport async function loadWasmModule(options = {}) {\n if (wasmModuleInstance) {\n return wasmModuleInstance;\n }\n\n if (wasmModulePromise) {\n return wasmModulePromise;\n }\n\n wasmModulePromise = (async () => {\n // Try to import the WASM module factory\n // facebetter-core.js is an Emscripten-generated ESM file (with MODULARIZE and EXPORT_ES6)\n // It's provided by the facebetter-core npm package\n let FaceBetterModuleFactory;\n \n try {\n // Get the WASM module\n if (options.wasmUrl) {\n // If custom URL is provided, use it (for backward compatibility or custom builds)\n const wasmModule = await import(options.wasmUrl);\n FaceBetterModuleFactory = wasmModule.default || wasmModule.createFaceBetterModule;\n } else {\n // Import from facebetter-core npm package\n const wasmModule = await import('facebetter-core');\n \n // Get the factory function (default export or named export)\n FaceBetterModuleFactory = wasmModule.default || wasmModule.createFaceBetterModule;\n }\n \n if (!FaceBetterModuleFactory) {\n throw new Error('WASM module does not export createFaceBetterModule function');\n }\n } catch (e) {\n throw new FacebetterError(`Failed to load WASM module: ${e.message}`);\n }\n\n // Configure module options\n // With SINGLE_FILE=1, WASM binary and data files are embedded in the JS file\n // No need to handle .wasm and .data file paths separately\n const moduleOptions = {\n locateFile: options.locateFile || function(path, prefix) {\n // With SINGLE_FILE=1, Emscripten handles embedded files automatically\n // Custom locateFile is only needed if user provides one\n return prefix + path;\n },\n ...options\n };\n\n // Initialize the module (MODULARIZE returns a Promise)\n wasmModuleInstance = await FaceBetterModuleFactory(moduleOptions);\n \n if (!wasmModuleInstance) {\n throw new FacebetterError('Failed to initialize WASM module');\n }\n\n wasmModuleInstance.ready = true;\n return wasmModuleInstance;\n })();\n\n return wasmModulePromise;\n}\n\n/**\n * Gets the current WASM module instance\n * @returns {Object} WASM module instance\n * @throws {Error} If module is not loaded\n */\nexport function getWasmModule() {\n if (!wasmModuleInstance) {\n throw new Error('WASM module not loaded. Call loadWasmModule() first or use BeautyEffectEngine.init()');\n }\n return wasmModuleInstance;\n}\n\n/**\n * Gets the current WASM memory buffer\n * @returns {ArrayBuffer} Current WASM memory buffer\n */\nexport function getWasmBuffer() {\n const Module = getWasmModule();\n \n if (Module.buffer) {\n return Module.buffer;\n } else if (Module.HEAPU8 && Module.HEAPU8.buffer) {\n return Module.HEAPU8.buffer;\n } else if (Module.asm && Module.asm.memory) {\n return Module.asm.memory.buffer;\n }\n \n throw new Error('Unable to access WASM memory buffer');\n}\n\n// Browser-specific image utilities (ESM version can use browser APIs)\nimport * as imageUtils from '../browser/image-utils.js';\n\n// Browser-specific GPU canvas management\nfunction ensureGPUPixelCanvas() {\n if (typeof document === 'undefined') {\n return;\n }\n \n let canvas = document.getElementById('gpupixel_canvas');\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = 'gpupixel_canvas';\n canvas.style.display = 'none';\n canvas.width = 1;\n canvas.height = 1;\n if (document.body) {\n document.body.appendChild(canvas);\n }\n }\n}\n\nfunction cleanupGPUPixelCanvas() {\n // Cleanup is handled by engine instance\n}\n\n// Create platform API\nconst platformAPI = {\n loadWasmModule: () => loadWasmModule(),\n getWasmModule,\n getWasmBuffer,\n toImageData: imageUtils.toImageData,\n verifyAppKeyOnline: imageUtils.verifyAppKeyOnline,\n ensureGPUPixelCanvas,\n cleanupGPUPixelCanvas\n};\n\n// Export factory function\nexport function createBeautyEffectEngine(config) {\n return new BeautyEffectEngine(config, platformAPI);\n}\n\n// Create a wrapped BeautyEffectEngine class that automatically injects platformAPI\n// This allows users to use: new BeautyEffectEngine(config) without passing platformAPI\nclass ESMBeautyEffectEngine extends BeautyEffectEngine {\n constructor(config) {\n // Automatically inject platformAPI for ESM environment\n super(config, platformAPI);\n }\n}\n\n// Export all constants and classes\nexport {\n ESMBeautyEffectEngine as BeautyEffectEngine,\n EngineConfig,\n FacebetterError\n};\n\n// Export constants with proper names\nexport const BeautyType = constants.BeautyType;\nexport const BasicParam = constants.BasicParam;\nexport const ReshapeParam = constants.ReshapeParam;\nexport const MakeupParam = constants.MakeupParam;\nexport const BackgroundMode = constants.BackgroundMode;\nexport const ProcessMode = constants.ProcessMode;\n\n// Default export\nexport default {\n BeautyEffectEngine: ESMBeautyEffectEngine,\n EngineConfig,\n FacebetterError,\n ...constants,\n loadWasmModule\n};\n\n"],"names":["BeautyType","BasicParam","ReshapeParam","MakeupParam","BackgroundMode","ProcessMode","imageUtils.toImageData","imageUtils.verifyAppKeyOnline","constants.BeautyType","constants.BasicParam","constants.ReshapeParam","constants.MakeupParam","constants.BackgroundMode","constants.ProcessMode"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,eAAe,SAAS,KAAK,CAAC;AAC3C,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE;AAClC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,IAAI,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;AAClC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,kBAAkB,EAAE;AACvE,EAAE,IAAI,MAAM,KAAK,CAAC,EAAE;AACpB,IAAI,MAAM,IAAI,eAAe,CAAC,CAAC,EAAE,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACjF,GAAG;AACH;;ACzBA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACO,MAAM,YAAY,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE;AAC3B,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;AACtC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC;AACxC,IAAI,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC;AAClD,IAAI,IAAI,CAAC,YAAY,GAAG,6BAA6B,CAAC;AACtD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1B,MAAM,OAAO,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACpF,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;AACnF,WAAW,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACvF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7N,GAAG;AACH;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,YAAU,GAAG;AAC1B,EAAE,KAAK,EAAE,CAAC;AACV,EAAE,OAAO,EAAE,CAAC;AACZ,EAAE,MAAM,EAAE,CAAC;AACX,EAAE,iBAAiB,EAAE,CAAC;AACtB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACO,MAAMC,YAAU,GAAG;AAC1B,EAAE,SAAS,EAAE,CAAC;AACd,EAAE,UAAU,EAAE,CAAC;AACf,EAAE,SAAS,EAAE,CAAC;AACd,EAAE,QAAQ,EAAE,CAAC;AACb,CAAC,CAAC;AACF;AACA;AACA;AACA;AACO,MAAMC,cAAY,GAAG;AAC5B,EAAE,QAAQ,EAAE,CAAC;AACb,EAAE,UAAU,EAAE,CAAC;AACf,EAAE,UAAU,EAAE,CAAC;AACf,EAAE,SAAS,EAAE,CAAC;AACd,EAAE,SAAS,EAAE,CAAC;AACd,EAAE,OAAO,EAAE,CAAC;AACZ,EAAE,IAAI,EAAE,CAAC;AACT,EAAE,QAAQ,EAAE,CAAC;AACb,EAAE,OAAO,EAAE,CAAC;AACZ,EAAE,WAAW,EAAE,CAAC;AAChB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACO,MAAMC,aAAW,GAAG;AAC3B,EAAE,QAAQ,EAAE,CAAC;AACb,EAAE,KAAK,EAAE,CAAC;AACV,CAAC,CAAC;AACF;AACA;AACA;AACA;AACO,MAAMC,gBAAc,GAAG;AAC9B,EAAE,IAAI,EAAE,CAAC;AACT,EAAE,IAAI,EAAE,CAAC;AACT,EAAE,KAAK,EAAE,CAAC;AACV,CAAC,CAAC;AACF;AACA;AACA;AACA;AACO,MAAMC,aAAW,GAAG;AAC3B,EAAE,KAAK,EAAE,CAAC;AACV,EAAE,KAAK,EAAE,CAAC;AACV,CAAC;;;;;;;;;;;;AChED;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE;AACnC,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM,MAAM,IAAI,eAAe,CAAC,mEAAmE,CAAC,CAAC;AACrG,KAAK;AACL;AACA,IAAI,IAAI,CAAC,WAAW,EAAE;AACtB,MAAM,MAAM,IAAI,eAAe,CAAC,0BAA0B,CAAC,CAAC;AAC5D,KAAK;AACL;AACA;AACA,IAAI,IAAI,YAAY,CAAC;AACrB,IAAI,IAAI,MAAM,YAAY,YAAY,EAAE;AACxC,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,KAAK,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACrD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9C,KAAK,MAAM;AACX,MAAM,MAAM,IAAI,eAAe,CAAC,sEAAsE,CAAC,CAAC;AACxG,KAAK;AACL;AACA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE;AACjC,MAAM,MAAM,IAAI,eAAe,CAAC,kBAAkB,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9E,KAAK;AACL;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;AAC/B,IAAI,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;AACpC,IAAI,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;AACtC,IAAI,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;AAChD,IAAI,IAAI,CAAC,YAAY,GAAG,6BAA6B,CAAC;AACtD,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC1B,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC7B,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC7B,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC7B,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACxB;AACA;AACA,IAAI,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;AACpC,IAAI,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,cAAc,CAAC;AACtD,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC;AACpD,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC;AACpD,IAAI,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,WAAW,CAAC;AAChD,IAAI,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,kBAAkB,CAAC;AAC9D,IAAI,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,oBAAoB,CAAC;AAClE,IAAI,IAAI,CAAC,sBAAsB,GAAG,WAAW,CAAC,qBAAqB,CAAC;AACpE;AACA;AACA,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAChC,IAAI,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACxC,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACjC,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC9B;AACA;AACA,IAAI,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACpC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACnC,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACnD,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE;AACrC,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK;AACtC,MAAM,UAAU,CAAC,MAAM;AACvB,QAAQ,MAAM,CAAC,IAAI,eAAe;AAClC,UAAU,CAAC,EAAE,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,uEAAuE,CAAC;AAC1H,UAAU,SAAS;AACnB,SAAS,CAAC,CAAC;AACX,OAAO,EAAE,OAAO,CAAC,CAAC;AAClB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE;AAChC,IAAI,IAAI,KAAK,YAAY,eAAe,EAAE;AAC1C,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA,IAAI,IAAI,SAAS,GAAG,eAAe,CAAC;AACpC,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,wBAAwB,CAAC;AAC5D;AACA;AACA,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE;AAClF,MAAM,SAAS,GAAG,SAAS,CAAC;AAC5B,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;AACvF,MAAM,SAAS,GAAG,eAAe,CAAC;AAClC,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;AACnF,MAAM,SAAS,GAAG,iBAAiB,CAAC;AACpC,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;AACtF,MAAM,SAAS,GAAG,eAAe,CAAC;AAClC,KAAK;AACL;AACA,IAAI,OAAO,IAAI,eAAe;AAC9B,MAAM,OAAO,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO;AAClD,MAAM,SAAS;AACf,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE,EAAE;AAC3B;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1B,MAAM,OAAO;AACb,KAAK;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAC3B,MAAM,OAAO,IAAI,CAAC,YAAY,CAAC;AAC/B,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,YAAY;AACrC,MAAM,IAAI;AACV,QAAQ,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;AACrD,QAAQ,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC;AACzD;AACA;AACA,QAAQ,IAAI;AACZ,UAAU,MAAM,OAAO,CAAC,IAAI,CAAC;AAC7B,YAAY,IAAI,CAAC,gBAAgB;AACjC,YAAY,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,qBAAqB,CAAC;AACnE,WAAW,CAAC,CAAC;AACb,SAAS,CAAC,OAAO,KAAK,EAAE;AACxB,UAAU,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC;AACxE,SAAS;AACT;AACA,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAC7C;AACA,QAAQ,IAAI,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC;AAChD;AACA;AACA,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACxF,UAAU,IAAI;AACd;AACA,YAAY,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;AACpD,cAAc,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AAC/D,cAAc,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,uBAAuB,CAAC;AACvE,aAAa,CAAC,CAAC;AACf;AACA,YAAY,IAAI,CAAC,YAAY,EAAE;AAC/B,cAAc,MAAM,IAAI,eAAe;AACvC,gBAAgB,4FAA4F;AAC5G,gBAAgB,qBAAqB;AACrC,eAAe,CAAC;AAChB,aAAa;AACb;AACA;AACA,YAAY,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AAC5D,YAAY,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;AAC/E,WAAW,CAAC,OAAO,KAAK,EAAE;AAC1B,YAAY,IAAI,KAAK,YAAY,eAAe,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;AAC9E,cAAc,MAAM,IAAI,eAAe;AACvC,gBAAgB,CAAC,sCAAsC,EAAE,WAAW,CAAC,yEAAyE,CAAC;AAC/I,gBAAgB,cAAc;AAC9B,eAAe,CAAC;AAChB,aAAa;AACb,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;AAC/E,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,QAAQ,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK;AACtC,UAAU,0BAA0B;AACpC,UAAU,QAAQ;AAClB,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC9B,UAAU;AACV,YAAY,IAAI,CAAC,YAAY;AAC7B,YAAY,gBAAgB,IAAI,EAAE;AAClC,WAAW;AACX,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,UAAU,MAAM,IAAI,eAAe;AACnC,YAAY,mGAAmG;AAC/G,YAAY,sBAAsB;AAClC,WAAW,CAAC;AACZ,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AACnC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAChC,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC,OAAO,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC,QAAQ,MAAM,KAAK,CAAC;AACpB,OAAO;AACP,KAAK,GAAG,CAAC;AACT;AACA,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC9C,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAC3B,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC/B,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAC3B,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC/B,KAAK;AACL;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAClF,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC1B,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC7B,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACxB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC7B;AACA;AACA,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC/B,MAAM,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACnC,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAChC,KAAK;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACrC,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACpC,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,MAAM,EAAE;AAC7B;AACA,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC;AAChC,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AAC/B,MAAM,cAAc;AACpB,MAAM,QAAQ;AACd,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC1C,MAAM;AACN,QAAQ,MAAM,CAAC,cAAc,IAAI,KAAK;AACtC,QAAQ,MAAM,CAAC,WAAW,IAAI,KAAK;AACnC,QAAQ,MAAM,CAAC,KAAK,IAAI,CAAC;AACzB,QAAQ,MAAM,CAAC,QAAQ,IAAI,EAAE;AAC7B,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,WAAW,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;AACpD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,UAAU,EAAE,OAAO,EAAE;AAC5C,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AAC/B,MAAM,sBAAsB;AAC5B,MAAM,QAAQ;AACd,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACpC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,KAAK,CAAC;AACN;AACA,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AACnF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,UAAU,EAAE;AAClC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AAC/B,MAAM,qBAAqB;AAC3B,MAAM,QAAQ;AACd,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC1B,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;AAClC,KAAK,CAAC;AACN;AACA,IAAI,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;AACvB,MAAM,MAAM,IAAI,eAAe,CAAC,oCAAoC,CAAC,CAAC;AACtE,KAAK;AACL;AACA,IAAI,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,qBAAqB,GAAG;AAC1B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AAC/B,MAAM,uBAAuB;AAC7B,MAAM,QAAQ;AACd,MAAM,CAAC,QAAQ,CAAC;AAChB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AACtB,KAAK,CAAC;AACN;AACA,IAAI,WAAW,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;AAC9D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE;AAC9B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE;AAChC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAChE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE;AAC/B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9C,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;AAChC,MAAM,MAAM,IAAI,eAAe,CAAC,6CAA6C,CAAC,CAAC;AAC/E,KAAK;AACL;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AAC/B,MAAM,YAAY;AAClB,MAAM,QAAQ;AACd,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACpC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC;AACpC,KAAK,CAAC;AACN;AACA,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,8BAA8B,CAAC,CAAC,CAAC;AAC1D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,wBAAwB,CAAC,IAAI,EAAE;AACjC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AAC/B,MAAM,0BAA0B;AAChC,MAAM,QAAQ;AACd,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC1B,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;AAC5B,KAAK,CAAC;AACN;AACA,IAAI,WAAW,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC;AACjE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,yBAAyB,CAAC,KAAK,EAAE;AACnC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC/C,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,IAAI,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACtD;AACA,IAAI,IAAI;AACR,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAC3C,MAAM,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;AACtE,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC/B;AACA,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AACjC,QAAQ,2BAA2B;AACnC,QAAQ,QAAQ;AAChB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC1D,QAAQ;AACR,UAAU,IAAI,CAAC,SAAS;AACxB,UAAU,cAAc;AACxB,UAAU,SAAS,CAAC,KAAK;AACzB,UAAU,SAAS,CAAC,MAAM;AAC1B,UAAU,SAAS,CAAC,KAAK,GAAG,CAAC;AAC7B,SAAS;AACT,OAAO,CAAC;AACR;AACA,MAAM,WAAW,CAAC,MAAM,EAAE,wCAAwC,CAAC,CAAC;AACpE,KAAK,SAAS;AACd,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACnC,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE;AAChC,IAAI,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;AAC5C;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,GAAG,YAAY,EAAE;AACxC,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAC3C;AACA,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;AAC7B,QAAQ,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACxC,OAAO;AACP,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;AAC7B,QAAQ,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACxC,OAAO;AACP;AACA,MAAM,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACvD,MAAM,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACvD,MAAM,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC;AACrC;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACpD,QAAQ,MAAM,IAAI,eAAe,CAAC,mCAAmC,CAAC,CAAC;AACvE,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAGA,aAAW,CAAC,KAAK,EAAE;AACtE,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC1E,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AAC3D;AACA,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D;AACA,IAAI,IAAI;AACR,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAC3C;AACA,MAAM,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAC5E,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAClC;AACA,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AACjC,QAAQ,kBAAkB;AAC1B,QAAQ,QAAQ;AAChB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC9E,QAAQ;AACR,UAAU,IAAI,CAAC,SAAS;AACxB,UAAU,IAAI,CAAC,YAAY;AAC3B,UAAU,SAAS,CAAC,KAAK;AACzB,UAAU,SAAS,CAAC,MAAM;AAC1B,UAAU,SAAS,CAAC,KAAK,GAAG,CAAC;AAC7B,UAAU,IAAI,CAAC,YAAY;AAC3B,UAAU,WAAW;AACrB,SAAS;AACT,OAAO,CAAC;AACR;AACA,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;AACrD;AACA,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAClD,MAAM,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AACnF,MAAM,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3D;AACA,MAAM,OAAO,IAAI,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AAC7E,KAAK,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,IAAI,KAAK,YAAY,eAAe,EAAE;AAC5C,QAAQ,MAAM,KAAK,CAAC;AACpB,OAAO;AACP,MAAM,MAAM,IAAI,eAAe,CAAC,CAAC,wBAAwB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5E,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC9C,MAAM,MAAM,IAAI,eAAe,CAAC,4CAA4C,CAAC,CAAC;AAC9E,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,GAAG;AAC1B,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACzC,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAC5D,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChD,MAAM,MAAM,CAAC,EAAE,GAAG,iBAAiB,CAAC;AACpC,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AACpC,MAAM,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AACvB,MAAM,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACxC,MAAM,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;AACzC,KAAK;AACL,IAAI,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,GAAG;AAC3B,IAAI,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,eAAe,EAAE;AAC7D,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;AACpC,MAAM,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAClC,MAAM,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AAC1C,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE;AACxC,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACzC,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAC9B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,KAAK,KAAK,KAAK;AAC7C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,MAAM,EAAE;AACjD,MAAM,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC/D,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC;AAC1C,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC;AAC5C,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;AAChG,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,gBAAgB,CAAC;AACjC,GAAG;AACH;AACA;;ACzmBA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AACnD,EAAE,IAAI,MAAM,YAAY,SAAS,EAAE;AACnC,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA,EAAE,IAAI,MAAM,YAAY,iBAAiB,IAAI,MAAM,YAAY,gBAAgB,EAAE;AACjF,IAAI,MAAM,MAAM,GAAG,MAAM,YAAY,iBAAiB,GAAG,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACnG,IAAI,IAAI,MAAM,YAAY,gBAAgB,EAAE;AAC5C,MAAM,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AACvC,MAAM,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;AACzC,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClC,KAAK;AACL,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACxC,IAAI,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/D,GAAG;AACH;AACA,EAAE,IAAI,MAAM,YAAY,gBAAgB,EAAE;AAC1C,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACpD,IAAI,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC;AACvD,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC;AAC1D,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACxC,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,IAAI,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/D,GAAG;AACH;AACA,EAAE,IAAI,MAAM,YAAY,iBAAiB,EAAE;AAC3C,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;AACrD,MAAM,MAAM,IAAI,eAAe,CAAC,gEAAgE,CAAC,CAAC;AAClG,KAAK;AACL,IAAI,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAChD,GAAG;AACH;AACA,EAAE,MAAM,IAAI,eAAe,CAAC,+BAA+B,CAAC,CAAC;AAC7D,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,SAAS,kBAAkB,GAAG;AACrC,EAAE,OAAO,sBAAsB,CAAC;AAChC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE;AACvD,EAAE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AACpC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACtC,EAAE,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3C;AACA,EAAE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS;AACjD,IAAI,KAAK;AACT,IAAI,OAAO;AACX,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;AACrC,IAAI,KAAK;AACT,IAAI,CAAC,MAAM,CAAC;AACZ,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AAC7E;AACA;AACA,EAAE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1D,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/E,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE;AACxD,EAAE,IAAI;AACN,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACpD,IAAI,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC9C,IAAI,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAC5E;AACA,IAAI,MAAM,WAAW,GAAG;AACxB,MAAM,QAAQ,EAAE,KAAK;AACrB,MAAM,gBAAgB,EAAE,aAAa;AACrC,MAAM,WAAW,EAAE,SAAS;AAC5B,MAAM,YAAY,EAAE,kBAAkB,EAAE;AACxC,KAAK,CAAC;AACN;AACA,IAAI,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,wDAAwD,EAAE;AAC3F,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,OAAO,EAAE;AACf,QAAQ,cAAc,EAAE,kBAAkB;AAC1C,QAAQ,YAAY,EAAE,kBAAkB,EAAE;AAC1C,OAAO;AACP,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AACvC,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC/C,IAAI,OAAO,YAAY,CAAC;AACxB,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;AACxD,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;;ACvHA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA,IAAI,kBAAkB,GAAG,IAAI,CAAC;AAC9B,IAAI,iBAAiB,GAAG,IAAI,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,cAAc,CAAC,OAAO,GAAG,EAAE,EAAE;AACnD,EAAE,IAAI,kBAAkB,EAAE;AAC1B,IAAI,OAAO,kBAAkB,CAAC;AAC9B,GAAG;AACH;AACA,EAAE,IAAI,iBAAiB,EAAE;AACzB,IAAI,OAAO,iBAAiB,CAAC;AAC7B,GAAG;AACH;AACA,EAAE,iBAAiB,GAAG,CAAC,YAAY;AACnC;AACA;AACA;AACA,IAAI,IAAI,uBAAuB,CAAC;AAChC;AACA,IAAI,IAAI;AACR;AACA,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;AAC3B;AACA,QAAQ,MAAM,UAAU,GAAG,MAAM,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;AACzD,QAAQ,uBAAuB,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,sBAAsB,CAAC;AAC1F,OAAO,MAAM;AACb;AACA,QAAQ,MAAM,UAAU,GAAG,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAC3D;AACA;AACA,QAAQ,uBAAuB,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,sBAAsB,CAAC;AAC1F,OAAO;AACP;AACA,MAAM,IAAI,CAAC,uBAAuB,EAAE;AACpC,QAAQ,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;AACvF,OAAO;AACP,KAAK,CAAC,OAAO,CAAC,EAAE;AAChB,MAAM,MAAM,IAAI,eAAe,CAAC,CAAC,4BAA4B,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5E,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,MAAM,aAAa,GAAG;AAC1B,MAAM,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS,IAAI,EAAE,MAAM,EAAE;AAC/D;AACA;AACA,QAAQ,OAAO,MAAM,GAAG,IAAI,CAAC;AAC7B,OAAO;AACP,MAAM,GAAG,OAAO;AAChB,KAAK,CAAC;AACN;AACA;AACA,IAAI,kBAAkB,GAAG,MAAM,uBAAuB,CAAC,aAAa,CAAC,CAAC;AACtE;AACA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC7B,MAAM,MAAM,IAAI,eAAe,CAAC,kCAAkC,CAAC,CAAC;AACpE,KAAK;AACL;AACA,IAAI,kBAAkB,CAAC,KAAK,GAAG,IAAI,CAAC;AACpC,IAAI,OAAO,kBAAkB,CAAC;AAC9B,GAAG,GAAG,CAAC;AACP;AACA,EAAE,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,GAAG;AAChC,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC3B,IAAI,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;AAC5G,GAAG;AACH,EAAE,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,GAAG;AAChC,EAAE,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;AACjC;AACA,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE;AACrB,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC;AACzB,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AACpD,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAChC,GAAG,MAAM,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE;AAC9C,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AACpC,GAAG;AACH;AACA,EAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACzD,CAAC;AAID;AACA;AACA,SAAS,oBAAoB,GAAG;AAChC,EAAE,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACvC,IAAI,OAAO;AACX,GAAG;AACH;AACA,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAC1D,EAAE,IAAI,CAAC,MAAM,EAAE;AACf,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC9C,IAAI,MAAM,CAAC,EAAE,GAAG,iBAAiB,CAAC;AAClC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAClC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AACrB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACtB,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE;AACvB,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACxC,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA,SAAS,qBAAqB,GAAG;AACjC;AACA,CAAC;AACD;AACA;AACA,MAAM,WAAW,GAAG;AACpB,EAAE,cAAc,EAAE,MAAM,cAAc,EAAE;AACxC,EAAE,aAAa;AACf,EAAE,aAAa;AACf,EAAE,WAAW,EAAEC,WAAsB;AACrC,EAAE,kBAAkB,EAAEC,kBAA6B;AACnD,EAAE,oBAAoB;AACtB,EAAE,qBAAqB;AACvB,CAAC,CAAC;AACF;AACA;AACO,SAAS,wBAAwB,CAAC,MAAM,EAAE;AACjD,EAAE,OAAO,IAAI,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACrD,CAAC;AACD;AACA;AACA;AACA,MAAM,qBAAqB,SAAS,kBAAkB,CAAC;AACvD,EAAE,WAAW,CAAC,MAAM,EAAE;AACtB;AACA,IAAI,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC/B,GAAG;AACH,CAAC;AAQD;AACA;AACY,MAAC,UAAU,GAAGC,aAAqB;AACnC,MAAC,UAAU,GAAGC,aAAqB;AACnC,MAAC,YAAY,GAAGC,eAAuB;AACvC,MAAC,WAAW,GAAGC,cAAsB;AACrC,MAAC,cAAc,GAAGC,iBAAyB;AAC3C,MAAC,WAAW,GAAGC,cAAsB;AACjD;AACA;AACA,YAAe;AACf,EAAE,kBAAkB,EAAE,qBAAqB;AAC3C,EAAE,YAAY;AACd,EAAE,eAAe;AACjB,EAAE,GAAG,SAAS;AACd,EAAE,cAAc;AAChB,CAAC;;;;"}
|
|
1
|
+
{"version":3,"file":"facebetter.esm.js","sources":["../src/core/errors.js","../src/core/config.js","../src/core/constants.js","../src/core/engine.js","../src/browser/image-utils.js","../src/esm/index.js"],"sourcesContent":["/**\n * Facebetter Error Classes\n * Platform-agnostic error handling\n */\n\n/**\n * Facebetter error class\n */\nexport class FacebetterError extends Error {\n constructor(message, code = -1) {\n super(message);\n this.name = 'FacebetterError';\n this.code = code;\n }\n}\n\n/**\n * Checks if a result code indicates success\n * @param {number} result - Result code from WASM function\n * @throws {FacebetterError} If result indicates failure\n */\nexport function checkResult(result, errorMessage = 'Operation failed') {\n if (result !== 0) {\n throw new FacebetterError(`${errorMessage} (error code: ${result})`, result);\n }\n}\n\n","/**\n * Engine Configuration\n * Platform-agnostic configuration class\n */\n\nimport { FacebetterError } from './errors.js';\n\n/**\n * Engine configuration class\n * Similar to EngineConfig struct in C++/Java/OC\n */\nexport class EngineConfig {\n /**\n * Creates a new EngineConfig instance\n * @param {Object} config - Configuration object\n * @param {string} [config.appId] - Application ID (required if licenseJson is not provided)\n * @param {string} [config.appKey] - Application key (required if licenseJson is not provided)\n * @param {string} [config.licenseJson] - License JSON string (optional, if provided, appId and appKey are not required)\n */\n constructor(config = {}) {\n this.appId = config.appId || null;\n this.appKey = config.appKey || null;\n this.licenseJson = config.licenseJson || null;\n this.resourcePath = '/facebetter/resource.bundle';\n }\n\n /**\n * Validates the configuration\n * @returns {boolean} True if valid\n */\n isValid() {\n // 如果提供了 licenseJson,则使用授权数据验证\n if (this.licenseJson) {\n return typeof this.licenseJson === 'string' && this.licenseJson.trim() !== '';\n }\n // 否则需要 appId 和 appKey\n return this.appId && typeof this.appId === 'string' && this.appId.trim() !== '' &&\n this.appKey && typeof this.appKey === 'string' && this.appKey.trim() !== '';\n }\n\n /**\n * Returns a string representation of the config\n * @returns {string} String representation\n */\n toString() {\n return `EngineConfig{appId='${this.appId ? this.appId.substring(0, Math.min(this.appId.length, 8)) + '...' : 'null'}', appKey='${this.appKey ? '***' : 'null'}', licenseJson=${this.licenseJson ? 'provided' : 'null'}}`;\n }\n}\n\n","/**\n * Facebetter Constants and Enums\n * Platform-agnostic constants\n */\n\n/**\n * Beauty type enumeration\n */\nexport const BeautyType = {\n Basic: 0, // 基础美颜\n Reshape: 1, // 面部重塑\n Makeup: 2, // 美妆效果\n VirtualBackground: 3 // 虚拟背景\n};\n\n/**\n * Basic beauty parameter enumeration\n */\nexport const BasicParam = {\n Smoothing: 0, // 磨皮\n Sharpening: 1, // 锐化\n Whitening: 2, // 美白\n Rosiness: 3 // 红润\n};\n\n/**\n * Face reshape parameter enumeration\n */\nexport const ReshapeParam = {\n FaceThin: 0, // 瘦脸\n FaceVShape: 1, // V脸\n FaceNarrow: 2, // 窄脸\n FaceShort: 3, // 短脸\n Cheekbone: 4, // 颧骨\n Jawbone: 5, // 下颌骨\n Chin: 6, // 下巴\n NoseSlim: 7, // 瘦鼻梁\n EyeSize: 8, // 大眼\n EyeDistance: 9 // 眼距\n};\n\n/**\n * Makeup parameter enumeration\n */\nexport const MakeupParam = {\n Lipstick: 0, // 口红\n Blush: 1 // 腮红\n};\n\n/**\n * Background mode enumeration\n */\nexport const BackgroundMode = {\n None: 0, // 无背景处理\n Blur: 1, // 模糊背景\n Image: 2 // 背景图片替换\n};\n\n/**\n * Process mode enumeration\n */\nexport const ProcessMode = {\n Image: 0, // 图片模式\n Video: 1 // 视频模式\n};\n\n/**\n * Virtual background options class\n * Matches the C++/Java/OC API design\n */\nexport class VirtualBackgroundOptions {\n /**\n * Creates a new VirtualBackgroundOptions instance\n * @param {Object} [options] - Options object\n * @param {number} [options.mode] - Background mode (use BackgroundMode enum)\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement} [options.backgroundImage] - Background image (required when mode is Image)\n */\n constructor(options = {}) {\n this.mode = options.mode !== undefined ? options.mode : BackgroundMode.None;\n this.backgroundImage = options.backgroundImage || null;\n }\n\n /**\n * Validates the options\n * @returns {boolean} True if valid\n */\n isValid() {\n if (this.mode === BackgroundMode.Image) {\n return this.backgroundImage !== null;\n }\n return true;\n }\n}\n\n","/**\n * Beauty Effect Engine Core\n * Platform-agnostic engine implementation with dependency injection\n */\n\nimport { EngineConfig } from './config.js';\nimport { FacebetterError, checkResult } from './errors.js';\nimport { ProcessMode, BackgroundMode } from './constants.js';\n\n/**\n * Beauty effect engine class\n * Provides high-level API for face beauty effects processing\n * Uses dependency injection for platform-specific functionality\n */\nexport class BeautyEffectEngine {\n /**\n * Creates a new BeautyEffectEngine instance\n * @param {EngineConfig|Object} config - EngineConfig object or configuration object\n * @param {Object} platformAPI - Platform-specific API (injected)\n * @param {Function} platformAPI.loadWasmModule - WASM module loader\n * @param {Function} platformAPI.getWasmModule - Get WASM module instance\n * @param {Function} platformAPI.getWasmBuffer - Get WASM memory buffer\n * @param {Function} platformAPI.toImageData - Convert to ImageData\n * @param {Function} platformAPI.verifyAppKeyOnline - Verify app key online\n * @param {Function} [platformAPI.ensureGPUPixelCanvas] - Ensure GPU canvas exists (browser only)\n * @param {Function} [platformAPI.cleanupGPUPixelCanvas] - Cleanup GPU canvas (browser only)\n */\n constructor(config, platformAPI) {\n if (!config) {\n throw new FacebetterError('Config is required. Expected EngineConfig or configuration object');\n }\n\n if (!platformAPI) {\n throw new FacebetterError('Platform API is required');\n }\n\n // 如果传入的是 EngineConfig 实例,直接使用;否则创建新的 EngineConfig\n let engineConfig;\n if (config instanceof EngineConfig) {\n engineConfig = config;\n } else if (config && typeof config === 'object') {\n engineConfig = new EngineConfig(config);\n } else {\n throw new FacebetterError('Invalid configuration. Expected EngineConfig or configuration object');\n }\n\n if (!engineConfig.isValid()) {\n throw new FacebetterError('Invalid config: ' + engineConfig.toString());\n }\n\n this.config = engineConfig;\n this.appId = engineConfig.appId;\n this.appKey = engineConfig.appKey;\n this.licenseJson = engineConfig.licenseJson;\n this.resourcePath = '/facebetter/resource.bundle';\n this.enginePtr = null;\n this.initialized = false;\n this.srcBufferPtr = null;\n this.dstBufferPtr = null;\n this.bufferSize = 0;\n \n // Store platform API\n this._platformAPI = platformAPI;\n this._loadWasmModule = platformAPI.loadWasmModule;\n this._getWasmModule = platformAPI.getWasmModule;\n this._getWasmBuffer = platformAPI.getWasmBuffer;\n this._toImageData = platformAPI.toImageData;\n this._verifyAppKeyOnline = platformAPI.verifyAppKeyOnline;\n this._ensureGPUPixelCanvas = platformAPI.ensureGPUPixelCanvas;\n this._cleanupGPUPixelCanvas = platformAPI.cleanupGPUPixelCanvas;\n \n // Browser-specific state\n this._gpupixelCanvas = null;\n this._createdGPUPixelCanvas = false;\n this._offscreenCanvas = null;\n this._offscreenCtx = null;\n \n // Automatically create gpupixel_canvas if it doesn't exist (browser only)\n if (this._ensureGPUPixelCanvas) {\n this._ensureGPUPixelCanvas();\n }\n \n // Start loading WASM module immediately in constructor\n this._wasmLoadPromise = this._loadWasmModule();\n this._initPromise = null;\n }\n\n /**\n * Creates a timeout promise\n * @private\n * @param {number} timeout - Timeout in milliseconds\n * @param {string} operation - Operation name for error message\n * @returns {Promise} Promise that rejects after timeout\n */\n _createTimeout(timeout, operation) {\n return new Promise((_, reject) => {\n setTimeout(() => {\n reject(new FacebetterError(\n `${operation} timed out after ${timeout}ms. Please check your network connection or try increasing the timeout.`,\n 'TIMEOUT'\n ));\n }, timeout);\n });\n }\n\n /**\n * Enhances error with context information\n * @private\n * @param {Error} error - Original error\n * @param {string} context - Context information\n * @returns {FacebetterError} Enhanced error\n */\n _enhanceError(error, context) {\n if (error instanceof FacebetterError) {\n return error;\n }\n\n let errorCode = 'UNKNOWN_ERROR';\n let message = error.message || 'Unknown error occurred';\n\n // Categorize errors\n if (error.message?.includes('timeout') || error.message?.includes('TIMEOUT')) {\n errorCode = 'TIMEOUT';\n } else if (error.message?.includes('network') || error.message?.includes('fetch')) {\n errorCode = 'NETWORK_ERROR';\n } else if (error.message?.includes('WASM') || error.message?.includes('wasm')) {\n errorCode = 'WASM_LOAD_ERROR';\n } else if (error.message?.includes('license') || error.message?.includes('auth')) {\n errorCode = 'LICENSE_ERROR';\n }\n\n return new FacebetterError(\n context ? `${context}: ${message}` : message,\n errorCode\n );\n }\n\n /**\n * Initializes the engine\n * @param {Object} [options] - Initialization options\n * @param {number} [options.timeout] - Timeout in milliseconds (default: 30000 for WASM, 10000 for auth)\n * @param {number} [options.authTimeout] - Timeout for online authentication in milliseconds (default: 10000)\n * @returns {Promise<void>} Promise that resolves when initialization is complete\n */\n async init(options = {}) {\n // 并发控制:如果已经初始化,直接返回\n if (this.initialized) {\n return;\n }\n\n // 并发控制:如果正在初始化,返回同一个 Promise\n if (this._initPromise) {\n return this._initPromise;\n }\n\n // 创建初始化 Promise\n this._initPromise = (async () => {\n try {\n const wasmTimeout = options.timeout || 30000;\n const authTimeout = options.authTimeout || 10000;\n\n // 等待 WASM 模块加载(带超时)\n try {\n await Promise.race([\n this._wasmLoadPromise,\n this._createTimeout(wasmTimeout, 'WASM module loading')\n ]);\n } catch (error) {\n throw this._enhanceError(error, 'Failed to load WASM module');\n }\n\n const Module = this._getWasmModule();\n\n let licenseJsonToUse = this.licenseJson;\n\n // 如果用户提供了 appId 和 appKey(但没有提供 licenseJson),则在 JS 层发送 HTTP 请求\n if (this.appId && this.appKey && !this.licenseJson && this._verifyAppKeyOnline) {\n try {\n // 在线认证(带超时)\n const authResponse = await Promise.race([\n this._verifyAppKeyOnline(this.appId, this.appKey),\n this._createTimeout(authTimeout, 'Online authentication')\n ]);\n \n if (!authResponse) {\n throw new FacebetterError(\n 'Failed to get server response from online_auth API. The server returned an empty response.',\n 'AUTH_EMPTY_RESPONSE'\n );\n }\n\n // 将服务器响应转换为 JSON 字符串,作为 licenseJson 传递给 WASM 层\n licenseJsonToUse = JSON.stringify(authResponse);\n console.log('Online auth response received, using as licenseJson');\n } catch (error) {\n if (error instanceof FacebetterError && error.code === 'TIMEOUT') {\n throw new FacebetterError(\n `Online authentication timed out after ${authTimeout}ms. Please check your network connection or provide licenseJson directly.`,\n 'AUTH_TIMEOUT'\n );\n }\n throw this._enhanceError(error, 'Failed to verify app key online');\n }\n }\n\n // 如果用户直接提供了 licenseJson,则直接使用\n // 如果通过 appId/appKey 获取到了响应,则使用响应作为 licenseJson\n // WASM 层只需要验证 licenseJson,不需要发送 HTTP 请求\n const enginePtr = Module.ccall(\n 'CreateBeautyEffectEngine',\n 'number',\n ['string', 'string'],\n [\n this.resourcePath,\n licenseJsonToUse || '' // 使用 licenseJson 验证\n ]\n );\n\n if (!enginePtr) {\n throw new FacebetterError(\n 'Failed to create BeautyEffect engine. This may be due to invalid license or resource path issues.',\n 'ENGINE_CREATE_FAILED'\n );\n }\n\n this.enginePtr = enginePtr;\n this.initialized = true;\n this._initPromise = null; // 清除 Promise 缓存,允许重新初始化(如果需要)\n } catch (error) {\n this._initPromise = null; // 清除 Promise 缓存,允许重试\n throw error;\n }\n })();\n\n return this._initPromise;\n }\n\n /**\n * Destroys the engine and releases resources\n */\n destroy() {\n if (!this.initialized || !this.enginePtr) {\n return;\n }\n\n const Module = this._getWasmModule();\n\n if (this.srcBufferPtr) {\n Module._free(this.srcBufferPtr);\n this.srcBufferPtr = null;\n }\n\n if (this.dstBufferPtr) {\n Module._free(this.dstBufferPtr);\n this.dstBufferPtr = null;\n }\n\n Module.ccall('DestroyBeautyEffectEngine', null, ['number'], [this.enginePtr]);\n this.enginePtr = null;\n this.initialized = false;\n this.bufferSize = 0;\n this._initPromise = null; // 清除初始化 Promise\n \n // Clean up offscreen canvas\n if (this._offscreenCanvas) {\n this._offscreenCanvas = null;\n this._offscreenCtx = null;\n }\n \n // Clean up gpupixel_canvas if we created it\n if (this._cleanupGPUPixelCanvas) {\n this._cleanupGPUPixelCanvas();\n }\n }\n\n /**\n * Sets log configuration\n * Can be called before init() since SetLogConfig is a global function\n * @param {Object} config - Log configuration\n * @param {boolean} config.consoleEnabled - Enable console logging\n * @param {boolean} config.fileEnabled - Enable file logging\n * @param {number} config.level - Log level\n * @param {string} config.fileName - Log file name\n * @returns {Promise<void>} Promise that resolves when log config is set\n */\n async setLogConfig(config) {\n // Wait for WASM module to be loaded (started in constructor)\n await this._wasmLoadPromise;\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'SetLogConfig',\n 'number',\n ['bool', 'bool', 'number', 'string'],\n [\n config.consoleEnabled || false,\n config.fileEnabled || false,\n config.level || 0,\n config.fileName || ''\n ]\n );\n\n checkResult(result, 'Failed to set log config');\n }\n\n /**\n * Enables or disables a beauty type\n * @param {number} beautyType - Beauty type (use BeautyType enum)\n * @param {boolean} enabled - Enable or disable\n */\n setBeautyTypeEnabled(beautyType, enabled) {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'SetBeautyTypeEnabled',\n 'number',\n ['number', 'number', 'number'],\n [this.enginePtr, beautyType, enabled ? 1 : 0]\n );\n\n checkResult(result, `Failed to ${enabled ? 'enable' : 'disable'} beauty type`);\n }\n\n /**\n * Checks if a beauty type is enabled\n * @param {number} beautyType - Beauty type (use BeautyType enum)\n * @returns {boolean} True if enabled\n */\n isBeautyTypeEnabled(beautyType) {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'IsBeautyTypeEnabled',\n 'number',\n ['number', 'number'],\n [this.enginePtr, beautyType]\n );\n\n if (result === -1) {\n throw new FacebetterError('Failed to check beauty type status');\n }\n\n return result === 1;\n }\n\n /**\n * Disables all beauty types\n */\n disableAllBeautyTypes() {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'DisableAllBeautyTypes',\n 'number',\n ['number'],\n [this.enginePtr]\n );\n\n checkResult(result, 'Failed to disable all beauty types');\n }\n\n /**\n * Sets a basic beauty parameter\n * @param {number} param - Parameter (use BasicParam enum)\n * @param {number} value - Parameter value (0.0 - 1.0)\n */\n setBasicParam(param, value) {\n this._ensureInitialized();\n this._setBeautyParam('SetBeautyParamBasic', param, value);\n }\n\n /**\n * Sets a reshape parameter\n * @param {number} param - Parameter (use ReshapeParam enum)\n * @param {number} value - Parameter value (0.0 - 1.0)\n */\n setReshapeParam(param, value) {\n this._ensureInitialized();\n this._setBeautyParam('SetBeautyParamReshape', param, value);\n }\n\n /**\n * Sets a makeup parameter\n * @param {number} param - Parameter (use MakeupParam enum)\n * @param {number} value - Parameter value (0.0 - 1.0)\n */\n setMakeupParam(param, value) {\n this._ensureInitialized();\n this._setBeautyParam('SetBeautyParamMakeup', param, value);\n }\n\n /**\n * Internal method to set beauty parameters\n * @private\n */\n _setBeautyParam(functionName, param, value) {\n if (value < 0 || value > 1) {\n throw new FacebetterError('Parameter value must be between 0.0 and 1.0');\n }\n\n const Module = this._getWasmModule();\n const result = Module.ccall(\n functionName,\n 'number',\n ['number', 'number', 'number'],\n [this.enginePtr, param, value]\n );\n\n checkResult(result, `Failed to set beauty parameter`);\n }\n\n /**\n * Sets virtual background options (unified API, matches C++/Java/OC)\n * @param {VirtualBackgroundOptions|Object} options - Virtual background options\n * @param {number} [options.mode] - Background mode (use BackgroundMode enum)\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement} [options.backgroundImage] - Background image (required when mode is Image)\n */\n setVirtualBackground(options) {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n \n // Support both VirtualBackgroundOptions object and plain object\n const opts = options.mode !== undefined ? options : { mode: BackgroundMode.None, backgroundImage: null };\n \n let imageData = null;\n let imageBufferPtr = null;\n \n try {\n // 如果提供了背景图片,转换为 ImageData 并准备缓冲区\n if (opts.backgroundImage) {\n imageData = this._toImageData(opts.backgroundImage);\n const bufferSize = imageData.width * imageData.height * 4;\n imageBufferPtr = Module._malloc(bufferSize);\n \n const buffer = this._getWasmBuffer();\n const view = new Uint8Array(buffer, imageBufferPtr, bufferSize);\n view.set(imageData.data);\n }\n \n // 使用统一的 SetVirtualBackground C 接口(与其他平台一致)\n const result = Module.ccall(\n 'SetVirtualBackground',\n 'number',\n ['number', 'number', 'number', 'number', 'number', 'number'],\n [\n this.enginePtr,\n opts.mode,\n imageBufferPtr || 0, // 如果为 null,传递 0\n imageData ? imageData.width : 0,\n imageData ? imageData.height : 0,\n imageData ? imageData.width * 4 : 0\n ]\n );\n \n checkResult(result, 'Failed to set virtual background');\n } finally {\n // 释放内存\n if (imageBufferPtr) {\n Module._free(imageBufferPtr);\n }\n }\n }\n\n\n /**\n * Ensures buffers are allocated for the given dimensions\n * @private\n */\n _ensureBuffers(width, height) {\n const requiredSize = width * height * 4;\n\n if (this.bufferSize < requiredSize) {\n const Module = this._getWasmModule();\n\n if (this.srcBufferPtr) {\n Module._free(this.srcBufferPtr);\n }\n if (this.dstBufferPtr) {\n Module._free(this.dstBufferPtr);\n }\n\n this.srcBufferPtr = Module._malloc(requiredSize);\n this.dstBufferPtr = Module._malloc(requiredSize);\n this.bufferSize = requiredSize;\n\n if (!this.srcBufferPtr || !this.dstBufferPtr) {\n throw new FacebetterError('Failed to allocate memory buffers');\n }\n }\n }\n\n /**\n * Processes an image\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|Uint8ClampedArray} input - Input image\n * @param {number} width - Image width (required if input is Uint8ClampedArray)\n * @param {number} height - Image height (required if input is Uint8ClampedArray)\n * @param {number} processMode - Process mode (use ProcessMode enum, default: ProcessMode.Image)\n * @returns {ImageData} Processed image data\n */\n processImage(input, width, height, processMode = ProcessMode.Image) {\n this._ensureInitialized();\n const imageData = this._platformAPI.toImageData(input, width, height);\n const Module = this._getWasmModule();\n\n this._ensureBuffers(imageData.width, imageData.height);\n\n const bufferSize = imageData.width * imageData.height * 4;\n\n try {\n const buffer = this._getWasmBuffer();\n \n const srcView = new Uint8Array(buffer, this.srcBufferPtr, bufferSize);\n srcView.set(imageData.data);\n\n const result = Module.ccall(\n 'ProcessImageRGBA',\n 'number',\n ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n [\n this.enginePtr,\n this.srcBufferPtr,\n imageData.width,\n imageData.height,\n imageData.width * 4,\n this.dstBufferPtr,\n processMode\n ]\n );\n\n checkResult(result, 'Failed to process image');\n\n const currentBuffer = this._getWasmBuffer();\n const dstView = new Uint8Array(currentBuffer, this.dstBufferPtr, bufferSize);\n const processedData = new Uint8ClampedArray(dstView);\n\n return new ImageData(processedData, imageData.width, imageData.height);\n } catch (error) {\n if (error instanceof FacebetterError) {\n throw error;\n }\n throw new FacebetterError(`Image processing error: ${error.message}`);\n }\n }\n\n /**\n * Ensures the engine is initialized\n * @private\n * @throws {FacebetterError} If engine is not initialized\n */\n _ensureInitialized() {\n if (!this.initialized || !this.enginePtr) {\n throw new FacebetterError('Engine not initialized. Call init() first.');\n }\n }\n\n /**\n * Ensures gpupixel_canvas exists in the DOM (browser only)\n * This canvas is required by GPUPixel for WebGL context creation\n * @private\n */\n _ensureGPUPixelCanvas() {\n if (typeof document === 'undefined') {\n return;\n }\n \n let canvas = document.getElementById('gpupixel_canvas');\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = 'gpupixel_canvas';\n canvas.style.display = 'none';\n canvas.width = 1;\n canvas.height = 1;\n document.body.appendChild(canvas);\n this._createdGPUPixelCanvas = true;\n }\n this._gpupixelCanvas = canvas;\n }\n\n /**\n * Cleans up gpupixel_canvas if it was created by this engine instance (browser only)\n * @private\n */\n _cleanupGPUPixelCanvas() {\n if (this._createdGPUPixelCanvas && this._gpupixelCanvas) {\n this._gpupixelCanvas.remove();\n this._gpupixelCanvas = null;\n this._createdGPUPixelCanvas = false;\n }\n }\n\n /**\n * Ensures offscreen canvas exists and matches the required dimensions (browser only)\n * This canvas is reused for video processing to avoid creating temporary canvases\n * @private\n * @param {number} width - Required canvas width\n * @param {number} height - Required canvas height\n */\n _ensureOffscreenCanvas(width, height) {\n if (typeof document === 'undefined') {\n return null;\n }\n \n if (!this._offscreenCanvas || \n this._offscreenCanvas.width !== width || \n this._offscreenCanvas.height !== height) {\n this._offscreenCanvas = document.createElement('canvas');\n this._offscreenCanvas.width = width;\n this._offscreenCanvas.height = height;\n this._offscreenCtx = this._offscreenCanvas.getContext('2d', { willReadFrequently: true });\n }\n return this._offscreenCanvas;\n }\n\n}\n\n","/**\n * Browser-specific Image Utilities\n * Uses DOM APIs (canvas, ImageData, etc.)\n */\n\nimport { FacebetterError } from '../core/errors.js';\n\n/**\n * Converts various image sources to ImageData (browser version)\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|Uint8ClampedArray} source - Image source\n * @param {number} width - Image width (required if source is Uint8ClampedArray)\n * @param {number} height - Image height (required if source is Uint8ClampedArray)\n * @returns {ImageData} ImageData object\n */\nexport function toImageData(source, width, height) {\n if (source instanceof ImageData) {\n return source;\n }\n\n if (source instanceof HTMLCanvasElement || source instanceof HTMLVideoElement) {\n const canvas = source instanceof HTMLCanvasElement ? source : document.createElement('canvas');\n if (source instanceof HTMLVideoElement) {\n canvas.width = source.videoWidth;\n canvas.height = source.videoHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(source, 0, 0);\n }\n const ctx = canvas.getContext('2d');\n return ctx.getImageData(0, 0, canvas.width, canvas.height);\n }\n\n if (source instanceof HTMLImageElement) {\n const canvas = document.createElement('canvas');\n canvas.width = source.naturalWidth || source.width;\n canvas.height = source.naturalHeight || source.height;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(source, 0, 0);\n return ctx.getImageData(0, 0, canvas.width, canvas.height);\n }\n\n if (source instanceof Uint8ClampedArray) {\n if (width === undefined || height === undefined) {\n throw new FacebetterError('Width and height are required when source is Uint8ClampedArray');\n }\n return new ImageData(source, width, height);\n }\n\n throw new FacebetterError('Unsupported image source type');\n}\n\n/**\n * Gets User-Agent string for web platform\n * @returns {string} User-Agent string\n */\nexport function getUserAgentString() {\n return 'FB/1.0 (web; wasm32)';\n}\n\n/**\n * Generates HMAC-SHA256 signature (browser version)\n * @param {string} key - HMAC key (app_key)\n * @param {string} data - Data to sign (timestamp string)\n * @returns {Promise<string>} Promise that resolves with hex-encoded signature\n */\nexport async function generateHMACSignature(key, data) {\n const encoder = new TextEncoder();\n const keyData = encoder.encode(key);\n const messageData = encoder.encode(data);\n\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n const signature = await crypto.subtle.sign('HMAC', cryptoKey, messageData);\n\n // Convert to hex string\n const hashArray = Array.from(new Uint8Array(signature));\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n return hashHex;\n}\n\n/**\n * Calls online_auth API to verify app_key (browser version)\n * @param {string} appId - Application ID\n * @param {string} appKey - Application key\n * @returns {Promise<Object>} Promise that resolves with response data\n */\nexport async function verifyAppKeyOnline(appId, appKey) {\n try {\n const timestamp = Math.floor(Date.now() / 1000);\n const timestampStr = timestamp.toString();\n const hmacSignature = await generateHMACSignature(appKey, timestampStr);\n\n const requestBody = {\n p_app_id: appId,\n p_hmac_signature: hmacSignature,\n p_timestamp: timestamp,\n p_user_agent: getUserAgentString()\n };\n\n const response = await fetch('https://facebetter.pixpark.net/rest/v1/rpc/online_auth', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': getUserAgentString()\n },\n body: JSON.stringify(requestBody)\n });\n\n const responseData = await response.json();\n return responseData;\n } catch (error) {\n console.error('Online auth request failed:', error);\n return null;\n }\n}\n\n","/**\n * ESM Entry Point\n * For Vue/React/Vite/Webpack (ES Module)\n * Uses facebetter-core npm package for WASM module loading\n */\n\nimport { BeautyEffectEngine } from '../core/engine.js';\nimport { EngineConfig } from '../core/config.js';\nimport { FacebetterError } from '../core/errors.js';\nimport * as constants from '../core/constants.js';\n\n// ESM-specific WASM loader\nlet wasmModuleInstance = null;\nlet wasmModulePromise = null;\n\n/**\n * Loads the WebAssembly module (ESM version)\n * Supports ESM format WASM modules (generated with MODULARIZE and EXPORT_ES6)\n * With SINGLE_FILE=1, WASM binary and data files are embedded in the JS file\n * @param {Object} [options] - Options\n * @param {string} [options.wasmUrl] - Custom WASM module URL (defaults to facebetter-core npm package)\n * @param {Function} [options.locateFile] - Custom locateFile function (usually not needed with SINGLE_FILE=1)\n * @returns {Promise<Object>} Promise that resolves with the WASM module\n */\nexport async function loadWasmModule(options = {}) {\n if (wasmModuleInstance) {\n return wasmModuleInstance;\n }\n\n if (wasmModulePromise) {\n return wasmModulePromise;\n }\n\n wasmModulePromise = (async () => {\n // Try to import the WASM module factory\n // facebetter-core.js is an Emscripten-generated ESM file (with MODULARIZE and EXPORT_ES6)\n // It's provided by the facebetter-core npm package\n let FaceBetterModuleFactory;\n \n try {\n // Get the WASM module\n if (options.wasmUrl) {\n // If custom URL is provided, use it (for backward compatibility or custom builds)\n const wasmModule = await import(options.wasmUrl);\n FaceBetterModuleFactory = wasmModule.default || wasmModule.createFaceBetterModule;\n } else {\n // Import from facebetter-core npm package\n const wasmModule = await import('facebetter-core');\n \n // Get the factory function (default export or named export)\n FaceBetterModuleFactory = wasmModule.default || wasmModule.createFaceBetterModule;\n }\n \n if (!FaceBetterModuleFactory) {\n throw new Error('WASM module does not export createFaceBetterModule function');\n }\n } catch (e) {\n throw new FacebetterError(`Failed to load WASM module: ${e.message}`);\n }\n\n // Configure module options\n // With SINGLE_FILE=1, WASM binary and data files are embedded in the JS file\n // No need to handle .wasm and .data file paths separately\n const moduleOptions = {\n locateFile: options.locateFile || function(path, prefix) {\n // With SINGLE_FILE=1, Emscripten handles embedded files automatically\n // Custom locateFile is only needed if user provides one\n return prefix + path;\n },\n ...options\n };\n\n // Initialize the module (MODULARIZE returns a Promise)\n wasmModuleInstance = await FaceBetterModuleFactory(moduleOptions);\n \n if (!wasmModuleInstance) {\n throw new FacebetterError('Failed to initialize WASM module');\n }\n\n wasmModuleInstance.ready = true;\n return wasmModuleInstance;\n })();\n\n return wasmModulePromise;\n}\n\n/**\n * Gets the current WASM module instance\n * @returns {Object} WASM module instance\n * @throws {Error} If module is not loaded\n */\nexport function getWasmModule() {\n if (!wasmModuleInstance) {\n throw new Error('WASM module not loaded. Call loadWasmModule() first or use BeautyEffectEngine.init()');\n }\n return wasmModuleInstance;\n}\n\n/**\n * Gets the current WASM memory buffer\n * @returns {ArrayBuffer} Current WASM memory buffer\n */\nexport function getWasmBuffer() {\n const Module = getWasmModule();\n \n if (Module.buffer) {\n return Module.buffer;\n } else if (Module.HEAPU8 && Module.HEAPU8.buffer) {\n return Module.HEAPU8.buffer;\n } else if (Module.asm && Module.asm.memory) {\n return Module.asm.memory.buffer;\n }\n \n throw new Error('Unable to access WASM memory buffer');\n}\n\n// Browser-specific image utilities (ESM version can use browser APIs)\nimport * as imageUtils from '../browser/image-utils.js';\n\n// Browser-specific GPU canvas management\nfunction ensureGPUPixelCanvas() {\n if (typeof document === 'undefined') {\n return;\n }\n \n let canvas = document.getElementById('gpupixel_canvas');\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = 'gpupixel_canvas';\n canvas.style.display = 'none';\n canvas.width = 1;\n canvas.height = 1;\n if (document.body) {\n document.body.appendChild(canvas);\n }\n }\n}\n\nfunction cleanupGPUPixelCanvas() {\n // Cleanup is handled by engine instance\n}\n\n// Create platform API\nconst platformAPI = {\n loadWasmModule: () => loadWasmModule(),\n getWasmModule,\n getWasmBuffer,\n toImageData: imageUtils.toImageData,\n verifyAppKeyOnline: imageUtils.verifyAppKeyOnline,\n ensureGPUPixelCanvas,\n cleanupGPUPixelCanvas\n};\n\n// Export factory function\nexport function createBeautyEffectEngine(config) {\n return new BeautyEffectEngine(config, platformAPI);\n}\n\n// Create a wrapped BeautyEffectEngine class that automatically injects platformAPI\n// This allows users to use: new BeautyEffectEngine(config) without passing platformAPI\nclass ESMBeautyEffectEngine extends BeautyEffectEngine {\n constructor(config) {\n // Automatically inject platformAPI for ESM environment\n super(config, platformAPI);\n }\n}\n\n// Export all constants and classes\nexport {\n ESMBeautyEffectEngine as BeautyEffectEngine,\n EngineConfig,\n FacebetterError\n};\n\n// Export constants with proper names\nexport const BeautyType = constants.BeautyType;\nexport const BasicParam = constants.BasicParam;\nexport const ReshapeParam = constants.ReshapeParam;\nexport const MakeupParam = constants.MakeupParam;\nexport const BackgroundMode = constants.BackgroundMode;\nexport const ProcessMode = constants.ProcessMode;\nexport const VirtualBackgroundOptions = constants.VirtualBackgroundOptions;\n\n// Default export\nexport default {\n BeautyEffectEngine: ESMBeautyEffectEngine,\n EngineConfig,\n FacebetterError,\n ...constants,\n loadWasmModule\n};\n\n"],"names":["BeautyType","BasicParam","ReshapeParam","MakeupParam","BackgroundMode","ProcessMode","imageUtils.toImageData","imageUtils.verifyAppKeyOnline","constants.BeautyType","constants.BasicParam","constants.ReshapeParam","constants.MakeupParam","constants.BackgroundMode","constants.ProcessMode","constants.VirtualBackgroundOptions"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,eAAe,SAAS,KAAK,CAAC;AAC3C,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE;AAClC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,IAAI,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;AAClC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,kBAAkB,EAAE;AACvE,EAAE,IAAI,MAAM,KAAK,CAAC,EAAE;AACpB,IAAI,MAAM,IAAI,eAAe,CAAC,CAAC,EAAE,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACjF,GAAG;AACH;;ACzBA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACO,MAAM,YAAY,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE;AAC3B,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;AACtC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC;AACxC,IAAI,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC;AAClD,IAAI,IAAI,CAAC,YAAY,GAAG,6BAA6B,CAAC;AACtD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1B,MAAM,OAAO,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACpF,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;AACnF,WAAW,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACvF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7N,GAAG;AACH;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,YAAU,GAAG;AAC1B,EAAE,KAAK,EAAE,CAAC;AACV,EAAE,OAAO,EAAE,CAAC;AACZ,EAAE,MAAM,EAAE,CAAC;AACX,EAAE,iBAAiB,EAAE,CAAC;AACtB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACO,MAAMC,YAAU,GAAG;AAC1B,EAAE,SAAS,EAAE,CAAC;AACd,EAAE,UAAU,EAAE,CAAC;AACf,EAAE,SAAS,EAAE,CAAC;AACd,EAAE,QAAQ,EAAE,CAAC;AACb,CAAC,CAAC;AACF;AACA;AACA;AACA;AACO,MAAMC,cAAY,GAAG;AAC5B,EAAE,QAAQ,EAAE,CAAC;AACb,EAAE,UAAU,EAAE,CAAC;AACf,EAAE,UAAU,EAAE,CAAC;AACf,EAAE,SAAS,EAAE,CAAC;AACd,EAAE,SAAS,EAAE,CAAC;AACd,EAAE,OAAO,EAAE,CAAC;AACZ,EAAE,IAAI,EAAE,CAAC;AACT,EAAE,QAAQ,EAAE,CAAC;AACb,EAAE,OAAO,EAAE,CAAC;AACZ,EAAE,WAAW,EAAE,CAAC;AAChB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACO,MAAMC,aAAW,GAAG;AAC3B,EAAE,QAAQ,EAAE,CAAC;AACb,EAAE,KAAK,EAAE,CAAC;AACV,CAAC,CAAC;AACF;AACA;AACA;AACA;AACO,MAAMC,gBAAc,GAAG;AAC9B,EAAE,IAAI,EAAE,CAAC;AACT,EAAE,IAAI,EAAE,CAAC;AACT,EAAE,KAAK,EAAE,CAAC;AACV,CAAC,CAAC;AACF;AACA;AACA;AACA;AACO,MAAMC,aAAW,GAAG;AAC3B,EAAE,KAAK,EAAE,CAAC;AACV,EAAE,KAAK,EAAE,CAAC;AACV,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;iCACO,MAAM,wBAAwB,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAC5B,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,GAAG,OAAO,CAAC,IAAI,GAAGD,gBAAc,CAAC,IAAI,CAAC;AAChF,IAAI,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;AAC3D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,IAAI,CAAC,IAAI,KAAKA,gBAAc,CAAC,KAAK,EAAE;AAC5C,MAAM,OAAO,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC;AAC3C,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;;;;;;;;;;;;;AC5FA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE;AACnC,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM,MAAM,IAAI,eAAe,CAAC,mEAAmE,CAAC,CAAC;AACrG,KAAK;AACL;AACA,IAAI,IAAI,CAAC,WAAW,EAAE;AACtB,MAAM,MAAM,IAAI,eAAe,CAAC,0BAA0B,CAAC,CAAC;AAC5D,KAAK;AACL;AACA;AACA,IAAI,IAAI,YAAY,CAAC;AACrB,IAAI,IAAI,MAAM,YAAY,YAAY,EAAE;AACxC,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,KAAK,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACrD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9C,KAAK,MAAM;AACX,MAAM,MAAM,IAAI,eAAe,CAAC,sEAAsE,CAAC,CAAC;AACxG,KAAK;AACL;AACA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE;AACjC,MAAM,MAAM,IAAI,eAAe,CAAC,kBAAkB,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9E,KAAK;AACL;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;AAC/B,IAAI,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;AACpC,IAAI,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;AACtC,IAAI,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;AAChD,IAAI,IAAI,CAAC,YAAY,GAAG,6BAA6B,CAAC;AACtD,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC1B,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC7B,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC7B,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC7B,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACxB;AACA;AACA,IAAI,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;AACpC,IAAI,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,cAAc,CAAC;AACtD,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC;AACpD,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC;AACpD,IAAI,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,WAAW,CAAC;AAChD,IAAI,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,kBAAkB,CAAC;AAC9D,IAAI,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,oBAAoB,CAAC;AAClE,IAAI,IAAI,CAAC,sBAAsB,GAAG,WAAW,CAAC,qBAAqB,CAAC;AACpE;AACA;AACA,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAChC,IAAI,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACxC,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACjC,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC9B;AACA;AACA,IAAI,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACpC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACnC,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACnD,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE;AACrC,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK;AACtC,MAAM,UAAU,CAAC,MAAM;AACvB,QAAQ,MAAM,CAAC,IAAI,eAAe;AAClC,UAAU,CAAC,EAAE,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,uEAAuE,CAAC;AAC1H,UAAU,SAAS;AACnB,SAAS,CAAC,CAAC;AACX,OAAO,EAAE,OAAO,CAAC,CAAC;AAClB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE;AAChC,IAAI,IAAI,KAAK,YAAY,eAAe,EAAE;AAC1C,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA,IAAI,IAAI,SAAS,GAAG,eAAe,CAAC;AACpC,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,wBAAwB,CAAC;AAC5D;AACA;AACA,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE;AAClF,MAAM,SAAS,GAAG,SAAS,CAAC;AAC5B,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;AACvF,MAAM,SAAS,GAAG,eAAe,CAAC;AAClC,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;AACnF,MAAM,SAAS,GAAG,iBAAiB,CAAC;AACpC,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;AACtF,MAAM,SAAS,GAAG,eAAe,CAAC;AAClC,KAAK;AACL;AACA,IAAI,OAAO,IAAI,eAAe;AAC9B,MAAM,OAAO,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO;AAClD,MAAM,SAAS;AACf,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE,EAAE;AAC3B;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1B,MAAM,OAAO;AACb,KAAK;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAC3B,MAAM,OAAO,IAAI,CAAC,YAAY,CAAC;AAC/B,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,YAAY;AACrC,MAAM,IAAI;AACV,QAAQ,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;AACrD,QAAQ,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC;AACzD;AACA;AACA,QAAQ,IAAI;AACZ,UAAU,MAAM,OAAO,CAAC,IAAI,CAAC;AAC7B,YAAY,IAAI,CAAC,gBAAgB;AACjC,YAAY,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,qBAAqB,CAAC;AACnE,WAAW,CAAC,CAAC;AACb,SAAS,CAAC,OAAO,KAAK,EAAE;AACxB,UAAU,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC;AACxE,SAAS;AACT;AACA,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAC7C;AACA,QAAQ,IAAI,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC;AAChD;AACA;AACA,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACxF,UAAU,IAAI;AACd;AACA,YAAY,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;AACpD,cAAc,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AAC/D,cAAc,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,uBAAuB,CAAC;AACvE,aAAa,CAAC,CAAC;AACf;AACA,YAAY,IAAI,CAAC,YAAY,EAAE;AAC/B,cAAc,MAAM,IAAI,eAAe;AACvC,gBAAgB,4FAA4F;AAC5G,gBAAgB,qBAAqB;AACrC,eAAe,CAAC;AAChB,aAAa;AACb;AACA;AACA,YAAY,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AAC5D,YAAY,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;AAC/E,WAAW,CAAC,OAAO,KAAK,EAAE;AAC1B,YAAY,IAAI,KAAK,YAAY,eAAe,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;AAC9E,cAAc,MAAM,IAAI,eAAe;AACvC,gBAAgB,CAAC,sCAAsC,EAAE,WAAW,CAAC,yEAAyE,CAAC;AAC/I,gBAAgB,cAAc;AAC9B,eAAe,CAAC;AAChB,aAAa;AACb,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;AAC/E,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,QAAQ,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK;AACtC,UAAU,0BAA0B;AACpC,UAAU,QAAQ;AAClB,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC9B,UAAU;AACV,YAAY,IAAI,CAAC,YAAY;AAC7B,YAAY,gBAAgB,IAAI,EAAE;AAClC,WAAW;AACX,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,UAAU,MAAM,IAAI,eAAe;AACnC,YAAY,mGAAmG;AAC/G,YAAY,sBAAsB;AAClC,WAAW,CAAC;AACZ,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AACnC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAChC,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC,OAAO,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC,QAAQ,MAAM,KAAK,CAAC;AACpB,OAAO;AACP,KAAK,GAAG,CAAC;AACT;AACA,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC9C,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAC3B,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC/B,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAC3B,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC/B,KAAK;AACL;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAClF,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC1B,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC7B,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACxB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC7B;AACA;AACA,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC/B,MAAM,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACnC,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAChC,KAAK;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACrC,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACpC,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,MAAM,EAAE;AAC7B;AACA,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC;AAChC,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AAC/B,MAAM,cAAc;AACpB,MAAM,QAAQ;AACd,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC1C,MAAM;AACN,QAAQ,MAAM,CAAC,cAAc,IAAI,KAAK;AACtC,QAAQ,MAAM,CAAC,WAAW,IAAI,KAAK;AACnC,QAAQ,MAAM,CAAC,KAAK,IAAI,CAAC;AACzB,QAAQ,MAAM,CAAC,QAAQ,IAAI,EAAE;AAC7B,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,WAAW,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;AACpD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,UAAU,EAAE,OAAO,EAAE;AAC5C,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AAC/B,MAAM,sBAAsB;AAC5B,MAAM,QAAQ;AACd,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACpC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,KAAK,CAAC;AACN;AACA,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AACnF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,UAAU,EAAE;AAClC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AAC/B,MAAM,qBAAqB;AAC3B,MAAM,QAAQ;AACd,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC1B,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;AAClC,KAAK,CAAC;AACN;AACA,IAAI,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;AACvB,MAAM,MAAM,IAAI,eAAe,CAAC,oCAAoC,CAAC,CAAC;AACtE,KAAK;AACL;AACA,IAAI,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,qBAAqB,GAAG;AAC1B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AAC/B,MAAM,uBAAuB;AAC7B,MAAM,QAAQ;AACd,MAAM,CAAC,QAAQ,CAAC;AAChB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AACtB,KAAK,CAAC;AACN;AACA,IAAI,WAAW,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;AAC9D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE;AAC9B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE;AAChC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAChE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE;AAC/B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9C,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;AAChC,MAAM,MAAM,IAAI,eAAe,CAAC,6CAA6C,CAAC,CAAC;AAC/E,KAAK;AACL;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AAC/B,MAAM,YAAY;AAClB,MAAM,QAAQ;AACd,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACpC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC;AACpC,KAAK,CAAC;AACN;AACA,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,8BAA8B,CAAC,CAAC,CAAC;AAC1D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,OAAO,EAAE;AAChC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA;AACA,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,GAAG,OAAO,GAAG,EAAE,IAAI,EAAEA,gBAAc,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;AAC7G;AACA,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC;AACzB,IAAI,IAAI,cAAc,GAAG,IAAI,CAAC;AAC9B;AACA,IAAI,IAAI;AACR;AACA,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE;AAChC,QAAQ,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC5D,QAAQ,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAClE,QAAQ,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACpD;AACA,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAC7C,QAAQ,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;AACxE,QAAQ,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjC,OAAO;AACP;AACA;AACA,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AACjC,QAAQ,sBAAsB;AAC9B,QAAQ,QAAQ;AAChB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACpE,QAAQ;AACR,UAAU,IAAI,CAAC,SAAS;AACxB,UAAU,IAAI,CAAC,IAAI;AACnB,UAAU,cAAc,IAAI,CAAC;AAC7B,UAAU,SAAS,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC;AACzC,UAAU,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;AAC1C,UAAU,SAAS,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;AAC7C,SAAS;AACT,OAAO,CAAC;AACR;AACA,MAAM,WAAW,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC;AAC9D,KAAK,SAAS;AACd;AACA,MAAM,IAAI,cAAc,EAAE;AAC1B,QAAQ,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACrC,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE;AAChC,IAAI,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;AAC5C;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,GAAG,YAAY,EAAE;AACxC,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAC3C;AACA,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;AAC7B,QAAQ,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACxC,OAAO;AACP,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;AAC7B,QAAQ,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACxC,OAAO;AACP;AACA,MAAM,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACvD,MAAM,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACvD,MAAM,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC;AACrC;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACpD,QAAQ,MAAM,IAAI,eAAe,CAAC,mCAAmC,CAAC,CAAC;AACvE,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAGC,aAAW,CAAC,KAAK,EAAE;AACtE,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC1E,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC;AACA,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AAC3D;AACA,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D;AACA,IAAI,IAAI;AACR,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAC3C;AACA,MAAM,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAC5E,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAClC;AACA,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AACjC,QAAQ,kBAAkB;AAC1B,QAAQ,QAAQ;AAChB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC9E,QAAQ;AACR,UAAU,IAAI,CAAC,SAAS;AACxB,UAAU,IAAI,CAAC,YAAY;AAC3B,UAAU,SAAS,CAAC,KAAK;AACzB,UAAU,SAAS,CAAC,MAAM;AAC1B,UAAU,SAAS,CAAC,KAAK,GAAG,CAAC;AAC7B,UAAU,IAAI,CAAC,YAAY;AAC3B,UAAU,WAAW;AACrB,SAAS;AACT,OAAO,CAAC;AACR;AACA,MAAM,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;AACrD;AACA,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAClD,MAAM,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AACnF,MAAM,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3D;AACA,MAAM,OAAO,IAAI,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AAC7E,KAAK,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,IAAI,KAAK,YAAY,eAAe,EAAE;AAC5C,QAAQ,MAAM,KAAK,CAAC;AACpB,OAAO;AACP,MAAM,MAAM,IAAI,eAAe,CAAC,CAAC,wBAAwB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5E,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC9C,MAAM,MAAM,IAAI,eAAe,CAAC,4CAA4C,CAAC,CAAC;AAC9E,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,GAAG;AAC1B,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACzC,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAC5D,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChD,MAAM,MAAM,CAAC,EAAE,GAAG,iBAAiB,CAAC;AACpC,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AACpC,MAAM,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AACvB,MAAM,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACxC,MAAM,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;AACzC,KAAK;AACL,IAAI,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,GAAG;AAC3B,IAAI,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,eAAe,EAAE;AAC7D,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;AACpC,MAAM,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAClC,MAAM,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AAC1C,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE;AACxC,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACzC,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAC9B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,KAAK,KAAK,KAAK;AAC7C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,MAAM,EAAE;AACjD,MAAM,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC/D,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC;AAC1C,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC;AAC5C,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;AAChG,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,gBAAgB,CAAC;AACjC,GAAG;AACH;AACA;;ACxmBA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AACnD,EAAE,IAAI,MAAM,YAAY,SAAS,EAAE;AACnC,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA,EAAE,IAAI,MAAM,YAAY,iBAAiB,IAAI,MAAM,YAAY,gBAAgB,EAAE;AACjF,IAAI,MAAM,MAAM,GAAG,MAAM,YAAY,iBAAiB,GAAG,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACnG,IAAI,IAAI,MAAM,YAAY,gBAAgB,EAAE;AAC5C,MAAM,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AACvC,MAAM,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;AACzC,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClC,KAAK;AACL,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACxC,IAAI,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/D,GAAG;AACH;AACA,EAAE,IAAI,MAAM,YAAY,gBAAgB,EAAE;AAC1C,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACpD,IAAI,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC;AACvD,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC;AAC1D,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACxC,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,IAAI,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/D,GAAG;AACH;AACA,EAAE,IAAI,MAAM,YAAY,iBAAiB,EAAE;AAC3C,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;AACrD,MAAM,MAAM,IAAI,eAAe,CAAC,gEAAgE,CAAC,CAAC;AAClG,KAAK;AACL,IAAI,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAChD,GAAG;AACH;AACA,EAAE,MAAM,IAAI,eAAe,CAAC,+BAA+B,CAAC,CAAC;AAC7D,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,SAAS,kBAAkB,GAAG;AACrC,EAAE,OAAO,sBAAsB,CAAC;AAChC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE;AACvD,EAAE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AACpC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACtC,EAAE,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3C;AACA,EAAE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS;AACjD,IAAI,KAAK;AACT,IAAI,OAAO;AACX,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;AACrC,IAAI,KAAK;AACT,IAAI,CAAC,MAAM,CAAC;AACZ,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AAC7E;AACA;AACA,EAAE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1D,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/E,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE;AACxD,EAAE,IAAI;AACN,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACpD,IAAI,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC9C,IAAI,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAC5E;AACA,IAAI,MAAM,WAAW,GAAG;AACxB,MAAM,QAAQ,EAAE,KAAK;AACrB,MAAM,gBAAgB,EAAE,aAAa;AACrC,MAAM,WAAW,EAAE,SAAS;AAC5B,MAAM,YAAY,EAAE,kBAAkB,EAAE;AACxC,KAAK,CAAC;AACN;AACA,IAAI,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,wDAAwD,EAAE;AAC3F,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,OAAO,EAAE;AACf,QAAQ,cAAc,EAAE,kBAAkB;AAC1C,QAAQ,YAAY,EAAE,kBAAkB,EAAE;AAC1C,OAAO;AACP,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AACvC,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC/C,IAAI,OAAO,YAAY,CAAC;AACxB,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;AACxD,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;;ACvHA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA,IAAI,kBAAkB,GAAG,IAAI,CAAC;AAC9B,IAAI,iBAAiB,GAAG,IAAI,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,cAAc,CAAC,OAAO,GAAG,EAAE,EAAE;AACnD,EAAE,IAAI,kBAAkB,EAAE;AAC1B,IAAI,OAAO,kBAAkB,CAAC;AAC9B,GAAG;AACH;AACA,EAAE,IAAI,iBAAiB,EAAE;AACzB,IAAI,OAAO,iBAAiB,CAAC;AAC7B,GAAG;AACH;AACA,EAAE,iBAAiB,GAAG,CAAC,YAAY;AACnC;AACA;AACA;AACA,IAAI,IAAI,uBAAuB,CAAC;AAChC;AACA,IAAI,IAAI;AACR;AACA,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;AAC3B;AACA,QAAQ,MAAM,UAAU,GAAG,MAAM,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;AACzD,QAAQ,uBAAuB,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,sBAAsB,CAAC;AAC1F,OAAO,MAAM;AACb;AACA,QAAQ,MAAM,UAAU,GAAG,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAC3D;AACA;AACA,QAAQ,uBAAuB,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,sBAAsB,CAAC;AAC1F,OAAO;AACP;AACA,MAAM,IAAI,CAAC,uBAAuB,EAAE;AACpC,QAAQ,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;AACvF,OAAO;AACP,KAAK,CAAC,OAAO,CAAC,EAAE;AAChB,MAAM,MAAM,IAAI,eAAe,CAAC,CAAC,4BAA4B,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5E,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,MAAM,aAAa,GAAG;AAC1B,MAAM,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS,IAAI,EAAE,MAAM,EAAE;AAC/D;AACA;AACA,QAAQ,OAAO,MAAM,GAAG,IAAI,CAAC;AAC7B,OAAO;AACP,MAAM,GAAG,OAAO;AAChB,KAAK,CAAC;AACN;AACA;AACA,IAAI,kBAAkB,GAAG,MAAM,uBAAuB,CAAC,aAAa,CAAC,CAAC;AACtE;AACA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC7B,MAAM,MAAM,IAAI,eAAe,CAAC,kCAAkC,CAAC,CAAC;AACpE,KAAK;AACL;AACA,IAAI,kBAAkB,CAAC,KAAK,GAAG,IAAI,CAAC;AACpC,IAAI,OAAO,kBAAkB,CAAC;AAC9B,GAAG,GAAG,CAAC;AACP;AACA,EAAE,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,GAAG;AAChC,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC3B,IAAI,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;AAC5G,GAAG;AACH,EAAE,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,GAAG;AAChC,EAAE,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;AACjC;AACA,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE;AACrB,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC;AACzB,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AACpD,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAChC,GAAG,MAAM,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE;AAC9C,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AACpC,GAAG;AACH;AACA,EAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACzD,CAAC;AAID;AACA;AACA,SAAS,oBAAoB,GAAG;AAChC,EAAE,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACvC,IAAI,OAAO;AACX,GAAG;AACH;AACA,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAC1D,EAAE,IAAI,CAAC,MAAM,EAAE;AACf,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC9C,IAAI,MAAM,CAAC,EAAE,GAAG,iBAAiB,CAAC;AAClC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAClC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AACrB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACtB,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE;AACvB,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACxC,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA,SAAS,qBAAqB,GAAG;AACjC;AACA,CAAC;AACD;AACA;AACA,MAAM,WAAW,GAAG;AACpB,EAAE,cAAc,EAAE,MAAM,cAAc,EAAE;AACxC,EAAE,aAAa;AACf,EAAE,aAAa;AACf,EAAE,WAAW,EAAEC,WAAsB;AACrC,EAAE,kBAAkB,EAAEC,kBAA6B;AACnD,EAAE,oBAAoB;AACtB,EAAE,qBAAqB;AACvB,CAAC,CAAC;AACF;AACA;AACO,SAAS,wBAAwB,CAAC,MAAM,EAAE;AACjD,EAAE,OAAO,IAAI,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACrD,CAAC;AACD;AACA;AACA;AACA,MAAM,qBAAqB,SAAS,kBAAkB,CAAC;AACvD,EAAE,WAAW,CAAC,MAAM,EAAE;AACtB;AACA,IAAI,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC/B,GAAG;AACH,CAAC;AAQD;AACA;AACY,MAAC,UAAU,GAAGC,aAAqB;AACnC,MAAC,UAAU,GAAGC,aAAqB;AACnC,MAAC,YAAY,GAAGC,eAAuB;AACvC,MAAC,WAAW,GAAGC,cAAsB;AACrC,MAAC,cAAc,GAAGC,iBAAyB;AAC3C,MAAC,WAAW,GAAGC,cAAsB;AACrC,MAAC,wBAAwB,GAAGC,2BAAmC;AAC3E;AACA;AACA,YAAe;AACf,EAAE,kBAAkB,EAAE,qBAAqB;AAC3C,EAAE,YAAY;AACd,EAAE,eAAe;AACjB,EAAE,GAAG,SAAS;AACd,EAAE,cAAc;AAChB,CAAC;;;;"}
|
package/dist/facebetter.js
CHANGED
|
@@ -145,6 +145,34 @@
|
|
|
145
145
|
Video: 1 // 视频模式
|
|
146
146
|
};
|
|
147
147
|
|
|
148
|
+
/**
|
|
149
|
+
* Virtual background options class
|
|
150
|
+
* Matches the C++/Java/OC API design
|
|
151
|
+
*/
|
|
152
|
+
let VirtualBackgroundOptions$1 = class VirtualBackgroundOptions {
|
|
153
|
+
/**
|
|
154
|
+
* Creates a new VirtualBackgroundOptions instance
|
|
155
|
+
* @param {Object} [options] - Options object
|
|
156
|
+
* @param {number} [options.mode] - Background mode (use BackgroundMode enum)
|
|
157
|
+
* @param {ImageData|HTMLImageElement|HTMLCanvasElement} [options.backgroundImage] - Background image (required when mode is Image)
|
|
158
|
+
*/
|
|
159
|
+
constructor(options = {}) {
|
|
160
|
+
this.mode = options.mode !== undefined ? options.mode : BackgroundMode$1.None;
|
|
161
|
+
this.backgroundImage = options.backgroundImage || null;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Validates the options
|
|
166
|
+
* @returns {boolean} True if valid
|
|
167
|
+
*/
|
|
168
|
+
isValid() {
|
|
169
|
+
if (this.mode === BackgroundMode$1.Image) {
|
|
170
|
+
return this.backgroundImage !== null;
|
|
171
|
+
}
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
|
|
148
176
|
var constants = /*#__PURE__*/Object.freeze({
|
|
149
177
|
__proto__: null,
|
|
150
178
|
BackgroundMode: BackgroundMode$1,
|
|
@@ -152,7 +180,8 @@
|
|
|
152
180
|
BeautyType: BeautyType$1,
|
|
153
181
|
MakeupParam: MakeupParam$1,
|
|
154
182
|
ProcessMode: ProcessMode$1,
|
|
155
|
-
ReshapeParam: ReshapeParam$1
|
|
183
|
+
ReshapeParam: ReshapeParam$1,
|
|
184
|
+
VirtualBackgroundOptions: VirtualBackgroundOptions$1
|
|
156
185
|
});
|
|
157
186
|
|
|
158
187
|
/**
|
|
@@ -567,59 +596,58 @@
|
|
|
567
596
|
}
|
|
568
597
|
|
|
569
598
|
/**
|
|
570
|
-
* Sets virtual background
|
|
571
|
-
* @param {
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
this._ensureInitialized();
|
|
575
|
-
const Module = this._getWasmModule();
|
|
576
|
-
|
|
577
|
-
const result = Module.ccall(
|
|
578
|
-
'SetVirtualBackgroundMode',
|
|
579
|
-
'number',
|
|
580
|
-
['number', 'number'],
|
|
581
|
-
[this.enginePtr, mode]
|
|
582
|
-
);
|
|
583
|
-
|
|
584
|
-
checkResult(result, 'Failed to set virtual background mode');
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
/**
|
|
588
|
-
* Sets virtual background image
|
|
589
|
-
* @param {ImageData|HTMLImageElement|HTMLCanvasElement} image - Background image
|
|
599
|
+
* Sets virtual background options (unified API, matches C++/Java/OC)
|
|
600
|
+
* @param {VirtualBackgroundOptions|Object} options - Virtual background options
|
|
601
|
+
* @param {number} [options.mode] - Background mode (use BackgroundMode enum)
|
|
602
|
+
* @param {ImageData|HTMLImageElement|HTMLCanvasElement} [options.backgroundImage] - Background image (required when mode is Image)
|
|
590
603
|
*/
|
|
591
|
-
|
|
604
|
+
setVirtualBackground(options) {
|
|
592
605
|
this._ensureInitialized();
|
|
593
|
-
const imageData = this._toImageData(image);
|
|
594
606
|
const Module = this._getWasmModule();
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
const
|
|
598
|
-
|
|
607
|
+
|
|
608
|
+
// Support both VirtualBackgroundOptions object and plain object
|
|
609
|
+
const opts = options.mode !== undefined ? options : { mode: BackgroundMode$1.None, backgroundImage: null };
|
|
610
|
+
|
|
611
|
+
let imageData = null;
|
|
612
|
+
let imageBufferPtr = null;
|
|
613
|
+
|
|
599
614
|
try {
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
615
|
+
// 如果提供了背景图片,转换为 ImageData 并准备缓冲区
|
|
616
|
+
if (opts.backgroundImage) {
|
|
617
|
+
imageData = this._toImageData(opts.backgroundImage);
|
|
618
|
+
const bufferSize = imageData.width * imageData.height * 4;
|
|
619
|
+
imageBufferPtr = Module._malloc(bufferSize);
|
|
620
|
+
|
|
621
|
+
const buffer = this._getWasmBuffer();
|
|
622
|
+
const view = new Uint8Array(buffer, imageBufferPtr, bufferSize);
|
|
623
|
+
view.set(imageData.data);
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
// 使用统一的 SetVirtualBackground C 接口(与其他平台一致)
|
|
604
627
|
const result = Module.ccall(
|
|
605
|
-
'
|
|
628
|
+
'SetVirtualBackground',
|
|
606
629
|
'number',
|
|
607
|
-
['number', 'number', 'number', 'number', 'number'],
|
|
630
|
+
['number', 'number', 'number', 'number', 'number', 'number'],
|
|
608
631
|
[
|
|
609
632
|
this.enginePtr,
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
imageData.
|
|
613
|
-
imageData.
|
|
633
|
+
opts.mode,
|
|
634
|
+
imageBufferPtr || 0, // 如果为 null,传递 0
|
|
635
|
+
imageData ? imageData.width : 0,
|
|
636
|
+
imageData ? imageData.height : 0,
|
|
637
|
+
imageData ? imageData.width * 4 : 0
|
|
614
638
|
]
|
|
615
639
|
);
|
|
616
|
-
|
|
617
|
-
checkResult(result, 'Failed to set virtual background
|
|
640
|
+
|
|
641
|
+
checkResult(result, 'Failed to set virtual background');
|
|
618
642
|
} finally {
|
|
619
|
-
|
|
643
|
+
// 释放内存
|
|
644
|
+
if (imageBufferPtr) {
|
|
645
|
+
Module._free(imageBufferPtr);
|
|
646
|
+
}
|
|
620
647
|
}
|
|
621
648
|
}
|
|
622
649
|
|
|
650
|
+
|
|
623
651
|
/**
|
|
624
652
|
* Ensures buffers are allocated for the given dimensions
|
|
625
653
|
* @private
|
|
@@ -1160,6 +1188,7 @@
|
|
|
1160
1188
|
const MakeupParam = MakeupParam$1;
|
|
1161
1189
|
const BackgroundMode = BackgroundMode$1;
|
|
1162
1190
|
const ProcessMode = ProcessMode$1;
|
|
1191
|
+
const VirtualBackgroundOptions = VirtualBackgroundOptions$1;
|
|
1163
1192
|
|
|
1164
1193
|
// Default export
|
|
1165
1194
|
var index = {
|
|
@@ -1179,6 +1208,7 @@
|
|
|
1179
1208
|
exports.MakeupParam = MakeupParam;
|
|
1180
1209
|
exports.ProcessMode = ProcessMode;
|
|
1181
1210
|
exports.ReshapeParam = ReshapeParam;
|
|
1211
|
+
exports.VirtualBackgroundOptions = VirtualBackgroundOptions;
|
|
1182
1212
|
exports.createBeautyEffectEngine = createBeautyEffectEngine;
|
|
1183
1213
|
exports.default = index;
|
|
1184
1214
|
exports.loadWasmModule = loadWasmModule;
|
package/dist/facebetter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facebetter.js","sources":["../src/core/errors.js","../src/core/config.js","../src/core/constants.js","../src/core/engine.js","../src/browser/wasm-loader.js","../src/browser/image-utils.js","../src/browser/index.js"],"sourcesContent":["/**\n * Facebetter Error Classes\n * Platform-agnostic error handling\n */\n\n/**\n * Facebetter error class\n */\nexport class FacebetterError extends Error {\n constructor(message, code = -1) {\n super(message);\n this.name = 'FacebetterError';\n this.code = code;\n }\n}\n\n/**\n * Checks if a result code indicates success\n * @param {number} result - Result code from WASM function\n * @throws {FacebetterError} If result indicates failure\n */\nexport function checkResult(result, errorMessage = 'Operation failed') {\n if (result !== 0) {\n throw new FacebetterError(`${errorMessage} (error code: ${result})`, result);\n }\n}\n\n","/**\n * Engine Configuration\n * Platform-agnostic configuration class\n */\n\nimport { FacebetterError } from './errors.js';\n\n/**\n * Engine configuration class\n * Similar to EngineConfig struct in C++/Java/OC\n */\nexport class EngineConfig {\n /**\n * Creates a new EngineConfig instance\n * @param {Object} config - Configuration object\n * @param {string} [config.appId] - Application ID (required if licenseJson is not provided)\n * @param {string} [config.appKey] - Application key (required if licenseJson is not provided)\n * @param {string} [config.licenseJson] - License JSON string (optional, if provided, appId and appKey are not required)\n */\n constructor(config = {}) {\n this.appId = config.appId || null;\n this.appKey = config.appKey || null;\n this.licenseJson = config.licenseJson || null;\n this.resourcePath = '/facebetter/resource.bundle';\n }\n\n /**\n * Validates the configuration\n * @returns {boolean} True if valid\n */\n isValid() {\n // 如果提供了 licenseJson,则使用授权数据验证\n if (this.licenseJson) {\n return typeof this.licenseJson === 'string' && this.licenseJson.trim() !== '';\n }\n // 否则需要 appId 和 appKey\n return this.appId && typeof this.appId === 'string' && this.appId.trim() !== '' &&\n this.appKey && typeof this.appKey === 'string' && this.appKey.trim() !== '';\n }\n\n /**\n * Returns a string representation of the config\n * @returns {string} String representation\n */\n toString() {\n return `EngineConfig{appId='${this.appId ? this.appId.substring(0, Math.min(this.appId.length, 8)) + '...' : 'null'}', appKey='${this.appKey ? '***' : 'null'}', licenseJson=${this.licenseJson ? 'provided' : 'null'}}`;\n }\n}\n\n","/**\n * Facebetter Constants and Enums\n * Platform-agnostic constants\n */\n\n/**\n * Beauty type enumeration\n */\nexport const BeautyType = {\n Basic: 0, // 基础美颜\n Reshape: 1, // 面部重塑\n Makeup: 2, // 美妆效果\n VirtualBackground: 3 // 虚拟背景\n};\n\n/**\n * Basic beauty parameter enumeration\n */\nexport const BasicParam = {\n Smoothing: 0, // 磨皮\n Sharpening: 1, // 锐化\n Whitening: 2, // 美白\n Rosiness: 3 // 红润\n};\n\n/**\n * Face reshape parameter enumeration\n */\nexport const ReshapeParam = {\n FaceThin: 0, // 瘦脸\n FaceVShape: 1, // V脸\n FaceNarrow: 2, // 窄脸\n FaceShort: 3, // 短脸\n Cheekbone: 4, // 颧骨\n Jawbone: 5, // 下颌骨\n Chin: 6, // 下巴\n NoseSlim: 7, // 瘦鼻梁\n EyeSize: 8, // 大眼\n EyeDistance: 9 // 眼距\n};\n\n/**\n * Makeup parameter enumeration\n */\nexport const MakeupParam = {\n Lipstick: 0, // 口红\n Blush: 1 // 腮红\n};\n\n/**\n * Background mode enumeration\n */\nexport const BackgroundMode = {\n None: 0, // 无背景处理\n Blur: 1, // 模糊背景\n Image: 2 // 背景图片替换\n};\n\n/**\n * Process mode enumeration\n */\nexport const ProcessMode = {\n Image: 0, // 图片模式\n Video: 1 // 视频模式\n};\n\n","/**\n * Beauty Effect Engine Core\n * Platform-agnostic engine implementation with dependency injection\n */\n\nimport { EngineConfig } from './config.js';\nimport { FacebetterError, checkResult } from './errors.js';\nimport { ProcessMode } from './constants.js';\n\n/**\n * Beauty effect engine class\n * Provides high-level API for face beauty effects processing\n * Uses dependency injection for platform-specific functionality\n */\nexport class BeautyEffectEngine {\n /**\n * Creates a new BeautyEffectEngine instance\n * @param {EngineConfig|Object} config - EngineConfig object or configuration object\n * @param {Object} platformAPI - Platform-specific API (injected)\n * @param {Function} platformAPI.loadWasmModule - WASM module loader\n * @param {Function} platformAPI.getWasmModule - Get WASM module instance\n * @param {Function} platformAPI.getWasmBuffer - Get WASM memory buffer\n * @param {Function} platformAPI.toImageData - Convert to ImageData\n * @param {Function} platformAPI.verifyAppKeyOnline - Verify app key online\n * @param {Function} [platformAPI.ensureGPUPixelCanvas] - Ensure GPU canvas exists (browser only)\n * @param {Function} [platformAPI.cleanupGPUPixelCanvas] - Cleanup GPU canvas (browser only)\n */\n constructor(config, platformAPI) {\n if (!config) {\n throw new FacebetterError('Config is required. Expected EngineConfig or configuration object');\n }\n\n if (!platformAPI) {\n throw new FacebetterError('Platform API is required');\n }\n\n // 如果传入的是 EngineConfig 实例,直接使用;否则创建新的 EngineConfig\n let engineConfig;\n if (config instanceof EngineConfig) {\n engineConfig = config;\n } else if (config && typeof config === 'object') {\n engineConfig = new EngineConfig(config);\n } else {\n throw new FacebetterError('Invalid configuration. Expected EngineConfig or configuration object');\n }\n\n if (!engineConfig.isValid()) {\n throw new FacebetterError('Invalid config: ' + engineConfig.toString());\n }\n\n this.config = engineConfig;\n this.appId = engineConfig.appId;\n this.appKey = engineConfig.appKey;\n this.licenseJson = engineConfig.licenseJson;\n this.resourcePath = '/facebetter/resource.bundle';\n this.enginePtr = null;\n this.initialized = false;\n this.srcBufferPtr = null;\n this.dstBufferPtr = null;\n this.bufferSize = 0;\n \n // Store platform API\n this._platformAPI = platformAPI;\n this._loadWasmModule = platformAPI.loadWasmModule;\n this._getWasmModule = platformAPI.getWasmModule;\n this._getWasmBuffer = platformAPI.getWasmBuffer;\n this._toImageData = platformAPI.toImageData;\n this._verifyAppKeyOnline = platformAPI.verifyAppKeyOnline;\n this._ensureGPUPixelCanvas = platformAPI.ensureGPUPixelCanvas;\n this._cleanupGPUPixelCanvas = platformAPI.cleanupGPUPixelCanvas;\n \n // Browser-specific state\n this._gpupixelCanvas = null;\n this._createdGPUPixelCanvas = false;\n this._offscreenCanvas = null;\n this._offscreenCtx = null;\n \n // Automatically create gpupixel_canvas if it doesn't exist (browser only)\n if (this._ensureGPUPixelCanvas) {\n this._ensureGPUPixelCanvas();\n }\n \n // Start loading WASM module immediately in constructor\n this._wasmLoadPromise = this._loadWasmModule();\n this._initPromise = null;\n }\n\n /**\n * Creates a timeout promise\n * @private\n * @param {number} timeout - Timeout in milliseconds\n * @param {string} operation - Operation name for error message\n * @returns {Promise} Promise that rejects after timeout\n */\n _createTimeout(timeout, operation) {\n return new Promise((_, reject) => {\n setTimeout(() => {\n reject(new FacebetterError(\n `${operation} timed out after ${timeout}ms. Please check your network connection or try increasing the timeout.`,\n 'TIMEOUT'\n ));\n }, timeout);\n });\n }\n\n /**\n * Enhances error with context information\n * @private\n * @param {Error} error - Original error\n * @param {string} context - Context information\n * @returns {FacebetterError} Enhanced error\n */\n _enhanceError(error, context) {\n if (error instanceof FacebetterError) {\n return error;\n }\n\n let errorCode = 'UNKNOWN_ERROR';\n let message = error.message || 'Unknown error occurred';\n\n // Categorize errors\n if (error.message?.includes('timeout') || error.message?.includes('TIMEOUT')) {\n errorCode = 'TIMEOUT';\n } else if (error.message?.includes('network') || error.message?.includes('fetch')) {\n errorCode = 'NETWORK_ERROR';\n } else if (error.message?.includes('WASM') || error.message?.includes('wasm')) {\n errorCode = 'WASM_LOAD_ERROR';\n } else if (error.message?.includes('license') || error.message?.includes('auth')) {\n errorCode = 'LICENSE_ERROR';\n }\n\n return new FacebetterError(\n context ? `${context}: ${message}` : message,\n errorCode\n );\n }\n\n /**\n * Initializes the engine\n * @param {Object} [options] - Initialization options\n * @param {number} [options.timeout] - Timeout in milliseconds (default: 30000 for WASM, 10000 for auth)\n * @param {number} [options.authTimeout] - Timeout for online authentication in milliseconds (default: 10000)\n * @returns {Promise<void>} Promise that resolves when initialization is complete\n */\n async init(options = {}) {\n // 并发控制:如果已经初始化,直接返回\n if (this.initialized) {\n return;\n }\n\n // 并发控制:如果正在初始化,返回同一个 Promise\n if (this._initPromise) {\n return this._initPromise;\n }\n\n // 创建初始化 Promise\n this._initPromise = (async () => {\n try {\n const wasmTimeout = options.timeout || 30000;\n const authTimeout = options.authTimeout || 10000;\n\n // 等待 WASM 模块加载(带超时)\n try {\n await Promise.race([\n this._wasmLoadPromise,\n this._createTimeout(wasmTimeout, 'WASM module loading')\n ]);\n } catch (error) {\n throw this._enhanceError(error, 'Failed to load WASM module');\n }\n\n const Module = this._getWasmModule();\n\n let licenseJsonToUse = this.licenseJson;\n\n // 如果用户提供了 appId 和 appKey(但没有提供 licenseJson),则在 JS 层发送 HTTP 请求\n if (this.appId && this.appKey && !this.licenseJson && this._verifyAppKeyOnline) {\n try {\n // 在线认证(带超时)\n const authResponse = await Promise.race([\n this._verifyAppKeyOnline(this.appId, this.appKey),\n this._createTimeout(authTimeout, 'Online authentication')\n ]);\n \n if (!authResponse) {\n throw new FacebetterError(\n 'Failed to get server response from online_auth API. The server returned an empty response.',\n 'AUTH_EMPTY_RESPONSE'\n );\n }\n\n // 将服务器响应转换为 JSON 字符串,作为 licenseJson 传递给 WASM 层\n licenseJsonToUse = JSON.stringify(authResponse);\n console.log('Online auth response received, using as licenseJson');\n } catch (error) {\n if (error instanceof FacebetterError && error.code === 'TIMEOUT') {\n throw new FacebetterError(\n `Online authentication timed out after ${authTimeout}ms. Please check your network connection or provide licenseJson directly.`,\n 'AUTH_TIMEOUT'\n );\n }\n throw this._enhanceError(error, 'Failed to verify app key online');\n }\n }\n\n // 如果用户直接提供了 licenseJson,则直接使用\n // 如果通过 appId/appKey 获取到了响应,则使用响应作为 licenseJson\n // WASM 层只需要验证 licenseJson,不需要发送 HTTP 请求\n const enginePtr = Module.ccall(\n 'CreateBeautyEffectEngine',\n 'number',\n ['string', 'string'],\n [\n this.resourcePath,\n licenseJsonToUse || '' // 使用 licenseJson 验证\n ]\n );\n\n if (!enginePtr) {\n throw new FacebetterError(\n 'Failed to create BeautyEffect engine. This may be due to invalid license or resource path issues.',\n 'ENGINE_CREATE_FAILED'\n );\n }\n\n this.enginePtr = enginePtr;\n this.initialized = true;\n this._initPromise = null; // 清除 Promise 缓存,允许重新初始化(如果需要)\n } catch (error) {\n this._initPromise = null; // 清除 Promise 缓存,允许重试\n throw error;\n }\n })();\n\n return this._initPromise;\n }\n\n /**\n * Destroys the engine and releases resources\n */\n destroy() {\n if (!this.initialized || !this.enginePtr) {\n return;\n }\n\n const Module = this._getWasmModule();\n\n if (this.srcBufferPtr) {\n Module._free(this.srcBufferPtr);\n this.srcBufferPtr = null;\n }\n\n if (this.dstBufferPtr) {\n Module._free(this.dstBufferPtr);\n this.dstBufferPtr = null;\n }\n\n Module.ccall('DestroyBeautyEffectEngine', null, ['number'], [this.enginePtr]);\n this.enginePtr = null;\n this.initialized = false;\n this.bufferSize = 0;\n this._initPromise = null; // 清除初始化 Promise\n \n // Clean up offscreen canvas\n if (this._offscreenCanvas) {\n this._offscreenCanvas = null;\n this._offscreenCtx = null;\n }\n \n // Clean up gpupixel_canvas if we created it\n if (this._cleanupGPUPixelCanvas) {\n this._cleanupGPUPixelCanvas();\n }\n }\n\n /**\n * Sets log configuration\n * Can be called before init() since SetLogConfig is a global function\n * @param {Object} config - Log configuration\n * @param {boolean} config.consoleEnabled - Enable console logging\n * @param {boolean} config.fileEnabled - Enable file logging\n * @param {number} config.level - Log level\n * @param {string} config.fileName - Log file name\n * @returns {Promise<void>} Promise that resolves when log config is set\n */\n async setLogConfig(config) {\n // Wait for WASM module to be loaded (started in constructor)\n await this._wasmLoadPromise;\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'SetLogConfig',\n 'number',\n ['bool', 'bool', 'number', 'string'],\n [\n config.consoleEnabled || false,\n config.fileEnabled || false,\n config.level || 0,\n config.fileName || ''\n ]\n );\n\n checkResult(result, 'Failed to set log config');\n }\n\n /**\n * Enables or disables a beauty type\n * @param {number} beautyType - Beauty type (use BeautyType enum)\n * @param {boolean} enabled - Enable or disable\n */\n setBeautyTypeEnabled(beautyType, enabled) {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'SetBeautyTypeEnabled',\n 'number',\n ['number', 'number', 'number'],\n [this.enginePtr, beautyType, enabled ? 1 : 0]\n );\n\n checkResult(result, `Failed to ${enabled ? 'enable' : 'disable'} beauty type`);\n }\n\n /**\n * Checks if a beauty type is enabled\n * @param {number} beautyType - Beauty type (use BeautyType enum)\n * @returns {boolean} True if enabled\n */\n isBeautyTypeEnabled(beautyType) {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'IsBeautyTypeEnabled',\n 'number',\n ['number', 'number'],\n [this.enginePtr, beautyType]\n );\n\n if (result === -1) {\n throw new FacebetterError('Failed to check beauty type status');\n }\n\n return result === 1;\n }\n\n /**\n * Disables all beauty types\n */\n disableAllBeautyTypes() {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'DisableAllBeautyTypes',\n 'number',\n ['number'],\n [this.enginePtr]\n );\n\n checkResult(result, 'Failed to disable all beauty types');\n }\n\n /**\n * Sets a basic beauty parameter\n * @param {number} param - Parameter (use BasicParam enum)\n * @param {number} value - Parameter value (0.0 - 1.0)\n */\n setBasicParam(param, value) {\n this._ensureInitialized();\n this._setBeautyParam('SetBeautyParamBasic', param, value);\n }\n\n /**\n * Sets a reshape parameter\n * @param {number} param - Parameter (use ReshapeParam enum)\n * @param {number} value - Parameter value (0.0 - 1.0)\n */\n setReshapeParam(param, value) {\n this._ensureInitialized();\n this._setBeautyParam('SetBeautyParamReshape', param, value);\n }\n\n /**\n * Sets a makeup parameter\n * @param {number} param - Parameter (use MakeupParam enum)\n * @param {number} value - Parameter value (0.0 - 1.0)\n */\n setMakeupParam(param, value) {\n this._ensureInitialized();\n this._setBeautyParam('SetBeautyParamMakeup', param, value);\n }\n\n /**\n * Internal method to set beauty parameters\n * @private\n */\n _setBeautyParam(functionName, param, value) {\n if (value < 0 || value > 1) {\n throw new FacebetterError('Parameter value must be between 0.0 and 1.0');\n }\n\n const Module = this._getWasmModule();\n const result = Module.ccall(\n functionName,\n 'number',\n ['number', 'number', 'number'],\n [this.enginePtr, param, value]\n );\n\n checkResult(result, `Failed to set beauty parameter`);\n }\n\n /**\n * Sets virtual background mode\n * @param {number} mode - Background mode (use BackgroundMode enum)\n */\n setVirtualBackgroundMode(mode) {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'SetVirtualBackgroundMode',\n 'number',\n ['number', 'number'],\n [this.enginePtr, mode]\n );\n\n checkResult(result, 'Failed to set virtual background mode');\n }\n\n /**\n * Sets virtual background image\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement} image - Background image\n */\n setVirtualBackgroundImage(image) {\n this._ensureInitialized();\n const imageData = this._toImageData(image);\n const Module = this._getWasmModule();\n\n const bufferSize = imageData.width * imageData.height * 4;\n const imageBufferPtr = Module._malloc(bufferSize);\n\n try {\n const buffer = this._getWasmBuffer();\n const view = new Uint8Array(buffer, imageBufferPtr, bufferSize);\n view.set(imageData.data);\n\n const result = Module.ccall(\n 'SetVirtualBackgroundImage',\n 'number',\n ['number', 'number', 'number', 'number', 'number'],\n [\n this.enginePtr,\n imageBufferPtr,\n imageData.width,\n imageData.height,\n imageData.width * 4\n ]\n );\n\n checkResult(result, 'Failed to set virtual background image');\n } finally {\n Module._free(imageBufferPtr);\n }\n }\n\n /**\n * Ensures buffers are allocated for the given dimensions\n * @private\n */\n _ensureBuffers(width, height) {\n const requiredSize = width * height * 4;\n\n if (this.bufferSize < requiredSize) {\n const Module = this._getWasmModule();\n\n if (this.srcBufferPtr) {\n Module._free(this.srcBufferPtr);\n }\n if (this.dstBufferPtr) {\n Module._free(this.dstBufferPtr);\n }\n\n this.srcBufferPtr = Module._malloc(requiredSize);\n this.dstBufferPtr = Module._malloc(requiredSize);\n this.bufferSize = requiredSize;\n\n if (!this.srcBufferPtr || !this.dstBufferPtr) {\n throw new FacebetterError('Failed to allocate memory buffers');\n }\n }\n }\n\n /**\n * Processes an image\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|Uint8ClampedArray} input - Input image\n * @param {number} width - Image width (required if input is Uint8ClampedArray)\n * @param {number} height - Image height (required if input is Uint8ClampedArray)\n * @param {number} processMode - Process mode (use ProcessMode enum, default: ProcessMode.Image)\n * @returns {ImageData} Processed image data\n */\n processImage(input, width, height, processMode = ProcessMode.Image) {\n this._ensureInitialized();\n const imageData = this._platformAPI.toImageData(input, width, height);\n const Module = this._getWasmModule();\n\n this._ensureBuffers(imageData.width, imageData.height);\n\n const bufferSize = imageData.width * imageData.height * 4;\n\n try {\n const buffer = this._getWasmBuffer();\n \n const srcView = new Uint8Array(buffer, this.srcBufferPtr, bufferSize);\n srcView.set(imageData.data);\n\n const result = Module.ccall(\n 'ProcessImageRGBA',\n 'number',\n ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n [\n this.enginePtr,\n this.srcBufferPtr,\n imageData.width,\n imageData.height,\n imageData.width * 4,\n this.dstBufferPtr,\n processMode\n ]\n );\n\n checkResult(result, 'Failed to process image');\n\n const currentBuffer = this._getWasmBuffer();\n const dstView = new Uint8Array(currentBuffer, this.dstBufferPtr, bufferSize);\n const processedData = new Uint8ClampedArray(dstView);\n\n return new ImageData(processedData, imageData.width, imageData.height);\n } catch (error) {\n if (error instanceof FacebetterError) {\n throw error;\n }\n throw new FacebetterError(`Image processing error: ${error.message}`);\n }\n }\n\n /**\n * Ensures the engine is initialized\n * @private\n * @throws {FacebetterError} If engine is not initialized\n */\n _ensureInitialized() {\n if (!this.initialized || !this.enginePtr) {\n throw new FacebetterError('Engine not initialized. Call init() first.');\n }\n }\n\n /**\n * Ensures gpupixel_canvas exists in the DOM (browser only)\n * This canvas is required by GPUPixel for WebGL context creation\n * @private\n */\n _ensureGPUPixelCanvas() {\n if (typeof document === 'undefined') {\n return;\n }\n \n let canvas = document.getElementById('gpupixel_canvas');\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = 'gpupixel_canvas';\n canvas.style.display = 'none';\n canvas.width = 1;\n canvas.height = 1;\n document.body.appendChild(canvas);\n this._createdGPUPixelCanvas = true;\n }\n this._gpupixelCanvas = canvas;\n }\n\n /**\n * Cleans up gpupixel_canvas if it was created by this engine instance (browser only)\n * @private\n */\n _cleanupGPUPixelCanvas() {\n if (this._createdGPUPixelCanvas && this._gpupixelCanvas) {\n this._gpupixelCanvas.remove();\n this._gpupixelCanvas = null;\n this._createdGPUPixelCanvas = false;\n }\n }\n\n /**\n * Ensures offscreen canvas exists and matches the required dimensions (browser only)\n * This canvas is reused for video processing to avoid creating temporary canvases\n * @private\n * @param {number} width - Required canvas width\n * @param {number} height - Required canvas height\n */\n _ensureOffscreenCanvas(width, height) {\n if (typeof document === 'undefined') {\n return null;\n }\n \n if (!this._offscreenCanvas || \n this._offscreenCanvas.width !== width || \n this._offscreenCanvas.height !== height) {\n this._offscreenCanvas = document.createElement('canvas');\n this._offscreenCanvas.width = width;\n this._offscreenCanvas.height = height;\n this._offscreenCtx = this._offscreenCanvas.getContext('2d', { willReadFrequently: true });\n }\n return this._offscreenCanvas;\n }\n\n}\n\n","/**\n * Browser-specific WASM Module Loader\n * Supports ESM format WASM modules (generated with MODULARIZE and EXPORT_ES6)\n * Uses document.currentScript for automatic path detection in UMD builds\n */\n\n/**\n * Gets the base path of the current script\n * Similar to Node.js __dirname\n * Handles various deployment scenarios: same directory, CDN, subdirectories\n * @returns {string} Base path of the current script (with trailing slash)\n */\nexport function getScriptBasePath() {\n let scriptUrl = null;\n \n // Method 1: document.currentScript (most reliable, works in sync execution)\n if (typeof document !== 'undefined' && document.currentScript?.src) {\n scriptUrl = document.currentScript.src;\n }\n \n // Method 2: Traverse script tags (fallback for async scripts)\n if (!scriptUrl && typeof document !== 'undefined') {\n const scripts = document.getElementsByTagName('script');\n // Check from end to start (most recent first)\n for (let i = scripts.length - 1; i >= 0; i--) {\n const src = scripts[i].src;\n if (src && (src.includes('facebetter.js') || src.includes('facebetter'))) {\n scriptUrl = src;\n break;\n }\n }\n }\n \n // Method 3: Try to find script by checking all scripts\n if (!scriptUrl && typeof document !== 'undefined') {\n const scripts = document.getElementsByTagName('script');\n for (let i = scripts.length - 1; i >= 0; i--) {\n const src = scripts[i].src;\n if (src) {\n // Use the last script tag as fallback\n scriptUrl = src;\n break;\n }\n }\n }\n \n // Extract base path from script URL\n if (scriptUrl) {\n try {\n const url = new URL(scriptUrl);\n return url.href.substring(0, url.href.lastIndexOf('/') + 1);\n } catch (e) {\n // If URL parsing fails, use string manipulation\n return scriptUrl.substring(0, scriptUrl.lastIndexOf('/') + 1);\n }\n }\n \n // Method 4: Fallback to current location (least reliable)\n if (typeof location !== 'undefined') {\n try {\n const url = new URL('.', location.href);\n return url.href;\n } catch (e) {\n return location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1);\n }\n }\n \n // Last resort\n return './';\n}\n\n/**\n * Resolves a relative path to absolute URL\n * Handles various path formats and edge cases\n * @param {string} relativePath - Relative path (e.g., 'facebetter-core.js')\n * @param {string} basePath - Base path (with trailing slash)\n * @returns {string} Absolute URL\n */\nexport function resolvePath(relativePath, basePath) {\n // If relativePath is already absolute, return as-is\n if (relativePath.startsWith('http://') || relativePath.startsWith('https://') || relativePath.startsWith('//')) {\n return relativePath;\n }\n \n try {\n // Use URL API for proper resolution\n const base = basePath.endsWith('/') ? basePath : basePath + '/';\n return new URL(relativePath, base).href;\n } catch (e) {\n // Fallback: simple concatenation\n const base = basePath.endsWith('/') ? basePath : basePath + '/';\n // Remove leading ./ from relativePath if present\n const cleanPath = relativePath.replace(/^\\.\\//, '');\n return base + cleanPath;\n }\n}\n\nlet wasmModulePromise = null;\nlet wasmModuleInstance = null;\n\n/**\n * Loads the WebAssembly module (browser version)\n * Supports ESM format WASM modules generated by Emscripten with MODULARIZE and EXPORT_ES6\n * With SINGLE_FILE=1, WASM binary and data files are embedded in the JS file\n * @param {Object} [options] - Options\n * @param {string} [options.wasmUrl] - Custom WASM module URL (defaults to facebetter-core npm package)\n * @param {Function} [options.locateFile] - Custom locateFile function (usually not needed with SINGLE_FILE=1)\n * @returns {Promise<Object>} Promise that resolves with the WASM module\n */\nexport async function loadWasmModule(options = {}) {\n if (wasmModuleInstance) {\n return wasmModuleInstance;\n }\n\n if (wasmModulePromise) {\n return wasmModulePromise;\n }\n\n wasmModulePromise = (async () => {\n try {\n let FaceBetterModuleFactory;\n \n if (options.wasmUrl) {\n // If custom URL is provided, use it (for backward compatibility or custom builds)\n const wasmModule = await import(options.wasmUrl);\n FaceBetterModuleFactory = wasmModule.default || wasmModule.createFaceBetterModule;\n } else {\n // Try to import from facebetter-core npm package\n // Note: In UMD builds, this may not work if facebetter-core is not available\n // In that case, fallback to relative path detection\n try {\n const wasmModule = await import('facebetter-core');\n FaceBetterModuleFactory = wasmModule.default || wasmModule.createFaceBetterModule;\n } catch (e) {\n // Fallback: try to find facebetter-core.js relative to current script\n // This handles UMD builds where npm packages may not be available\n const basePath = getScriptBasePath();\n const wasmPath = resolvePath('facebetter-core.js', basePath);\n const wasmModule = await import(wasmPath);\n FaceBetterModuleFactory = wasmModule.default || wasmModule.createFaceBetterModule;\n }\n }\n \n if (!FaceBetterModuleFactory) {\n throw new Error('WASM module does not export createFaceBetterModule function');\n }\n\n // Configure module options\n // With SINGLE_FILE=1, WASM binary and data files are embedded in the JS file\n // No need to handle .wasm and .data file paths separately\n const moduleOptions = {\n locateFile: options.locateFile || function(path, prefix) {\n // With SINGLE_FILE=1, Emscripten handles embedded files automatically\n // Custom locateFile is only needed if user provides one\n return prefix + path;\n },\n ...options\n };\n\n // Initialize the module (MODULARIZE returns a Promise)\n wasmModuleInstance = await FaceBetterModuleFactory(moduleOptions);\n \n if (!wasmModuleInstance) {\n throw new Error('Failed to initialize WASM module');\n }\n\n wasmModuleInstance.ready = true;\n return wasmModuleInstance;\n } catch (e) {\n wasmModulePromise = null;\n throw new Error(`Failed to load WASM module: ${e.message}`);\n }\n })();\n\n return wasmModulePromise;\n}\n\n/**\n * Gets the current WASM module instance\n * @returns {Object} WASM module instance\n * @throws {Error} If module is not loaded\n */\nexport function getWasmModule() {\n if (!wasmModuleInstance) {\n throw new Error('WASM module not loaded. Call loadWasmModule() first or use BeautyEffectEngine.init()');\n }\n return wasmModuleInstance;\n}\n\n/**\n * Gets the current WASM memory buffer, handling potential reallocation\n * @returns {ArrayBuffer} Current WASM memory buffer\n */\nexport function getWasmBuffer() {\n const Module = getWasmModule();\n \n if (Module.buffer) {\n return Module.buffer;\n } else if (Module.HEAPU8 && Module.HEAPU8.buffer) {\n return Module.HEAPU8.buffer;\n } else if (Module.asm && Module.asm.memory) {\n return Module.asm.memory.buffer;\n }\n \n throw new Error('Unable to access WASM memory buffer');\n}\n\n","/**\n * Browser-specific Image Utilities\n * Uses DOM APIs (canvas, ImageData, etc.)\n */\n\nimport { FacebetterError } from '../core/errors.js';\n\n/**\n * Converts various image sources to ImageData (browser version)\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|Uint8ClampedArray} source - Image source\n * @param {number} width - Image width (required if source is Uint8ClampedArray)\n * @param {number} height - Image height (required if source is Uint8ClampedArray)\n * @returns {ImageData} ImageData object\n */\nexport function toImageData(source, width, height) {\n if (source instanceof ImageData) {\n return source;\n }\n\n if (source instanceof HTMLCanvasElement || source instanceof HTMLVideoElement) {\n const canvas = source instanceof HTMLCanvasElement ? source : document.createElement('canvas');\n if (source instanceof HTMLVideoElement) {\n canvas.width = source.videoWidth;\n canvas.height = source.videoHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(source, 0, 0);\n }\n const ctx = canvas.getContext('2d');\n return ctx.getImageData(0, 0, canvas.width, canvas.height);\n }\n\n if (source instanceof HTMLImageElement) {\n const canvas = document.createElement('canvas');\n canvas.width = source.naturalWidth || source.width;\n canvas.height = source.naturalHeight || source.height;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(source, 0, 0);\n return ctx.getImageData(0, 0, canvas.width, canvas.height);\n }\n\n if (source instanceof Uint8ClampedArray) {\n if (width === undefined || height === undefined) {\n throw new FacebetterError('Width and height are required when source is Uint8ClampedArray');\n }\n return new ImageData(source, width, height);\n }\n\n throw new FacebetterError('Unsupported image source type');\n}\n\n/**\n * Gets User-Agent string for web platform\n * @returns {string} User-Agent string\n */\nexport function getUserAgentString() {\n return 'FB/1.0 (web; wasm32)';\n}\n\n/**\n * Generates HMAC-SHA256 signature (browser version)\n * @param {string} key - HMAC key (app_key)\n * @param {string} data - Data to sign (timestamp string)\n * @returns {Promise<string>} Promise that resolves with hex-encoded signature\n */\nexport async function generateHMACSignature(key, data) {\n const encoder = new TextEncoder();\n const keyData = encoder.encode(key);\n const messageData = encoder.encode(data);\n\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n const signature = await crypto.subtle.sign('HMAC', cryptoKey, messageData);\n\n // Convert to hex string\n const hashArray = Array.from(new Uint8Array(signature));\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n return hashHex;\n}\n\n/**\n * Calls online_auth API to verify app_key (browser version)\n * @param {string} appId - Application ID\n * @param {string} appKey - Application key\n * @returns {Promise<Object>} Promise that resolves with response data\n */\nexport async function verifyAppKeyOnline(appId, appKey) {\n try {\n const timestamp = Math.floor(Date.now() / 1000);\n const timestampStr = timestamp.toString();\n const hmacSignature = await generateHMACSignature(appKey, timestampStr);\n\n const requestBody = {\n p_app_id: appId,\n p_hmac_signature: hmacSignature,\n p_timestamp: timestamp,\n p_user_agent: getUserAgentString()\n };\n\n const response = await fetch('https://facebetter.pixpark.net/rest/v1/rpc/online_auth', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': getUserAgentString()\n },\n body: JSON.stringify(requestBody)\n });\n\n const responseData = await response.json();\n return responseData;\n } catch (error) {\n console.error('Online auth request failed:', error);\n return null;\n }\n}\n\n","/**\n * Browser Entry Point\n * For <script> tag usage (UMD format)\n * Note: WASM module is ESM format, loaded via dynamic import()\n */\n\nimport { BeautyEffectEngine } from '../core/engine.js';\nimport { EngineConfig } from '../core/config.js';\nimport { FacebetterError } from '../core/errors.js';\nimport * as constants from '../core/constants.js';\nimport * as wasmLoader from './wasm-loader.js';\nimport * as imageUtils from './image-utils.js';\n\n// Browser-specific GPU canvas management\nfunction ensureGPUPixelCanvas() {\n if (typeof document === 'undefined') {\n return;\n }\n \n let canvas = document.getElementById('gpupixel_canvas');\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = 'gpupixel_canvas';\n canvas.style.display = 'none';\n canvas.width = 1;\n canvas.height = 1;\n if (document.body) {\n document.body.appendChild(canvas);\n }\n }\n}\n\nfunction cleanupGPUPixelCanvas() {\n // Cleanup is handled by engine instance\n}\n\n// Create platform API\nconst platformAPI = {\n loadWasmModule: () => wasmLoader.loadWasmModule(),\n getWasmModule: wasmLoader.getWasmModule,\n getWasmBuffer: wasmLoader.getWasmBuffer,\n toImageData: imageUtils.toImageData,\n verifyAppKeyOnline: imageUtils.verifyAppKeyOnline,\n ensureGPUPixelCanvas,\n cleanupGPUPixelCanvas\n};\n\n// Export factory function for UMD\nexport function createBeautyEffectEngine(config) {\n return new BeautyEffectEngine(config, platformAPI);\n}\n\n// Create a wrapped BeautyEffectEngine class that automatically injects platformAPI\n// This allows users to use: new BeautyEffectEngine(config) without passing platformAPI\nclass BrowserBeautyEffectEngine extends BeautyEffectEngine {\n constructor(config) {\n // Automatically inject platformAPI for browser environment\n super(config, platformAPI);\n }\n}\n\n// Export all constants and classes\nexport {\n BrowserBeautyEffectEngine as BeautyEffectEngine,\n EngineConfig,\n FacebetterError\n};\n\n// Export constants with proper names\nexport const BeautyType = constants.BeautyType;\nexport const BasicParam = constants.BasicParam;\nexport const ReshapeParam = constants.ReshapeParam;\nexport const MakeupParam = constants.MakeupParam;\nexport const BackgroundMode = constants.BackgroundMode;\nexport const ProcessMode = constants.ProcessMode;\n\n// Export WASM loader\nexport { loadWasmModule } from './wasm-loader.js';\n\n// Default export\nexport default {\n BeautyEffectEngine: BrowserBeautyEffectEngine,\n EngineConfig,\n FacebetterError,\n ...constants,\n loadWasmModule: wasmLoader.loadWasmModule\n};\n\n"],"names":["BeautyType","BasicParam","ReshapeParam","MakeupParam","BackgroundMode","ProcessMode","wasmLoader.loadWasmModule","wasmLoader.getWasmModule","wasmLoader.getWasmBuffer","imageUtils.toImageData","imageUtils.verifyAppKeyOnline","constants.BeautyType","constants.BasicParam","constants.ReshapeParam","constants.MakeupParam","constants.BackgroundMode","constants.ProcessMode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"facebetter.js","sources":["../src/core/errors.js","../src/core/config.js","../src/core/constants.js","../src/core/engine.js","../src/browser/wasm-loader.js","../src/browser/image-utils.js","../src/browser/index.js"],"sourcesContent":["/**\n * Facebetter Error Classes\n * Platform-agnostic error handling\n */\n\n/**\n * Facebetter error class\n */\nexport class FacebetterError extends Error {\n constructor(message, code = -1) {\n super(message);\n this.name = 'FacebetterError';\n this.code = code;\n }\n}\n\n/**\n * Checks if a result code indicates success\n * @param {number} result - Result code from WASM function\n * @throws {FacebetterError} If result indicates failure\n */\nexport function checkResult(result, errorMessage = 'Operation failed') {\n if (result !== 0) {\n throw new FacebetterError(`${errorMessage} (error code: ${result})`, result);\n }\n}\n\n","/**\n * Engine Configuration\n * Platform-agnostic configuration class\n */\n\nimport { FacebetterError } from './errors.js';\n\n/**\n * Engine configuration class\n * Similar to EngineConfig struct in C++/Java/OC\n */\nexport class EngineConfig {\n /**\n * Creates a new EngineConfig instance\n * @param {Object} config - Configuration object\n * @param {string} [config.appId] - Application ID (required if licenseJson is not provided)\n * @param {string} [config.appKey] - Application key (required if licenseJson is not provided)\n * @param {string} [config.licenseJson] - License JSON string (optional, if provided, appId and appKey are not required)\n */\n constructor(config = {}) {\n this.appId = config.appId || null;\n this.appKey = config.appKey || null;\n this.licenseJson = config.licenseJson || null;\n this.resourcePath = '/facebetter/resource.bundle';\n }\n\n /**\n * Validates the configuration\n * @returns {boolean} True if valid\n */\n isValid() {\n // 如果提供了 licenseJson,则使用授权数据验证\n if (this.licenseJson) {\n return typeof this.licenseJson === 'string' && this.licenseJson.trim() !== '';\n }\n // 否则需要 appId 和 appKey\n return this.appId && typeof this.appId === 'string' && this.appId.trim() !== '' &&\n this.appKey && typeof this.appKey === 'string' && this.appKey.trim() !== '';\n }\n\n /**\n * Returns a string representation of the config\n * @returns {string} String representation\n */\n toString() {\n return `EngineConfig{appId='${this.appId ? this.appId.substring(0, Math.min(this.appId.length, 8)) + '...' : 'null'}', appKey='${this.appKey ? '***' : 'null'}', licenseJson=${this.licenseJson ? 'provided' : 'null'}}`;\n }\n}\n\n","/**\n * Facebetter Constants and Enums\n * Platform-agnostic constants\n */\n\n/**\n * Beauty type enumeration\n */\nexport const BeautyType = {\n Basic: 0, // 基础美颜\n Reshape: 1, // 面部重塑\n Makeup: 2, // 美妆效果\n VirtualBackground: 3 // 虚拟背景\n};\n\n/**\n * Basic beauty parameter enumeration\n */\nexport const BasicParam = {\n Smoothing: 0, // 磨皮\n Sharpening: 1, // 锐化\n Whitening: 2, // 美白\n Rosiness: 3 // 红润\n};\n\n/**\n * Face reshape parameter enumeration\n */\nexport const ReshapeParam = {\n FaceThin: 0, // 瘦脸\n FaceVShape: 1, // V脸\n FaceNarrow: 2, // 窄脸\n FaceShort: 3, // 短脸\n Cheekbone: 4, // 颧骨\n Jawbone: 5, // 下颌骨\n Chin: 6, // 下巴\n NoseSlim: 7, // 瘦鼻梁\n EyeSize: 8, // 大眼\n EyeDistance: 9 // 眼距\n};\n\n/**\n * Makeup parameter enumeration\n */\nexport const MakeupParam = {\n Lipstick: 0, // 口红\n Blush: 1 // 腮红\n};\n\n/**\n * Background mode enumeration\n */\nexport const BackgroundMode = {\n None: 0, // 无背景处理\n Blur: 1, // 模糊背景\n Image: 2 // 背景图片替换\n};\n\n/**\n * Process mode enumeration\n */\nexport const ProcessMode = {\n Image: 0, // 图片模式\n Video: 1 // 视频模式\n};\n\n/**\n * Virtual background options class\n * Matches the C++/Java/OC API design\n */\nexport class VirtualBackgroundOptions {\n /**\n * Creates a new VirtualBackgroundOptions instance\n * @param {Object} [options] - Options object\n * @param {number} [options.mode] - Background mode (use BackgroundMode enum)\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement} [options.backgroundImage] - Background image (required when mode is Image)\n */\n constructor(options = {}) {\n this.mode = options.mode !== undefined ? options.mode : BackgroundMode.None;\n this.backgroundImage = options.backgroundImage || null;\n }\n\n /**\n * Validates the options\n * @returns {boolean} True if valid\n */\n isValid() {\n if (this.mode === BackgroundMode.Image) {\n return this.backgroundImage !== null;\n }\n return true;\n }\n}\n\n","/**\n * Beauty Effect Engine Core\n * Platform-agnostic engine implementation with dependency injection\n */\n\nimport { EngineConfig } from './config.js';\nimport { FacebetterError, checkResult } from './errors.js';\nimport { ProcessMode, BackgroundMode } from './constants.js';\n\n/**\n * Beauty effect engine class\n * Provides high-level API for face beauty effects processing\n * Uses dependency injection for platform-specific functionality\n */\nexport class BeautyEffectEngine {\n /**\n * Creates a new BeautyEffectEngine instance\n * @param {EngineConfig|Object} config - EngineConfig object or configuration object\n * @param {Object} platformAPI - Platform-specific API (injected)\n * @param {Function} platformAPI.loadWasmModule - WASM module loader\n * @param {Function} platformAPI.getWasmModule - Get WASM module instance\n * @param {Function} platformAPI.getWasmBuffer - Get WASM memory buffer\n * @param {Function} platformAPI.toImageData - Convert to ImageData\n * @param {Function} platformAPI.verifyAppKeyOnline - Verify app key online\n * @param {Function} [platformAPI.ensureGPUPixelCanvas] - Ensure GPU canvas exists (browser only)\n * @param {Function} [platformAPI.cleanupGPUPixelCanvas] - Cleanup GPU canvas (browser only)\n */\n constructor(config, platformAPI) {\n if (!config) {\n throw new FacebetterError('Config is required. Expected EngineConfig or configuration object');\n }\n\n if (!platformAPI) {\n throw new FacebetterError('Platform API is required');\n }\n\n // 如果传入的是 EngineConfig 实例,直接使用;否则创建新的 EngineConfig\n let engineConfig;\n if (config instanceof EngineConfig) {\n engineConfig = config;\n } else if (config && typeof config === 'object') {\n engineConfig = new EngineConfig(config);\n } else {\n throw new FacebetterError('Invalid configuration. Expected EngineConfig or configuration object');\n }\n\n if (!engineConfig.isValid()) {\n throw new FacebetterError('Invalid config: ' + engineConfig.toString());\n }\n\n this.config = engineConfig;\n this.appId = engineConfig.appId;\n this.appKey = engineConfig.appKey;\n this.licenseJson = engineConfig.licenseJson;\n this.resourcePath = '/facebetter/resource.bundle';\n this.enginePtr = null;\n this.initialized = false;\n this.srcBufferPtr = null;\n this.dstBufferPtr = null;\n this.bufferSize = 0;\n \n // Store platform API\n this._platformAPI = platformAPI;\n this._loadWasmModule = platformAPI.loadWasmModule;\n this._getWasmModule = platformAPI.getWasmModule;\n this._getWasmBuffer = platformAPI.getWasmBuffer;\n this._toImageData = platformAPI.toImageData;\n this._verifyAppKeyOnline = platformAPI.verifyAppKeyOnline;\n this._ensureGPUPixelCanvas = platformAPI.ensureGPUPixelCanvas;\n this._cleanupGPUPixelCanvas = platformAPI.cleanupGPUPixelCanvas;\n \n // Browser-specific state\n this._gpupixelCanvas = null;\n this._createdGPUPixelCanvas = false;\n this._offscreenCanvas = null;\n this._offscreenCtx = null;\n \n // Automatically create gpupixel_canvas if it doesn't exist (browser only)\n if (this._ensureGPUPixelCanvas) {\n this._ensureGPUPixelCanvas();\n }\n \n // Start loading WASM module immediately in constructor\n this._wasmLoadPromise = this._loadWasmModule();\n this._initPromise = null;\n }\n\n /**\n * Creates a timeout promise\n * @private\n * @param {number} timeout - Timeout in milliseconds\n * @param {string} operation - Operation name for error message\n * @returns {Promise} Promise that rejects after timeout\n */\n _createTimeout(timeout, operation) {\n return new Promise((_, reject) => {\n setTimeout(() => {\n reject(new FacebetterError(\n `${operation} timed out after ${timeout}ms. Please check your network connection or try increasing the timeout.`,\n 'TIMEOUT'\n ));\n }, timeout);\n });\n }\n\n /**\n * Enhances error with context information\n * @private\n * @param {Error} error - Original error\n * @param {string} context - Context information\n * @returns {FacebetterError} Enhanced error\n */\n _enhanceError(error, context) {\n if (error instanceof FacebetterError) {\n return error;\n }\n\n let errorCode = 'UNKNOWN_ERROR';\n let message = error.message || 'Unknown error occurred';\n\n // Categorize errors\n if (error.message?.includes('timeout') || error.message?.includes('TIMEOUT')) {\n errorCode = 'TIMEOUT';\n } else if (error.message?.includes('network') || error.message?.includes('fetch')) {\n errorCode = 'NETWORK_ERROR';\n } else if (error.message?.includes('WASM') || error.message?.includes('wasm')) {\n errorCode = 'WASM_LOAD_ERROR';\n } else if (error.message?.includes('license') || error.message?.includes('auth')) {\n errorCode = 'LICENSE_ERROR';\n }\n\n return new FacebetterError(\n context ? `${context}: ${message}` : message,\n errorCode\n );\n }\n\n /**\n * Initializes the engine\n * @param {Object} [options] - Initialization options\n * @param {number} [options.timeout] - Timeout in milliseconds (default: 30000 for WASM, 10000 for auth)\n * @param {number} [options.authTimeout] - Timeout for online authentication in milliseconds (default: 10000)\n * @returns {Promise<void>} Promise that resolves when initialization is complete\n */\n async init(options = {}) {\n // 并发控制:如果已经初始化,直接返回\n if (this.initialized) {\n return;\n }\n\n // 并发控制:如果正在初始化,返回同一个 Promise\n if (this._initPromise) {\n return this._initPromise;\n }\n\n // 创建初始化 Promise\n this._initPromise = (async () => {\n try {\n const wasmTimeout = options.timeout || 30000;\n const authTimeout = options.authTimeout || 10000;\n\n // 等待 WASM 模块加载(带超时)\n try {\n await Promise.race([\n this._wasmLoadPromise,\n this._createTimeout(wasmTimeout, 'WASM module loading')\n ]);\n } catch (error) {\n throw this._enhanceError(error, 'Failed to load WASM module');\n }\n\n const Module = this._getWasmModule();\n\n let licenseJsonToUse = this.licenseJson;\n\n // 如果用户提供了 appId 和 appKey(但没有提供 licenseJson),则在 JS 层发送 HTTP 请求\n if (this.appId && this.appKey && !this.licenseJson && this._verifyAppKeyOnline) {\n try {\n // 在线认证(带超时)\n const authResponse = await Promise.race([\n this._verifyAppKeyOnline(this.appId, this.appKey),\n this._createTimeout(authTimeout, 'Online authentication')\n ]);\n \n if (!authResponse) {\n throw new FacebetterError(\n 'Failed to get server response from online_auth API. The server returned an empty response.',\n 'AUTH_EMPTY_RESPONSE'\n );\n }\n\n // 将服务器响应转换为 JSON 字符串,作为 licenseJson 传递给 WASM 层\n licenseJsonToUse = JSON.stringify(authResponse);\n console.log('Online auth response received, using as licenseJson');\n } catch (error) {\n if (error instanceof FacebetterError && error.code === 'TIMEOUT') {\n throw new FacebetterError(\n `Online authentication timed out after ${authTimeout}ms. Please check your network connection or provide licenseJson directly.`,\n 'AUTH_TIMEOUT'\n );\n }\n throw this._enhanceError(error, 'Failed to verify app key online');\n }\n }\n\n // 如果用户直接提供了 licenseJson,则直接使用\n // 如果通过 appId/appKey 获取到了响应,则使用响应作为 licenseJson\n // WASM 层只需要验证 licenseJson,不需要发送 HTTP 请求\n const enginePtr = Module.ccall(\n 'CreateBeautyEffectEngine',\n 'number',\n ['string', 'string'],\n [\n this.resourcePath,\n licenseJsonToUse || '' // 使用 licenseJson 验证\n ]\n );\n\n if (!enginePtr) {\n throw new FacebetterError(\n 'Failed to create BeautyEffect engine. This may be due to invalid license or resource path issues.',\n 'ENGINE_CREATE_FAILED'\n );\n }\n\n this.enginePtr = enginePtr;\n this.initialized = true;\n this._initPromise = null; // 清除 Promise 缓存,允许重新初始化(如果需要)\n } catch (error) {\n this._initPromise = null; // 清除 Promise 缓存,允许重试\n throw error;\n }\n })();\n\n return this._initPromise;\n }\n\n /**\n * Destroys the engine and releases resources\n */\n destroy() {\n if (!this.initialized || !this.enginePtr) {\n return;\n }\n\n const Module = this._getWasmModule();\n\n if (this.srcBufferPtr) {\n Module._free(this.srcBufferPtr);\n this.srcBufferPtr = null;\n }\n\n if (this.dstBufferPtr) {\n Module._free(this.dstBufferPtr);\n this.dstBufferPtr = null;\n }\n\n Module.ccall('DestroyBeautyEffectEngine', null, ['number'], [this.enginePtr]);\n this.enginePtr = null;\n this.initialized = false;\n this.bufferSize = 0;\n this._initPromise = null; // 清除初始化 Promise\n \n // Clean up offscreen canvas\n if (this._offscreenCanvas) {\n this._offscreenCanvas = null;\n this._offscreenCtx = null;\n }\n \n // Clean up gpupixel_canvas if we created it\n if (this._cleanupGPUPixelCanvas) {\n this._cleanupGPUPixelCanvas();\n }\n }\n\n /**\n * Sets log configuration\n * Can be called before init() since SetLogConfig is a global function\n * @param {Object} config - Log configuration\n * @param {boolean} config.consoleEnabled - Enable console logging\n * @param {boolean} config.fileEnabled - Enable file logging\n * @param {number} config.level - Log level\n * @param {string} config.fileName - Log file name\n * @returns {Promise<void>} Promise that resolves when log config is set\n */\n async setLogConfig(config) {\n // Wait for WASM module to be loaded (started in constructor)\n await this._wasmLoadPromise;\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'SetLogConfig',\n 'number',\n ['bool', 'bool', 'number', 'string'],\n [\n config.consoleEnabled || false,\n config.fileEnabled || false,\n config.level || 0,\n config.fileName || ''\n ]\n );\n\n checkResult(result, 'Failed to set log config');\n }\n\n /**\n * Enables or disables a beauty type\n * @param {number} beautyType - Beauty type (use BeautyType enum)\n * @param {boolean} enabled - Enable or disable\n */\n setBeautyTypeEnabled(beautyType, enabled) {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'SetBeautyTypeEnabled',\n 'number',\n ['number', 'number', 'number'],\n [this.enginePtr, beautyType, enabled ? 1 : 0]\n );\n\n checkResult(result, `Failed to ${enabled ? 'enable' : 'disable'} beauty type`);\n }\n\n /**\n * Checks if a beauty type is enabled\n * @param {number} beautyType - Beauty type (use BeautyType enum)\n * @returns {boolean} True if enabled\n */\n isBeautyTypeEnabled(beautyType) {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'IsBeautyTypeEnabled',\n 'number',\n ['number', 'number'],\n [this.enginePtr, beautyType]\n );\n\n if (result === -1) {\n throw new FacebetterError('Failed to check beauty type status');\n }\n\n return result === 1;\n }\n\n /**\n * Disables all beauty types\n */\n disableAllBeautyTypes() {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n\n const result = Module.ccall(\n 'DisableAllBeautyTypes',\n 'number',\n ['number'],\n [this.enginePtr]\n );\n\n checkResult(result, 'Failed to disable all beauty types');\n }\n\n /**\n * Sets a basic beauty parameter\n * @param {number} param - Parameter (use BasicParam enum)\n * @param {number} value - Parameter value (0.0 - 1.0)\n */\n setBasicParam(param, value) {\n this._ensureInitialized();\n this._setBeautyParam('SetBeautyParamBasic', param, value);\n }\n\n /**\n * Sets a reshape parameter\n * @param {number} param - Parameter (use ReshapeParam enum)\n * @param {number} value - Parameter value (0.0 - 1.0)\n */\n setReshapeParam(param, value) {\n this._ensureInitialized();\n this._setBeautyParam('SetBeautyParamReshape', param, value);\n }\n\n /**\n * Sets a makeup parameter\n * @param {number} param - Parameter (use MakeupParam enum)\n * @param {number} value - Parameter value (0.0 - 1.0)\n */\n setMakeupParam(param, value) {\n this._ensureInitialized();\n this._setBeautyParam('SetBeautyParamMakeup', param, value);\n }\n\n /**\n * Internal method to set beauty parameters\n * @private\n */\n _setBeautyParam(functionName, param, value) {\n if (value < 0 || value > 1) {\n throw new FacebetterError('Parameter value must be between 0.0 and 1.0');\n }\n\n const Module = this._getWasmModule();\n const result = Module.ccall(\n functionName,\n 'number',\n ['number', 'number', 'number'],\n [this.enginePtr, param, value]\n );\n\n checkResult(result, `Failed to set beauty parameter`);\n }\n\n /**\n * Sets virtual background options (unified API, matches C++/Java/OC)\n * @param {VirtualBackgroundOptions|Object} options - Virtual background options\n * @param {number} [options.mode] - Background mode (use BackgroundMode enum)\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement} [options.backgroundImage] - Background image (required when mode is Image)\n */\n setVirtualBackground(options) {\n this._ensureInitialized();\n const Module = this._getWasmModule();\n \n // Support both VirtualBackgroundOptions object and plain object\n const opts = options.mode !== undefined ? options : { mode: BackgroundMode.None, backgroundImage: null };\n \n let imageData = null;\n let imageBufferPtr = null;\n \n try {\n // 如果提供了背景图片,转换为 ImageData 并准备缓冲区\n if (opts.backgroundImage) {\n imageData = this._toImageData(opts.backgroundImage);\n const bufferSize = imageData.width * imageData.height * 4;\n imageBufferPtr = Module._malloc(bufferSize);\n \n const buffer = this._getWasmBuffer();\n const view = new Uint8Array(buffer, imageBufferPtr, bufferSize);\n view.set(imageData.data);\n }\n \n // 使用统一的 SetVirtualBackground C 接口(与其他平台一致)\n const result = Module.ccall(\n 'SetVirtualBackground',\n 'number',\n ['number', 'number', 'number', 'number', 'number', 'number'],\n [\n this.enginePtr,\n opts.mode,\n imageBufferPtr || 0, // 如果为 null,传递 0\n imageData ? imageData.width : 0,\n imageData ? imageData.height : 0,\n imageData ? imageData.width * 4 : 0\n ]\n );\n \n checkResult(result, 'Failed to set virtual background');\n } finally {\n // 释放内存\n if (imageBufferPtr) {\n Module._free(imageBufferPtr);\n }\n }\n }\n\n\n /**\n * Ensures buffers are allocated for the given dimensions\n * @private\n */\n _ensureBuffers(width, height) {\n const requiredSize = width * height * 4;\n\n if (this.bufferSize < requiredSize) {\n const Module = this._getWasmModule();\n\n if (this.srcBufferPtr) {\n Module._free(this.srcBufferPtr);\n }\n if (this.dstBufferPtr) {\n Module._free(this.dstBufferPtr);\n }\n\n this.srcBufferPtr = Module._malloc(requiredSize);\n this.dstBufferPtr = Module._malloc(requiredSize);\n this.bufferSize = requiredSize;\n\n if (!this.srcBufferPtr || !this.dstBufferPtr) {\n throw new FacebetterError('Failed to allocate memory buffers');\n }\n }\n }\n\n /**\n * Processes an image\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|Uint8ClampedArray} input - Input image\n * @param {number} width - Image width (required if input is Uint8ClampedArray)\n * @param {number} height - Image height (required if input is Uint8ClampedArray)\n * @param {number} processMode - Process mode (use ProcessMode enum, default: ProcessMode.Image)\n * @returns {ImageData} Processed image data\n */\n processImage(input, width, height, processMode = ProcessMode.Image) {\n this._ensureInitialized();\n const imageData = this._platformAPI.toImageData(input, width, height);\n const Module = this._getWasmModule();\n\n this._ensureBuffers(imageData.width, imageData.height);\n\n const bufferSize = imageData.width * imageData.height * 4;\n\n try {\n const buffer = this._getWasmBuffer();\n \n const srcView = new Uint8Array(buffer, this.srcBufferPtr, bufferSize);\n srcView.set(imageData.data);\n\n const result = Module.ccall(\n 'ProcessImageRGBA',\n 'number',\n ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n [\n this.enginePtr,\n this.srcBufferPtr,\n imageData.width,\n imageData.height,\n imageData.width * 4,\n this.dstBufferPtr,\n processMode\n ]\n );\n\n checkResult(result, 'Failed to process image');\n\n const currentBuffer = this._getWasmBuffer();\n const dstView = new Uint8Array(currentBuffer, this.dstBufferPtr, bufferSize);\n const processedData = new Uint8ClampedArray(dstView);\n\n return new ImageData(processedData, imageData.width, imageData.height);\n } catch (error) {\n if (error instanceof FacebetterError) {\n throw error;\n }\n throw new FacebetterError(`Image processing error: ${error.message}`);\n }\n }\n\n /**\n * Ensures the engine is initialized\n * @private\n * @throws {FacebetterError} If engine is not initialized\n */\n _ensureInitialized() {\n if (!this.initialized || !this.enginePtr) {\n throw new FacebetterError('Engine not initialized. Call init() first.');\n }\n }\n\n /**\n * Ensures gpupixel_canvas exists in the DOM (browser only)\n * This canvas is required by GPUPixel for WebGL context creation\n * @private\n */\n _ensureGPUPixelCanvas() {\n if (typeof document === 'undefined') {\n return;\n }\n \n let canvas = document.getElementById('gpupixel_canvas');\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = 'gpupixel_canvas';\n canvas.style.display = 'none';\n canvas.width = 1;\n canvas.height = 1;\n document.body.appendChild(canvas);\n this._createdGPUPixelCanvas = true;\n }\n this._gpupixelCanvas = canvas;\n }\n\n /**\n * Cleans up gpupixel_canvas if it was created by this engine instance (browser only)\n * @private\n */\n _cleanupGPUPixelCanvas() {\n if (this._createdGPUPixelCanvas && this._gpupixelCanvas) {\n this._gpupixelCanvas.remove();\n this._gpupixelCanvas = null;\n this._createdGPUPixelCanvas = false;\n }\n }\n\n /**\n * Ensures offscreen canvas exists and matches the required dimensions (browser only)\n * This canvas is reused for video processing to avoid creating temporary canvases\n * @private\n * @param {number} width - Required canvas width\n * @param {number} height - Required canvas height\n */\n _ensureOffscreenCanvas(width, height) {\n if (typeof document === 'undefined') {\n return null;\n }\n \n if (!this._offscreenCanvas || \n this._offscreenCanvas.width !== width || \n this._offscreenCanvas.height !== height) {\n this._offscreenCanvas = document.createElement('canvas');\n this._offscreenCanvas.width = width;\n this._offscreenCanvas.height = height;\n this._offscreenCtx = this._offscreenCanvas.getContext('2d', { willReadFrequently: true });\n }\n return this._offscreenCanvas;\n }\n\n}\n\n","/**\n * Browser-specific WASM Module Loader\n * Supports ESM format WASM modules (generated with MODULARIZE and EXPORT_ES6)\n * Uses document.currentScript for automatic path detection in UMD builds\n */\n\n/**\n * Gets the base path of the current script\n * Similar to Node.js __dirname\n * Handles various deployment scenarios: same directory, CDN, subdirectories\n * @returns {string} Base path of the current script (with trailing slash)\n */\nexport function getScriptBasePath() {\n let scriptUrl = null;\n \n // Method 1: document.currentScript (most reliable, works in sync execution)\n if (typeof document !== 'undefined' && document.currentScript?.src) {\n scriptUrl = document.currentScript.src;\n }\n \n // Method 2: Traverse script tags (fallback for async scripts)\n if (!scriptUrl && typeof document !== 'undefined') {\n const scripts = document.getElementsByTagName('script');\n // Check from end to start (most recent first)\n for (let i = scripts.length - 1; i >= 0; i--) {\n const src = scripts[i].src;\n if (src && (src.includes('facebetter.js') || src.includes('facebetter'))) {\n scriptUrl = src;\n break;\n }\n }\n }\n \n // Method 3: Try to find script by checking all scripts\n if (!scriptUrl && typeof document !== 'undefined') {\n const scripts = document.getElementsByTagName('script');\n for (let i = scripts.length - 1; i >= 0; i--) {\n const src = scripts[i].src;\n if (src) {\n // Use the last script tag as fallback\n scriptUrl = src;\n break;\n }\n }\n }\n \n // Extract base path from script URL\n if (scriptUrl) {\n try {\n const url = new URL(scriptUrl);\n return url.href.substring(0, url.href.lastIndexOf('/') + 1);\n } catch (e) {\n // If URL parsing fails, use string manipulation\n return scriptUrl.substring(0, scriptUrl.lastIndexOf('/') + 1);\n }\n }\n \n // Method 4: Fallback to current location (least reliable)\n if (typeof location !== 'undefined') {\n try {\n const url = new URL('.', location.href);\n return url.href;\n } catch (e) {\n return location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1);\n }\n }\n \n // Last resort\n return './';\n}\n\n/**\n * Resolves a relative path to absolute URL\n * Handles various path formats and edge cases\n * @param {string} relativePath - Relative path (e.g., 'facebetter-core.js')\n * @param {string} basePath - Base path (with trailing slash)\n * @returns {string} Absolute URL\n */\nexport function resolvePath(relativePath, basePath) {\n // If relativePath is already absolute, return as-is\n if (relativePath.startsWith('http://') || relativePath.startsWith('https://') || relativePath.startsWith('//')) {\n return relativePath;\n }\n \n try {\n // Use URL API for proper resolution\n const base = basePath.endsWith('/') ? basePath : basePath + '/';\n return new URL(relativePath, base).href;\n } catch (e) {\n // Fallback: simple concatenation\n const base = basePath.endsWith('/') ? basePath : basePath + '/';\n // Remove leading ./ from relativePath if present\n const cleanPath = relativePath.replace(/^\\.\\//, '');\n return base + cleanPath;\n }\n}\n\nlet wasmModulePromise = null;\nlet wasmModuleInstance = null;\n\n/**\n * Loads the WebAssembly module (browser version)\n * Supports ESM format WASM modules generated by Emscripten with MODULARIZE and EXPORT_ES6\n * With SINGLE_FILE=1, WASM binary and data files are embedded in the JS file\n * @param {Object} [options] - Options\n * @param {string} [options.wasmUrl] - Custom WASM module URL (defaults to facebetter-core npm package)\n * @param {Function} [options.locateFile] - Custom locateFile function (usually not needed with SINGLE_FILE=1)\n * @returns {Promise<Object>} Promise that resolves with the WASM module\n */\nexport async function loadWasmModule(options = {}) {\n if (wasmModuleInstance) {\n return wasmModuleInstance;\n }\n\n if (wasmModulePromise) {\n return wasmModulePromise;\n }\n\n wasmModulePromise = (async () => {\n try {\n let FaceBetterModuleFactory;\n \n if (options.wasmUrl) {\n // If custom URL is provided, use it (for backward compatibility or custom builds)\n const wasmModule = await import(options.wasmUrl);\n FaceBetterModuleFactory = wasmModule.default || wasmModule.createFaceBetterModule;\n } else {\n // Try to import from facebetter-core npm package\n // Note: In UMD builds, this may not work if facebetter-core is not available\n // In that case, fallback to relative path detection\n try {\n const wasmModule = await import('facebetter-core');\n FaceBetterModuleFactory = wasmModule.default || wasmModule.createFaceBetterModule;\n } catch (e) {\n // Fallback: try to find facebetter-core.js relative to current script\n // This handles UMD builds where npm packages may not be available\n const basePath = getScriptBasePath();\n const wasmPath = resolvePath('facebetter-core.js', basePath);\n const wasmModule = await import(wasmPath);\n FaceBetterModuleFactory = wasmModule.default || wasmModule.createFaceBetterModule;\n }\n }\n \n if (!FaceBetterModuleFactory) {\n throw new Error('WASM module does not export createFaceBetterModule function');\n }\n\n // Configure module options\n // With SINGLE_FILE=1, WASM binary and data files are embedded in the JS file\n // No need to handle .wasm and .data file paths separately\n const moduleOptions = {\n locateFile: options.locateFile || function(path, prefix) {\n // With SINGLE_FILE=1, Emscripten handles embedded files automatically\n // Custom locateFile is only needed if user provides one\n return prefix + path;\n },\n ...options\n };\n\n // Initialize the module (MODULARIZE returns a Promise)\n wasmModuleInstance = await FaceBetterModuleFactory(moduleOptions);\n \n if (!wasmModuleInstance) {\n throw new Error('Failed to initialize WASM module');\n }\n\n wasmModuleInstance.ready = true;\n return wasmModuleInstance;\n } catch (e) {\n wasmModulePromise = null;\n throw new Error(`Failed to load WASM module: ${e.message}`);\n }\n })();\n\n return wasmModulePromise;\n}\n\n/**\n * Gets the current WASM module instance\n * @returns {Object} WASM module instance\n * @throws {Error} If module is not loaded\n */\nexport function getWasmModule() {\n if (!wasmModuleInstance) {\n throw new Error('WASM module not loaded. Call loadWasmModule() first or use BeautyEffectEngine.init()');\n }\n return wasmModuleInstance;\n}\n\n/**\n * Gets the current WASM memory buffer, handling potential reallocation\n * @returns {ArrayBuffer} Current WASM memory buffer\n */\nexport function getWasmBuffer() {\n const Module = getWasmModule();\n \n if (Module.buffer) {\n return Module.buffer;\n } else if (Module.HEAPU8 && Module.HEAPU8.buffer) {\n return Module.HEAPU8.buffer;\n } else if (Module.asm && Module.asm.memory) {\n return Module.asm.memory.buffer;\n }\n \n throw new Error('Unable to access WASM memory buffer');\n}\n\n","/**\n * Browser-specific Image Utilities\n * Uses DOM APIs (canvas, ImageData, etc.)\n */\n\nimport { FacebetterError } from '../core/errors.js';\n\n/**\n * Converts various image sources to ImageData (browser version)\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|Uint8ClampedArray} source - Image source\n * @param {number} width - Image width (required if source is Uint8ClampedArray)\n * @param {number} height - Image height (required if source is Uint8ClampedArray)\n * @returns {ImageData} ImageData object\n */\nexport function toImageData(source, width, height) {\n if (source instanceof ImageData) {\n return source;\n }\n\n if (source instanceof HTMLCanvasElement || source instanceof HTMLVideoElement) {\n const canvas = source instanceof HTMLCanvasElement ? source : document.createElement('canvas');\n if (source instanceof HTMLVideoElement) {\n canvas.width = source.videoWidth;\n canvas.height = source.videoHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(source, 0, 0);\n }\n const ctx = canvas.getContext('2d');\n return ctx.getImageData(0, 0, canvas.width, canvas.height);\n }\n\n if (source instanceof HTMLImageElement) {\n const canvas = document.createElement('canvas');\n canvas.width = source.naturalWidth || source.width;\n canvas.height = source.naturalHeight || source.height;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(source, 0, 0);\n return ctx.getImageData(0, 0, canvas.width, canvas.height);\n }\n\n if (source instanceof Uint8ClampedArray) {\n if (width === undefined || height === undefined) {\n throw new FacebetterError('Width and height are required when source is Uint8ClampedArray');\n }\n return new ImageData(source, width, height);\n }\n\n throw new FacebetterError('Unsupported image source type');\n}\n\n/**\n * Gets User-Agent string for web platform\n * @returns {string} User-Agent string\n */\nexport function getUserAgentString() {\n return 'FB/1.0 (web; wasm32)';\n}\n\n/**\n * Generates HMAC-SHA256 signature (browser version)\n * @param {string} key - HMAC key (app_key)\n * @param {string} data - Data to sign (timestamp string)\n * @returns {Promise<string>} Promise that resolves with hex-encoded signature\n */\nexport async function generateHMACSignature(key, data) {\n const encoder = new TextEncoder();\n const keyData = encoder.encode(key);\n const messageData = encoder.encode(data);\n\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n const signature = await crypto.subtle.sign('HMAC', cryptoKey, messageData);\n\n // Convert to hex string\n const hashArray = Array.from(new Uint8Array(signature));\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n return hashHex;\n}\n\n/**\n * Calls online_auth API to verify app_key (browser version)\n * @param {string} appId - Application ID\n * @param {string} appKey - Application key\n * @returns {Promise<Object>} Promise that resolves with response data\n */\nexport async function verifyAppKeyOnline(appId, appKey) {\n try {\n const timestamp = Math.floor(Date.now() / 1000);\n const timestampStr = timestamp.toString();\n const hmacSignature = await generateHMACSignature(appKey, timestampStr);\n\n const requestBody = {\n p_app_id: appId,\n p_hmac_signature: hmacSignature,\n p_timestamp: timestamp,\n p_user_agent: getUserAgentString()\n };\n\n const response = await fetch('https://facebetter.pixpark.net/rest/v1/rpc/online_auth', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': getUserAgentString()\n },\n body: JSON.stringify(requestBody)\n });\n\n const responseData = await response.json();\n return responseData;\n } catch (error) {\n console.error('Online auth request failed:', error);\n return null;\n }\n}\n\n","/**\n * Browser Entry Point\n * For <script> tag usage (UMD format)\n * Note: WASM module is ESM format, loaded via dynamic import()\n */\n\nimport { BeautyEffectEngine } from '../core/engine.js';\nimport { EngineConfig } from '../core/config.js';\nimport { FacebetterError } from '../core/errors.js';\nimport * as constants from '../core/constants.js';\nimport * as wasmLoader from './wasm-loader.js';\nimport * as imageUtils from './image-utils.js';\n\n// Browser-specific GPU canvas management\nfunction ensureGPUPixelCanvas() {\n if (typeof document === 'undefined') {\n return;\n }\n \n let canvas = document.getElementById('gpupixel_canvas');\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = 'gpupixel_canvas';\n canvas.style.display = 'none';\n canvas.width = 1;\n canvas.height = 1;\n if (document.body) {\n document.body.appendChild(canvas);\n }\n }\n}\n\nfunction cleanupGPUPixelCanvas() {\n // Cleanup is handled by engine instance\n}\n\n// Create platform API\nconst platformAPI = {\n loadWasmModule: () => wasmLoader.loadWasmModule(),\n getWasmModule: wasmLoader.getWasmModule,\n getWasmBuffer: wasmLoader.getWasmBuffer,\n toImageData: imageUtils.toImageData,\n verifyAppKeyOnline: imageUtils.verifyAppKeyOnline,\n ensureGPUPixelCanvas,\n cleanupGPUPixelCanvas\n};\n\n// Export factory function for UMD\nexport function createBeautyEffectEngine(config) {\n return new BeautyEffectEngine(config, platformAPI);\n}\n\n// Create a wrapped BeautyEffectEngine class that automatically injects platformAPI\n// This allows users to use: new BeautyEffectEngine(config) without passing platformAPI\nclass BrowserBeautyEffectEngine extends BeautyEffectEngine {\n constructor(config) {\n // Automatically inject platformAPI for browser environment\n super(config, platformAPI);\n }\n}\n\n// Export all constants and classes\nexport {\n BrowserBeautyEffectEngine as BeautyEffectEngine,\n EngineConfig,\n FacebetterError\n};\n\n// Export constants with proper names\nexport const BeautyType = constants.BeautyType;\nexport const BasicParam = constants.BasicParam;\nexport const ReshapeParam = constants.ReshapeParam;\nexport const MakeupParam = constants.MakeupParam;\nexport const BackgroundMode = constants.BackgroundMode;\nexport const ProcessMode = constants.ProcessMode;\nexport const VirtualBackgroundOptions = constants.VirtualBackgroundOptions;\n\n// Export WASM loader\nexport { loadWasmModule } from './wasm-loader.js';\n\n// Default export\nexport default {\n BeautyEffectEngine: BrowserBeautyEffectEngine,\n EngineConfig,\n FacebetterError,\n ...constants,\n loadWasmModule: wasmLoader.loadWasmModule\n};\n\n"],"names":["BeautyType","BasicParam","ReshapeParam","MakeupParam","BackgroundMode","ProcessMode","wasmLoader.loadWasmModule","wasmLoader.getWasmModule","wasmLoader.getWasmBuffer","imageUtils.toImageData","imageUtils.verifyAppKeyOnline","constants.BeautyType","constants.BasicParam","constants.ReshapeParam","constants.MakeupParam","constants.BackgroundMode","constants.ProcessMode","constants.VirtualBackgroundOptions"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "facebetter",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.12",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Face beauty effects SDK with WebAssembly support",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -46,6 +46,6 @@
|
|
|
46
46
|
"rollup": "^3.0.0"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"facebetter-core": "^1.0.
|
|
49
|
+
"facebetter-core": "^1.0.2"
|
|
50
50
|
}
|
|
51
51
|
}
|