From 1fe489be8fe060a33c9db79de6c68fdacb833ba5 Mon Sep 17 00:00:00 2001 From: Taran Vohra Date: Fri, 31 Mar 2023 09:50:35 +0530 Subject: [PATCH] gitbook dev for CLI (#131) * update package-lock * use node 18.15 * install miniflare in @gitbook/cli as dev dep * integrations dev server * dev tunnels using cloudflared * refactor with spinners * add comment * add more comments * fix lint * external fsevents * build in tmp dirs * use random available port * change dev config file name * cleanup on SIGINT * update messaging after server started * add mode in build for minify/sourcemap * remove port option * gitignore rollback * remove extra line in gitignore * remove port const export * fix text * fix error log * global variable MODE for the runtime * space as an arg * comment * define vars in esbuild --- .nvmrc | 2 +- package-lock.json | 2453 ++++++++++++++++++++++++-- packages/cli/build.sh | 3 + packages/cli/package.json | 10 +- packages/cli/postinstall.js | 142 ++ packages/cli/src/build.ts | 66 + packages/cli/src/cli.ts | 19 +- packages/cli/src/dev.ts | 176 ++ packages/cli/src/manifest.ts | 14 + packages/cli/src/publish.ts | 55 +- packages/cli/src/tunnel.ts | 44 + packages/runtime/global.d.ts | 9 + packages/runtime/src/integrations.ts | 12 +- packages/runtime/tsconfig.json | 2 +- 14 files changed, 2838 insertions(+), 169 deletions(-) create mode 100644 packages/cli/postinstall.js create mode 100644 packages/cli/src/build.ts create mode 100644 packages/cli/src/dev.ts create mode 100644 packages/cli/src/tunnel.ts create mode 100644 packages/runtime/global.d.ts diff --git a/.nvmrc b/.nvmrc index 5b9720f0a..55bffd620 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.4.0 +18.15.0 diff --git a/package-lock.json b/package-lock.json index 5c84984ea..1abecda45 100644 --- a/package-lock.json +++ b/package-lock.json @@ -183,6 +183,38 @@ "esbuild": "^0.15.7" } }, + "integrations/runkit/node_modules/@esbuild/android-arm": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.9.tgz", + "integrity": "sha512-VZPy/ETF3fBG5PiinIkA0W/tlsvlEgJccyN2DzWZEl0DlVKRbu91PvY2D6Lxgluj4w9QtYHjOWjAT44C+oQ+EQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "integrations/runkit/node_modules/@esbuild/linux-loong64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.9.tgz", + "integrity": "sha512-O+NfmkfRrb3uSsTa4jE3WApidSe3N5++fyOVGP1SmMZi4A3BZELkhUUvj5hwmMuNdlpzAZ8iAPz2vmcR7DCFQA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "integrations/runkit/node_modules/esbuild": { "version": "0.15.9", "dev": true, @@ -2118,6 +2150,336 @@ "esbuild": "*" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.11.tgz", + "integrity": "sha512-CdyX6sRVh1NzFCsf5vw3kULwlAhfy9wVt8SZlrhQ7eL2qBjGbFhRBWkkAzuZm9IIEOCKJw4DXA6R85g+qc8RDw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.11.tgz", + "integrity": "sha512-QnK4d/zhVTuV4/pRM4HUjcsbl43POALU2zvBynmrrqZt9LPcLA3x1fTZPBg2RRguBQnJcnU059yKr+bydkntjg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.11.tgz", + "integrity": "sha512-3PL3HKtsDIXGQcSCKtWD/dy+mgc4p2Tvo2qKgKHj9Yf+eniwFnuoQ0OUhlSfAEpKAFzF9N21Nwgnap6zy3L3MQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.11.tgz", + "integrity": "sha512-pJ950bNKgzhkGNO3Z9TeHzIFtEyC2GDQL3wxkMApDEghYx5Qers84UTNc1bAxWbRkuJOgmOha5V0WUeh8G+YGw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.11.tgz", + "integrity": "sha512-iB0dQkIHXyczK3BZtzw1tqegf0F0Ab5texX2TvMQjiJIWXAfM4FQl7D909YfXWnB92OQz4ivBYQ2RlxBJrMJOw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.11.tgz", + "integrity": "sha512-7EFzUADmI1jCHeDRGKgbnF5sDIceZsQGapoO6dmw7r/ZBEKX7CCDnIz8m9yEclzr7mFsd+DyasHzpjfJnmBB1Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.11.tgz", + "integrity": "sha512-iPgenptC8i8pdvkHQvXJFzc1eVMR7W2lBPrTE6GbhR54sLcF42mk3zBOjKPOodezzuAz/KSu8CPyFSjcBMkE9g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.11.tgz", + "integrity": "sha512-M9iK/d4lgZH0U5M1R2p2gqhPV/7JPJcRz+8O8GBKVgqndTzydQ7B2XGDbxtbvFkvIs53uXTobOhv+RyaqhUiMg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.11.tgz", + "integrity": "sha512-Qxth3gsWWGKz2/qG2d5DsW/57SeA2AmpSMhdg9TSB5Svn2KDob3qxfQSkdnWjSd42kqoxIPy3EJFs+6w1+6Qjg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.11.tgz", + "integrity": "sha512-dB1nGaVWtUlb/rRDHmuDQhfqazWE0LMro/AIbT2lWM3CDMHJNpLckH+gCddQyhhcLac2OYw69ikUMO34JLt3wA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.11.tgz", + "integrity": "sha512-aCWlq70Q7Nc9WDnormntGS1ar6ZFvUpqr8gXtO+HRejRYPweAFQN615PcgaSJkZjhHp61+MNLhzyVALSF2/Q0g==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.11.tgz", + "integrity": "sha512-cGeGNdQxqY8qJwlYH1BP6rjIIiEcrM05H7k3tR7WxOLmD1ZxRMd6/QIOWMb8mD2s2YJFNRuNQ+wjMhgEL2oCEw==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.11.tgz", + "integrity": "sha512-BdlziJQPW/bNe0E8eYsHB40mYOluS+jULPCjlWiHzDgr+ZBRXPtgMV1nkLEGdpjrwgmtkZHEGEPaKdS/8faLDA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.11.tgz", + "integrity": "sha512-MDLwQbtF+83oJCI1Cixn68Et/ME6gelmhssPebC40RdJaect+IM+l7o/CuG0ZlDs6tZTEIoxUe53H3GmMn8oMA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.11.tgz", + "integrity": "sha512-4N5EMESvws0Ozr2J94VoUD8HIRi7X0uvUv4c0wpTHZyZY9qpaaN7THjosdiW56irQ4qnJ6Lsc+i+5zGWnyqWqQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.11.tgz", + "integrity": "sha512-rM/v8UlluxpytFSmVdbCe1yyKQd/e+FmIJE2oPJvbBo+D0XVWi1y/NQ4iTNx+436WmDHQBjVLrbnAQLQ6U7wlw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.11.tgz", + "integrity": "sha512-4WaAhuz5f91h3/g43VBGdto1Q+X7VEZfpcWGtOFXnggEuLvjV+cP6DyLRU15IjiU9fKLLk41OoJfBFN5DhPvag==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.11.tgz", + "integrity": "sha512-UBj135Nx4FpnvtE+C8TWGp98oUgBcmNmdYgl5ToKc0mBHxVVqVE7FUS5/ELMImOp205qDAittL6Ezhasc2Ev/w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.11.tgz", + "integrity": "sha512-1/gxTifDC9aXbV2xOfCbOceh5AlIidUrPsMpivgzo8P8zUtczlq1ncFpeN1ZyQJ9lVs2hILy1PG5KPp+w8QPPg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.11.tgz", + "integrity": "sha512-vtSfyx5yRdpiOW9yp6Ax0zyNOv9HjOAw8WaZg3dF5djEHKKm3UnoohftVvIJtRh0Ec7Hso0RIdTqZvPXJ7FdvQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.11.tgz", + "integrity": "sha512-GFPSLEGQr4wHFTiIUJQrnJKZhZjjq4Sphf+mM76nQR6WkQn73vm7IsacmBRPkALfpOCHsopSvLgqdd4iUW2mYw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.11.tgz", + "integrity": "sha512-N9vXqLP3eRL8BqSy8yn4Y98cZI2pZ8fyuHx6lKjiG2WABpT2l01TXdzq5Ma2ZUBzfB7tx5dXVhge8X9u0S70ZQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@exodus/schemasafe": { "version": "1.0.0-rc.6", "license": "MIT" @@ -4341,7 +4703,6 @@ }, "node_modules/base64-js": { "version": "1.5.1", - "dev": true, "funding": [ { "type": "github", @@ -4700,7 +5061,6 @@ }, "node_modules/cli-spinners": { "version": "2.7.0", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5311,13 +5671,373 @@ "esbuild-windows-arm64": "0.14.51" } }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.51", + "node_modules/esbuild-android-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.9.tgz", + "integrity": "sha512-HQCX7FJn9T4kxZQkhPjNZC7tBWZqJvhlLHPU2SFzrQB/7nDXjmTIFpFTjt7Bd1uFpeXmuwf5h5fZm+x/hLnhbw==", "cpu": [ - "arm64" + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.9.tgz", + "integrity": "sha512-E6zbLfqbFVCNEKircSHnPiSTsm3fCRxeIMPfrkS33tFjIAoXtwegQfVZqMGR0FlsvVxp2NEDOUz+WW48COCjSg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.9.tgz", + "integrity": "sha512-gI7dClcDN/HHVacZhTmGjl0/TWZcGuKJ0I7/xDGJwRQQn7aafZGtvagOFNmuOq+OBFPhlPv1T6JElOXb0unkSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.51", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.9.tgz", + "integrity": "sha512-uM4z5bTvuAXqPxrI204txhlsPIolQPWRMLenvGuCPZTnnGlCMF2QLs0Plcm26gcskhxewYo9LkkmYSS5Czrb5A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.9.tgz", + "integrity": "sha512-HHDjT3O5gWzicGdgJ5yokZVN9K9KG05SnERwl9nBYZaCjcCgj/sX8Ps1jvoFSfNCO04JSsHSOWo4qvxFuj8FoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.9.tgz", + "integrity": "sha512-AQIdE8FugGt1DkcekKi5ycI46QZpGJ/wqcMr7w6YUmOmp2ohQ8eO4sKUsOxNOvYL7hGEVwkndSyszR6HpVHLFg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.9.tgz", + "integrity": "sha512-4RXjae7g6Qs7StZyiYyXTZXBlfODhb1aBVAjd+ANuPmMhWthQilWo7rFHwJwL7DQu1Fjej2sODAVwLbcIVsAYQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.9.tgz", + "integrity": "sha512-3Zf2GVGUOI7XwChH3qrnTOSqfV1V4CAc/7zLVm4lO6JT6wbJrTgEYCCiNSzziSju+J9Jhf9YGWk/26quWPC6yQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.9.tgz", + "integrity": "sha512-a+bTtxJmYmk9d+s2W4/R1SYKDDAldOKmWjWP0BnrWtDbvUBNOm++du0ysPju4mZVoEFgS1yLNW+VXnG/4FNwdQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.9.tgz", + "integrity": "sha512-Zn9HSylDp89y+TRREMDoGrc3Z4Hs5u56ozZLQCiZAUx2+HdbbXbWdjmw3FdTJ/i7t5Cew6/Q+6kfO3KCcFGlyw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.9.tgz", + "integrity": "sha512-OEiOxNAMH9ENFYqRsWUj3CWyN3V8P3ZXyfNAtX5rlCEC/ERXrCEFCJji/1F6POzsXAzxvUJrTSTCy7G6BhA6Fw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.9.tgz", + "integrity": "sha512-ukm4KsC3QRausEFjzTsOZ/qqazw0YvJsKmfoZZm9QW27OHjk2XKSQGGvx8gIEswft/Sadp03/VZvAaqv5AIwNA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.9.tgz", + "integrity": "sha512-uDOQEH55wQ6ahcIKzQr3VyjGc6Po/xblLGLoUk3fVL1qjlZAibtQr6XRfy5wPJLu/M2o0vQKLq4lyJ2r1tWKcw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.9.tgz", + "integrity": "sha512-yWgxaYTQz+TqX80wXRq6xAtb7GSBAp6gqLKfOdANg9qEmAI1Bxn04IrQr0Mzm4AhxvGKoHzjHjMgXbCCSSDxcw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.9.tgz", + "integrity": "sha512-JmS18acQl4iSAjrEha1MfEmUMN4FcnnrtTaJ7Qg0tDCOcgpPPQRLGsZqhes0vmx8VA6IqRyScqXvaL7+Q0Uf3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-register": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "peerDependencies": { + "esbuild": ">=0.12 <1" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.9.tgz", + "integrity": "sha512-UKynGSWpzkPmXW3D2UMOD9BZPIuRaSqphxSCwScfEE05Be3KAmvjsBhht1fLzKpiFVJb0BYMd4jEbWMyJ/z1hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.9.tgz", + "integrity": "sha512-aqXvu4/W9XyTVqO/hw3rNxKE1TcZiEYHPsXM9LwYmKSX9/hjvfIJzXwQBlPcJ/QOxedfoMVH0YnhhQ9Ffb0RGA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.9.tgz", + "integrity": "sha512-zm7h91WUmlS4idMtjvCrEeNhlH7+TNOmqw5dJPJZrgFaxoFyqYG6CKDpdFCQXdyKpD5yvzaQBOMVTCBVKGZDEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.9.tgz", + "integrity": "sha512-yQEVIv27oauAtvtuhJVfSNMztJJX47ismRS6Sv2QMVV9RM+6xjbMWuuwM2nxr5A2/gj/mu2z9YlQxiwoFRCfZA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-android-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz", + "integrity": "sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-android-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz", + "integrity": "sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-darwin-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz", + "integrity": "sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==", + "cpu": [ + "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -5326,12 +6046,260 @@ "node": ">=12" } }, - "node_modules/esbuild-register": { - "version": "3.3.3", + "node_modules/esbuild/node_modules/esbuild-freebsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz", + "integrity": "sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-freebsd-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz", + "integrity": "sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-linux-32": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz", + "integrity": "sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-linux-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz", + "integrity": "sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-linux-arm": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz", + "integrity": "sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-linux-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz", + "integrity": "sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-linux-mips64le": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz", + "integrity": "sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-linux-ppc64le": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz", + "integrity": "sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-linux-riscv64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz", + "integrity": "sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-linux-s390x": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz", + "integrity": "sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-netbsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz", + "integrity": "sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-openbsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz", + "integrity": "sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-sunos-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz", + "integrity": "sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-windows-32": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz", + "integrity": "sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-windows-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz", + "integrity": "sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "peerDependencies": { - "esbuild": ">=0.12 <1" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/esbuild-windows-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz", + "integrity": "sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, "node_modules/escalade": { @@ -6077,6 +7045,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-port": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", + "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-stream": { "version": "6.0.1", "dev": true, @@ -6423,7 +7402,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "dev": true, "funding": [ { "type": "github", @@ -8703,7 +9681,6 @@ }, "node_modules/readable-stream": { "version": "3.6.0", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -8948,7 +9925,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -9420,6 +10396,53 @@ "node": "*" } }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dependencies": { + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stdin-discarder/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/stdin-discarder/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/stream-transform": { "version": "2.1.3", "license": "MIT", @@ -9436,7 +10459,6 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -10244,7 +11266,6 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, "license": "MIT" }, "node_modules/utility-types": { @@ -10575,7 +11596,7 @@ }, "packages/api": { "name": "@gitbook/api", - "version": "0.1.0", + "version": "0.3.0", "dependencies": { "swagger-typescript-api": "^9.3.1" }, @@ -10588,34 +11609,294 @@ "typescript": "^4.6.3" } }, - "packages/cli": { - "name": "@gitbook/cli", - "version": "0.1.0", + "packages/cli": { + "name": "@gitbook/cli", + "version": "0.1.0", + "hasInstallScript": true, + "dependencies": { + "@gitbook/api": "*", + "@openapi-contrib/openapi-schema-to-json-schema": "^3.1.2", + "@stoplight/json-ref-resolver": "^3.1.3", + "ajv": "^8.11.0", + "ajv-formats": "^2.1.1", + "commander": "^9.2.0", + "conf": "^10.1.2", + "dedent-js": "^1.0.1", + "esbuild": "^0.17.11", + "get-port": "^6.1.2", + "js-yaml": "^4.1.0", + "ora": "^6.2.0", + "prompts": "^2.4.2" + }, + "bin": { + "gitbook": "dist/cli.js" + }, + "devDependencies": { + "@gitbook/eslint-config": "*", + "@types/node": "^17.0.33", + "@types/prompts": "^2.0.14", + "chokidar": "^3.5.3", + "eslint": "^8.16.0", + "miniflare": "^2.12.1", + "typescript": "^4.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/cli/node_modules/@miniflare/cache": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/cache/-/cache-2.12.1.tgz", + "integrity": "sha512-6Pj5avy53qULTa13gWxGTDBuwX0yAzr4Zkzb0ZBh40bcbHp4vRkOk7PvHBoxV0M76JxQDHotGaW+ik510z5Xrg==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1", + "http-cache-semantics": "^4.1.0", + "undici": "5.20.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/cli-parser": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/cli-parser/-/cli-parser-2.12.1.tgz", + "integrity": "sha512-iCh4wEyQow8Dha+zpKhjCCXEp6QWbsvE18H5CgeUFT1pX4B+akYIHzdn47Cr5zpuYyjenoL78bAz0IIHIeyeWw==", + "dev": true, + "dependencies": { + "@miniflare/shared": "2.12.1", + "kleur": "^4.1.4" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/core": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/core/-/core-2.12.1.tgz", + "integrity": "sha512-729xXL6uoMgtja5J7B2WdWAjFfxb74Pk2QqM3VqkWqY3XNlKWI7+ofvb8S6kI6uFEPGj4ma263uYkEAgsvzBWg==", + "dev": true, + "dependencies": { + "@iarna/toml": "^2.2.5", + "@miniflare/queues": "2.12.1", + "@miniflare/shared": "2.12.1", + "@miniflare/watcher": "2.12.1", + "busboy": "^1.6.0", + "dotenv": "^10.0.0", + "kleur": "^4.1.4", + "set-cookie-parser": "^2.4.8", + "undici": "5.20.0", + "urlpattern-polyfill": "^4.0.3" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/d1": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/d1/-/d1-2.12.1.tgz", + "integrity": "sha512-2ldT7xEC7KxoaEJ7nCY9/AB/xwPjbm3mrmpiIspT0b5OgS640Pe9EU4c5bSmzGoUbLvwF+jb+LhLE1QaEbWkBw==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1" + }, + "engines": { + "node": ">=16.7" + } + }, + "packages/cli/node_modules/@miniflare/durable-objects": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/durable-objects/-/durable-objects-2.12.1.tgz", + "integrity": "sha512-/n9WIxvHavVUgT+Nf280wNOcmJQBG+eZuqOlORWW9RmXXbAzqzS2Mk2lmRDCzbq3xTXAcsndx6cdarQLNRUzBg==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1", + "@miniflare/storage-memory": "2.12.1", + "undici": "5.20.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/html-rewriter": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/html-rewriter/-/html-rewriter-2.12.1.tgz", + "integrity": "sha512-yezYzGRBxy7d/oomAUEftdnL4fq6YIek82LtQlXgzcdcbBDnkYADj8WqGV41tAI+V2+rjrFEc1RuCXx/I1yISw==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1", + "html-rewriter-wasm": "^0.4.1", + "undici": "5.20.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/http-server": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/http-server/-/http-server-2.12.1.tgz", + "integrity": "sha512-nC6POgDKFHxnyXbKCdR9FGZSsu5frXQUETvSVcoETd5RP+Iws0xZ+XkzVMqiiIZk3ifUC9LzdGUOD0J2PlhHJw==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1", + "@miniflare/web-sockets": "2.12.1", + "kleur": "^4.1.4", + "selfsigned": "^2.0.0", + "undici": "5.20.0", + "ws": "^8.2.2", + "youch": "^2.2.2" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/kv": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/kv/-/kv-2.12.1.tgz", + "integrity": "sha512-8h8wLDMEaWaKAqYTwrckOcNjAz52bzDyLmU4t/lh1/AQOE9eSg/T+H6xQCv0fPGrWPeHmG8iXaFI1JQ+CtkcHw==", + "dev": true, + "dependencies": { + "@miniflare/shared": "2.12.1" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/queues": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/queues/-/queues-2.12.1.tgz", + "integrity": "sha512-L/YJkWWvg1RS3sCB5DLZOsf/kAmkwhvshpl+LmGQT7z/PYXlplbBmuhPwVBXaHqZdYE7063XfTzgAIhVPoo72Q==", + "dev": true, + "dependencies": { + "@miniflare/shared": "2.12.1" + }, + "engines": { + "node": ">=16.7" + } + }, + "packages/cli/node_modules/@miniflare/r2": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/r2/-/r2-2.12.1.tgz", + "integrity": "sha512-xp8fSSap6o5xSAWp9BtOGgZ4tuf5iHTqrfbAH66LF151j8y69eQtQJ5pxpSvrDJok/F1VOLGc4ihSLmUqxyXhw==", + "dev": true, + "dependencies": { + "@miniflare/shared": "2.12.1", + "undici": "5.20.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/runner-vm": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/runner-vm/-/runner-vm-2.12.1.tgz", + "integrity": "sha512-pGY/aoQzbvyXOGR6/d3hv5/QsyUXGGbOxAyXdvjlz8h7ZiKOX4dBRS5TUAPS0kb/ofUWCyoYJi8dCVwRGdTYRw==", + "dev": true, + "dependencies": { + "@miniflare/shared": "2.12.1" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/scheduler": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/scheduler/-/scheduler-2.12.1.tgz", + "integrity": "sha512-AbOP8YpWNqR/t7zMuTmn6q27USCDBQaYaULRVaNNfCsxMTXAUjYfM85iFvnV9mshw+K0HIEU4zR4Xjd2FeJubg==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1", + "cron-schedule": "^3.0.4" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/shared": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/shared/-/shared-2.12.1.tgz", + "integrity": "sha512-N8sHNM5vcvjvO+znQ7Mbqf0FChRlWxy/svUpQf1GGpii9aTXzOTWB+WkFvJrJNx44SUReEGxUAzxpdeWnHahmA==", + "dev": true, + "dependencies": { + "@types/better-sqlite3": "^7.6.0", + "kleur": "^4.1.4", + "npx-import": "^1.1.4", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/sites": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/sites/-/sites-2.12.1.tgz", + "integrity": "sha512-LW4r82cfGJvmJFwoBdXfsRcdDggVf8ppjMZGU3zk7xo+u5yD1uHzO2Arf3XbKNiOp7f9WyC/mXxs4zxF605iLA==", + "dev": true, + "dependencies": { + "@miniflare/kv": "2.12.1", + "@miniflare/shared": "2.12.1", + "@miniflare/storage-file": "2.12.1" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/storage-file": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/storage-file/-/storage-file-2.12.1.tgz", + "integrity": "sha512-eq5wzBwxQC5GVxBfji9svb9FRdSOlA8D8DTgzL29DDjuOYtG9j8ydOlo0J7/2MB/Gq0HYFUHYWHhrklzzwdKQQ==", + "dev": true, + "dependencies": { + "@miniflare/shared": "2.12.1", + "@miniflare/storage-memory": "2.12.1" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/storage-memory": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/storage-memory/-/storage-memory-2.12.1.tgz", + "integrity": "sha512-E9jbrX0L9N7YIHXj2G4td1EKboVLBdHkwh7RvKEZBwOhxDze5h+jMOou57NIbfC5kLOZPOC1fGXjzpp7xUUE6w==", + "dev": true, + "dependencies": { + "@miniflare/shared": "2.12.1" + }, + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/watcher": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/watcher/-/watcher-2.12.1.tgz", + "integrity": "sha512-3IG/6g38id5ppbZHB/gMfEvoIEFYdmTTLRsHaPNyWIk/r3LMhHLluVsMcs+Lr/fphkPk6Diou4cBLD2GeeoP7A==", + "dev": true, "dependencies": { - "@gitbook/api": "*", - "@openapi-contrib/openapi-schema-to-json-schema": "^3.1.2", - "@stoplight/json-ref-resolver": "^3.1.3", - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "commander": "^9.2.0", - "conf": "^10.1.2", - "dedent-js": "^1.0.1", - "esbuild": "^0.15.7", - "js-yaml": "^4.1.0", - "prompts": "^2.4.2" + "@miniflare/shared": "2.12.1" }, - "bin": { - "gitbook": "dist/cli.js" - }, - "devDependencies": { - "@gitbook/eslint-config": "*", - "@types/node": "^17.0.33", - "@types/prompts": "^2.0.14", - "eslint": "^8.16.0", - "typescript": "^4.6.3" + "engines": { + "node": ">=16.13" + } + }, + "packages/cli/node_modules/@miniflare/web-sockets": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/web-sockets/-/web-sockets-2.12.1.tgz", + "integrity": "sha512-Z+zqZqhVdrbmTQf+ETP5H1TPdXC2tUiYPiHRLWTHUks6VVkuwnUtIKxNPBEBXjCjKYYEm8VLclUAt+0yTucLWA==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1", + "undici": "5.20.0", + "ws": "^8.2.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.13" } }, "packages/cli/node_modules/@types/node": { @@ -10637,6 +11918,42 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "packages/cli/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "packages/cli/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/cli/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/cli/node_modules/commander": { "version": "9.3.0", "license": "MIT", @@ -10645,9 +11962,10 @@ } }, "packages/cli/node_modules/esbuild": { - "version": "0.15.7", + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.11.tgz", + "integrity": "sha512-pAMImyokbWDtnA/ufPxjQg0fYo2DDuzAlqwnDvbXqHLphe+m80eF++perYKVm8LeTuj2zUuFXC+xgSVxyoHUdg==", "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -10655,47 +11973,194 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/linux-loong64": "0.15.7", - "esbuild-android-64": "0.15.7", - "esbuild-android-arm64": "0.15.7", - "esbuild-darwin-64": "0.15.7", - "esbuild-darwin-arm64": "0.15.7", - "esbuild-freebsd-64": "0.15.7", - "esbuild-freebsd-arm64": "0.15.7", - "esbuild-linux-32": "0.15.7", - "esbuild-linux-64": "0.15.7", - "esbuild-linux-arm": "0.15.7", - "esbuild-linux-arm64": "0.15.7", - "esbuild-linux-mips64le": "0.15.7", - "esbuild-linux-ppc64le": "0.15.7", - "esbuild-linux-riscv64": "0.15.7", - "esbuild-linux-s390x": "0.15.7", - "esbuild-netbsd-64": "0.15.7", - "esbuild-openbsd-64": "0.15.7", - "esbuild-sunos-64": "0.15.7", - "esbuild-windows-32": "0.15.7", - "esbuild-windows-64": "0.15.7", - "esbuild-windows-arm64": "0.15.7" - } - }, - "packages/cli/node_modules/esbuild-darwin-arm64": { - "version": "0.15.7", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "@esbuild/android-arm": "0.17.11", + "@esbuild/android-arm64": "0.17.11", + "@esbuild/android-x64": "0.17.11", + "@esbuild/darwin-arm64": "0.17.11", + "@esbuild/darwin-x64": "0.17.11", + "@esbuild/freebsd-arm64": "0.17.11", + "@esbuild/freebsd-x64": "0.17.11", + "@esbuild/linux-arm": "0.17.11", + "@esbuild/linux-arm64": "0.17.11", + "@esbuild/linux-ia32": "0.17.11", + "@esbuild/linux-loong64": "0.17.11", + "@esbuild/linux-mips64el": "0.17.11", + "@esbuild/linux-ppc64": "0.17.11", + "@esbuild/linux-riscv64": "0.17.11", + "@esbuild/linux-s390x": "0.17.11", + "@esbuild/linux-x64": "0.17.11", + "@esbuild/netbsd-x64": "0.17.11", + "@esbuild/openbsd-x64": "0.17.11", + "@esbuild/sunos-x64": "0.17.11", + "@esbuild/win32-arm64": "0.17.11", + "@esbuild/win32-ia32": "0.17.11", + "@esbuild/win32-x64": "0.17.11" + } + }, + "packages/cli/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/cli/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "packages/cli/node_modules/json-schema-traverse": { "version": "1.0.0", "license": "MIT" }, + "packages/cli/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "packages/cli/node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/cli/node_modules/miniflare": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-2.12.1.tgz", + "integrity": "sha512-pym6gzg8AQZ1NRChRV1hC4K55N49wndoaDEVRMvZPJrFsmGkNnXkWmlvmZ7SB3BN5UkP5MZwKhLqiJ49Ry8tFA==", + "dev": true, + "dependencies": { + "@miniflare/cache": "2.12.1", + "@miniflare/cli-parser": "2.12.1", + "@miniflare/core": "2.12.1", + "@miniflare/d1": "2.12.1", + "@miniflare/durable-objects": "2.12.1", + "@miniflare/html-rewriter": "2.12.1", + "@miniflare/http-server": "2.12.1", + "@miniflare/kv": "2.12.1", + "@miniflare/queues": "2.12.1", + "@miniflare/r2": "2.12.1", + "@miniflare/runner-vm": "2.12.1", + "@miniflare/scheduler": "2.12.1", + "@miniflare/shared": "2.12.1", + "@miniflare/sites": "2.12.1", + "@miniflare/storage-file": "2.12.1", + "@miniflare/storage-memory": "2.12.1", + "@miniflare/web-sockets": "2.12.1", + "kleur": "^4.1.4", + "semiver": "^1.1.0", + "source-map-support": "^0.5.20", + "undici": "5.20.0" + }, + "bin": { + "miniflare": "bootstrap.js" + }, + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "@miniflare/storage-redis": "2.12.1", + "cron-schedule": "^3.0.4", + "ioredis": "^4.27.9" + }, + "peerDependenciesMeta": { + "@miniflare/storage-redis": { + "optional": true + }, + "cron-schedule": { + "optional": true + }, + "ioredis": { + "optional": true + } + } + }, + "packages/cli/node_modules/ora": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.2.0.tgz", + "integrity": "sha512-c1qb/1rdE+EFDYiLXh10VY459uMh7DN9zlgd8mZJLoeiPpYllN8eAOiih2Rkah5ywxRm5tHN5C9zPheDq8d1MA==", + "dependencies": { + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/cli/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/cli/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "packages/cli/node_modules/undici": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", + "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, "packages/eslint-config": { "name": "@gitbook/eslint-config", "version": "0.0.1", @@ -10711,6 +12176,7 @@ }, "packages/runtime": { "name": "@gitbook/runtime", + "version": "0.1.0", "dependencies": { "@gitbook/api": "*" }, @@ -11952,6 +13418,138 @@ "rollup-plugin-node-polyfills": "^0.2.1" } }, + "@esbuild/android-arm": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.11.tgz", + "integrity": "sha512-CdyX6sRVh1NzFCsf5vw3kULwlAhfy9wVt8SZlrhQ7eL2qBjGbFhRBWkkAzuZm9IIEOCKJw4DXA6R85g+qc8RDw==", + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.11.tgz", + "integrity": "sha512-QnK4d/zhVTuV4/pRM4HUjcsbl43POALU2zvBynmrrqZt9LPcLA3x1fTZPBg2RRguBQnJcnU059yKr+bydkntjg==", + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.11.tgz", + "integrity": "sha512-3PL3HKtsDIXGQcSCKtWD/dy+mgc4p2Tvo2qKgKHj9Yf+eniwFnuoQ0OUhlSfAEpKAFzF9N21Nwgnap6zy3L3MQ==", + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.11.tgz", + "integrity": "sha512-pJ950bNKgzhkGNO3Z9TeHzIFtEyC2GDQL3wxkMApDEghYx5Qers84UTNc1bAxWbRkuJOgmOha5V0WUeh8G+YGw==", + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.11.tgz", + "integrity": "sha512-iB0dQkIHXyczK3BZtzw1tqegf0F0Ab5texX2TvMQjiJIWXAfM4FQl7D909YfXWnB92OQz4ivBYQ2RlxBJrMJOw==", + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.11.tgz", + "integrity": "sha512-7EFzUADmI1jCHeDRGKgbnF5sDIceZsQGapoO6dmw7r/ZBEKX7CCDnIz8m9yEclzr7mFsd+DyasHzpjfJnmBB1Q==", + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.11.tgz", + "integrity": "sha512-iPgenptC8i8pdvkHQvXJFzc1eVMR7W2lBPrTE6GbhR54sLcF42mk3zBOjKPOodezzuAz/KSu8CPyFSjcBMkE9g==", + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.11.tgz", + "integrity": "sha512-M9iK/d4lgZH0U5M1R2p2gqhPV/7JPJcRz+8O8GBKVgqndTzydQ7B2XGDbxtbvFkvIs53uXTobOhv+RyaqhUiMg==", + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.11.tgz", + "integrity": "sha512-Qxth3gsWWGKz2/qG2d5DsW/57SeA2AmpSMhdg9TSB5Svn2KDob3qxfQSkdnWjSd42kqoxIPy3EJFs+6w1+6Qjg==", + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.11.tgz", + "integrity": "sha512-dB1nGaVWtUlb/rRDHmuDQhfqazWE0LMro/AIbT2lWM3CDMHJNpLckH+gCddQyhhcLac2OYw69ikUMO34JLt3wA==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.11.tgz", + "integrity": "sha512-aCWlq70Q7Nc9WDnormntGS1ar6ZFvUpqr8gXtO+HRejRYPweAFQN615PcgaSJkZjhHp61+MNLhzyVALSF2/Q0g==", + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.11.tgz", + "integrity": "sha512-cGeGNdQxqY8qJwlYH1BP6rjIIiEcrM05H7k3tR7WxOLmD1ZxRMd6/QIOWMb8mD2s2YJFNRuNQ+wjMhgEL2oCEw==", + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.11.tgz", + "integrity": "sha512-BdlziJQPW/bNe0E8eYsHB40mYOluS+jULPCjlWiHzDgr+ZBRXPtgMV1nkLEGdpjrwgmtkZHEGEPaKdS/8faLDA==", + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.11.tgz", + "integrity": "sha512-MDLwQbtF+83oJCI1Cixn68Et/ME6gelmhssPebC40RdJaect+IM+l7o/CuG0ZlDs6tZTEIoxUe53H3GmMn8oMA==", + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.11.tgz", + "integrity": "sha512-4N5EMESvws0Ozr2J94VoUD8HIRi7X0uvUv4c0wpTHZyZY9qpaaN7THjosdiW56irQ4qnJ6Lsc+i+5zGWnyqWqQ==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.11.tgz", + "integrity": "sha512-rM/v8UlluxpytFSmVdbCe1yyKQd/e+FmIJE2oPJvbBo+D0XVWi1y/NQ4iTNx+436WmDHQBjVLrbnAQLQ6U7wlw==", + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.11.tgz", + "integrity": "sha512-4WaAhuz5f91h3/g43VBGdto1Q+X7VEZfpcWGtOFXnggEuLvjV+cP6DyLRU15IjiU9fKLLk41OoJfBFN5DhPvag==", + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.11.tgz", + "integrity": "sha512-UBj135Nx4FpnvtE+C8TWGp98oUgBcmNmdYgl5ToKc0mBHxVVqVE7FUS5/ELMImOp205qDAittL6Ezhasc2Ev/w==", + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.11.tgz", + "integrity": "sha512-1/gxTifDC9aXbV2xOfCbOceh5AlIidUrPsMpivgzo8P8zUtczlq1ncFpeN1ZyQJ9lVs2hILy1PG5KPp+w8QPPg==", + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.11.tgz", + "integrity": "sha512-vtSfyx5yRdpiOW9yp6Ax0zyNOv9HjOAw8WaZg3dF5djEHKKm3UnoohftVvIJtRh0Ec7Hso0RIdTqZvPXJ7FdvQ==", + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.11.tgz", + "integrity": "sha512-GFPSLEGQr4wHFTiIUJQrnJKZhZjjq4Sphf+mM76nQR6WkQn73vm7IsacmBRPkALfpOCHsopSvLgqdd4iUW2mYw==", + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.11.tgz", + "integrity": "sha512-N9vXqLP3eRL8BqSy8yn4Y98cZI2pZ8fyuHx6lKjiG2WABpT2l01TXdzq5Ma2ZUBzfB7tx5dXVhge8X9u0S70ZQ==", + "optional": true + }, "@exodus/schemasafe": { "version": "1.0.0-rc.6" }, @@ -11978,16 +13576,221 @@ "@types/prompts": "^2.0.14", "ajv": "^8.11.0", "ajv-formats": "^2.1.1", + "chokidar": "^3.5.3", "commander": "^9.2.0", "conf": "^10.1.2", "dedent-js": "^1.0.1", - "esbuild": "^0.15.7", + "esbuild": "^0.17.11", "eslint": "^8.16.0", + "get-port": "^6.1.2", "js-yaml": "^4.1.0", + "miniflare": "^2.12.1", + "ora": "^6.2.0", "prompts": "^2.4.2", "typescript": "^4.6.3" }, "dependencies": { + "@miniflare/cache": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/cache/-/cache-2.12.1.tgz", + "integrity": "sha512-6Pj5avy53qULTa13gWxGTDBuwX0yAzr4Zkzb0ZBh40bcbHp4vRkOk7PvHBoxV0M76JxQDHotGaW+ik510z5Xrg==", + "dev": true, + "requires": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1", + "http-cache-semantics": "^4.1.0", + "undici": "5.20.0" + } + }, + "@miniflare/cli-parser": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/cli-parser/-/cli-parser-2.12.1.tgz", + "integrity": "sha512-iCh4wEyQow8Dha+zpKhjCCXEp6QWbsvE18H5CgeUFT1pX4B+akYIHzdn47Cr5zpuYyjenoL78bAz0IIHIeyeWw==", + "dev": true, + "requires": { + "@miniflare/shared": "2.12.1", + "kleur": "^4.1.4" + } + }, + "@miniflare/core": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/core/-/core-2.12.1.tgz", + "integrity": "sha512-729xXL6uoMgtja5J7B2WdWAjFfxb74Pk2QqM3VqkWqY3XNlKWI7+ofvb8S6kI6uFEPGj4ma263uYkEAgsvzBWg==", + "dev": true, + "requires": { + "@iarna/toml": "^2.2.5", + "@miniflare/queues": "2.12.1", + "@miniflare/shared": "2.12.1", + "@miniflare/watcher": "2.12.1", + "busboy": "^1.6.0", + "dotenv": "^10.0.0", + "kleur": "^4.1.4", + "set-cookie-parser": "^2.4.8", + "undici": "5.20.0", + "urlpattern-polyfill": "^4.0.3" + } + }, + "@miniflare/d1": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/d1/-/d1-2.12.1.tgz", + "integrity": "sha512-2ldT7xEC7KxoaEJ7nCY9/AB/xwPjbm3mrmpiIspT0b5OgS640Pe9EU4c5bSmzGoUbLvwF+jb+LhLE1QaEbWkBw==", + "dev": true, + "requires": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1" + } + }, + "@miniflare/durable-objects": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/durable-objects/-/durable-objects-2.12.1.tgz", + "integrity": "sha512-/n9WIxvHavVUgT+Nf280wNOcmJQBG+eZuqOlORWW9RmXXbAzqzS2Mk2lmRDCzbq3xTXAcsndx6cdarQLNRUzBg==", + "dev": true, + "requires": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1", + "@miniflare/storage-memory": "2.12.1", + "undici": "5.20.0" + } + }, + "@miniflare/html-rewriter": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/html-rewriter/-/html-rewriter-2.12.1.tgz", + "integrity": "sha512-yezYzGRBxy7d/oomAUEftdnL4fq6YIek82LtQlXgzcdcbBDnkYADj8WqGV41tAI+V2+rjrFEc1RuCXx/I1yISw==", + "dev": true, + "requires": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1", + "html-rewriter-wasm": "^0.4.1", + "undici": "5.20.0" + } + }, + "@miniflare/http-server": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/http-server/-/http-server-2.12.1.tgz", + "integrity": "sha512-nC6POgDKFHxnyXbKCdR9FGZSsu5frXQUETvSVcoETd5RP+Iws0xZ+XkzVMqiiIZk3ifUC9LzdGUOD0J2PlhHJw==", + "dev": true, + "requires": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1", + "@miniflare/web-sockets": "2.12.1", + "kleur": "^4.1.4", + "selfsigned": "^2.0.0", + "undici": "5.20.0", + "ws": "^8.2.2", + "youch": "^2.2.2" + } + }, + "@miniflare/kv": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/kv/-/kv-2.12.1.tgz", + "integrity": "sha512-8h8wLDMEaWaKAqYTwrckOcNjAz52bzDyLmU4t/lh1/AQOE9eSg/T+H6xQCv0fPGrWPeHmG8iXaFI1JQ+CtkcHw==", + "dev": true, + "requires": { + "@miniflare/shared": "2.12.1" + } + }, + "@miniflare/queues": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/queues/-/queues-2.12.1.tgz", + "integrity": "sha512-L/YJkWWvg1RS3sCB5DLZOsf/kAmkwhvshpl+LmGQT7z/PYXlplbBmuhPwVBXaHqZdYE7063XfTzgAIhVPoo72Q==", + "dev": true, + "requires": { + "@miniflare/shared": "2.12.1" + } + }, + "@miniflare/r2": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/r2/-/r2-2.12.1.tgz", + "integrity": "sha512-xp8fSSap6o5xSAWp9BtOGgZ4tuf5iHTqrfbAH66LF151j8y69eQtQJ5pxpSvrDJok/F1VOLGc4ihSLmUqxyXhw==", + "dev": true, + "requires": { + "@miniflare/shared": "2.12.1", + "undici": "5.20.0" + } + }, + "@miniflare/runner-vm": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/runner-vm/-/runner-vm-2.12.1.tgz", + "integrity": "sha512-pGY/aoQzbvyXOGR6/d3hv5/QsyUXGGbOxAyXdvjlz8h7ZiKOX4dBRS5TUAPS0kb/ofUWCyoYJi8dCVwRGdTYRw==", + "dev": true, + "requires": { + "@miniflare/shared": "2.12.1" + } + }, + "@miniflare/scheduler": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/scheduler/-/scheduler-2.12.1.tgz", + "integrity": "sha512-AbOP8YpWNqR/t7zMuTmn6q27USCDBQaYaULRVaNNfCsxMTXAUjYfM85iFvnV9mshw+K0HIEU4zR4Xjd2FeJubg==", + "dev": true, + "requires": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1", + "cron-schedule": "^3.0.4" + } + }, + "@miniflare/shared": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/shared/-/shared-2.12.1.tgz", + "integrity": "sha512-N8sHNM5vcvjvO+znQ7Mbqf0FChRlWxy/svUpQf1GGpii9aTXzOTWB+WkFvJrJNx44SUReEGxUAzxpdeWnHahmA==", + "dev": true, + "requires": { + "@types/better-sqlite3": "^7.6.0", + "kleur": "^4.1.4", + "npx-import": "^1.1.4", + "picomatch": "^2.3.1" + } + }, + "@miniflare/sites": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/sites/-/sites-2.12.1.tgz", + "integrity": "sha512-LW4r82cfGJvmJFwoBdXfsRcdDggVf8ppjMZGU3zk7xo+u5yD1uHzO2Arf3XbKNiOp7f9WyC/mXxs4zxF605iLA==", + "dev": true, + "requires": { + "@miniflare/kv": "2.12.1", + "@miniflare/shared": "2.12.1", + "@miniflare/storage-file": "2.12.1" + } + }, + "@miniflare/storage-file": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/storage-file/-/storage-file-2.12.1.tgz", + "integrity": "sha512-eq5wzBwxQC5GVxBfji9svb9FRdSOlA8D8DTgzL29DDjuOYtG9j8ydOlo0J7/2MB/Gq0HYFUHYWHhrklzzwdKQQ==", + "dev": true, + "requires": { + "@miniflare/shared": "2.12.1", + "@miniflare/storage-memory": "2.12.1" + } + }, + "@miniflare/storage-memory": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/storage-memory/-/storage-memory-2.12.1.tgz", + "integrity": "sha512-E9jbrX0L9N7YIHXj2G4td1EKboVLBdHkwh7RvKEZBwOhxDze5h+jMOou57NIbfC5kLOZPOC1fGXjzpp7xUUE6w==", + "dev": true, + "requires": { + "@miniflare/shared": "2.12.1" + } + }, + "@miniflare/watcher": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/watcher/-/watcher-2.12.1.tgz", + "integrity": "sha512-3IG/6g38id5ppbZHB/gMfEvoIEFYdmTTLRsHaPNyWIk/r3LMhHLluVsMcs+Lr/fphkPk6Diou4cBLD2GeeoP7A==", + "dev": true, + "requires": { + "@miniflare/shared": "2.12.1" + } + }, + "@miniflare/web-sockets": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@miniflare/web-sockets/-/web-sockets-2.12.1.tgz", + "integrity": "sha512-Z+zqZqhVdrbmTQf+ETP5H1TPdXC2tUiYPiHRLWTHUks6VVkuwnUtIKxNPBEBXjCjKYYEm8VLclUAt+0yTucLWA==", + "dev": true, + "requires": { + "@miniflare/core": "2.12.1", + "@miniflare/shared": "2.12.1", + "undici": "5.20.0", + "ws": "^8.2.2" + } + }, "@types/node": { "version": "17.0.45", "dev": true @@ -12001,41 +13804,154 @@ "uri-js": "^4.2.2" } }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==" + }, + "cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "requires": { + "restore-cursor": "^4.0.0" + } + }, "commander": { "version": "9.3.0" }, "esbuild": { - "version": "0.15.7", + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.11.tgz", + "integrity": "sha512-pAMImyokbWDtnA/ufPxjQg0fYo2DDuzAlqwnDvbXqHLphe+m80eF++perYKVm8LeTuj2zUuFXC+xgSVxyoHUdg==", "requires": { - "@esbuild/linux-loong64": "0.15.7", - "esbuild-android-64": "0.15.7", - "esbuild-android-arm64": "0.15.7", - "esbuild-darwin-64": "0.15.7", - "esbuild-darwin-arm64": "0.15.7", - "esbuild-freebsd-64": "0.15.7", - "esbuild-freebsd-arm64": "0.15.7", - "esbuild-linux-32": "0.15.7", - "esbuild-linux-64": "0.15.7", - "esbuild-linux-arm": "0.15.7", - "esbuild-linux-arm64": "0.15.7", - "esbuild-linux-mips64le": "0.15.7", - "esbuild-linux-ppc64le": "0.15.7", - "esbuild-linux-riscv64": "0.15.7", - "esbuild-linux-s390x": "0.15.7", - "esbuild-netbsd-64": "0.15.7", - "esbuild-openbsd-64": "0.15.7", - "esbuild-sunos-64": "0.15.7", - "esbuild-windows-32": "0.15.7", - "esbuild-windows-64": "0.15.7", - "esbuild-windows-arm64": "0.15.7" + "@esbuild/android-arm": "0.17.11", + "@esbuild/android-arm64": "0.17.11", + "@esbuild/android-x64": "0.17.11", + "@esbuild/darwin-arm64": "0.17.11", + "@esbuild/darwin-x64": "0.17.11", + "@esbuild/freebsd-arm64": "0.17.11", + "@esbuild/freebsd-x64": "0.17.11", + "@esbuild/linux-arm": "0.17.11", + "@esbuild/linux-arm64": "0.17.11", + "@esbuild/linux-ia32": "0.17.11", + "@esbuild/linux-loong64": "0.17.11", + "@esbuild/linux-mips64el": "0.17.11", + "@esbuild/linux-ppc64": "0.17.11", + "@esbuild/linux-riscv64": "0.17.11", + "@esbuild/linux-s390x": "0.17.11", + "@esbuild/linux-x64": "0.17.11", + "@esbuild/netbsd-x64": "0.17.11", + "@esbuild/openbsd-x64": "0.17.11", + "@esbuild/sunos-x64": "0.17.11", + "@esbuild/win32-arm64": "0.17.11", + "@esbuild/win32-ia32": "0.17.11", + "@esbuild/win32-x64": "0.17.11" } }, - "esbuild-darwin-arm64": { - "version": "0.15.7", - "optional": true + "is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==" + }, + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" }, "json-schema-traverse": { "version": "1.0.0" + }, + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true + }, + "log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "requires": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + } + }, + "miniflare": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-2.12.1.tgz", + "integrity": "sha512-pym6gzg8AQZ1NRChRV1hC4K55N49wndoaDEVRMvZPJrFsmGkNnXkWmlvmZ7SB3BN5UkP5MZwKhLqiJ49Ry8tFA==", + "dev": true, + "requires": { + "@miniflare/cache": "2.12.1", + "@miniflare/cli-parser": "2.12.1", + "@miniflare/core": "2.12.1", + "@miniflare/d1": "2.12.1", + "@miniflare/durable-objects": "2.12.1", + "@miniflare/html-rewriter": "2.12.1", + "@miniflare/http-server": "2.12.1", + "@miniflare/kv": "2.12.1", + "@miniflare/queues": "2.12.1", + "@miniflare/r2": "2.12.1", + "@miniflare/runner-vm": "2.12.1", + "@miniflare/scheduler": "2.12.1", + "@miniflare/shared": "2.12.1", + "@miniflare/sites": "2.12.1", + "@miniflare/storage-file": "2.12.1", + "@miniflare/storage-memory": "2.12.1", + "@miniflare/web-sockets": "2.12.1", + "kleur": "^4.1.4", + "semiver": "^1.1.0", + "source-map-support": "^0.5.20", + "undici": "5.20.0" + } + }, + "ora": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.2.0.tgz", + "integrity": "sha512-c1qb/1rdE+EFDYiLXh10VY459uMh7DN9zlgd8mZJLoeiPpYllN8eAOiih2Rkah5ywxRm5tHN5C9zPheDq8d1MA==", + "requires": { + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + } + }, + "restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "undici": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", + "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", + "dev": true, + "requires": { + "busboy": "^1.6.0" + } } } }, @@ -12161,6 +14077,20 @@ "itty-router": "^2.6.1" }, "dependencies": { + "@esbuild/android-arm": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.9.tgz", + "integrity": "sha512-VZPy/ETF3fBG5PiinIkA0W/tlsvlEgJccyN2DzWZEl0DlVKRbu91PvY2D6Lxgluj4w9QtYHjOWjAT44C+oQ+EQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.9.tgz", + "integrity": "sha512-O+NfmkfRrb3uSsTa4jE3WApidSe3N5++fyOVGP1SmMZi4A3BZELkhUUvj5hwmMuNdlpzAZ8iAPz2vmcR7DCFQA==", + "dev": true, + "optional": true + }, "esbuild": { "version": "0.15.9", "dev": true, @@ -13783,8 +15713,7 @@ "version": "1.0.2" }, "base64-js": { - "version": "1.5.1", - "dev": true + "version": "1.5.1" }, "better-path-resolve": { "version": "1.0.0", @@ -14011,8 +15940,7 @@ } }, "cli-spinners": { - "version": "2.7.0", - "dev": true + "version": "2.7.0" }, "cli-truncate": { "version": "2.1.0", @@ -14413,18 +16341,286 @@ "esbuild-windows-32": "0.14.51", "esbuild-windows-64": "0.14.51", "esbuild-windows-arm64": "0.14.51" + }, + "dependencies": { + "esbuild-android-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz", + "integrity": "sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz", + "integrity": "sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz", + "integrity": "sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz", + "integrity": "sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz", + "integrity": "sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz", + "integrity": "sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz", + "integrity": "sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz", + "integrity": "sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz", + "integrity": "sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz", + "integrity": "sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz", + "integrity": "sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz", + "integrity": "sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz", + "integrity": "sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz", + "integrity": "sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz", + "integrity": "sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz", + "integrity": "sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz", + "integrity": "sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz", + "integrity": "sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz", + "integrity": "sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==", + "dev": true, + "optional": true + } } }, + "esbuild-android-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.9.tgz", + "integrity": "sha512-HQCX7FJn9T4kxZQkhPjNZC7tBWZqJvhlLHPU2SFzrQB/7nDXjmTIFpFTjt7Bd1uFpeXmuwf5h5fZm+x/hLnhbw==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.9.tgz", + "integrity": "sha512-E6zbLfqbFVCNEKircSHnPiSTsm3fCRxeIMPfrkS33tFjIAoXtwegQfVZqMGR0FlsvVxp2NEDOUz+WW48COCjSg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.9.tgz", + "integrity": "sha512-gI7dClcDN/HHVacZhTmGjl0/TWZcGuKJ0I7/xDGJwRQQn7aafZGtvagOFNmuOq+OBFPhlPv1T6JElOXb0unkSQ==", + "dev": true, + "optional": true + }, "esbuild-darwin-arm64": { "version": "0.14.51", "dev": true, "optional": true }, + "esbuild-freebsd-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.9.tgz", + "integrity": "sha512-uM4z5bTvuAXqPxrI204txhlsPIolQPWRMLenvGuCPZTnnGlCMF2QLs0Plcm26gcskhxewYo9LkkmYSS5Czrb5A==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.9.tgz", + "integrity": "sha512-HHDjT3O5gWzicGdgJ5yokZVN9K9KG05SnERwl9nBYZaCjcCgj/sX8Ps1jvoFSfNCO04JSsHSOWo4qvxFuj8FoA==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.9.tgz", + "integrity": "sha512-AQIdE8FugGt1DkcekKi5ycI46QZpGJ/wqcMr7w6YUmOmp2ohQ8eO4sKUsOxNOvYL7hGEVwkndSyszR6HpVHLFg==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.9.tgz", + "integrity": "sha512-4RXjae7g6Qs7StZyiYyXTZXBlfODhb1aBVAjd+ANuPmMhWthQilWo7rFHwJwL7DQu1Fjej2sODAVwLbcIVsAYQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.9.tgz", + "integrity": "sha512-3Zf2GVGUOI7XwChH3qrnTOSqfV1V4CAc/7zLVm4lO6JT6wbJrTgEYCCiNSzziSju+J9Jhf9YGWk/26quWPC6yQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.9.tgz", + "integrity": "sha512-a+bTtxJmYmk9d+s2W4/R1SYKDDAldOKmWjWP0BnrWtDbvUBNOm++du0ysPju4mZVoEFgS1yLNW+VXnG/4FNwdQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.9.tgz", + "integrity": "sha512-Zn9HSylDp89y+TRREMDoGrc3Z4Hs5u56ozZLQCiZAUx2+HdbbXbWdjmw3FdTJ/i7t5Cew6/Q+6kfO3KCcFGlyw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.9.tgz", + "integrity": "sha512-OEiOxNAMH9ENFYqRsWUj3CWyN3V8P3ZXyfNAtX5rlCEC/ERXrCEFCJji/1F6POzsXAzxvUJrTSTCy7G6BhA6Fw==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.9.tgz", + "integrity": "sha512-ukm4KsC3QRausEFjzTsOZ/qqazw0YvJsKmfoZZm9QW27OHjk2XKSQGGvx8gIEswft/Sadp03/VZvAaqv5AIwNA==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.9.tgz", + "integrity": "sha512-uDOQEH55wQ6ahcIKzQr3VyjGc6Po/xblLGLoUk3fVL1qjlZAibtQr6XRfy5wPJLu/M2o0vQKLq4lyJ2r1tWKcw==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.9.tgz", + "integrity": "sha512-yWgxaYTQz+TqX80wXRq6xAtb7GSBAp6gqLKfOdANg9qEmAI1Bxn04IrQr0Mzm4AhxvGKoHzjHjMgXbCCSSDxcw==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.9.tgz", + "integrity": "sha512-JmS18acQl4iSAjrEha1MfEmUMN4FcnnrtTaJ7Qg0tDCOcgpPPQRLGsZqhes0vmx8VA6IqRyScqXvaL7+Q0Uf3A==", + "dev": true, + "optional": true + }, "esbuild-register": { "version": "3.3.3", "dev": true, "requires": {} }, + "esbuild-sunos-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.9.tgz", + "integrity": "sha512-UKynGSWpzkPmXW3D2UMOD9BZPIuRaSqphxSCwScfEE05Be3KAmvjsBhht1fLzKpiFVJb0BYMd4jEbWMyJ/z1hQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.9.tgz", + "integrity": "sha512-aqXvu4/W9XyTVqO/hw3rNxKE1TcZiEYHPsXM9LwYmKSX9/hjvfIJzXwQBlPcJ/QOxedfoMVH0YnhhQ9Ffb0RGA==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.9.tgz", + "integrity": "sha512-zm7h91WUmlS4idMtjvCrEeNhlH7+TNOmqw5dJPJZrgFaxoFyqYG6CKDpdFCQXdyKpD5yvzaQBOMVTCBVKGZDEg==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.9.tgz", + "integrity": "sha512-yQEVIv27oauAtvtuhJVfSNMztJJX47ismRS6Sv2QMVV9RM+6xjbMWuuwM2nxr5A2/gj/mu2z9YlQxiwoFRCfZA==", + "dev": true, + "optional": true + }, "escalade": { "version": "3.1.1" }, @@ -14893,6 +17089,11 @@ "has-symbols": "^1.0.1" } }, + "get-port": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", + "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==" + }, "get-stream": { "version": "6.0.1", "dev": true @@ -15105,8 +17306,7 @@ } }, "ieee754": { - "version": "1.2.1", - "dev": true + "version": "1.2.1" }, "immer": { "version": "9.0.14" @@ -16489,7 +18689,6 @@ }, "readable-stream": { "version": "3.6.0", - "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -16636,8 +18835,7 @@ } }, "safe-buffer": { - "version": "5.2.1", - "dev": true + "version": "5.2.1" }, "safe-stable-stringify": { "version": "1.1.1" @@ -16970,6 +19168,35 @@ "version": "0.0.10", "dev": true }, + "stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "requires": { + "bl": "^5.0.0" + }, + "dependencies": { + "bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "requires": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + } + } + }, "stream-transform": { "version": "2.1.3", "requires": { @@ -16982,7 +19209,6 @@ }, "string_decoder": { "version": "1.3.0", - "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -17479,8 +19705,7 @@ } }, "util-deprecate": { - "version": "1.0.2", - "dev": true + "version": "1.0.2" }, "utility-types": { "version": "3.10.0" diff --git a/packages/cli/build.sh b/packages/cli/build.sh index fc57b4342..e67c8f360 100755 --- a/packages/cli/build.sh +++ b/packages/cli/build.sh @@ -6,5 +6,8 @@ esbuild ./src/cli.ts \ --platform=node \ --external:esbuild \ --external:@stoplight/json-ref-resolver \ + --external:@miniflare/storage-redis \ + --external:ioredis \ + --external:fsevents \ --outfile=./dist/cli.js \ --log-level=warning diff --git a/packages/cli/package.json b/packages/cli/package.json index 4a8ce8d16..46b356882 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -11,23 +11,29 @@ "commander": "^9.2.0", "conf": "^10.1.2", "dedent-js": "^1.0.1", - "esbuild": "^0.15.7", + "esbuild": "^0.17.11", + "get-port": "^6.1.2", "js-yaml": "^4.1.0", + "ora": "^6.2.0", "prompts": "^2.4.2" }, "devDependencies": { "@gitbook/eslint-config": "*", "@types/node": "^17.0.33", "@types/prompts": "^2.0.14", + "chokidar": "^3.5.3", "eslint": "^8.16.0", + "miniflare": "^2.12.1", "typescript": "^4.6.3" }, "files": [ - "dist/**" + "dist/**", + "postinstall.js" ], "scripts": { "build": "./build.sh", "lint": "eslint ./src/**/*.ts", + "postinstall": "node postinstall.js", "typecheck": "tsc --noEmit" }, "engines": { diff --git a/packages/cli/postinstall.js b/packages/cli/postinstall.js new file mode 100644 index 000000000..d32dabbc6 --- /dev/null +++ b/packages/cli/postinstall.js @@ -0,0 +1,142 @@ +/** + * Script to install cloudflared binary on the current platform. + * Reference: https://github.com/JacobLinCool/node-cloudflared/blob/main/src/install.ts + */ +const { execSync } = require('child_process'); +const fs = require('fs'); +const https = require('https'); +const path = require('path'); + +const RELEASE_BASE = 'https://github.com/cloudflare/cloudflared/releases/'; + +const LINUX_URL = { + arm64: 'cloudflared-linux-arm64', + arm: 'cloudflared-linux-arm', + x64: 'cloudflared-linux-amd64', + ia32: 'cloudflared-linux-386', +}; + +const MACOS_URL = { + arm64: 'cloudflared-darwin-amd64.tgz', + x64: 'cloudflared-darwin-amd64.tgz', +}; + +const WINDOWS_URL = { + x64: 'cloudflared-windows-amd64.exe', + ia32: 'cloudflared-windows-386.exe', +}; + +function resolveBase(version) { + if (version === 'latest') { + return `${RELEASE_BASE}latest/download/`; + } + return `${RELEASE_BASE}download/${version}/`; +} + +/** + * Install cloudflared to the given path. + * @param to The path to the binary to install. + * @param version The version of cloudflared to install. + * @returns The path to the binary that was installed. + */ +async function installCloudflared(to, version = 'latest') { + if (process.platform === 'linux') { + return installLinux(to, version); + } else if (process.platform === 'darwin') { + return installMacOS(to, version); + } else if (process.platform === 'win32') { + return installWindows(to, version); + } else { + console.error(`Unsupported platform: ${process.platform}`); + process.exit(1); + } +} + +async function installLinux(to, version = 'latest') { + const file = LINUX_URL[process.arch]; + + if (file === undefined) { + console.error(`Unsupported architecture: ${process.arch}`); + process.exit(1); + } + + await download(resolveBase(version) + file, to); + fs.chmodSync(to, '755'); + return to; +} + +async function installMacOS(to, version = 'latest') { + const file = MACOS_URL[process.arch]; + + if (file === undefined) { + console.error(`Unsupported architecture: ${process.arch}`); + process.exit(1); + } + + await download(resolveBase(version) + file, `${to}.tgz`); + process.env.VERBOSE && console.log(`Extracting to ${to}`); + execSync(`tar -xzf ${path.basename(`${to}.tgz`)}`, { cwd: path.dirname(to) }); + fs.unlinkSync(`${to}.tgz`); + fs.renameSync(`${path.dirname(to)}/cloudflared`, to); + return to; +} + +async function installWindows(to, version = 'latest') { + const file = WINDOWS_URL[process.arch]; + + if (file === undefined) { + console.error(`Unsupported architecture: ${process.arch}`); + process.exit(1); + } + + await download(resolveBase(version) + file, to); + return to; +} + +function download(url, to, redirect = 0) { + if (redirect === 0) { + process.env.VERBOSE && console.log(`Downloading ${url} to ${to}`); + } else { + process.env.VERBOSE && console.log(`Redirecting to ${url}`); + } + + return new Promise((resolve, reject) => { + if (!fs.existsSync(path.dirname(to))) { + fs.mkdirSync(path.dirname(to), { recursive: true }); + } + + let done = true; + const file = fs.createWriteStream(to); + const request = https.get(url, (res) => { + if (res.statusCode === 302 && res.headers.location !== undefined) { + const redirection = res.headers.location; + done = false; + file.close(() => resolve(download(redirection, to, redirect + 1))); + return; + } + res.pipe(file); + }); + + file.on('finish', () => { + if (done) { + file.close(() => resolve(to)); + } + }); + + request.on('error', (err) => { + fs.unlink(to, () => reject(err)); + }); + + file.on('error', (err) => { + fs.unlink(to, () => reject(err)); + }); + + request.end(); + }); +} + +/** + * Install the cloudflared binary inside the dist folder. + * Locking the version to 2023.3.1 instead of latest to avoid breaking changes. + */ +installCloudflared(path.join(__dirname, 'dist', 'cloudflared'), '2023.3.1'); diff --git a/packages/cli/src/build.ts b/packages/cli/src/build.ts new file mode 100644 index 000000000..b360b9d7f --- /dev/null +++ b/packages/cli/src/build.ts @@ -0,0 +1,66 @@ +import * as esbuild from 'esbuild'; +import fs from 'fs'; +import os from 'os'; +import path from 'path'; + +import { resolveFile, readIntegrationManifest } from './manifest'; + +interface BuildOutput { + /** path where the final script is outputted */ + path: string; + /** the text content of built script */ + script: string; + /** resolved manifest config used during the process */ + manifest: Awaited>; +} + +/** + * Build the script into a single worker definition. + */ +export async function buildScriptFromManifest( + manifestSpecPath: string, + options: { + mode?: 'development' | 'production'; + } = { mode: 'production' } +): Promise { + const manifest = await readIntegrationManifest(manifestSpecPath); + /** + * Resolve the input and output file paths relatve to the manifest file. + */ + const inputFilePath = resolveFile(manifestSpecPath, manifest.script); + const outputFilePath = path.join(os.tmpdir(), '.gitbook', manifest.name, 'script.js'); + + await esbuild.build({ + platform: 'neutral', + entryPoints: [inputFilePath], + outfile: outputFilePath, + bundle: true, + minify: options.mode === 'production', + sourcemap: options.mode === 'development', + target: ['es2020'], + write: true, + mainFields: ['worker', 'browser', 'module', 'jsnext', 'main'], + conditions: ['worker', 'browser', 'import', 'production'], + define: { + 'process.env.NODE_ENV': JSON.stringify(options.mode), + MODE: JSON.stringify(options.mode), + }, + // Automatically handle JSX using the ContentKit runtime + jsx: 'automatic', + jsxImportSource: '@gitbook/runtime', + // TODO: change format when we switch to Cloudflare Workers + // but until them, we need to use "iife" to be able to use + // the export syntax while running like an entry point. + format: 'iife', + globalName: '__gitbook_integration', + loader: { + // If importing a file as `.raw.js`, eslint will convert to string so we can use that + // file as a string without opening it. + '.raw.js': 'text', + }, + }); + + const script = await fs.promises.readFile(outputFilePath, 'utf8'); + + return { path: outputFilePath, script, manifest }; +} diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts index fd0253ce5..d2f8e35d5 100644 --- a/packages/cli/src/cli.ts +++ b/packages/cli/src/cli.ts @@ -7,6 +7,7 @@ import prompts from 'prompts'; import { GITBOOK_DEFAULT_ENDPOINT } from '@gitbook/api'; import packageJSON from '../package.json'; +import { startIntegrationsDevServer } from './dev'; import { promptNewIntegration } from './init'; import { DEFAULT_MANIFEST_FILE, resolveIntegrationManifestPath } from './manifest'; import { publishIntegration, unpublishIntegration } from './publish'; @@ -52,6 +53,14 @@ program await promptNewIntegration(path.resolve(process.cwd(), dirPath)); }); +program + .command('dev') + .description('run the integrations dev server') + .argument('[space]', 'ID of the development space', undefined) + .action(async (space?: string) => { + await startIntegrationsDevServer(space); + }); + program .command('publish') .argument('[file]', 'integration definition file', DEFAULT_MANIFEST_FILE) @@ -88,7 +97,15 @@ program }); program.parseAsync().then( - () => { + (command) => { + /** + * If the command is "dev", we don't want to exit the process as it will + * kill the dev server. + */ + if (command.args[0] === 'dev') { + return; + } + process.exit(0); }, (error) => { diff --git a/packages/cli/src/dev.ts b/packages/cli/src/dev.ts new file mode 100644 index 000000000..6673e00a6 --- /dev/null +++ b/packages/cli/src/dev.ts @@ -0,0 +1,176 @@ +import Ajv, { Schema } from 'ajv'; +import addFormats from 'ajv-formats'; +import chokidar from 'chokidar'; +import * as fs from 'fs'; +import getPort from 'get-port'; +import * as yaml from 'js-yaml'; +import { Miniflare } from 'miniflare'; +import ora from 'ora'; +import * as path from 'path'; + +import { buildScriptFromManifest } from './build'; +import { prettyPath } from './files'; +import { getDefaultManifestPath, resolveFile, resolveIntegrationManifestPath } from './manifest'; +import { getAPIClient } from './remote'; +import { createDevTunnel } from './tunnel'; + +export const GITBOOK_DEV_CONFIG_FILE = '.gitbook-dev.yaml'; + +const spinner = ora({ color: 'blue' }); + +/** + * Start the integrations dev server on a random available port. + * The dev server will automatically reload changes to the integration script. + */ +export async function startIntegrationsDevServer(space: string | undefined) { + spinner.start('Starting dev server...\n'); + const port = await getPort(); + /** + * Read the integration manifest and build the integration script so that + * it can be served by the dev server. + */ + const manifestSpecPath = await resolveIntegrationManifestPath(getDefaultManifestPath()); + const { path: scriptPath, manifest } = await buildScriptFromManifest(manifestSpecPath, { + mode: 'development', + }); + + /** + * Also, read the dev config file to get the space to use for the dev server. + * If a space is provided as an argument, it will override the space in the dev config file. + */ + const devConfigPath = resolveFile(manifestSpecPath, GITBOOK_DEV_CONFIG_FILE); + if (space) { + await writeDevConfig(devConfigPath, { space }); + } + const devConfig = await readDevConfig(devConfigPath); + + /** + * Create a tunnel to allow the dev server to receive integration events + * from the GitBook platform + */ + const tunnelUrl = await createDevTunnel(port); + + /** + * Start the miniflare dev server. It will automatically reload the script + * when it detects a change with watch mode + */ + const mf = new Miniflare({ + scriptPath, + port, + liveReload: true, + watch: true, + }); + await mf.startServer(); + + /** + * Add the tunnel to the integration for the dev space events in the GitBook platform + */ + const api = await getAPIClient(true); + await api.integrations.updateIntegrationDevSpace(manifest.name, devConfig.space, { + tunnelUrl, + }); + + spinner.succeed(`Dev server started on ${port} 🔥`); + spinner.info( + `Integration events originating from space (${devConfig.space}) will be dispatched to your locally running version of the integration.` + ); + + /** + * Additionally, watch the directory of the script file for changes. When a change is + * detected, rebuild the script and miniflare will automatically reload it in the dev server. + */ + const watcher = chokidar + .watch(path.dirname(resolveFile(manifestSpecPath, manifest.script)), { + ignoreInitial: true, + }) + .on('all', async () => { + const p1 = performance.now(); + console.log('Detected changes, rebuilding...🛠'); + try { + await buildScriptFromManifest(manifestSpecPath); + console.log(`📦 Rebuilt in ${((performance.now() - p1) / 1000).toFixed(2)}s`); + } catch (error) { + console.log(error); + } + }); + + /** + * Remove the tunnel from GitBook platform when the process is being + * killed (e.g. Ctrl/CMD+C) + */ + process.on('SIGINT', async () => { + spinner.start('Exiting...\n'); + await Promise.all([ + watcher.close(), + api.integrations.removeIntegrationDevSpace(manifest.name, devConfig.space), + ]); + process.exit(0); + }); +} + +// +// Dev config file for the integrations dev server. +// +interface GitBookDevConfig { + space: string; +} + +/** + * Read the dev config file from at the given path. + */ +async function readDevConfig(configFilePath: string): Promise { + try { + const content = await fs.promises.readFile(configFilePath, 'utf8'); + const doc = yaml.load(content); + const config = await validateDevConfig(doc as object); + + return config; + } catch (e) { + throw new Error( + `Failed to read dev config from ${prettyPath(configFilePath)}: ${e.message}` + ); + } +} + +/** + * Write the dev config file to the given path. + */ +async function writeDevConfig(configFilePath: string, config: GitBookDevConfig): Promise { + try { + const normalized = await validateDevConfig(config); + const configContent = yaml.dump(normalized); + await fs.promises.writeFile(configFilePath, configContent, 'utf8'); + } catch (e) { + throw new Error( + `Failed to write dev config to ${prettyPath(configFilePath)}: ${e.message}` + ); + } +} + +/** + * Validate the dev config file. + */ +async function validateDevConfig(data: object): Promise { + const ajv = new Ajv(); + addFormats(ajv); + + const schema: Schema = { + type: 'object', + properties: { + space: { + type: 'string', + }, + }, + required: ['space'], + additionalProperties: false, + }; + + const validate = ajv.compile(schema); + const valid = validate(data); + + if (!valid) { + throw new Error(ajv.errorsText(validate.errors)); + } + + return data as GitBookDevConfig; +} diff --git a/packages/cli/src/manifest.ts b/packages/cli/src/manifest.ts index 8491c2360..ad9942a89 100644 --- a/packages/cli/src/manifest.ts +++ b/packages/cli/src/manifest.ts @@ -30,6 +30,20 @@ export interface IntegrationManifest { contentSecurityPolicy?: string; } +/** + * Get the default manifest file path for the current working directory. + */ +export function getDefaultManifestPath(): string { + return path.resolve(process.cwd(), DEFAULT_MANIFEST_FILE); +} + +/** + * Resolve a file path relative to the manifest spec file directory. + */ +export function resolveFile(specFile: string, filePath: string): string { + return path.resolve(path.dirname(specFile), filePath); +} + /** * Resolve a user-inputed path into a real manifest file path. */ diff --git a/packages/cli/src/publish.ts b/packages/cli/src/publish.ts index 8ad903eb1..5269e2cb7 100644 --- a/packages/cli/src/publish.ts +++ b/packages/cli/src/publish.ts @@ -1,10 +1,10 @@ -import * as esbuild from 'esbuild'; import * as fs from 'fs'; import * as path from 'path'; import * as api from '@gitbook/api'; -import { readIntegrationManifest } from './manifest'; +import { buildScriptFromManifest } from './build'; +import { resolveFile } from './manifest'; import { getAPIClient } from './remote'; /** @@ -12,22 +12,21 @@ import { getAPIClient } from './remote'; * If it already exists, it'll update it. */ export async function publishIntegration( - filePath: string, + specFilePath: string, // will be fixed once we update eslint and everything // eslint-disable-next-line no-undef updates: Partial = {} ): Promise { - const manifest = await readIntegrationManifest(filePath); - const api = await getAPIClient(true); - // Build the script - const script = await buildScript(resolveFile(filePath, manifest.script)); + const { script, manifest } = await buildScriptFromManifest(specFilePath); + + const api = await getAPIClient(true); // Publish the integration. const created = await api.integrations.publishIntegration(manifest.name, { title: manifest.title, icon: manifest.icon - ? await readImage(resolveFile(filePath, manifest.icon), 'icon') + ? await readImage(resolveFile(specFilePath, manifest.icon), 'icon') : undefined, description: manifest.description, summary: manifest.summary, @@ -41,7 +40,7 @@ export async function publishIntegration( externalLinks: manifest.externalLinks, previewImages: await Promise.all( (manifest.previewImages || []).map(async (imageFilePath) => - readImage(resolveFile(filePath, imageFilePath), 'preview') + readImage(resolveFile(specFilePath, imageFilePath), 'preview') ) ), contentSecurityPolicy: manifest.contentSecurityPolicy, @@ -63,40 +62,6 @@ export async function unpublishIntegration(name: string): Promise { console.log(`👌 Integration "${name}" has been deleted`); } -/** - * Build the script into a single worker definition. - */ -async function buildScript(filePath: string): Promise { - const result = await esbuild.build({ - platform: 'neutral', - entryPoints: [filePath], - bundle: true, - minify: true, - target: ['es2020'], - write: false, - mainFields: ['worker', 'browser', 'module', 'jsnext', 'main'], - conditions: ['worker', 'browser', 'import', 'production'], - define: { - 'process.env.NODE_ENV': '"production"', - }, - // Automatically handle JSX using the ContentKit runtime - jsx: 'automatic', - jsxImportSource: '@gitbook/runtime', - // TODO: change format when we switch to Cloudflare Workers - // but until them, we need to use "iife" to be able to use - // the export syntax while running like an entry point. - format: 'iife', - globalName: '__gitbook_integration', - loader: { - // If importing a file as `.raw.js`, eslint will convert to string so we can use that - // file as a string without opening it. - '.raw.js': 'text', - }, - }); - - return result.outputFiles[0].text; -} - /** * Read and compile an icon. */ @@ -125,7 +90,3 @@ async function readImage(filePath: string, type: 'icon' | 'preview'): Promise { + return new Promise((resolve, reject) => { + let tunnelUrl: string; + let connectionsCount = 0; + const cloudflared = spawn(path.join(__dirname, 'cloudflared'), [ + 'tunnel', + '--url', + `http://localhost:${port}`, + ]); + + cloudflared.stderr.on('data', (data) => { + const output = data.toString(); + + // Store the tunnel URL provided by cloudflare + const tunnelUrlOutput = output.match(/https:\/\/.*\.trycloudflare\.com/); + if (tunnelUrlOutput) { + tunnelUrl = tunnelUrlOutput[0]; + } + + // Count the number of connections to the tunnel + // We need at least 4 connections to be able to use the tunnel + const tunnelConnectionOutput = output.match(/Connection .+ registered/); + if (tunnelConnectionOutput) { + connectionsCount++; + } + + if (connectionsCount >= 4) { + resolve(tunnelUrl); + } + }); + + cloudflared.on('close', (code) => { + if (code !== 0) { + throw new Error(`cloudflared exited with code ${code}`); + } + }); + }); +} diff --git a/packages/runtime/global.d.ts b/packages/runtime/global.d.ts new file mode 100644 index 000000000..16988c214 --- /dev/null +++ b/packages/runtime/global.d.ts @@ -0,0 +1,9 @@ +export {}; + +declare global { + /** + * Environment variable for the worker. Exists in the global scope. + * https://developers.cloudflare.com/workers/platform/environment-variables/ + */ + const MODE: 'production' | 'development'; +} diff --git a/packages/runtime/src/integrations.ts b/packages/runtime/src/integrations.ts index 8b42a0094..a096220fc 100644 --- a/packages/runtime/src/integrations.ts +++ b/packages/runtime/src/integrations.ts @@ -44,9 +44,15 @@ export function createIntegration { const version = new URL(ev.request.url).pathname.slice(1); - if (version !== 'v1') { - logger.error(`unsupported version ${version}`); - return new Response(`Unsupported version ${version}`, { status: 400 }); + /** + * Only check the version in production, as the dispatcher is not versioned + * in development mode + */ + if (MODE === 'production') { + if (version !== 'v1') { + logger.error(`unsupported version ${version}`); + return new Response(`Unsupported version ${version}`, { status: 400 }); + } } try { diff --git a/packages/runtime/tsconfig.json b/packages/runtime/tsconfig.json index 1d39395fd..45266b783 100644 --- a/packages/runtime/tsconfig.json +++ b/packages/runtime/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "@gitbook/tsconfig/base.json", - "include": ["src/**/*"], + "include": ["src/**/*", "./global.d.ts"], "rootDir": "./src", "compilerOptions": { "baseUrl": "./src",