Skip to content
File

Blob: src/workerd/api/base64.h

cpp48 lines
1#pragma once
2 
3#include <workerd/jsg/jsg.h>
4#include <workerd/jsg/modules-new.h>
5#include <workerd/jsg/url.h>
6 
7namespace workerd::api {
8 
9class Base64Module final: public jsg::Object {
10 public:
11 Base64Module() = default;
12 Base64Module(jsg::Lock&, const jsg::Url&) {}
13 
14 jsg::JsBufferSource decodeArray(jsg::Lock& js, jsg::JsBufferSource source);
15 jsg::JsBufferSource encodeArray(jsg::Lock& js, jsg::JsBufferSource source);
16 jsg::JsString encodeArrayToString(jsg::Lock&, jsg::JsBufferSource source);
17 
18 JSG_RESOURCE_TYPE(Base64Module) {
19 JSG_METHOD(encodeArray);
20 JSG_METHOD(decodeArray);
21 JSG_METHOD(encodeArrayToString);
22 JSG_TS_OVERRIDE({
23 decodeArray(source: ArrayBuffer | ArrayBufferView): ArrayBuffer;
24 encodeArray(source: ArrayBuffer | ArrayBufferView): ArrayBuffer;
25 encodeArrayToString(source: ArrayBuffer | ArrayBufferView): string;
26 });
27 }
28};
29 
30template <class Registry>
31void registerBase64Module(Registry& registry, auto featureFlags) {
32 registry.template addBuiltinModule<Base64Module>(
33 "cloudflare-internal:base64", workerd::jsg::ModuleRegistry::Type::INTERNAL);
34}
35 
36template <typename TypeWrapper>
37kj::Own<jsg::modules::ModuleBundle> getInternalBase64ModuleBundle(auto featureFlags) {
38 jsg::modules::ModuleBundle::BuiltinBuilder builder(
39 jsg::modules::ModuleBundle::BuiltinBuilder::Type::BUILTIN_ONLY);
40 static const auto kSpecifier = "cloudflare-internal:base64"_url;
41 builder.addObject<Base64Module, TypeWrapper>(kSpecifier);
42 return builder.finish();
43}
44 
45#define EW_BASE64_ISOLATE_TYPES api::Base64Module
46 
47} // namespace workerd::api