feat: init
This commit is contained in:
68
node_modules/listhen/LICENSE
generated
vendored
Normal file
68
node_modules/listhen/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) Pooya Parsa <pooya@pi0.io>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
src/lib/open forked from https://github.com/sindresorhus/open
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
src/lib/xdg-open
|
||||
|
||||
Utility script to open a URL in the registered default application.
|
||||
|
||||
Refer to the usage() function below for usage.
|
||||
|
||||
Copyright 2009-2010, Fathi Boudra <fabo@freedesktop.org>
|
||||
Copyright 2009-2010, Rex Dieter <rdieter@fedoraproject.org>
|
||||
Copyright 2006, Kevin Krammer <kevin.krammer@gmx.at>
|
||||
Copyright 2006, Jeremy White <jwhite@codeweavers.com>
|
||||
|
||||
LICENSE:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
231
node_modules/listhen/README.md
generated
vendored
Normal file
231
node_modules/listhen/README.md
generated
vendored
Normal file
@@ -0,0 +1,231 @@
|
||||
# 👂 listhen
|
||||
|
||||
<!-- automd:badges -->
|
||||
|
||||
[](https://npmjs.com/package/listhen)
|
||||
[](https://npmjs.com/package/listhen)
|
||||
|
||||
<!-- /automd -->
|
||||
|
||||
Elegant HTTP listener!
|
||||
|
||||
[👉 Online Playground](https://stackblitz.com/github/unjs/listhen/tree/main/playground?startScript=dev)
|
||||
|
||||
## Features
|
||||
|
||||
✅ Dev server with HMR, static, WebSockets and TypeScript support with <a href="https://github.com/unjs/jiti">unjs/jiti</a><br>
|
||||
|
||||
✅ Works with Node.js, Express, and <a href="https://github.com/unjs/h3">unjs/h3</a> out of the box <br>
|
||||
|
||||
✅ Show the QR code of the public URL with <a href="https://github.com/unjs/uqr">unjs/uqr</a><br>
|
||||
|
||||
✅ Tunnel your local server to the world with <a href="https://github.com/unjs/untun">unjs/untun</a><br>
|
||||
|
||||
✅ Assign a port or fallback to a nicer alternative with <a href="https://github.com/unjs/get-port-please">unjs/get-port-please</a>
|
||||
|
||||
✅ Gracefully shutdown Server with <a href="https://github.com/thedillonb/http-shutdown">http-shutdown</a><br>
|
||||
|
||||
✅ Zero Config WebSockets with <a href="https://github.com/unjs/crossws">unjs/crossws</a>
|
||||
|
||||
✅ Copy the URL to the clipboard<br>
|
||||
|
||||
✅ HTTPS support with self-signed certificates<br>
|
||||
|
||||
✅ Open URL in browser<br>
|
||||
|
||||
✅ Detect test and production environments to auto-adjust behavior<br>
|
||||
|
||||
✅ Close on the exit signal<br>
|
||||
|
||||
<div align="center">
|
||||
<img width="100%" src="./.assets/screenshot.png">
|
||||
</div>
|
||||
|
||||
## Quick Usage (CLI)
|
||||
|
||||
You can run your applications in localhost with TypeScript support and watch mode using `listhen` CLI:
|
||||
|
||||
Create `index.ts`:
|
||||
|
||||
```ts
|
||||
export default (req, res) => {
|
||||
res.end("Hello World!");
|
||||
};
|
||||
```
|
||||
|
||||
or using [unjs/h3](https://github.com/unjs/h3):
|
||||
|
||||
```ts
|
||||
import { createApp, eventHandler } from "h3";
|
||||
|
||||
export const app = createApp();
|
||||
|
||||
app.use(
|
||||
"/",
|
||||
eventHandler(() => "Hello world!"),
|
||||
);
|
||||
```
|
||||
|
||||
or use npx to invoke `listhen` command:
|
||||
|
||||
```sh
|
||||
npx listhen -w ./index.ts
|
||||
```
|
||||
|
||||
## Usage (API)
|
||||
|
||||
Install package:
|
||||
|
||||
```bash
|
||||
# pnpm
|
||||
pnpm i listhen
|
||||
|
||||
# npm
|
||||
npm i listhen
|
||||
|
||||
# yarn
|
||||
yarn add listhen
|
||||
|
||||
```
|
||||
|
||||
Import into your Node.js project:
|
||||
|
||||
```js
|
||||
// CommonJS
|
||||
const { listen, listenAndWatch } = require("listhen");
|
||||
|
||||
// ESM
|
||||
import { listen, listenAndWatch } from "listhen";
|
||||
```
|
||||
|
||||
```ts
|
||||
const handler = (req, res) => {
|
||||
res.end("Hi!")
|
||||
}
|
||||
|
||||
// listener: { url, getURL, server, close, ... }
|
||||
const listener = await listen(handler, options)
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
### `port`
|
||||
|
||||
- Default: `process.env.PORT` or 3000 or memorized random (see [get-port-please](https://github.com/unjs/get-port-please))
|
||||
|
||||
Port to listen.
|
||||
|
||||
### `hostname`
|
||||
|
||||
- Default: `process.env.HOST || '0.0.0.0'`
|
||||
|
||||
Default hostname to listen.
|
||||
|
||||
### `https`
|
||||
|
||||
- Type: Boolean | Object
|
||||
- Default: `false`
|
||||
|
||||
Listen on HTTPS with SSL enabled.
|
||||
|
||||
#### Self-Signed Certificate
|
||||
|
||||
By setting `https: true`, listhen will use an auto-generated self-signed certificate.
|
||||
|
||||
You can set https to an object for custom options. Possible options:
|
||||
|
||||
- `domains`: (Array) Default is `['localhost', '127.0.0.1', '::1']`.
|
||||
- `validityDays`: (Number) Default is `1`.
|
||||
|
||||
#### User-Provided Certificate
|
||||
|
||||
Set `https: { cert, key }` where the cert and key are paths to the SSL certificates.
|
||||
With an encrypted private key, you also need to set `passphrase` on the `https` object.
|
||||
|
||||
To provide a certificate stored in a keystore set `https: { pfx }` with a path to the keystore.
|
||||
When the keystore is password protected also set `passphrase`.
|
||||
|
||||
You can also provide an inline cert and key instead of reading from the filesystem. In this case, they should start with `--`.
|
||||
|
||||
### `showURL`
|
||||
|
||||
- Default: `true` (force disabled on a test environment)
|
||||
|
||||
Show a CLI message for the listening URL.
|
||||
|
||||
### `baseURL`
|
||||
|
||||
- Default: `/`
|
||||
|
||||
### `open`
|
||||
|
||||
- Default: `false` (force disabled on test and production environments)
|
||||
|
||||
Open the URL in the browser. Silently ignores errors.
|
||||
|
||||
### `clipboard`
|
||||
|
||||
- Default: `false` (force disabled on test and production environments)
|
||||
|
||||
Copy the URL to the clipboard. Silently ignores errors.
|
||||
|
||||
### `isTest`
|
||||
|
||||
- Default: `process.env.NODE_ENV === 'test'`
|
||||
|
||||
Detect if running in a test environment to disable some features.
|
||||
|
||||
### `autoClose`
|
||||
|
||||
- Default: `true`
|
||||
|
||||
Automatically close when an `exit` event, `SIGTERM`, `SIGINT` or `SIGHUP` signal is received in the process.
|
||||
|
||||
### `publicURL`
|
||||
|
||||
- Default: (the first public URL listening)
|
||||
|
||||
The public URL to show in the CLI output
|
||||
|
||||
### `qr`
|
||||
|
||||
- Default: `true`
|
||||
|
||||
Print QR Code for public address.
|
||||
|
||||
### `public`
|
||||
|
||||
- Default: `false` for development or when `hostname` is `localhost` and `true` for production
|
||||
|
||||
When enabled, listhen tries to listen to all network interfaces. You can also enable this option using `--host` CLI flag.
|
||||
|
||||
### `ws`
|
||||
|
||||
- Default: `false`
|
||||
|
||||
Enable experimental WebSocket support using [unjs/crossws](https://crossws.unjs.io/) or node upgrade handler.
|
||||
|
||||
Option can be a function for Node.js `upgrade` handler (`(req, head) => void`) or an Object to use [CrossWS Hooks](https://crossws.unjs.io/guide/api).
|
||||
|
||||
When using dev server CLI, you can easily use `--ws` and a named export called `websocket` to define [CrossWS Hooks](https://github.com/unjs/crossws) with HMR support!
|
||||
|
||||
## License
|
||||
|
||||
<!-- automd:contributors license=MIT author="pi0" -->
|
||||
|
||||
Published under the [MIT](https://github.com/unjs/listhen/blob/main/LICENSE) license.
|
||||
Made by [@pi0](https://github.com/pi0) and [community](https://github.com/unjs/listhen/graphs/contributors) 💛
|
||||
<br><br>
|
||||
<a href="https://github.com/unjs/listhen/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=unjs/listhen" />
|
||||
</a>
|
||||
|
||||
<!-- /automd -->
|
||||
|
||||
<!-- automd:with-automd -->
|
||||
|
||||
---
|
||||
|
||||
_🤖 auto updated with [automd](https://automd.unjs.io)_
|
||||
|
||||
<!-- /automd -->
|
||||
5
node_modules/listhen/bin/listhen.mjs
generated
vendored
Executable file
5
node_modules/listhen/bin/listhen.mjs
generated
vendored
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import { runMain } from "../dist/cli.mjs";
|
||||
|
||||
runMain();
|
||||
1
node_modules/listhen/cli.d.ts
generated
vendored
Normal file
1
node_modules/listhen/cli.d.ts
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
export * from './dist/cli'
|
||||
1071
node_modules/listhen/dist/chunks/xdg-open.cjs
generated
vendored
Normal file
1071
node_modules/listhen/dist/chunks/xdg-open.cjs
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1069
node_modules/listhen/dist/chunks/xdg-open.mjs
generated
vendored
Normal file
1069
node_modules/listhen/dist/chunks/xdg-open.mjs
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
177
node_modules/listhen/dist/cli.cjs
generated
vendored
Normal file
177
node_modules/listhen/dist/cli.cjs
generated
vendored
Normal file
@@ -0,0 +1,177 @@
|
||||
'use strict';
|
||||
|
||||
const citty = require('citty');
|
||||
const pathe = require('pathe');
|
||||
const index = require('./index.cjs');
|
||||
require('node:http');
|
||||
require('node:https');
|
||||
require('node:util');
|
||||
require('get-port-please');
|
||||
require('http-shutdown');
|
||||
require('consola');
|
||||
require('defu');
|
||||
require('consola/utils');
|
||||
require('uqr');
|
||||
require('node:child_process');
|
||||
require('node:fs');
|
||||
require('node:os');
|
||||
require('node:path');
|
||||
require('std-env');
|
||||
require('node-forge');
|
||||
require('node:fs/promises');
|
||||
require('mlly');
|
||||
|
||||
const name = "listhen";
|
||||
const version = "1.8.0";
|
||||
const description = "👂 Elegant HTTP Listener";
|
||||
|
||||
const main = citty.defineCommand({
|
||||
meta: {
|
||||
name,
|
||||
description,
|
||||
version
|
||||
},
|
||||
args: {
|
||||
cwd: {
|
||||
type: "string",
|
||||
description: "Current working directory"
|
||||
},
|
||||
entry: {
|
||||
type: "positional",
|
||||
description: "Listener entry file (./app.ts)",
|
||||
required: true
|
||||
},
|
||||
name: {
|
||||
type: "string",
|
||||
description: "Name to use in the banner"
|
||||
},
|
||||
baseURL: {
|
||||
type: "string",
|
||||
description: "Base URL to use"
|
||||
},
|
||||
watch: {
|
||||
type: "boolean",
|
||||
description: "Watch for changes",
|
||||
alias: "w"
|
||||
},
|
||||
ws: {
|
||||
type: "boolean",
|
||||
description: "Enable Experimental WebSocket support"
|
||||
},
|
||||
...getArgs()
|
||||
},
|
||||
async run({ args }) {
|
||||
const opts = {
|
||||
...args,
|
||||
...parseArgs(args),
|
||||
baseURL: args.baseURL,
|
||||
name: args.name
|
||||
};
|
||||
const entry = pathe.isAbsolute(args.entry) || args.entry.startsWith(".") ? args.entry : `./${args.entry}`;
|
||||
if (args.watch) {
|
||||
await index.listenAndWatch(entry, opts);
|
||||
} else {
|
||||
const devServer = await index.createDevServer(entry, opts);
|
||||
await index.listen(devServer.nodeListener, {
|
||||
...opts,
|
||||
_entry: devServer._entry,
|
||||
ws: opts.ws ? devServer._ws : void 0
|
||||
});
|
||||
await devServer.reload(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
const runMain = () => citty.runMain(main);
|
||||
function getArgs() {
|
||||
return {
|
||||
port: {
|
||||
type: "string",
|
||||
description: "Port to listen on (use `PORT` environment variable to override)"
|
||||
},
|
||||
host: {
|
||||
description: "Host to listen on. If no value or an empty string provided, will listen on all available interfaces (use `HOST` environment variable to override)"
|
||||
},
|
||||
clipboard: {
|
||||
type: "boolean",
|
||||
description: "Copy the URL to the clipboard"
|
||||
},
|
||||
open: {
|
||||
type: "boolean",
|
||||
description: "Open the URL in the browser"
|
||||
},
|
||||
https: {
|
||||
type: "boolean",
|
||||
description: "Enable HTTPS"
|
||||
},
|
||||
"https.cert": {
|
||||
type: "string",
|
||||
description: "Path to TLS certificate used with HTTPS in PEM format"
|
||||
},
|
||||
"https.key": {
|
||||
type: "string",
|
||||
description: "Path to TLS key used with HTTPS in PEM format"
|
||||
},
|
||||
"https.pfx": {
|
||||
type: "string",
|
||||
description: "Path to PKCS#12 (.p12/.pfx) keystore containing a TLS certificate and Key"
|
||||
},
|
||||
"https.passphrase": {
|
||||
type: "string",
|
||||
description: "Passphrase used for TLS key or keystore"
|
||||
},
|
||||
"https.validityDays": {
|
||||
type: "string",
|
||||
description: "Validity in days of the autogenerated TLS certificate (https: true)"
|
||||
},
|
||||
"https.domains": {
|
||||
type: "string",
|
||||
description: "Comma seperated list of domains and IPs, the autogenerated certificate should be valid for (https: true)"
|
||||
},
|
||||
publicURL: {
|
||||
type: "string",
|
||||
description: "Displayed public URL (used for QR code)",
|
||||
required: false
|
||||
},
|
||||
qr: {
|
||||
type: "boolean",
|
||||
description: "Display The QR code of public URL when available",
|
||||
required: false
|
||||
},
|
||||
public: {
|
||||
type: "boolean",
|
||||
description: "Listen to all network interfaces",
|
||||
required: false
|
||||
},
|
||||
tunnel: {
|
||||
type: "boolean",
|
||||
description: "Open a tunnel using https://github.com/unjs/untun",
|
||||
required: false
|
||||
}
|
||||
};
|
||||
}
|
||||
function parseArgs(args) {
|
||||
return {
|
||||
port: args.port,
|
||||
// prettier-ignore
|
||||
hostname: typeof args.host === "string" ? args.host : args.host === true ? "" : void 0,
|
||||
clipboard: args.clipboard,
|
||||
open: args.open,
|
||||
qr: args.qr,
|
||||
publicURL: args.publicURL,
|
||||
public: args.public,
|
||||
tunnel: args.tunnel,
|
||||
https: args.https ? {
|
||||
cert: args["https.cert"],
|
||||
key: args["https.key"],
|
||||
pfx: args["https.pfx"],
|
||||
passphrase: args["https.passphrase"],
|
||||
validityDays: args["https.validityDays"] ? +args["https.validityDays"] : void 0,
|
||||
domains: args["https.domains"] ? args["https.domains"].split(",") : void 0
|
||||
} : false
|
||||
};
|
||||
}
|
||||
|
||||
exports.getArgs = getArgs;
|
||||
exports.main = main;
|
||||
exports.parseArgs = parseArgs;
|
||||
exports.runMain = runMain;
|
||||
172
node_modules/listhen/dist/cli.d.cts
generated
vendored
Normal file
172
node_modules/listhen/dist/cli.d.cts
generated
vendored
Normal file
@@ -0,0 +1,172 @@
|
||||
import * as citty from 'citty';
|
||||
import { ParsedArgs } from 'citty';
|
||||
import { L as ListenOptions } from './shared/listhen.1c46e31d.cjs';
|
||||
import 'node:http';
|
||||
import 'node:https';
|
||||
import 'node:net';
|
||||
import 'get-port-please';
|
||||
import 'crossws/adapters/node';
|
||||
|
||||
declare const main: citty.CommandDef<{
|
||||
port: {
|
||||
readonly type: "string";
|
||||
readonly description: "Port to listen on (use `PORT` environment variable to override)";
|
||||
};
|
||||
host: {
|
||||
readonly description: "Host to listen on. If no value or an empty string provided, will listen on all available interfaces (use `HOST` environment variable to override)";
|
||||
};
|
||||
clipboard: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Copy the URL to the clipboard";
|
||||
};
|
||||
open: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Open the URL in the browser";
|
||||
};
|
||||
https: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Enable HTTPS";
|
||||
};
|
||||
"https.cert": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to TLS certificate used with HTTPS in PEM format";
|
||||
};
|
||||
"https.key": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to TLS key used with HTTPS in PEM format";
|
||||
};
|
||||
"https.pfx": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to PKCS#12 (.p12/.pfx) keystore containing a TLS certificate and Key";
|
||||
};
|
||||
"https.passphrase": {
|
||||
readonly type: "string";
|
||||
readonly description: "Passphrase used for TLS key or keystore";
|
||||
};
|
||||
"https.validityDays": {
|
||||
readonly type: "string";
|
||||
readonly description: "Validity in days of the autogenerated TLS certificate (https: true)";
|
||||
};
|
||||
"https.domains": {
|
||||
readonly type: "string";
|
||||
readonly description: "Comma seperated list of domains and IPs, the autogenerated certificate should be valid for (https: true)";
|
||||
};
|
||||
publicURL: {
|
||||
readonly type: "string";
|
||||
readonly description: "Displayed public URL (used for QR code)";
|
||||
readonly required: false;
|
||||
};
|
||||
qr: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Display The QR code of public URL when available";
|
||||
readonly required: false;
|
||||
};
|
||||
public: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Listen to all network interfaces";
|
||||
readonly required: false;
|
||||
};
|
||||
tunnel: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Open a tunnel using https://github.com/unjs/untun";
|
||||
readonly required: false;
|
||||
};
|
||||
cwd: {
|
||||
type: "string";
|
||||
description: string;
|
||||
};
|
||||
entry: {
|
||||
type: "positional";
|
||||
description: string;
|
||||
required: true;
|
||||
};
|
||||
name: {
|
||||
type: "string";
|
||||
description: string;
|
||||
};
|
||||
baseURL: {
|
||||
type: "string";
|
||||
description: string;
|
||||
};
|
||||
watch: {
|
||||
type: "boolean";
|
||||
description: string;
|
||||
alias: string;
|
||||
};
|
||||
ws: {
|
||||
type: "boolean";
|
||||
description: string;
|
||||
};
|
||||
}>;
|
||||
declare const runMain: () => Promise<void>;
|
||||
/** Returns unjs/citty compatible args object */
|
||||
declare function getArgs(): {
|
||||
readonly port: {
|
||||
readonly type: "string";
|
||||
readonly description: "Port to listen on (use `PORT` environment variable to override)";
|
||||
};
|
||||
readonly host: {
|
||||
readonly description: "Host to listen on. If no value or an empty string provided, will listen on all available interfaces (use `HOST` environment variable to override)";
|
||||
};
|
||||
readonly clipboard: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Copy the URL to the clipboard";
|
||||
};
|
||||
readonly open: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Open the URL in the browser";
|
||||
};
|
||||
readonly https: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Enable HTTPS";
|
||||
};
|
||||
readonly "https.cert": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to TLS certificate used with HTTPS in PEM format";
|
||||
};
|
||||
readonly "https.key": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to TLS key used with HTTPS in PEM format";
|
||||
};
|
||||
readonly "https.pfx": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to PKCS#12 (.p12/.pfx) keystore containing a TLS certificate and Key";
|
||||
};
|
||||
readonly "https.passphrase": {
|
||||
readonly type: "string";
|
||||
readonly description: "Passphrase used for TLS key or keystore";
|
||||
};
|
||||
readonly "https.validityDays": {
|
||||
readonly type: "string";
|
||||
readonly description: "Validity in days of the autogenerated TLS certificate (https: true)";
|
||||
};
|
||||
readonly "https.domains": {
|
||||
readonly type: "string";
|
||||
readonly description: "Comma seperated list of domains and IPs, the autogenerated certificate should be valid for (https: true)";
|
||||
};
|
||||
readonly publicURL: {
|
||||
readonly type: "string";
|
||||
readonly description: "Displayed public URL (used for QR code)";
|
||||
readonly required: false;
|
||||
};
|
||||
readonly qr: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Display The QR code of public URL when available";
|
||||
readonly required: false;
|
||||
};
|
||||
readonly public: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Listen to all network interfaces";
|
||||
readonly required: false;
|
||||
};
|
||||
readonly tunnel: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Open a tunnel using https://github.com/unjs/untun";
|
||||
readonly required: false;
|
||||
};
|
||||
};
|
||||
type ParsedListhenArgs = ParsedArgs<ReturnType<typeof getArgs>>;
|
||||
/** Convert unjs/citty compatible args to listhen options */
|
||||
declare function parseArgs(args: ParsedListhenArgs): Partial<ListenOptions>;
|
||||
|
||||
export { getArgs, main, parseArgs, runMain };
|
||||
172
node_modules/listhen/dist/cli.d.mts
generated
vendored
Normal file
172
node_modules/listhen/dist/cli.d.mts
generated
vendored
Normal file
@@ -0,0 +1,172 @@
|
||||
import * as citty from 'citty';
|
||||
import { ParsedArgs } from 'citty';
|
||||
import { L as ListenOptions } from './shared/listhen.1c46e31d.mjs';
|
||||
import 'node:http';
|
||||
import 'node:https';
|
||||
import 'node:net';
|
||||
import 'get-port-please';
|
||||
import 'crossws/adapters/node';
|
||||
|
||||
declare const main: citty.CommandDef<{
|
||||
port: {
|
||||
readonly type: "string";
|
||||
readonly description: "Port to listen on (use `PORT` environment variable to override)";
|
||||
};
|
||||
host: {
|
||||
readonly description: "Host to listen on. If no value or an empty string provided, will listen on all available interfaces (use `HOST` environment variable to override)";
|
||||
};
|
||||
clipboard: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Copy the URL to the clipboard";
|
||||
};
|
||||
open: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Open the URL in the browser";
|
||||
};
|
||||
https: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Enable HTTPS";
|
||||
};
|
||||
"https.cert": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to TLS certificate used with HTTPS in PEM format";
|
||||
};
|
||||
"https.key": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to TLS key used with HTTPS in PEM format";
|
||||
};
|
||||
"https.pfx": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to PKCS#12 (.p12/.pfx) keystore containing a TLS certificate and Key";
|
||||
};
|
||||
"https.passphrase": {
|
||||
readonly type: "string";
|
||||
readonly description: "Passphrase used for TLS key or keystore";
|
||||
};
|
||||
"https.validityDays": {
|
||||
readonly type: "string";
|
||||
readonly description: "Validity in days of the autogenerated TLS certificate (https: true)";
|
||||
};
|
||||
"https.domains": {
|
||||
readonly type: "string";
|
||||
readonly description: "Comma seperated list of domains and IPs, the autogenerated certificate should be valid for (https: true)";
|
||||
};
|
||||
publicURL: {
|
||||
readonly type: "string";
|
||||
readonly description: "Displayed public URL (used for QR code)";
|
||||
readonly required: false;
|
||||
};
|
||||
qr: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Display The QR code of public URL when available";
|
||||
readonly required: false;
|
||||
};
|
||||
public: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Listen to all network interfaces";
|
||||
readonly required: false;
|
||||
};
|
||||
tunnel: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Open a tunnel using https://github.com/unjs/untun";
|
||||
readonly required: false;
|
||||
};
|
||||
cwd: {
|
||||
type: "string";
|
||||
description: string;
|
||||
};
|
||||
entry: {
|
||||
type: "positional";
|
||||
description: string;
|
||||
required: true;
|
||||
};
|
||||
name: {
|
||||
type: "string";
|
||||
description: string;
|
||||
};
|
||||
baseURL: {
|
||||
type: "string";
|
||||
description: string;
|
||||
};
|
||||
watch: {
|
||||
type: "boolean";
|
||||
description: string;
|
||||
alias: string;
|
||||
};
|
||||
ws: {
|
||||
type: "boolean";
|
||||
description: string;
|
||||
};
|
||||
}>;
|
||||
declare const runMain: () => Promise<void>;
|
||||
/** Returns unjs/citty compatible args object */
|
||||
declare function getArgs(): {
|
||||
readonly port: {
|
||||
readonly type: "string";
|
||||
readonly description: "Port to listen on (use `PORT` environment variable to override)";
|
||||
};
|
||||
readonly host: {
|
||||
readonly description: "Host to listen on. If no value or an empty string provided, will listen on all available interfaces (use `HOST` environment variable to override)";
|
||||
};
|
||||
readonly clipboard: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Copy the URL to the clipboard";
|
||||
};
|
||||
readonly open: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Open the URL in the browser";
|
||||
};
|
||||
readonly https: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Enable HTTPS";
|
||||
};
|
||||
readonly "https.cert": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to TLS certificate used with HTTPS in PEM format";
|
||||
};
|
||||
readonly "https.key": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to TLS key used with HTTPS in PEM format";
|
||||
};
|
||||
readonly "https.pfx": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to PKCS#12 (.p12/.pfx) keystore containing a TLS certificate and Key";
|
||||
};
|
||||
readonly "https.passphrase": {
|
||||
readonly type: "string";
|
||||
readonly description: "Passphrase used for TLS key or keystore";
|
||||
};
|
||||
readonly "https.validityDays": {
|
||||
readonly type: "string";
|
||||
readonly description: "Validity in days of the autogenerated TLS certificate (https: true)";
|
||||
};
|
||||
readonly "https.domains": {
|
||||
readonly type: "string";
|
||||
readonly description: "Comma seperated list of domains and IPs, the autogenerated certificate should be valid for (https: true)";
|
||||
};
|
||||
readonly publicURL: {
|
||||
readonly type: "string";
|
||||
readonly description: "Displayed public URL (used for QR code)";
|
||||
readonly required: false;
|
||||
};
|
||||
readonly qr: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Display The QR code of public URL when available";
|
||||
readonly required: false;
|
||||
};
|
||||
readonly public: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Listen to all network interfaces";
|
||||
readonly required: false;
|
||||
};
|
||||
readonly tunnel: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Open a tunnel using https://github.com/unjs/untun";
|
||||
readonly required: false;
|
||||
};
|
||||
};
|
||||
type ParsedListhenArgs = ParsedArgs<ReturnType<typeof getArgs>>;
|
||||
/** Convert unjs/citty compatible args to listhen options */
|
||||
declare function parseArgs(args: ParsedListhenArgs): Partial<ListenOptions>;
|
||||
|
||||
export { getArgs, main, parseArgs, runMain };
|
||||
172
node_modules/listhen/dist/cli.d.ts
generated
vendored
Normal file
172
node_modules/listhen/dist/cli.d.ts
generated
vendored
Normal file
@@ -0,0 +1,172 @@
|
||||
import * as citty from 'citty';
|
||||
import { ParsedArgs } from 'citty';
|
||||
import { L as ListenOptions } from './shared/listhen.1c46e31d.js';
|
||||
import 'node:http';
|
||||
import 'node:https';
|
||||
import 'node:net';
|
||||
import 'get-port-please';
|
||||
import 'crossws/adapters/node';
|
||||
|
||||
declare const main: citty.CommandDef<{
|
||||
port: {
|
||||
readonly type: "string";
|
||||
readonly description: "Port to listen on (use `PORT` environment variable to override)";
|
||||
};
|
||||
host: {
|
||||
readonly description: "Host to listen on. If no value or an empty string provided, will listen on all available interfaces (use `HOST` environment variable to override)";
|
||||
};
|
||||
clipboard: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Copy the URL to the clipboard";
|
||||
};
|
||||
open: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Open the URL in the browser";
|
||||
};
|
||||
https: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Enable HTTPS";
|
||||
};
|
||||
"https.cert": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to TLS certificate used with HTTPS in PEM format";
|
||||
};
|
||||
"https.key": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to TLS key used with HTTPS in PEM format";
|
||||
};
|
||||
"https.pfx": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to PKCS#12 (.p12/.pfx) keystore containing a TLS certificate and Key";
|
||||
};
|
||||
"https.passphrase": {
|
||||
readonly type: "string";
|
||||
readonly description: "Passphrase used for TLS key or keystore";
|
||||
};
|
||||
"https.validityDays": {
|
||||
readonly type: "string";
|
||||
readonly description: "Validity in days of the autogenerated TLS certificate (https: true)";
|
||||
};
|
||||
"https.domains": {
|
||||
readonly type: "string";
|
||||
readonly description: "Comma seperated list of domains and IPs, the autogenerated certificate should be valid for (https: true)";
|
||||
};
|
||||
publicURL: {
|
||||
readonly type: "string";
|
||||
readonly description: "Displayed public URL (used for QR code)";
|
||||
readonly required: false;
|
||||
};
|
||||
qr: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Display The QR code of public URL when available";
|
||||
readonly required: false;
|
||||
};
|
||||
public: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Listen to all network interfaces";
|
||||
readonly required: false;
|
||||
};
|
||||
tunnel: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Open a tunnel using https://github.com/unjs/untun";
|
||||
readonly required: false;
|
||||
};
|
||||
cwd: {
|
||||
type: "string";
|
||||
description: string;
|
||||
};
|
||||
entry: {
|
||||
type: "positional";
|
||||
description: string;
|
||||
required: true;
|
||||
};
|
||||
name: {
|
||||
type: "string";
|
||||
description: string;
|
||||
};
|
||||
baseURL: {
|
||||
type: "string";
|
||||
description: string;
|
||||
};
|
||||
watch: {
|
||||
type: "boolean";
|
||||
description: string;
|
||||
alias: string;
|
||||
};
|
||||
ws: {
|
||||
type: "boolean";
|
||||
description: string;
|
||||
};
|
||||
}>;
|
||||
declare const runMain: () => Promise<void>;
|
||||
/** Returns unjs/citty compatible args object */
|
||||
declare function getArgs(): {
|
||||
readonly port: {
|
||||
readonly type: "string";
|
||||
readonly description: "Port to listen on (use `PORT` environment variable to override)";
|
||||
};
|
||||
readonly host: {
|
||||
readonly description: "Host to listen on. If no value or an empty string provided, will listen on all available interfaces (use `HOST` environment variable to override)";
|
||||
};
|
||||
readonly clipboard: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Copy the URL to the clipboard";
|
||||
};
|
||||
readonly open: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Open the URL in the browser";
|
||||
};
|
||||
readonly https: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Enable HTTPS";
|
||||
};
|
||||
readonly "https.cert": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to TLS certificate used with HTTPS in PEM format";
|
||||
};
|
||||
readonly "https.key": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to TLS key used with HTTPS in PEM format";
|
||||
};
|
||||
readonly "https.pfx": {
|
||||
readonly type: "string";
|
||||
readonly description: "Path to PKCS#12 (.p12/.pfx) keystore containing a TLS certificate and Key";
|
||||
};
|
||||
readonly "https.passphrase": {
|
||||
readonly type: "string";
|
||||
readonly description: "Passphrase used for TLS key or keystore";
|
||||
};
|
||||
readonly "https.validityDays": {
|
||||
readonly type: "string";
|
||||
readonly description: "Validity in days of the autogenerated TLS certificate (https: true)";
|
||||
};
|
||||
readonly "https.domains": {
|
||||
readonly type: "string";
|
||||
readonly description: "Comma seperated list of domains and IPs, the autogenerated certificate should be valid for (https: true)";
|
||||
};
|
||||
readonly publicURL: {
|
||||
readonly type: "string";
|
||||
readonly description: "Displayed public URL (used for QR code)";
|
||||
readonly required: false;
|
||||
};
|
||||
readonly qr: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Display The QR code of public URL when available";
|
||||
readonly required: false;
|
||||
};
|
||||
readonly public: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Listen to all network interfaces";
|
||||
readonly required: false;
|
||||
};
|
||||
readonly tunnel: {
|
||||
readonly type: "boolean";
|
||||
readonly description: "Open a tunnel using https://github.com/unjs/untun";
|
||||
readonly required: false;
|
||||
};
|
||||
};
|
||||
type ParsedListhenArgs = ParsedArgs<ReturnType<typeof getArgs>>;
|
||||
/** Convert unjs/citty compatible args to listhen options */
|
||||
declare function parseArgs(args: ParsedListhenArgs): Partial<ListenOptions>;
|
||||
|
||||
export { getArgs, main, parseArgs, runMain };
|
||||
172
node_modules/listhen/dist/cli.mjs
generated
vendored
Normal file
172
node_modules/listhen/dist/cli.mjs
generated
vendored
Normal file
@@ -0,0 +1,172 @@
|
||||
import { defineCommand, runMain as runMain$1 } from 'citty';
|
||||
import { isAbsolute } from 'pathe';
|
||||
import { listenAndWatch, createDevServer, listen } from './index.mjs';
|
||||
import 'node:http';
|
||||
import 'node:https';
|
||||
import 'node:util';
|
||||
import 'get-port-please';
|
||||
import 'http-shutdown';
|
||||
import 'consola';
|
||||
import 'defu';
|
||||
import 'consola/utils';
|
||||
import 'uqr';
|
||||
import 'node:child_process';
|
||||
import 'node:fs';
|
||||
import 'node:os';
|
||||
import 'node:path';
|
||||
import 'std-env';
|
||||
import 'node-forge';
|
||||
import 'node:fs/promises';
|
||||
import 'mlly';
|
||||
|
||||
const name = "listhen";
|
||||
const version = "1.8.0";
|
||||
const description = "👂 Elegant HTTP Listener";
|
||||
|
||||
const main = defineCommand({
|
||||
meta: {
|
||||
name,
|
||||
description,
|
||||
version
|
||||
},
|
||||
args: {
|
||||
cwd: {
|
||||
type: "string",
|
||||
description: "Current working directory"
|
||||
},
|
||||
entry: {
|
||||
type: "positional",
|
||||
description: "Listener entry file (./app.ts)",
|
||||
required: true
|
||||
},
|
||||
name: {
|
||||
type: "string",
|
||||
description: "Name to use in the banner"
|
||||
},
|
||||
baseURL: {
|
||||
type: "string",
|
||||
description: "Base URL to use"
|
||||
},
|
||||
watch: {
|
||||
type: "boolean",
|
||||
description: "Watch for changes",
|
||||
alias: "w"
|
||||
},
|
||||
ws: {
|
||||
type: "boolean",
|
||||
description: "Enable Experimental WebSocket support"
|
||||
},
|
||||
...getArgs()
|
||||
},
|
||||
async run({ args }) {
|
||||
const opts = {
|
||||
...args,
|
||||
...parseArgs(args),
|
||||
baseURL: args.baseURL,
|
||||
name: args.name
|
||||
};
|
||||
const entry = isAbsolute(args.entry) || args.entry.startsWith(".") ? args.entry : `./${args.entry}`;
|
||||
if (args.watch) {
|
||||
await listenAndWatch(entry, opts);
|
||||
} else {
|
||||
const devServer = await createDevServer(entry, opts);
|
||||
await listen(devServer.nodeListener, {
|
||||
...opts,
|
||||
_entry: devServer._entry,
|
||||
ws: opts.ws ? devServer._ws : void 0
|
||||
});
|
||||
await devServer.reload(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
const runMain = () => runMain$1(main);
|
||||
function getArgs() {
|
||||
return {
|
||||
port: {
|
||||
type: "string",
|
||||
description: "Port to listen on (use `PORT` environment variable to override)"
|
||||
},
|
||||
host: {
|
||||
description: "Host to listen on. If no value or an empty string provided, will listen on all available interfaces (use `HOST` environment variable to override)"
|
||||
},
|
||||
clipboard: {
|
||||
type: "boolean",
|
||||
description: "Copy the URL to the clipboard"
|
||||
},
|
||||
open: {
|
||||
type: "boolean",
|
||||
description: "Open the URL in the browser"
|
||||
},
|
||||
https: {
|
||||
type: "boolean",
|
||||
description: "Enable HTTPS"
|
||||
},
|
||||
"https.cert": {
|
||||
type: "string",
|
||||
description: "Path to TLS certificate used with HTTPS in PEM format"
|
||||
},
|
||||
"https.key": {
|
||||
type: "string",
|
||||
description: "Path to TLS key used with HTTPS in PEM format"
|
||||
},
|
||||
"https.pfx": {
|
||||
type: "string",
|
||||
description: "Path to PKCS#12 (.p12/.pfx) keystore containing a TLS certificate and Key"
|
||||
},
|
||||
"https.passphrase": {
|
||||
type: "string",
|
||||
description: "Passphrase used for TLS key or keystore"
|
||||
},
|
||||
"https.validityDays": {
|
||||
type: "string",
|
||||
description: "Validity in days of the autogenerated TLS certificate (https: true)"
|
||||
},
|
||||
"https.domains": {
|
||||
type: "string",
|
||||
description: "Comma seperated list of domains and IPs, the autogenerated certificate should be valid for (https: true)"
|
||||
},
|
||||
publicURL: {
|
||||
type: "string",
|
||||
description: "Displayed public URL (used for QR code)",
|
||||
required: false
|
||||
},
|
||||
qr: {
|
||||
type: "boolean",
|
||||
description: "Display The QR code of public URL when available",
|
||||
required: false
|
||||
},
|
||||
public: {
|
||||
type: "boolean",
|
||||
description: "Listen to all network interfaces",
|
||||
required: false
|
||||
},
|
||||
tunnel: {
|
||||
type: "boolean",
|
||||
description: "Open a tunnel using https://github.com/unjs/untun",
|
||||
required: false
|
||||
}
|
||||
};
|
||||
}
|
||||
function parseArgs(args) {
|
||||
return {
|
||||
port: args.port,
|
||||
// prettier-ignore
|
||||
hostname: typeof args.host === "string" ? args.host : args.host === true ? "" : void 0,
|
||||
clipboard: args.clipboard,
|
||||
open: args.open,
|
||||
qr: args.qr,
|
||||
publicURL: args.publicURL,
|
||||
public: args.public,
|
||||
tunnel: args.tunnel,
|
||||
https: args.https ? {
|
||||
cert: args["https.cert"],
|
||||
key: args["https.key"],
|
||||
pfx: args["https.pfx"],
|
||||
passphrase: args["https.passphrase"],
|
||||
validityDays: args["https.validityDays"] ? +args["https.validityDays"] : void 0,
|
||||
domains: args["https.domains"] ? args["https.domains"].split(",") : void 0
|
||||
} : false
|
||||
};
|
||||
}
|
||||
|
||||
export { getArgs, main, parseArgs, runMain };
|
||||
1072
node_modules/listhen/dist/index.cjs
generated
vendored
Normal file
1072
node_modules/listhen/dist/index.cjs
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
44
node_modules/listhen/dist/index.d.cts
generated
vendored
Normal file
44
node_modules/listhen/dist/index.d.cts
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
import { RequestListener } from 'node:http';
|
||||
import { L as ListenOptions, a as Listener } from './shared/listhen.1c46e31d.cjs';
|
||||
export { b as Certificate, C as CrossWSOptions, G as GetURLOptions, H as HTTPSOptions, c as ListenURL, S as ShowURLOptions } from './shared/listhen.1c46e31d.cjs';
|
||||
import { ConsolaInstance } from 'consola';
|
||||
import * as http from 'http';
|
||||
import * as crossws_adapters_node from 'crossws/adapters/node';
|
||||
import * as h3 from 'h3';
|
||||
import * as jiti_lib_types from 'jiti/lib/types';
|
||||
import 'node:https';
|
||||
import 'node:net';
|
||||
import 'get-port-please';
|
||||
|
||||
declare function listen(handle: RequestListener, _options?: Partial<ListenOptions>): Promise<Listener>;
|
||||
|
||||
interface DevServerOptions {
|
||||
cwd?: string;
|
||||
staticDirs?: string[];
|
||||
logger?: ConsolaInstance;
|
||||
ws?: ListenOptions["ws"];
|
||||
}
|
||||
declare function createDevServer(entry: string, options: DevServerOptions): Promise<{
|
||||
cwd: string;
|
||||
resolver: {
|
||||
relative: (path: string) => string;
|
||||
formatRelative: (path: string) => string;
|
||||
import: (id: string, opts?: jiti_lib_types.JitiResolveOptions) => Promise<unknown>;
|
||||
resolve: (id: string) => string;
|
||||
tryResolve: (id: string) => string | undefined;
|
||||
};
|
||||
nodeListener: h3.NodeListener;
|
||||
reload: (_initial?: boolean) => Promise<void>;
|
||||
_ws: false | crossws_adapters_node.NodeOptions | ((req: http.IncomingMessage, head: Buffer) => void) | undefined;
|
||||
_entry: string | undefined;
|
||||
}>;
|
||||
|
||||
interface WatchOptions extends DevServerOptions {
|
||||
cwd?: string;
|
||||
logger?: ConsolaInstance;
|
||||
ignore?: string[];
|
||||
publicDirs?: string[];
|
||||
}
|
||||
declare function listenAndWatch(entry: string, options: Partial<ListenOptions & WatchOptions>): Promise<Listener>;
|
||||
|
||||
export { type DevServerOptions, ListenOptions, Listener, type WatchOptions, createDevServer, listen, listenAndWatch };
|
||||
44
node_modules/listhen/dist/index.d.mts
generated
vendored
Normal file
44
node_modules/listhen/dist/index.d.mts
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
import { RequestListener } from 'node:http';
|
||||
import { L as ListenOptions, a as Listener } from './shared/listhen.1c46e31d.mjs';
|
||||
export { b as Certificate, C as CrossWSOptions, G as GetURLOptions, H as HTTPSOptions, c as ListenURL, S as ShowURLOptions } from './shared/listhen.1c46e31d.mjs';
|
||||
import { ConsolaInstance } from 'consola';
|
||||
import * as http from 'http';
|
||||
import * as crossws_adapters_node from 'crossws/adapters/node';
|
||||
import * as h3 from 'h3';
|
||||
import * as jiti_lib_types from 'jiti/lib/types';
|
||||
import 'node:https';
|
||||
import 'node:net';
|
||||
import 'get-port-please';
|
||||
|
||||
declare function listen(handle: RequestListener, _options?: Partial<ListenOptions>): Promise<Listener>;
|
||||
|
||||
interface DevServerOptions {
|
||||
cwd?: string;
|
||||
staticDirs?: string[];
|
||||
logger?: ConsolaInstance;
|
||||
ws?: ListenOptions["ws"];
|
||||
}
|
||||
declare function createDevServer(entry: string, options: DevServerOptions): Promise<{
|
||||
cwd: string;
|
||||
resolver: {
|
||||
relative: (path: string) => string;
|
||||
formatRelative: (path: string) => string;
|
||||
import: (id: string, opts?: jiti_lib_types.JitiResolveOptions) => Promise<unknown>;
|
||||
resolve: (id: string) => string;
|
||||
tryResolve: (id: string) => string | undefined;
|
||||
};
|
||||
nodeListener: h3.NodeListener;
|
||||
reload: (_initial?: boolean) => Promise<void>;
|
||||
_ws: false | crossws_adapters_node.NodeOptions | ((req: http.IncomingMessage, head: Buffer) => void) | undefined;
|
||||
_entry: string | undefined;
|
||||
}>;
|
||||
|
||||
interface WatchOptions extends DevServerOptions {
|
||||
cwd?: string;
|
||||
logger?: ConsolaInstance;
|
||||
ignore?: string[];
|
||||
publicDirs?: string[];
|
||||
}
|
||||
declare function listenAndWatch(entry: string, options: Partial<ListenOptions & WatchOptions>): Promise<Listener>;
|
||||
|
||||
export { type DevServerOptions, ListenOptions, Listener, type WatchOptions, createDevServer, listen, listenAndWatch };
|
||||
44
node_modules/listhen/dist/index.d.ts
generated
vendored
Normal file
44
node_modules/listhen/dist/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
import { RequestListener } from 'node:http';
|
||||
import { L as ListenOptions, a as Listener } from './shared/listhen.1c46e31d.js';
|
||||
export { b as Certificate, C as CrossWSOptions, G as GetURLOptions, H as HTTPSOptions, c as ListenURL, S as ShowURLOptions } from './shared/listhen.1c46e31d.js';
|
||||
import { ConsolaInstance } from 'consola';
|
||||
import * as http from 'http';
|
||||
import * as crossws_adapters_node from 'crossws/adapters/node';
|
||||
import * as h3 from 'h3';
|
||||
import * as jiti_lib_types from 'jiti/lib/types';
|
||||
import 'node:https';
|
||||
import 'node:net';
|
||||
import 'get-port-please';
|
||||
|
||||
declare function listen(handle: RequestListener, _options?: Partial<ListenOptions>): Promise<Listener>;
|
||||
|
||||
interface DevServerOptions {
|
||||
cwd?: string;
|
||||
staticDirs?: string[];
|
||||
logger?: ConsolaInstance;
|
||||
ws?: ListenOptions["ws"];
|
||||
}
|
||||
declare function createDevServer(entry: string, options: DevServerOptions): Promise<{
|
||||
cwd: string;
|
||||
resolver: {
|
||||
relative: (path: string) => string;
|
||||
formatRelative: (path: string) => string;
|
||||
import: (id: string, opts?: jiti_lib_types.JitiResolveOptions) => Promise<unknown>;
|
||||
resolve: (id: string) => string;
|
||||
tryResolve: (id: string) => string | undefined;
|
||||
};
|
||||
nodeListener: h3.NodeListener;
|
||||
reload: (_initial?: boolean) => Promise<void>;
|
||||
_ws: false | crossws_adapters_node.NodeOptions | ((req: http.IncomingMessage, head: Buffer) => void) | undefined;
|
||||
_entry: string | undefined;
|
||||
}>;
|
||||
|
||||
interface WatchOptions extends DevServerOptions {
|
||||
cwd?: string;
|
||||
logger?: ConsolaInstance;
|
||||
ignore?: string[];
|
||||
publicDirs?: string[];
|
||||
}
|
||||
declare function listenAndWatch(entry: string, options: Partial<ListenOptions & WatchOptions>): Promise<Listener>;
|
||||
|
||||
export { type DevServerOptions, ListenOptions, Listener, type WatchOptions, createDevServer, listen, listenAndWatch };
|
||||
1058
node_modules/listhen/dist/index.mjs
generated
vendored
Normal file
1058
node_modules/listhen/dist/index.mjs
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
82
node_modules/listhen/dist/shared/listhen.1c46e31d.d.cts
generated
vendored
Normal file
82
node_modules/listhen/dist/shared/listhen.1c46e31d.d.cts
generated
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
import { IncomingMessage, Server } from 'node:http';
|
||||
import { Server as Server$1 } from 'node:https';
|
||||
import { AddressInfo } from 'node:net';
|
||||
import { GetPortInput } from 'get-port-please';
|
||||
import { NodeOptions } from 'crossws/adapters/node';
|
||||
|
||||
type CrossWSOptions = NodeOptions;
|
||||
interface Certificate {
|
||||
key: string;
|
||||
cert: string;
|
||||
passphrase?: string;
|
||||
}
|
||||
interface HTTPSOptions {
|
||||
cert?: string;
|
||||
key?: string;
|
||||
pfx?: string;
|
||||
passphrase?: string;
|
||||
validityDays?: number;
|
||||
domains?: string[];
|
||||
}
|
||||
interface ListenOptions {
|
||||
name: string;
|
||||
port: GetPortInput;
|
||||
hostname: string;
|
||||
showURL: boolean;
|
||||
baseURL: string;
|
||||
open: boolean;
|
||||
https: boolean | HTTPSOptions;
|
||||
clipboard: boolean;
|
||||
isTest: boolean;
|
||||
isProd: boolean;
|
||||
autoClose: boolean;
|
||||
_entry?: string;
|
||||
/**
|
||||
* Used as main public url to display
|
||||
* @default The first public IPV4 address listening to
|
||||
*/
|
||||
publicURL?: string;
|
||||
/**
|
||||
* Print QR Code for public IPv4 address
|
||||
*
|
||||
* @default true
|
||||
*/
|
||||
qr?: boolean;
|
||||
/**
|
||||
* When enabled, listhen tries to listen to all network interfaces
|
||||
*
|
||||
* @default `false` for development and `true` for production
|
||||
*/
|
||||
public: boolean;
|
||||
/**
|
||||
* Open a tunnel using https://github.com/unjs/untun
|
||||
*/
|
||||
tunnel?: boolean;
|
||||
/**
|
||||
* WebSocket Upgrade Handler
|
||||
*
|
||||
* Input can be an upgrade handler or CrossWS options
|
||||
*
|
||||
* @experimental CrossWS usage is subject to change
|
||||
* @see https://github.com/unjs/crossws
|
||||
*/
|
||||
ws?: boolean | CrossWSOptions | ((req: IncomingMessage, head: Buffer) => void);
|
||||
}
|
||||
type GetURLOptions = Pick<Partial<ListenOptions>, "baseURL" | "publicURL">;
|
||||
type ShowURLOptions = Pick<Partial<ListenOptions>, "baseURL" | "name" | "publicURL" | "qr">;
|
||||
interface ListenURL {
|
||||
url: string;
|
||||
type: "local" | "network" | "tunnel";
|
||||
}
|
||||
interface Listener {
|
||||
url: string;
|
||||
address: AddressInfo;
|
||||
server: Server | Server$1;
|
||||
https: false | Certificate;
|
||||
close: () => Promise<void>;
|
||||
open: () => Promise<void>;
|
||||
showURL: (options?: ShowURLOptions) => Promise<void>;
|
||||
getURLs: (options?: GetURLOptions) => Promise<ListenURL[]>;
|
||||
}
|
||||
|
||||
export type { CrossWSOptions as C, GetURLOptions as G, HTTPSOptions as H, ListenOptions as L, ShowURLOptions as S, Listener as a, Certificate as b, ListenURL as c };
|
||||
82
node_modules/listhen/dist/shared/listhen.1c46e31d.d.mts
generated
vendored
Normal file
82
node_modules/listhen/dist/shared/listhen.1c46e31d.d.mts
generated
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
import { IncomingMessage, Server } from 'node:http';
|
||||
import { Server as Server$1 } from 'node:https';
|
||||
import { AddressInfo } from 'node:net';
|
||||
import { GetPortInput } from 'get-port-please';
|
||||
import { NodeOptions } from 'crossws/adapters/node';
|
||||
|
||||
type CrossWSOptions = NodeOptions;
|
||||
interface Certificate {
|
||||
key: string;
|
||||
cert: string;
|
||||
passphrase?: string;
|
||||
}
|
||||
interface HTTPSOptions {
|
||||
cert?: string;
|
||||
key?: string;
|
||||
pfx?: string;
|
||||
passphrase?: string;
|
||||
validityDays?: number;
|
||||
domains?: string[];
|
||||
}
|
||||
interface ListenOptions {
|
||||
name: string;
|
||||
port: GetPortInput;
|
||||
hostname: string;
|
||||
showURL: boolean;
|
||||
baseURL: string;
|
||||
open: boolean;
|
||||
https: boolean | HTTPSOptions;
|
||||
clipboard: boolean;
|
||||
isTest: boolean;
|
||||
isProd: boolean;
|
||||
autoClose: boolean;
|
||||
_entry?: string;
|
||||
/**
|
||||
* Used as main public url to display
|
||||
* @default The first public IPV4 address listening to
|
||||
*/
|
||||
publicURL?: string;
|
||||
/**
|
||||
* Print QR Code for public IPv4 address
|
||||
*
|
||||
* @default true
|
||||
*/
|
||||
qr?: boolean;
|
||||
/**
|
||||
* When enabled, listhen tries to listen to all network interfaces
|
||||
*
|
||||
* @default `false` for development and `true` for production
|
||||
*/
|
||||
public: boolean;
|
||||
/**
|
||||
* Open a tunnel using https://github.com/unjs/untun
|
||||
*/
|
||||
tunnel?: boolean;
|
||||
/**
|
||||
* WebSocket Upgrade Handler
|
||||
*
|
||||
* Input can be an upgrade handler or CrossWS options
|
||||
*
|
||||
* @experimental CrossWS usage is subject to change
|
||||
* @see https://github.com/unjs/crossws
|
||||
*/
|
||||
ws?: boolean | CrossWSOptions | ((req: IncomingMessage, head: Buffer) => void);
|
||||
}
|
||||
type GetURLOptions = Pick<Partial<ListenOptions>, "baseURL" | "publicURL">;
|
||||
type ShowURLOptions = Pick<Partial<ListenOptions>, "baseURL" | "name" | "publicURL" | "qr">;
|
||||
interface ListenURL {
|
||||
url: string;
|
||||
type: "local" | "network" | "tunnel";
|
||||
}
|
||||
interface Listener {
|
||||
url: string;
|
||||
address: AddressInfo;
|
||||
server: Server | Server$1;
|
||||
https: false | Certificate;
|
||||
close: () => Promise<void>;
|
||||
open: () => Promise<void>;
|
||||
showURL: (options?: ShowURLOptions) => Promise<void>;
|
||||
getURLs: (options?: GetURLOptions) => Promise<ListenURL[]>;
|
||||
}
|
||||
|
||||
export type { CrossWSOptions as C, GetURLOptions as G, HTTPSOptions as H, ListenOptions as L, ShowURLOptions as S, Listener as a, Certificate as b, ListenURL as c };
|
||||
82
node_modules/listhen/dist/shared/listhen.1c46e31d.d.ts
generated
vendored
Normal file
82
node_modules/listhen/dist/shared/listhen.1c46e31d.d.ts
generated
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
import { IncomingMessage, Server } from 'node:http';
|
||||
import { Server as Server$1 } from 'node:https';
|
||||
import { AddressInfo } from 'node:net';
|
||||
import { GetPortInput } from 'get-port-please';
|
||||
import { NodeOptions } from 'crossws/adapters/node';
|
||||
|
||||
type CrossWSOptions = NodeOptions;
|
||||
interface Certificate {
|
||||
key: string;
|
||||
cert: string;
|
||||
passphrase?: string;
|
||||
}
|
||||
interface HTTPSOptions {
|
||||
cert?: string;
|
||||
key?: string;
|
||||
pfx?: string;
|
||||
passphrase?: string;
|
||||
validityDays?: number;
|
||||
domains?: string[];
|
||||
}
|
||||
interface ListenOptions {
|
||||
name: string;
|
||||
port: GetPortInput;
|
||||
hostname: string;
|
||||
showURL: boolean;
|
||||
baseURL: string;
|
||||
open: boolean;
|
||||
https: boolean | HTTPSOptions;
|
||||
clipboard: boolean;
|
||||
isTest: boolean;
|
||||
isProd: boolean;
|
||||
autoClose: boolean;
|
||||
_entry?: string;
|
||||
/**
|
||||
* Used as main public url to display
|
||||
* @default The first public IPV4 address listening to
|
||||
*/
|
||||
publicURL?: string;
|
||||
/**
|
||||
* Print QR Code for public IPv4 address
|
||||
*
|
||||
* @default true
|
||||
*/
|
||||
qr?: boolean;
|
||||
/**
|
||||
* When enabled, listhen tries to listen to all network interfaces
|
||||
*
|
||||
* @default `false` for development and `true` for production
|
||||
*/
|
||||
public: boolean;
|
||||
/**
|
||||
* Open a tunnel using https://github.com/unjs/untun
|
||||
*/
|
||||
tunnel?: boolean;
|
||||
/**
|
||||
* WebSocket Upgrade Handler
|
||||
*
|
||||
* Input can be an upgrade handler or CrossWS options
|
||||
*
|
||||
* @experimental CrossWS usage is subject to change
|
||||
* @see https://github.com/unjs/crossws
|
||||
*/
|
||||
ws?: boolean | CrossWSOptions | ((req: IncomingMessage, head: Buffer) => void);
|
||||
}
|
||||
type GetURLOptions = Pick<Partial<ListenOptions>, "baseURL" | "publicURL">;
|
||||
type ShowURLOptions = Pick<Partial<ListenOptions>, "baseURL" | "name" | "publicURL" | "qr">;
|
||||
interface ListenURL {
|
||||
url: string;
|
||||
type: "local" | "network" | "tunnel";
|
||||
}
|
||||
interface Listener {
|
||||
url: string;
|
||||
address: AddressInfo;
|
||||
server: Server | Server$1;
|
||||
https: false | Certificate;
|
||||
close: () => Promise<void>;
|
||||
open: () => Promise<void>;
|
||||
showURL: (options?: ShowURLOptions) => Promise<void>;
|
||||
getURLs: (options?: GetURLOptions) => Promise<ListenURL[]>;
|
||||
}
|
||||
|
||||
export type { CrossWSOptions as C, GetURLOptions as G, HTTPSOptions as H, ListenOptions as L, ShowURLOptions as S, Listener as a, Certificate as b, ListenURL as c };
|
||||
75
node_modules/listhen/package.json
generated
vendored
Normal file
75
node_modules/listhen/package.json
generated
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"name": "listhen",
|
||||
"version": "1.9.0",
|
||||
"description": "👂 Elegant HTTP Listener",
|
||||
"repository": "unjs/listhen",
|
||||
"license": "MIT",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.ts",
|
||||
"import": "./dist/index.mjs",
|
||||
"require": "./dist/index.cjs"
|
||||
},
|
||||
"./cli": {
|
||||
"types": "./dist/cli.d.ts",
|
||||
"import": "./dist/cli.mjs",
|
||||
"require": "./dist/cli.cjs"
|
||||
}
|
||||
},
|
||||
"main": "./dist/index.mjs",
|
||||
"types": "./dist/index.d.ts",
|
||||
"bin": {
|
||||
"listen": "./bin/listhen.mjs",
|
||||
"listhen": "./bin/listhen.mjs"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"lib",
|
||||
"bin",
|
||||
"cli.d.ts"
|
||||
],
|
||||
"dependencies": {
|
||||
"@parcel/watcher": "^2.4.1",
|
||||
"@parcel/watcher-wasm": "^2.4.1",
|
||||
"citty": "^0.1.6",
|
||||
"clipboardy": "^4.0.0",
|
||||
"consola": "^3.2.3",
|
||||
"crossws": ">=0.2.0 <0.4.0",
|
||||
"defu": "^6.1.4",
|
||||
"get-port-please": "^3.1.2",
|
||||
"h3": "^1.12.0",
|
||||
"http-shutdown": "^1.2.2",
|
||||
"jiti": "^2.1.2",
|
||||
"mlly": "^1.7.1",
|
||||
"node-forge": "^1.3.1",
|
||||
"pathe": "^1.1.2",
|
||||
"std-env": "^3.7.0",
|
||||
"ufo": "^1.5.4",
|
||||
"untun": "^0.1.3",
|
||||
"uqr": "^0.1.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^22.7.4",
|
||||
"@types/node-forge": "^1.3.11",
|
||||
"@vitest/coverage-v8": "^2.1.2",
|
||||
"automd": "^0.3.9",
|
||||
"changelogen": "^0.5.7",
|
||||
"eslint": "^9.11.1",
|
||||
"eslint-config-unjs": "^0.4.1",
|
||||
"ip-regex": "^5.0.0",
|
||||
"prettier": "^3.3.3",
|
||||
"typescript": "^5.6.2",
|
||||
"unbuild": "^2.0.0",
|
||||
"vitest": "^2.1.2"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "unbuild",
|
||||
"dev": "vitest",
|
||||
"lint": "eslint . && prettier -c src test",
|
||||
"lint:fix": "eslint --fix . && prettier -w src test",
|
||||
"listhen": "node ./scripts/listhen.mjs",
|
||||
"play": "node ./scripts/listhen.mjs -w ./playground --ws",
|
||||
"release": "pnpm test && pnpm build && changelogen --release && pnpm publish && git push --follow-tags",
|
||||
"test": "pnpm lint && vitest run --coverage"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user