{"version":3,"sources":["jsdelivr-header.js","/npm/react-native-nitro-http-server@1.6.1/lib/index.js"],"names":[],"mappings":"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","file":"/npm/react-native-nitro-http-server@1.6.1/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/react-native-nitro-http-server@1.6.1/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { NitroModules } from 'react-native-nitro-modules';\nimport { createServer } from './http';\n// 创建 HybridObject 实例\nconst HttpServerModule = NitroModules.createHybridObject(\"HttpServer\");\n// Helper function to wrap handler and intercept binary body\nconst wrapHandler = (handler) => {\n    return async (request) => {\n        const response = await handler(request);\n        // If response body is binary (ArrayBuffer or View), send it safely via the direct API\n        if (response.body && typeof response.body === 'object' &&\n            (response.body instanceof ArrayBuffer || ArrayBuffer.isView(response.body))) {\n            const binaryBody = response.body;\n            const buffer = binaryBody instanceof ArrayBuffer\n                ? binaryBody\n                : (binaryBody.byteLength === binaryBody.buffer.byteLength && binaryBody.byteOffset === 0)\n                    ? binaryBody.buffer\n                    : binaryBody.buffer.slice(binaryBody.byteOffset, binaryBody.byteOffset + binaryBody.byteLength);\n            const headers = response.headers || {};\n            const headersJson = JSON.stringify(headers);\n            // Use the safe native method that copies data on JS thread\n            await HttpServerModule.sendBinaryResponse(request.requestId, response.statusCode, headersJson, buffer);\n            // Return a dummy response to satisfy the native promise\n            return {\n                statusCode: response.statusCode,\n                headers: response.headers,\n                body: '' // Body handled via sendBinaryResponse\n            };\n        }\n        // String body or empty\n        return response;\n    };\n};\n// 普通 HTTP 服务器\nexport class HttpServer {\n    constructor() {\n        this._isRunning = false;\n    }\n    async start(port, handler, host) {\n        if (this._isRunning) {\n            throw new Error('Server is already running');\n        }\n        const wrappedHandler = wrapHandler(handler);\n        const success = await HttpServerModule.start(port, wrappedHandler, host);\n        this._isRunning = success;\n        return success;\n    }\n    async stop() {\n        if (!this._isRunning)\n            return;\n        await HttpServerModule.stop();\n        this._isRunning = false;\n    }\n    async getStats() {\n        return await HttpServerModule.getStats();\n    }\n    isRunning() {\n        return this._isRunning;\n    }\n}\n// 静态文件服务器\nexport class StaticServer {\n    constructor() {\n        this._isRunning = false;\n    }\n    async start(port, rootDir, host) {\n        if (this._isRunning) {\n            throw new Error('Static server is already running');\n        }\n        const success = await HttpServerModule.startStaticServer(port, rootDir, host);\n        this._isRunning = success;\n        return success;\n    }\n    async stop() {\n        if (!this._isRunning)\n            return;\n        await HttpServerModule.stopStaticServer();\n        this._isRunning = false;\n    }\n    isRunning() {\n        return this._isRunning;\n    }\n}\n// App HTTP 服务器 (混合静态文件和回调)\nexport class AppServer {\n    constructor() {\n        this._isRunning = false;\n    }\n    async start(port, rootDir, handler, host) {\n        if (this._isRunning) {\n            throw new Error('App server is already running');\n        }\n        const wrappedHandler = wrapHandler(handler);\n        const success = await HttpServerModule.startAppServer(port, rootDir, wrappedHandler, host);\n        this._isRunning = success;\n        return success;\n    }\n    async stop() {\n        if (!this._isRunning)\n            return;\n        await HttpServerModule.stopAppServer();\n        this._isRunning = false;\n    }\n    isRunning() {\n        return this._isRunning;\n    }\n}\n// 带配置的 App HTTP 服务器 (支持 WebDAV、Zip 挂载、WebSocket 等插件)\nexport class ConfigServer {\n    constructor() {\n        this._isRunning = false;\n        this._wsEnabled = false;\n        this._wsHandlers = new Map();\n    }\n    /**\n     * 注册 WebSocket 连接处理器\n     * @param path WebSocket 端点路径 (如 '/ws')\n     * @param handler 连接处理器\n     */\n    onWebSocket(path, handler) {\n        this._wsHandlers.set(path, handler);\n        return this;\n    }\n    async start(port, handler, config, host) {\n        if (this._isRunning) {\n            throw new Error('Config server is already running');\n        }\n        // 检查是否有 WebSocket 配置\n        if (config.mounts) {\n            const wsMount = config.mounts.find((m) => m.type === 'websocket');\n            if (wsMount) {\n                this._wsEnabled = true;\n            }\n        }\n        const wrappedHandler = wrapHandler(handler);\n        const configJson = JSON.stringify(config);\n        const success = await HttpServerModule.startServerWithConfig(port, wrappedHandler, configJson, host);\n        this._isRunning = success;\n        // 如果启动成功且有 WebSocket 配置，设置 WebSocket 处理器\n        if (success && this._wsEnabled) {\n            this._setupWebSocketHandler();\n        }\n        return success;\n    }\n    _setupWebSocketHandler() {\n        // 使用闭包捕获 handlers，避免 this 绑定问题\n        const wsHandlers = this._wsHandlers;\n        HttpServerModule.setWebSocketHandler((event) => {\n            let ws = webSocketConnections.get(event.connectionId);\n            if (event.type === 'open') {\n                // 创建 ServerWebSocket 实例\n                ws = new ServerWebSocket(event.connectionId);\n                webSocketConnections.set(event.connectionId, ws);\n                // 解析 HTTP headers\n                let headers = {};\n                if (event.headersJson) {\n                    try {\n                        headers = JSON.parse(event.headersJson);\n                    }\n                    catch (e) {\n                        console.error('[WebSocket] Failed to parse headers JSON:', e);\n                    }\n                }\n                // 创建连接请求信息\n                const request = {\n                    path: event.path || '/ws',\n                    query: event.query || '',\n                    headers,\n                };\n                // 查找对应路径的处理器\n                const handlerPath = event.path || '/ws';\n                const handler = wsHandlers.get(handlerPath) || wsHandlers.get('*');\n                if (handler) {\n                    try {\n                        handler(ws, request);\n                    }\n                    catch (e) {\n                        console.error('[WebSocket] Handler error on open:', e);\n                    }\n                }\n                else {\n                    console.warn(`[WebSocket] No handler registered for path: ${handlerPath}`);\n                }\n                // 触发 onopen\n                ws._handleOpen();\n            }\n            else if (ws) {\n                switch (event.type) {\n                    case 'message':\n                        const data = event.binaryData || event.textData || '';\n                        ws._handleMessage(data);\n                        break;\n                    case 'close':\n                        ws._handleClose(event.closeCode || 1000, event.closeReason || '');\n                        webSocketConnections.delete(event.connectionId);\n                        break;\n                    case 'error':\n                        ws._handleError(event.errorMessage || 'Unknown error');\n                        break;\n                }\n            }\n        });\n    }\n    async stop() {\n        if (!this._isRunning)\n            return;\n        await HttpServerModule.stopAppServer();\n        this._isRunning = false;\n        this._wsEnabled = false;\n        this._wsHandlers.clear();\n    }\n    isRunning() {\n        return this._isRunning;\n    }\n}\n/**\n * 创建并启动普通 HTTP 服务器\n * @param port 端口号\n * @param handler 请求处理器\n * @param host 监听的IP地址\n */\nexport async function createHttpServer(port, handler, host) {\n    const server = new HttpServer();\n    await server.start(port, handler, host);\n    return server;\n}\n/**\n * 创建并启动静态文件服务器\n * @param port 端口号\n * @param rootDir 静态文件根目录路径\n * @param host 监听的IP地址\n */\nexport async function createStaticServer(port, rootDir, host) {\n    const server = new StaticServer();\n    await server.start(port, rootDir, host);\n    return server;\n}\n/**\n * 创建并启动 App HTTP 服务器\n * @param port 端口号\n * @param rootDir 静态文件根目录路径\n * @param handler 请求处理器\n * @param host 监听的IP地址\n */\nexport async function createAppServer(port, rootDir, handler, host) {\n    const server = new AppServer();\n    await server.start(port, rootDir, handler, host);\n    return server;\n}\n/**\n * 创建并启动带配置的 App HTTP 服务器\n * @param port 端口号\n * @param handler 请求处理器\n * @param config 插件配置（可包含 root_dir 指定静态文件根目录）\n * @param host 监听的IP地址\n */\nexport async function createConfigServer(port, handler, config, host) {\n    const server = new ConfigServer();\n    await server.start(port, handler, config, host);\n    return server;\n}\nexport { HttpServerModule };\n// ==================== WebSocket API ====================\n/**\n * ServerWebSocket - W3C WebSocket API 兼容的服务器端 WebSocket 接口\n * 用于在服务器端与客户端进行双向通信\n */\nexport class ServerWebSocket {\n    constructor(connectionId) {\n        this._readyState = 0; // 0=CONNECTING, 1=OPEN, 2=CLOSING, 3=CLOSED\n        // W3C WebSocket 兼容的事件处理器\n        this.onopen = null;\n        this.onmessage = null;\n        this.onclose = null;\n        this.onerror = null;\n        this._connectionId = connectionId;\n        this._readyState = 1; // OPEN\n    }\n    /** 连接 ID */\n    get connectionId() {\n        return this._connectionId;\n    }\n    /** W3C 兼容的 readyState 属性 */\n    get readyState() {\n        return this._readyState;\n    }\n    /** 发送文本消息 */\n    async send(data) {\n        if (this._readyState !== 1) {\n            throw new Error('WebSocket is not open');\n        }\n        if (typeof data === 'string') {\n            return await HttpServerModule.wsSendText(this._connectionId, data);\n        }\n        else {\n            return await HttpServerModule.wsSendBinary(this._connectionId, data);\n        }\n    }\n    /** 关闭连接 */\n    async close(code = 1000, reason = '') {\n        if (this._readyState >= 2) {\n            return false;\n        }\n        this._readyState = 2; // CLOSING\n        const result = await HttpServerModule.wsClose(this._connectionId, code, reason);\n        this._readyState = 3; // CLOSED\n        return result;\n    }\n    // 内部方法：处理事件\n    _handleOpen() {\n        this._readyState = 1;\n        if (this.onopen) {\n            this.onopen.call(this);\n        }\n    }\n    _handleMessage(data) {\n        if (this.onmessage) {\n            this.onmessage.call(this, { data });\n        }\n    }\n    _handleClose(code, reason) {\n        this._readyState = 3;\n        if (this.onclose) {\n            this.onclose.call(this, { code, reason, wasClean: code === 1000 });\n        }\n    }\n    _handleError(message) {\n        if (this.onerror) {\n            this.onerror.call(this, { message });\n        }\n    }\n}\n/** WebSocket 连接管理器 */\nconst webSocketConnections = new Map();\n/**\n * 设置 WebSocket 事件处理器\n * @param handler 处理 WebSocket 事件的回调函数\n */\nexport function setupWebSocketHandler(handler) {\n    HttpServerModule.setWebSocketHandler((event) => {\n        let ws = webSocketConnections.get(event.connectionId);\n        if (event.type === 'open') {\n            ws = new ServerWebSocket(event.connectionId);\n            webSocketConnections.set(event.connectionId, ws);\n            ws._handleOpen();\n            handler(ws, event);\n        }\n        else if (ws) {\n            switch (event.type) {\n                case 'message':\n                    const data = event.binaryData || event.textData || '';\n                    ws._handleMessage(data);\n                    handler(ws, event);\n                    break;\n                case 'close':\n                    ws._handleClose(event.closeCode || 1000, event.closeReason || '');\n                    webSocketConnections.delete(event.connectionId);\n                    handler(ws, event);\n                    break;\n                case 'error':\n                    ws._handleError(event.errorMessage || 'Unknown error');\n                    handler(ws, event);\n                    break;\n            }\n        }\n    });\n}\n/** 获取所有活跃的 WebSocket 连接 */\nexport function getWebSocketConnections() {\n    return webSocketConnections;\n}\n/** 获取指定的 WebSocket 连接 */\nexport function getWebSocket(connectionId) {\n    return webSocketConnections.get(connectionId);\n}\n// Node.js 兼容的 HTTP 接口\nexport * from './http';\nexport { createServer, Server, IncomingMessage, ServerResponse, STATUS_CODES, METHODS } from './http';\nimport { Server, IncomingMessage, ServerResponse, STATUS_CODES, METHODS } from './http';\nexport default { createHttpServer, createStaticServer, createAppServer, createConfigServer, HttpServer, StaticServer, AppServer, ConfigServer, createServer, Server, IncomingMessage, ServerResponse, STATUS_CODES, METHODS, ServerWebSocket, setupWebSocketHandler, getWebSocketConnections, getWebSocket };\n"]}