{"_id":"@actualwave/codemirror-package","_rev":"4-cc715418f8d44a8a7ec920bb18392faa","name":"@actualwave/codemirror-package","dist-tags":{"latest":"0.1.0"},"versions":{"0.0.7":{"name":"@actualwave/codemirror-package","version":"0.0.7","_id":"@actualwave/codemirror-package@0.0.7","maintainers":[{"name":"actualwave","email":"burdiuz@gmail.com"}],"dist":{"shasum":"2db9eb5c370ff3d754fa9f789e7f39aeb3bd26fc","tarball":"https://registry.npmjs.org/@actualwave/codemirror-package/-/codemirror-package-0.0.7.tgz","fileCount":191,"integrity":"sha512-2XMBE4DusKm21JAY5hv2bXqBQjc8BseilWMlsICgQPyf3rfKu3TQ3XYC6gZJIcTaQY2B2eMFydmq0P/SHYLLTw==","signatures":[{"sig":"MEUCIFN8caR+TcNkcApF3vMphThf8uriwABA3kfP+BOaS+NvAiEAvIVvAfV2CPhnKRuF8Su556r9eGQHq6eDs0uU79PrOAo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3660850},"main":"dist/index.js","type":"module","gitHead":"faeb637a3f07b93aa26ac3f165b52f80c07e72ff","scripts":{"build":"node start.js","serve":"rollup -c rollup.serve.config.js","start":"node start.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"actualwave","email":"burdiuz@gmail.com"},"_npmVersion":"11.5.1","description":"Support package for the [ReactNative CodeEditor](https://github.com/burdiuz/react-native-codeditor) component. Packages all [CodeMirror 6](https://codemirror.net/) modules into individually loadable JS files so they can be lazily fetched into a WebView on","directories":{},"_nodeVersion":"24.6.0","dependencies":{"@actualwave/codemirror-lang-sksl":"^0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"crelt":"1.0.6","rollup":"4.60.3","@lezer/go":"1.0.1","@lezer/lr":"1.4.10","style-mod":"4.1.3","@lezer/cpp":"1.1.5","@lezer/css":"1.3.3","@lezer/php":"1.0.5","@lezer/xml":"1.0.6","codemirror":"6.0.2","@babel/core":"^7.15.5","@lezer/html":"1.3.13","@lezer/java":"1.1.3","@lezer/json":"1.0.3","@lezer/rust":"1.0.2","@lezer/sass":"1.1.0","@lezer/yaml":"1.0.4","@types/node":"^16.9.1","w3c-keyname":"2.2.8","@lezer/lezer":"1.1.2","@lezer/common":"1.5.2","@lezer/python":"1.1.18","@babel/runtime":"^7.27.0","@lezer/markdown":"1.6.3","@codemirror/lint":"6.9.6","@codemirror/view":"6.42.1","@lezer/highlight":"1.2.3","@codemirror/merge":"6.12.1","@codemirror/state":"6.6.0","@lezer/javascript":"1.5.4","@codemirror/collab":"6.1.1","@codemirror/search":"6.7.0","@codemirror/lang-go":"6.0.1","babel-preset-minify":"^0.5.1","rollup-plugin-serve":"3.0.0","@codemirror/commands":"6.10.3","@codemirror/lang-cpp":"6.0.3","@codemirror/lang-css":"6.3.1","@codemirror/lang-php":"6.0.2","@codemirror/lang-sql":"6.10.0","@codemirror/lang-vue":"0.1.3","@codemirror/lang-xml":"6.1.0","@codemirror/language":"6.12.3","@codemirror/lang-html":"6.4.11","@codemirror/lang-java":"6.0.2","@codemirror/lang-json":"6.0.2","@codemirror/lang-less":"6.0.2","@codemirror/lang-rust":"6.0.2","@codemirror/lang-sass":"6.0.2","@codemirror/lang-wast":"6.0.2","@codemirror/lang-yaml":"6.1.3","@codemirror/lang-jinja":"6.0.1","@codemirror/lang-lezer":"6.0.2","@uiw/codemirror-themes":"^4.25.9","@codemirror/lang-liquid":"6.3.2","@codemirror/lang-python":"6.2.1","@rollup/plugin-commonjs":"^28.0.0","@codemirror/autocomplete":"6.20.2","@codemirror/lang-angular":"0.1.4","@codemirror/legacy-modes":"6.5.2","@codemirror/lang-markdown":"6.5.0","@codemirror/language-data":"6.5.2","@codemirror/theme-one-dark":"6.1.3","@marijn/find-cluster-break":"1.0.2","@uiw/codemirror-theme-aura":"^4.25.9","@uiw/codemirror-theme-nord":"^4.25.9","@codemirror/lang-javascript":"6.2.5","@uiw/codemirror-theme-basic":"^4.25.9","@uiw/codemirror-theme-xcode":"^4.25.9","@uiw/codemirror-theme-bbedit":"^4.25.9","@uiw/codemirror-theme-github":"^4.25.9","@uiw/codemirror-theme-vscode":"^4.25.9","@uiw/codemirror-theme-atomone":"^4.25.9","@uiw/codemirror-theme-copilot":"^4.25.9","@uiw/codemirror-theme-darcula":"^4.25.9","@uiw/codemirror-theme-dracula":"^4.25.9","@uiw/codemirror-theme-duotone":"^4.25.9","@uiw/codemirror-theme-eclipse":"^4.25.9","@uiw/codemirror-theme-monokai":"^4.25.9","@uiw/codemirror-theme-okaidia":"^4.25.9","@uiw/codemirror-theme-sublime":"^4.25.9","@uiw/codemirror-theme-material":"^4.25.9","@uiw/codemirror-theme-andromeda":"^4.25.9","@uiw/codemirror-theme-solarized":"^4.25.9","@uiw/codemirror-theme-tokyo-night":"^4.25.10","@uiw/codemirror-theme-androidstudio":"^4.25.9","@actualwave/babel-ioc-dep-wrap-plugin":"0.0.4"},"_npmOperationalInternal":{"tmp":"tmp/codemirror-package_0.0.7_1780074651329_0.13604727485331347","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@actualwave/codemirror-package","version":"0.0.8","license":"MIT","_id":"@actualwave/codemirror-package@0.0.8","maintainers":[{"name":"actualwave","email":"burdiuz@gmail.com"}],"dist":{"shasum":"7186fbb5b4d41cb0690cd8dc9157445d23bebea0","tarball":"https://registry.npmjs.org/@actualwave/codemirror-package/-/codemirror-package-0.0.8.tgz","fileCount":193,"integrity":"sha512-I6HcRL1KGITobD2Lu0aEYjOWofrbiB8o/RmWRa9t+ZrcIgFChp84hmQca4jeORKN+hTPMr53yFEG1JgfJiMY9w==","signatures":[{"sig":"MEYCIQCoA2X8e4SfImthYifN7AYnrMs4aPHn0bxMSno3c+7PcwIhALs3jUWRGPp9qDZZJHTX+XoddZJciQIZuRmYTzaJVdCK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3666243},"main":"dist/index.js","type":"module","gitHead":"73ad77ee03b2d6ba9e22e814be5c20c06fa0f3ff","scripts":{"build":"node start.js","serve":"rollup -c rollup.serve.config.js","start":"node start.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"actualwave","email":"burdiuz@gmail.com"},"_npmVersion":"11.5.1","description":"Support package for the [ReactNative CodeEditor](https://github.com/burdiuz/react-native-codeditor) component. Packages all [CodeMirror 6](https://codemirror.net/) modules into individually loadable JS files so they can be lazily fetched into a WebView on","directories":{},"_nodeVersion":"24.6.0","_hasShrinkwrap":false,"devDependencies":{"crelt":"1.0.6","rollup":"4.60.3","@lezer/go":"1.0.1","@lezer/lr":"1.4.10","style-mod":"4.1.3","@lezer/cpp":"1.1.5","@lezer/css":"1.3.3","@lezer/php":"1.0.5","@lezer/xml":"1.0.6","codemirror":"6.0.2","@babel/core":"^7.15.5","@lezer/html":"1.3.13","@lezer/java":"1.1.3","@lezer/json":"1.0.3","@lezer/rust":"1.0.2","@lezer/sass":"1.1.0","@lezer/yaml":"1.0.4","@types/node":"^16.9.1","w3c-keyname":"2.2.8","@lezer/lezer":"1.1.2","@lezer/common":"1.5.2","@lezer/python":"1.1.18","@babel/runtime":"^7.27.0","@lezer/markdown":"1.6.3","@codemirror/lint":"6.9.6","@codemirror/view":"6.42.1","@lezer/highlight":"1.2.3","@codemirror/merge":"6.12.1","@codemirror/state":"6.6.0","@lezer/javascript":"1.5.4","@codemirror/collab":"6.1.1","@codemirror/search":"6.7.0","@codemirror/lang-go":"6.0.1","babel-preset-minify":"^0.5.1","rollup-plugin-serve":"3.0.0","@codemirror/commands":"6.10.3","@codemirror/lang-cpp":"6.0.3","@codemirror/lang-css":"6.3.1","@codemirror/lang-php":"6.0.2","@codemirror/lang-sql":"6.10.0","@codemirror/lang-vue":"0.1.3","@codemirror/lang-xml":"6.1.0","@codemirror/language":"6.12.3","@codemirror/lang-html":"6.4.11","@codemirror/lang-java":"6.0.2","@codemirror/lang-json":"6.0.2","@codemirror/lang-less":"6.0.2","@codemirror/lang-rust":"6.0.2","@codemirror/lang-sass":"6.0.2","@codemirror/lang-wast":"6.0.2","@codemirror/lang-yaml":"6.1.3","@codemirror/lang-jinja":"6.0.1","@codemirror/lang-lezer":"6.0.2","@uiw/codemirror-themes":"^4.25.9","@codemirror/lang-liquid":"6.3.2","@codemirror/lang-python":"6.2.1","@rollup/plugin-commonjs":"^28.0.0","@codemirror/autocomplete":"6.20.2","@codemirror/lang-angular":"0.1.4","@codemirror/legacy-modes":"6.5.2","@codemirror/lang-markdown":"6.5.0","@codemirror/language-data":"6.5.2","@codemirror/theme-one-dark":"6.1.3","@marijn/find-cluster-break":"1.0.2","@uiw/codemirror-theme-aura":"^4.25.9","@uiw/codemirror-theme-nord":"^4.25.9","@codemirror/lang-javascript":"6.2.5","@uiw/codemirror-theme-basic":"^4.25.9","@uiw/codemirror-theme-xcode":"^4.25.9","@uiw/codemirror-theme-bbedit":"^4.25.9","@uiw/codemirror-theme-github":"^4.25.9","@uiw/codemirror-theme-vscode":"^4.25.9","@uiw/codemirror-theme-atomone":"^4.25.9","@uiw/codemirror-theme-copilot":"^4.25.9","@uiw/codemirror-theme-darcula":"^4.25.9","@uiw/codemirror-theme-dracula":"^4.25.9","@uiw/codemirror-theme-duotone":"^4.25.9","@uiw/codemirror-theme-eclipse":"^4.25.9","@uiw/codemirror-theme-monokai":"^4.25.9","@uiw/codemirror-theme-okaidia":"^4.25.9","@uiw/codemirror-theme-sublime":"^4.25.9","@uiw/codemirror-theme-material":"^4.25.9","@uiw/codemirror-theme-andromeda":"^4.25.9","@uiw/codemirror-theme-solarized":"^4.25.9","@actualwave/codemirror-lang-sksl":"^0.1.0","@uiw/codemirror-theme-tokyo-night":"^4.25.10","@uiw/codemirror-theme-androidstudio":"^4.25.9","@actualwave/babel-ioc-dep-wrap-plugin":"0.0.4"},"_npmOperationalInternal":{"tmp":"tmp/codemirror-package_0.0.8_1780075161891_0.17116414488409304","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@actualwave/codemirror-package","version":"0.0.9","license":"MIT","_id":"@actualwave/codemirror-package@0.0.9","maintainers":[{"name":"actualwave","email":"burdiuz@gmail.com"}],"dist":{"shasum":"9009fd7ca091f9e7b2051bb197d811eef0a6cba2","tarball":"https://registry.npmjs.org/@actualwave/codemirror-package/-/codemirror-package-0.0.9.tgz","fileCount":193,"integrity":"sha512-ItLDmME5wlyHlsb2EapTjHQ8YGW0o5B0Ino70uSbDOzFKjEMbYmn89FZEhaYFG7ImOZxDFQf7Jq9h/ffsMfi4A==","signatures":[{"sig":"MEQCIDWEyw9/6G6xBhltWxQkCmd4ICDlTTPkAJAhTCA1NdUVAiBju+i1kRsCU2BnzDTYzDo2hrGXz/hdsNOE/8GNQqOgZw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3666770},"main":"dist/index.js","type":"module","gitHead":"988a637a3d85a32dcabaa9d49283475b2d4565c9","scripts":{"build":"node start.js","serve":"rollup -c rollup.serve.config.js","start":"node start.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"actualwave","email":"burdiuz@gmail.com"},"_npmVersion":"11.5.1","description":"Support package for the [ReactNative CodeEditor](https://github.com/burdiuz/react-native-codeditor) component. Packages all [CodeMirror 6](https://codemirror.net/) modules into individually loadable JS files so they can be lazily fetched into a WebView on","directories":{},"_nodeVersion":"24.6.0","_hasShrinkwrap":false,"devDependencies":{"crelt":"1.0.6","rollup":"4.60.3","@lezer/go":"1.0.1","@lezer/lr":"1.4.10","style-mod":"4.1.3","@lezer/cpp":"1.1.5","@lezer/css":"1.3.3","@lezer/php":"1.0.5","@lezer/xml":"1.0.6","codemirror":"6.0.2","@babel/core":"^7.15.5","@lezer/html":"1.3.13","@lezer/java":"1.1.3","@lezer/json":"1.0.3","@lezer/rust":"1.0.2","@lezer/sass":"1.1.0","@lezer/yaml":"1.0.4","@types/node":"^16.9.1","w3c-keyname":"2.2.8","@lezer/lezer":"1.1.2","@lezer/common":"1.5.2","@lezer/python":"1.1.18","@babel/runtime":"^7.27.0","@lezer/markdown":"1.6.3","@codemirror/lint":"6.9.6","@codemirror/view":"6.42.1","@lezer/highlight":"1.2.3","@codemirror/merge":"6.12.1","@codemirror/state":"6.6.0","@lezer/javascript":"1.5.4","@codemirror/collab":"6.1.1","@codemirror/search":"6.7.0","@codemirror/lang-go":"6.0.1","babel-preset-minify":"^0.5.1","rollup-plugin-serve":"3.0.0","@codemirror/commands":"6.10.3","@codemirror/lang-cpp":"6.0.3","@codemirror/lang-css":"6.3.1","@codemirror/lang-php":"6.0.2","@codemirror/lang-sql":"6.10.0","@codemirror/lang-vue":"0.1.3","@codemirror/lang-xml":"6.1.0","@codemirror/language":"6.12.3","@codemirror/lang-html":"6.4.11","@codemirror/lang-java":"6.0.2","@codemirror/lang-json":"6.0.2","@codemirror/lang-less":"6.0.2","@codemirror/lang-rust":"6.0.2","@codemirror/lang-sass":"6.0.2","@codemirror/lang-wast":"6.0.2","@codemirror/lang-yaml":"6.1.3","@codemirror/lang-jinja":"6.0.1","@codemirror/lang-lezer":"6.0.2","@uiw/codemirror-themes":"^4.25.9","@codemirror/lang-liquid":"6.3.2","@codemirror/lang-python":"6.2.1","@rollup/plugin-commonjs":"^28.0.0","@codemirror/autocomplete":"6.20.2","@codemirror/lang-angular":"0.1.4","@codemirror/legacy-modes":"6.5.2","@codemirror/lang-markdown":"6.5.0","@codemirror/language-data":"6.5.2","@codemirror/theme-one-dark":"6.1.3","@marijn/find-cluster-break":"1.0.2","@uiw/codemirror-theme-aura":"^4.25.9","@uiw/codemirror-theme-nord":"^4.25.9","@codemirror/lang-javascript":"6.2.5","@uiw/codemirror-theme-basic":"^4.25.9","@uiw/codemirror-theme-xcode":"^4.25.9","@uiw/codemirror-theme-bbedit":"^4.25.9","@uiw/codemirror-theme-github":"^4.25.9","@uiw/codemirror-theme-vscode":"^4.25.9","@uiw/codemirror-theme-atomone":"^4.25.9","@uiw/codemirror-theme-copilot":"^4.25.9","@uiw/codemirror-theme-darcula":"^4.25.9","@uiw/codemirror-theme-dracula":"^4.25.9","@uiw/codemirror-theme-duotone":"^4.25.9","@uiw/codemirror-theme-eclipse":"^4.25.9","@uiw/codemirror-theme-monokai":"^4.25.9","@uiw/codemirror-theme-okaidia":"^4.25.9","@uiw/codemirror-theme-sublime":"^4.25.9","@uiw/codemirror-theme-material":"^4.25.9","@uiw/codemirror-theme-andromeda":"^4.25.9","@uiw/codemirror-theme-solarized":"^4.25.9","@actualwave/codemirror-lang-sksl":"^0.1.0","@uiw/codemirror-theme-tokyo-night":"^4.25.10","@uiw/codemirror-theme-androidstudio":"^4.25.9","@actualwave/babel-ioc-dep-wrap-plugin":"0.0.4"},"_npmOperationalInternal":{"tmp":"tmp/codemirror-package_0.0.9_1780081150037_0.42259868615217244","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@actualwave/codemirror-package","version":"0.1.0","main":"dist/index.js","scripts":{"start":"node start.js","build":"node start.js","prepublishOnly":"npm run build","serve":"rollup -c rollup.serve.config.js"},"license":"MIT","type":"module","devDependencies":{"@actualwave/babel-ioc-dep-wrap-plugin":"0.0.4","@actualwave/codemirror-lang-sksl":"^0.1.0","@babel/core":"^7.15.5","@babel/runtime":"^7.27.0","@codemirror/autocomplete":"6.20.2","@codemirror/collab":"6.1.1","@codemirror/commands":"6.10.3","@codemirror/lang-angular":"0.1.4","@codemirror/lang-cpp":"6.0.3","@codemirror/lang-css":"6.3.1","@codemirror/lang-go":"6.0.1","@codemirror/lang-html":"6.4.11","@codemirror/lang-java":"6.0.2","@codemirror/lang-javascript":"6.2.5","@codemirror/lang-jinja":"6.0.1","@codemirror/lang-json":"6.0.2","@codemirror/lang-less":"6.0.2","@codemirror/lang-lezer":"6.0.2","@codemirror/lang-liquid":"6.3.2","@codemirror/lang-markdown":"6.5.0","@codemirror/lang-php":"6.0.2","@codemirror/lang-python":"6.2.1","@codemirror/lang-rust":"6.0.2","@codemirror/lang-sass":"6.0.2","@codemirror/lang-sql":"6.10.0","@codemirror/lang-vue":"0.1.3","@codemirror/lang-wast":"6.0.2","@codemirror/lang-xml":"6.1.0","@codemirror/lang-yaml":"6.1.3","@codemirror/language":"6.12.3","@codemirror/language-data":"6.5.2","@codemirror/legacy-modes":"6.5.2","@codemirror/lint":"6.9.6","@codemirror/merge":"6.12.1","@codemirror/search":"6.7.0","@codemirror/state":"6.6.0","@codemirror/theme-one-dark":"6.1.3","@codemirror/view":"6.42.1","@lezer/common":"1.5.2","@lezer/cpp":"1.1.5","@lezer/css":"1.3.3","@lezer/go":"1.0.1","@lezer/highlight":"1.2.3","@lezer/html":"1.3.13","@lezer/java":"1.1.3","@lezer/javascript":"1.5.4","@lezer/json":"1.0.3","@lezer/lezer":"1.1.2","@lezer/lr":"1.4.10","@lezer/markdown":"1.6.3","@lezer/php":"1.0.5","@lezer/python":"1.1.18","@lezer/rust":"1.0.2","@lezer/sass":"1.1.0","@lezer/xml":"1.0.6","@lezer/yaml":"1.0.4","@marijn/find-cluster-break":"1.0.2","@rollup/plugin-commonjs":"^28.0.0","@types/node":"^16.9.1","@uiw/codemirror-theme-androidstudio":"^4.25.9","@uiw/codemirror-theme-andromeda":"^4.25.9","@uiw/codemirror-theme-atomone":"^4.25.9","@uiw/codemirror-theme-aura":"^4.25.9","@uiw/codemirror-theme-basic":"^4.25.9","@uiw/codemirror-theme-bbedit":"^4.25.9","@uiw/codemirror-theme-copilot":"^4.25.9","@uiw/codemirror-theme-darcula":"^4.25.9","@uiw/codemirror-theme-dracula":"^4.25.9","@uiw/codemirror-theme-duotone":"^4.25.9","@uiw/codemirror-theme-eclipse":"^4.25.9","@uiw/codemirror-theme-github":"^4.25.9","@uiw/codemirror-theme-material":"^4.25.9","@uiw/codemirror-theme-monokai":"^4.25.9","@uiw/codemirror-theme-nord":"^4.25.9","@uiw/codemirror-theme-okaidia":"^4.25.9","@uiw/codemirror-theme-solarized":"^4.25.9","@uiw/codemirror-theme-sublime":"^4.25.9","@uiw/codemirror-theme-tokyo-night":"^4.25.10","@uiw/codemirror-theme-vscode":"^4.25.9","@uiw/codemirror-theme-xcode":"^4.25.9","@uiw/codemirror-themes":"^4.25.9","babel-preset-minify":"^0.5.1","codemirror":"6.0.2","crelt":"1.0.6","rollup":"4.60.3","rollup-plugin-serve":"3.0.0","style-mod":"4.1.3","w3c-keyname":"2.2.8"},"_id":"@actualwave/codemirror-package@0.1.0","gitHead":"988a637a3d85a32dcabaa9d49283475b2d4565c9","description":"Support package for the [ReactNative CodeEditor](https://github.com/burdiuz/react-native-codeditor) component. Packages all [CodeMirror 6](https://codemirror.net/) modules into individually loadable JS files so they can be lazily fetched into a WebView on","_nodeVersion":"24.6.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-oLOIpnGe/1uZ79+G/DXN3l5L35w1ZKGVxKecQEP2qPYLJjiHIROPqpz5zJ2lb0JhOSs+TQ1gphqIKwECC72uHA==","shasum":"015dd316ab0a805015e39458bb9550945ebe87c2","tarball":"https://registry.npmjs.org/@actualwave/codemirror-package/-/codemirror-package-0.1.0.tgz","fileCount":193,"unpackedSize":3666909,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIET60lxgI3POu6oDcuJk+zI1tmPKXvktl1X5nFOPSSsoAiEArNqyupEB6LwFrMdZOpUlTf0g/3BwFF1NHi1Rw1QMk/Q="}]},"_npmUser":{"name":"actualwave","email":"burdiuz@gmail.com"},"directories":{},"maintainers":[{"name":"actualwave","email":"burdiuz@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/codemirror-package_0.1.0_1780082296912_0.9359062810764551"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-29T17:10:51.128Z","modified":"2026-05-29T19:18:17.219Z","0.0.7":"2026-05-29T17:10:51.542Z","0.0.8":"2026-05-29T17:19:22.147Z","0.0.9":"2026-05-29T18:59:10.277Z","0.1.0":"2026-05-29T19:18:17.106Z"},"license":"MIT","description":"Support package for the [ReactNative CodeEditor](https://github.com/burdiuz/react-native-codeditor) component. Packages all [CodeMirror 6](https://codemirror.net/) modules into individually loadable JS files so they can be lazily fetched into a WebView on","maintainers":[{"name":"actualwave","email":"burdiuz@gmail.com"}],"readme":"# @actualwave/codemirror-package\n\nSupport package for the [ReactNative CodeEditor](https://github.com/burdiuz/react-native-codeditor) component. Packages all [CodeMirror 6](https://codemirror.net/) modules into individually loadable JS files so they can be lazily fetched into a WebView on demand, avoiding the cost of shipping everything up front.\n\nA live demo is deployed as a [GitHub Page for this repo](https://burdiuz.github.io/js-codemirror-package/).\n\n---\n\n## How it works\n\nEach CodeMirror and Lezer package is transformed at build time using [@actualwave/babel-ioc-dep-wrap-plugin](https://github.com/burdiuz/babel-ioc-dep-wrap-plugin): every `require()` call inside the CJS source is converted to `await requireAsyncModule()`. The result is a folder of self-contained JS files that load their dependencies through the same async loader at runtime — no bundler, no `node_modules` in the browser.\n\nThe 14 foundational packages (state, view, language, commands, etc.) are combined into a single `_core.js` bundle so they are always fetched together in one request. All other packages (language support, themes, legacy modes) are fetched individually and cached on first use.\n\n```\ndist/\n  requireAsyncModule.js   ← runtime loader (inject into WebView HTML)\n  index.js                ← high-level editor facade (import in your page)\n  modules.json            ← module registry used by the loader\n  codemirror/\n    _core.js              ← bundled core (14 packages, one fetch)\n    @codemirror_lang-javascript.js\n    @lezer_javascript.js\n    codemirror.js\n    ... (159 modules total)\n```\n\n---\n\n## Installation\n\n```bash\nnpm install @actualwave/codemirror-package\n```\n\nThe `postinstall` script runs the build automatically. To rebuild manually:\n\n```bash\nnpm start\n```\n\n---\n\n## Browser / WebView usage\n\nInclude both files in your HTML page. The loader must come first so the module map is available before any `import` runs:\n\n```html\n<script type=\"module\" src=\"requireAsyncModule.js\"></script>\n<script type=\"module\">\n  import { createEditor } from './index.js';\n\n  const editor = await createEditor({\n    parent: document.body,\n    doc: 'function hello() {}',\n    language: 'javascript',\n    extensions: ['@codemirror/autocomplete'],\n  });\n</script>\n```\n\n---\n\n## API\n\n### `configure(options)`\n\nCall before any modules are loaded to override defaults.\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `baseUrl` | `string` | `'./codemirror/'` | Directory URL where module `.js` files are served from. |\n| `loader` | `(url: string) => Promise<string>` | `fetch` | Custom transport. Replace when `fetch` is unavailable (e.g. React Native asset registry). |\n\n```js\nconfigure({ baseUrl: 'https://cdn.example.com/codemirror/' });\n\n// Custom loader for React Native WebView\nconfigure({\n  loader: (url) => loadLocalAsset(url),\n});\n```\n\n---\n\n### `createEditor(options)` → `Promise<EditorController>`\n\nCreates and mounts a CodeMirror editor. Core modules are lazy-loaded on the first call and cached for the lifetime of the page.\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `parent` | `Element` | `document.body` | DOM element to mount into. |\n| `doc` | `string` | `''` | Initial content. |\n| `language` | `string` | — | Language name. Loads `@codemirror/lang-{name}` on demand. |\n| `extensions` | `Array` | `[]` | Extension specs (see below). |\n| `onChange` | `(value: string) => void` | — | Called on every document change. |\n\n#### Extension specs\n\nEach entry in `extensions` (and in `setExtensions`) may be:\n\n| Form | Example | Behaviour |\n|------|---------|-----------|\n| Package name string | `'@codemirror/autocomplete'` | Loaded and resolved via the built-in registry |\n| `[packageName, exportName]` | `['@uiw/codemirror-theme-nord', 'nord']` | `mod[exportName]` returned directly — use for themes and named exports |\n| `[packageName, options]` | `['@codemirror/search', { top: true }]` | Resolver called with options; must be registered in the extension registry |\n| CM Extension object | `myExtension` | Passed through as-is |\n\nBuilt-in registry covers: `@codemirror/autocomplete`, `@codemirror/search`, `@codemirror/lint`, `@codemirror/collab`, `@codemirror/theme-one-dark`.\n\n**Note on `@uiw` themes**: each theme lives in its own package (`@uiw/codemirror-theme-{name}`), not the meta-package `@uiw/codemirror-themes`. Use the `[packageName, exportName]` form. Two themes use non-obvious export names: `github` → `githubDark`, `vscode` → `vscodeDark`.\n\n```js\n// ✓ correct\n['@uiw/codemirror-theme-darcula', 'darcula']\n['@uiw/codemirror-theme-github',  'githubDark']\n\n// ✗ wrong — meta-package only exports createTheme, not individual themes\n['@uiw/codemirror-themes', 'darcula']\n```\n\n---\n\n### `EditorController`\n\nThe object returned by `createEditor`.\n\n| Member | Description |\n|--------|-------------|\n| `view` | The underlying `EditorView` for direct CodeMirror access. |\n| `getValue()` | Returns current document as a string. |\n| `setValue(value)` | Replaces the entire document. |\n| `setLanguage(name)` | Swaps the active language without rebuilding editor state. |\n| `setExtensions(specs)` | Replaces the active extension set. Accepts the same spec forms as `extensions`. |\n| `loadExtension(moduleName)` | Loads a module and returns its raw exports. Use when you need internals not exposed by the registry (e.g. building a custom completion source). |\n| `destroy()` | Destroys the editor and removes it from the DOM. |\n\n---\n\n### `registerExtension(moduleName, resolver)`\n\nAdds (or overrides) an entry in the extension registry.\n\n```js\nimport { registerExtension, createEditor } from './index.js';\n\nregisterExtension('@my/custom-theme', (mod) => mod.myTheme);\n\nconst editor = await createEditor({\n  extensions: ['@my/custom-theme'],\n});\n```\n\n---\n\n### `requireAsyncModule(moduleName)` → `object | Promise<object>`\n\nLow-level loader. Returns the cached exports synchronously if already loaded, otherwise fetches and evaluates the module file and returns a Promise. All `createEditor` and `loadExtension` calls go through this internally.\n\n```js\nconst { javascriptLanguage } = await requireAsyncModule('@codemirror/lang-javascript');\n```\n\n---\n\n## Supported languages\n\nAll `@codemirror/lang-*` packages are included and loadable by name via the `language` option or `setLanguage()`:\n\n`angular`, `cpp`, `css`, `go`, `html`, `java`, `javascript`, `jinja`, `json`, `less`, `lezer`, `liquid`, `markdown`, `php`, `python`, `rust`, `sass`, `sql`, `vue`, `wast`, `xml`, `yaml`\n\nLegacy CodeMirror modes from `@codemirror/legacy-modes` are also available via `requireAsyncModule`:\n\n```js\nconst { clike } = await requireAsyncModule('@codemirror/legacy-modes/mode/clike');\n```\n\n---\n\n## Android WebView / React Native usage\n\nSeveral Android WebView constraints require special handling when hosting the editor in React Native.\n\n### Use plain `<script>` tags, not ES modules\n\n`<script type=\"module\">` causes silent failures in Android WebView when an imported file is\nmissing — the page just stops loading with no `window.onerror`. Use plain `<script>` tags and\nIIFE bundles instead so errors are caught and surfaced:\n\n```html\n<!-- ✗ ES modules — silent failures on Android WebView -->\n<script type=\"module\" src=\"requireAsyncModule.js\"></script>\n<script type=\"module\">import { createEditor } from './index.js';</script>\n\n<!-- ✓ IIFE bundles — errors reported via window.onerror -->\n<script src=\"./codemirror-editor.umd.js\"></script>\n<script>\n(async () => {\n  const { configure, createEditor } = window.CodeMirrorEditor;\n  configure({ baseUrl: './codemirror/' });\n  const editor = await createEditor({ ... });\n})();\n</script>\n```\n\n[react-native-codeditor](https://github.com/burdiuz/react-native-codeditor) ships a pre-built\n`codemirror-editor.umd.js` IIFE bundle generated from this package.\n\n### Use XHR instead of `fetch` for `file://` origins\n\nAndroid WebView blocks `fetch()` for `file://` origins even for same-origin requests. Use XHR\ninstead — status `0` means success for `file://`:\n\n```js\nconfigure({\n  loader: (url) => new Promise((resolve, reject) => {\n    const xhr = new XMLHttpRequest();\n    xhr.open('GET', url);\n    xhr.onload = () => {\n      if (xhr.status === 0 || (xhr.status >= 200 && xhr.status < 300)) {\n        resolve(xhr.responseText);\n      } else {\n        reject(new Error('HTTP ' + xhr.status + ': ' + url));\n      }\n    };\n    xhr.onerror = () => reject(new Error('XHR failed: ' + url));\n    xhr.send();\n  }),\n});\n```\n\n### Disable EditContext for Chrome 147+ WebView compatibility\n\nCM6 v6.42+ automatically enables the [EditContext API](https://developer.chrome.com/docs/web-platform/editcontext/)\non Android Chrome 126+. Chrome 147 has a race condition in its WebView EditContext implementation:\nsuccessive IME `textupdate` events arrive faster than CM6 can sync back, causing characters to\nappear after the cursor during fast typing.\n\nSet `EditorView.EDIT_CONTEXT = false` **after** the CM6 modules have loaded (so the flag is set on\nthe real class, not a module stub) and **before** `new EditorView()` is called:\n\n```js\nconst [{ EditorView }, ...] = await Promise.all([\n  requireAsyncModule('@codemirror/view'),\n  // ...\n]);\n\n// Must be set on the resolved class, not before requireAsyncModule loads _core.js\nEditorView.EDIT_CONTEXT = false;\n\nconst view = new EditorView({ ... });\n```\n\nThis falls back to the `contenteditable` + MutationObserver path, which is stable at any typing\nspeed as long as `drawSelection()` is also omitted (see below).\n\n### Omit `drawSelection()` for Android IME\n\nCM6's `drawSelection()` replaces the native browser cursor with a custom overlay. Android's IME\ntracks the native cursor to know where to insert text — hiding it causes characters to appear after\nthe cursor instead of advancing it.\n\nUse a custom setup that omits `drawSelection()` rather than `basicSetup`:\n\n```js\nconst { EditorView, lineNumbers, keymap, /* ... */ } = await requireAsyncModule('@codemirror/view');\n\n// basicSetup without drawSelection()\nconst mobileSetup = [\n  lineNumbers(),\n  history(),\n  // drawSelection(), ← intentionally omitted\n  // ... all other basicSetup extensions\n];\n```\n\n---\n\n## Development\n\nServe the `docs/` demo locally:\n\n```bash\nnpm run serve\n# opens http://localhost:3000\n```\n","readmeFilename":"README.md"}