1"use strict"; 2/* 3 * Copyright (c) 2022-2025 Huawei Device Co., Ltd. 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16var _a; 17Object.defineProperty(exports, "__esModule", { value: true }); 18exports.setCallbackRegistry = exports.registerCallback = void 0; 19class CallbackInfo { 20 constructor(callback, obj = null) { 21 this.cb = callback; 22 this.recv = obj; 23 } 24} 25const GLOBAL_SCOPE = new (_a = class CallbackScope { 26 constructor() { 27 this.nextId = 1; 28 this.callbackMap = new Map(); 29 this.callbackMap.set(CallbackScope.CB_NULL_ID, CallbackScope.CB_NULL); 30 } 31 addCallback(cb, obj) { 32 var _a; 33 let id = this.nextId++; 34 (_a = this.callbackMap) === null || _a === void 0 ? void 0 : _a.set(id, new CallbackInfo(cb, obj)); 35 return id; 36 } 37 getCallback(id) { 38 var _a; 39 return ((_a = this.callbackMap) === null || _a === void 0 ? void 0 : _a.get(id)) || CallbackScope.CB_UNDEFINED; 40 } 41 deleteCallback(id) { 42 var _a; 43 if (id > CallbackScope.CB_NULL_ID) { 44 (_a = this.callbackMap) === null || _a === void 0 ? void 0 : _a.delete(id); 45 } 46 } 47 release() { 48 this.callbackMap = null; 49 } 50 }, 51 _a.CB_NULL = new CallbackInfo(() => { throw new Error("attempted to call a callback at NULL"); }, null), 52 _a.CB_UNDEFINED = new CallbackInfo(() => { throw new Error("attempted to call an uninitialized callback"); }, null), 53 _a.CB_NULL_ID = 0, 54 _a); 55function callCallback(callbackId) { 56 let CallbackInfo = GLOBAL_SCOPE.getCallback(callbackId); 57 try { 58 let cb = CallbackInfo.cb; 59 if (CallbackInfo.recv !== null) { 60 cb = cb.bind(CallbackInfo.recv); 61 } 62 return cb(); 63 } 64 catch (e) { 65 console.error(e); 66 } 67} 68function registerCallback(callback, obj = null) { 69 return GLOBAL_SCOPE.addCallback(callback, obj); 70} 71exports.registerCallback = registerCallback; 72function releaseCallback(callbackId) { 73 return GLOBAL_SCOPE.deleteCallback(callbackId); 74} 75globalThis.callCallback = callCallback; 76globalThis.releaseCallback = releaseCallback; 77function setCallbackRegistry(_ignoredRegistry) { 78 // On WASM we don't need registry in current implementation. 79} 80exports.setCallbackRegistry = setCallbackRegistry; 81//# sourceMappingURL=Callback.js.map