• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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