├── .editorconfig
├── .github
└── .kodiak.toml
├── .gitignore
├── LICENSE
├── README.md
├── docs
├── PHP.md
└── phpinfo.png
├── examples
├── php
│ ├── cgi.php
│ ├── cli.php
│ ├── fpm.php
│ ├── index.php
│ ├── now.json
│ ├── php72.php
│ ├── php73.php
│ ├── php74.php
│ └── server.php
└── pure
│ ├── index.js
│ └── now.json
└── runtimes
├── caddy
├── .gitignore
├── Makefile
├── native
│ ├── Caddyfile
│ └── caddy
├── package-lock.json
├── package.json
├── src
│ ├── helpers.ts
│ ├── index.ts
│ ├── launcher.ts
│ └── types.d.ts
├── test
│ └── spec
│ │ └── helpers.js
└── tsconfig.json
├── debug
├── .gitignore
├── package-lock.json
├── package.json
├── src
│ ├── index.ts
│ └── launcher.ts
└── tsconfig.json
├── md
├── .gitignore
├── package-lock.json
├── package.json
├── src
│ └── index.ts
└── tsconfig.json
└── plain
├── .gitignore
├── package-lock.json
├── package.json
├── src
└── index.ts
└── tsconfig.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: http://EditorConfig.org
2 |
3 | root = true
4 |
5 | [*]
6 | charset = utf-8
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.{md,html}]
12 | indent_style = tab
13 | indent_size = tab
14 | tab_width = 4
15 |
16 | [*.{js}]
17 | indent_style = space
18 | indent_size = 2
19 |
20 | [{composer.json,package.json,.travis.yml}]
21 | indent_style = space
22 | indent_size = 2
23 |
--------------------------------------------------------------------------------
/.github/.kodiak.toml:
--------------------------------------------------------------------------------
1 | version = 1
2 |
3 | [merge]
4 | automerge_label = "automerge"
5 | blacklist_title_regex = "^WIP.*"
6 | blacklist_labels = ["WIP"]
7 | method = "rebase"
8 | delete_branch_on_merge = true
9 | notify_on_conflict = true
10 | optimistic_updates = false
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Node
2 | node_modules
3 |
4 | # Temp
5 | tmp
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Juicy(fx)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
Vercel Runtimes
2 |
3 |
4 | The main goal is to dig deeper into Vercel Runtimes.
5 | The development started with PHP builder, which has been separated into vercel-php.
6 | At this time this repository contains a testing versions of various runtimes.
7 |
8 |
9 |
10 | 🕹 f3l1x.io | 💻 f3l1x | 🐦 @xf3l1x
11 |
12 |
13 | ## Builders
14 |
15 | ### Plain
16 |
17 | ```json
18 | {
19 | "builds": [
20 | { "src": "file.txt", "use": "vercel-plain@0.0.2" }
21 | ]
22 | }
23 | ```
24 |
25 | ### [🐘 PHP](https://github.com/vercel-community/php)
26 |
27 | ```json
28 | {
29 | "builds": [
30 | { "src": "index.php", "use": "vercel-php@0.5.2" }
31 | ]
32 | }
33 | ```
34 |
35 | ### Markdown
36 |
37 | ```json
38 | {
39 | "builds": [
40 | {
41 | "src": "**/*.md",
42 | "use": "vercel-md@0.0.5",
43 | "config": {
44 | "title": "Demo Project",
45 | "css": [
46 | "https://CDN/lib.css",
47 | "/dist/theme.css"
48 | ],
49 | "js": [
50 | "https://CDN/lib.js",
51 | "/dist/main.js"
52 | ]
53 | }
54 | }
55 | ]
56 | }
57 | ```
58 |
59 | ### Debug
60 |
61 | ```json
62 | {
63 | "builds": [
64 | { "src": "file.txt", "use": "vercel-debug@0.0.1" }
65 | ]
66 | ```
67 |
68 | ## 📝 License
69 |
70 | Copyright © 2019 [f3l1x](https://github.com/f3l1x).
71 | This project is [MIT](LICENSE) licensed.
72 |
--------------------------------------------------------------------------------
/docs/PHP.md:
--------------------------------------------------------------------------------
1 | # 🐘 PHP
2 |
3 | > ❗️PHP builder was separated into solo repository [juicyfx/now-php](https://github.com/juicyfx/now-php) and builder renamed to now-php.❗️
4 |
5 | **Builders**
6 |
7 | - Server ✅ (PHP Development Server)
8 | - CGI ✅ (Common Gateway Interface)
9 | - CLI ✅ (Command-line interface)
10 | - FPM ✅🐥 (PHP-FPM)
11 | - Bref ✅ ([Bref.sh](https://github.com/brefphp/bref/))
12 | - FPM ✅🐥 ([Caddy server](https://github.com/caddyserver/caddy) + FPM)
13 |
14 | **PHP versions**
15 |
16 | - PHP 7.2 ✅
17 | - PHP 7.3 ✅
18 | - PHP 7.4 ✅
19 | - PHP 8.0 🔥
20 |
21 | > PHP 5.5, 5.6, 7.0 or 7.1 are not supported.
22 |
23 | **Extensions**
24 |
25 | Preinstalled: apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dom, ds, exif, fileinfo, filter, ftp, gettext, hash, iconv, json, libxml, mbstring, mysqli, mysqlnd, openssl, pcntl, pcre, PDO, pdo_mysql, pdo_pgsql, pdo_sqlite, phalcon (< 7.4), Phar, readline, Reflection, session, SimpleXML, soap, sockets, sodium, SPL, sqlite3, ssh2, standard, swoole, tokenizer, xml, xmlreader, xmlrpc, xmlwriter, xsl, Zend OPcache, zlib
26 |
27 | > List of all installable extensions is on this page https://blog.remirepo.net/pages/PECL-extensions-RPM-status.
28 |
29 | ## 📦 Packages
30 |
31 | **PHP builders**
32 |
33 | | Package | Stable | Canary | Description |
34 | |---------|--------|--------|-------------|
35 | | [`@juicyfx/php`](src/php)| `0.0.7` | `@canary` | Final PHP builder. |
36 | | [`@juicyfx/php-bridge`](src/php-bridge)| `0.0.2` | `@canary` | PHP builder bridge with DevServer, FPM, CGI and CLI. |
37 | | [`@juicyfx/php-bref`](src/php-bref)| `0.0.1` | `@canary` | Final PHP builder with Bref.sh. (Only with PHP 7.2) |
38 | | [`@juicyfx/php-caddy`](src/php-caddy)| `0.0.1` | `@canary` | Final PHP builder with Caddy server with FASTCGI. |
39 |
40 | **PHP libraries**
41 |
42 | | Package | Stable | Canary | Description |
43 | |---------|--------|--------|-------------|
44 | | [`@juicyfx/php-lib-72`](src/php-lib-71) | `0.0.5` | `@canary` | PHP 7.2 binaries and shared libraries. |
45 | | [`@juicyfx/php-lib-73`](src/php-lib-72) | `0.0.5` | `@canary` | PHP 7.3 binaries and shared libraries. |
46 | | [`@juicyfx/php-lib-74`](src/php-lib-74) | `0.0.5` | `@canary` | PHP 7.4 binaries and shared libraries. |
47 |
48 | **Speed**
49 |
50 | | Builder | Cold | Warm |
51 | |---------|------|------|
52 | | `@juicyfx/php` (mode:server) | ~250ms | ~5ms |
53 | | `@juicyfx/php` (mode:cgi) | ~220ms | ~40ms |
54 | | `@juicyfx/php` (mode:cli) | ~220ms | ~35ms |
55 | | `@juicyfx/php` (mode:fpm) | ~170ms | ~160ms |
56 | | `@juicyfx/php-caddy` | ~450ms | ~5ms |
57 | | `@juicyfx/php-bref` | ~255ms | ~2ms |
58 |
59 | ## ⚙️ Usage
60 |
61 | There is prepared builder for your PHP lambdas `@juicyfx/php`.
62 |
63 | **Minimal**
64 |
65 | ```
66 | {
67 | "version": 2,
68 | "builds": [
69 | {
70 | "src": "index.php",
71 | "use": "@juicyfx/php",
72 | }
73 | ]
74 | }
75 | ```
76 |
77 | > 🚧Everything is HOT right now, so you should rather test the `@juicyfx/php@canary` version.
78 |
79 | **Config**
80 |
81 | ```
82 | {
83 | "version": 2,
84 | "builds": [
85 | {
86 | "src": "index.php",
87 | "use": "@juicyfx/php",
88 | "config": {
89 | "v": "7.3"
90 | "mode": "server",
91 | }
92 | }
93 | ]
94 | }
95 | ```
96 |
97 | - `v` [optional]
98 | - Set the PHP version.
99 | - Type: string
100 | - Default: 7.3
101 | - Values: 7.2 | 7.3 | 7.4
102 | - `mode` [optional]
103 | - Set the PHP launcher (bridge).
104 | - Type: string
105 | - Default: server
106 | - Values: server | cgi | cli | fpm
107 | - `composer` [optional]
108 | - Call composer install.
109 | - Type: boolean
110 | - Default: false
111 | - Values: true/false
112 | - Warning: Only supported on PHP 7.2, 7.3
113 |
114 | ## 🤗Features
115 |
116 | - multiple PHP versions
117 | - multiple running modes (server, cgi, cli, fpm)
118 | - install dependencies via Composer
119 |
120 | ## 🚀 Roadmap
121 |
122 | - Support `now dev`
123 | - Resolve known issues (**HELP WANTED**)
124 |
125 | ## 🤔 Known Issues
126 |
127 | - PHP-FPM - Uncaught Exception - socket hang up
128 | - This is known issue and I would apreaciate any help.
129 |
130 | ```
131 | START RequestId: 1811b891-d871-4260-9ea3-1277c24a2d59 Version: $LATEST
132 | 2019-06-22T16:50:54.848Z 1811b891-d871-4260-9ea3-1277c24a2d59 INFO Starting PHP
133 | 2019-06-22T16:50:55.076Z 1811b891-d871-4260-9ea3-1277c24a2d59 ERROR Uncaught Exception {"errorType":"Error","errorMessage":"socket hang up","code":"ECONNRESET","stack":["Error: socket hang up"," at createHangUpError (_http_client.js:323:15)"," at Socket.socketOnEnd (_http_client.js:426:23)"," at Socket.emit (events.js:194:15)"," at endReadableNT (_stream_readable.js:1125:12)"," at process._tickCallback (internal/process/next_tick.js:63:19)"]}
134 | END RequestId: 1811b891-d871-4260-9ea3-1277c24a2d59
135 | REPORT RequestId: 1811b891-d871-4260-9ea3-1277c24a2d59
136 | Duration: 270.75 ms Billed Duration: 300 ms Memory Size: 3008 MB Max Memory Used: 115 MB
137 | RequestId: 1811b891-d871-4260-9ea3-1277c24a2d59 Process exited before completing request
138 | ```
139 |
140 | ## 👀 Examples
141 |
142 | **Server**
143 |
144 | - phpinfo - https://now-builders-php-server-f3l1x.juicyfx1.now.sh/
145 | - hello - https://now-builders-php-server-f3l1x.juicyfx1.now.sh/hello.php
146 | - test - https://now-builders-php-server-f3l1x.juicyfx1.now.sh/test.php
147 |
148 | **CGI**
149 |
150 | - phpinfo - https://now-builders-php-cli-f3l1x.juicyfx1.now.sh/
151 | - hello - https://now-builders-php-cli-f3l1x.juicyfx1.now.sh/hello.php
152 | - test - https://now-builders-php-cli-f3l1x.juicyfx1.now.sh/test.php
153 |
154 | **CLI**
155 |
156 | - phpinfo - https://now-builders-php-cli-f3l1x.juicyfx1.now.sh/
157 | - hello - https://now-builders-php-cli-f3l1x.juicyfx1.now.sh/hello.php
158 | - test - https://now-builders-php-cli-f3l1x.juicyfx1.now.sh/test.php
159 |
160 | **FPM**
161 |
162 | - phpinfo - https://now-builders-php-fpm-f3l1x.juicyfx1.now.sh/
163 | - hello - https://now-builders-php-fpm-f3l1x.juicyfx1.now.sh/hello.php
164 | - test - https://now-builders-php-fpm-f3l1x.juicyfx1.now.sh/test.php
165 |
166 | **Extensions**
167 |
168 | - ds - https://now-builders-php-ext-f3l1x.juicyfx1.now.sh/ds.php
169 | - phalcon - https://now-builders-php-ext-f3l1x.juicyfx1.now.sh/phalcon.php
170 |
171 | **Versions**
172 |
173 | - PHP versions - https://now-builders-php-version-f3l1x.juicyfx1.now.sh/
174 |
175 | **Nette**
176 |
177 | - guide - https://now-builders-php-nette-f3l1x.juicyfx1.now.sh/
178 | - phpinfo - https://now-builders-php-nette-f3l1x.juicyfx1.now.sh/phpinfo.php
179 | - dump - https://now-builders-php-nette-f3l1x.juicyfx1.now.sh/debp.php
180 | - Tracy Debugger - https://now-builders-php-nette-f3l1x.juicyfx1.now.sh/tracy.php
181 | - Nette Checker - https://now-builders-php-nette-f3l1x.juicyfx1.now.sh/checker.php
182 |
183 | **Bref**
184 |
185 | - phpinfo - https://now-builders-php-bref-f3l1x.juicyfx1.now.sh/
186 | - Nette Framework - https://now-builders-php-bref-nette-f3l1x.juicyfx1.now.sh/
187 |
188 | 
189 |
--------------------------------------------------------------------------------
/docs/phpinfo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/contributte/vercel-runtimes/a9beeca1d03afb2c02cc606413376021cbccb944/docs/phpinfo.png
--------------------------------------------------------------------------------
/examples/php/cgi.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | juicyfx/now-builders
8 |
9 |
10 | Multiple PHP versions
11 |
12 |
17 |
18 | Multiple PHP running modes
19 |
20 |
26 |
27 | now-php
28 |
29 | Take a look at new community builder now-php
30 |
31 |
32 |
33 | Copyright © =date('Y')?> | f3l1x
34 |
35 |
36 |
--------------------------------------------------------------------------------
/examples/php/now.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 2,
3 | "name": "now-builders-php",
4 | "scope": "juicyfx",
5 | "regions": ["all"],
6 | "public": true,
7 | "builds": [
8 | { "src": "index.php", "use": "@juicyfx/php@canary"},
9 | { "src": "php72.php", "use": "@juicyfx/php@canary", "config": { "v": "7.2" }},
10 | { "src": "php73.php", "use": "@juicyfx/php@canary", "config": { "v": "7.3" }},
11 | { "src": "php74.php", "use": "@juicyfx/php@canary", "config": { "v": "7.4" }},
12 | { "src": "cgi.php", "use": "@juicyfx/php@canary", "config": { "v": "7.3", "mode": "cgi" }},
13 | { "src": "cli.php", "use": "@juicyfx/php@canary", "config": { "v": "7.3", "mode": "cli" }},
14 | { "src": "fpm.php", "use": "@juicyfx/php@canary", "config": { "v": "7.3", "mode": "fpm" }},
15 | { "src": "server.php", "use": "@juicyfx/php@canary", "config": { "v": "7.3", "mode": "server" }}
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/examples/php/php72.php:
--------------------------------------------------------------------------------
1 | pathJoin(process.env.LAMBDA_TASK_ROOT || '/', 'user');
5 | export const getPhpDir = (): string => pathJoin(process.env.LAMBDA_TASK_ROOT || '/', 'php');
6 | export const isDev = (): boolean => process.env.NOW_PHP_DEV === '1';
7 |
8 | export function normalizeEvent(event: Event): AwsRequest {
9 | if (event.Action === 'Invoke') {
10 | const invokeEvent = JSON.parse(event.body);
11 |
12 | const {
13 | method, path, host, headers = {}, encoding,
14 | }: InvokedEvent = invokeEvent;
15 |
16 | let { body } = invokeEvent;
17 |
18 | if (body) {
19 | if (encoding === 'base64') {
20 | body = Buffer.from(body, encoding);
21 | } else if (encoding === undefined) {
22 | body = Buffer.from(body);
23 | } else {
24 | throw new Error(`Unsupported encoding: ${encoding}`);
25 | }
26 | }
27 |
28 | return {
29 | method,
30 | path,
31 | host,
32 | headers,
33 | body,
34 | };
35 | }
36 |
37 | const {
38 | httpMethod: method, path, host, headers = {}, body,
39 | } = event;
40 |
41 | return {
42 | method,
43 | path,
44 | host,
45 | headers,
46 | body,
47 | };
48 | }
49 |
50 | export async function transformFromAwsRequest({
51 | method, path, host, headers, body,
52 | }: AwsRequest): Promise {
53 | const { pathname, search } = urlParse(path);
54 |
55 | const filename = pathJoin(
56 | getUserDir(),
57 | process.env.NOW_ENTRYPOINT || pathname || '',
58 | );
59 |
60 | const uri = pathname + (search || '');
61 |
62 | return { filename, path, uri, host, method, headers, body };
63 | }
64 |
65 | export function transformToAwsResponse({ statusCode, headers, body }: PhpOutput): AwsResponse {
66 | return { statusCode, headers, body: body.toString('base64'), encoding: 'base64' };
67 | }
68 |
--------------------------------------------------------------------------------
/runtimes/caddy/src/index.ts:
--------------------------------------------------------------------------------
1 | import path from "path";
2 | import {
3 | createLambda,
4 | shouldServe,
5 | rename,
6 | FileFsRef,
7 | BuildOptions,
8 | FileBlob
9 | } from '@now/build-utils';
10 |
11 | import {
12 | getPhpLibFiles,
13 | getIncludedFiles
14 | } from 'now-php/dist/utils';
15 |
16 | // ###########################
17 | // EXPORTS
18 | // ###########################
19 |
20 | export const version = 3;
21 |
22 | export async function build({
23 | files,
24 | entrypoint,
25 | workPath,
26 | config = {},
27 | meta = {},
28 | }: BuildOptions) {
29 | const includedFiles = await getIncludedFiles({ files, entrypoint, workPath, config, meta });
30 |
31 | const userFiles = rename(includedFiles, name => path.join('user', name));
32 | const bridgeFiles: Files = {
33 | ...await getPhpLibFiles(),
34 | ...{
35 | 'launcher.js': new FileFsRef({
36 | fsPath: path.join(__dirname, 'launcher.js'),
37 | }),
38 | 'helpers.js': new FileFsRef({
39 | fsPath: path.join(__dirname, 'helpers.js'),
40 | }),
41 | 'caddy': new FileFsRef({
42 | mode: 0o755,
43 | fsPath: path.join(__dirname, '../native/caddy'),
44 | }),
45 | 'Caddyfile': new FileFsRef({
46 | fsPath: path.join(__dirname, '../native/Caddyfile'),
47 | }),
48 | }
49 | };
50 |
51 | if (process.env.NOW_PHP_DEBUG === '1') {
52 | console.log('🐘 Entrypoint:', entrypoint);
53 | console.log('🐘 Config:', config);
54 | console.log('🐘 Work path:', workPath);
55 | console.log('🐘 Meta:', meta);
56 | console.log('🐘 User files:', Object.keys(userFiles));
57 | console.log('🐘 Bridge files:', Object.keys(bridgeFiles));
58 | console.log('🐘 PHP: php.ini', (bridgeFiles['php/php.ini'] as FileBlob).data.toString());
59 | }
60 |
61 | const lambda = await createLambda({
62 | files: { ...userFiles, ...bridgeFiles },
63 | handler: 'launcher.launcher',
64 | runtime: 'nodejs12.x',
65 | environment: {
66 | NOW_ENTRYPOINT: entrypoint,
67 | NOW_PHP_DEV: meta.isDev ? '1' : '0'
68 | },
69 | });
70 |
71 | return { output: lambda };
72 | };
73 |
74 | export { shouldServe };
75 |
--------------------------------------------------------------------------------
/runtimes/caddy/src/launcher.ts:
--------------------------------------------------------------------------------
1 | import { normalizeEvent, transformFromAwsRequest, transformToAwsResponse, isDev, getPhpDir, getUserDir } from "./helpers";
2 | import { ChildProcess, spawn, SpawnOptions } from "child_process";
3 | import http from 'http';
4 | import net from 'net';
5 |
6 | let connFpm: ChildProcess;
7 | let connCaddy: ChildProcess;
8 |
9 | async function startFpm() {
10 | if (connFpm) {
11 | console.log(`🐘 PHP FPM is already running`);
12 | return;
13 | }
14 |
15 | console.log(`🐘 Spawning: PHP-FPM`);
16 |
17 | // php spawn options
18 | const options: SpawnOptions = {
19 | stdio: ['pipe', 'pipe', 'pipe'],
20 | env: process.env
21 | };
22 |
23 | // now vs now-dev
24 | if (!isDev()) {
25 | options.env!.PATH = `${getPhpDir()}:${process.env.PATH}`;
26 | options.cwd = getPhpDir();
27 | } else {
28 | options.cwd = getUserDir();
29 | }
30 |
31 | const fpm = spawn(
32 | 'php-fpm',
33 | ['-c', 'php.ini', '--fpm-config', 'php-fpm.ini', '--nodaemonize'],
34 | options
35 | );
36 |
37 | fpm.on('close', function (code, signal) {
38 | console.log(`🐘 PHP-FPM process closed code ${code} and signal ${signal}`);
39 | });
40 |
41 | fpm.on('error', function (err) {
42 | console.error(`🐘 PHP-FPM process errored ${err}`);
43 | });
44 |
45 | process.on('exit', () => {
46 | fpm.kill();
47 | })
48 |
49 | await whenPortOpens(9000, 400);
50 |
51 | connFpm = fpm;
52 | }
53 |
54 | async function startCaddy() {
55 | if (connCaddy) {
56 | console.log(`🚀 Caddy is already running`);
57 | return;
58 | }
59 |
60 | console.log(`🚀 Spawning Caddy`);
61 |
62 | const caddy = spawn(
63 | './caddy',
64 | ['-conf', 'Caddyfile', '-root', '/var/task/user'],
65 | {
66 | stdio: 'inherit',
67 | cwd: '/var/task',
68 | },
69 | );
70 |
71 | caddy.on('close', function (code, signal) {
72 | console.log(`🚀 Caddy process closed code ${code} and signal ${signal}`);
73 | });
74 |
75 | caddy.on('error', function (err) {
76 | console.error(`🚀 Caddy process errored ${err}`);
77 | });
78 |
79 | process.on('exit', () => {
80 | caddy.kill();
81 | })
82 |
83 | await whenPortOpens(8000, 400);
84 |
85 | connCaddy = caddy;
86 | }
87 |
88 | function whenPortOpensCallback(port: number, attempts: number, cb: (error?: string) => void) {
89 | const client = net.connect(port, '127.0.0.1');
90 | client.on('error', (error: string) => {
91 | if (!attempts) return cb(error);
92 | setTimeout(() => {
93 | whenPortOpensCallback(port, attempts - 1, cb);
94 | }, 50);
95 | });
96 | client.on('connect', () => {
97 | client.destroy();
98 | cb();
99 | });
100 | }
101 |
102 | function whenPortOpens(port: number, attempts: number): Promise {
103 | return new Promise((resolve, reject) => {
104 | whenPortOpensCallback(port, attempts, (error?: string) => {
105 | if (error) {
106 | reject(error);
107 | } else {
108 | resolve();
109 | }
110 | });
111 | });
112 | }
113 |
114 | async function query({ uri, headers, method, body }: PhpInput): Promise {
115 | if (!connFpm || !connCaddy) {
116 | await Promise.all([
117 | startFpm(),
118 | startCaddy()
119 | ]);
120 | }
121 |
122 | return new Promise(resolve => {
123 | const options = {
124 | hostname: '127.0.0.1',
125 | port: 8000,
126 | path: `${uri}`,
127 | method,
128 | headers,
129 | };
130 |
131 | const req = http.request(options, (res) => {
132 | const chunks: Uint8Array[] = [];
133 |
134 | res.on('data', (data) => {
135 | chunks.push(data);
136 | });
137 | res.on('end', () => {
138 | resolve({
139 | statusCode: res.statusCode || 200,
140 | headers: res.headers,
141 | body: Buffer.concat(chunks)
142 | });
143 | });
144 | });
145 |
146 | req.on('error', (error) => {
147 | console.error('🚀 Caddy HTTP errored', error);
148 | resolve({
149 | body: Buffer.from(`🚀 Caddy HTTP error: ${error}`),
150 | headers: {},
151 | statusCode: 500
152 | });
153 | });
154 |
155 | if (body) {
156 | req.write(body);
157 | }
158 |
159 | req.end();
160 | });
161 | }
162 |
163 | async function launcher(event: Event): Promise {
164 | const awsRequest = normalizeEvent(event);
165 | const input = await transformFromAwsRequest(awsRequest);
166 | const output = await query(input);
167 | return transformToAwsResponse(output);
168 | }
169 |
170 | exports.launcher = launcher;
171 |
172 | // (async function() {
173 | // console.log(await launcher({
174 | // httpMethod: 'GET',
175 | // path: '/index.php'
176 | // }));
177 | // })();
178 |
--------------------------------------------------------------------------------
/runtimes/caddy/src/types.d.ts:
--------------------------------------------------------------------------------
1 | type Headers = { [k: string]: string | string[] | undefined };
2 |
3 | interface Files {
4 | [filePath: string]: import('@now/build-utils').File;
5 | }
6 |
7 | interface MetaOptions {
8 | meta: import('@now/build-utils').Meta;
9 | }
10 |
11 | interface PhpIni {
12 | [k: string]: any,
13 | }
14 |
15 | interface AwsRequest {
16 | method: string,
17 | path: string,
18 | host: string,
19 | headers: Headers,
20 | body: string,
21 | }
22 |
23 | interface AwsResponse {
24 | statusCode: number,
25 | headers: Headers,
26 | body: string,
27 | encoding?: string
28 | }
29 |
30 | interface Event {
31 | Action: string,
32 | body: string,
33 | httpMethod: string,
34 | path: string,
35 | host: string,
36 | headers: Headers,
37 | encoding: string | undefined | null,
38 | }
39 |
40 | interface InvokedEvent {
41 | method: string,
42 | path: string,
43 | host: string,
44 | headers: Headers,
45 | encoding: string | undefined | null,
46 | }
47 |
48 | interface PhpInput {
49 | filename: string,
50 | path: string,
51 | uri: string,
52 | host: string,
53 | method: string,
54 | headers: Headers,
55 | body: string,
56 | }
57 |
58 | interface PhpOutput {
59 | statusCode: number,
60 | headers: Headers,
61 | body: Buffer,
62 | }
63 |
--------------------------------------------------------------------------------
/runtimes/caddy/test/spec/helpers.js:
--------------------------------------------------------------------------------
1 | const helpers = require('../../dist/helpers');
2 |
3 | test('transform to AWS response', () => {
4 | const response = helpers.transformToAwsResponse({
5 | statusCode: 200,
6 | headers: [],
7 | body: "foo"
8 | });
9 |
10 | expect(response.body).toBe("foo");
11 | });
12 |
--------------------------------------------------------------------------------
/runtimes/caddy/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "strict": true,
4 | "esModuleInterop": true,
5 | "lib": [
6 | "esnext"
7 | ],
8 | "target": "esnext",
9 | "module": "commonjs",
10 | "outDir": "dist",
11 | "sourceMap": false,
12 | "declaration": true,
13 | "typeRoots": [
14 | "./node_modules/@types"
15 | ]
16 | },
17 | "include": [
18 | "src/**/*"
19 | ],
20 | "exclude": [
21 | "dist",
22 | "node_modules",
23 | "test"
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/runtimes/debug/.gitignore:
--------------------------------------------------------------------------------
1 | # NodeJS
2 | /node_modules
3 |
4 | # App
5 | /dist
6 |
--------------------------------------------------------------------------------
/runtimes/debug/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vercel-debug",
3 | "version": "0.0.1",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "vercel-debug",
9 | "version": "0.0.1",
10 | "license": "MIT",
11 | "devDependencies": {
12 | "@now/build-utils": "^2.7.0",
13 | "@types/node": "^18.11.4",
14 | "typescript": "^4.6.2"
15 | }
16 | },
17 | "node_modules/@now/build-utils": {
18 | "version": "2.7.0",
19 | "resolved": "https://registry.npmjs.org/@now/build-utils/-/build-utils-2.7.0.tgz",
20 | "integrity": "sha512-5917PKoI3PgVkbEl3/tPMOR+z3UD20RTfoXhAwBEsP1HJAYEl+Mv5NawDgBLRsikz2drbZn1YTOLbadBujcPow==",
21 | "dev": true
22 | },
23 | "node_modules/@types/node": {
24 | "version": "18.11.4",
25 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.4.tgz",
26 | "integrity": "sha512-BxcJpBu8D3kv/GZkx/gSMz6VnTJREBj/4lbzYOQueUOELkt8WrO6zAcSPmp9uRPEW/d+lUO8QK0W2xnS1hEU0A==",
27 | "dev": true
28 | },
29 | "node_modules/typescript": {
30 | "version": "4.6.2",
31 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz",
32 | "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==",
33 | "dev": true,
34 | "bin": {
35 | "tsc": "bin/tsc",
36 | "tsserver": "bin/tsserver"
37 | },
38 | "engines": {
39 | "node": ">=4.2.0"
40 | }
41 | }
42 | },
43 | "dependencies": {
44 | "@now/build-utils": {
45 | "version": "2.7.0",
46 | "resolved": "https://registry.npmjs.org/@now/build-utils/-/build-utils-2.7.0.tgz",
47 | "integrity": "sha512-5917PKoI3PgVkbEl3/tPMOR+z3UD20RTfoXhAwBEsP1HJAYEl+Mv5NawDgBLRsikz2drbZn1YTOLbadBujcPow==",
48 | "dev": true
49 | },
50 | "@types/node": {
51 | "version": "18.11.4",
52 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.4.tgz",
53 | "integrity": "sha512-BxcJpBu8D3kv/GZkx/gSMz6VnTJREBj/4lbzYOQueUOELkt8WrO6zAcSPmp9uRPEW/d+lUO8QK0W2xnS1hEU0A==",
54 | "dev": true
55 | },
56 | "typescript": {
57 | "version": "4.6.2",
58 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz",
59 | "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==",
60 | "dev": true
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/runtimes/debug/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vercel-debug",
3 | "description": "Debug Runtime for Vercel platform",
4 | "version": "0.0.1",
5 | "license": "MIT",
6 | "main": "./dist/index.js",
7 | "homepage": "https://github.com/juicyfx/juicy",
8 | "repository": {
9 | "type": "git",
10 | "url": "https://github.com/juicyfx/juicy.git"
11 | },
12 | "scripts": {
13 | "watch": "tsc --watch",
14 | "build": "tsc",
15 | "prepublishOnly": "tsc"
16 | },
17 | "files": [
18 | "dist"
19 | ],
20 | "devDependencies": {
21 | "@now/build-utils": "^2.7.0",
22 | "@types/node": "^18.11.4",
23 | "typescript": "^4.6.2"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/runtimes/debug/src/index.ts:
--------------------------------------------------------------------------------
1 | const {
2 | createLambda,
3 | shouldServe,
4 | } = require('@now/build-utils');
5 | const FileFsRef = require('@now/build-utils/file-fs-ref.js');
6 | const path = require('path');
7 |
8 | exports.shouldServe = shouldServe;
9 |
10 | exports.build = async ({ entrypoint }) => {
11 | const bridgeFiles = {
12 | 'launcher.js': new FileFsRef({
13 | fsPath: path.join(__dirname, 'launcher.js'),
14 | }),
15 | }
16 |
17 | console.log('Bridge files:', Object.keys(bridgeFiles));
18 | console.log('Entrypoint:', entrypoint);
19 |
20 | const lambda = await createLambda({
21 | files: { ...bridgeFiles },
22 | handler: 'launcher.launcher',
23 | runtime: 'nodejs10.x',
24 | environment: {
25 | NOW_ENTRYPOINT: entrypoint,
26 | NOW_PURE_DEBUG: process.env.NOW_PURE_DEBUG,
27 | },
28 | });
29 |
30 | return { [entrypoint]: lambda };
31 | };
32 |
--------------------------------------------------------------------------------
/runtimes/debug/src/launcher.ts:
--------------------------------------------------------------------------------
1 | function normalizeEvent(event) {
2 | if (event.Action === 'Invoke') {
3 | const invokeEvent = JSON.parse(event.body);
4 |
5 | const {
6 | method, path, headers, encoding,
7 | } = invokeEvent;
8 |
9 | let { body } = invokeEvent;
10 |
11 | if (body) {
12 | if (encoding === 'base64') {
13 | body = Buffer.from(body, encoding);
14 | } else if (encoding === undefined) {
15 | body = Buffer.from(body);
16 | } else {
17 | throw new Error(`Unsupported encoding: ${encoding}`);
18 | }
19 | }
20 |
21 | return {
22 | method,
23 | path,
24 | headers,
25 | body,
26 | };
27 | }
28 |
29 | const {
30 | httpMethod: method, path, headers, body,
31 | } = event;
32 |
33 | return {
34 | method,
35 | path,
36 | headers,
37 | body,
38 | };
39 | }
40 |
41 | function transformToAwsResponse(payload) {
42 | return {
43 | statusCode: 200,
44 | body: Buffer.from(JSON.stringify(payload)).toString('base64'),
45 | headers: {
46 | "Content-Type": "application/json"
47 | },
48 | encoding: 'base64',
49 | };
50 | }
51 |
52 | async function launcher(event) {
53 | if (process.env.NOW_PURE_DEBUG) {
54 | console.log('Event', event);
55 | }
56 |
57 | const awsRequest = normalizeEvent(event);
58 |
59 | if (process.env.NOW_PURE_DEBUG) {
60 | console.log('Normalized event', awsRequest);
61 | }
62 |
63 | return transformToAwsResponse(awsRequest);
64 | }
65 |
66 | exports.launcher = launcher;
67 |
--------------------------------------------------------------------------------
/runtimes/debug/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "strict": true,
4 | "esModuleInterop": true,
5 | "target": "ES2018",
6 | "module": "CommonJS",
7 | "outDir": "dist",
8 | "sourceMap": false,
9 | "declaration": false,
10 | "typeRoots": [
11 | "./node_modules/@types",
12 | ],
13 | "noFallthroughCasesInSwitch": true,
14 | "noImplicitReturns": true,
15 | "noEmitOnError": true,
16 | "noUnusedLocals": true,
17 | "noUnusedParameters": true,
18 | "removeComments": true,
19 | "preserveConstEnums": true
20 | },
21 | "exclude": [
22 | "dist",
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/runtimes/md/.gitignore:
--------------------------------------------------------------------------------
1 | # NodeJS
2 | /node_modules
3 |
4 | # App
5 | /dist
6 |
--------------------------------------------------------------------------------
/runtimes/md/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vercel-md",
3 | "version": "0.0.5",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "vercel-md",
9 | "version": "0.0.5",
10 | "license": "MIT",
11 | "dependencies": {
12 | "rehype-document": "^6.0.0",
13 | "rehype-format": "^4.0.0",
14 | "rehype-stringify": "^9.0.0",
15 | "remark-parse": "^10.0.0",
16 | "remark-rehype": "^10.0.0",
17 | "unified": "^10.0.0",
18 | "unified-stream": "^2.0.0"
19 | },
20 | "devDependencies": {
21 | "@types/node": "^17.0.0",
22 | "@vercel/build-utils": "^5.4.1",
23 | "typescript": "^4.0.2"
24 | }
25 | },
26 | "node_modules/@types/debug": {
27 | "version": "4.1.7",
28 | "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz",
29 | "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==",
30 | "dependencies": {
31 | "@types/ms": "*"
32 | }
33 | },
34 | "node_modules/@types/hast": {
35 | "version": "2.3.2",
36 | "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.2.tgz",
37 | "integrity": "sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow==",
38 | "dependencies": {
39 | "@types/unist": "*"
40 | }
41 | },
42 | "node_modules/@types/mdast": {
43 | "version": "3.0.3",
44 | "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz",
45 | "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==",
46 | "dependencies": {
47 | "@types/unist": "*"
48 | }
49 | },
50 | "node_modules/@types/mdurl": {
51 | "version": "1.0.2",
52 | "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz",
53 | "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA=="
54 | },
55 | "node_modules/@types/ms": {
56 | "version": "0.7.31",
57 | "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
58 | "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
59 | },
60 | "node_modules/@types/node": {
61 | "version": "17.0.23",
62 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz",
63 | "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==",
64 | "dev": true
65 | },
66 | "node_modules/@types/unist": {
67 | "version": "2.0.3",
68 | "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz",
69 | "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ=="
70 | },
71 | "node_modules/@vercel/build-utils": {
72 | "version": "5.5.5",
73 | "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-5.5.5.tgz",
74 | "integrity": "sha512-ZBJpqnqm2OqYyWEqfRn0CYvlmSdOf/igtFy58x0bvSbJdN6Dx2rEw9sNg8SU7O/+zWpKP5rRfWcT6iql/p0sCg==",
75 | "dev": true
76 | },
77 | "node_modules/bail": {
78 | "version": "2.0.1",
79 | "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz",
80 | "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==",
81 | "funding": {
82 | "type": "github",
83 | "url": "https://github.com/sponsors/wooorm"
84 | }
85 | },
86 | "node_modules/ccount": {
87 | "version": "2.0.0",
88 | "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.0.tgz",
89 | "integrity": "sha512-VOR0NWFYX65n9gELQdcpqsie5L5ihBXuZGAgaPEp/U7IOSjnPMEH6geE+2f6lcekaNEfWzAHS45mPvSo5bqsUA==",
90 | "funding": {
91 | "type": "github",
92 | "url": "https://github.com/sponsors/wooorm"
93 | }
94 | },
95 | "node_modules/character-entities": {
96 | "version": "2.0.0",
97 | "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz",
98 | "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA==",
99 | "funding": {
100 | "type": "github",
101 | "url": "https://github.com/sponsors/wooorm"
102 | }
103 | },
104 | "node_modules/character-entities-html4": {
105 | "version": "2.0.0",
106 | "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.0.0.tgz",
107 | "integrity": "sha512-dwT2xh5ZhUAjyP96k57ilMKoTQyASaw9IAMR9U5c1lCu2RUni6O6jxfpUEdO2RcPT6TJFvr8pqsbami4Jk+2oA==",
108 | "funding": {
109 | "type": "github",
110 | "url": "https://github.com/sponsors/wooorm"
111 | }
112 | },
113 | "node_modules/character-entities-legacy": {
114 | "version": "2.0.0",
115 | "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz",
116 | "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA==",
117 | "funding": {
118 | "type": "github",
119 | "url": "https://github.com/sponsors/wooorm"
120 | }
121 | },
122 | "node_modules/character-reference-invalid": {
123 | "version": "2.0.0",
124 | "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz",
125 | "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g==",
126 | "funding": {
127 | "type": "github",
128 | "url": "https://github.com/sponsors/wooorm"
129 | }
130 | },
131 | "node_modules/comma-separated-tokens": {
132 | "version": "2.0.2",
133 | "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
134 | "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==",
135 | "funding": {
136 | "type": "github",
137 | "url": "https://github.com/sponsors/wooorm"
138 | }
139 | },
140 | "node_modules/debug": {
141 | "version": "4.3.2",
142 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
143 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
144 | "dependencies": {
145 | "ms": "2.1.2"
146 | },
147 | "engines": {
148 | "node": ">=6.0"
149 | },
150 | "peerDependenciesMeta": {
151 | "supports-color": {
152 | "optional": true
153 | }
154 | }
155 | },
156 | "node_modules/extend": {
157 | "version": "3.0.2",
158 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
159 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
160 | },
161 | "node_modules/hast-util-embedded": {
162 | "version": "2.0.0",
163 | "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-2.0.0.tgz",
164 | "integrity": "sha512-vEr54rDu2CheBM4nLkWbW8Rycf8HhkA/KsrDnlyKnvBTyhyO+vAG6twHnfUbiRGo56YeUBNCI4HFfHg3Wu+tig==",
165 | "dependencies": {
166 | "hast-util-is-element": "^2.0.0"
167 | },
168 | "funding": {
169 | "type": "opencollective",
170 | "url": "https://opencollective.com/unified"
171 | }
172 | },
173 | "node_modules/hast-util-has-property": {
174 | "version": "2.0.0",
175 | "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-2.0.0.tgz",
176 | "integrity": "sha512-4Qf++8o5v14us4Muv3HRj+Er6wTNGA/N9uCaZMty4JWvyFKLdhULrv4KE1b65AthsSO9TXSZnjuxS8ecIyhb0w==",
177 | "funding": {
178 | "type": "opencollective",
179 | "url": "https://opencollective.com/unified"
180 | }
181 | },
182 | "node_modules/hast-util-is-body-ok-link": {
183 | "version": "1.0.4",
184 | "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-1.0.4.tgz",
185 | "integrity": "sha512-mFblNpLvFbD8dG2Nw5dJBYZkxIHeph1JAh5yr4huI7T5m8cV0zaXNiqzKPX/JdjA+tIDF7c33u9cxK132KRjyQ==",
186 | "dependencies": {
187 | "hast-util-has-property": "^1.0.0",
188 | "hast-util-is-element": "^1.0.0"
189 | },
190 | "funding": {
191 | "type": "opencollective",
192 | "url": "https://opencollective.com/unified"
193 | }
194 | },
195 | "node_modules/hast-util-is-body-ok-link/node_modules/hast-util-has-property": {
196 | "version": "1.0.4",
197 | "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-1.0.4.tgz",
198 | "integrity": "sha512-ghHup2voGfgFoHMGnaLHOjbYFACKrRh9KFttdCzMCbFoBMJXiNi2+XTrPP8+q6cDJM/RSqlCfVWrjp1H201rZg==",
199 | "funding": {
200 | "type": "opencollective",
201 | "url": "https://opencollective.com/unified"
202 | }
203 | },
204 | "node_modules/hast-util-is-body-ok-link/node_modules/hast-util-is-element": {
205 | "version": "1.1.0",
206 | "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz",
207 | "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==",
208 | "funding": {
209 | "type": "opencollective",
210 | "url": "https://opencollective.com/unified"
211 | }
212 | },
213 | "node_modules/hast-util-is-element": {
214 | "version": "2.1.1",
215 | "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.1.tgz",
216 | "integrity": "sha512-ag0fiZfRWsPiR1udvnSbaazJLGv8qd8E+/e3rW8rUZhbKG4HNJmFL4QkEceN+22BgE+uozXY30z/s+2dL6Z++g==",
217 | "dependencies": {
218 | "@types/hast": "^2.0.0",
219 | "@types/unist": "^2.0.0"
220 | },
221 | "funding": {
222 | "type": "opencollective",
223 | "url": "https://opencollective.com/unified"
224 | }
225 | },
226 | "node_modules/hast-util-parse-selector": {
227 | "version": "3.1.0",
228 | "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz",
229 | "integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==",
230 | "dependencies": {
231 | "@types/hast": "^2.0.0"
232 | },
233 | "funding": {
234 | "type": "opencollective",
235 | "url": "https://opencollective.com/unified"
236 | }
237 | },
238 | "node_modules/hast-util-phrasing": {
239 | "version": "2.0.0",
240 | "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-2.0.0.tgz",
241 | "integrity": "sha512-4rFSiFpdmTtp4aAxki6obpEbVJ85fOEN8/A8bOByoCaqRDTtd1AKTw3P/cXgVm0/RDuaWj0tSd1pTb0Jw5QfdA==",
242 | "dependencies": {
243 | "hast-util-embedded": "^2.0.0",
244 | "hast-util-has-property": "^2.0.0",
245 | "hast-util-is-body-ok-link": "^1.0.0",
246 | "hast-util-is-element": "^2.0.0"
247 | },
248 | "funding": {
249 | "type": "opencollective",
250 | "url": "https://opencollective.com/unified"
251 | }
252 | },
253 | "node_modules/hast-util-to-html": {
254 | "version": "8.0.2",
255 | "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.2.tgz",
256 | "integrity": "sha512-ipLhUTMyyJi9F/LXaNDG9BrRdshP6obCfmUZYbE/+T639IdzqAOkKN4DyrEyID0gbb+rsC3PKf0XlviZwzomhw==",
257 | "dependencies": {
258 | "@types/hast": "^2.0.0",
259 | "ccount": "^2.0.0",
260 | "comma-separated-tokens": "^2.0.0",
261 | "hast-util-is-element": "^2.0.0",
262 | "hast-util-whitespace": "^2.0.0",
263 | "html-void-elements": "^2.0.0",
264 | "property-information": "^6.0.0",
265 | "space-separated-tokens": "^2.0.0",
266 | "stringify-entities": "^4.0.0",
267 | "unist-util-is": "^5.0.0"
268 | },
269 | "funding": {
270 | "type": "opencollective",
271 | "url": "https://opencollective.com/unified"
272 | }
273 | },
274 | "node_modules/hast-util-whitespace": {
275 | "version": "2.0.0",
276 | "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz",
277 | "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==",
278 | "funding": {
279 | "type": "opencollective",
280 | "url": "https://opencollective.com/unified"
281 | }
282 | },
283 | "node_modules/hastscript": {
284 | "version": "7.0.1",
285 | "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.1.tgz",
286 | "integrity": "sha512-3Nww02NdnAoLZlI4mifLRYU9jZ1PrMD+eYnnW3RGVKlRD2bW+fNTvr1KLnET/DAf8c6CMlMblXVUhXJiGIKwDA==",
287 | "dependencies": {
288 | "@types/hast": "^2.0.0",
289 | "comma-separated-tokens": "^2.0.0",
290 | "hast-util-parse-selector": "^3.0.0",
291 | "property-information": "^6.0.0",
292 | "space-separated-tokens": "^2.0.0"
293 | },
294 | "funding": {
295 | "type": "opencollective",
296 | "url": "https://opencollective.com/unified"
297 | }
298 | },
299 | "node_modules/hastscript/node_modules/comma-separated-tokens": {
300 | "version": "2.0.2",
301 | "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
302 | "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==",
303 | "funding": {
304 | "type": "github",
305 | "url": "https://github.com/sponsors/wooorm"
306 | }
307 | },
308 | "node_modules/hastscript/node_modules/property-information": {
309 | "version": "6.0.1",
310 | "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.0.1.tgz",
311 | "integrity": "sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg==",
312 | "funding": {
313 | "type": "github",
314 | "url": "https://github.com/sponsors/wooorm"
315 | }
316 | },
317 | "node_modules/hastscript/node_modules/space-separated-tokens": {
318 | "version": "2.0.1",
319 | "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
320 | "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==",
321 | "funding": {
322 | "type": "github",
323 | "url": "https://github.com/sponsors/wooorm"
324 | }
325 | },
326 | "node_modules/html-void-elements": {
327 | "version": "2.0.0",
328 | "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.0.tgz",
329 | "integrity": "sha512-4OYzQQsBt0G9bJ/nM9/DDsjm4+fVdzAaPJJcWk5QwA3GIAPxQEeOR0rsI8HbDHQz5Gta8pVvGnnTNSbZVEVvkQ==",
330 | "funding": {
331 | "type": "github",
332 | "url": "https://github.com/sponsors/wooorm"
333 | }
334 | },
335 | "node_modules/html-whitespace-sensitive-tag-names": {
336 | "version": "2.0.0",
337 | "resolved": "https://registry.npmjs.org/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-2.0.0.tgz",
338 | "integrity": "sha512-SQdIvTTtnHAx72xGUIUudvVOCjeWvV1U7rvSFnNGxTGRw3ZC7RES4Gw6dm1nMYD60TXvm6zjk/bWqgNc5pjQaw==",
339 | "funding": {
340 | "type": "opencollective",
341 | "url": "https://opencollective.com/unified"
342 | }
343 | },
344 | "node_modules/is-alphabetical": {
345 | "version": "2.0.0",
346 | "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.0.tgz",
347 | "integrity": "sha512-5OV8Toyq3oh4eq6sbWTYzlGdnMT/DPI5I0zxUBxjiigQsZycpkKF3kskkao3JyYGuYDHvhgJF+DrjMQp9SX86w==",
348 | "funding": {
349 | "type": "github",
350 | "url": "https://github.com/sponsors/wooorm"
351 | }
352 | },
353 | "node_modules/is-alphanumerical": {
354 | "version": "2.0.0",
355 | "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.0.tgz",
356 | "integrity": "sha512-t+2GlJ+hO9yagJ+jU3+HSh80VKvz/3cG2cxbGGm4S0hjKuhWQXgPVUVOZz3tqZzMjhmphZ+1TIJTlRZRoe6GCQ==",
357 | "dependencies": {
358 | "is-alphabetical": "^2.0.0",
359 | "is-decimal": "^2.0.0"
360 | },
361 | "funding": {
362 | "type": "github",
363 | "url": "https://github.com/sponsors/wooorm"
364 | }
365 | },
366 | "node_modules/is-buffer": {
367 | "version": "2.0.5",
368 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
369 | "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
370 | "funding": [
371 | {
372 | "type": "github",
373 | "url": "https://github.com/sponsors/feross"
374 | },
375 | {
376 | "type": "patreon",
377 | "url": "https://www.patreon.com/feross"
378 | },
379 | {
380 | "type": "consulting",
381 | "url": "https://feross.org/support"
382 | }
383 | ],
384 | "engines": {
385 | "node": ">=4"
386 | }
387 | },
388 | "node_modules/is-decimal": {
389 | "version": "2.0.0",
390 | "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.0.tgz",
391 | "integrity": "sha512-QfrfjQV0LjoWQ1K1XSoEZkTAzSa14RKVMa5zg3SdAfzEmQzRM4+tbSFWb78creCeA9rNBzaZal92opi1TwPWZw==",
392 | "funding": {
393 | "type": "github",
394 | "url": "https://github.com/sponsors/wooorm"
395 | }
396 | },
397 | "node_modules/is-hexadecimal": {
398 | "version": "2.0.0",
399 | "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.0.tgz",
400 | "integrity": "sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug==",
401 | "funding": {
402 | "type": "github",
403 | "url": "https://github.com/sponsors/wooorm"
404 | }
405 | },
406 | "node_modules/is-plain-obj": {
407 | "version": "4.0.0",
408 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
409 | "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
410 | "engines": {
411 | "node": ">=12"
412 | },
413 | "funding": {
414 | "url": "https://github.com/sponsors/sindresorhus"
415 | }
416 | },
417 | "node_modules/mdast-util-definitions": {
418 | "version": "5.1.0",
419 | "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz",
420 | "integrity": "sha512-5hcR7FL2EuZ4q6lLMUK5w4lHT2H3vqL9quPvYZ/Ku5iifrirfMHiGdhxdXMUbUkDmz5I+TYMd7nbaxUhbQkfpQ==",
421 | "dependencies": {
422 | "@types/mdast": "^3.0.0",
423 | "@types/unist": "^2.0.0",
424 | "unist-util-visit": "^3.0.0"
425 | },
426 | "funding": {
427 | "type": "opencollective",
428 | "url": "https://opencollective.com/unified"
429 | }
430 | },
431 | "node_modules/mdast-util-definitions/node_modules/unist-util-visit": {
432 | "version": "3.1.0",
433 | "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz",
434 | "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==",
435 | "dependencies": {
436 | "@types/unist": "^2.0.0",
437 | "unist-util-is": "^5.0.0",
438 | "unist-util-visit-parents": "^4.0.0"
439 | },
440 | "funding": {
441 | "type": "opencollective",
442 | "url": "https://opencollective.com/unified"
443 | }
444 | },
445 | "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": {
446 | "version": "4.1.1",
447 | "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz",
448 | "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==",
449 | "dependencies": {
450 | "@types/unist": "^2.0.0",
451 | "unist-util-is": "^5.0.0"
452 | },
453 | "funding": {
454 | "type": "opencollective",
455 | "url": "https://opencollective.com/unified"
456 | }
457 | },
458 | "node_modules/mdast-util-from-markdown": {
459 | "version": "1.0.0",
460 | "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.0.0.tgz",
461 | "integrity": "sha512-uj2G60sb7z1PNOeElFwCC9b/Se/lFXuLhVKFOAY2EHz/VvgbupTQRNXPoZl7rGpXYL6BNZgcgaybrlSWbo7n/g==",
462 | "dependencies": {
463 | "@types/mdast": "^3.0.0",
464 | "@types/unist": "^2.0.0",
465 | "mdast-util-to-string": "^3.0.0",
466 | "micromark": "^3.0.0",
467 | "micromark-util-decode-numeric-character-reference": "^1.0.0",
468 | "micromark-util-normalize-identifier": "^1.0.0",
469 | "micromark-util-symbol": "^1.0.0",
470 | "micromark-util-types": "^1.0.0",
471 | "parse-entities": "^3.0.0",
472 | "unist-util-stringify-position": "^3.0.0"
473 | },
474 | "funding": {
475 | "type": "opencollective",
476 | "url": "https://opencollective.com/unified"
477 | }
478 | },
479 | "node_modules/mdast-util-to-hast": {
480 | "version": "12.1.0",
481 | "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.1.0.tgz",
482 | "integrity": "sha512-dHfCt9Yh05AXEeghoziB3DjJV8oCIKdQmBJOPoAT1NlgMDBy+/MQn7Pxfq0jI8YRO1IfzcnmA/OU3FVVn/E5Sg==",
483 | "dependencies": {
484 | "@types/hast": "^2.0.0",
485 | "@types/mdast": "^3.0.0",
486 | "@types/mdurl": "^1.0.0",
487 | "mdast-util-definitions": "^5.0.0",
488 | "mdurl": "^1.0.0",
489 | "micromark-util-sanitize-uri": "^1.0.0",
490 | "unist-builder": "^3.0.0",
491 | "unist-util-generated": "^2.0.0",
492 | "unist-util-position": "^4.0.0",
493 | "unist-util-visit": "^4.0.0"
494 | },
495 | "funding": {
496 | "type": "opencollective",
497 | "url": "https://opencollective.com/unified"
498 | }
499 | },
500 | "node_modules/mdast-util-to-string": {
501 | "version": "3.1.0",
502 | "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz",
503 | "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==",
504 | "funding": {
505 | "type": "opencollective",
506 | "url": "https://opencollective.com/unified"
507 | }
508 | },
509 | "node_modules/mdurl": {
510 | "version": "1.0.1",
511 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
512 | "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
513 | },
514 | "node_modules/micromark": {
515 | "version": "3.0.3",
516 | "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.3.tgz",
517 | "integrity": "sha512-fWuHx+JKV4zA8WfCFor2DWP9XmsZkIiyWRGofr7P7IGfpRIlb7/C5wwusGsNyr1D8HI5arghZDG1Ikc0FBwS5Q==",
518 | "funding": [
519 | {
520 | "type": "GitHub Sponsors",
521 | "url": "https://github.com/sponsors/unifiedjs"
522 | },
523 | {
524 | "type": "OpenCollective",
525 | "url": "https://opencollective.com/unified"
526 | }
527 | ],
528 | "dependencies": {
529 | "@types/debug": "^4.0.0",
530 | "debug": "^4.0.0",
531 | "micromark-core-commonmark": "^1.0.0",
532 | "micromark-factory-space": "^1.0.0",
533 | "micromark-util-character": "^1.0.0",
534 | "micromark-util-chunked": "^1.0.0",
535 | "micromark-util-combine-extensions": "^1.0.0",
536 | "micromark-util-decode-numeric-character-reference": "^1.0.0",
537 | "micromark-util-encode": "^1.0.0",
538 | "micromark-util-normalize-identifier": "^1.0.0",
539 | "micromark-util-resolve-all": "^1.0.0",
540 | "micromark-util-sanitize-uri": "^1.0.0",
541 | "micromark-util-subtokenize": "^1.0.0",
542 | "micromark-util-symbol": "^1.0.0",
543 | "micromark-util-types": "^1.0.0",
544 | "parse-entities": "^3.0.0"
545 | }
546 | },
547 | "node_modules/micromark-core-commonmark": {
548 | "version": "1.0.0",
549 | "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.0.tgz",
550 | "integrity": "sha512-y9g7zymcKRBHM/aNBekstvs/Grpf+y4OEBULUTYvGZcusnp+JeOxmilJY4GMpo2/xY7iHQL9fjz5pD9pSAud9A==",
551 | "funding": [
552 | {
553 | "type": "GitHub Sponsors",
554 | "url": "https://github.com/sponsors/unifiedjs"
555 | },
556 | {
557 | "type": "OpenCollective",
558 | "url": "https://opencollective.com/unified"
559 | }
560 | ],
561 | "dependencies": {
562 | "micromark-factory-destination": "^1.0.0",
563 | "micromark-factory-label": "^1.0.0",
564 | "micromark-factory-space": "^1.0.0",
565 | "micromark-factory-title": "^1.0.0",
566 | "micromark-factory-whitespace": "^1.0.0",
567 | "micromark-util-character": "^1.0.0",
568 | "micromark-util-chunked": "^1.0.0",
569 | "micromark-util-classify-character": "^1.0.0",
570 | "micromark-util-html-tag-name": "^1.0.0",
571 | "micromark-util-normalize-identifier": "^1.0.0",
572 | "micromark-util-resolve-all": "^1.0.0",
573 | "micromark-util-subtokenize": "^1.0.0",
574 | "micromark-util-symbol": "^1.0.0",
575 | "micromark-util-types": "^1.0.0",
576 | "parse-entities": "^3.0.0"
577 | }
578 | },
579 | "node_modules/micromark-factory-destination": {
580 | "version": "1.0.0",
581 | "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz",
582 | "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==",
583 | "funding": [
584 | {
585 | "type": "GitHub Sponsors",
586 | "url": "https://github.com/sponsors/unifiedjs"
587 | },
588 | {
589 | "type": "OpenCollective",
590 | "url": "https://opencollective.com/unified"
591 | }
592 | ],
593 | "dependencies": {
594 | "micromark-util-character": "^1.0.0",
595 | "micromark-util-symbol": "^1.0.0",
596 | "micromark-util-types": "^1.0.0"
597 | }
598 | },
599 | "node_modules/micromark-factory-label": {
600 | "version": "1.0.0",
601 | "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.0.tgz",
602 | "integrity": "sha512-XWEucVZb+qBCe2jmlOnWr6sWSY6NHx+wtpgYFsm4G+dufOf6tTQRRo0bdO7XSlGPu5fyjpJenth6Ksnc5Mwfww==",
603 | "funding": [
604 | {
605 | "type": "GitHub Sponsors",
606 | "url": "https://github.com/sponsors/unifiedjs"
607 | },
608 | {
609 | "type": "OpenCollective",
610 | "url": "https://opencollective.com/unified"
611 | }
612 | ],
613 | "dependencies": {
614 | "micromark-util-character": "^1.0.0",
615 | "micromark-util-symbol": "^1.0.0",
616 | "micromark-util-types": "^1.0.0"
617 | }
618 | },
619 | "node_modules/micromark-factory-space": {
620 | "version": "1.0.0",
621 | "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz",
622 | "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==",
623 | "funding": [
624 | {
625 | "type": "GitHub Sponsors",
626 | "url": "https://github.com/sponsors/unifiedjs"
627 | },
628 | {
629 | "type": "OpenCollective",
630 | "url": "https://opencollective.com/unified"
631 | }
632 | ],
633 | "dependencies": {
634 | "micromark-util-character": "^1.0.0",
635 | "micromark-util-types": "^1.0.0"
636 | }
637 | },
638 | "node_modules/micromark-factory-title": {
639 | "version": "1.0.0",
640 | "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.0.tgz",
641 | "integrity": "sha512-flvC7Gx0dWVWorXuBl09Cr3wB5FTuYec8pMGVySIp2ZlqTcIjN/lFohZcP0EG//krTptm34kozHk7aK/CleCfA==",
642 | "funding": [
643 | {
644 | "type": "GitHub Sponsors",
645 | "url": "https://github.com/sponsors/unifiedjs"
646 | },
647 | {
648 | "type": "OpenCollective",
649 | "url": "https://opencollective.com/unified"
650 | }
651 | ],
652 | "dependencies": {
653 | "micromark-factory-space": "^1.0.0",
654 | "micromark-util-character": "^1.0.0",
655 | "micromark-util-symbol": "^1.0.0",
656 | "micromark-util-types": "^1.0.0"
657 | }
658 | },
659 | "node_modules/micromark-factory-whitespace": {
660 | "version": "1.0.0",
661 | "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz",
662 | "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==",
663 | "funding": [
664 | {
665 | "type": "GitHub Sponsors",
666 | "url": "https://github.com/sponsors/unifiedjs"
667 | },
668 | {
669 | "type": "OpenCollective",
670 | "url": "https://opencollective.com/unified"
671 | }
672 | ],
673 | "dependencies": {
674 | "micromark-factory-space": "^1.0.0",
675 | "micromark-util-character": "^1.0.0",
676 | "micromark-util-symbol": "^1.0.0",
677 | "micromark-util-types": "^1.0.0"
678 | }
679 | },
680 | "node_modules/micromark-util-character": {
681 | "version": "1.1.0",
682 | "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz",
683 | "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==",
684 | "funding": [
685 | {
686 | "type": "GitHub Sponsors",
687 | "url": "https://github.com/sponsors/unifiedjs"
688 | },
689 | {
690 | "type": "OpenCollective",
691 | "url": "https://opencollective.com/unified"
692 | }
693 | ],
694 | "dependencies": {
695 | "micromark-util-symbol": "^1.0.0",
696 | "micromark-util-types": "^1.0.0"
697 | }
698 | },
699 | "node_modules/micromark-util-chunked": {
700 | "version": "1.0.0",
701 | "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz",
702 | "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==",
703 | "funding": [
704 | {
705 | "type": "GitHub Sponsors",
706 | "url": "https://github.com/sponsors/unifiedjs"
707 | },
708 | {
709 | "type": "OpenCollective",
710 | "url": "https://opencollective.com/unified"
711 | }
712 | ],
713 | "dependencies": {
714 | "micromark-util-symbol": "^1.0.0"
715 | }
716 | },
717 | "node_modules/micromark-util-classify-character": {
718 | "version": "1.0.0",
719 | "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz",
720 | "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==",
721 | "funding": [
722 | {
723 | "type": "GitHub Sponsors",
724 | "url": "https://github.com/sponsors/unifiedjs"
725 | },
726 | {
727 | "type": "OpenCollective",
728 | "url": "https://opencollective.com/unified"
729 | }
730 | ],
731 | "dependencies": {
732 | "micromark-util-character": "^1.0.0",
733 | "micromark-util-symbol": "^1.0.0",
734 | "micromark-util-types": "^1.0.0"
735 | }
736 | },
737 | "node_modules/micromark-util-combine-extensions": {
738 | "version": "1.0.0",
739 | "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz",
740 | "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==",
741 | "funding": [
742 | {
743 | "type": "GitHub Sponsors",
744 | "url": "https://github.com/sponsors/unifiedjs"
745 | },
746 | {
747 | "type": "OpenCollective",
748 | "url": "https://opencollective.com/unified"
749 | }
750 | ],
751 | "dependencies": {
752 | "micromark-util-chunked": "^1.0.0",
753 | "micromark-util-types": "^1.0.0"
754 | }
755 | },
756 | "node_modules/micromark-util-decode-numeric-character-reference": {
757 | "version": "1.0.0",
758 | "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz",
759 | "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==",
760 | "funding": [
761 | {
762 | "type": "GitHub Sponsors",
763 | "url": "https://github.com/sponsors/unifiedjs"
764 | },
765 | {
766 | "type": "OpenCollective",
767 | "url": "https://opencollective.com/unified"
768 | }
769 | ],
770 | "dependencies": {
771 | "micromark-util-symbol": "^1.0.0"
772 | }
773 | },
774 | "node_modules/micromark-util-encode": {
775 | "version": "1.0.0",
776 | "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz",
777 | "integrity": "sha512-cJpFVM768h6zkd8qJ1LNRrITfY4gwFt+tziPcIf71Ui8yFzY9wG3snZQqiWVq93PG4Sw6YOtcNiKJfVIs9qfGg==",
778 | "funding": [
779 | {
780 | "type": "GitHub Sponsors",
781 | "url": "https://github.com/sponsors/unifiedjs"
782 | },
783 | {
784 | "type": "OpenCollective",
785 | "url": "https://opencollective.com/unified"
786 | }
787 | ]
788 | },
789 | "node_modules/micromark-util-html-tag-name": {
790 | "version": "1.0.0",
791 | "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz",
792 | "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==",
793 | "funding": [
794 | {
795 | "type": "GitHub Sponsors",
796 | "url": "https://github.com/sponsors/unifiedjs"
797 | },
798 | {
799 | "type": "OpenCollective",
800 | "url": "https://opencollective.com/unified"
801 | }
802 | ]
803 | },
804 | "node_modules/micromark-util-normalize-identifier": {
805 | "version": "1.0.0",
806 | "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz",
807 | "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==",
808 | "funding": [
809 | {
810 | "type": "GitHub Sponsors",
811 | "url": "https://github.com/sponsors/unifiedjs"
812 | },
813 | {
814 | "type": "OpenCollective",
815 | "url": "https://opencollective.com/unified"
816 | }
817 | ],
818 | "dependencies": {
819 | "micromark-util-symbol": "^1.0.0"
820 | }
821 | },
822 | "node_modules/micromark-util-resolve-all": {
823 | "version": "1.0.0",
824 | "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz",
825 | "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==",
826 | "funding": [
827 | {
828 | "type": "GitHub Sponsors",
829 | "url": "https://github.com/sponsors/unifiedjs"
830 | },
831 | {
832 | "type": "OpenCollective",
833 | "url": "https://opencollective.com/unified"
834 | }
835 | ],
836 | "dependencies": {
837 | "micromark-util-types": "^1.0.0"
838 | }
839 | },
840 | "node_modules/micromark-util-sanitize-uri": {
841 | "version": "1.0.0",
842 | "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz",
843 | "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==",
844 | "funding": [
845 | {
846 | "type": "GitHub Sponsors",
847 | "url": "https://github.com/sponsors/unifiedjs"
848 | },
849 | {
850 | "type": "OpenCollective",
851 | "url": "https://opencollective.com/unified"
852 | }
853 | ],
854 | "dependencies": {
855 | "micromark-util-character": "^1.0.0",
856 | "micromark-util-encode": "^1.0.0",
857 | "micromark-util-symbol": "^1.0.0"
858 | }
859 | },
860 | "node_modules/micromark-util-subtokenize": {
861 | "version": "1.0.0",
862 | "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.0.tgz",
863 | "integrity": "sha512-EsnG2qscmcN5XhkqQBZni/4oQbLFjz9yk3ZM/P8a3YUjwV6+6On2wehr1ALx0MxK3+XXXLTzuBKHDFeDFYRdgQ==",
864 | "funding": [
865 | {
866 | "type": "GitHub Sponsors",
867 | "url": "https://github.com/sponsors/unifiedjs"
868 | },
869 | {
870 | "type": "OpenCollective",
871 | "url": "https://opencollective.com/unified"
872 | }
873 | ],
874 | "dependencies": {
875 | "micromark-util-chunked": "^1.0.0",
876 | "micromark-util-symbol": "^1.0.0",
877 | "micromark-util-types": "^1.0.0"
878 | }
879 | },
880 | "node_modules/micromark-util-symbol": {
881 | "version": "1.0.0",
882 | "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz",
883 | "integrity": "sha512-NZA01jHRNCt4KlOROn8/bGi6vvpEmlXld7EHcRH+aYWUfL3Wc8JLUNNlqUMKa0hhz6GrpUWsHtzPmKof57v0gQ==",
884 | "funding": [
885 | {
886 | "type": "GitHub Sponsors",
887 | "url": "https://github.com/sponsors/unifiedjs"
888 | },
889 | {
890 | "type": "OpenCollective",
891 | "url": "https://opencollective.com/unified"
892 | }
893 | ]
894 | },
895 | "node_modules/micromark-util-types": {
896 | "version": "1.0.0",
897 | "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.0.tgz",
898 | "integrity": "sha512-psf1WAaP1B77WpW4mBGDkTr+3RsPuDAgsvlP47GJzbH1jmjH8xjOx7Z6kp84L8oqHmy5pYO3Ev46odosZV+3AA==",
899 | "funding": [
900 | {
901 | "type": "GitHub Sponsors",
902 | "url": "https://github.com/sponsors/unifiedjs"
903 | },
904 | {
905 | "type": "OpenCollective",
906 | "url": "https://opencollective.com/unified"
907 | }
908 | ]
909 | },
910 | "node_modules/ms": {
911 | "version": "2.1.2",
912 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
913 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
914 | },
915 | "node_modules/parse-entities": {
916 | "version": "3.0.0",
917 | "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-3.0.0.tgz",
918 | "integrity": "sha512-AJlcIFDNPEP33KyJLguv0xJc83BNvjxwpuUIcetyXUsLpVXAUCePJ5kIoYtEN2R1ac0cYaRu/vk9dVFkewHQhQ==",
919 | "dependencies": {
920 | "character-entities": "^2.0.0",
921 | "character-entities-legacy": "^2.0.0",
922 | "character-reference-invalid": "^2.0.0",
923 | "is-alphanumerical": "^2.0.0",
924 | "is-decimal": "^2.0.0",
925 | "is-hexadecimal": "^2.0.0"
926 | },
927 | "funding": {
928 | "type": "github",
929 | "url": "https://github.com/sponsors/wooorm"
930 | }
931 | },
932 | "node_modules/property-information": {
933 | "version": "6.0.1",
934 | "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.0.1.tgz",
935 | "integrity": "sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg==",
936 | "funding": {
937 | "type": "github",
938 | "url": "https://github.com/sponsors/wooorm"
939 | }
940 | },
941 | "node_modules/rehype-document": {
942 | "version": "6.1.0",
943 | "resolved": "https://registry.npmjs.org/rehype-document/-/rehype-document-6.1.0.tgz",
944 | "integrity": "sha512-znEODHIhSjfBlvFO6z9k/6z7lJor1hqqpYy15W5vj/VLxcWsCL22hBdDSai5tYOymmGOInDLvepmS+6MIIXjFg==",
945 | "dependencies": {
946 | "@types/hast": "^2.0.0",
947 | "hastscript": "^7.0.0",
948 | "unified": "^10.0.0"
949 | },
950 | "funding": {
951 | "type": "opencollective",
952 | "url": "https://opencollective.com/unified"
953 | }
954 | },
955 | "node_modules/rehype-format": {
956 | "version": "4.0.1",
957 | "resolved": "https://registry.npmjs.org/rehype-format/-/rehype-format-4.0.1.tgz",
958 | "integrity": "sha512-HA92WeqFri00yiClrz54IIpM9no2DH9Mgy5aFmInNODoAYn+hN42a6oqJTIie2nj0HwFyV7JvOYx5YHBphN8mw==",
959 | "dependencies": {
960 | "@types/hast": "^2.0.0",
961 | "hast-util-embedded": "^2.0.0",
962 | "hast-util-is-element": "^2.0.0",
963 | "hast-util-phrasing": "^2.0.0",
964 | "hast-util-whitespace": "^2.0.0",
965 | "html-whitespace-sensitive-tag-names": "^2.0.0",
966 | "rehype-minify-whitespace": "^5.0.0",
967 | "unified": "^10.0.0",
968 | "unist-util-visit-parents": "^5.0.0"
969 | },
970 | "funding": {
971 | "type": "opencollective",
972 | "url": "https://opencollective.com/unified"
973 | }
974 | },
975 | "node_modules/rehype-minify-whitespace": {
976 | "version": "5.0.0",
977 | "resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-5.0.0.tgz",
978 | "integrity": "sha512-cUkQldYx8jpWM6FZmCkOF/+mev09+5NAtBzUFZgnfXsIoglxo3h6t3S3JbNouiaqIDE6vbpI+GQpOg0xD3Z7kg==",
979 | "dependencies": {
980 | "@types/hast": "^2.0.0",
981 | "hast-util-embedded": "^2.0.0",
982 | "hast-util-is-element": "^2.0.0",
983 | "hast-util-whitespace": "^2.0.0",
984 | "unified": "^10.0.0",
985 | "unist-util-is": "^5.0.0"
986 | },
987 | "funding": {
988 | "type": "opencollective",
989 | "url": "https://opencollective.com/unified"
990 | }
991 | },
992 | "node_modules/rehype-stringify": {
993 | "version": "9.0.3",
994 | "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz",
995 | "integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==",
996 | "dependencies": {
997 | "@types/hast": "^2.0.0",
998 | "hast-util-to-html": "^8.0.0",
999 | "unified": "^10.0.0"
1000 | },
1001 | "funding": {
1002 | "type": "opencollective",
1003 | "url": "https://opencollective.com/unified"
1004 | }
1005 | },
1006 | "node_modules/remark-parse": {
1007 | "version": "10.0.1",
1008 | "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz",
1009 | "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==",
1010 | "dependencies": {
1011 | "@types/mdast": "^3.0.0",
1012 | "mdast-util-from-markdown": "^1.0.0",
1013 | "unified": "^10.0.0"
1014 | },
1015 | "funding": {
1016 | "type": "opencollective",
1017 | "url": "https://opencollective.com/unified"
1018 | }
1019 | },
1020 | "node_modules/remark-rehype": {
1021 | "version": "10.1.0",
1022 | "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz",
1023 | "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==",
1024 | "dependencies": {
1025 | "@types/hast": "^2.0.0",
1026 | "@types/mdast": "^3.0.0",
1027 | "mdast-util-to-hast": "^12.1.0",
1028 | "unified": "^10.0.0"
1029 | },
1030 | "funding": {
1031 | "type": "opencollective",
1032 | "url": "https://opencollective.com/unified"
1033 | }
1034 | },
1035 | "node_modules/space-separated-tokens": {
1036 | "version": "2.0.1",
1037 | "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
1038 | "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==",
1039 | "funding": {
1040 | "type": "github",
1041 | "url": "https://github.com/sponsors/wooorm"
1042 | }
1043 | },
1044 | "node_modules/stringify-entities": {
1045 | "version": "4.0.1",
1046 | "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.1.tgz",
1047 | "integrity": "sha512-gmMQxKXPWIO3NXNSPyWNhlYcBNGpPA/487D+9dLPnU4xBnIrnHdr8cv5rGJOS/1BRxEXRb7uKwg7BA36IWV7xg==",
1048 | "dependencies": {
1049 | "character-entities-html4": "^2.0.0",
1050 | "character-entities-legacy": "^2.0.0"
1051 | },
1052 | "funding": {
1053 | "type": "github",
1054 | "url": "https://github.com/sponsors/wooorm"
1055 | }
1056 | },
1057 | "node_modules/trough": {
1058 | "version": "2.0.2",
1059 | "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz",
1060 | "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==",
1061 | "funding": {
1062 | "type": "github",
1063 | "url": "https://github.com/sponsors/wooorm"
1064 | }
1065 | },
1066 | "node_modules/typescript": {
1067 | "version": "4.8.2",
1068 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz",
1069 | "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==",
1070 | "dev": true,
1071 | "bin": {
1072 | "tsc": "bin/tsc",
1073 | "tsserver": "bin/tsserver"
1074 | },
1075 | "engines": {
1076 | "node": ">=4.2.0"
1077 | }
1078 | },
1079 | "node_modules/unified": {
1080 | "version": "10.1.1",
1081 | "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.1.tgz",
1082 | "integrity": "sha512-v4ky1+6BN9X3pQrOdkFIPWAaeDsHPE1svRDxq7YpTc2plkIqFMwukfqM+l0ewpP9EfwARlt9pPFAeWYhHm8X9w==",
1083 | "dependencies": {
1084 | "@types/unist": "^2.0.0",
1085 | "bail": "^2.0.0",
1086 | "extend": "^3.0.0",
1087 | "is-buffer": "^2.0.0",
1088 | "is-plain-obj": "^4.0.0",
1089 | "trough": "^2.0.0",
1090 | "vfile": "^5.0.0"
1091 | },
1092 | "funding": {
1093 | "type": "opencollective",
1094 | "url": "https://opencollective.com/unified"
1095 | }
1096 | },
1097 | "node_modules/unified-stream": {
1098 | "version": "2.0.0",
1099 | "resolved": "https://registry.npmjs.org/unified-stream/-/unified-stream-2.0.0.tgz",
1100 | "integrity": "sha512-KdwODjgqGsTbHMLqm57qLxNAkbCboD5EMPC4BULs/9iy5ZTsw3xgc0BUjeCmABt/yfZt0k7rgkBLcdiZ8LwZug==",
1101 | "dependencies": {
1102 | "unified": "^10.0.0",
1103 | "vfile": "^5.0.0"
1104 | },
1105 | "funding": {
1106 | "type": "opencollective",
1107 | "url": "https://opencollective.com/unified"
1108 | }
1109 | },
1110 | "node_modules/unist-builder": {
1111 | "version": "3.0.0",
1112 | "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz",
1113 | "integrity": "sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==",
1114 | "dependencies": {
1115 | "@types/unist": "^2.0.0"
1116 | },
1117 | "funding": {
1118 | "type": "opencollective",
1119 | "url": "https://opencollective.com/unified"
1120 | }
1121 | },
1122 | "node_modules/unist-util-generated": {
1123 | "version": "2.0.0",
1124 | "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz",
1125 | "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==",
1126 | "funding": {
1127 | "type": "opencollective",
1128 | "url": "https://opencollective.com/unified"
1129 | }
1130 | },
1131 | "node_modules/unist-util-is": {
1132 | "version": "5.1.1",
1133 | "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
1134 | "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==",
1135 | "funding": {
1136 | "type": "opencollective",
1137 | "url": "https://opencollective.com/unified"
1138 | }
1139 | },
1140 | "node_modules/unist-util-position": {
1141 | "version": "4.0.1",
1142 | "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz",
1143 | "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==",
1144 | "funding": {
1145 | "type": "opencollective",
1146 | "url": "https://opencollective.com/unified"
1147 | }
1148 | },
1149 | "node_modules/unist-util-stringify-position": {
1150 | "version": "3.0.0",
1151 | "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
1152 | "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
1153 | "dependencies": {
1154 | "@types/unist": "^2.0.0"
1155 | },
1156 | "funding": {
1157 | "type": "opencollective",
1158 | "url": "https://opencollective.com/unified"
1159 | }
1160 | },
1161 | "node_modules/unist-util-visit": {
1162 | "version": "4.1.0",
1163 | "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz",
1164 | "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==",
1165 | "dependencies": {
1166 | "@types/unist": "^2.0.0",
1167 | "unist-util-is": "^5.0.0",
1168 | "unist-util-visit-parents": "^5.0.0"
1169 | },
1170 | "funding": {
1171 | "type": "opencollective",
1172 | "url": "https://opencollective.com/unified"
1173 | }
1174 | },
1175 | "node_modules/unist-util-visit-parents": {
1176 | "version": "5.0.0",
1177 | "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz",
1178 | "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==",
1179 | "dependencies": {
1180 | "@types/unist": "^2.0.0",
1181 | "unist-util-is": "^5.0.0"
1182 | },
1183 | "funding": {
1184 | "type": "opencollective",
1185 | "url": "https://opencollective.com/unified"
1186 | }
1187 | },
1188 | "node_modules/vfile": {
1189 | "version": "5.0.2",
1190 | "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz",
1191 | "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==",
1192 | "dependencies": {
1193 | "@types/unist": "^2.0.0",
1194 | "is-buffer": "^2.0.0",
1195 | "unist-util-stringify-position": "^3.0.0",
1196 | "vfile-message": "^3.0.0"
1197 | },
1198 | "funding": {
1199 | "type": "opencollective",
1200 | "url": "https://opencollective.com/unified"
1201 | }
1202 | },
1203 | "node_modules/vfile-message": {
1204 | "version": "3.0.1",
1205 | "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz",
1206 | "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==",
1207 | "dependencies": {
1208 | "@types/unist": "^2.0.0",
1209 | "unist-util-stringify-position": "^3.0.0"
1210 | },
1211 | "funding": {
1212 | "type": "opencollective",
1213 | "url": "https://opencollective.com/unified"
1214 | }
1215 | }
1216 | },
1217 | "dependencies": {
1218 | "@types/debug": {
1219 | "version": "4.1.7",
1220 | "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz",
1221 | "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==",
1222 | "requires": {
1223 | "@types/ms": "*"
1224 | }
1225 | },
1226 | "@types/hast": {
1227 | "version": "2.3.2",
1228 | "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.2.tgz",
1229 | "integrity": "sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow==",
1230 | "requires": {
1231 | "@types/unist": "*"
1232 | }
1233 | },
1234 | "@types/mdast": {
1235 | "version": "3.0.3",
1236 | "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz",
1237 | "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==",
1238 | "requires": {
1239 | "@types/unist": "*"
1240 | }
1241 | },
1242 | "@types/mdurl": {
1243 | "version": "1.0.2",
1244 | "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz",
1245 | "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA=="
1246 | },
1247 | "@types/ms": {
1248 | "version": "0.7.31",
1249 | "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
1250 | "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
1251 | },
1252 | "@types/node": {
1253 | "version": "17.0.23",
1254 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz",
1255 | "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==",
1256 | "dev": true
1257 | },
1258 | "@types/unist": {
1259 | "version": "2.0.3",
1260 | "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz",
1261 | "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ=="
1262 | },
1263 | "@vercel/build-utils": {
1264 | "version": "5.5.5",
1265 | "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-5.5.5.tgz",
1266 | "integrity": "sha512-ZBJpqnqm2OqYyWEqfRn0CYvlmSdOf/igtFy58x0bvSbJdN6Dx2rEw9sNg8SU7O/+zWpKP5rRfWcT6iql/p0sCg==",
1267 | "dev": true
1268 | },
1269 | "bail": {
1270 | "version": "2.0.1",
1271 | "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz",
1272 | "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA=="
1273 | },
1274 | "ccount": {
1275 | "version": "2.0.0",
1276 | "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.0.tgz",
1277 | "integrity": "sha512-VOR0NWFYX65n9gELQdcpqsie5L5ihBXuZGAgaPEp/U7IOSjnPMEH6geE+2f6lcekaNEfWzAHS45mPvSo5bqsUA=="
1278 | },
1279 | "character-entities": {
1280 | "version": "2.0.0",
1281 | "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz",
1282 | "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA=="
1283 | },
1284 | "character-entities-html4": {
1285 | "version": "2.0.0",
1286 | "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.0.0.tgz",
1287 | "integrity": "sha512-dwT2xh5ZhUAjyP96k57ilMKoTQyASaw9IAMR9U5c1lCu2RUni6O6jxfpUEdO2RcPT6TJFvr8pqsbami4Jk+2oA=="
1288 | },
1289 | "character-entities-legacy": {
1290 | "version": "2.0.0",
1291 | "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz",
1292 | "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA=="
1293 | },
1294 | "character-reference-invalid": {
1295 | "version": "2.0.0",
1296 | "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz",
1297 | "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g=="
1298 | },
1299 | "comma-separated-tokens": {
1300 | "version": "2.0.2",
1301 | "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
1302 | "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg=="
1303 | },
1304 | "debug": {
1305 | "version": "4.3.2",
1306 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
1307 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
1308 | "requires": {
1309 | "ms": "2.1.2"
1310 | }
1311 | },
1312 | "extend": {
1313 | "version": "3.0.2",
1314 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1315 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
1316 | },
1317 | "hast-util-embedded": {
1318 | "version": "2.0.0",
1319 | "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-2.0.0.tgz",
1320 | "integrity": "sha512-vEr54rDu2CheBM4nLkWbW8Rycf8HhkA/KsrDnlyKnvBTyhyO+vAG6twHnfUbiRGo56YeUBNCI4HFfHg3Wu+tig==",
1321 | "requires": {
1322 | "hast-util-is-element": "^2.0.0"
1323 | }
1324 | },
1325 | "hast-util-has-property": {
1326 | "version": "2.0.0",
1327 | "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-2.0.0.tgz",
1328 | "integrity": "sha512-4Qf++8o5v14us4Muv3HRj+Er6wTNGA/N9uCaZMty4JWvyFKLdhULrv4KE1b65AthsSO9TXSZnjuxS8ecIyhb0w=="
1329 | },
1330 | "hast-util-is-body-ok-link": {
1331 | "version": "1.0.4",
1332 | "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-1.0.4.tgz",
1333 | "integrity": "sha512-mFblNpLvFbD8dG2Nw5dJBYZkxIHeph1JAh5yr4huI7T5m8cV0zaXNiqzKPX/JdjA+tIDF7c33u9cxK132KRjyQ==",
1334 | "requires": {
1335 | "hast-util-has-property": "^1.0.0",
1336 | "hast-util-is-element": "^1.0.0"
1337 | },
1338 | "dependencies": {
1339 | "hast-util-has-property": {
1340 | "version": "1.0.4",
1341 | "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-1.0.4.tgz",
1342 | "integrity": "sha512-ghHup2voGfgFoHMGnaLHOjbYFACKrRh9KFttdCzMCbFoBMJXiNi2+XTrPP8+q6cDJM/RSqlCfVWrjp1H201rZg=="
1343 | },
1344 | "hast-util-is-element": {
1345 | "version": "1.1.0",
1346 | "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz",
1347 | "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ=="
1348 | }
1349 | }
1350 | },
1351 | "hast-util-is-element": {
1352 | "version": "2.1.1",
1353 | "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.1.tgz",
1354 | "integrity": "sha512-ag0fiZfRWsPiR1udvnSbaazJLGv8qd8E+/e3rW8rUZhbKG4HNJmFL4QkEceN+22BgE+uozXY30z/s+2dL6Z++g==",
1355 | "requires": {
1356 | "@types/hast": "^2.0.0",
1357 | "@types/unist": "^2.0.0"
1358 | }
1359 | },
1360 | "hast-util-parse-selector": {
1361 | "version": "3.1.0",
1362 | "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz",
1363 | "integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==",
1364 | "requires": {
1365 | "@types/hast": "^2.0.0"
1366 | }
1367 | },
1368 | "hast-util-phrasing": {
1369 | "version": "2.0.0",
1370 | "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-2.0.0.tgz",
1371 | "integrity": "sha512-4rFSiFpdmTtp4aAxki6obpEbVJ85fOEN8/A8bOByoCaqRDTtd1AKTw3P/cXgVm0/RDuaWj0tSd1pTb0Jw5QfdA==",
1372 | "requires": {
1373 | "hast-util-embedded": "^2.0.0",
1374 | "hast-util-has-property": "^2.0.0",
1375 | "hast-util-is-body-ok-link": "^1.0.0",
1376 | "hast-util-is-element": "^2.0.0"
1377 | }
1378 | },
1379 | "hast-util-to-html": {
1380 | "version": "8.0.2",
1381 | "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.2.tgz",
1382 | "integrity": "sha512-ipLhUTMyyJi9F/LXaNDG9BrRdshP6obCfmUZYbE/+T639IdzqAOkKN4DyrEyID0gbb+rsC3PKf0XlviZwzomhw==",
1383 | "requires": {
1384 | "@types/hast": "^2.0.0",
1385 | "ccount": "^2.0.0",
1386 | "comma-separated-tokens": "^2.0.0",
1387 | "hast-util-is-element": "^2.0.0",
1388 | "hast-util-whitespace": "^2.0.0",
1389 | "html-void-elements": "^2.0.0",
1390 | "property-information": "^6.0.0",
1391 | "space-separated-tokens": "^2.0.0",
1392 | "stringify-entities": "^4.0.0",
1393 | "unist-util-is": "^5.0.0"
1394 | }
1395 | },
1396 | "hast-util-whitespace": {
1397 | "version": "2.0.0",
1398 | "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz",
1399 | "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg=="
1400 | },
1401 | "hastscript": {
1402 | "version": "7.0.1",
1403 | "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.1.tgz",
1404 | "integrity": "sha512-3Nww02NdnAoLZlI4mifLRYU9jZ1PrMD+eYnnW3RGVKlRD2bW+fNTvr1KLnET/DAf8c6CMlMblXVUhXJiGIKwDA==",
1405 | "requires": {
1406 | "@types/hast": "^2.0.0",
1407 | "comma-separated-tokens": "^2.0.0",
1408 | "hast-util-parse-selector": "^3.0.0",
1409 | "property-information": "^6.0.0",
1410 | "space-separated-tokens": "^2.0.0"
1411 | },
1412 | "dependencies": {
1413 | "comma-separated-tokens": {
1414 | "version": "2.0.2",
1415 | "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
1416 | "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg=="
1417 | },
1418 | "property-information": {
1419 | "version": "6.0.1",
1420 | "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.0.1.tgz",
1421 | "integrity": "sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg=="
1422 | },
1423 | "space-separated-tokens": {
1424 | "version": "2.0.1",
1425 | "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
1426 | "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw=="
1427 | }
1428 | }
1429 | },
1430 | "html-void-elements": {
1431 | "version": "2.0.0",
1432 | "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.0.tgz",
1433 | "integrity": "sha512-4OYzQQsBt0G9bJ/nM9/DDsjm4+fVdzAaPJJcWk5QwA3GIAPxQEeOR0rsI8HbDHQz5Gta8pVvGnnTNSbZVEVvkQ=="
1434 | },
1435 | "html-whitespace-sensitive-tag-names": {
1436 | "version": "2.0.0",
1437 | "resolved": "https://registry.npmjs.org/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-2.0.0.tgz",
1438 | "integrity": "sha512-SQdIvTTtnHAx72xGUIUudvVOCjeWvV1U7rvSFnNGxTGRw3ZC7RES4Gw6dm1nMYD60TXvm6zjk/bWqgNc5pjQaw=="
1439 | },
1440 | "is-alphabetical": {
1441 | "version": "2.0.0",
1442 | "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.0.tgz",
1443 | "integrity": "sha512-5OV8Toyq3oh4eq6sbWTYzlGdnMT/DPI5I0zxUBxjiigQsZycpkKF3kskkao3JyYGuYDHvhgJF+DrjMQp9SX86w=="
1444 | },
1445 | "is-alphanumerical": {
1446 | "version": "2.0.0",
1447 | "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.0.tgz",
1448 | "integrity": "sha512-t+2GlJ+hO9yagJ+jU3+HSh80VKvz/3cG2cxbGGm4S0hjKuhWQXgPVUVOZz3tqZzMjhmphZ+1TIJTlRZRoe6GCQ==",
1449 | "requires": {
1450 | "is-alphabetical": "^2.0.0",
1451 | "is-decimal": "^2.0.0"
1452 | }
1453 | },
1454 | "is-buffer": {
1455 | "version": "2.0.5",
1456 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
1457 | "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
1458 | },
1459 | "is-decimal": {
1460 | "version": "2.0.0",
1461 | "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.0.tgz",
1462 | "integrity": "sha512-QfrfjQV0LjoWQ1K1XSoEZkTAzSa14RKVMa5zg3SdAfzEmQzRM4+tbSFWb78creCeA9rNBzaZal92opi1TwPWZw=="
1463 | },
1464 | "is-hexadecimal": {
1465 | "version": "2.0.0",
1466 | "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.0.tgz",
1467 | "integrity": "sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug=="
1468 | },
1469 | "is-plain-obj": {
1470 | "version": "4.0.0",
1471 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
1472 | "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw=="
1473 | },
1474 | "mdast-util-definitions": {
1475 | "version": "5.1.0",
1476 | "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz",
1477 | "integrity": "sha512-5hcR7FL2EuZ4q6lLMUK5w4lHT2H3vqL9quPvYZ/Ku5iifrirfMHiGdhxdXMUbUkDmz5I+TYMd7nbaxUhbQkfpQ==",
1478 | "requires": {
1479 | "@types/mdast": "^3.0.0",
1480 | "@types/unist": "^2.0.0",
1481 | "unist-util-visit": "^3.0.0"
1482 | },
1483 | "dependencies": {
1484 | "unist-util-visit": {
1485 | "version": "3.1.0",
1486 | "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz",
1487 | "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==",
1488 | "requires": {
1489 | "@types/unist": "^2.0.0",
1490 | "unist-util-is": "^5.0.0",
1491 | "unist-util-visit-parents": "^4.0.0"
1492 | }
1493 | },
1494 | "unist-util-visit-parents": {
1495 | "version": "4.1.1",
1496 | "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz",
1497 | "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==",
1498 | "requires": {
1499 | "@types/unist": "^2.0.0",
1500 | "unist-util-is": "^5.0.0"
1501 | }
1502 | }
1503 | }
1504 | },
1505 | "mdast-util-from-markdown": {
1506 | "version": "1.0.0",
1507 | "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.0.0.tgz",
1508 | "integrity": "sha512-uj2G60sb7z1PNOeElFwCC9b/Se/lFXuLhVKFOAY2EHz/VvgbupTQRNXPoZl7rGpXYL6BNZgcgaybrlSWbo7n/g==",
1509 | "requires": {
1510 | "@types/mdast": "^3.0.0",
1511 | "@types/unist": "^2.0.0",
1512 | "mdast-util-to-string": "^3.0.0",
1513 | "micromark": "^3.0.0",
1514 | "micromark-util-decode-numeric-character-reference": "^1.0.0",
1515 | "micromark-util-normalize-identifier": "^1.0.0",
1516 | "micromark-util-symbol": "^1.0.0",
1517 | "micromark-util-types": "^1.0.0",
1518 | "parse-entities": "^3.0.0",
1519 | "unist-util-stringify-position": "^3.0.0"
1520 | }
1521 | },
1522 | "mdast-util-to-hast": {
1523 | "version": "12.1.0",
1524 | "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.1.0.tgz",
1525 | "integrity": "sha512-dHfCt9Yh05AXEeghoziB3DjJV8oCIKdQmBJOPoAT1NlgMDBy+/MQn7Pxfq0jI8YRO1IfzcnmA/OU3FVVn/E5Sg==",
1526 | "requires": {
1527 | "@types/hast": "^2.0.0",
1528 | "@types/mdast": "^3.0.0",
1529 | "@types/mdurl": "^1.0.0",
1530 | "mdast-util-definitions": "^5.0.0",
1531 | "mdurl": "^1.0.0",
1532 | "micromark-util-sanitize-uri": "^1.0.0",
1533 | "unist-builder": "^3.0.0",
1534 | "unist-util-generated": "^2.0.0",
1535 | "unist-util-position": "^4.0.0",
1536 | "unist-util-visit": "^4.0.0"
1537 | }
1538 | },
1539 | "mdast-util-to-string": {
1540 | "version": "3.1.0",
1541 | "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz",
1542 | "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA=="
1543 | },
1544 | "mdurl": {
1545 | "version": "1.0.1",
1546 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
1547 | "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
1548 | },
1549 | "micromark": {
1550 | "version": "3.0.3",
1551 | "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.3.tgz",
1552 | "integrity": "sha512-fWuHx+JKV4zA8WfCFor2DWP9XmsZkIiyWRGofr7P7IGfpRIlb7/C5wwusGsNyr1D8HI5arghZDG1Ikc0FBwS5Q==",
1553 | "requires": {
1554 | "@types/debug": "^4.0.0",
1555 | "debug": "^4.0.0",
1556 | "micromark-core-commonmark": "^1.0.0",
1557 | "micromark-factory-space": "^1.0.0",
1558 | "micromark-util-character": "^1.0.0",
1559 | "micromark-util-chunked": "^1.0.0",
1560 | "micromark-util-combine-extensions": "^1.0.0",
1561 | "micromark-util-decode-numeric-character-reference": "^1.0.0",
1562 | "micromark-util-encode": "^1.0.0",
1563 | "micromark-util-normalize-identifier": "^1.0.0",
1564 | "micromark-util-resolve-all": "^1.0.0",
1565 | "micromark-util-sanitize-uri": "^1.0.0",
1566 | "micromark-util-subtokenize": "^1.0.0",
1567 | "micromark-util-symbol": "^1.0.0",
1568 | "micromark-util-types": "^1.0.0",
1569 | "parse-entities": "^3.0.0"
1570 | }
1571 | },
1572 | "micromark-core-commonmark": {
1573 | "version": "1.0.0",
1574 | "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.0.tgz",
1575 | "integrity": "sha512-y9g7zymcKRBHM/aNBekstvs/Grpf+y4OEBULUTYvGZcusnp+JeOxmilJY4GMpo2/xY7iHQL9fjz5pD9pSAud9A==",
1576 | "requires": {
1577 | "micromark-factory-destination": "^1.0.0",
1578 | "micromark-factory-label": "^1.0.0",
1579 | "micromark-factory-space": "^1.0.0",
1580 | "micromark-factory-title": "^1.0.0",
1581 | "micromark-factory-whitespace": "^1.0.0",
1582 | "micromark-util-character": "^1.0.0",
1583 | "micromark-util-chunked": "^1.0.0",
1584 | "micromark-util-classify-character": "^1.0.0",
1585 | "micromark-util-html-tag-name": "^1.0.0",
1586 | "micromark-util-normalize-identifier": "^1.0.0",
1587 | "micromark-util-resolve-all": "^1.0.0",
1588 | "micromark-util-subtokenize": "^1.0.0",
1589 | "micromark-util-symbol": "^1.0.0",
1590 | "micromark-util-types": "^1.0.0",
1591 | "parse-entities": "^3.0.0"
1592 | }
1593 | },
1594 | "micromark-factory-destination": {
1595 | "version": "1.0.0",
1596 | "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz",
1597 | "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==",
1598 | "requires": {
1599 | "micromark-util-character": "^1.0.0",
1600 | "micromark-util-symbol": "^1.0.0",
1601 | "micromark-util-types": "^1.0.0"
1602 | }
1603 | },
1604 | "micromark-factory-label": {
1605 | "version": "1.0.0",
1606 | "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.0.tgz",
1607 | "integrity": "sha512-XWEucVZb+qBCe2jmlOnWr6sWSY6NHx+wtpgYFsm4G+dufOf6tTQRRo0bdO7XSlGPu5fyjpJenth6Ksnc5Mwfww==",
1608 | "requires": {
1609 | "micromark-util-character": "^1.0.0",
1610 | "micromark-util-symbol": "^1.0.0",
1611 | "micromark-util-types": "^1.0.0"
1612 | }
1613 | },
1614 | "micromark-factory-space": {
1615 | "version": "1.0.0",
1616 | "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz",
1617 | "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==",
1618 | "requires": {
1619 | "micromark-util-character": "^1.0.0",
1620 | "micromark-util-types": "^1.0.0"
1621 | }
1622 | },
1623 | "micromark-factory-title": {
1624 | "version": "1.0.0",
1625 | "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.0.tgz",
1626 | "integrity": "sha512-flvC7Gx0dWVWorXuBl09Cr3wB5FTuYec8pMGVySIp2ZlqTcIjN/lFohZcP0EG//krTptm34kozHk7aK/CleCfA==",
1627 | "requires": {
1628 | "micromark-factory-space": "^1.0.0",
1629 | "micromark-util-character": "^1.0.0",
1630 | "micromark-util-symbol": "^1.0.0",
1631 | "micromark-util-types": "^1.0.0"
1632 | }
1633 | },
1634 | "micromark-factory-whitespace": {
1635 | "version": "1.0.0",
1636 | "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz",
1637 | "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==",
1638 | "requires": {
1639 | "micromark-factory-space": "^1.0.0",
1640 | "micromark-util-character": "^1.0.0",
1641 | "micromark-util-symbol": "^1.0.0",
1642 | "micromark-util-types": "^1.0.0"
1643 | }
1644 | },
1645 | "micromark-util-character": {
1646 | "version": "1.1.0",
1647 | "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz",
1648 | "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==",
1649 | "requires": {
1650 | "micromark-util-symbol": "^1.0.0",
1651 | "micromark-util-types": "^1.0.0"
1652 | }
1653 | },
1654 | "micromark-util-chunked": {
1655 | "version": "1.0.0",
1656 | "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz",
1657 | "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==",
1658 | "requires": {
1659 | "micromark-util-symbol": "^1.0.0"
1660 | }
1661 | },
1662 | "micromark-util-classify-character": {
1663 | "version": "1.0.0",
1664 | "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz",
1665 | "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==",
1666 | "requires": {
1667 | "micromark-util-character": "^1.0.0",
1668 | "micromark-util-symbol": "^1.0.0",
1669 | "micromark-util-types": "^1.0.0"
1670 | }
1671 | },
1672 | "micromark-util-combine-extensions": {
1673 | "version": "1.0.0",
1674 | "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz",
1675 | "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==",
1676 | "requires": {
1677 | "micromark-util-chunked": "^1.0.0",
1678 | "micromark-util-types": "^1.0.0"
1679 | }
1680 | },
1681 | "micromark-util-decode-numeric-character-reference": {
1682 | "version": "1.0.0",
1683 | "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz",
1684 | "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==",
1685 | "requires": {
1686 | "micromark-util-symbol": "^1.0.0"
1687 | }
1688 | },
1689 | "micromark-util-encode": {
1690 | "version": "1.0.0",
1691 | "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz",
1692 | "integrity": "sha512-cJpFVM768h6zkd8qJ1LNRrITfY4gwFt+tziPcIf71Ui8yFzY9wG3snZQqiWVq93PG4Sw6YOtcNiKJfVIs9qfGg=="
1693 | },
1694 | "micromark-util-html-tag-name": {
1695 | "version": "1.0.0",
1696 | "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz",
1697 | "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g=="
1698 | },
1699 | "micromark-util-normalize-identifier": {
1700 | "version": "1.0.0",
1701 | "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz",
1702 | "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==",
1703 | "requires": {
1704 | "micromark-util-symbol": "^1.0.0"
1705 | }
1706 | },
1707 | "micromark-util-resolve-all": {
1708 | "version": "1.0.0",
1709 | "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz",
1710 | "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==",
1711 | "requires": {
1712 | "micromark-util-types": "^1.0.0"
1713 | }
1714 | },
1715 | "micromark-util-sanitize-uri": {
1716 | "version": "1.0.0",
1717 | "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz",
1718 | "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==",
1719 | "requires": {
1720 | "micromark-util-character": "^1.0.0",
1721 | "micromark-util-encode": "^1.0.0",
1722 | "micromark-util-symbol": "^1.0.0"
1723 | }
1724 | },
1725 | "micromark-util-subtokenize": {
1726 | "version": "1.0.0",
1727 | "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.0.tgz",
1728 | "integrity": "sha512-EsnG2qscmcN5XhkqQBZni/4oQbLFjz9yk3ZM/P8a3YUjwV6+6On2wehr1ALx0MxK3+XXXLTzuBKHDFeDFYRdgQ==",
1729 | "requires": {
1730 | "micromark-util-chunked": "^1.0.0",
1731 | "micromark-util-symbol": "^1.0.0",
1732 | "micromark-util-types": "^1.0.0"
1733 | }
1734 | },
1735 | "micromark-util-symbol": {
1736 | "version": "1.0.0",
1737 | "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz",
1738 | "integrity": "sha512-NZA01jHRNCt4KlOROn8/bGi6vvpEmlXld7EHcRH+aYWUfL3Wc8JLUNNlqUMKa0hhz6GrpUWsHtzPmKof57v0gQ=="
1739 | },
1740 | "micromark-util-types": {
1741 | "version": "1.0.0",
1742 | "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.0.tgz",
1743 | "integrity": "sha512-psf1WAaP1B77WpW4mBGDkTr+3RsPuDAgsvlP47GJzbH1jmjH8xjOx7Z6kp84L8oqHmy5pYO3Ev46odosZV+3AA=="
1744 | },
1745 | "ms": {
1746 | "version": "2.1.2",
1747 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1748 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1749 | },
1750 | "parse-entities": {
1751 | "version": "3.0.0",
1752 | "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-3.0.0.tgz",
1753 | "integrity": "sha512-AJlcIFDNPEP33KyJLguv0xJc83BNvjxwpuUIcetyXUsLpVXAUCePJ5kIoYtEN2R1ac0cYaRu/vk9dVFkewHQhQ==",
1754 | "requires": {
1755 | "character-entities": "^2.0.0",
1756 | "character-entities-legacy": "^2.0.0",
1757 | "character-reference-invalid": "^2.0.0",
1758 | "is-alphanumerical": "^2.0.0",
1759 | "is-decimal": "^2.0.0",
1760 | "is-hexadecimal": "^2.0.0"
1761 | }
1762 | },
1763 | "property-information": {
1764 | "version": "6.0.1",
1765 | "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.0.1.tgz",
1766 | "integrity": "sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg=="
1767 | },
1768 | "rehype-document": {
1769 | "version": "6.1.0",
1770 | "resolved": "https://registry.npmjs.org/rehype-document/-/rehype-document-6.1.0.tgz",
1771 | "integrity": "sha512-znEODHIhSjfBlvFO6z9k/6z7lJor1hqqpYy15W5vj/VLxcWsCL22hBdDSai5tYOymmGOInDLvepmS+6MIIXjFg==",
1772 | "requires": {
1773 | "@types/hast": "^2.0.0",
1774 | "hastscript": "^7.0.0",
1775 | "unified": "^10.0.0"
1776 | }
1777 | },
1778 | "rehype-format": {
1779 | "version": "4.0.1",
1780 | "resolved": "https://registry.npmjs.org/rehype-format/-/rehype-format-4.0.1.tgz",
1781 | "integrity": "sha512-HA92WeqFri00yiClrz54IIpM9no2DH9Mgy5aFmInNODoAYn+hN42a6oqJTIie2nj0HwFyV7JvOYx5YHBphN8mw==",
1782 | "requires": {
1783 | "@types/hast": "^2.0.0",
1784 | "hast-util-embedded": "^2.0.0",
1785 | "hast-util-is-element": "^2.0.0",
1786 | "hast-util-phrasing": "^2.0.0",
1787 | "hast-util-whitespace": "^2.0.0",
1788 | "html-whitespace-sensitive-tag-names": "^2.0.0",
1789 | "rehype-minify-whitespace": "^5.0.0",
1790 | "unified": "^10.0.0",
1791 | "unist-util-visit-parents": "^5.0.0"
1792 | }
1793 | },
1794 | "rehype-minify-whitespace": {
1795 | "version": "5.0.0",
1796 | "resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-5.0.0.tgz",
1797 | "integrity": "sha512-cUkQldYx8jpWM6FZmCkOF/+mev09+5NAtBzUFZgnfXsIoglxo3h6t3S3JbNouiaqIDE6vbpI+GQpOg0xD3Z7kg==",
1798 | "requires": {
1799 | "@types/hast": "^2.0.0",
1800 | "hast-util-embedded": "^2.0.0",
1801 | "hast-util-is-element": "^2.0.0",
1802 | "hast-util-whitespace": "^2.0.0",
1803 | "unified": "^10.0.0",
1804 | "unist-util-is": "^5.0.0"
1805 | }
1806 | },
1807 | "rehype-stringify": {
1808 | "version": "9.0.3",
1809 | "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz",
1810 | "integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==",
1811 | "requires": {
1812 | "@types/hast": "^2.0.0",
1813 | "hast-util-to-html": "^8.0.0",
1814 | "unified": "^10.0.0"
1815 | }
1816 | },
1817 | "remark-parse": {
1818 | "version": "10.0.1",
1819 | "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz",
1820 | "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==",
1821 | "requires": {
1822 | "@types/mdast": "^3.0.0",
1823 | "mdast-util-from-markdown": "^1.0.0",
1824 | "unified": "^10.0.0"
1825 | }
1826 | },
1827 | "remark-rehype": {
1828 | "version": "10.1.0",
1829 | "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz",
1830 | "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==",
1831 | "requires": {
1832 | "@types/hast": "^2.0.0",
1833 | "@types/mdast": "^3.0.0",
1834 | "mdast-util-to-hast": "^12.1.0",
1835 | "unified": "^10.0.0"
1836 | }
1837 | },
1838 | "space-separated-tokens": {
1839 | "version": "2.0.1",
1840 | "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
1841 | "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw=="
1842 | },
1843 | "stringify-entities": {
1844 | "version": "4.0.1",
1845 | "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.1.tgz",
1846 | "integrity": "sha512-gmMQxKXPWIO3NXNSPyWNhlYcBNGpPA/487D+9dLPnU4xBnIrnHdr8cv5rGJOS/1BRxEXRb7uKwg7BA36IWV7xg==",
1847 | "requires": {
1848 | "character-entities-html4": "^2.0.0",
1849 | "character-entities-legacy": "^2.0.0"
1850 | }
1851 | },
1852 | "trough": {
1853 | "version": "2.0.2",
1854 | "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz",
1855 | "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w=="
1856 | },
1857 | "typescript": {
1858 | "version": "4.8.2",
1859 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz",
1860 | "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==",
1861 | "dev": true
1862 | },
1863 | "unified": {
1864 | "version": "10.1.1",
1865 | "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.1.tgz",
1866 | "integrity": "sha512-v4ky1+6BN9X3pQrOdkFIPWAaeDsHPE1svRDxq7YpTc2plkIqFMwukfqM+l0ewpP9EfwARlt9pPFAeWYhHm8X9w==",
1867 | "requires": {
1868 | "@types/unist": "^2.0.0",
1869 | "bail": "^2.0.0",
1870 | "extend": "^3.0.0",
1871 | "is-buffer": "^2.0.0",
1872 | "is-plain-obj": "^4.0.0",
1873 | "trough": "^2.0.0",
1874 | "vfile": "^5.0.0"
1875 | }
1876 | },
1877 | "unified-stream": {
1878 | "version": "2.0.0",
1879 | "resolved": "https://registry.npmjs.org/unified-stream/-/unified-stream-2.0.0.tgz",
1880 | "integrity": "sha512-KdwODjgqGsTbHMLqm57qLxNAkbCboD5EMPC4BULs/9iy5ZTsw3xgc0BUjeCmABt/yfZt0k7rgkBLcdiZ8LwZug==",
1881 | "requires": {
1882 | "unified": "^10.0.0",
1883 | "vfile": "^5.0.0"
1884 | }
1885 | },
1886 | "unist-builder": {
1887 | "version": "3.0.0",
1888 | "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz",
1889 | "integrity": "sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==",
1890 | "requires": {
1891 | "@types/unist": "^2.0.0"
1892 | }
1893 | },
1894 | "unist-util-generated": {
1895 | "version": "2.0.0",
1896 | "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz",
1897 | "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw=="
1898 | },
1899 | "unist-util-is": {
1900 | "version": "5.1.1",
1901 | "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
1902 | "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ=="
1903 | },
1904 | "unist-util-position": {
1905 | "version": "4.0.1",
1906 | "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz",
1907 | "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA=="
1908 | },
1909 | "unist-util-stringify-position": {
1910 | "version": "3.0.0",
1911 | "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
1912 | "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
1913 | "requires": {
1914 | "@types/unist": "^2.0.0"
1915 | }
1916 | },
1917 | "unist-util-visit": {
1918 | "version": "4.1.0",
1919 | "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz",
1920 | "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==",
1921 | "requires": {
1922 | "@types/unist": "^2.0.0",
1923 | "unist-util-is": "^5.0.0",
1924 | "unist-util-visit-parents": "^5.0.0"
1925 | }
1926 | },
1927 | "unist-util-visit-parents": {
1928 | "version": "5.0.0",
1929 | "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz",
1930 | "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==",
1931 | "requires": {
1932 | "@types/unist": "^2.0.0",
1933 | "unist-util-is": "^5.0.0"
1934 | }
1935 | },
1936 | "vfile": {
1937 | "version": "5.0.2",
1938 | "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz",
1939 | "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==",
1940 | "requires": {
1941 | "@types/unist": "^2.0.0",
1942 | "is-buffer": "^2.0.0",
1943 | "unist-util-stringify-position": "^3.0.0",
1944 | "vfile-message": "^3.0.0"
1945 | }
1946 | },
1947 | "vfile-message": {
1948 | "version": "3.0.1",
1949 | "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz",
1950 | "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==",
1951 | "requires": {
1952 | "@types/unist": "^2.0.0",
1953 | "unist-util-stringify-position": "^3.0.0"
1954 | }
1955 | }
1956 | }
1957 | }
1958 |
--------------------------------------------------------------------------------
/runtimes/md/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vercel-md",
3 | "description": "Markdown Runtime for Vercel platform",
4 | "version": "0.0.5",
5 | "license": "MIT",
6 | "main": "./dist/index.js",
7 | "homepage": "https://github.com/juicyfx/juicy",
8 | "repository": {
9 | "type": "git",
10 | "url": "https://github.com/juicyfx/juicy.git"
11 | },
12 | "scripts": {
13 | "watch": "tsc --watch",
14 | "build": "tsc",
15 | "prepublishOnly": "tsc"
16 | },
17 | "files": [
18 | "dist"
19 | ],
20 | "dependencies": {
21 | "rehype-document": "^6.0.0",
22 | "rehype-format": "^4.0.0",
23 | "rehype-stringify": "^9.0.0",
24 | "remark-parse": "^10.0.0",
25 | "remark-rehype": "^10.0.0",
26 | "unified": "^10.0.0",
27 | "unified-stream": "^2.0.0"
28 | },
29 | "devDependencies": {
30 | "@types/node": "^17.0.0",
31 | "@vercel/build-utils": "^5.4.1",
32 | "typescript": "^4.0.2"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/runtimes/md/src/index.ts:
--------------------------------------------------------------------------------
1 | import { FileBlob, BuildOptions } from "@vercel/build-utils";
2 | import unified from 'unified';
3 | // @ts-ignore
4 | import unifiedStream from 'unified-stream';
5 | import markdown from 'remark-parse';
6 | import remark2rehype from 'remark-rehype';
7 | import doc from 'rehype-document';
8 | // @ts-ignore
9 | import format from 'rehype-format';
10 | import html from 'rehype-stringify';
11 |
12 | export const version = 2;
13 |
14 | export async function build({ files, entrypoint, config = {} }: BuildOptions): Promise {
15 | const stream = files[entrypoint].toStream();
16 | const options = config || {};
17 |
18 | const title = options.title || undefined;
19 | const language = options.language || 'en';
20 | const meta = <[]>options.meta || undefined;
21 | const css = options.css || undefined;
22 | const js = options.js || undefined;
23 |
24 | const processor = unified()
25 | .use(markdown)
26 | .use(remark2rehype)
27 | .use(doc, {
28 | title,
29 | language,
30 | meta,
31 | css,
32 | js
33 | })
34 | .use(format)
35 | .use(html);
36 |
37 | const result = await FileBlob.fromStream({
38 | stream: stream.pipe(unifiedStream(processor)),
39 | });
40 |
41 | const replacedEntrypoint = entrypoint.replace(/\.[^.]+$/, '.html');
42 |
43 | return { [replacedEntrypoint]: result };
44 | };
45 |
--------------------------------------------------------------------------------
/runtimes/md/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "strict": true,
4 | "esModuleInterop": true,
5 | "resolveJsonModule": true,
6 | "moduleResolution": "node",
7 | "allowSyntheticDefaultImports": true,
8 | "target": "ES2018",
9 | "module": "CommonJS",
10 | "outDir": "dist",
11 | "sourceMap": false,
12 | "declaration": true,
13 | "noImplicitAny": true,
14 | "noUnusedLocals": true,
15 | "noUnusedParameters": true,
16 | "forceConsistentCasingInFileNames": true,
17 | "skipLibCheck": true,
18 | "typeRoots": [
19 | "./node_modules/@types"
20 | ]
21 | },
22 | "include": [
23 | "src/**/*.ts"
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/runtimes/plain/.gitignore:
--------------------------------------------------------------------------------
1 | # NodeJS
2 | /node_modules
3 |
4 | # App
5 | /dist
6 |
--------------------------------------------------------------------------------
/runtimes/plain/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vercel-plain",
3 | "version": "0.0.2",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "vercel-plain",
9 | "version": "0.0.2",
10 | "license": "MIT",
11 | "devDependencies": {
12 | "@types/node": "^18.7.14",
13 | "@vercel/build-utils": "^5.5.5",
14 | "typescript": "^4.0.2"
15 | }
16 | },
17 | "node_modules/@types/node": {
18 | "version": "18.7.14",
19 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.14.tgz",
20 | "integrity": "sha512-6bbDaETVi8oyIARulOE9qF1/Qdi/23z6emrUh0fNJRUmjznqrixD4MpGDdgOFk5Xb0m2H6Xu42JGdvAxaJR/wA==",
21 | "dev": true
22 | },
23 | "node_modules/@vercel/build-utils": {
24 | "version": "5.5.5",
25 | "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-5.5.5.tgz",
26 | "integrity": "sha512-ZBJpqnqm2OqYyWEqfRn0CYvlmSdOf/igtFy58x0bvSbJdN6Dx2rEw9sNg8SU7O/+zWpKP5rRfWcT6iql/p0sCg==",
27 | "dev": true
28 | },
29 | "node_modules/typescript": {
30 | "version": "4.8.2",
31 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz",
32 | "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==",
33 | "dev": true,
34 | "bin": {
35 | "tsc": "bin/tsc",
36 | "tsserver": "bin/tsserver"
37 | },
38 | "engines": {
39 | "node": ">=4.2.0"
40 | }
41 | }
42 | },
43 | "dependencies": {
44 | "@types/node": {
45 | "version": "18.7.14",
46 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.14.tgz",
47 | "integrity": "sha512-6bbDaETVi8oyIARulOE9qF1/Qdi/23z6emrUh0fNJRUmjznqrixD4MpGDdgOFk5Xb0m2H6Xu42JGdvAxaJR/wA==",
48 | "dev": true
49 | },
50 | "@vercel/build-utils": {
51 | "version": "5.5.5",
52 | "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-5.5.5.tgz",
53 | "integrity": "sha512-ZBJpqnqm2OqYyWEqfRn0CYvlmSdOf/igtFy58x0bvSbJdN6Dx2rEw9sNg8SU7O/+zWpKP5rRfWcT6iql/p0sCg==",
54 | "dev": true
55 | },
56 | "typescript": {
57 | "version": "4.8.2",
58 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz",
59 | "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==",
60 | "dev": true
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/runtimes/plain/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vercel-plain",
3 | "description": "Plain Runtime for Vercel platform",
4 | "version": "0.0.2",
5 | "license": "MIT",
6 | "main": "./dist/index.js",
7 | "homepage": "https://github.com/juicyfx/juicy",
8 | "repository": {
9 | "type": "git",
10 | "url": "https://github.com/juicyfx/juicy.git"
11 | },
12 | "scripts": {
13 | "watch": "tsc --watch",
14 | "build": "tsc",
15 | "prepublishOnly": "tsc"
16 | },
17 | "files": [
18 | "dist"
19 | ],
20 | "devDependencies": {
21 | "@types/node": "^18.7.14",
22 | "@vercel/build-utils": "^5.5.5",
23 | "typescript": "^4.0.2"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/runtimes/plain/src/index.ts:
--------------------------------------------------------------------------------
1 | import { FileBlob, BuildOptions } from "@vercel/build-utils";
2 |
3 | export async function build(options : BuildOptions): Promise {
4 | console.log('▲', options);
5 |
6 | const data = options.config.text || 'Plain text';
7 | const result = new FileBlob({ data });
8 |
9 | return { [options.entrypoint]: result };
10 | };
11 |
--------------------------------------------------------------------------------
/runtimes/plain/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "strict": true,
4 | "esModuleInterop": true,
5 | "resolveJsonModule": true,
6 | "moduleResolution": "node",
7 | "allowSyntheticDefaultImports": true,
8 | "target": "ES2018",
9 | "module": "CommonJS",
10 | "outDir": "dist",
11 | "sourceMap": false,
12 | "declaration": true,
13 | "noImplicitAny": true,
14 | "noUnusedLocals": true,
15 | "noUnusedParameters": true,
16 | "forceConsistentCasingInFileNames": true,
17 | "skipLibCheck": true,
18 | "typeRoots": [
19 | "./node_modules/@types"
20 | ]
21 | },
22 | "include": [
23 | "src/**/*.ts"
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------