diff --git a/node_modules/.cache/.eslintcache b/node_modules/.cache/.eslintcache
index 22c426af..2a1461cc 100644
--- a/node_modules/.cache/.eslintcache
+++ b/node_modules/.cache/.eslintcache
@@ -1 +1 @@
-[{"/home/seanedmunds/dev/home-page/src/index.js":"1"},{"size":28146,"mtime":1639781676049,"results":"2","hashOfConfig":"3"},{"filePath":"4","messages":"5","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},"ikqo75","/home/seanedmunds/dev/home-page/src/index.js",["6","7","8","9"],{"ruleId":"10","severity":1,"message":"11","line":4,"column":40,"nodeType":"12","messageId":"13","endLine":4,"endColumn":49},{"ruleId":"10","severity":1,"message":"14","line":166,"column":10,"nodeType":"12","messageId":"13","endLine":166,"endColumn":19},{"ruleId":"15","severity":1,"message":"16","line":183,"column":11,"nodeType":"17","endLine":183,"endColumn":61},{"ruleId":"18","severity":1,"message":"19","line":894,"column":1,"nodeType":"20","messageId":"21","endLine":897,"endColumn":2},"no-unused-vars","'matchPath' is defined but never used.","Identifier","unusedVar","'ModalMenu' is defined but never used.","jsx-a11y/anchor-is-valid","The href attribute requires a valid value to be accessible. Provide a valid, navigable address as the href value. If you cannot provide a valid href, but still need the element to resemble a link, use a button and change it with appropriate styles. Learn more: https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/anchor-is-valid.md","JSXOpeningElement","no-extend-native","String prototype is read only, properties should not be added.","AssignmentExpression","unexpected"]
\ No newline at end of file
+[{"/home/magnum/home-page/src/index.js":"1"},{"size":28146,"mtime":1639793677541,"results":"2","hashOfConfig":"3"},{"filePath":"4","messages":"5","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"6"},"t76b41","/home/magnum/home-page/src/index.js",["7","8","9","10"],"import React from 'react';\nimport { useState, useEffect } from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter, Routes, Route, matchPath } from \"react-router-dom\";\nimport { Outlet, Link } from \"react-router-dom\";\nimport './index.css';\n\nconst setValueFromLocalStorage = property => {\n let value = localStorage.getItem(property);\n setValue(property, value);\n};\nconst setValue = (property, value) => {\n if (value) {\n document.documentElement.style.setProperty(`--${property}`, value);\n\n const input = document.querySelector(`#${property}`);\n if (input) {\n value = value.replace('px', '');\n input.value = value;\n }\n }\n};\n\nfunction App() {\n return (\n \n );\n}\n\nfunction Homepage() {\n setTheme();\n \n return (\n \n
-
-## Licence & copyright
-
-Copyright (c) 2018 NAN WG Members / Collaborators (listed above).
-
-Native Abstractions for Node.js is licensed under an MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details.
diff --git a/node_modules/nan/doc/asyncworker.md b/node_modules/nan/doc/asyncworker.md
deleted file mode 100644
index 04231f83..00000000
--- a/node_modules/nan/doc/asyncworker.md
+++ /dev/null
@@ -1,146 +0,0 @@
-## Asynchronous work helpers
-
-`Nan::AsyncWorker`, `Nan::AsyncProgressWorker` and `Nan::AsyncProgressQueueWorker` are helper classes that make working with asynchronous code easier.
-
- - Nan::AsyncWorker
- - Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker
- - Nan::AsyncProgressQueueWorker
- - Nan::AsyncQueueWorker
-
-
-### Nan::AsyncWorker
-
-`Nan::AsyncWorker` is an _abstract_ class that you can subclass to have much of the annoying asynchronous queuing and handling taken care of for you. It can even store arbitrary V8 objects for you and have them persist while the asynchronous work is in progress.
-
-This class internally handles the details of creating an [`AsyncResource`][AsyncResource], and running the callback in the
-correct async context. To be able to identify the async resources created by this class in async-hooks, provide a
-`resource_name` to the constructor. It is recommended that the module name be used as a prefix to the `resource_name` to avoid
-collisions in the names. For more details see [`AsyncResource`][AsyncResource] documentation. The `resource_name` needs to stay valid for the lifetime of the worker instance.
-
-Definition:
-
-```c++
-class AsyncWorker {
- public:
- explicit AsyncWorker(Callback *callback_, const char* resource_name = "nan:AsyncWorker");
-
- virtual ~AsyncWorker();
-
- virtual void WorkComplete();
-
- void SaveToPersistent(const char *key, const v8::Local &value);
-
- void SaveToPersistent(const v8::Local &key,
- const v8::Local &value);
-
- void SaveToPersistent(uint32_t index,
- const v8::Local &value);
-
- v8::Local GetFromPersistent(const char *key) const;
-
- v8::Local GetFromPersistent(const v8::Local &key) const;
-
- v8::Local GetFromPersistent(uint32_t index) const;
-
- virtual void Execute() = 0;
-
- uv_work_t request;
-
- virtual void Destroy();
-
- protected:
- Persistent persistentHandle;
-
- Callback *callback;
-
- virtual void HandleOKCallback();
-
- virtual void HandleErrorCallback();
-
- void SetErrorMessage(const char *msg);
-
- const char* ErrorMessage();
-};
-```
-
-
-### Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker
-
-`Nan::AsyncProgressWorkerBase` is an _abstract_ class template that extends `Nan::AsyncWorker` and adds additional progress reporting callbacks that can be used during the asynchronous work execution to provide progress data back to JavaScript.
-
-Previously the definition of `Nan::AsyncProgressWorker` only allowed sending `const char` data. Now extending `Nan::AsyncProgressWorker` will yield an instance of the implicit `Nan::AsyncProgressWorkerBase` template with type `` for compatibility.
-
-`Nan::AsyncProgressWorkerBase` & `Nan::AsyncProgressWorker` is intended for best-effort delivery of nonessential progress messages, e.g. a progress bar. The last event sent before the main thread is woken will be delivered.
-
-Definition:
-
-```c++
-template
-class AsyncProgressWorkerBase : public AsyncWorker {
- public:
- explicit AsyncProgressWorkerBase(Callback *callback_, const char* resource_name = ...);
-
- virtual ~AsyncProgressWorkerBase();
-
- void WorkProgress();
-
- class ExecutionProgress {
- public:
- void Signal() const;
- void Send(const T* data, size_t count) const;
- };
-
- virtual void Execute(const ExecutionProgress& progress) = 0;
-
- virtual void HandleProgressCallback(const T *data, size_t count) = 0;
-
- virtual void Destroy();
-};
-
-typedef AsyncProgressWorkerBase AsyncProgressWorker;
-```
-
-
-### Nan::AsyncProgressQueueWorker
-
-`Nan::AsyncProgressQueueWorker` is an _abstract_ class template that extends `Nan::AsyncWorker` and adds additional progress reporting callbacks that can be used during the asynchronous work execution to provide progress data back to JavaScript.
-
-`Nan::AsyncProgressQueueWorker` behaves exactly the same as `Nan::AsyncProgressWorker`, except all events are queued and delivered to the main thread.
-
-Definition:
-
-```c++
-template
-class AsyncProgressQueueWorker : public AsyncWorker {
- public:
- explicit AsyncProgressQueueWorker(Callback *callback_, const char* resource_name = "nan:AsyncProgressQueueWorker");
-
- virtual ~AsyncProgressQueueWorker();
-
- void WorkProgress();
-
- class ExecutionProgress {
- public:
- void Send(const T* data, size_t count) const;
- };
-
- virtual void Execute(const ExecutionProgress& progress) = 0;
-
- virtual void HandleProgressCallback(const T *data, size_t count) = 0;
-
- virtual void Destroy();
-};
-```
-
-
-### Nan::AsyncQueueWorker
-
-`Nan::AsyncQueueWorker` will run a `Nan::AsyncWorker` asynchronously via libuv. Both the `execute` and `after_work` steps are taken care of for you. Most of the logic for this is embedded in `Nan::AsyncWorker`.
-
-Definition:
-
-```c++
-void AsyncQueueWorker(AsyncWorker *);
-```
-
-[AsyncResource]: node_misc.md#api_nan_asyncresource
diff --git a/node_modules/nan/doc/buffers.md b/node_modules/nan/doc/buffers.md
deleted file mode 100644
index 8d8d25cf..00000000
--- a/node_modules/nan/doc/buffers.md
+++ /dev/null
@@ -1,54 +0,0 @@
-## Buffers
-
-NAN's `node::Buffer` helpers exist as the API has changed across supported Node versions. Use these methods to ensure compatibility.
-
- - Nan::NewBuffer()
- - Nan::CopyBuffer()
- - Nan::FreeCallback()
-
-
-### Nan::NewBuffer()
-
-Allocate a new `node::Buffer` object with the specified size and optional data. Calls `node::Buffer::New()`.
-
-Note that when creating a `Buffer` using `Nan::NewBuffer()` and an existing `char*`, it is assumed that the ownership of the pointer is being transferred to the new `Buffer` for management.
-When a `node::Buffer` instance is garbage collected and a `FreeCallback` has not been specified, `data` will be disposed of via a call to `free()`.
-You _must not_ free the memory space manually once you have created a `Buffer` in this way.
-
-Signature:
-
-```c++
-Nan::MaybeLocal Nan::NewBuffer(uint32_t size)
-Nan::MaybeLocal Nan::NewBuffer(char* data, uint32_t size)
-Nan::MaybeLocal Nan::NewBuffer(char *data,
- size_t length,
- Nan::FreeCallback callback,
- void *hint)
-```
-
-
-
-### Nan::CopyBuffer()
-
-Similar to [`Nan::NewBuffer()`](#api_nan_new_buffer) except that an implicit memcpy will occur within Node. Calls `node::Buffer::Copy()`.
-
-Management of the `char*` is left to the user, you should manually free the memory space if necessary as the new `Buffer` will have its own copy.
-
-Signature:
-
-```c++
-Nan::MaybeLocal Nan::CopyBuffer(const char *data, uint32_t size)
-```
-
-
-
-### Nan::FreeCallback()
-
-A free callback that can be provided to [`Nan::NewBuffer()`](#api_nan_new_buffer).
-The supplied callback will be invoked when the `Buffer` undergoes garbage collection.
-
-Signature:
-
-```c++
-typedef void (*FreeCallback)(char *data, void *hint);
-```
diff --git a/node_modules/nan/doc/callback.md b/node_modules/nan/doc/callback.md
deleted file mode 100644
index f7af0bfd..00000000
--- a/node_modules/nan/doc/callback.md
+++ /dev/null
@@ -1,76 +0,0 @@
-## Nan::Callback
-
-`Nan::Callback` makes it easier to use `v8::Function` handles as callbacks. A class that wraps a `v8::Function` handle, protecting it from garbage collection and making it particularly useful for storage and use across asynchronous execution.
-
- - Nan::Callback
-
-
-### Nan::Callback
-
-```c++
-class Callback {
- public:
- Callback();
-
- explicit Callback(const v8::Local &fn);
-
- ~Callback();
-
- bool operator==(const Callback &other) const;
-
- bool operator!=(const Callback &other) const;
-
- v8::Local operator*() const;
-
- MaybeLocal operator()(AsyncResource* async_resource,
- v8::Local target,
- int argc = 0,
- v8::Local argv[] = 0) const;
-
- MaybeLocal operator()(AsyncResource* async_resource,
- int argc = 0,
- v8::Local argv[] = 0) const;
-
- void SetFunction(const v8::Local &fn);
-
- v8::Local GetFunction() const;
-
- bool IsEmpty() const;
-
- void Reset(const v8::Local &fn);
-
- void Reset();
-
- MaybeLocal Call(v8::Local target,
- int argc,
- v8::Local argv[],
- AsyncResource* async_resource) const;
- MaybeLocal Call(int argc,
- v8::Local argv[],
- AsyncResource* async_resource) const;
-
- // Deprecated versions. Use the versions that accept an async_resource instead
- // as they run the callback in the correct async context as specified by the
- // resource. If you want to call a synchronous JS function (i.e. on a
- // non-empty JS stack), you can use Nan::Call instead.
- v8::Local operator()(v8::Local target,
- int argc = 0,
- v8::Local argv[] = 0) const;
-
- v8::Local operator()(int argc = 0,
- v8::Local argv[] = 0) const;
- v8::Local Call(v8::Local target,
- int argc,
- v8::Local argv[]) const;
-
- v8::Local Call(int argc, v8::Local argv[]) const;
-};
-```
-
-Example usage:
-
-```c++
-v8::Local function;
-Nan::Callback callback(function);
-callback.Call(0, 0);
-```
diff --git a/node_modules/nan/doc/converters.md b/node_modules/nan/doc/converters.md
deleted file mode 100644
index d20861b5..00000000
--- a/node_modules/nan/doc/converters.md
+++ /dev/null
@@ -1,41 +0,0 @@
-## Converters
-
-NAN contains functions that convert `v8::Value`s to other `v8::Value` types and native types. Since type conversion is not guaranteed to succeed, they return `Nan::Maybe` types. These converters can be used in place of `value->ToX()` and `value->XValue()` (where `X` is one of the types, e.g. `Boolean`) in a way that provides a consistent interface across V8 versions. Newer versions of V8 use the new `v8::Maybe` and `v8::MaybeLocal` types for these conversions, older versions don't have this functionality so it is provided by NAN.
-
- - Nan::To()
-
-
-### Nan::To()
-
-Converts a `v8::Local` to a different subtype of `v8::Value` or to a native data type. Returns a `Nan::MaybeLocal<>` or a `Nan::Maybe<>` accordingly.
-
-See [maybe_types.md](./maybe_types.md) for more information on `Nan::Maybe` types.
-
-Signatures:
-
-```c++
-// V8 types
-Nan::MaybeLocal Nan::To(v8::Local val);
-Nan::MaybeLocal Nan::To(v8::Local val);
-Nan::MaybeLocal Nan::To(v8::Local val);
-Nan::MaybeLocal Nan::To(v8::Local val);
-Nan::MaybeLocal Nan::To(v8::Local val);
-Nan::MaybeLocal Nan::To(v8::Local val);
-Nan::MaybeLocal Nan::To(v8::Local val);
-
-// Native types
-Nan::Maybe Nan::To(v8::Local val);
-Nan::Maybe Nan::To(v8::Local val);
-Nan::Maybe Nan::To(v8::Local val);
-Nan::Maybe Nan::To(v8::Local val);
-Nan::Maybe Nan::To(v8::Local val);
-```
-
-### Example
-
-```c++
-v8::Local val;
-Nan::MaybeLocal str = Nan::To(val);
-Nan::Maybe d = Nan::To(val);
-```
-
diff --git a/node_modules/nan/doc/errors.md b/node_modules/nan/doc/errors.md
deleted file mode 100644
index 843435b2..00000000
--- a/node_modules/nan/doc/errors.md
+++ /dev/null
@@ -1,226 +0,0 @@
-## Errors
-
-NAN includes helpers for creating, throwing and catching Errors as much of this functionality varies across the supported versions of V8 and must be abstracted.
-
-Note that an Error object is simply a specialized form of `v8::Value`.
-
-Also consult the V8 Embedders Guide section on [Exceptions](https://developers.google.com/v8/embed#exceptions) for more information.
-
- - Nan::Error()
- - Nan::RangeError()
- - Nan::ReferenceError()
- - Nan::SyntaxError()
- - Nan::TypeError()
- - Nan::ThrowError()
- - Nan::ThrowRangeError()
- - Nan::ThrowReferenceError()
- - Nan::ThrowSyntaxError()
- - Nan::ThrowTypeError()
- - Nan::FatalException()
- - Nan::ErrnoException()
- - Nan::TryCatch
-
-
-
-### Nan::Error()
-
-Create a new Error object using the [v8::Exception](https://v8docs.nodesource.com/node-8.16/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8.
-
-Note that an Error object is simply a specialized form of `v8::Value`.
-
-Signature:
-
-```c++
-v8::Local Nan::Error(const char *msg);
-v8::Local Nan::Error(v8::Local msg);
-```
-
-
-
-### Nan::RangeError()
-
-Create a new RangeError object using the [v8::Exception](https://v8docs.nodesource.com/node-8.16/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8.
-
-Note that an RangeError object is simply a specialized form of `v8::Value`.
-
-Signature:
-
-```c++
-v8::Local Nan::RangeError(const char *msg);
-v8::Local Nan::RangeError(v8::Local msg);
-```
-
-
-
-### Nan::ReferenceError()
-
-Create a new ReferenceError object using the [v8::Exception](https://v8docs.nodesource.com/node-8.16/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8.
-
-Note that an ReferenceError object is simply a specialized form of `v8::Value`.
-
-Signature:
-
-```c++
-v8::Local Nan::ReferenceError(const char *msg);
-v8::Local Nan::ReferenceError(v8::Local msg);
-```
-
-
-
-### Nan::SyntaxError()
-
-Create a new SyntaxError object using the [v8::Exception](https://v8docs.nodesource.com/node-8.16/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8.
-
-Note that an SyntaxError object is simply a specialized form of `v8::Value`.
-
-Signature:
-
-```c++
-v8::Local Nan::SyntaxError(const char *msg);
-v8::Local Nan::SyntaxError(v8::Local msg);
-```
-
-
-
-### Nan::TypeError()
-
-Create a new TypeError object using the [v8::Exception](https://v8docs.nodesource.com/node-8.16/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8.
-
-Note that an TypeError object is simply a specialized form of `v8::Value`.
-
-Signature:
-
-```c++
-v8::Local Nan::TypeError(const char *msg);
-v8::Local Nan::TypeError(v8::Local msg);
-```
-
-
-
-### Nan::ThrowError()
-
-Throw an Error object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new Error object will be created.
-
-Signature:
-
-```c++
-void Nan::ThrowError(const char *msg);
-void Nan::ThrowError(v8::Local msg);
-void Nan::ThrowError(v8::Local error);
-```
-
-
-
-### Nan::ThrowRangeError()
-
-Throw an RangeError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new RangeError object will be created.
-
-Signature:
-
-```c++
-void Nan::ThrowRangeError(const char *msg);
-void Nan::ThrowRangeError(v8::Local msg);
-void Nan::ThrowRangeError(v8::Local error);
-```
-
-
-
-### Nan::ThrowReferenceError()
-
-Throw an ReferenceError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new ReferenceError object will be created.
-
-Signature:
-
-```c++
-void Nan::ThrowReferenceError(const char *msg);
-void Nan::ThrowReferenceError(v8::Local msg);
-void Nan::ThrowReferenceError(v8::Local error);
-```
-
-
-
-### Nan::ThrowSyntaxError()
-
-Throw an SyntaxError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new SyntaxError object will be created.
-
-Signature:
-
-```c++
-void Nan::ThrowSyntaxError(const char *msg);
-void Nan::ThrowSyntaxError(v8::Local msg);
-void Nan::ThrowSyntaxError(v8::Local error);
-```
-
-
-
-### Nan::ThrowTypeError()
-
-Throw an TypeError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new TypeError object will be created.
-
-Signature:
-
-```c++
-void Nan::ThrowTypeError(const char *msg);
-void Nan::ThrowTypeError(v8::Local msg);
-void Nan::ThrowTypeError(v8::Local error);
-```
-
-
-### Nan::FatalException()
-
-Replaces `node::FatalException()` which has a different API across supported versions of Node. For use with [`Nan::TryCatch`](#api_nan_try_catch).
-
-Signature:
-
-```c++
-void Nan::FatalException(const Nan::TryCatch& try_catch);
-```
-
-
-### Nan::ErrnoException()
-
-Replaces `node::ErrnoException()` which has a different API across supported versions of Node.
-
-Signature:
-
-```c++
-v8::Local Nan::ErrnoException(int errorno,
- const char* syscall = NULL,
- const char* message = NULL,
- const char* path = NULL);
-```
-
-
-
-### Nan::TryCatch
-
-A simple wrapper around [`v8::TryCatch`](https://v8docs.nodesource.com/node-8.16/d4/dc6/classv8_1_1_try_catch.html) compatible with all supported versions of V8. Can be used as a direct replacement in most cases. See also [`Nan::FatalException()`](#api_nan_fatal_exception) for an internal use compatible with `node::FatalException`.
-
-Signature:
-
-```c++
-class Nan::TryCatch {
- public:
- Nan::TryCatch();
-
- bool HasCaught() const;
-
- bool CanContinue() const;
-
- v8::Local ReThrow();
-
- v8::Local Exception() const;
-
- // Nan::MaybeLocal for older versions of V8
- v8::MaybeLocal StackTrace() const;
-
- v8::Local Message() const;
-
- void Reset();
-
- void SetVerbose(bool value);
-
- void SetCaptureMessage(bool value);
-};
-```
-
diff --git a/node_modules/nan/doc/json.md b/node_modules/nan/doc/json.md
deleted file mode 100644
index 55beb262..00000000
--- a/node_modules/nan/doc/json.md
+++ /dev/null
@@ -1,62 +0,0 @@
-## JSON
-
-The _JSON_ object provides the C++ versions of the methods offered by the `JSON` object in javascript. V8 exposes these methods via the `v8::JSON` object.
-
- - Nan::JSON.Parse
- - Nan::JSON.Stringify
-
-Refer to the V8 JSON object in the [V8 documentation](https://v8docs.nodesource.com/node-8.16/da/d6f/classv8_1_1_j_s_o_n.html) for more information about these methods and their arguments.
-
-
-
-### Nan::JSON.Parse
-
-A simple wrapper around [`v8::JSON::Parse`](https://v8docs.nodesource.com/node-8.16/da/d6f/classv8_1_1_j_s_o_n.html#a936310d2540fb630ed37d3ee3ffe4504).
-
-Definition:
-
-```c++
-Nan::MaybeLocal Nan::JSON::Parse(v8::Local json_string);
-```
-
-Use `JSON.Parse(json_string)` to parse a string into a `v8::Value`.
-
-Example:
-
-```c++
-v8::Local json_string = Nan::New("{ \"JSON\": \"object\" }").ToLocalChecked();
-
-Nan::JSON NanJSON;
-Nan::MaybeLocal result = NanJSON.Parse(json_string);
-if (!result.IsEmpty()) {
- v8::Local val = result.ToLocalChecked();
-}
-```
-
-
-
-### Nan::JSON.Stringify
-
-A simple wrapper around [`v8::JSON::Stringify`](https://v8docs.nodesource.com/node-8.16/da/d6f/classv8_1_1_j_s_o_n.html#a44b255c3531489ce43f6110209138860).
-
-Definition:
-
-```c++
-Nan::MaybeLocal Nan::JSON::Stringify(v8::Local json_object, v8::Local gap = v8::Local());
-```
-
-Use `JSON.Stringify(value)` to stringify a `v8::Object`.
-
-Example:
-
-```c++
-// using `v8::Local val` from the `JSON::Parse` example
-v8::Local obj = Nan::To(val).ToLocalChecked();
-
-Nan::JSON NanJSON;
-Nan::MaybeLocal result = NanJSON.Stringify(obj);
-if (!result.IsEmpty()) {
- v8::Local stringified = result.ToLocalChecked();
-}
-```
-
diff --git a/node_modules/nan/doc/maybe_types.md b/node_modules/nan/doc/maybe_types.md
deleted file mode 100644
index 142851a1..00000000
--- a/node_modules/nan/doc/maybe_types.md
+++ /dev/null
@@ -1,583 +0,0 @@
-## Maybe Types
-
-The `Nan::MaybeLocal` and `Nan::Maybe` types are monads that encapsulate `v8::Local` handles that _may be empty_.
-
-* **Maybe Types**
- - Nan::MaybeLocal
- - Nan::Maybe
- - Nan::Nothing
- - Nan::Just
-* **Maybe Helpers**
- - Nan::Call()
- - Nan::ToDetailString()
- - Nan::ToArrayIndex()
- - Nan::Equals()
- - Nan::NewInstance()
- - Nan::GetFunction()
- - Nan::Set()
- - Nan::DefineOwnProperty()
- - Nan::ForceSet()
- - Nan::Get()
- - Nan::GetPropertyAttributes()
- - Nan::Has()
- - Nan::Delete()
- - Nan::GetPropertyNames()
- - Nan::GetOwnPropertyNames()
- - Nan::SetPrototype()
- - Nan::ObjectProtoToString()
- - Nan::HasOwnProperty()
- - Nan::HasRealNamedProperty()
- - Nan::HasRealIndexedProperty()
- - Nan::HasRealNamedCallbackProperty()
- - Nan::GetRealNamedPropertyInPrototypeChain()
- - Nan::GetRealNamedProperty()
- - Nan::CallAsFunction()
- - Nan::CallAsConstructor()
- - Nan::GetSourceLine()
- - Nan::GetLineNumber()
- - Nan::GetStartColumn()
- - Nan::GetEndColumn()
- - Nan::CloneElementAt()
- - Nan::HasPrivate()
- - Nan::GetPrivate()
- - Nan::SetPrivate()
- - Nan::DeletePrivate()
- - Nan::MakeMaybe()
-
-
-### Nan::MaybeLocal
-
-A `Nan::MaybeLocal` is a wrapper around [`v8::Local`](https://v8docs.nodesource.com/node-8.16/de/deb/classv8_1_1_local.html) that enforces a check that determines whether the `v8::Local` is empty before it can be used.
-
-If an API method returns a `Nan::MaybeLocal`, the API method can potentially fail either because an exception is thrown, or because an exception is pending, e.g. because a previous API call threw an exception that hasn't been caught yet, or because a `v8::TerminateExecution` exception was thrown. In that case, an empty `Nan::MaybeLocal` is returned.
-
-Definition:
-
-```c++
-template class Nan::MaybeLocal {
- public:
- MaybeLocal();
-
- template MaybeLocal(v8::Local that);
-
- bool IsEmpty() const;
-
- template bool ToLocal(v8::Local *out);
-
- // Will crash if the MaybeLocal<> is empty.
- v8::Local ToLocalChecked();
-
- template v8::Local FromMaybe(v8::Local default_value) const;
-};
-```
-
-See the documentation for [`v8::MaybeLocal`](https://v8docs.nodesource.com/node-8.16/d8/d7d/classv8_1_1_maybe_local.html) for further details.
-
-
-### Nan::Maybe
-
-A simple `Nan::Maybe` type, representing an object which may or may not have a value, see https://hackage.haskell.org/package/base/docs/Data-Maybe.html.
-
-If an API method returns a `Nan::Maybe<>`, the API method can potentially fail either because an exception is thrown, or because an exception is pending, e.g. because a previous API call threw an exception that hasn't been caught yet, or because a `v8::TerminateExecution` exception was thrown. In that case, a "Nothing" value is returned.
-
-Definition:
-
-```c++
-template class Nan::Maybe {
- public:
- bool IsNothing() const;
- bool IsJust() const;
-
- // Will crash if the Maybe<> is nothing.
- T FromJust();
-
- T FromMaybe(const T& default_value);
-
- bool operator==(const Maybe &other);
-
- bool operator!=(const Maybe &other);
-};
-```
-
-See the documentation for [`v8::Maybe`](https://v8docs.nodesource.com/node-8.16/d9/d4b/classv8_1_1_maybe.html) for further details.
-
-
-### Nan::Nothing
-
-Construct an empty `Nan::Maybe` type representing _nothing_.
-
-```c++
-template Nan::Maybe Nan::Nothing();
-```
-
-
-### Nan::Just
-
-Construct a `Nan::Maybe` type representing _just_ a value.
-
-```c++
-template Nan::Maybe Nan::Just(const T &t);
-```
-
-
-### Nan::Call()
-
-A helper method for calling a synchronous [`v8::Function#Call()`](https://v8docs.nodesource.com/node-8.16/d5/d54/classv8_1_1_function.html#a9c3d0e4e13ddd7721fce238aa5b94a11) in a way compatible across supported versions of V8.
-
-For asynchronous callbacks, use Nan::Callback::Call along with an AsyncResource.
-
-Signature:
-
-```c++
-Nan::MaybeLocal Nan::Call(v8::Local fun, v8::Local recv, int argc, v8::Local argv[]);
-Nan::MaybeLocal Nan::Call(const Nan::Callback& callback, v8::Local recv,
- int argc, v8::Local argv[]);
-Nan::MaybeLocal Nan::Call(const Nan::Callback& callback, int argc, v8::Local argv[]);
-```
-
-
-
-### Nan::ToDetailString()
-
-A helper method for calling [`v8::Value#ToDetailString()`](https://v8docs.nodesource.com/node-8.16/dc/d0a/classv8_1_1_value.html#a2f9770296dc2c8d274bc8cc0dca243e5) in a way compatible across supported versions of V8.
-
-Signature:
-
-```c++
-Nan::MaybeLocal Nan::ToDetailString(v8::Local val);
-```
-
-
-
-### Nan::ToArrayIndex()
-
-A helper method for calling [`v8::Value#ToArrayIndex()`](https://v8docs.nodesource.com/node-8.16/dc/d0a/classv8_1_1_value.html#acc5bbef3c805ec458470c0fcd6f13493) in a way compatible across supported versions of V8.
-
-Signature:
-
-```c++
-Nan::MaybeLocal Nan::ToArrayIndex(v8::Local val);
-```
-
-
-
-### Nan::Equals()
-
-A helper method for calling [`v8::Value#Equals()`](https://v8docs.nodesource.com/node-8.16/dc/d0a/classv8_1_1_value.html#a08fba1d776a59bbf6864b25f9152c64b) in a way compatible across supported versions of V8.
-
-Signature:
-
-```c++
-Nan::Maybe Nan::Equals(v8::Local a, v8::Local(b));
-```
-
-
-
-### Nan::NewInstance()
-
-A helper method for calling [`v8::Function#NewInstance()`](https://v8docs.nodesource.com/node-8.16/d5/d54/classv8_1_1_function.html#ae477558b10c14b76ed00e8dbab44ce5b) and [`v8::ObjectTemplate#NewInstance()`](https://v8docs.nodesource.com/node-8.16/db/d5f/classv8_1_1_object_template.html#ad605a7543cfbc5dab54cdb0883d14ae4) in a way compatible across supported versions of V8.
-
-Signature:
-
-```c++
-Nan::MaybeLocal Nan::NewInstance(v8::Local h);
-Nan::MaybeLocal Nan::NewInstance(v8::Local h, int argc, v8::Local argv[]);
-Nan::MaybeLocal Nan::NewInstance(v8::Local h);
-```
-
-
-
-### Nan::GetFunction()
-
-A helper method for calling [`v8::FunctionTemplate#GetFunction()`](https://v8docs.nodesource.com/node-8.16/d8/d83/classv8_1_1_function_template.html#a56d904662a86eca78da37d9bb0ed3705) in a way compatible across supported versions of V8.
-
-Signature:
-
-```c++
-Nan::MaybeLocal Nan::GetFunction(v8::Local t);
-```
-
-
-
-### Nan::Set()
-
-A helper method for calling [`v8::Object#Set()`](https://v8docs.nodesource.com/node-8.16/db/d85/classv8_1_1_object.html#a67604ea3734f170c66026064ea808f20) in a way compatible across supported versions of V8.
-
-Signature:
-
-```c++
-Nan::Maybe Nan::Set(v8::Local obj,
- v8::Local key,
- v8::Local value)
-Nan::Maybe Nan::Set(v8::Local obj,
- uint32_t index,
- v8::Local value);
-```
-
-
-
-### Nan::DefineOwnProperty()
-
-A helper method for calling [`v8::Object#DefineOwnProperty()`](https://v8docs.nodesource.com/node-8.16/db/d85/classv8_1_1_object.html#a6f76b2ed605cb8f9185b92de0033a820) in a way compatible across supported versions of V8.
-
-Signature:
-
-```c++
-Nan::Maybe Nan::DefineOwnProperty(v8::Local obj,
- v8::Local key,
- v8::Local value,
- v8::PropertyAttribute attribs = v8::None);
-```
-
-
-
-### Nan::ForceSet()
-
-Deprecated, use Nan::DefineOwnProperty().
-
-A helper method for calling [`v8::Object#ForceSet()`](https://v8docs.nodesource.com/node-0.12/db/d85/classv8_1_1_object.html#acfbdfd7427b516ebdb5c47c4df5ed96c) in a way compatible across supported versions of V8.
-
-Signature:
-
-```c++
-NAN_DEPRECATED Nan::Maybe Nan::ForceSet(v8::Local obj,
- v8::Local key,
- v8::Local value,
- v8::PropertyAttribute attribs = v8::None);
-```
-
-
-
-### Nan::Get()
-
-A helper method for calling [`v8::Object#Get()`](https://v8docs.nodesource.com/node-8.16/db/d85/classv8_1_1_object.html#a2565f03e736694f6b1e1cf22a0b4eac2) in a way compatible across supported versions of V8.
-
-Signature:
-
-```c++
-Nan::MaybeLocal Nan::Get(v8::Local obj,
- v8::Local key);
-Nan::MaybeLocal Nan::Get(v8::Local obj, uint32_t index);
-```
-
-
-
-### Nan::GetPropertyAttributes()
-
-A helper method for calling [`v8::Object#GetPropertyAttributes()`](https://v8docs.nodesource.com/node-8.16/db/d85/classv8_1_1_object.html#a9b898894da3d1db2714fd9325a54fe57) in a way compatible across supported versions of V8.
-
-Signature:
-
-```c++
-Nan::Maybe Nan::GetPropertyAttributes(
- v8::Local obj,
- v8::Local key);
-```
-
-
-
-### Nan::Has()
-
-A helper method for calling [`v8::Object#Has()`](https://v8docs.nodesource.com/node-8.16/db/d85/classv8_1_1_object.html#ab3c3d89ea7c2f9afd08965bd7299a41d) in a way compatible across supported versions of V8.
-
-Signature:
-
-```c++
-Nan::Maybe Nan::Has(v8::Local obj, v8::Local key);
-Nan::Maybe Nan::Has(v8::Local obj, uint32_t index);
-```
-
-
-