UNPKG

react-native-shiki-engine

Version:

Shiki syntax highlighting for React Native. Zero bridge overhead with native Oniguruma regex engine.

65 lines (64 loc) 2.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createNativeEngine = createNativeEngine; exports.isNativeEngineAvailable = isNativeEngineAvailable; var _reactNative = require("react-native"); var _NativeShikiEngine = _interopRequireDefault(require("../NativeShikiEngine")); var _utils = require("./utils"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function createNativeEngine(options = {}) { const { maxCacheSize = 1000 } = options; if (!isNativeEngineAvailable()) { throw new Error('Native engine not available'); } return { createScanner(patterns) { if (!Array.isArray(patterns) || patterns.some(p => typeof p !== 'string')) { throw new TypeError('Patterns must be an array of strings'); } const scannerId = _NativeShikiEngine.default.createScanner(patterns, maxCacheSize); if (typeof scannerId !== 'number') { throw new TypeError('Failed to create native scanner'); } return { findNextMatchSync(string, startPosition) { if (startPosition < 0) throw new RangeError('Start position must be >= 0'); const stringContent = typeof string === 'string' ? string : string.content; if (typeof stringContent !== 'string') throw new TypeError('Invalid input string'); try { const result = _NativeShikiEngine.default.findNextMatchSync(scannerId, stringContent, startPosition); return (0, _utils.convertToOnigMatch)(result); } catch (err) { if (__DEV__) console.error('Error in findNextMatchSync:', err); throw err; } }, dispose() { try { _NativeShikiEngine.default.destroyScanner(scannerId); } catch (err) { if (__DEV__) console.error('Error disposing scanner:', err); } } }; }, createString(s) { if (typeof s !== 'string') throw new TypeError('Input must be a string'); return { content: s }; } }; } function isNativeEngineAvailable() { try { return _reactNative.TurboModuleRegistry.getEnforcing('ShikiEngine') != null; } catch { return false; } } //# sourceMappingURL=index.js.map