1 // Copyright 2021 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef INCLUDE_V8_EXTENSION_H_
6 #define INCLUDE_V8_EXTENSION_H_
7 
8 #include <memory>
9 
10 #include "v8-local-handle.h"  // NOLINT(build/include_directory)
11 #include "v8-primitive.h"     // NOLINT(build/include_directory)
12 #include "v8config.h"         // NOLINT(build/include_directory)
13 
14 namespace v8 {
15 
16 class FunctionTemplate;
17 
18 // --- Extensions ---
19 
20 /**
21  * Ignore
22  */
23 class V8_EXPORT Extension {
24  public:
25   // Note that the strings passed into this constructor must live as long
26   // as the Extension itself.
27   Extension(const char* name, const char* source = nullptr, int dep_count = 0,
28             const char** deps = nullptr, int source_length = -1);
~Extension()29   virtual ~Extension() { delete source_; }
GetNativeFunctionTemplate(Isolate * isolate,Local<String> name)30   virtual Local<FunctionTemplate> GetNativeFunctionTemplate(
31       Isolate* isolate, Local<String> name) {
32     return Local<FunctionTemplate>();
33   }
34 
name()35   const char* name() const { return name_; }
source_length()36   size_t source_length() const { return source_length_; }
source()37   const String::ExternalOneByteStringResource* source() const {
38     return source_;
39   }
dependency_count()40   int dependency_count() const { return dep_count_; }
dependencies()41   const char** dependencies() const { return deps_; }
set_auto_enable(bool value)42   void set_auto_enable(bool value) { auto_enable_ = value; }
auto_enable()43   bool auto_enable() { return auto_enable_; }
44 
45   // Disallow copying and assigning.
46   Extension(const Extension&) = delete;
47   void operator=(const Extension&) = delete;
48 
49  private:
50   const char* name_;
51   size_t source_length_;  // expected to initialize before source_
52   String::ExternalOneByteStringResource* source_;
53   int dep_count_;
54   const char** deps_;
55   bool auto_enable_;
56 };
57 
58 void V8_EXPORT RegisterExtension(std::unique_ptr<Extension>);
59 
60 }  // namespace v8
61 
62 #endif  // INCLUDE_V8_EXTENSION_H_
63