facebetter 1.0.4 → 1.0.6
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 +25 -42
- package/dist/facebetter.esm.js.map +1 -1
- package/package.json +3 -5
package/dist/facebetter.esm.js
CHANGED
|
@@ -862,43 +862,26 @@ async function loadWasmModule(options = {}) {
|
|
|
862
862
|
if (options.wasmUrl) {
|
|
863
863
|
wasmModuleUrl = options.wasmUrl;
|
|
864
864
|
} else {
|
|
865
|
-
//
|
|
866
|
-
// Vite
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
//
|
|
865
|
+
// Use relative path for build time
|
|
866
|
+
// At runtime in Vite, the path will be resolved correctly
|
|
867
|
+
wasmModuleUrl = resolvePath('./facebetter_wasm.js');
|
|
868
|
+
|
|
869
|
+
// In browser runtime (Vite), try to use package exports with ?url suffix
|
|
870
|
+
// Use dynamic import with string concatenation to avoid Rollup parsing
|
|
870
871
|
if (typeof window !== 'undefined') {
|
|
871
872
|
try {
|
|
872
|
-
//
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
const pkgPath = 'facebetter/wasm.js';
|
|
880
|
-
// Use Function constructor to avoid Rollup static analysis
|
|
881
|
-
const dynamicImport = new Function('path', 'return import(path)');
|
|
882
|
-
const wasmModule = await dynamicImport(pkgPath + '?url');
|
|
883
|
-
if (wasmModule && (wasmModule.default || wasmModule)) {
|
|
884
|
-
wasmModuleUrl = wasmModule.default || wasmModule;
|
|
885
|
-
}
|
|
873
|
+
// Try to use package exports path (Vite will handle ?url at runtime)
|
|
874
|
+
const pkgPath = 'facebetter/wasm.js';
|
|
875
|
+
// Use Function constructor to avoid Rollup static analysis
|
|
876
|
+
const dynamicImport = new Function('path', 'return import(path)');
|
|
877
|
+
const wasmModule = await dynamicImport(pkgPath + '?url');
|
|
878
|
+
if (wasmModule && (wasmModule.default || wasmModule)) {
|
|
879
|
+
wasmModuleUrl = wasmModule.default || wasmModule;
|
|
886
880
|
}
|
|
887
|
-
|
|
888
|
-
//
|
|
889
|
-
// This should not happen for npm-installed packages
|
|
890
|
-
console.error('Failed to resolve facebetter/wasm.js via package exports:', e);
|
|
891
|
-
console.error('This usually means package.json exports are misconfigured or Vite cannot resolve the path');
|
|
881
|
+
} catch (e) {
|
|
882
|
+
// Fallback to relative path (already set above)
|
|
892
883
|
}
|
|
893
884
|
}
|
|
894
|
-
|
|
895
|
-
// Priority 2: Fallback to relative path (for local development with file: protocol)
|
|
896
|
-
// WARNING: This will fail for npm-installed packages if Vite pre-bundles the module
|
|
897
|
-
// because import.meta.url will point to .vite/deps/ instead of node_modules/facebetter/dist/
|
|
898
|
-
// That's why we MUST use package exports path above
|
|
899
|
-
if (!wasmModuleUrl) {
|
|
900
|
-
wasmModuleUrl = resolvePath('./facebetter_wasm.js');
|
|
901
|
-
}
|
|
902
885
|
}
|
|
903
886
|
|
|
904
887
|
// For browser environment, load via script tag since it's UMD/IIFE
|
|
@@ -924,13 +907,13 @@ async function loadWasmModule(options = {}) {
|
|
|
924
907
|
};
|
|
925
908
|
|
|
926
909
|
window.Module.locateFile = function(path, prefix) {
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
910
|
+
// Use custom locateFile if provided
|
|
911
|
+
if (options.locateFile) {
|
|
912
|
+
return options.locateFile(path, prefix);
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
// Auto-resolve .wasm and .data files
|
|
916
|
+
if (path.endsWith('.wasm') || path.endsWith('.data')) {
|
|
934
917
|
try {
|
|
935
918
|
if (typeof import.meta.resolve === 'function') {
|
|
936
919
|
if (path.endsWith('.wasm')) {
|
|
@@ -943,9 +926,9 @@ async function loadWasmModule(options = {}) {
|
|
|
943
926
|
} catch (e) {
|
|
944
927
|
// Fallback
|
|
945
928
|
}
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
929
|
+
return resolvePath(path);
|
|
930
|
+
}
|
|
931
|
+
|
|
949
932
|
return originalLocateFile(path, prefix);
|
|
950
933
|
};
|
|
951
934
|
|
|
@@ -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 Segmentation: 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 }\n\n /**\n * Initializes the engine\n * @returns {Promise<void>} Promise that resolves when initialization is complete\n */\n async init() {\n if (this.initialized) {\n return;\n }\n\n // Wait for WASM module to be loaded (started in constructor)\n await this._wasmLoadPromise;\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 // 在 JS 层调用 online_auth API 获取服务器响应\n const authResponse = await this._verifyAppKeyOnline(this.appId, this.appKey);\n \n if (!authResponse) {\n throw new FacebetterError('Failed to get server response from online_auth API');\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 throw new FacebetterError(`Failed to verify app key online: ${error.message}`);\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('Failed to create BeautyEffect engine');\n }\n\n this.enginePtr = enginePtr;\n this.initialized = true;\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 \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 import.meta.url for automatic path resolution\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 * Gets the base path of the current module\n * Uses import.meta.url (ES Module equivalent of __dirname)\n * @returns {string} Base path of the current module (with trailing slash)\n */\nfunction getModuleBasePath() {\n try {\n const url = new URL('.', import.meta.url);\n return url.href;\n } catch (e) {\n // Fallback\n return './';\n }\n}\n\n/**\n * Resolves a relative path to absolute URL (ESM version)\n * Handles various path formats\n * @param {string} relativePath - Relative path\n * @returns {string} Absolute URL\n */\nfunction resolvePath(relativePath) {\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 return new URL(relativePath, import.meta.url).href;\n } catch (e) {\n // Fallback\n const base = getModuleBasePath();\n const cleanPath = relativePath.replace(/^\\.\\//, '');\n return base + cleanPath;\n }\n}\n\n/**\n * Loads the WebAssembly module (ESM version)\n * @param {Object} [options] - Options\n * @param {string} [options.wasmUrl] - Custom WASM URL (auto-detected if not provided)\n * @param {Function} [options.locateFile] - Custom locateFile function\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_wasm.js is an Emscripten-generated UMD/IIFE file\n let FaceBetterModuleFactory;\n \n try {\n // Get the WASM module URL\n let wasmModuleUrl;\n if (options.wasmUrl) {\n wasmModuleUrl = options.wasmUrl;\n } else {\n // Priority 1: Use package exports path (works for npm packages)\n // Vite will correctly resolve 'facebetter/wasm.js' to node_modules/facebetter/dist/facebetter_wasm.js\n // This works even if Vite pre-bundles the main module, because package exports are resolved at runtime\n // IMPORTANT: This MUST work for npm-installed packages, otherwise relative path will fail\n // when Vite pre-bundles the module to .vite/deps/\n if (typeof window !== 'undefined') {\n try {\n // Method 1: Use import.meta.resolve (Vite 5+ and modern bundlers)\n // This resolves based on package.json exports, not import.meta.url\n if (typeof import.meta.resolve === 'function') {\n wasmModuleUrl = import.meta.resolve('facebetter/wasm.js');\n } else {\n // Method 2: Use dynamic import with ?url suffix (Vite-specific)\n // Vite will resolve package exports even for pre-bundled modules\n const pkgPath = 'facebetter/wasm.js';\n // Use Function constructor to avoid Rollup static analysis\n const dynamicImport = new Function('path', 'return import(path)');\n const wasmModule = await dynamicImport(pkgPath + '?url');\n if (wasmModule && (wasmModule.default || wasmModule)) {\n wasmModuleUrl = wasmModule.default || wasmModule;\n }\n }\n } catch (e) {\n // Package exports resolution failed\n // This should not happen for npm-installed packages\n console.error('Failed to resolve facebetter/wasm.js via package exports:', e);\n console.error('This usually means package.json exports are misconfigured or Vite cannot resolve the path');\n }\n }\n \n // Priority 2: Fallback to relative path (for local development with file: protocol)\n // WARNING: This will fail for npm-installed packages if Vite pre-bundles the module\n // because import.meta.url will point to .vite/deps/ instead of node_modules/facebetter/dist/\n // That's why we MUST use package exports path above\n if (!wasmModuleUrl) {\n wasmModuleUrl = resolvePath('./facebetter_wasm.js');\n }\n }\n\n // For browser environment, load via script tag since it's UMD/IIFE\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Check if Module is already initialized\n if (window.Module && window.Module.ready) {\n // Module already loaded and initialized\n FaceBetterModuleFactory = (opts) => {\n // Merge options with existing Module\n Object.assign(window.Module, opts);\n return Promise.resolve(window.Module);\n };\n } else {\n // Initialize Module object before loading script\n if (typeof window.Module === 'undefined') {\n window.Module = {};\n }\n \n // Configure locateFile before script loads\n const basePath = getModuleBasePath();\n const originalLocateFile = window.Module.locateFile || function(path, prefix) {\n return prefix + path;\n };\n \n window.Module.locateFile = function(path, prefix) {\n // Use custom locateFile if provided\n if (options.locateFile) {\n return options.locateFile(path, prefix);\n }\n \n // Auto-resolve .wasm and .data files\n if (path.endsWith('.wasm') || path.endsWith('.data')) {\n try {\n if (typeof import.meta.resolve === 'function') {\n if (path.endsWith('.wasm')) {\n return import.meta.resolve('facebetter/wasm');\n } else if (path.endsWith('.data')) {\n const wasmUrl = import.meta.resolve('facebetter/wasm');\n return wasmUrl.replace(/\\.wasm$/, '.data');\n }\n }\n } catch (e) {\n // Fallback\n }\n return resolvePath(path);\n }\n \n return originalLocateFile(path, prefix);\n };\n \n // Load script and wait for initialization\n await new Promise((resolve, reject) => {\n // Set up onRuntimeInitialized callback\n const originalInit = window.Module.onRuntimeInitialized;\n window.Module.onRuntimeInitialized = () => {\n if (originalInit) originalInit();\n window.Module.ready = true;\n resolve();\n };\n \n // Check if script already exists\n const existingScript = Array.from(document.scripts).find(\n s => s.src && s.src.includes('facebetter_wasm.js')\n );\n \n if (existingScript && window.Module.ready) {\n // Script already loaded and initialized\n resolve();\n return;\n }\n \n // Load script dynamically\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = wasmModuleUrl;\n script.async = true;\n \n script.onload = () => {\n // Script loaded, wait for onRuntimeInitialized to be called\n // If Module.ready is already true, resolve immediately\n if (window.Module && window.Module.ready) {\n resolve();\n }\n // Otherwise wait for onRuntimeInitialized callback\n };\n \n script.onerror = () => {\n reject(new Error(`Failed to load WASM script from ${wasmModuleUrl}`));\n };\n \n document.head.appendChild(script);\n });\n \n // Create factory function that uses the initialized Module\n FaceBetterModuleFactory = (opts) => {\n // Merge options with Module\n if (opts) {\n Object.assign(window.Module, opts);\n }\n return Promise.resolve(window.Module);\n };\n }\n } else {\n // Node.js environment: try dynamic import\n const module = await import(wasmModuleUrl);\n FaceBetterModuleFactory = module.default || module;\n }\n } catch (e) {\n throw new FacebetterError(`Failed to load WASM module: ${e.message}`);\n }\n\n // Initialize the module (options already configured in Module.locateFile)\n wasmModuleInstance = await FaceBetterModuleFactory(options);\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":"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"}
|
|
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 Segmentation: 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 }\n\n /**\n * Initializes the engine\n * @returns {Promise<void>} Promise that resolves when initialization is complete\n */\n async init() {\n if (this.initialized) {\n return;\n }\n\n // Wait for WASM module to be loaded (started in constructor)\n await this._wasmLoadPromise;\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 // 在 JS 层调用 online_auth API 获取服务器响应\n const authResponse = await this._verifyAppKeyOnline(this.appId, this.appKey);\n \n if (!authResponse) {\n throw new FacebetterError('Failed to get server response from online_auth API');\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 throw new FacebetterError(`Failed to verify app key online: ${error.message}`);\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('Failed to create BeautyEffect engine');\n }\n\n this.enginePtr = enginePtr;\n this.initialized = true;\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 \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 import.meta.url for automatic path resolution\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 * Gets the base path of the current module\n * Uses import.meta.url (ES Module equivalent of __dirname)\n * @returns {string} Base path of the current module (with trailing slash)\n */\nfunction getModuleBasePath() {\n try {\n const url = new URL('.', import.meta.url);\n return url.href;\n } catch (e) {\n // Fallback\n return './';\n }\n}\n\n/**\n * Resolves a relative path to absolute URL (ESM version)\n * Handles various path formats\n * @param {string} relativePath - Relative path\n * @returns {string} Absolute URL\n */\nfunction resolvePath(relativePath) {\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 return new URL(relativePath, import.meta.url).href;\n } catch (e) {\n // Fallback\n const base = getModuleBasePath();\n const cleanPath = relativePath.replace(/^\\.\\//, '');\n return base + cleanPath;\n }\n}\n\n/**\n * Loads the WebAssembly module (ESM version)\n * @param {Object} [options] - Options\n * @param {string} [options.wasmUrl] - Custom WASM URL (auto-detected if not provided)\n * @param {Function} [options.locateFile] - Custom locateFile function\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_wasm.js is an Emscripten-generated UMD/IIFE file\n let FaceBetterModuleFactory;\n \n try {\n // Get the WASM module URL\n let wasmModuleUrl;\n if (options.wasmUrl) {\n wasmModuleUrl = options.wasmUrl;\n } else {\n // Use relative path for build time\n // At runtime in Vite, the path will be resolved correctly\n wasmModuleUrl = resolvePath('./facebetter_wasm.js');\n \n // In browser runtime (Vite), try to use package exports with ?url suffix\n // Use dynamic import with string concatenation to avoid Rollup parsing\n if (typeof window !== 'undefined') {\n try {\n // Try to use package exports path (Vite will handle ?url at runtime)\n const pkgPath = 'facebetter/wasm.js';\n // Use Function constructor to avoid Rollup static analysis\n const dynamicImport = new Function('path', 'return import(path)');\n const wasmModule = await dynamicImport(pkgPath + '?url');\n if (wasmModule && (wasmModule.default || wasmModule)) {\n wasmModuleUrl = wasmModule.default || wasmModule;\n }\n } catch (e) {\n // Fallback to relative path (already set above)\n }\n }\n }\n\n // For browser environment, load via script tag since it's UMD/IIFE\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Check if Module is already initialized\n if (window.Module && window.Module.ready) {\n // Module already loaded and initialized\n FaceBetterModuleFactory = (opts) => {\n // Merge options with existing Module\n Object.assign(window.Module, opts);\n return Promise.resolve(window.Module);\n };\n } else {\n // Initialize Module object before loading script\n if (typeof window.Module === 'undefined') {\n window.Module = {};\n }\n \n // Configure locateFile before script loads\n const basePath = getModuleBasePath();\n const originalLocateFile = window.Module.locateFile || function(path, prefix) {\n return prefix + path;\n };\n \n window.Module.locateFile = function(path, prefix) {\n // Use custom locateFile if provided\n if (options.locateFile) {\n return options.locateFile(path, prefix);\n }\n \n // Auto-resolve .wasm and .data files\n if (path.endsWith('.wasm') || path.endsWith('.data')) {\n try {\n if (typeof import.meta.resolve === 'function') {\n if (path.endsWith('.wasm')) {\n return import.meta.resolve('facebetter/wasm');\n } else if (path.endsWith('.data')) {\n const wasmUrl = import.meta.resolve('facebetter/wasm');\n return wasmUrl.replace(/\\.wasm$/, '.data');\n }\n }\n } catch (e) {\n // Fallback\n }\n return resolvePath(path);\n }\n \n return originalLocateFile(path, prefix);\n };\n \n // Load script and wait for initialization\n await new Promise((resolve, reject) => {\n // Set up onRuntimeInitialized callback\n const originalInit = window.Module.onRuntimeInitialized;\n window.Module.onRuntimeInitialized = () => {\n if (originalInit) originalInit();\n window.Module.ready = true;\n resolve();\n };\n \n // Check if script already exists\n const existingScript = Array.from(document.scripts).find(\n s => s.src && s.src.includes('facebetter_wasm.js')\n );\n \n if (existingScript && window.Module.ready) {\n // Script already loaded and initialized\n resolve();\n return;\n }\n \n // Load script dynamically\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = wasmModuleUrl;\n script.async = true;\n \n script.onload = () => {\n // Script loaded, wait for onRuntimeInitialized to be called\n // If Module.ready is already true, resolve immediately\n if (window.Module && window.Module.ready) {\n resolve();\n }\n // Otherwise wait for onRuntimeInitialized callback\n };\n \n script.onerror = () => {\n reject(new Error(`Failed to load WASM script from ${wasmModuleUrl}`));\n };\n \n document.head.appendChild(script);\n });\n \n // Create factory function that uses the initialized Module\n FaceBetterModuleFactory = (opts) => {\n // Merge options with Module\n if (opts) {\n Object.assign(window.Module, opts);\n }\n return Promise.resolve(window.Module);\n };\n }\n } else {\n // Node.js environment: try dynamic import\n const module = await import(wasmModuleUrl);\n FaceBetterModuleFactory = module.default || module;\n }\n } catch (e) {\n throw new FacebetterError(`Failed to load WASM module: ${e.message}`);\n }\n\n // Initialize the module (options already configured in Module.locateFile)\n wasmModuleInstance = await FaceBetterModuleFactory(options);\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":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "facebetter",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Face beauty effects SDK with WebAssembly support",
|
|
6
|
-
"main": "
|
|
6
|
+
"main": "lib/index.js",
|
|
7
7
|
"module": "./dist/facebetter.esm.js",
|
|
8
8
|
"browser": "./dist/facebetter.js",
|
|
9
9
|
"types": "./dist/index.d.ts",
|
|
@@ -15,12 +15,10 @@
|
|
|
15
15
|
"sideEffects": false,
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
18
|
-
"types": "./dist/index.d.ts",
|
|
19
18
|
"node": "./lib/index.js",
|
|
20
19
|
"import": "./dist/facebetter.esm.js",
|
|
21
20
|
"require": "./lib/index.js",
|
|
22
|
-
"
|
|
23
|
-
"default": "./dist/facebetter.esm.js"
|
|
21
|
+
"default": "./dist/facebetter.js"
|
|
24
22
|
},
|
|
25
23
|
"./wasm": "./dist/facebetter.wasm",
|
|
26
24
|
"./wasm.js": "./dist/facebetter_wasm.js"
|