vite-plugin-v8-bytecode
Version:
A Vite plugin for compiling JavaScript to V8 bytecode for Node.js and Electron applications
1 lines • 36.5 kB
Source Map (JSON)
{"version":3,"sources":["../src/compiler.ts","../src/loader.ts","../src/transforms.ts","../src/utils.ts","../src/index.ts"],"names":["v8","vm","path","babel","MagicString"],"mappings":"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","file":"index.cjs","sourcesContent":["import vm from \"node:vm\";\nimport v8 from \"node:v8\";\n\n// Set V8 flags for eager compilation - MUST be done before any scripts are compiled\n// These flags ensure that all functions are compiled immediately, not lazily\n// This is CRITICAL for bytecode caching to work properly\ntry {\n v8.setFlagsFromString(\"--no-lazy\");\n v8.setFlagsFromString(\"--no-flush-bytecode\");\n} catch (e) {\n // Flags may already be set or not supported in this V8 version\n console.warn(\"Warning: Could not set V8 flags for bytecode compilation:\", e);\n}\n\n/**\n * Wraps code in CommonJS module wrapper format\n * This is required for bytecode to work properly with the loader\n */\nfunction wrapInModuleWrapper(code: string): string {\n return `(function (exports, require, module, __filename, __dirname) { ${code}\\n});`;\n}\n\n/**\n * Compiles JavaScript code to V8 bytecode using Node.js's vm.Script API\n */\nexport function compileToBytecode(code: string): Buffer {\n // Wrap the code in CommonJS module format\n const wrappedCode = wrapInModuleWrapper(code);\n \n // Create a script with cached data generation enabled\n const script = new vm.Script(wrappedCode, {\n produceCachedData: true,\n });\n\n if (!script.cachedData) {\n throw new Error(\"Failed to generate bytecode: cachedData is undefined\");\n }\n\n const bytecode = script.cachedData;\n\n // Set the flag hash header for compatibility\n setFlagHashHeader(bytecode);\n\n return bytecode;\n}\n\n// Cache the dummy bytecode for flag hash\nlet dummyBytecode: Buffer | undefined;\n\n/**\n * Sets the flag hash header in the bytecode buffer for compatibility\n * This ensures the bytecode can be loaded correctly by different V8 versions\n */\nfunction setFlagHashHeader(bytecodeBuffer: Buffer): void {\n const FLAG_HASH_OFFSET = 12;\n\n if (!dummyBytecode) {\n // Create a dummy script to get the current flag hash\n const script = new vm.Script(\"\", {\n produceCachedData: true,\n });\n dummyBytecode = script.cachedData;\n }\n\n if (dummyBytecode && dummyBytecode.length > FLAG_HASH_OFFSET + 4) {\n // Copy the flag hash from dummy bytecode to the target bytecode\n dummyBytecode\n .subarray(FLAG_HASH_OFFSET, FLAG_HASH_OFFSET + 4)\n .copy(bytecodeBuffer, FLAG_HASH_OFFSET);\n }\n}\n\n/**\n * Gets the source hash header from bytecode buffer\n * Used to determine the dummy code length needed for loading\n */\nexport function getSourceHashHeader(bytecodeBuffer: Buffer): Buffer {\n const SOURCE_HASH_OFFSET = 8;\n return bytecodeBuffer.subarray(SOURCE_HASH_OFFSET, SOURCE_HASH_OFFSET + 4);\n}\n\n/**\n * Converts a 4-byte buffer to a number (little-endian)\n */\nexport function buffer2Number(buffer: Buffer): number {\n let ret = 0;\n ret |= buffer[3] << 24;\n ret |= buffer[2] << 16;\n ret |= buffer[1] << 8;\n ret |= buffer[0];\n return ret;\n}\n","/**\n * Generates the bytecode loader code that will be injected into the bundle\n * This loader registers handlers for .jsc and .cjsc file extensions\n */\nexport function getBytecodeLoaderCode(): string {\n return (\n [\n `\"use strict\";`,\n `const fs = require(\"fs\");`,\n `const path = require(\"path\");`,\n `const vm = require(\"vm\");`,\n `const v8 = require(\"v8\");`,\n `const Module = require(\"module\");`,\n `v8.setFlagsFromString(\"--no-lazy\");`,\n `v8.setFlagsFromString(\"--no-flush-bytecode\");`,\n `const FLAG_HASH_OFFSET = 12;`,\n `const SOURCE_HASH_OFFSET = 8;`,\n `let dummyBytecode;`,\n `function setFlagHashHeader(bytecodeBuffer) {`,\n ` if (!dummyBytecode) {`,\n ` const script = new vm.Script(\"\", {`,\n ` produceCachedData: true`,\n ` });`,\n ` dummyBytecode = script.cachedData;`,\n ` }`,\n ` dummyBytecode.slice(FLAG_HASH_OFFSET, FLAG_HASH_OFFSET + 4).copy(bytecodeBuffer, FLAG_HASH_OFFSET);`,\n `};`,\n `function getSourceHashHeader(bytecodeBuffer) {`,\n ` return bytecodeBuffer.slice(SOURCE_HASH_OFFSET, SOURCE_HASH_OFFSET + 4);`,\n `};`,\n `function buffer2Number(buffer) {`,\n ` let ret = 0;`,\n ` ret |= buffer[3] << 24;`,\n ` ret |= buffer[2] << 16;`,\n ` ret |= buffer[1] << 8;`,\n ` ret |= buffer[0];`,\n ` return ret;`,\n `};`,\n `Module._extensions[\".jsc\"] = Module._extensions[\".cjsc\"] = function (module, filename) {`,\n ` const bytecodeBuffer = fs.readFileSync(filename);`,\n ` if (!Buffer.isBuffer(bytecodeBuffer)) {`,\n ` throw new Error(\"BytecodeBuffer must be a buffer object.\");`,\n ` }`,\n ` setFlagHashHeader(bytecodeBuffer);`,\n ` const length = buffer2Number(getSourceHashHeader(bytecodeBuffer));`,\n ` let dummyCode = \"\";`,\n ` if (length > 1) {`,\n ` dummyCode = \"\\\\\"\" + \"\\\\u200b\".repeat(length - 2) + \"\\\\\"\";`,\n ` }`,\n ` const script = new vm.Script(dummyCode, {`,\n ` filename: filename,`,\n ` lineOffset: 0,`,\n ` displayErrors: true,`,\n ` cachedData: bytecodeBuffer`,\n ` });`,\n ` if (script.cachedDataRejected) {`,\n ` throw new Error(\"Invalid or incompatible cached data (cachedDataRejected)\");`,\n ` }`,\n ` const require = function (id) {`,\n ` return module.require(id);`,\n ` };`,\n ` require.resolve = function (request, options) {`,\n ` return Module._resolveFilename(request, module, false, options);`,\n ` };`,\n ` if (process.mainModule) {`,\n ` require.main = process.mainModule;`,\n ` }`,\n ` require.extensions = Module._extensions;`,\n ` require.cache = Module._cache;`,\n ` const compiledWrapper = script.runInThisContext({`,\n ` filename: filename,`,\n ` lineOffset: 0,`,\n ` columnOffset: 0,`,\n ` displayErrors: true`,\n ` });`,\n ` const dirname = path.dirname(filename);`,\n ` const args = [module.exports, require, module, filename, dirname, process, global];`,\n ` return compiledWrapper.apply(module.exports, args);`,\n `};`,\n ].join(\"\\n\") + \"\\n\"\n );\n}\n","import * as babel from \"@babel/core\";\nimport type { PluginObj, PluginPass } from \"@babel/core\";\nimport type { SourceMapInput } from \"rollup\";\n\ninterface ProtectStringsPluginState extends PluginPass {\n opts: { protectedStrings: Set<string> };\n}\n\n/**\n * Babel plugin that protects specific strings by converting them to String.fromCharCode calls\n * This adds an extra layer of obfuscation on top of bytecode compilation\n */\nfunction protectStringsPlugin(\n api: typeof babel\n): PluginObj<ProtectStringsPluginState> {\n const { types: t } = api;\n\n function createFromCharCodeFunction(\n value: string\n ): babel.types.CallExpression {\n const charCodes = Array.from(value).map((s) => s.charCodeAt(0));\n const charCodeLiterals = charCodes.map((code) => t.numericLiteral(code));\n\n // String.fromCharCode\n const memberExpression = t.memberExpression(\n t.identifier(\"String\"),\n t.identifier(\"fromCharCode\")\n );\n // String.fromCharCode(...arr)\n const callExpression = t.callExpression(memberExpression, [\n t.spreadElement(t.identifier(\"arr\")),\n ]);\n // return String.fromCharCode(...arr)\n const returnStatement = t.returnStatement(callExpression);\n // function (arr) { return ... }\n const functionExpression = t.functionExpression(\n null,\n [t.identifier(\"arr\")],\n t.blockStatement([returnStatement])\n );\n\n // (function(...) { ... })([x, x, x])\n return t.callExpression(functionExpression, [\n t.arrayExpression(charCodeLiterals),\n ]);\n }\n\n return {\n name: \"protect-strings-plugin\",\n visitor: {\n StringLiteral(path, state) {\n // Skip obj['property']\n if (\n path.parentPath.isMemberExpression({\n property: path.node,\n computed: true,\n })\n ) {\n return;\n }\n\n // Skip { 'key': value }\n if (\n path.parentPath.isObjectProperty({ key: path.node, computed: false })\n ) {\n return;\n }\n\n // Skip require('fs')\n if (\n path.parentPath.isCallExpression() &&\n t.isIdentifier(path.parentPath.node.callee) &&\n path.parentPath.node.callee.name === \"require\" &&\n path.parentPath.node.arguments[0] === path.node\n ) {\n return;\n }\n\n // Only CommonJS is supported for Node.js 22+, import/export checks are ignored\n\n const { value } = path.node;\n if (state.opts.protectedStrings.has(value)) {\n path.replaceWith(createFromCharCodeFunction(value));\n }\n },\n TemplateLiteral(path, state) {\n // Must be a pure static template literal\n // expressions must be empty (no ${variables})\n // quasis must have only one element (meaning the entire string is a single static part)\n if (path.node.expressions.length > 0 || path.node.quasis.length !== 1) {\n return;\n }\n\n // Extract the cooked value of the template literal\n const value = path.node.quasis[0].value.cooked;\n if (value && state.opts.protectedStrings.has(value)) {\n path.replaceWith(createFromCharCodeFunction(value));\n }\n },\n },\n };\n}\n\n/**\n * Babel plugin that converts template literals to string concatenation\n * This is REQUIRED for V8 bytecode compatibility - template literals don't work in cached bytecode\n */\nfunction templateLiteralToConcatPlugin(api: typeof babel): PluginObj {\n const { types: t } = api;\n\n return {\n name: \"template-literal-to-concat\",\n visitor: {\n TemplateLiteral(path) {\n const { quasis, expressions } = path.node;\n\n // Build string concatenation\n let result: babel.types.Expression | null = null;\n\n for (let i = 0; i < quasis.length; i++) {\n const quasi = quasis[i];\n const expr = expressions[i];\n\n // Add the template string part\n if (quasi.value.cooked) {\n const stringLiteral = t.stringLiteral(quasi.value.cooked);\n result = result\n ? t.binaryExpression(\"+\", result, stringLiteral)\n : stringLiteral;\n }\n\n // Add the expression part (if exists)\n // Template literal expressions are always Expression type, not TSType\n if (expr && t.isExpression(expr)) {\n result = result ? t.binaryExpression(\"+\", result, expr) : expr;\n }\n }\n\n // Replace with concatenated result or empty string\n if (result) {\n path.replaceWith(result);\n } else {\n path.replaceWith(t.stringLiteral(\"\"));\n }\n },\n },\n };\n}\n\n/**\n * Transforms code using Babel with template literal conversion and optional string protection\n * Template literal conversion is ALWAYS applied for bytecode compatibility\n */\nexport function transformCode(\n code: string,\n protectedStrings: string[],\n sourceMaps: boolean = false\n): { code: string; map?: SourceMapInput } | null {\n const plugins: babel.PluginItem[] = [\n // ALWAYS convert template literals for bytecode compatibility\n templateLiteralToConcatPlugin,\n ];\n\n // Add string protection if needed\n if (protectedStrings.length > 0) {\n plugins.push([\n protectStringsPlugin,\n { protectedStrings: new Set(protectedStrings) },\n ]);\n }\n\n const result = babel.transformSync(code, {\n plugins,\n sourceMaps,\n configFile: false,\n babelrc: false,\n });\n\n return result\n ? { code: result.code || \"\", map: result.map || undefined }\n : null;\n}\n","import path from \"node:path\";\nimport type { LibraryOptions } from \"vite\";\nimport type { OutputOptions } from \"rollup\";\n\n/**\n * Converts an absolute path to a relative path for require() statements\n */\nexport function toRelativePath(from: string, to: string): string {\n const relativePath = path.relative(path.dirname(to), from);\n // Ensure the path starts with ./ or ../\n return relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n}\n\n/**\n * Resolves build outputs considering library options\n */\nexport function resolveBuildOutputs(\n outputs: OutputOptions | OutputOptions[] | undefined,\n libOptions: LibraryOptions | false\n): OutputOptions | OutputOptions[] | undefined {\n if (libOptions && !Array.isArray(outputs)) {\n const libFormats = libOptions.formats || [];\n return libFormats.map((format) => ({ ...outputs, format }));\n }\n return outputs;\n}\n\n/**\n * Detects if code is using ES modules or CommonJS\n */\nexport function detectModuleFormat(code: string): \"esm\" | \"cjs\" {\n // Simple heuristic: check for import/export statements\n const esmPattern = /\\b(import|export)\\s+/;\n return esmPattern.test(code) ? \"esm\" : \"cjs\";\n}\n\n/**\n * Wraps ES module code in a CommonJS wrapper\n * This allows ES modules to work with the bytecode loader\n */\nexport function wrapESModuleAsCommonJS(code: string): string {\n // For ES modules, we need to wrap them in a CommonJS-compatible format\n // This is a simplified approach - for production use, you might want a more robust solution\n return `(function(exports, require, module, __filename, __dirname) {\n'use strict';\n${code}\n})`;\n}\n\n/**\n * Normalizes path separators to forward slashes\n */\nexport function normalizePath(p: string): string {\n return p.replace(/\\\\/g, \"/\");\n}\n","import path from \"node:path\";\nimport type { Plugin, Logger } from \"vite\";\nimport MagicString from \"magic-string\";\nimport type { SourceMapInput, OutputChunk } from \"rollup\";\nimport { compileToBytecode } from \"./compiler\";\nimport { getBytecodeLoaderCode } from \"./loader\";\nimport { transformCode } from \"./transforms\";\nimport { toRelativePath, resolveBuildOutputs, normalizePath } from \"./utils\";\n\nconst bytecodeChunkExtensionRE = /\\.(jsc|cjsc)$/;\n\nexport interface BytecodeOptions {\n /**\n * Specify which chunks to compile to bytecode.\n * If not specified or empty array, all chunks will be compiled.\n */\n chunkAlias?: string | string[];\n\n /**\n * Whether to remove the original .js files after compilation.\n * @default true\n */\n removeBundleJS?: boolean;\n\n /**\n * Array of strings to protect by obfuscating them with String.fromCharCode.\n * Useful for sensitive strings like API keys.\n * @default []\n */\n protectedStrings?: string[];\n}\n\n/**\n * Vite plugin to compile JavaScript to V8 bytecode for Node.js and Electron\n *\n * @example\n * ```ts\n * import { bytecodePlugin } from 'vite-plugin-v8-bytecode'\n *\n * export default {\n * plugins: [\n * bytecodePlugin({\n * chunkAlias: ['index'],\n * protectedStrings: ['MY_API_KEY'],\n * removeBundleJS: true\n * })\n * ]\n * }\n * ```\n */\nexport function bytecodePlugin(options: BytecodeOptions = {}): Plugin | null {\n // Only run in production builds\n if (process.env.NODE_ENV !== \"production\") {\n return null;\n }\n\n const {\n chunkAlias = [],\n removeBundleJS = true,\n protectedStrings = [],\n } = options;\n const _chunkAlias = Array.isArray(chunkAlias) ? chunkAlias : [chunkAlias];\n\n const transformAllChunks = _chunkAlias.length === 0;\n const isBytecodeChunk = (chunkName: string): boolean => {\n return (\n transformAllChunks || _chunkAlias.some((alias) => alias === chunkName)\n );\n };\n\n const useStrict = '\"use strict\";';\n const bytecodeModuleLoader = \"bytecode-loader.cjs\";\n\n let logger: Logger;\n let supported = false;\n\n return {\n name: \"vite:bytecode\",\n apply: \"build\",\n enforce: \"post\",\n\n configResolved(config): void {\n if (supported) {\n return;\n }\n\n logger = config.logger;\n\n // Check if used in renderer (not supported)\n const useInRenderer = config.plugins.some(\n (p) => p.name === \"vite:electron-renderer-preset-config\"\n );\n if (useInRenderer) {\n config.logger.warn(\"bytecodePlugin does not support renderer.\");\n return;\n }\n\n const build = config.build;\n const resolvedOutputs = resolveBuildOutputs(\n build.rollupOptions.output,\n build.lib\n );\n\n if (resolvedOutputs) {\n const outputs = Array.isArray(resolvedOutputs)\n ? resolvedOutputs\n : [resolvedOutputs];\n const output = outputs[0];\n\n if (output.format === \"es\") {\n config.logger.warn(\n \"bytecodePlugin does not support ES module output format. \" +\n 'Please set \"build.rollupOptions.output.format\" to \"cjs\".'\n );\n }\n\n supported = output.format === \"cjs\" && !useInRenderer;\n }\n },\n\n renderChunk(\n code,\n chunk,\n { sourcemap }\n ): { code: string; map?: SourceMapInput } | null {\n // ALWAYS transform bytecode chunks to convert template literals\n // Template literals don't work in V8 cached bytecode\n if (supported && isBytecodeChunk(chunk.name)) {\n return transformCode(code, protectedStrings, !!sourcemap);\n }\n return null;\n },\n\n async generateBundle(_, output): Promise<void> {\n if (!supported) {\n return;\n }\n\n const _chunks = Object.values(output);\n const chunks = _chunks.filter(\n (chunk) => chunk.type === \"chunk\" && isBytecodeChunk(chunk.name)\n ) as OutputChunk[];\n\n if (chunks.length === 0) {\n return;\n }\n\n const bytecodeChunks = chunks.map((chunk) => chunk.fileName);\n const nonEntryChunks = chunks\n .filter((chunk) => !chunk.isEntry)\n .map((chunk) => path.basename(chunk.fileName));\n\n // Create regex to match require() calls for non-entry chunks\n const pattern = nonEntryChunks.map((chunk) => `(${chunk})`).join(\"|\");\n const bytecodeRE = pattern\n ? new RegExp(`require\\\\(\\\\S*(?=(${pattern})\\\\S*\\\\))`, \"g\")\n : null;\n\n const getBytecodeLoaderBlock = (chunkFileName: string): string => {\n return `require(\"${toRelativePath(\n bytecodeModuleLoader,\n normalizePath(chunkFileName)\n )}\");`;\n };\n\n let bytecodeChunkCount = 0;\n\n const bundles = Object.keys(output);\n\n await Promise.all(\n bundles.map(async (name) => {\n const chunk = output[name];\n if (chunk.type === \"chunk\") {\n let _code = chunk.code;\n\n // Update require() calls to point to .jsc files\n if (bytecodeRE) {\n let match: RegExpExecArray | null;\n let s: MagicString | undefined;\n while ((match = bytecodeRE.exec(_code))) {\n s ||= new MagicString(_code);\n const [prefix, chunkName] = match;\n const len = prefix.length + chunkName.length;\n s.overwrite(\n match.index,\n match.index + len,\n prefix + chunkName + \"c\",\n {\n contentOnly: true,\n }\n );\n }\n if (s) {\n _code = s.toString();\n }\n }\n\n if (bytecodeChunks.includes(name)) {\n // Compile this chunk to bytecode\n const bytecodeBuffer = await compileToBytecode(_code);\n\n this.emitFile({\n type: \"asset\",\n fileName: name + \"c\",\n source: bytecodeBuffer,\n });\n\n if (!removeBundleJS) {\n // Keep original JS file with underscore prefix\n this.emitFile({\n type: \"asset\",\n fileName: \"_\" + chunk.fileName,\n source: chunk.code,\n });\n }\n\n if (chunk.isEntry) {\n // For entry chunks, replace with loader code\n const bytecodeLoaderBlock = getBytecodeLoaderBlock(\n chunk.fileName\n );\n const bytecodeModuleBlock = `require(\"./${\n path.basename(name) + \"c\"\n }\");`;\n const code = `${useStrict}\\n${bytecodeLoaderBlock}\\n${bytecodeModuleBlock}\\n`;\n chunk.code = code;\n } else {\n // For non-entry chunks, remove the original chunk\n delete output[chunk.fileName];\n }\n\n bytecodeChunkCount += 1;\n } else {\n // This chunk is not being compiled to bytecode, but may import bytecode chunks\n if (chunk.isEntry) {\n let hasBytecodeModule = false;\n const idsToHandle = new Set([\n ...chunk.imports,\n ...chunk.dynamicImports,\n ]);\n\n for (const moduleId of idsToHandle) {\n if (bytecodeChunks.includes(moduleId)) {\n hasBytecodeModule = true;\n break;\n }\n const moduleInfo = this.getModuleInfo(moduleId);\n if (moduleInfo && !moduleInfo.isExternal) {\n const { importers, dynamicImporters } = moduleInfo;\n for (const importerId of importers)\n idsToHandle.add(importerId);\n for (const importerId of dynamicImporters)\n idsToHandle.add(importerId);\n }\n }\n\n _code = hasBytecodeModule\n ? _code.replace(\n /(\"use strict\";)|('use strict';)/,\n `${useStrict}\\n${getBytecodeLoaderBlock(chunk.fileName)}`\n )\n : _code;\n }\n chunk.code = _code;\n }\n }\n })\n );\n\n // Emit bytecode loader if we compiled any chunks\n if (\n bytecodeChunkCount &&\n !_chunks.some(\n (ass) => ass.type === \"asset\" && ass.fileName === bytecodeModuleLoader\n )\n ) {\n this.emitFile({\n type: \"asset\",\n source: getBytecodeLoaderCode(),\n name: \"Bytecode Loader File\",\n fileName: bytecodeModuleLoader,\n });\n }\n },\n\n writeBundle(_, output): void {\n if (supported) {\n const bytecodeChunkCount = Object.keys(output).filter((chunk) =>\n bytecodeChunkExtensionRE.test(chunk)\n ).length;\n logger.info(`✓ ${bytecodeChunkCount} chunks compiled into bytecode.`);\n }\n },\n };\n}\n\n// Export types\nexport type { Plugin };\n"]}