blob: c5dd8967272f9185da85965a97bc11d4f9f1809b [file]
/*
* Copyright 2026 WebAssembly Community Group participants
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Utilities for dealing with Wasm modules embedded as literal byte arrays in JS
// files, e.g '[0x00, 0x61, 0x73, 0x6d, ...]'. Handles different number formats
// and comments as long as each value fits in byte range. Looks for the Wasm
// magic bytes at the beginning of the array, but otherwise does not check that
// the bytes encode a valid Wasm module.
#ifndef wasm_support_js_embedded_module_h
#define wasm_support_js_embedded_module_h
#include <cstddef>
#include <string>
#include <string_view>
#include <vector>
namespace wasm {
struct EmbeddedModule {
// Index of '[' in the JS source string.
size_t start;
// Index immediately after ']' in the JS source string.
size_t end;
// Decoded binary Wasm module bytes.
std::vector<char> bytes;
bool operator==(const EmbeddedModule& other) const {
return start == other.start && end == other.end && bytes == other.bytes;
}
};
// Scans JavaScript source code `js` and returns all embedded byte array
// literals (`[...]`) whose initial bytes match the WebAssembly magic header
// (`0x00, 0x61, 0x73, 0x6d`).
std::vector<EmbeddedModule> findEmbeddedModules(std::string_view js);
// Formats a binary WebAssembly byte buffer as a JavaScript hex byte array
// literal (`[\n 0x00, 0x61, 0x73, 0x6d, ...\n]`).
std::string formatByteArray(const std::vector<char>& bytes);
} // namespace wasm
#endif // wasm_support_js_embedded_module_h