diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md
index 606d781..a346e38 100644
--- a/docs/src/SUMMARY.md
+++ b/docs/src/SUMMARY.md
@@ -1,9 +1,9 @@
# Summary
- [Introduction](./introduction.md)
-- [Mutations](./mutations/index.md)
+- [@graphprotocol/mutations](./mutations/index.md)
- [User Guide](./mutations/user-guide.md)
- [API Reference](./mutations/api.md)
-- [Mutations (Apollo & React)](./mutations-apollo-react/index.md)
+- [@graphprotocol/mutations-apollo-react](./mutations-apollo-react/index.md)
- [User Guide](./mutations-apollo-react/user-guide.md)
- [API Reference](./mutations-apollo-react/api.md)
diff --git a/docs/src/introduction.md b/docs/src/introduction.md
index e10b99d..67374e6 100644
--- a/docs/src/introduction.md
+++ b/docs/src/introduction.md
@@ -1 +1,2 @@
# Introduction
+For a complete overview on how to add mutations to a subgraph, please read more [here](https://thegraph.com/docs/mutations).
diff --git a/docs/src/mutations-apollo-react/api.md b/docs/src/mutations-apollo-react/api.md
index b0d5c88..bb4458c 100644
--- a/docs/src/mutations-apollo-react/api.md
+++ b/docs/src/mutations-apollo-react/api.md
@@ -1 +1,33 @@
# API Reference
+
+## function `createMutationsLink(...)`
+
+| Argument | Type | Description |
+|----------|:-------------:|:------|
+| `options` | **`{ mutations: Mutations }`** | Mutations object that was returned from `createMutations(...)` |
+
+| Return Type | Description |
+|-------------|-------------|
+| **`ApolloLink`** | Apollo link that executes `mutation` queries using the `mutations`' resolvers |
+
+## function `useMutation(...)`
+
+Wrapper around Apollo's `useMutation(...)` React hook. Native Apollo's `useMutation(...)` hook full reference can be found [here](https://www.apollographql.com/docs/react/api/react-hooks/#options-2). The only difference is that this wrapper returns an additional `state` value alongside `data`:
+
+```typescript
+const [exec, { data, state }] = useMutation(MY_MUTATION)
+
+state.myMutation.progress
+```
+
+## React.Component `Mutation`
+
+Wrapper around Apollo's `Mutation` JSX React Component. Native Apollo's `Mutation` Component full reference can be found [here](https://www.apollographql.com/docs/react/api/react-components/#mutation). The only difference is that this wrapper returns an additional `state` value alongside `data`:
+
+```html
+
+ {(exec, { data, state }) => (
+ ...
+ )}
+
+```
diff --git a/docs/src/mutations-apollo-react/index.md b/docs/src/mutations-apollo-react/index.md
index babcd08..ce99b69 100644
--- a/docs/src/mutations-apollo-react/index.md
+++ b/docs/src/mutations-apollo-react/index.md
@@ -1 +1,2 @@
-# Mutations (Apollo & React)
+# @graphprotocol/mutations-apollo-react
+Utility wrappers around commonly used Apollo & React functions, hooks, and components.
\ No newline at end of file
diff --git a/docs/src/mutations-apollo-react/user-guide.md b/docs/src/mutations-apollo-react/user-guide.md
index cd3d452..6a11eca 100644
--- a/docs/src/mutations-apollo-react/user-guide.md
+++ b/docs/src/mutations-apollo-react/user-guide.md
@@ -1 +1,163 @@
# User Guide
+
+## Creating an Apollo Link & Client
+
+For ease of use, we'll create an Apollo Client that can be used inside of a React application to easily integrate our mutation queries with our UI.
+First, we must wrap our `mutations` instance with an Apollo Link:
+```ts
+import { createMutationsLink } from `@graphprotocol/mutations`
+
+const mutationLink = createMutationsLink({ mutations })
+```
+
+And use the link within an Apollo Client. We'll first create a "root" link that splits our `query` and `mutation` queries. This way our data queries will be sent to the subgraph, and our mutation queries will be sent to our local resolvers:
+
+```tsx
+import { createHttpLink } from 'apollo-link-http'
+import { split } from 'apollo-link'
+import ApolloClient from 'apollo-client'
+import { InMemoryCache } from 'apollo-cache-inmemory'
+
+const queryLink = createHttpLink({ uri: `http://localhost:8080/subgraphs/name/example` })
+
+// Combine (split) the query & mutation links
+const link = split(
+ ({ query }) => {
+ const node = getMainDefinition(query)
+ return node.kind === "OperationDefinition" && node.operation === "mutation"
+ },
+ mutationLink,
+ queryLink
+)
+
+// Create the Apollo Client
+const client = new ApolloClient({
+ link,
+ cache: new InMemoryCache()
+})
+```
+
+At this point, you have a fully functional ApolloClient that can be used to send `query` and `mutation` queries, the same way you would within a web2 GraphQL application.
+
+## `useMutation(...)` hook
+
+Developers can just import `useMutation` from the `@graphprotocol/mutations-apollo-react` package, and consuming the state object can be done like so:
+
+```ts
+import { useMutation } from '@graphprotocol/mutations-apollo-react'
+
+const MY_MUTATION = gql`
+ mutation MyMutation() {
+ myMutation
+ }
+`;
+
+const Component = () => {
+ const [exec, { data, loading, state }] = useMutation(MY_MUTATION)
+
+ return (
+ {loading ?
+
state.myMutation.progress
:
+ data.myMutation
+ }
+ )
+}
+```
+
+In order to access extended state properties, we can templatize the state object using the `State` interface we exported from the mutations module:
+```ts
+import { Mutation } from '@graphprotocol/mutations-apollo-react'
+import { MutationState } from '@graphprotocol/mutations'
+import { State } from 'my-mutations'
+
+const MY_MUTATION = gql`
+ mutation MyMutation() {
+ myMutation
+ }
+`;
+
+const Component = () => {
+ const [exec, { data, loading, state }] = useMutation(MY_MUTATION)
+
+ return (
+ {loading ?
+ state.myMutation.myValue
:
+ data.myMutation
+ }
+ )
+}
+```
+
+## Mutation component
+
+Developers can just import `Mutation` component from the 'mutations-apollo-react' package, and consuming the state object can be done like so:
+
+```ts
+import { Mutation } from '@graphprotocol/mutations-apollo-react'
+
+const MY_MUTATION = gql`
+ mutation MyMutation() {
+ myMutation
+ }
+`;
+
+const Component = () => {
+ return (
+
+ {(exec, { data, loading, state }) => (
+ ...
+ )}
+
+ )
+}
+```
+
+In order to access extended state properties, we can templatize the state object using the `State` interface we exported from the mutations module:
+```ts
+import { Mutation } from '@graphprotocol/mutations-apollo-react'
+import { MutationState } from '@graphprotocol/mutations'
+import { State } from 'my-mutations'
+
+const MY_MUTATION = gql`
+ mutation MyMutation() {
+ myMutation
+ }
+`;
+
+const Component = () => {
+
+ return (
+
+ {(exec, { data, loading, state: MutationState }) => (
+ ...
+ )}
+
+ )
+}
+```
+
+## Additional notes
+
+The `state` object gets refreshed every time the component re-renders, and any updates received by it will also trigger a component re-render. The state's structure is an object where each of its keys is the name of a mutation called in the mutation query. Each key has a `MutationState` object as value. In the case the same mutation is called more than once in the same mutation query, then each duplicated state key will be renamed to ${mutationName}_${n} where n is a consecutive number that corresponds to the nth time the mutation was called. For example:
+```ts
+const MY_MUTATION_TWICE = gql`
+ mutation MyMutation() {
+ myMutation
+ myMutation
+ }
+`;
+
+const Component = () => {
+ const [exec, { data, loading, state }] = useMutation(MY_MUTATION_TWICE)
+
+ return (
+ {loading ?
+ <>
+ state.myMutation.myValue
+ state.myMutation_1.myValue
+ > :
+ data.myMutation
+ }
+ )
+}
+```
diff --git a/docs/src/mutations/api.md b/docs/src/mutations/api.md
index b0d5c88..6a1482d 100644
--- a/docs/src/mutations/api.md
+++ b/docs/src/mutations/api.md
@@ -1 +1,68 @@
# API Reference
+
+## function `createMutations(...)`
+
+| Argument | Type | Description |
+|------------|:--------------:|:-------------|
+| `options` | **`CreateMutationsOptions`** | Options |
+
+| Return Type | Description |
+|-------------|-------------|
+| **`Mutations`** | Mutations that can be executed & re-configured |
+
+## interface **`CreateMutationsOptions`**
+
+| Property | Type | Description |
+|----------|:--------------:|:-------------|
+| `mutations` | **`MutationsModule`** | Mutations module |
+| `subgraph` | **`string`** | Name of the subgraph |
+| `node` | **`string`** | URL of a graph-node |
+| `config` | **`ConfigArguments`** | All configuration arguments required by the `mutations` module |
+| (optional) `mutationExecutor` | **`MutationExecutor`** | Function that will execute the mutations being queried |
+| (optional) `queryExecutor` | **`QueryExecutor`** | Function that will execute any query requests coming from the mutation resolvers |
+
+## interface **`Mutations`**
+
+| Method | Arguments | Return Type | Description |
+|--------|-----------|-------------|-------------|
+| `execute` | `query: `**`MutationQuery`** | **`Promise`** | Execute a GraphQL mutation query |
+| `configure` | `config: `**`ConfigArguments`** | **`Promise`** | Re-configure the mutations module |
+
+## interface **`MutationQuery`**
+| Property | Type | Description |
+|----------|------|-------------|
+| `query` | **`DocumentNode`** | GraphQL DocumentNode |
+| (optional) `variables` | **`Record`** | Variables to pass into the mutation resolver |
+| (optional) `extensions` | **`Record`** | GraphQL type system extensions |
+| (optional) `stateSubject` | **`MutationStatesSubject`** | Mutation state observer (rxjs Subject) |
+
+| Method | Arguments | Return Type | Description |
+|--------|-----------|-------------|-------------|
+| `setContext` | `context: `**`any`** | **`any`** | Set the context, and return the updated context |
+| `getContext` | | **`any`** | Get the context |
+
+## interface **`MutationResult`**
+
+Equivalent to GraphQL's [**`ExecutionResult`**](https://graphql.org/graphql-js/execution/)
+
+## function type **`MutationExecutor`**
+
+| Argument | Type | Description |
+|----------|------|-------------|
+| `query` | **`MutationQuery`** | A GraphQL mutation query |
+| `schema` | **`GraphQLSchema`** | A built GraphQL schema |
+
+| Return Type | Description |
+|-------------|-------------|
+| **`Promise`** | The result of the mutation |
+
+## function type **`QueryExecutor`**
+
+| Argument | Type | Description |
+|----------|------|-------------|
+| `query` | **`Query`** | A GraphQL query |
+| `uri` | **`string`** | GraphQL server URI |
+
+| Return Type | Description |
+|-------------|-------------|
+| **`Promise`** | The result of the query |
diff --git a/docs/src/mutations/index.md b/docs/src/mutations/index.md
index 030abf0..a6e215b 100644
--- a/docs/src/mutations/index.md
+++ b/docs/src/mutations/index.md
@@ -1 +1,8 @@
-# Mutations
+# @graphprotocol/mutations
+Javascript API used within mutation modules & dApps. This API includes functions, classes, and interfaces to support:
+ * Mutation Resolvers
+ * Mutation Context
+ * Mutation State
+ * Mutation Configuration
+ * Instantiation
+ * Executing
diff --git a/docs/src/mutations/user-guide.md b/docs/src/mutations/user-guide.md
index cd3d452..d5a12bc 100644
--- a/docs/src/mutations/user-guide.md
+++ b/docs/src/mutations/user-guide.md
@@ -1 +1,299 @@
# User Guide
+
+# dApp Developer
+## Instantiating The `Mutations` Module
+
+In order to use the mutations module, we must first instantiate it using `createMutations`:
+```ts
+import exampleMutations from 'example-mutations'
+import { createMutations } from '@graphprotocol/mutations'
+
+const mutations = createMutations({
+ mutations: exampleMutations,
+ subgraph: "example",
+ node: "http://localhost:8080",
+ config: {
+ // Configuration arguments can be defined as values,
+ // or functions that return values
+ ethereum: async () => {
+ const { ethereum } = window
+
+ if (!ethereum) {
+ throw Error("Please install metamask")
+ }
+
+ await ethereum.enable()
+ return window.web3.currentProvider
+ },
+ ipfs: "http://localhost:5001"
+ }
+})
+```
+
+## Execute Mutations
+`NOTE: If you're using Apollo Client, please see the @graphprotocol/mutations-apollo-react docs.`
+
+Once the mutations are instantiated with `createMutations(...)`, we can now call the `execute(...)` method to execute a mutation like so:
+```typescript
+import gql from 'graphql-tag'
+
+let context = { }
+
+const { data } = await mutations.execute({
+ query: gql`
+ mutation Example($var: String!) {
+ example(var: $var)
+ }
+ `,
+ setContext: (newContext: any) => {
+ context = newContext
+ return context
+ },
+ getContext: () => context
+})
+
+console.log(data.example) // example's return value
+```
+
+## Get Mutation State Updates
+If the mutations module dispatches state updates, you can subscribe to them like so:
+```typescript
+import {
+ MutationStatesSubject,
+ MutationStates
+} from '@graphprotocol/mutations'
+
+// Custom mutation state (optional)
+import { State, EventMap } from 'example-mutations`
+
+const subject = new MutationStatesSubject({ })
+
+// Called every time there's a state update
+subject.subscribe((state: MutationStates) => {
+ // All state values can be accessed like so:
+ state.example.progress
+
+ // Including any custom state variables defined
+ // in 'example-mutations'
+ state.example.customValue
+})
+
+let context = { }
+
+const { data } = await mutations.execute({
+ query: gql`
+ mutation Example($var: String!) {
+ example(var: $var)
+ }
+ `,
+ stateSubject: subject,
+ setContext: (newContext: any) => {
+ context = newContext
+ return context
+ },
+ getContext: () => context
+})
+```
+
+## Re-Configure Mutations Module
+If you'd like to re-configure the mutations module, you can do so like so:
+```typescript
+await mutations.configure({
+ ethereum: ...,
+ ipfs: "..."
+})
+```
+
+# Subgraph Developer
+For more in-depth information on how to add mutations to your subgraph's project, please read more [here](https://thegraph.com/docs/mutations). In the following sections we'll only cover the parts that involve the `@graphprotocol/mutations` API.
+
+## Implement Mutation Resolvers
+```typescript
+import {
+ MutationContext,
+ MutationResolvers
+} from '@graphprotocol/mutations'
+
+// Define Config (see sections below)
+...
+
+// Define Custom State (see sections below)
+...
+
+type Context = MutationContext
+
+const resolvers: MutationResolvers = {
+ Mutation: {
+ example: (_: any, variables: any, context: Context) => {
+ const { var } = variables
+ ...
+ }
+ }
+}
+
+// Ensure the resolvers are exported
+// as apart of the default export
+export default {
+ resolvers,
+ ...
+}
+```
+
+## Mutation Module Configuration
+```typescript
+import { AsyncSendable, Web3Provider } from 'ethers/providers'
+import ipfsHttpClient from 'ipfs-http-client'
+
+const config = {
+ ethereum: (provider: AsyncSendable): Web3Provider => {
+ return new Web3Provider(provider)
+ },
+ ipfs: (endpoint: string) => {
+ return ipfsHttpClient(endpoint)
+ },
+}
+
+type Config = typeof config
+
+...
+
+// Ensure the config is exported
+// as part of the default export
+export default {
+ ...
+ config,
+ ...
+}
+
+// Additionally, we export the config's type
+export { Config }
+```
+
+## Mutation State
+```typescript
+import {
+ EventPayload,
+ MutationState,
+ StateBuilder,
+} from '@graphprotocol/mutations'
+
+interface State {
+ customValue: string
+}
+
+interface CustomEvent extends EventPayload {
+ value: string
+}
+
+type EventMap = {
+ CUSTOM_EVENT: CustomEvent
+}
+
+const stateBuilder: StateBuilder = {
+ getInitialState(): State {
+ return {
+ customValue: ''
+ }
+ },
+ reducers: {
+ CUSTOM_EVENT: async (state: MutationState, payload: CustomEvent) => {
+ return {
+ customValue: payload.value
+ }
+ }
+ }
+}
+
+...
+
+// Ensure the stateBuilder is exported
+// as part of the default export
+export default {
+ ...
+ stateBuilder
+}
+
+// Additionally, we export the state & event map types,
+// along with all custom event types
+export { State, EventMap, CustomEvent }
+```
+
+## All Together
+Putting all the pieces together:
+```typescript
+import {
+ EventPayload,
+ MutationContext,
+ MutationResolvers,
+ MutationState,
+ StateBuilder
+} from '@graphprotocol/mutations'
+
+import {
+ AsyncSendable,
+ Web3Provider
+} from 'ethers/providers'
+import ipfsHttpClient from 'ipfs-http-client'
+
+interface State {
+ customValue: string
+}
+
+interface CustomEvent extends EventPayload {
+ value: string
+}
+
+type EventMap = {
+ CUSTOM_EVENT: CustomEvent
+}
+
+const stateBuilder: StateBuilder = {
+ getInitialState(): State {
+ return {
+ customValue: ''
+ }
+ },
+ reducers: {
+ CUSTOM_EVENT: async (state: MutationState, payload: CustomEvent) => {
+ return {
+ customValue: payload.value
+ }
+ }
+ }
+}
+
+const config = {
+ ethereum: (provider: AsyncSendable): Web3Provider => {
+ return new Web3Provider(provider)
+ },
+ ipfs: (endpoint: string) => {
+ return ipfsHttpClient(endpoint)
+ },
+}
+
+type Config = typeof config
+
+type Context = MutationContext
+
+const resolvers: MutationResolvers = {
+ Mutation: {
+ example: (_: any, variables: any, context: Context) => {
+ const { var } = variables
+ ...
+ }
+ }
+}
+
+export default {
+ config,
+ resolvers,
+ stateBuilder
+}
+
+export {
+ Config,
+ CustomEvent,
+ EventMap,
+ State
+}
+```
diff --git a/yarn.lock b/yarn.lock
index 5f75786..b9ea6fa 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1338,7 +1338,7 @@
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440"
integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==
-"@types/minimatch@*":
+"@types/minimatch@*", "@types/minimatch@3.0.3":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
@@ -1859,6 +1859,13 @@ babel-preset-jest@^25.1.0:
"@babel/plugin-syntax-object-rest-spread" "^7.0.0"
babel-plugin-jest-hoist "^25.1.0"
+backbone@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.4.0.tgz#54db4de9df7c3811c3f032f34749a4cd27f3bd12"
+ integrity sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==
+ dependencies:
+ underscore ">=1.8.3"
+
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@@ -3429,7 +3436,7 @@ glob-to-regexp@^0.3.0:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
-glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
+glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
@@ -3491,7 +3498,7 @@ growly@^1.3.0:
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
-handlebars@^4.4.0:
+handlebars@^4.4.0, handlebars@^4.7.2, handlebars@^4.7.3:
version "4.7.3"
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz#8ece2797826886cf8082d1726ff21d2a022550ee"
integrity sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg==
@@ -3573,6 +3580,11 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
+highlight.js@^9.17.1:
+ version "9.18.1"
+ resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.1.tgz#ed21aa001fe6252bb10a3d76d47573c6539fe13c"
+ integrity sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg==
+
hosted-git-info@^2.1.4, hosted-git-info@^2.7.1:
version "2.8.5"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c"
@@ -3772,6 +3784,11 @@ inquirer@^6.2.0:
strip-ansi "^5.1.0"
through "^2.3.6"
+interpret@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
+ integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
+
ip-regex@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
@@ -4468,6 +4485,11 @@ jest@^25.1.0:
import-local "^3.0.2"
jest-cli "^25.1.0"
+jquery@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2"
+ integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==
+
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -4797,6 +4819,11 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
+lunr@^2.3.8:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.8.tgz#a8b89c31f30b5a044b97d2d28e2da191b6ba2072"
+ integrity sha512-oxMeX/Y35PNFuZoHp+jUj5OSEmLCaIH4KTFJh7a93cHBoFmpw2IoPs22VIz7vyO2YUnx2Tn9dzIwO2P/4quIRg==
+
macos-release@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f"
@@ -4875,6 +4902,11 @@ map-visit@^1.0.0:
dependencies:
object-visit "^1.0.0"
+marked@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-0.8.0.tgz#ec5c0c9b93878dc52dd54be8d0e524097bd81a99"
+ integrity sha512-MyUe+T/Pw4TZufHkzAfDj6HarCBWia2y27/bhuYkTaiUnfDYFnCP3KUN+9oM7Wi6JA2rymtVYbQu3spE0GCmxQ==
+
meow@^3.3.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
@@ -4980,7 +5012,7 @@ mimic-fn@^2.1.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-minimatch@^3.0.4:
+minimatch@^3.0.0, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
@@ -5840,6 +5872,11 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+progress@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
promise-inflight@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
@@ -6120,6 +6157,13 @@ realpath-native@^1.1.0:
dependencies:
util.promisify "^1.0.0"
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
+ dependencies:
+ resolve "^1.1.6"
+
redent@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
@@ -6262,7 +6306,7 @@ resolve@1.1.7:
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
-resolve@1.x, resolve@^1.10.0, resolve@^1.3.2:
+resolve@1.x, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2:
version "1.15.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
@@ -6448,6 +6492,15 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+shelljs@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097"
+ integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
shellwords@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
@@ -7164,7 +7217,42 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-typescript@^3.5.2:
+typedoc-default-themes@^0.7.2:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.7.2.tgz#1e9896f920b58e6da0bba9d7e643738d02405a5a"
+ integrity sha512-fiFKlFO6VTqjcno8w6WpTsbCgXmfPHVjnLfYkmByZE7moaz+E2DSpAT+oHtDHv7E0BM5kAhPrHJELP2J2Y2T9A==
+ dependencies:
+ backbone "^1.4.0"
+ jquery "^3.4.1"
+ lunr "^2.3.8"
+ underscore "^1.9.1"
+
+typedoc-plugin-markdown@^2.2.17:
+ version "2.2.17"
+ resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-2.2.17.tgz#aaef7420e8268170e62c764f43740e10f842548d"
+ integrity sha512-eE6cTeqsZIbjur6RG91Lhx1vTwjR49OHwVPRlmsxY3dthS4FNRL8sHxT5Y9pkosBwv1kSmNGQEPHjMYy1Ag6DQ==
+ dependencies:
+ fs-extra "^8.1.0"
+ handlebars "^4.7.3"
+
+typedoc@^0.16.11:
+ version "0.16.11"
+ resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.16.11.tgz#95f862c6eba78533edc9af7096d2295b718eddc1"
+ integrity sha512-YEa5i0/n0yYmLJISJ5+po6seYfJQJ5lQYcHCPF9ffTF92DB/TAZO/QrazX5skPHNPtmlIht5FdTXCM2kC7jQFQ==
+ dependencies:
+ "@types/minimatch" "3.0.3"
+ fs-extra "^8.1.0"
+ handlebars "^4.7.2"
+ highlight.js "^9.17.1"
+ lodash "^4.17.15"
+ marked "^0.8.0"
+ minimatch "^3.0.0"
+ progress "^2.0.3"
+ shelljs "^0.8.3"
+ typedoc-default-themes "^0.7.2"
+ typescript "3.7.x"
+
+typescript@3.7.x, typescript@^3.5.2:
version "3.7.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae"
integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==
@@ -7187,6 +7275,11 @@ umask@^1.1.0:
resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d"
integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=
+underscore@>=1.8.3, underscore@^1.9.1:
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.2.tgz#0c8d6f536d6f378a5af264a72f7bec50feb7cf2f"
+ integrity sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==
+
union-value@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"