From 181bf9c802a8b51e247aaeb488dd00b71f444eac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillem=20C=C3=B3rdoba?= Date: Thu, 21 Mar 2024 11:09:17 +0100 Subject: [PATCH] WIP docs --- docs/.gitignore | 16 +- docs/.vitepress/config.mts | 76 ++++- docs/2.1-backend-setup.md | 36 +++ docs/2.2-integrity.mdx | 11 + docs/2.3-coordinator.mdx | 11 + docs/3.1-frontend-setup.mdx | 125 ++++++++ docs/3.2-profiles-store.mdx | 58 ++++ docs/api-examples.md | 49 ---- docs/index.md | 25 +- docs/introduction.md | 23 ++ docs/markdown-examples.md | 85 ------ docs/package.json | 12 +- docs/profile-prompt.md | 18 ++ docs/public/custom-elements.json | 1 + docs/setup.md | 1 + docs/template-setup.md | 7 + package-lock.json | 486 +++++++++++++++++++++++++++++++ 17 files changed, 862 insertions(+), 178 deletions(-) create mode 100644 docs/2.1-backend-setup.md create mode 100644 docs/2.2-integrity.mdx create mode 100644 docs/2.3-coordinator.mdx create mode 100644 docs/3.1-frontend-setup.mdx create mode 100644 docs/3.2-profiles-store.mdx delete mode 100644 docs/api-examples.md create mode 100644 docs/introduction.md delete mode 100644 docs/markdown-examples.md create mode 100644 docs/profile-prompt.md create mode 120000 docs/public/custom-elements.json create mode 100644 docs/setup.md create mode 100644 docs/template-setup.md diff --git a/docs/.gitignore b/docs/.gitignore index dbbf8da2f..65d8b723b 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -4,17 +4,5 @@ node_modules/ # logs npm-debug.log* -# environment variables -.env -.env.production - -# macOS-specific files -.DS_Store - -# Rocket ignore files -*-mdjs-generated.js -*-converted-html.js -*-converted-md.js -*-converted-md-source.js -_site -_site-dev +.vitepress/cache +public/backend/ diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index cde1d6f43..349602f80 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -1,28 +1,76 @@ -import { defineConfig } from 'vitepress' +import { defineConfig } from "vitepress"; // https://vitepress.dev/reference/site-config export default defineConfig({ + vue: { + template: { + compilerOptions: { + // treat all tags with a dash as custom elements + isCustomElement: (tag) => tag.includes("-"), + }, + }, + }, + base: "/profiles", title: "@holochain-open-dev/profiles", description: "Profiles module for holochain apps", themeConfig: { // https://vitepress.dev/reference/default-theme-config - nav: [ - { text: 'Home', link: '/' }, - { text: 'Examples', link: '/markdown-examples' } - ], + // nav: [{ text: "Home", link: "/" }], sidebar: [ { - text: 'Examples', + text: "Guides", + items: [ + { + text: "Setup", + link: "/setup.md", + }, + ], + }, + { + text: "API Reference", items: [ - { text: 'Markdown Examples', link: '/markdown-examples' }, - { text: 'Runtime API Examples', link: '/api-examples' } - ] - } + { + text: "Integrity Zome", + link: "/backend/doc/hc_zome_profiles_integrity/index.html", + target: "_blank", + }, + { + text: "Coordinator Zome", + link: "/backend/doc/hc_zome_profiles_coordinator/index.html", + target: "_blank", + }, + { + text: "Frontend", + items: [ + { + text: "ProfilesStore", + link: "/profiles-store.md", + }, + { + text: "Elements", + items: [ + { + text: "profiles-context", + link: "/profiles-context.md", + }, + { + text: "profile-prompt", + link: "/profile-prompt.md", + }, + ], + }, + ], + }, + ], + }, ], socialLinks: [ - { icon: 'github', link: 'https://github.com/vuejs/vitepress' } - ] - } -}) + { + icon: "github", + link: "https://github.com/holochain-open-dev/profiles", + }, + ], + }, +}); diff --git a/docs/2.1-backend-setup.md b/docs/2.1-backend-setup.md new file mode 100644 index 000000000..2296045a6 --- /dev/null +++ b/docs/2.1-backend-setup.md @@ -0,0 +1,36 @@ +import { Meta } from '@storybook/addon-docs'; + + + +# Setting up the zomes + +> It's much much easier to set up the backend by using the [holochain-open-dev template](https://github.com/holochain-open-dev/templates). Only follow this guide if you can't use the template. + +> This guide assumes you are inside a nix-shell environment with `hc scaffold` available. + +1. Scaffold a new zome pair named `profiles` with: + +```bash +hc scaffold zome profiles +``` + +Select the "Integrity/coordinator zome pair" option, and accept the path that the scaffolding tool offers to scaffold the zomes. + +2. Add the `hc_zome_profiles_coordinator` and `hc_zome_profiles_integrity` zomes as dependencies with: + +```bash +cargo add -p profiles hc_zome_profiles_coordinator +cargo add -p profiles_integrity hc_zome_profiles_integrity +``` + +3. Go into the newly scaffolded integrity zome's `lib.rs` (its path may be similar to `dnas/lobby/zomes/integrity/profiles/src/lib.rs`) and **replace its contents with**: + +```rust +extern crate hc_zome_profiles_integrity; +``` + +4. Go into the newly scaffolded coordinator zome's `lib.rs` (its path may be similar to `dnas/lobby/zomes/coordinator/profiles/src/lib.rs`) and **replace its contents with**: + +```rust +extern crate hc_zome_profiles_coordinator; +``` diff --git a/docs/2.2-integrity.mdx b/docs/2.2-integrity.mdx new file mode 100644 index 000000000..3aa136e57 --- /dev/null +++ b/docs/2.2-integrity.mdx @@ -0,0 +1,11 @@ +import { Meta } from '@storybook/addon-docs'; + + + +# hc_zome_profiles_integrity + +Use this crate directly if you want include and maybe extend this zome in your DNA. + +Notice that just by importing this crate, all its zome functions will be automatically defined in the consuming crate. This could create collisions in function names or entry definitions. + +[Read the documentation for the types available from this zome](https://docs.rs/hc_zome_profiles_integrity). diff --git a/docs/2.3-coordinator.mdx b/docs/2.3-coordinator.mdx new file mode 100644 index 000000000..c237b0b7c --- /dev/null +++ b/docs/2.3-coordinator.mdx @@ -0,0 +1,11 @@ +import { Meta } from '@storybook/addon-docs'; + + + +# hc_zome_profiles_coordinator + +Use this crate directly if you want include and maybe extend this zome in your DNA. + +Notice that just by importing this crate, all its zome functions will be automatically defined in the consuming crate. This could create collisions in function names or entry definitions. + +[Read the documentation for all the functions available from this zome.](https://docs.rs/hc_zome_profiles_coordinator) diff --git a/docs/3.1-frontend-setup.mdx b/docs/3.1-frontend-setup.mdx new file mode 100644 index 000000000..8b0b6ae27 --- /dev/null +++ b/docs/3.1-frontend-setup.mdx @@ -0,0 +1,125 @@ +import { Meta } from '@storybook/addon-docs'; + + + +# Seting Up the Frontend + +> It's much much easier to set up the frontend by using the [holochain-open-dev template](https://github.com/holochain-open-dev/templates). Only follow this guide if you can't use the template. + +> This guide assumes you are building a web application written in JS or TS, using NPM as the package manager. + +> [Go here](https://holochain-open-dev.github.io/reusable-modules/frontend/frameworks/) to look at examples of integration of this module in different frontend frameworks (Vue, Svelte, etc.). + +1. Install this module and its necessary dependencies with: + +```bash +npm install @holochain-open-dev/profiles +``` + +Careful! If you are using NPM workspaces (which is the case for the apps generated with the holochain scaffolding tool (`hc scaffold`), you need to specify which workspace you want to install those dependencies to, and run the command from the root folder of the repository. In the case of the apps generated with the scaffolding tool: + +```bash +npm install @holochain-open-dev/profiles -w ui +``` + +2. Connect to Holochain with the `AppAgentClient`, and create the `ProfilesStore` with it: + +```js +import { ProfilesStore, ProfilesClient } from "@holochain-open-dev/profiles"; +import { AppWebsocket, AppAgentWebsocket } from "@holochain/client"; + +async function setupProfilesStore() { + const client = await AppAgentWebsocket.connect('', '') + +// TODO: change "MY_CELL_ROLE" for the roleId that you can find in your "happ.yaml" + const profilesStore = new ProfilesStore(new ProfilesClient(client, ''), { + avatarMode: "avatar-optional", + }); + return profilesStore; +} +``` + +3. Import the `` element and add it to your html **wrapping the whole section of your page in which you are going to be placing** the other elements from `@holochain-open-dev/profiles`: + +```js +// This can be placed in the index.js, at the top level of your web-app. +import "@holochain-open-dev/profiles/dist/elements/profiles-context.js"; +``` + +And then add the `` element in your html: + +```html + + + + +``` + +4. Attach the `profilesStore` to the `` element: + +- Go to [this page](https://holochain-open-dev.github.io/reusable-modules/frontend/frameworks/), select the framework you are using, and follow its example. + +You need to set the `store` property of it to your already instantiated `ProfilesStore` object: + +- If you **are using some JS framework**: + +```html + + + + + + + + + + + + + + +``` + +OR + +- If you **are not using any framework**: + +```js +const contextElement = document.querySelector("profiles-context"); +contextElement.store = store; +``` + +> You can read more about the context pattern [here](https://holochain-open-dev.github.io/reusable-modules/frontend/using/#context). + +5. [Choose which elements you need](?path=/docs/frontend-elements) and import them like this: + +```js +import "@holochain-open-dev/profiles/dist/elements/profiles-context.js"; +``` + +And then they are ready be used inside the `` just like any other HTML tag. + +This will define all the elements from this module in the global `CustomElementsRegistry`. You can read more about Custom Elements [here](https://developers.google.com/web/fundamentals/web-components/customelements). + +6. Add your preferred shoelace theme in your `` tag: + +```html + + + +``` + +or in JS: + +```js +import '@shoelace-style/shoelace/dist/themes/light.css'; +``` + +You can read more about how to initialize the shoelace theme [here](https://shoelace.style/getting-started/themes?id=activating-themes). + +That's it! You can spend some time now to take a look at [which elements are available for you to reuse](?path=/docs/frontend-elements-create-profile--docs). + +# Demo + +You can see a full working example of the UI working in [here](https://github.com/holochain-open-dev/profiles/blob/main/ui/demo/index.html). + diff --git a/docs/3.2-profiles-store.mdx b/docs/3.2-profiles-store.mdx new file mode 100644 index 000000000..4ea818f12 --- /dev/null +++ b/docs/3.2-profiles-store.mdx @@ -0,0 +1,58 @@ +import { Meta } from '@storybook/addon-docs'; +import { ArgsTable } from '@storybook/addon-docs/blocks'; +import {ProfilesStore} from '@holochain-open-dev/profiles' + + + +# ProfilesStore + +The `ProfilesStore` is a typescript class that contains `svelte` stores, to which you can subscribe to get reactive updates in your elements. + +```js +import { ProfilesStore, ProfilesClient } from "@holochain-open-dev/profiles"; + +const config = { + avatarMode: "identicon", + + // Custom app level profile fields + additionalFields: [ + { + name: "location", + label: "Location", + required: true, + }, + { + name: "bio", + label: "Bio", + required: false, + } + ], +}; +const store = new ProfilesStore(new ProfilesClient(appAgentClient, 'my-role-name'), config); +``` + +> Learn how to setup the `AppAgentClient` object [here](https://www.npmjs.com/package/@holochain/client). + +The config for the `ProfilesStore` has these options: + +```ts +export interface ProfilesConfig { + avatarMode: "identicon" | "avatar-required" | "avatar-optional"; // default: 'avatar-optional' + additionalFields: FieldConfig[]; // default: [] + minNicknameLength: number; // default: 3 +} +``` + +The `FieldConfig` has these options: + +```ts +export interface FieldConfig { + name: string, + label: string, + required: boolean, +} +``` + +Learn more about the stores and how to integrate them in different frameworks [here](https://holochain-open-dev.github.io/reusable-modules/frontend/using/#stores). diff --git a/docs/api-examples.md b/docs/api-examples.md deleted file mode 100644 index 6bd8bb5c1..000000000 --- a/docs/api-examples.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -outline: deep ---- - -# Runtime API Examples - -This page demonstrates usage of some of the runtime APIs provided by VitePress. - -The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files: - -```md - - -## Results - -### Theme Data -
{{ theme }}
- -### Page Data -
{{ page }}
- -### Page Frontmatter -
{{ frontmatter }}
-``` - - - -## Results - -### Theme Data -
{{ theme }}
- -### Page Data -
{{ page }}
- -### Page Frontmatter -
{{ frontmatter }}
- -## More - -Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata). diff --git a/docs/index.md b/docs/index.md index 1238db1a8..bd2caeb06 100644 --- a/docs/index.md +++ b/docs/index.md @@ -5,21 +5,24 @@ layout: home hero: name: "@holochain-open-dev/profiles" text: "Profiles module for holochain apps" - tagline: My great project tagline + tagline: Plug-and-play profile management for your hApps actions: - theme: brand - text: Markdown Examples - link: /markdown-examples + text: Guides + link: /setup.md - theme: alt - text: API Examples - link: /api-examples + text: API Reference + link: /api-reference features: - - title: Feature A - details: Lorem ipsum dolor sit amet, consectetur adipiscing elit - - title: Feature B - details: Lorem ipsum dolor sit amet, consectetur adipiscing elit - - title: Feature C - details: Lorem ipsum dolor sit amet, consectetur adipiscing elit + - title: UI+Backend Module + details: Following the holochain-open-dev guidelines + link: https://holochain-open-dev.github.io + - title: Manage your profile + details: Create and update your profile + - title: Search by nickname + details: Form elements for entries with a field of type `AgentPubKey` + - title: Configurable profile fields + details: Customize the fields that you need in your hApp --- diff --git a/docs/introduction.md b/docs/introduction.md new file mode 100644 index 000000000..99082b854 --- /dev/null +++ b/docs/introduction.md @@ -0,0 +1,23 @@ +# @holochain-open-dev/profiles + +The profiles zome and its accompanying frontend module are designed to implement and export useful functionality around personal profile information about the agents in a Holochain DHT. + +The only field that this module assumes is the nickname, which it index the agents by. + +Existing functionalities: + +- Creating a profile. +- Updating a profile. +- Searching agents by nickname. +- Getting the profile for a list of agents. +- Configurable profile fields. +- Profile detail frontend element. + +> In the future, when the personas & profiles application is fully developed, this module will switch to storing data in it, and will serve only as a bridge to get that private data. We hope to maintain the modules and their interfaces as similar as they are now, and that the migration friction is low. + +This module follows the [holochain-open-dev](https://github.com/holochain-open-dev/) pattern of developing holochain modules. Read [its documentation](https://holochain-open-dev.github.io) to understand more about its motivation and the big picture. + +To integrate this module into your application: + +- If you are starting a new project from scratch, it is very recommended to follow the [Template Setup](?path=/docs/template-setup--docs). +- If not, you can visit [Setting up the Backend](?path=/docs/backend-setting-up-the-zomes--docs) and [Setting up the Frontend](?path=/docs/frontend-setting-up-the-frontend--docs). diff --git a/docs/markdown-examples.md b/docs/markdown-examples.md deleted file mode 100644 index f9258a550..000000000 --- a/docs/markdown-examples.md +++ /dev/null @@ -1,85 +0,0 @@ -# Markdown Extension Examples - -This page demonstrates some of the built-in markdown extensions provided by VitePress. - -## Syntax Highlighting - -VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting: - -**Input** - -````md -```js{4} -export default { - data () { - return { - msg: 'Highlighted!' - } - } -} -``` -```` - -**Output** - -```js{4} -export default { - data () { - return { - msg: 'Highlighted!' - } - } -} -``` - -## Custom Containers - -**Input** - -```md -::: info -This is an info box. -::: - -::: tip -This is a tip. -::: - -::: warning -This is a warning. -::: - -::: danger -This is a dangerous warning. -::: - -::: details -This is a details block. -::: -``` - -**Output** - -::: info -This is an info box. -::: - -::: tip -This is a tip. -::: - -::: warning -This is a warning. -::: - -::: danger -This is a dangerous warning. -::: - -::: details -This is a details block. -::: - -## More - -Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown). diff --git a/docs/package.json b/docs/package.json index 4bedb9947..2befd3ec3 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,15 +4,17 @@ "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "docs:dev": "vitepress dev", - "docs:build": "vitepress build", - "docs:preview": "vitepress preview" + "start": "npm run dev", + "dev": "vitepress dev", + "build": "npm run cargo:docs && vitepress build", + "cargo:docs": "cargo doc --release --no-deps --target-dir public/backend", + "preview": "vitepress preview" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { + "api-viewer-element": "^1.0.0-pre.8", "vitepress": "^1.0.0-rc.45" } -} \ No newline at end of file +} diff --git a/docs/profile-prompt.md b/docs/profile-prompt.md new file mode 100644 index 000000000..86fe30b4f --- /dev/null +++ b/docs/profile-prompt.md @@ -0,0 +1,18 @@ +## Demo + + + + + + + + + +## Reference + + + diff --git a/docs/public/custom-elements.json b/docs/public/custom-elements.json new file mode 120000 index 000000000..d16425285 --- /dev/null +++ b/docs/public/custom-elements.json @@ -0,0 +1 @@ +../../ui/custom-elements.json \ No newline at end of file diff --git a/docs/setup.md b/docs/setup.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/setup.md @@ -0,0 +1 @@ + diff --git a/docs/template-setup.md b/docs/template-setup.md new file mode 100644 index 000000000..4c90fa83b --- /dev/null +++ b/docs/template-setup.md @@ -0,0 +1,7 @@ +# Template Setup + +If you are starting a new application from scratch, you can use the [holochain-open-dev template](https://github.com/holochain-open-dev/templates) to automatically get the profiles module for free in your application. + +Run `nix run github:holochain-open-dev/templates#hc-scaffold-app-template -- web-app` and follow all its instructions. + + diff --git a/package-lock.json b/package-lock.json index bbea8bbc6..a4241f0ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,7 @@ "version": "1.0.0", "license": "ISC", "devDependencies": { + "api-viewer-element": "^1.0.0-pre.8", "vitepress": "^1.0.0-rc.45" } }, @@ -265,6 +266,154 @@ "node": ">=6.0.0" } }, + "node_modules/@api-viewer/common": { + "version": "1.0.0-pre.9", + "resolved": "https://registry.npmjs.org/@api-viewer/common/-/common-1.0.0-pre.9.tgz", + "integrity": "sha512-jOz++v7cMeiuciobmITAcHR2Np8KjG553okxCBttBK4FSrjbb7tfXlN6qEozOUgrK0GLUFjC8bsx/jEGaWA1Zg==", + "dev": true, + "dependencies": { + "custom-elements-manifest": "^2.0.0", + "lit": "^2.0.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@api-viewer/common/node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "node_modules/@api-viewer/common/node_modules/custom-elements-manifest": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/custom-elements-manifest/-/custom-elements-manifest-2.0.0.tgz", + "integrity": "sha512-1MmhBRszwnNYqn56nkMeHXn/Zlh998+6Yal3wedbXI7NzKPG02GDgjspdN1NiuDtt2yb5n94JvFwPOF7Prnocg==", + "dev": true + }, + "node_modules/@api-viewer/common/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@api-viewer/common/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@api-viewer/demo": { + "version": "1.0.0-pre.9", + "resolved": "https://registry.npmjs.org/@api-viewer/demo/-/demo-1.0.0-pre.9.tgz", + "integrity": "sha512-MKbKabd68eIrJ4fAcaVuWh2mJb9EXFrqfAkGe3fNqViLkcyvv7kHi0lt9WmxxRGfeykwBKcBhlFEpoa5gr1QHQ==", + "dev": true, + "dependencies": { + "@api-viewer/common": "^1.0.0-pre.9", + "@api-viewer/tabs": "^1.0.0-pre.9", + "highlight-ts": "9.12.1-2", + "lit": "^2.0.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@api-viewer/demo/node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "node_modules/@api-viewer/demo/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@api-viewer/demo/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@api-viewer/docs": { + "version": "1.0.0-pre.9", + "resolved": "https://registry.npmjs.org/@api-viewer/docs/-/docs-1.0.0-pre.9.tgz", + "integrity": "sha512-pCOBnFM8qW6Zs5fpJ6tv7dDAS8SlMWPt9LRS0L+9tf3Hi0/7JcTaGF0k75yaqheEPeKFvxV6VOZ28S2lRoCEEQ==", + "dev": true, + "dependencies": { + "@api-viewer/common": "^1.0.0-pre.9", + "@api-viewer/tabs": "^1.0.0-pre.9", + "@types/dompurify": "^2.3.1", + "@types/marked": "^4.0.0", + "dompurify": "^2.3.3", + "lit": "^2.0.0", + "marked": "^4.0.10", + "tslib": "^2.3.1" + } + }, + "node_modules/@api-viewer/docs/node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "node_modules/@api-viewer/docs/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@api-viewer/docs/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@api-viewer/tabs": { + "version": "1.0.0-pre.9", + "resolved": "https://registry.npmjs.org/@api-viewer/tabs/-/tabs-1.0.0-pre.9.tgz", + "integrity": "sha512-vZz9MhaTh4QoMHTs1jC+28+q6Ppw2rj07HdN51n0+rwLgb+mMdAhorCVErn9NPdcsBS9tHzmjt2jL4n0TNtwPA==", + "dev": true, + "dependencies": { + "@api-viewer/common": "^1.0.0-pre.9" + } + }, "node_modules/@aw-web-design/x-default-browser": { "version": "1.4.126", "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz", @@ -6420,6 +6569,15 @@ "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==", "dev": true }, + "node_modules/@types/dompurify": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-2.4.0.tgz", + "integrity": "sha512-IDBwO5IZhrKvHFUl+clZxgf3hn2b/lU6H1KaBShPkQyGJUQ0xwebezIPSuiyGwfz1UzJWQl4M7BDxtHtCCPlTg==", + "dev": true, + "dependencies": { + "@types/trusted-types": "*" + } + }, "node_modules/@types/ejs": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", @@ -6567,6 +6725,12 @@ "@types/mdurl": "*" } }, + "node_modules/@types/marked": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.3.2.tgz", + "integrity": "sha512-a79Yc3TOk6dGdituy8hmTTJXjOkZ7zsFYV10L337ttq/rec8lRMDBpV7fL3uLx6TgbFCa5DU/h8FmIBQPSbU0w==", + "dev": true + }, "node_modules/@types/mdurl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", @@ -7931,6 +8095,50 @@ "node": ">= 8" } }, + "node_modules/api-viewer-element": { + "version": "1.0.0-pre.8", + "resolved": "https://registry.npmjs.org/api-viewer-element/-/api-viewer-element-1.0.0-pre.8.tgz", + "integrity": "sha512-Sl7/zvFiTNPCzF4aQA7+lE+kyhOEZj47e48nePCjgiUzbANHC7L2f+Vu94tgQpm4fxTaV1mPbTfNzDD2gnEhog==", + "dev": true, + "dependencies": { + "@api-viewer/common": "^1.0.0-pre.8", + "@api-viewer/demo": "^1.0.0-pre.8", + "@api-viewer/docs": "^1.0.0-pre.8", + "lit": "^2.0.0", + "tslib": "^2.3.1" + } + }, + "node_modules/api-viewer-element/node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "node_modules/api-viewer-element/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/api-viewer-element/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, "node_modules/app-root-dir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", @@ -10301,6 +10509,12 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.8.tgz", + "integrity": "sha512-O90eQdAQOiLZoE9pEgPz3JfqXh5yrhJHv0/LzOv3wWFLTWUqAKaISD1aWASQTLshLM+jziuSerbtUESKK8Jibw==", + "dev": true + }, "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -12643,6 +12857,21 @@ "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" }, + "node_modules/highlight-ts": { + "version": "9.12.1-2", + "resolved": "https://registry.npmjs.org/highlight-ts/-/highlight-ts-9.12.1-2.tgz", + "integrity": "sha512-CkLnKaxdwUasdPbzM9YP3EQTYfY/jgLQ4dyl7FFa65h1Ymq/qm+FOsevfNRqI7ZKGlz9scPkAy9OXYvwEtcJSw==", + "dev": true, + "dependencies": { + "tslib": "^1" + } + }, + "node_modules/highlight-ts/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/hookable": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", @@ -14218,6 +14447,18 @@ "react": ">= 0.14.0" } }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/mdast-util-definitions": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", @@ -20698,6 +20939,160 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, + "@api-viewer/common": { + "version": "1.0.0-pre.9", + "resolved": "https://registry.npmjs.org/@api-viewer/common/-/common-1.0.0-pre.9.tgz", + "integrity": "sha512-jOz++v7cMeiuciobmITAcHR2Np8KjG553okxCBttBK4FSrjbb7tfXlN6qEozOUgrK0GLUFjC8bsx/jEGaWA1Zg==", + "dev": true, + "requires": { + "custom-elements-manifest": "^2.0.0", + "lit": "^2.0.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, + "requires": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "custom-elements-manifest": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/custom-elements-manifest/-/custom-elements-manifest-2.0.0.tgz", + "integrity": "sha512-1MmhBRszwnNYqn56nkMeHXn/Zlh998+6Yal3wedbXI7NzKPG02GDgjspdN1NiuDtt2yb5n94JvFwPOF7Prnocg==", + "dev": true + }, + "lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "requires": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "requires": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + } + } + }, + "@api-viewer/demo": { + "version": "1.0.0-pre.9", + "resolved": "https://registry.npmjs.org/@api-viewer/demo/-/demo-1.0.0-pre.9.tgz", + "integrity": "sha512-MKbKabd68eIrJ4fAcaVuWh2mJb9EXFrqfAkGe3fNqViLkcyvv7kHi0lt9WmxxRGfeykwBKcBhlFEpoa5gr1QHQ==", + "dev": true, + "requires": { + "@api-viewer/common": "^1.0.0-pre.9", + "@api-viewer/tabs": "^1.0.0-pre.9", + "highlight-ts": "9.12.1-2", + "lit": "^2.0.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, + "requires": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "requires": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "requires": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + } + } + }, + "@api-viewer/docs": { + "version": "1.0.0-pre.9", + "resolved": "https://registry.npmjs.org/@api-viewer/docs/-/docs-1.0.0-pre.9.tgz", + "integrity": "sha512-pCOBnFM8qW6Zs5fpJ6tv7dDAS8SlMWPt9LRS0L+9tf3Hi0/7JcTaGF0k75yaqheEPeKFvxV6VOZ28S2lRoCEEQ==", + "dev": true, + "requires": { + "@api-viewer/common": "^1.0.0-pre.9", + "@api-viewer/tabs": "^1.0.0-pre.9", + "@types/dompurify": "^2.3.1", + "@types/marked": "^4.0.0", + "dompurify": "^2.3.3", + "lit": "^2.0.0", + "marked": "^4.0.10", + "tslib": "^2.3.1" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, + "requires": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "requires": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "requires": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + } + } + }, + "@api-viewer/tabs": { + "version": "1.0.0-pre.9", + "resolved": "https://registry.npmjs.org/@api-viewer/tabs/-/tabs-1.0.0-pre.9.tgz", + "integrity": "sha512-vZz9MhaTh4QoMHTs1jC+28+q6Ppw2rj07HdN51n0+rwLgb+mMdAhorCVErn9NPdcsBS9tHzmjt2jL4n0TNtwPA==", + "dev": true, + "requires": { + "@api-viewer/common": "^1.0.0-pre.9" + } + }, "@aw-web-design/x-default-browser": { "version": "1.4.126", "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz", @@ -25256,6 +25651,15 @@ "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==", "dev": true }, + "@types/dompurify": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-2.4.0.tgz", + "integrity": "sha512-IDBwO5IZhrKvHFUl+clZxgf3hn2b/lU6H1KaBShPkQyGJUQ0xwebezIPSuiyGwfz1UzJWQl4M7BDxtHtCCPlTg==", + "dev": true, + "requires": { + "@types/trusted-types": "*" + } + }, "@types/ejs": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", @@ -25403,6 +25807,12 @@ "@types/mdurl": "*" } }, + "@types/marked": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.3.2.tgz", + "integrity": "sha512-a79Yc3TOk6dGdituy8hmTTJXjOkZ7zsFYV10L337ttq/rec8lRMDBpV7fL3uLx6TgbFCa5DU/h8FmIBQPSbU0w==", + "dev": true + }, "@types/mdurl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", @@ -26425,6 +26835,52 @@ "picomatch": "^2.0.4" } }, + "api-viewer-element": { + "version": "1.0.0-pre.8", + "resolved": "https://registry.npmjs.org/api-viewer-element/-/api-viewer-element-1.0.0-pre.8.tgz", + "integrity": "sha512-Sl7/zvFiTNPCzF4aQA7+lE+kyhOEZj47e48nePCjgiUzbANHC7L2f+Vu94tgQpm4fxTaV1mPbTfNzDD2gnEhog==", + "dev": true, + "requires": { + "@api-viewer/common": "^1.0.0-pre.8", + "@api-viewer/demo": "^1.0.0-pre.8", + "@api-viewer/docs": "^1.0.0-pre.8", + "lit": "^2.0.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, + "requires": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "requires": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "requires": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + } + } + }, "app-root-dir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", @@ -28137,6 +28593,7 @@ "docs": { "version": "file:docs", "requires": { + "api-viewer-element": "*", "vitepress": "^1.0.0-rc.45" } }, @@ -28192,6 +28649,12 @@ "domelementtype": "^2.2.0" } }, + "dompurify": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.8.tgz", + "integrity": "sha512-O90eQdAQOiLZoE9pEgPz3JfqXh5yrhJHv0/LzOv3wWFLTWUqAKaISD1aWASQTLshLM+jziuSerbtUESKK8Jibw==", + "dev": true + }, "domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -30017,6 +30480,23 @@ "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" }, + "highlight-ts": { + "version": "9.12.1-2", + "resolved": "https://registry.npmjs.org/highlight-ts/-/highlight-ts-9.12.1-2.tgz", + "integrity": "sha512-CkLnKaxdwUasdPbzM9YP3EQTYfY/jgLQ4dyl7FFa65h1Ymq/qm+FOsevfNRqI7ZKGlz9scPkAy9OXYvwEtcJSw==", + "dev": true, + "requires": { + "tslib": "^1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, "hookable": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", @@ -31204,6 +31684,12 @@ "dev": true, "requires": {} }, + "marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true + }, "mdast-util-definitions": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz",