mirror of
https://github.com/notherealmarco/WASAPhoto.git
synced 2025-05-05 20:32:35 +02:00
Add decaf webui
This commit is contained in:
parent
6b4c9bb531
commit
69c0388954
742 changed files with 608981 additions and 6 deletions
3588
webui/node_modules/vite/LICENSE.md
generated
vendored
Normal file
3588
webui/node_modules/vite/LICENSE.md
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
20
webui/node_modules/vite/README.md
generated
vendored
Normal file
20
webui/node_modules/vite/README.md
generated
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
# vite ⚡
|
||||
|
||||
> Next Generation Frontend Tooling
|
||||
|
||||
- 💡 Instant Server Start
|
||||
- ⚡️ Lightning Fast HMR
|
||||
- 🛠️ Rich Features
|
||||
- 📦 Optimized Build
|
||||
- 🔩 Universal Plugin Interface
|
||||
- 🔑 Fully Typed APIs
|
||||
|
||||
Vite (French word for "fast", pronounced `/vit/`) is a new breed of frontend build tool that significantly improves the frontend development experience. It consists of two major parts:
|
||||
|
||||
- A dev server that serves your source files over [native ES modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules), with [rich built-in features](https://vitejs.dev/guide/features.html) and astonishingly fast [Hot Module Replacement (HMR)](https://vitejs.dev/guide/features.html#hot-module-replacement).
|
||||
|
||||
- A [build command](https://vitejs.dev/guide/build.html) that bundles your code with [Rollup](https://rollupjs.org), pre-configured to output highly optimized static assets for production.
|
||||
|
||||
In addition, Vite is highly extensible via its [Plugin API](https://vitejs.dev/guide/api-plugin.html) and [JavaScript API](https://vitejs.dev/guide/api-javascript.html) with full typing support.
|
||||
|
||||
[Read the Docs to Learn More](https://vitejs.dev).
|
86
webui/node_modules/vite/bin/openChrome.applescript
generated
vendored
Normal file
86
webui/node_modules/vite/bin/openChrome.applescript
generated
vendored
Normal file
|
@ -0,0 +1,86 @@
|
|||
(*
|
||||
Copyright (c) 2015-present, Facebook, Inc.
|
||||
|
||||
This source code is licensed under the MIT license found in the
|
||||
LICENSE file at
|
||||
https://github.com/facebookincubator/create-react-app/blob/master/LICENSE
|
||||
*)
|
||||
|
||||
property targetTab: null
|
||||
property targetTabIndex: -1
|
||||
property targetWindow: null
|
||||
|
||||
on run argv
|
||||
set theURL to item 1 of argv
|
||||
|
||||
with timeout of 2 seconds
|
||||
tell application "Chrome"
|
||||
|
||||
if (count every window) = 0 then
|
||||
make new window
|
||||
end if
|
||||
|
||||
-- 1: Looking for tab running debugger
|
||||
-- then, Reload debugging tab if found
|
||||
-- then return
|
||||
set found to my lookupTabWithUrl(theURL)
|
||||
if found then
|
||||
set targetWindow's active tab index to targetTabIndex
|
||||
tell targetTab to reload
|
||||
tell targetWindow to activate
|
||||
set index of targetWindow to 1
|
||||
return
|
||||
end if
|
||||
|
||||
-- 2: Looking for Empty tab
|
||||
-- In case debugging tab was not found
|
||||
-- We try to find an empty tab instead
|
||||
set found to my lookupTabWithUrl("chrome://newtab/")
|
||||
if found then
|
||||
set targetWindow's active tab index to targetTabIndex
|
||||
set URL of targetTab to theURL
|
||||
tell targetWindow to activate
|
||||
return
|
||||
end if
|
||||
|
||||
-- 3: Create new tab
|
||||
-- both debugging and empty tab were not found
|
||||
-- make a new tab with url
|
||||
tell window 1
|
||||
activate
|
||||
make new tab with properties {URL:theURL}
|
||||
end tell
|
||||
end tell
|
||||
end timeout
|
||||
end run
|
||||
|
||||
-- Function:
|
||||
-- Lookup tab with given url
|
||||
-- if found, store tab, index, and window in properties
|
||||
-- (properties were declared on top of file)
|
||||
on lookupTabWithUrl(lookupUrl)
|
||||
tell application "Chrome"
|
||||
-- Find a tab with the given url
|
||||
set found to false
|
||||
set theTabIndex to -1
|
||||
repeat with theWindow in every window
|
||||
set theTabIndex to 0
|
||||
repeat with theTab in every tab of theWindow
|
||||
set theTabIndex to theTabIndex + 1
|
||||
if (theTab's URL as string) contains lookupUrl then
|
||||
-- assign tab, tab index, and window to properties
|
||||
set targetTab to theTab
|
||||
set targetTabIndex to theTabIndex
|
||||
set targetWindow to theWindow
|
||||
set found to true
|
||||
exit repeat
|
||||
end if
|
||||
end repeat
|
||||
|
||||
if found then
|
||||
exit repeat
|
||||
end if
|
||||
end repeat
|
||||
end tell
|
||||
return found
|
||||
end lookupTabWithUrl
|
61
webui/node_modules/vite/bin/vite.js
generated
vendored
Executable file
61
webui/node_modules/vite/bin/vite.js
generated
vendored
Executable file
|
@ -0,0 +1,61 @@
|
|||
#!/usr/bin/env node
|
||||
import { performance } from 'node:perf_hooks'
|
||||
|
||||
if (!import.meta.url.includes('node_modules')) {
|
||||
try {
|
||||
// only available as dev dependency
|
||||
await import('source-map-support').then((r) => r.default.install())
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
global.__vite_start_time = performance.now()
|
||||
|
||||
// check debug mode first before requiring the CLI.
|
||||
const debugIndex = process.argv.findIndex((arg) => /^(?:-d|--debug)$/.test(arg))
|
||||
const filterIndex = process.argv.findIndex((arg) =>
|
||||
/^(?:-f|--filter)$/.test(arg)
|
||||
)
|
||||
const profileIndex = process.argv.indexOf('--profile')
|
||||
|
||||
if (debugIndex > 0) {
|
||||
let value = process.argv[debugIndex + 1]
|
||||
if (!value || value.startsWith('-')) {
|
||||
value = 'vite:*'
|
||||
} else {
|
||||
// support debugging multiple flags with comma-separated list
|
||||
value = value
|
||||
.split(',')
|
||||
.map((v) => `vite:${v}`)
|
||||
.join(',')
|
||||
}
|
||||
process.env.DEBUG = `${
|
||||
process.env.DEBUG ? process.env.DEBUG + ',' : ''
|
||||
}${value}`
|
||||
|
||||
if (filterIndex > 0) {
|
||||
const filter = process.argv[filterIndex + 1]
|
||||
if (filter && !filter.startsWith('-')) {
|
||||
process.env.VITE_DEBUG_FILTER = filter
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
return import('../dist/node/cli.js')
|
||||
}
|
||||
|
||||
if (profileIndex > 0) {
|
||||
process.argv.splice(profileIndex, 1)
|
||||
const next = process.argv[profileIndex]
|
||||
if (next && !next.startsWith('-')) {
|
||||
process.argv.splice(profileIndex, 1)
|
||||
}
|
||||
const inspector = await import('node:inspector').then((r) => r.default)
|
||||
const session = (global.__vite_profile_session = new inspector.Session())
|
||||
session.connect()
|
||||
session.post('Profiler.enable', () => {
|
||||
session.post('Profiler.start', start)
|
||||
})
|
||||
} else {
|
||||
start()
|
||||
}
|
221
webui/node_modules/vite/client.d.ts
generated
vendored
Normal file
221
webui/node_modules/vite/client.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,221 @@
|
|||
/// <reference path="./types/importMeta.d.ts" />
|
||||
|
||||
// CSS modules
|
||||
type CSSModuleClasses = { readonly [key: string]: string }
|
||||
|
||||
declare module '*.module.css' {
|
||||
const classes: CSSModuleClasses
|
||||
export default classes
|
||||
}
|
||||
declare module '*.module.scss' {
|
||||
const classes: CSSModuleClasses
|
||||
export default classes
|
||||
}
|
||||
declare module '*.module.sass' {
|
||||
const classes: CSSModuleClasses
|
||||
export default classes
|
||||
}
|
||||
declare module '*.module.less' {
|
||||
const classes: CSSModuleClasses
|
||||
export default classes
|
||||
}
|
||||
declare module '*.module.styl' {
|
||||
const classes: CSSModuleClasses
|
||||
export default classes
|
||||
}
|
||||
declare module '*.module.stylus' {
|
||||
const classes: CSSModuleClasses
|
||||
export default classes
|
||||
}
|
||||
declare module '*.module.pcss' {
|
||||
const classes: CSSModuleClasses
|
||||
export default classes
|
||||
}
|
||||
|
||||
// CSS
|
||||
declare module '*.css' {
|
||||
const css: string
|
||||
export default css
|
||||
}
|
||||
declare module '*.scss' {
|
||||
const css: string
|
||||
export default css
|
||||
}
|
||||
declare module '*.sass' {
|
||||
const css: string
|
||||
export default css
|
||||
}
|
||||
declare module '*.less' {
|
||||
const css: string
|
||||
export default css
|
||||
}
|
||||
declare module '*.styl' {
|
||||
const css: string
|
||||
export default css
|
||||
}
|
||||
declare module '*.stylus' {
|
||||
const css: string
|
||||
export default css
|
||||
}
|
||||
declare module '*.pcss' {
|
||||
const css: string
|
||||
export default css
|
||||
}
|
||||
|
||||
// Built-in asset types
|
||||
// see `src/constants.ts`
|
||||
|
||||
// images
|
||||
declare module '*.jpg' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.jpeg' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.jfif' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.pjpeg' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.pjp' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.png' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.gif' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.svg' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.ico' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.webp' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.avif' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
|
||||
// media
|
||||
declare module '*.mp4' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.webm' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.ogg' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.mp3' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.wav' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.flac' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.aac' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
|
||||
// fonts
|
||||
declare module '*.woff' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.woff2' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.eot' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.ttf' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.otf' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
|
||||
// other
|
||||
declare module '*.wasm?init' {
|
||||
const initWasm: (
|
||||
options: WebAssembly.Imports
|
||||
) => Promise<WebAssembly.Instance>
|
||||
export default initWasm
|
||||
}
|
||||
declare module '*.webmanifest' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.pdf' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
declare module '*.txt' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
|
||||
// web worker
|
||||
declare module '*?worker' {
|
||||
const workerConstructor: {
|
||||
new (): Worker
|
||||
}
|
||||
export default workerConstructor
|
||||
}
|
||||
|
||||
declare module '*?worker&inline' {
|
||||
const workerConstructor: {
|
||||
new (): Worker
|
||||
}
|
||||
export default workerConstructor
|
||||
}
|
||||
|
||||
declare module '*?sharedworker' {
|
||||
const sharedWorkerConstructor: {
|
||||
new (): SharedWorker
|
||||
}
|
||||
export default sharedWorkerConstructor
|
||||
}
|
||||
|
||||
declare module '*?raw' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
|
||||
declare module '*?url' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
||||
|
||||
declare module '*?inline' {
|
||||
const src: string
|
||||
export default src
|
||||
}
|
640
webui/node_modules/vite/dist/client/client.mjs
generated
vendored
Normal file
640
webui/node_modules/vite/dist/client/client.mjs
generated
vendored
Normal file
|
@ -0,0 +1,640 @@
|
|||
import '@vite/env';
|
||||
|
||||
const template = /*html*/ `
|
||||
<style>
|
||||
:host {
|
||||
position: fixed;
|
||||
z-index: 99999;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow-y: scroll;
|
||||
margin: 0;
|
||||
background: rgba(0, 0, 0, 0.66);
|
||||
--monospace: 'SFMono-Regular', Consolas,
|
||||
'Liberation Mono', Menlo, Courier, monospace;
|
||||
--red: #ff5555;
|
||||
--yellow: #e2aa53;
|
||||
--purple: #cfa4ff;
|
||||
--cyan: #2dd9da;
|
||||
--dim: #c9c9c9;
|
||||
}
|
||||
|
||||
.window {
|
||||
font-family: var(--monospace);
|
||||
line-height: 1.5;
|
||||
width: 800px;
|
||||
color: #d8d8d8;
|
||||
margin: 30px auto;
|
||||
padding: 25px 40px;
|
||||
position: relative;
|
||||
background: #181818;
|
||||
border-radius: 6px 6px 8px 8px;
|
||||
box-shadow: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22);
|
||||
overflow: hidden;
|
||||
border-top: 8px solid var(--red);
|
||||
direction: ltr;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-family: var(--monospace);
|
||||
font-size: 16px;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1em;
|
||||
overflow-x: scroll;
|
||||
scrollbar-width: none;
|
||||
}
|
||||
|
||||
pre::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.message {
|
||||
line-height: 1.3;
|
||||
font-weight: 600;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.message-body {
|
||||
color: var(--red);
|
||||
}
|
||||
|
||||
.plugin {
|
||||
color: var(--purple);
|
||||
}
|
||||
|
||||
.file {
|
||||
color: var(--cyan);
|
||||
margin-bottom: 0;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.frame {
|
||||
color: var(--yellow);
|
||||
}
|
||||
|
||||
.stack {
|
||||
font-size: 13px;
|
||||
color: var(--dim);
|
||||
}
|
||||
|
||||
.tip {
|
||||
font-size: 13px;
|
||||
color: #999;
|
||||
border-top: 1px dotted #999;
|
||||
padding-top: 13px;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 13px;
|
||||
font-family: var(--monospace);
|
||||
color: var(--yellow);
|
||||
}
|
||||
|
||||
.file-link {
|
||||
text-decoration: underline;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
<div class="window">
|
||||
<pre class="message"><span class="plugin"></span><span class="message-body"></span></pre>
|
||||
<pre class="file"></pre>
|
||||
<pre class="frame"></pre>
|
||||
<pre class="stack"></pre>
|
||||
<div class="tip">
|
||||
Click outside or fix the code to dismiss.<br>
|
||||
You can also disable this overlay by setting
|
||||
<code>server.hmr.overlay</code> to <code>false</code> in <code>vite.config.js.</code>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
const fileRE = /(?:[a-zA-Z]:\\|\/).*?:\d+:\d+/g;
|
||||
const codeframeRE = /^(?:>?\s+\d+\s+\|.*|\s+\|\s*\^.*)\r?\n/gm;
|
||||
// Allow `ErrorOverlay` to extend `HTMLElement` even in environments where
|
||||
// `HTMLElement` was not originally defined.
|
||||
const { HTMLElement = class {
|
||||
} } = globalThis;
|
||||
class ErrorOverlay extends HTMLElement {
|
||||
constructor(err) {
|
||||
var _a;
|
||||
super();
|
||||
this.root = this.attachShadow({ mode: 'open' });
|
||||
this.root.innerHTML = template;
|
||||
codeframeRE.lastIndex = 0;
|
||||
const hasFrame = err.frame && codeframeRE.test(err.frame);
|
||||
const message = hasFrame
|
||||
? err.message.replace(codeframeRE, '')
|
||||
: err.message;
|
||||
if (err.plugin) {
|
||||
this.text('.plugin', `[plugin:${err.plugin}] `);
|
||||
}
|
||||
this.text('.message-body', message.trim());
|
||||
const [file] = (((_a = err.loc) === null || _a === void 0 ? void 0 : _a.file) || err.id || 'unknown file').split(`?`);
|
||||
if (err.loc) {
|
||||
this.text('.file', `${file}:${err.loc.line}:${err.loc.column}`, true);
|
||||
}
|
||||
else if (err.id) {
|
||||
this.text('.file', file);
|
||||
}
|
||||
if (hasFrame) {
|
||||
this.text('.frame', err.frame.trim());
|
||||
}
|
||||
this.text('.stack', err.stack, true);
|
||||
this.root.querySelector('.window').addEventListener('click', (e) => {
|
||||
e.stopPropagation();
|
||||
});
|
||||
this.addEventListener('click', () => {
|
||||
this.close();
|
||||
});
|
||||
}
|
||||
text(selector, text, linkFiles = false) {
|
||||
const el = this.root.querySelector(selector);
|
||||
if (!linkFiles) {
|
||||
el.textContent = text;
|
||||
}
|
||||
else {
|
||||
let curIndex = 0;
|
||||
let match;
|
||||
while ((match = fileRE.exec(text))) {
|
||||
const { 0: file, index } = match;
|
||||
if (index != null) {
|
||||
const frag = text.slice(curIndex, index);
|
||||
el.appendChild(document.createTextNode(frag));
|
||||
const link = document.createElement('a');
|
||||
link.textContent = file;
|
||||
link.className = 'file-link';
|
||||
link.onclick = () => {
|
||||
fetch('/__open-in-editor?file=' + encodeURIComponent(file));
|
||||
};
|
||||
el.appendChild(link);
|
||||
curIndex += frag.length + file.length;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
close() {
|
||||
var _a;
|
||||
(_a = this.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(this);
|
||||
}
|
||||
}
|
||||
const overlayId = 'vite-error-overlay';
|
||||
const { customElements } = globalThis; // Ensure `customElements` is defined before the next line.
|
||||
if (customElements && !customElements.get(overlayId)) {
|
||||
customElements.define(overlayId, ErrorOverlay);
|
||||
}
|
||||
|
||||
console.debug('[vite] connecting...');
|
||||
const importMetaUrl = new URL(import.meta.url);
|
||||
// use server configuration, then fallback to inference
|
||||
const serverHost = __SERVER_HOST__;
|
||||
const socketProtocol = __HMR_PROTOCOL__ || (location.protocol === 'https:' ? 'wss' : 'ws');
|
||||
const hmrPort = __HMR_PORT__;
|
||||
const socketHost = `${__HMR_HOSTNAME__ || importMetaUrl.hostname}:${hmrPort || importMetaUrl.port}${__HMR_BASE__}`;
|
||||
const directSocketHost = __HMR_DIRECT_TARGET__;
|
||||
const base = __BASE__ || '/';
|
||||
const messageBuffer = [];
|
||||
let socket;
|
||||
try {
|
||||
let fallback;
|
||||
// only use fallback when port is inferred to prevent confusion
|
||||
if (!hmrPort) {
|
||||
fallback = () => {
|
||||
// fallback to connecting directly to the hmr server
|
||||
// for servers which does not support proxying websocket
|
||||
socket = setupWebSocket(socketProtocol, directSocketHost, () => {
|
||||
const currentScriptHostURL = new URL(import.meta.url);
|
||||
const currentScriptHost = currentScriptHostURL.host +
|
||||
currentScriptHostURL.pathname.replace(/@vite\/client$/, '');
|
||||
console.error('[vite] failed to connect to websocket.\n' +
|
||||
'your current setup:\n' +
|
||||
` (browser) ${currentScriptHost} <--[HTTP]--> ${serverHost} (server)\n` +
|
||||
` (browser) ${socketHost} <--[WebSocket (failing)]--> ${directSocketHost} (server)\n` +
|
||||
'Check out your Vite / network configuration and https://vitejs.dev/config/server-options.html#server-hmr .');
|
||||
});
|
||||
socket.addEventListener('open', () => {
|
||||
console.info('[vite] Direct websocket connection fallback. Check out https://vitejs.dev/config/server-options.html#server-hmr to remove the previous connection error.');
|
||||
}, { once: true });
|
||||
};
|
||||
}
|
||||
socket = setupWebSocket(socketProtocol, socketHost, fallback);
|
||||
}
|
||||
catch (error) {
|
||||
console.error(`[vite] failed to connect to websocket (${error}). `);
|
||||
}
|
||||
function setupWebSocket(protocol, hostAndPath, onCloseWithoutOpen) {
|
||||
const socket = new WebSocket(`${protocol}://${hostAndPath}`, 'vite-hmr');
|
||||
let isOpened = false;
|
||||
socket.addEventListener('open', () => {
|
||||
isOpened = true;
|
||||
}, { once: true });
|
||||
// Listen for messages
|
||||
socket.addEventListener('message', async ({ data }) => {
|
||||
handleMessage(JSON.parse(data));
|
||||
});
|
||||
// ping server
|
||||
socket.addEventListener('close', async ({ wasClean }) => {
|
||||
if (wasClean)
|
||||
return;
|
||||
if (!isOpened && onCloseWithoutOpen) {
|
||||
onCloseWithoutOpen();
|
||||
return;
|
||||
}
|
||||
console.log(`[vite] server connection lost. polling for restart...`);
|
||||
await waitForSuccessfulPing(protocol, hostAndPath);
|
||||
location.reload();
|
||||
});
|
||||
return socket;
|
||||
}
|
||||
function warnFailedFetch(err, path) {
|
||||
if (!err.message.match('fetch')) {
|
||||
console.error(err);
|
||||
}
|
||||
console.error(`[hmr] Failed to reload ${path}. ` +
|
||||
`This could be due to syntax errors or importing non-existent ` +
|
||||
`modules. (see errors above)`);
|
||||
}
|
||||
function cleanUrl(pathname) {
|
||||
const url = new URL(pathname, location.toString());
|
||||
url.searchParams.delete('direct');
|
||||
return url.pathname + url.search;
|
||||
}
|
||||
let isFirstUpdate = true;
|
||||
const outdatedLinkTags = new WeakSet();
|
||||
async function handleMessage(payload) {
|
||||
switch (payload.type) {
|
||||
case 'connected':
|
||||
console.debug(`[vite] connected.`);
|
||||
sendMessageBuffer();
|
||||
// proxy(nginx, docker) hmr ws maybe caused timeout,
|
||||
// so send ping package let ws keep alive.
|
||||
setInterval(() => {
|
||||
if (socket.readyState === socket.OPEN) {
|
||||
socket.send('{"type":"ping"}');
|
||||
}
|
||||
}, __HMR_TIMEOUT__);
|
||||
break;
|
||||
case 'update':
|
||||
notifyListeners('vite:beforeUpdate', payload);
|
||||
// if this is the first update and there's already an error overlay, it
|
||||
// means the page opened with existing server compile error and the whole
|
||||
// module script failed to load (since one of the nested imports is 500).
|
||||
// in this case a normal update won't work and a full reload is needed.
|
||||
if (isFirstUpdate && hasErrorOverlay()) {
|
||||
window.location.reload();
|
||||
return;
|
||||
}
|
||||
else {
|
||||
clearErrorOverlay();
|
||||
isFirstUpdate = false;
|
||||
}
|
||||
payload.updates.forEach((update) => {
|
||||
if (update.type === 'js-update') {
|
||||
queueUpdate(fetchUpdate(update));
|
||||
}
|
||||
else {
|
||||
// css-update
|
||||
// this is only sent when a css file referenced with <link> is updated
|
||||
const { path, timestamp } = update;
|
||||
const searchUrl = cleanUrl(path);
|
||||
// can't use querySelector with `[href*=]` here since the link may be
|
||||
// using relative paths so we need to use link.href to grab the full
|
||||
// URL for the include check.
|
||||
const el = Array.from(document.querySelectorAll('link')).find((e) => !outdatedLinkTags.has(e) && cleanUrl(e.href).includes(searchUrl));
|
||||
if (el) {
|
||||
const newPath = `${base}${searchUrl.slice(1)}${searchUrl.includes('?') ? '&' : '?'}t=${timestamp}`;
|
||||
// rather than swapping the href on the existing tag, we will
|
||||
// create a new link tag. Once the new stylesheet has loaded we
|
||||
// will remove the existing link tag. This removes a Flash Of
|
||||
// Unstyled Content that can occur when swapping out the tag href
|
||||
// directly, as the new stylesheet has not yet been loaded.
|
||||
const newLinkTag = el.cloneNode();
|
||||
newLinkTag.href = new URL(newPath, el.href).href;
|
||||
const removeOldEl = () => el.remove();
|
||||
newLinkTag.addEventListener('load', removeOldEl);
|
||||
newLinkTag.addEventListener('error', removeOldEl);
|
||||
outdatedLinkTags.add(el);
|
||||
el.after(newLinkTag);
|
||||
}
|
||||
console.log(`[vite] css hot updated: ${searchUrl}`);
|
||||
}
|
||||
});
|
||||
break;
|
||||
case 'custom': {
|
||||
notifyListeners(payload.event, payload.data);
|
||||
break;
|
||||
}
|
||||
case 'full-reload':
|
||||
notifyListeners('vite:beforeFullReload', payload);
|
||||
if (payload.path && payload.path.endsWith('.html')) {
|
||||
// if html file is edited, only reload the page if the browser is
|
||||
// currently on that page.
|
||||
const pagePath = decodeURI(location.pathname);
|
||||
const payloadPath = base + payload.path.slice(1);
|
||||
if (pagePath === payloadPath ||
|
||||
payload.path === '/index.html' ||
|
||||
(pagePath.endsWith('/') && pagePath + 'index.html' === payloadPath)) {
|
||||
location.reload();
|
||||
}
|
||||
return;
|
||||
}
|
||||
else {
|
||||
location.reload();
|
||||
}
|
||||
break;
|
||||
case 'prune':
|
||||
notifyListeners('vite:beforePrune', payload);
|
||||
// After an HMR update, some modules are no longer imported on the page
|
||||
// but they may have left behind side effects that need to be cleaned up
|
||||
// (.e.g style injections)
|
||||
// TODO Trigger their dispose callbacks.
|
||||
payload.paths.forEach((path) => {
|
||||
const fn = pruneMap.get(path);
|
||||
if (fn) {
|
||||
fn(dataMap.get(path));
|
||||
}
|
||||
});
|
||||
break;
|
||||
case 'error': {
|
||||
notifyListeners('vite:error', payload);
|
||||
const err = payload.err;
|
||||
if (enableOverlay) {
|
||||
createErrorOverlay(err);
|
||||
}
|
||||
else {
|
||||
console.error(`[vite] Internal Server Error\n${err.message}\n${err.stack}`);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
const check = payload;
|
||||
return check;
|
||||
}
|
||||
}
|
||||
}
|
||||
function notifyListeners(event, data) {
|
||||
const cbs = customListenersMap.get(event);
|
||||
if (cbs) {
|
||||
cbs.forEach((cb) => cb(data));
|
||||
}
|
||||
}
|
||||
const enableOverlay = __HMR_ENABLE_OVERLAY__;
|
||||
function createErrorOverlay(err) {
|
||||
if (!enableOverlay)
|
||||
return;
|
||||
clearErrorOverlay();
|
||||
document.body.appendChild(new ErrorOverlay(err));
|
||||
}
|
||||
function clearErrorOverlay() {
|
||||
document
|
||||
.querySelectorAll(overlayId)
|
||||
.forEach((n) => n.close());
|
||||
}
|
||||
function hasErrorOverlay() {
|
||||
return document.querySelectorAll(overlayId).length;
|
||||
}
|
||||
let pending = false;
|
||||
let queued = [];
|
||||
/**
|
||||
* buffer multiple hot updates triggered by the same src change
|
||||
* so that they are invoked in the same order they were sent.
|
||||
* (otherwise the order may be inconsistent because of the http request round trip)
|
||||
*/
|
||||
async function queueUpdate(p) {
|
||||
queued.push(p);
|
||||
if (!pending) {
|
||||
pending = true;
|
||||
await Promise.resolve();
|
||||
pending = false;
|
||||
const loading = [...queued];
|
||||
queued = [];
|
||||
(await Promise.all(loading)).forEach((fn) => fn && fn());
|
||||
}
|
||||
}
|
||||
async function waitForSuccessfulPing(socketProtocol, hostAndPath, ms = 1000) {
|
||||
const pingHostProtocol = socketProtocol === 'wss' ? 'https' : 'http';
|
||||
// eslint-disable-next-line no-constant-condition
|
||||
while (true) {
|
||||
try {
|
||||
// A fetch on a websocket URL will return a successful promise with status 400,
|
||||
// but will reject a networking error.
|
||||
// When running on middleware mode, it returns status 426, and an cors error happens if mode is not no-cors
|
||||
await fetch(`${pingHostProtocol}://${hostAndPath}`, {
|
||||
mode: 'no-cors'
|
||||
});
|
||||
break;
|
||||
}
|
||||
catch (e) {
|
||||
// wait ms before attempting to ping again
|
||||
await new Promise((resolve) => setTimeout(resolve, ms));
|
||||
}
|
||||
}
|
||||
}
|
||||
const sheetsMap = new Map();
|
||||
function updateStyle(id, content) {
|
||||
let style = sheetsMap.get(id);
|
||||
{
|
||||
if (style && !(style instanceof HTMLStyleElement)) {
|
||||
removeStyle(id);
|
||||
style = undefined;
|
||||
}
|
||||
if (!style) {
|
||||
style = document.createElement('style');
|
||||
style.setAttribute('type', 'text/css');
|
||||
style.innerHTML = content;
|
||||
document.head.appendChild(style);
|
||||
}
|
||||
else {
|
||||
style.innerHTML = content;
|
||||
}
|
||||
}
|
||||
sheetsMap.set(id, style);
|
||||
}
|
||||
function removeStyle(id) {
|
||||
const style = sheetsMap.get(id);
|
||||
if (style) {
|
||||
if (style instanceof CSSStyleSheet) {
|
||||
// @ts-expect-error: using experimental API
|
||||
document.adoptedStyleSheets = document.adoptedStyleSheets.filter((s) => s !== style);
|
||||
}
|
||||
else {
|
||||
document.head.removeChild(style);
|
||||
}
|
||||
sheetsMap.delete(id);
|
||||
}
|
||||
}
|
||||
async function fetchUpdate({ path, acceptedPath, timestamp }) {
|
||||
const mod = hotModulesMap.get(path);
|
||||
if (!mod) {
|
||||
// In a code-splitting project,
|
||||
// it is common that the hot-updating module is not loaded yet.
|
||||
// https://github.com/vitejs/vite/issues/721
|
||||
return;
|
||||
}
|
||||
const moduleMap = new Map();
|
||||
const isSelfUpdate = path === acceptedPath;
|
||||
// make sure we only import each dep once
|
||||
const modulesToUpdate = new Set();
|
||||
if (isSelfUpdate) {
|
||||
// self update - only update self
|
||||
modulesToUpdate.add(path);
|
||||
}
|
||||
else {
|
||||
// dep update
|
||||
for (const { deps } of mod.callbacks) {
|
||||
deps.forEach((dep) => {
|
||||
if (acceptedPath === dep) {
|
||||
modulesToUpdate.add(dep);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
// determine the qualified callbacks before we re-import the modules
|
||||
const qualifiedCallbacks = mod.callbacks.filter(({ deps }) => {
|
||||
return deps.some((dep) => modulesToUpdate.has(dep));
|
||||
});
|
||||
await Promise.all(Array.from(modulesToUpdate).map(async (dep) => {
|
||||
const disposer = disposeMap.get(dep);
|
||||
if (disposer)
|
||||
await disposer(dataMap.get(dep));
|
||||
const [path, query] = dep.split(`?`);
|
||||
try {
|
||||
const newMod = await import(
|
||||
/* @vite-ignore */
|
||||
base +
|
||||
path.slice(1) +
|
||||
`?import&t=${timestamp}${query ? `&${query}` : ''}`);
|
||||
moduleMap.set(dep, newMod);
|
||||
}
|
||||
catch (e) {
|
||||
warnFailedFetch(e, dep);
|
||||
}
|
||||
}));
|
||||
return () => {
|
||||
for (const { deps, fn } of qualifiedCallbacks) {
|
||||
fn(deps.map((dep) => moduleMap.get(dep)));
|
||||
}
|
||||
const loggedPath = isSelfUpdate ? path : `${acceptedPath} via ${path}`;
|
||||
console.log(`[vite] hot updated: ${loggedPath}`);
|
||||
};
|
||||
}
|
||||
function sendMessageBuffer() {
|
||||
if (socket.readyState === 1) {
|
||||
messageBuffer.forEach((msg) => socket.send(msg));
|
||||
messageBuffer.length = 0;
|
||||
}
|
||||
}
|
||||
const hotModulesMap = new Map();
|
||||
const disposeMap = new Map();
|
||||
const pruneMap = new Map();
|
||||
const dataMap = new Map();
|
||||
const customListenersMap = new Map();
|
||||
const ctxToListenersMap = new Map();
|
||||
function createHotContext(ownerPath) {
|
||||
if (!dataMap.has(ownerPath)) {
|
||||
dataMap.set(ownerPath, {});
|
||||
}
|
||||
// when a file is hot updated, a new context is created
|
||||
// clear its stale callbacks
|
||||
const mod = hotModulesMap.get(ownerPath);
|
||||
if (mod) {
|
||||
mod.callbacks = [];
|
||||
}
|
||||
// clear stale custom event listeners
|
||||
const staleListeners = ctxToListenersMap.get(ownerPath);
|
||||
if (staleListeners) {
|
||||
for (const [event, staleFns] of staleListeners) {
|
||||
const listeners = customListenersMap.get(event);
|
||||
if (listeners) {
|
||||
customListenersMap.set(event, listeners.filter((l) => !staleFns.includes(l)));
|
||||
}
|
||||
}
|
||||
}
|
||||
const newListeners = new Map();
|
||||
ctxToListenersMap.set(ownerPath, newListeners);
|
||||
function acceptDeps(deps, callback = () => { }) {
|
||||
const mod = hotModulesMap.get(ownerPath) || {
|
||||
id: ownerPath,
|
||||
callbacks: []
|
||||
};
|
||||
mod.callbacks.push({
|
||||
deps,
|
||||
fn: callback
|
||||
});
|
||||
hotModulesMap.set(ownerPath, mod);
|
||||
}
|
||||
const hot = {
|
||||
get data() {
|
||||
return dataMap.get(ownerPath);
|
||||
},
|
||||
accept(deps, callback) {
|
||||
if (typeof deps === 'function' || !deps) {
|
||||
// self-accept: hot.accept(() => {})
|
||||
acceptDeps([ownerPath], ([mod]) => deps && deps(mod));
|
||||
}
|
||||
else if (typeof deps === 'string') {
|
||||
// explicit deps
|
||||
acceptDeps([deps], ([mod]) => callback && callback(mod));
|
||||
}
|
||||
else if (Array.isArray(deps)) {
|
||||
acceptDeps(deps, callback);
|
||||
}
|
||||
else {
|
||||
throw new Error(`invalid hot.accept() usage.`);
|
||||
}
|
||||
},
|
||||
// export names (first arg) are irrelevant on the client side, they're
|
||||
// extracted in the server for propagation
|
||||
acceptExports(_, callback) {
|
||||
acceptDeps([ownerPath], callback && (([mod]) => callback(mod)));
|
||||
},
|
||||
dispose(cb) {
|
||||
disposeMap.set(ownerPath, cb);
|
||||
},
|
||||
// @ts-expect-error untyped
|
||||
prune(cb) {
|
||||
pruneMap.set(ownerPath, cb);
|
||||
},
|
||||
// TODO
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
||||
decline() { },
|
||||
invalidate() {
|
||||
// TODO should tell the server to re-perform hmr propagation
|
||||
// from this module as root
|
||||
location.reload();
|
||||
},
|
||||
// custom events
|
||||
on(event, cb) {
|
||||
const addToMap = (map) => {
|
||||
const existing = map.get(event) || [];
|
||||
existing.push(cb);
|
||||
map.set(event, existing);
|
||||
};
|
||||
addToMap(customListenersMap);
|
||||
addToMap(newListeners);
|
||||
},
|
||||
send(event, data) {
|
||||
messageBuffer.push(JSON.stringify({ type: 'custom', event, data }));
|
||||
sendMessageBuffer();
|
||||
}
|
||||
};
|
||||
return hot;
|
||||
}
|
||||
/**
|
||||
* urls here are dynamic import() urls that couldn't be statically analyzed
|
||||
*/
|
||||
function injectQuery(url, queryToInject) {
|
||||
// skip urls that won't be handled by vite
|
||||
if (!url.startsWith('.') && !url.startsWith('/')) {
|
||||
return url;
|
||||
}
|
||||
// can't use pathname from URL since it may be relative like ../
|
||||
const pathname = url.replace(/#.*$/, '').replace(/\?.*$/, '');
|
||||
const { search, hash } = new URL(url, 'http://vitejs.dev');
|
||||
return `${pathname}?${queryToInject}${search ? `&` + search.slice(1) : ''}${hash || ''}`;
|
||||
}
|
||||
|
||||
export { ErrorOverlay, createHotContext, injectQuery, removeStyle, updateStyle };
|
||||
//# sourceMappingURL=client.mjs.map
|
1
webui/node_modules/vite/dist/client/client.mjs.map
generated
vendored
Normal file
1
webui/node_modules/vite/dist/client/client.mjs.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
30
webui/node_modules/vite/dist/client/env.mjs
generated
vendored
Normal file
30
webui/node_modules/vite/dist/client/env.mjs
generated
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
const context = (() => {
|
||||
if (typeof globalThis !== 'undefined') {
|
||||
return globalThis;
|
||||
}
|
||||
else if (typeof self !== 'undefined') {
|
||||
return self;
|
||||
}
|
||||
else if (typeof window !== 'undefined') {
|
||||
return window;
|
||||
}
|
||||
else {
|
||||
return Function('return this')();
|
||||
}
|
||||
})();
|
||||
// assign defines
|
||||
const defines = __DEFINES__;
|
||||
Object.keys(defines).forEach((key) => {
|
||||
const segments = key.split('.');
|
||||
let target = context;
|
||||
for (let i = 0; i < segments.length; i++) {
|
||||
const segment = segments[i];
|
||||
if (i === segments.length - 1) {
|
||||
target[segment] = defines[key];
|
||||
}
|
||||
else {
|
||||
target = target[segment] || (target[segment] = {});
|
||||
}
|
||||
}
|
||||
});
|
||||
//# sourceMappingURL=env.mjs.map
|
1
webui/node_modules/vite/dist/client/env.mjs.map
generated
vendored
Normal file
1
webui/node_modules/vite/dist/client/env.mjs.map
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"env.mjs","sources":["../../src/client/env.ts"],"sourcesContent":["declare const __MODE__: string\ndeclare const __DEFINES__: Record<string, any>\n\nconst context = (() => {\n if (typeof globalThis !== 'undefined') {\n return globalThis\n } else if (typeof self !== 'undefined') {\n return self\n } else if (typeof window !== 'undefined') {\n return window\n } else {\n return Function('return this')()\n }\n})()\n\n// assign defines\nconst defines = __DEFINES__\nObject.keys(defines).forEach((key) => {\n const segments = key.split('.')\n let target = context\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i]\n if (i === segments.length - 1) {\n target[segment] = defines[key]\n } else {\n target = target[segment] || (target[segment] = {})\n }\n }\n})\n"],"names":[],"mappings":"AAGA,MAAM,OAAO,GAAG,CAAC,MAAK;AACpB,IAAA,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;AACrC,QAAA,OAAO,UAAU,CAAA;AAClB,KAAA;AAAM,SAAA,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;AACtC,QAAA,OAAO,IAAI,CAAA;AACZ,KAAA;AAAM,SAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACxC,QAAA,OAAO,MAAM,CAAA;AACd,KAAA;AAAM,SAAA;AACL,QAAA,OAAO,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAA;AACjC,KAAA;AACH,CAAC,GAAG,CAAA;AAEJ;AACA,MAAM,OAAO,GAAG,WAAW,CAAA;AAC3B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;IACnC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC/B,IAAI,MAAM,GAAG,OAAO,CAAA;AACpB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;AAC/B,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;AACnD,SAAA;AACF,KAAA;AACH,CAAC,CAAC"}
|
4226
webui/node_modules/vite/dist/node-cjs/publicUtils.cjs
generated
vendored
Normal file
4226
webui/node_modules/vite/dist/node-cjs/publicUtils.cjs
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
561
webui/node_modules/vite/dist/node/chunks/dep-07a79996.js
generated
vendored
Normal file
561
webui/node_modules/vite/dist/node/chunks/dep-07a79996.js
generated
vendored
Normal file
|
@ -0,0 +1,561 @@
|
|||
import { fileURLToPath as __cjs_fileURLToPath } from 'node:url';
|
||||
import { dirname as __cjs_dirname } from 'node:path';
|
||||
import { createRequire as __cjs_createRequire } from 'node:module';
|
||||
|
||||
const __filename = __cjs_fileURLToPath(import.meta.url);
|
||||
const __dirname = __cjs_dirname(__filename);
|
||||
const require = __cjs_createRequire(import.meta.url);
|
||||
const __require = require;
|
||||
var openParentheses = "(".charCodeAt(0);
|
||||
var closeParentheses = ")".charCodeAt(0);
|
||||
var singleQuote = "'".charCodeAt(0);
|
||||
var doubleQuote = '"'.charCodeAt(0);
|
||||
var backslash = "\\".charCodeAt(0);
|
||||
var slash = "/".charCodeAt(0);
|
||||
var comma = ",".charCodeAt(0);
|
||||
var colon = ":".charCodeAt(0);
|
||||
var star = "*".charCodeAt(0);
|
||||
var uLower = "u".charCodeAt(0);
|
||||
var uUpper = "U".charCodeAt(0);
|
||||
var plus = "+".charCodeAt(0);
|
||||
var isUnicodeRange = /^[a-f0-9?-]+$/i;
|
||||
|
||||
var parse$1 = function(input) {
|
||||
var tokens = [];
|
||||
var value = input;
|
||||
|
||||
var next,
|
||||
quote,
|
||||
prev,
|
||||
token,
|
||||
escape,
|
||||
escapePos,
|
||||
whitespacePos,
|
||||
parenthesesOpenPos;
|
||||
var pos = 0;
|
||||
var code = value.charCodeAt(pos);
|
||||
var max = value.length;
|
||||
var stack = [{ nodes: tokens }];
|
||||
var balanced = 0;
|
||||
var parent;
|
||||
|
||||
var name = "";
|
||||
var before = "";
|
||||
var after = "";
|
||||
|
||||
while (pos < max) {
|
||||
// Whitespaces
|
||||
if (code <= 32) {
|
||||
next = pos;
|
||||
do {
|
||||
next += 1;
|
||||
code = value.charCodeAt(next);
|
||||
} while (code <= 32);
|
||||
token = value.slice(pos, next);
|
||||
|
||||
prev = tokens[tokens.length - 1];
|
||||
if (code === closeParentheses && balanced) {
|
||||
after = token;
|
||||
} else if (prev && prev.type === "div") {
|
||||
prev.after = token;
|
||||
prev.sourceEndIndex += token.length;
|
||||
} else if (
|
||||
code === comma ||
|
||||
code === colon ||
|
||||
(code === slash &&
|
||||
value.charCodeAt(next + 1) !== star &&
|
||||
(!parent ||
|
||||
(parent && parent.type === "function" && parent.value !== "calc")))
|
||||
) {
|
||||
before = token;
|
||||
} else {
|
||||
tokens.push({
|
||||
type: "space",
|
||||
sourceIndex: pos,
|
||||
sourceEndIndex: next,
|
||||
value: token
|
||||
});
|
||||
}
|
||||
|
||||
pos = next;
|
||||
|
||||
// Quotes
|
||||
} else if (code === singleQuote || code === doubleQuote) {
|
||||
next = pos;
|
||||
quote = code === singleQuote ? "'" : '"';
|
||||
token = {
|
||||
type: "string",
|
||||
sourceIndex: pos,
|
||||
quote: quote
|
||||
};
|
||||
do {
|
||||
escape = false;
|
||||
next = value.indexOf(quote, next + 1);
|
||||
if (~next) {
|
||||
escapePos = next;
|
||||
while (value.charCodeAt(escapePos - 1) === backslash) {
|
||||
escapePos -= 1;
|
||||
escape = !escape;
|
||||
}
|
||||
} else {
|
||||
value += quote;
|
||||
next = value.length - 1;
|
||||
token.unclosed = true;
|
||||
}
|
||||
} while (escape);
|
||||
token.value = value.slice(pos + 1, next);
|
||||
token.sourceEndIndex = token.unclosed ? next : next + 1;
|
||||
tokens.push(token);
|
||||
pos = next + 1;
|
||||
code = value.charCodeAt(pos);
|
||||
|
||||
// Comments
|
||||
} else if (code === slash && value.charCodeAt(pos + 1) === star) {
|
||||
next = value.indexOf("*/", pos);
|
||||
|
||||
token = {
|
||||
type: "comment",
|
||||
sourceIndex: pos,
|
||||
sourceEndIndex: next + 2
|
||||
};
|
||||
|
||||
if (next === -1) {
|
||||
token.unclosed = true;
|
||||
next = value.length;
|
||||
token.sourceEndIndex = next;
|
||||
}
|
||||
|
||||
token.value = value.slice(pos + 2, next);
|
||||
tokens.push(token);
|
||||
|
||||
pos = next + 2;
|
||||
code = value.charCodeAt(pos);
|
||||
|
||||
// Operation within calc
|
||||
} else if (
|
||||
(code === slash || code === star) &&
|
||||
parent &&
|
||||
parent.type === "function" &&
|
||||
parent.value === "calc"
|
||||
) {
|
||||
token = value[pos];
|
||||
tokens.push({
|
||||
type: "word",
|
||||
sourceIndex: pos - before.length,
|
||||
sourceEndIndex: pos + token.length,
|
||||
value: token
|
||||
});
|
||||
pos += 1;
|
||||
code = value.charCodeAt(pos);
|
||||
|
||||
// Dividers
|
||||
} else if (code === slash || code === comma || code === colon) {
|
||||
token = value[pos];
|
||||
|
||||
tokens.push({
|
||||
type: "div",
|
||||
sourceIndex: pos - before.length,
|
||||
sourceEndIndex: pos + token.length,
|
||||
value: token,
|
||||
before: before,
|
||||
after: ""
|
||||
});
|
||||
before = "";
|
||||
|
||||
pos += 1;
|
||||
code = value.charCodeAt(pos);
|
||||
|
||||
// Open parentheses
|
||||
} else if (openParentheses === code) {
|
||||
// Whitespaces after open parentheses
|
||||
next = pos;
|
||||
do {
|
||||
next += 1;
|
||||
code = value.charCodeAt(next);
|
||||
} while (code <= 32);
|
||||
parenthesesOpenPos = pos;
|
||||
token = {
|
||||
type: "function",
|
||||
sourceIndex: pos - name.length,
|
||||
value: name,
|
||||
before: value.slice(parenthesesOpenPos + 1, next)
|
||||
};
|
||||
pos = next;
|
||||
|
||||
if (name === "url" && code !== singleQuote && code !== doubleQuote) {
|
||||
next -= 1;
|
||||
do {
|
||||
escape = false;
|
||||
next = value.indexOf(")", next + 1);
|
||||
if (~next) {
|
||||
escapePos = next;
|
||||
while (value.charCodeAt(escapePos - 1) === backslash) {
|
||||
escapePos -= 1;
|
||||
escape = !escape;
|
||||
}
|
||||
} else {
|
||||
value += ")";
|
||||
next = value.length - 1;
|
||||
token.unclosed = true;
|
||||
}
|
||||
} while (escape);
|
||||
// Whitespaces before closed
|
||||
whitespacePos = next;
|
||||
do {
|
||||
whitespacePos -= 1;
|
||||
code = value.charCodeAt(whitespacePos);
|
||||
} while (code <= 32);
|
||||
if (parenthesesOpenPos < whitespacePos) {
|
||||
if (pos !== whitespacePos + 1) {
|
||||
token.nodes = [
|
||||
{
|
||||
type: "word",
|
||||
sourceIndex: pos,
|
||||
sourceEndIndex: whitespacePos + 1,
|
||||
value: value.slice(pos, whitespacePos + 1)
|
||||
}
|
||||
];
|
||||
} else {
|
||||
token.nodes = [];
|
||||
}
|
||||
if (token.unclosed && whitespacePos + 1 !== next) {
|
||||
token.after = "";
|
||||
token.nodes.push({
|
||||
type: "space",
|
||||
sourceIndex: whitespacePos + 1,
|
||||
sourceEndIndex: next,
|
||||
value: value.slice(whitespacePos + 1, next)
|
||||
});
|
||||
} else {
|
||||
token.after = value.slice(whitespacePos + 1, next);
|
||||
token.sourceEndIndex = next;
|
||||
}
|
||||
} else {
|
||||
token.after = "";
|
||||
token.nodes = [];
|
||||
}
|
||||
pos = next + 1;
|
||||
token.sourceEndIndex = token.unclosed ? next : pos;
|
||||
code = value.charCodeAt(pos);
|
||||
tokens.push(token);
|
||||
} else {
|
||||
balanced += 1;
|
||||
token.after = "";
|
||||
token.sourceEndIndex = pos + 1;
|
||||
tokens.push(token);
|
||||
stack.push(token);
|
||||
tokens = token.nodes = [];
|
||||
parent = token;
|
||||
}
|
||||
name = "";
|
||||
|
||||
// Close parentheses
|
||||
} else if (closeParentheses === code && balanced) {
|
||||
pos += 1;
|
||||
code = value.charCodeAt(pos);
|
||||
|
||||
parent.after = after;
|
||||
parent.sourceEndIndex += after.length;
|
||||
after = "";
|
||||
balanced -= 1;
|
||||
stack[stack.length - 1].sourceEndIndex = pos;
|
||||
stack.pop();
|
||||
parent = stack[balanced];
|
||||
tokens = parent.nodes;
|
||||
|
||||
// Words
|
||||
} else {
|
||||
next = pos;
|
||||
do {
|
||||
if (code === backslash) {
|
||||
next += 1;
|
||||
}
|
||||
next += 1;
|
||||
code = value.charCodeAt(next);
|
||||
} while (
|
||||
next < max &&
|
||||
!(
|
||||
code <= 32 ||
|
||||
code === singleQuote ||
|
||||
code === doubleQuote ||
|
||||
code === comma ||
|
||||
code === colon ||
|
||||
code === slash ||
|
||||
code === openParentheses ||
|
||||
(code === star &&
|
||||
parent &&
|
||||
parent.type === "function" &&
|
||||
parent.value === "calc") ||
|
||||
(code === slash &&
|
||||
parent.type === "function" &&
|
||||
parent.value === "calc") ||
|
||||
(code === closeParentheses && balanced)
|
||||
)
|
||||
);
|
||||
token = value.slice(pos, next);
|
||||
|
||||
if (openParentheses === code) {
|
||||
name = token;
|
||||
} else if (
|
||||
(uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) &&
|
||||
plus === token.charCodeAt(1) &&
|
||||
isUnicodeRange.test(token.slice(2))
|
||||
) {
|
||||
tokens.push({
|
||||
type: "unicode-range",
|
||||
sourceIndex: pos,
|
||||
sourceEndIndex: next,
|
||||
value: token
|
||||
});
|
||||
} else {
|
||||
tokens.push({
|
||||
type: "word",
|
||||
sourceIndex: pos,
|
||||
sourceEndIndex: next,
|
||||
value: token
|
||||
});
|
||||
}
|
||||
|
||||
pos = next;
|
||||
}
|
||||
}
|
||||
|
||||
for (pos = stack.length - 1; pos; pos -= 1) {
|
||||
stack[pos].unclosed = true;
|
||||
stack[pos].sourceEndIndex = value.length;
|
||||
}
|
||||
|
||||
return stack[0].nodes;
|
||||
};
|
||||
|
||||
var walk$1 = function walk(nodes, cb, bubble) {
|
||||
var i, max, node, result;
|
||||
|
||||
for (i = 0, max = nodes.length; i < max; i += 1) {
|
||||
node = nodes[i];
|
||||
if (!bubble) {
|
||||
result = cb(node, i, nodes);
|
||||
}
|
||||
|
||||
if (
|
||||
result !== false &&
|
||||
node.type === "function" &&
|
||||
Array.isArray(node.nodes)
|
||||
) {
|
||||
walk(node.nodes, cb, bubble);
|
||||
}
|
||||
|
||||
if (bubble) {
|
||||
cb(node, i, nodes);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function stringifyNode(node, custom) {
|
||||
var type = node.type;
|
||||
var value = node.value;
|
||||
var buf;
|
||||
var customResult;
|
||||
|
||||
if (custom && (customResult = custom(node)) !== undefined) {
|
||||
return customResult;
|
||||
} else if (type === "word" || type === "space") {
|
||||
return value;
|
||||
} else if (type === "string") {
|
||||
buf = node.quote || "";
|
||||
return buf + value + (node.unclosed ? "" : buf);
|
||||
} else if (type === "comment") {
|
||||
return "/*" + value + (node.unclosed ? "" : "*/");
|
||||
} else if (type === "div") {
|
||||
return (node.before || "") + value + (node.after || "");
|
||||
} else if (Array.isArray(node.nodes)) {
|
||||
buf = stringify$1(node.nodes, custom);
|
||||
if (type !== "function") {
|
||||
return buf;
|
||||
}
|
||||
return (
|
||||
value +
|
||||
"(" +
|
||||
(node.before || "") +
|
||||
buf +
|
||||
(node.after || "") +
|
||||
(node.unclosed ? "" : ")")
|
||||
);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
function stringify$1(nodes, custom) {
|
||||
var result, i;
|
||||
|
||||
if (Array.isArray(nodes)) {
|
||||
result = "";
|
||||
for (i = nodes.length - 1; ~i; i -= 1) {
|
||||
result = stringifyNode(nodes[i], custom) + result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
return stringifyNode(nodes, custom);
|
||||
}
|
||||
|
||||
var stringify_1 = stringify$1;
|
||||
|
||||
var unit;
|
||||
var hasRequiredUnit;
|
||||
|
||||
function requireUnit () {
|
||||
if (hasRequiredUnit) return unit;
|
||||
hasRequiredUnit = 1;
|
||||
var minus = "-".charCodeAt(0);
|
||||
var plus = "+".charCodeAt(0);
|
||||
var dot = ".".charCodeAt(0);
|
||||
var exp = "e".charCodeAt(0);
|
||||
var EXP = "E".charCodeAt(0);
|
||||
|
||||
// Check if three code points would start a number
|
||||
// https://www.w3.org/TR/css-syntax-3/#starts-with-a-number
|
||||
function likeNumber(value) {
|
||||
var code = value.charCodeAt(0);
|
||||
var nextCode;
|
||||
|
||||
if (code === plus || code === minus) {
|
||||
nextCode = value.charCodeAt(1);
|
||||
|
||||
if (nextCode >= 48 && nextCode <= 57) {
|
||||
return true;
|
||||
}
|
||||
|
||||
var nextNextCode = value.charCodeAt(2);
|
||||
|
||||
if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (code === dot) {
|
||||
nextCode = value.charCodeAt(1);
|
||||
|
||||
if (nextCode >= 48 && nextCode <= 57) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (code >= 48 && code <= 57) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Consume a number
|
||||
// https://www.w3.org/TR/css-syntax-3/#consume-number
|
||||
unit = function(value) {
|
||||
var pos = 0;
|
||||
var length = value.length;
|
||||
var code;
|
||||
var nextCode;
|
||||
var nextNextCode;
|
||||
|
||||
if (length === 0 || !likeNumber(value)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
code = value.charCodeAt(pos);
|
||||
|
||||
if (code === plus || code === minus) {
|
||||
pos++;
|
||||
}
|
||||
|
||||
while (pos < length) {
|
||||
code = value.charCodeAt(pos);
|
||||
|
||||
if (code < 48 || code > 57) {
|
||||
break;
|
||||
}
|
||||
|
||||
pos += 1;
|
||||
}
|
||||
|
||||
code = value.charCodeAt(pos);
|
||||
nextCode = value.charCodeAt(pos + 1);
|
||||
|
||||
if (code === dot && nextCode >= 48 && nextCode <= 57) {
|
||||
pos += 2;
|
||||
|
||||
while (pos < length) {
|
||||
code = value.charCodeAt(pos);
|
||||
|
||||
if (code < 48 || code > 57) {
|
||||
break;
|
||||
}
|
||||
|
||||
pos += 1;
|
||||
}
|
||||
}
|
||||
|
||||
code = value.charCodeAt(pos);
|
||||
nextCode = value.charCodeAt(pos + 1);
|
||||
nextNextCode = value.charCodeAt(pos + 2);
|
||||
|
||||
if (
|
||||
(code === exp || code === EXP) &&
|
||||
((nextCode >= 48 && nextCode <= 57) ||
|
||||
((nextCode === plus || nextCode === minus) &&
|
||||
nextNextCode >= 48 &&
|
||||
nextNextCode <= 57))
|
||||
) {
|
||||
pos += nextCode === plus || nextCode === minus ? 3 : 2;
|
||||
|
||||
while (pos < length) {
|
||||
code = value.charCodeAt(pos);
|
||||
|
||||
if (code < 48 || code > 57) {
|
||||
break;
|
||||
}
|
||||
|
||||
pos += 1;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
number: value.slice(0, pos),
|
||||
unit: value.slice(pos)
|
||||
};
|
||||
};
|
||||
return unit;
|
||||
}
|
||||
|
||||
var parse = parse$1;
|
||||
var walk = walk$1;
|
||||
var stringify = stringify_1;
|
||||
|
||||
function ValueParser(value) {
|
||||
if (this instanceof ValueParser) {
|
||||
this.nodes = parse(value);
|
||||
return this;
|
||||
}
|
||||
return new ValueParser(value);
|
||||
}
|
||||
|
||||
ValueParser.prototype.toString = function() {
|
||||
return Array.isArray(this.nodes) ? stringify(this.nodes) : "";
|
||||
};
|
||||
|
||||
ValueParser.prototype.walk = function(cb, bubble) {
|
||||
walk(this.nodes, cb, bubble);
|
||||
return this;
|
||||
};
|
||||
|
||||
ValueParser.unit = requireUnit();
|
||||
|
||||
ValueParser.walk = walk;
|
||||
|
||||
ValueParser.stringify = stringify;
|
||||
|
||||
var lib = ValueParser;
|
||||
|
||||
export { lib as l };
|
63120
webui/node_modules/vite/dist/node/chunks/dep-0fc8e132.js
generated
vendored
Normal file
63120
webui/node_modules/vite/dist/node/chunks/dep-0fc8e132.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
7545
webui/node_modules/vite/dist/node/chunks/dep-25be4b3b.js
generated
vendored
Normal file
7545
webui/node_modules/vite/dist/node/chunks/dep-25be4b3b.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
823
webui/node_modules/vite/dist/node/chunks/dep-94c1417a.js
generated
vendored
Normal file
823
webui/node_modules/vite/dist/node/chunks/dep-94c1417a.js
generated
vendored
Normal file
|
@ -0,0 +1,823 @@
|
|||
import require$$0 from 'path';
|
||||
import resolve$2 from 'resolve';
|
||||
import require$$0__default from 'fs';
|
||||
import { l as lib } from './dep-07a79996.js';
|
||||
|
||||
import { fileURLToPath as __cjs_fileURLToPath } from 'node:url';
|
||||
import { dirname as __cjs_dirname } from 'node:path';
|
||||
import { createRequire as __cjs_createRequire } from 'node:module';
|
||||
|
||||
const __filename = __cjs_fileURLToPath(import.meta.url);
|
||||
const __dirname = __cjs_dirname(__filename);
|
||||
const require = __cjs_createRequire(import.meta.url);
|
||||
const __require = require;
|
||||
function _mergeNamespaces(n, m) {
|
||||
for (var i = 0; i < m.length; i++) {
|
||||
var e = m[i];
|
||||
if (typeof e !== 'string' && !Array.isArray(e)) { for (var k in e) {
|
||||
if (k !== 'default' && !(k in n)) {
|
||||
n[k] = e[k];
|
||||
}
|
||||
} }
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
var joinMedia$1 = function (parentMedia, childMedia) {
|
||||
if (!parentMedia.length && childMedia.length) return childMedia
|
||||
if (parentMedia.length && !childMedia.length) return parentMedia
|
||||
if (!parentMedia.length && !childMedia.length) return []
|
||||
|
||||
const media = [];
|
||||
|
||||
parentMedia.forEach(parentItem => {
|
||||
childMedia.forEach(childItem => {
|
||||
if (parentItem !== childItem) media.push(`${parentItem} and ${childItem}`);
|
||||
});
|
||||
});
|
||||
|
||||
return media
|
||||
};
|
||||
|
||||
var joinLayer$1 = function (parentLayer, childLayer) {
|
||||
if (!parentLayer.length && childLayer.length) return childLayer
|
||||
if (parentLayer.length && !childLayer.length) return parentLayer
|
||||
if (!parentLayer.length && !childLayer.length) return []
|
||||
|
||||
return parentLayer.concat(childLayer)
|
||||
};
|
||||
|
||||
// external tooling
|
||||
const resolve$1 = resolve$2;
|
||||
|
||||
const moduleDirectories = ["web_modules", "node_modules"];
|
||||
|
||||
function resolveModule(id, opts) {
|
||||
return new Promise((res, rej) => {
|
||||
resolve$1(id, opts, (err, path) => (err ? rej(err) : res(path)));
|
||||
})
|
||||
}
|
||||
|
||||
var resolveId$1 = function (id, base, options) {
|
||||
const paths = options.path;
|
||||
|
||||
const resolveOpts = {
|
||||
basedir: base,
|
||||
moduleDirectory: moduleDirectories.concat(options.addModulesDirectories),
|
||||
paths,
|
||||
extensions: [".css"],
|
||||
packageFilter: function processPackage(pkg) {
|
||||
if (pkg.style) pkg.main = pkg.style;
|
||||
else if (!pkg.main || !/\.css$/.test(pkg.main)) pkg.main = "index.css";
|
||||
return pkg
|
||||
},
|
||||
preserveSymlinks: false,
|
||||
};
|
||||
|
||||
return resolveModule(`./${id}`, resolveOpts)
|
||||
.catch(() => resolveModule(id, resolveOpts))
|
||||
.catch(() => {
|
||||
if (paths.indexOf(base) === -1) paths.unshift(base);
|
||||
|
||||
throw new Error(
|
||||
`Failed to find '${id}'
|
||||
in [
|
||||
${paths.join(",\n ")}
|
||||
]`
|
||||
)
|
||||
})
|
||||
};
|
||||
|
||||
var readCache$1 = {exports: {}};
|
||||
|
||||
var pify$2 = {exports: {}};
|
||||
|
||||
var processFn = function (fn, P, opts) {
|
||||
return function () {
|
||||
var that = this;
|
||||
var args = new Array(arguments.length);
|
||||
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
args[i] = arguments[i];
|
||||
}
|
||||
|
||||
return new P(function (resolve, reject) {
|
||||
args.push(function (err, result) {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else if (opts.multiArgs) {
|
||||
var results = new Array(arguments.length - 1);
|
||||
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
results[i - 1] = arguments[i];
|
||||
}
|
||||
|
||||
resolve(results);
|
||||
} else {
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
|
||||
fn.apply(that, args);
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
var pify$1 = pify$2.exports = function (obj, P, opts) {
|
||||
if (typeof P !== 'function') {
|
||||
opts = P;
|
||||
P = Promise;
|
||||
}
|
||||
|
||||
opts = opts || {};
|
||||
opts.exclude = opts.exclude || [/.+Sync$/];
|
||||
|
||||
var filter = function (key) {
|
||||
var match = function (pattern) {
|
||||
return typeof pattern === 'string' ? key === pattern : pattern.test(key);
|
||||
};
|
||||
|
||||
return opts.include ? opts.include.some(match) : !opts.exclude.some(match);
|
||||
};
|
||||
|
||||
var ret = typeof obj === 'function' ? function () {
|
||||
if (opts.excludeMain) {
|
||||
return obj.apply(this, arguments);
|
||||
}
|
||||
|
||||
return processFn(obj, P, opts).apply(this, arguments);
|
||||
} : {};
|
||||
|
||||
return Object.keys(obj).reduce(function (ret, key) {
|
||||
var x = obj[key];
|
||||
|
||||
ret[key] = typeof x === 'function' && filter(key) ? processFn(x, P, opts) : x;
|
||||
|
||||
return ret;
|
||||
}, ret);
|
||||
};
|
||||
|
||||
pify$1.all = pify$1;
|
||||
|
||||
var fs = require$$0__default;
|
||||
var path$2 = require$$0;
|
||||
var pify = pify$2.exports;
|
||||
|
||||
var stat = pify(fs.stat);
|
||||
var readFile = pify(fs.readFile);
|
||||
var resolve = path$2.resolve;
|
||||
|
||||
var cache = Object.create(null);
|
||||
|
||||
function convert(content, encoding) {
|
||||
if (Buffer.isEncoding(encoding)) {
|
||||
return content.toString(encoding);
|
||||
}
|
||||
return content;
|
||||
}
|
||||
|
||||
readCache$1.exports = function (path, encoding) {
|
||||
path = resolve(path);
|
||||
|
||||
return stat(path).then(function (stats) {
|
||||
var item = cache[path];
|
||||
|
||||
if (item && item.mtime.getTime() === stats.mtime.getTime()) {
|
||||
return convert(item.content, encoding);
|
||||
}
|
||||
|
||||
return readFile(path).then(function (data) {
|
||||
cache[path] = {
|
||||
mtime: stats.mtime,
|
||||
content: data
|
||||
};
|
||||
|
||||
return convert(data, encoding);
|
||||
});
|
||||
}).catch(function (err) {
|
||||
cache[path] = null;
|
||||
return Promise.reject(err);
|
||||
});
|
||||
};
|
||||
|
||||
readCache$1.exports.sync = function (path, encoding) {
|
||||
path = resolve(path);
|
||||
|
||||
try {
|
||||
var stats = fs.statSync(path);
|
||||
var item = cache[path];
|
||||
|
||||
if (item && item.mtime.getTime() === stats.mtime.getTime()) {
|
||||
return convert(item.content, encoding);
|
||||
}
|
||||
|
||||
var data = fs.readFileSync(path);
|
||||
|
||||
cache[path] = {
|
||||
mtime: stats.mtime,
|
||||
content: data
|
||||
};
|
||||
|
||||
return convert(data, encoding);
|
||||
} catch (err) {
|
||||
cache[path] = null;
|
||||
throw err;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
readCache$1.exports.get = function (path, encoding) {
|
||||
path = resolve(path);
|
||||
if (cache[path]) {
|
||||
return convert(cache[path].content, encoding);
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
readCache$1.exports.clear = function () {
|
||||
cache = Object.create(null);
|
||||
};
|
||||
|
||||
const readCache = readCache$1.exports;
|
||||
|
||||
var loadContent$1 = filename => readCache(filename, "utf-8");
|
||||
|
||||
// builtin tooling
|
||||
const path$1 = require$$0;
|
||||
|
||||
// placeholder tooling
|
||||
let sugarss;
|
||||
|
||||
var processContent$1 = function processContent(
|
||||
result,
|
||||
content,
|
||||
filename,
|
||||
options,
|
||||
postcss
|
||||
) {
|
||||
const { plugins } = options;
|
||||
const ext = path$1.extname(filename);
|
||||
|
||||
const parserList = [];
|
||||
|
||||
// SugarSS support:
|
||||
if (ext === ".sss") {
|
||||
if (!sugarss) {
|
||||
try {
|
||||
sugarss = __require('sugarss');
|
||||
} catch {} // Ignore
|
||||
}
|
||||
if (sugarss)
|
||||
return runPostcss(postcss, content, filename, plugins, [sugarss])
|
||||
}
|
||||
|
||||
// Syntax support:
|
||||
if (result.opts.syntax && result.opts.syntax.parse) {
|
||||
parserList.push(result.opts.syntax.parse);
|
||||
}
|
||||
|
||||
// Parser support:
|
||||
if (result.opts.parser) parserList.push(result.opts.parser);
|
||||
// Try the default as a last resort:
|
||||
parserList.push(null);
|
||||
|
||||
return runPostcss(postcss, content, filename, plugins, parserList)
|
||||
};
|
||||
|
||||
function runPostcss(postcss, content, filename, plugins, parsers, index) {
|
||||
if (!index) index = 0;
|
||||
return postcss(plugins)
|
||||
.process(content, {
|
||||
from: filename,
|
||||
parser: parsers[index],
|
||||
})
|
||||
.catch(err => {
|
||||
// If there's an error, try the next parser
|
||||
index++;
|
||||
// If there are no parsers left, throw it
|
||||
if (index === parsers.length) throw err
|
||||
return runPostcss(postcss, content, filename, plugins, parsers, index)
|
||||
})
|
||||
}
|
||||
|
||||
// external tooling
|
||||
const valueParser = lib;
|
||||
|
||||
// extended tooling
|
||||
const { stringify } = valueParser;
|
||||
|
||||
function split(params, start) {
|
||||
const list = [];
|
||||
const last = params.reduce((item, node, index) => {
|
||||
if (index < start) return ""
|
||||
if (node.type === "div" && node.value === ",") {
|
||||
list.push(item);
|
||||
return ""
|
||||
}
|
||||
return item + stringify(node)
|
||||
}, "");
|
||||
list.push(last);
|
||||
return list
|
||||
}
|
||||
|
||||
var parseStatements$1 = function (result, styles) {
|
||||
const statements = [];
|
||||
let nodes = [];
|
||||
|
||||
styles.each(node => {
|
||||
let stmt;
|
||||
if (node.type === "atrule") {
|
||||
if (node.name === "import") stmt = parseImport(result, node);
|
||||
else if (node.name === "media") stmt = parseMedia(result, node);
|
||||
else if (node.name === "charset") stmt = parseCharset(result, node);
|
||||
}
|
||||
|
||||
if (stmt) {
|
||||
if (nodes.length) {
|
||||
statements.push({
|
||||
type: "nodes",
|
||||
nodes,
|
||||
media: [],
|
||||
layer: [],
|
||||
});
|
||||
nodes = [];
|
||||
}
|
||||
statements.push(stmt);
|
||||
} else nodes.push(node);
|
||||
});
|
||||
|
||||
if (nodes.length) {
|
||||
statements.push({
|
||||
type: "nodes",
|
||||
nodes,
|
||||
media: [],
|
||||
layer: [],
|
||||
});
|
||||
}
|
||||
|
||||
return statements
|
||||
};
|
||||
|
||||
function parseMedia(result, atRule) {
|
||||
const params = valueParser(atRule.params).nodes;
|
||||
return {
|
||||
type: "media",
|
||||
node: atRule,
|
||||
media: split(params, 0),
|
||||
layer: [],
|
||||
}
|
||||
}
|
||||
|
||||
function parseCharset(result, atRule) {
|
||||
if (atRule.prev()) {
|
||||
return result.warn("@charset must precede all other statements", {
|
||||
node: atRule,
|
||||
})
|
||||
}
|
||||
return {
|
||||
type: "charset",
|
||||
node: atRule,
|
||||
media: [],
|
||||
layer: [],
|
||||
}
|
||||
}
|
||||
|
||||
function parseImport(result, atRule) {
|
||||
let prev = atRule.prev();
|
||||
if (prev) {
|
||||
do {
|
||||
if (
|
||||
prev.type !== "comment" &&
|
||||
(prev.type !== "atrule" ||
|
||||
(prev.name !== "import" &&
|
||||
prev.name !== "charset" &&
|
||||
!(prev.name === "layer" && !prev.nodes)))
|
||||
) {
|
||||
return result.warn(
|
||||
"@import must precede all other statements (besides @charset or empty @layer)",
|
||||
{ node: atRule }
|
||||
)
|
||||
}
|
||||
prev = prev.prev();
|
||||
} while (prev)
|
||||
}
|
||||
|
||||
if (atRule.nodes) {
|
||||
return result.warn(
|
||||
"It looks like you didn't end your @import statement correctly. " +
|
||||
"Child nodes are attached to it.",
|
||||
{ node: atRule }
|
||||
)
|
||||
}
|
||||
|
||||
const params = valueParser(atRule.params).nodes;
|
||||
const stmt = {
|
||||
type: "import",
|
||||
node: atRule,
|
||||
media: [],
|
||||
layer: [],
|
||||
};
|
||||
|
||||
// prettier-ignore
|
||||
if (
|
||||
!params.length ||
|
||||
(
|
||||
params[0].type !== "string" ||
|
||||
!params[0].value
|
||||
) &&
|
||||
(
|
||||
params[0].type !== "function" ||
|
||||
params[0].value !== "url" ||
|
||||
!params[0].nodes.length ||
|
||||
!params[0].nodes[0].value
|
||||
)
|
||||
) {
|
||||
return result.warn(`Unable to find uri in '${ atRule.toString() }'`, {
|
||||
node: atRule,
|
||||
})
|
||||
}
|
||||
|
||||
if (params[0].type === "string") stmt.uri = params[0].value;
|
||||
else stmt.uri = params[0].nodes[0].value;
|
||||
stmt.fullUri = stringify(params[0]);
|
||||
|
||||
let remainder = params;
|
||||
if (remainder.length > 2) {
|
||||
if (
|
||||
(remainder[2].type === "word" || remainder[2].type === "function") &&
|
||||
remainder[2].value === "layer"
|
||||
) {
|
||||
if (remainder[1].type !== "space") {
|
||||
return result.warn("Invalid import layer statement", { node: atRule })
|
||||
}
|
||||
|
||||
if (remainder[2].nodes) {
|
||||
stmt.layer = [stringify(remainder[2].nodes)];
|
||||
} else {
|
||||
stmt.layer = [""];
|
||||
}
|
||||
remainder = remainder.slice(2);
|
||||
}
|
||||
}
|
||||
|
||||
if (remainder.length > 2) {
|
||||
if (remainder[1].type !== "space") {
|
||||
return result.warn("Invalid import media statement", { node: atRule })
|
||||
}
|
||||
|
||||
stmt.media = split(remainder, 2);
|
||||
}
|
||||
|
||||
return stmt
|
||||
}
|
||||
|
||||
// builtin tooling
|
||||
const path = require$$0;
|
||||
|
||||
// internal tooling
|
||||
const joinMedia = joinMedia$1;
|
||||
const joinLayer = joinLayer$1;
|
||||
const resolveId = resolveId$1;
|
||||
const loadContent = loadContent$1;
|
||||
const processContent = processContent$1;
|
||||
const parseStatements = parseStatements$1;
|
||||
|
||||
function AtImport(options) {
|
||||
options = {
|
||||
root: process.cwd(),
|
||||
path: [],
|
||||
skipDuplicates: true,
|
||||
resolve: resolveId,
|
||||
load: loadContent,
|
||||
plugins: [],
|
||||
addModulesDirectories: [],
|
||||
...options,
|
||||
};
|
||||
|
||||
options.root = path.resolve(options.root);
|
||||
|
||||
// convert string to an array of a single element
|
||||
if (typeof options.path === "string") options.path = [options.path];
|
||||
|
||||
if (!Array.isArray(options.path)) options.path = [];
|
||||
|
||||
options.path = options.path.map(p => path.resolve(options.root, p));
|
||||
|
||||
return {
|
||||
postcssPlugin: "postcss-import",
|
||||
Once(styles, { result, atRule, postcss }) {
|
||||
const state = {
|
||||
importedFiles: {},
|
||||
hashFiles: {},
|
||||
};
|
||||
|
||||
if (styles.source && styles.source.input && styles.source.input.file) {
|
||||
state.importedFiles[styles.source.input.file] = {};
|
||||
}
|
||||
|
||||
if (options.plugins && !Array.isArray(options.plugins)) {
|
||||
throw new Error("plugins option must be an array")
|
||||
}
|
||||
|
||||
return parseStyles(result, styles, options, state, [], []).then(
|
||||
bundle => {
|
||||
applyRaws(bundle);
|
||||
applyMedia(bundle);
|
||||
applyStyles(bundle, styles);
|
||||
}
|
||||
)
|
||||
|
||||
function applyRaws(bundle) {
|
||||
bundle.forEach((stmt, index) => {
|
||||
if (index === 0) return
|
||||
|
||||
if (stmt.parent) {
|
||||
const { before } = stmt.parent.node.raws;
|
||||
if (stmt.type === "nodes") stmt.nodes[0].raws.before = before;
|
||||
else stmt.node.raws.before = before;
|
||||
} else if (stmt.type === "nodes") {
|
||||
stmt.nodes[0].raws.before = stmt.nodes[0].raws.before || "\n";
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function applyMedia(bundle) {
|
||||
bundle.forEach(stmt => {
|
||||
if (
|
||||
(!stmt.media.length && !stmt.layer.length) ||
|
||||
stmt.type === "charset"
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
if (stmt.type === "import") {
|
||||
stmt.node.params = `${stmt.fullUri} ${stmt.media.join(", ")}`;
|
||||
} else if (stmt.type === "media") {
|
||||
stmt.node.params = stmt.media.join(", ");
|
||||
} else {
|
||||
const { nodes } = stmt;
|
||||
const { parent } = nodes[0];
|
||||
|
||||
let outerAtRule;
|
||||
let innerAtRule;
|
||||
if (stmt.media.length && stmt.layer.length) {
|
||||
const mediaNode = atRule({
|
||||
name: "media",
|
||||
params: stmt.media.join(", "),
|
||||
source: parent.source,
|
||||
});
|
||||
|
||||
const layerNode = atRule({
|
||||
name: "layer",
|
||||
params: stmt.layer.filter(layer => layer !== "").join("."),
|
||||
source: parent.source,
|
||||
});
|
||||
|
||||
mediaNode.append(layerNode);
|
||||
innerAtRule = layerNode;
|
||||
outerAtRule = mediaNode;
|
||||
} else if (stmt.media.length) {
|
||||
const mediaNode = atRule({
|
||||
name: "media",
|
||||
params: stmt.media.join(", "),
|
||||
source: parent.source,
|
||||
});
|
||||
|
||||
innerAtRule = mediaNode;
|
||||
outerAtRule = mediaNode;
|
||||
} else if (stmt.layer.length) {
|
||||
const layerNode = atRule({
|
||||
name: "layer",
|
||||
params: stmt.layer.filter(layer => layer !== "").join("."),
|
||||
source: parent.source,
|
||||
});
|
||||
|
||||
innerAtRule = layerNode;
|
||||
outerAtRule = layerNode;
|
||||
}
|
||||
|
||||
parent.insertBefore(nodes[0], outerAtRule);
|
||||
|
||||
// remove nodes
|
||||
nodes.forEach(node => {
|
||||
node.parent = undefined;
|
||||
});
|
||||
|
||||
// better output
|
||||
nodes[0].raws.before = nodes[0].raws.before || "\n";
|
||||
|
||||
// wrap new rules with media query and/or layer at rule
|
||||
innerAtRule.append(nodes);
|
||||
|
||||
stmt.type = "media";
|
||||
stmt.node = outerAtRule;
|
||||
delete stmt.nodes;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function applyStyles(bundle, styles) {
|
||||
styles.nodes = [];
|
||||
|
||||
// Strip additional statements.
|
||||
bundle.forEach(stmt => {
|
||||
if (["charset", "import", "media"].includes(stmt.type)) {
|
||||
stmt.node.parent = undefined;
|
||||
styles.append(stmt.node);
|
||||
} else if (stmt.type === "nodes") {
|
||||
stmt.nodes.forEach(node => {
|
||||
node.parent = undefined;
|
||||
styles.append(node);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function parseStyles(result, styles, options, state, media, layer) {
|
||||
const statements = parseStatements(result, styles);
|
||||
|
||||
return Promise.resolve(statements)
|
||||
.then(stmts => {
|
||||
// process each statement in series
|
||||
return stmts.reduce((promise, stmt) => {
|
||||
return promise.then(() => {
|
||||
stmt.media = joinMedia(media, stmt.media || []);
|
||||
stmt.layer = joinLayer(layer, stmt.layer || []);
|
||||
|
||||
// skip protocol base uri (protocol://url) or protocol-relative
|
||||
if (
|
||||
stmt.type !== "import" ||
|
||||
/^(?:[a-z]+:)?\/\//i.test(stmt.uri)
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
if (options.filter && !options.filter(stmt.uri)) {
|
||||
// rejected by filter
|
||||
return
|
||||
}
|
||||
|
||||
return resolveImportId(result, stmt, options, state)
|
||||
})
|
||||
}, Promise.resolve())
|
||||
})
|
||||
.then(() => {
|
||||
let charset;
|
||||
const imports = [];
|
||||
const bundle = [];
|
||||
|
||||
function handleCharset(stmt) {
|
||||
if (!charset) charset = stmt;
|
||||
// charsets aren't case-sensitive, so convert to lower case to compare
|
||||
else if (
|
||||
stmt.node.params.toLowerCase() !==
|
||||
charset.node.params.toLowerCase()
|
||||
) {
|
||||
throw new Error(
|
||||
`Incompatable @charset statements:
|
||||
${stmt.node.params} specified in ${stmt.node.source.input.file}
|
||||
${charset.node.params} specified in ${charset.node.source.input.file}`
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// squash statements and their children
|
||||
statements.forEach(stmt => {
|
||||
if (stmt.type === "charset") handleCharset(stmt);
|
||||
else if (stmt.type === "import") {
|
||||
if (stmt.children) {
|
||||
stmt.children.forEach((child, index) => {
|
||||
if (child.type === "import") imports.push(child);
|
||||
else if (child.type === "charset") handleCharset(child);
|
||||
else bundle.push(child);
|
||||
// For better output
|
||||
if (index === 0) child.parent = stmt;
|
||||
});
|
||||
} else imports.push(stmt);
|
||||
} else if (stmt.type === "media" || stmt.type === "nodes") {
|
||||
bundle.push(stmt);
|
||||
}
|
||||
});
|
||||
|
||||
return charset
|
||||
? [charset, ...imports.concat(bundle)]
|
||||
: imports.concat(bundle)
|
||||
})
|
||||
}
|
||||
|
||||
function resolveImportId(result, stmt, options, state) {
|
||||
const atRule = stmt.node;
|
||||
let sourceFile;
|
||||
if (atRule.source && atRule.source.input && atRule.source.input.file) {
|
||||
sourceFile = atRule.source.input.file;
|
||||
}
|
||||
const base = sourceFile
|
||||
? path.dirname(atRule.source.input.file)
|
||||
: options.root;
|
||||
|
||||
return Promise.resolve(options.resolve(stmt.uri, base, options))
|
||||
.then(paths => {
|
||||
if (!Array.isArray(paths)) paths = [paths];
|
||||
// Ensure that each path is absolute:
|
||||
return Promise.all(
|
||||
paths.map(file => {
|
||||
return !path.isAbsolute(file)
|
||||
? resolveId(file, base, options)
|
||||
: file
|
||||
})
|
||||
)
|
||||
})
|
||||
.then(resolved => {
|
||||
// Add dependency messages:
|
||||
resolved.forEach(file => {
|
||||
result.messages.push({
|
||||
type: "dependency",
|
||||
plugin: "postcss-import",
|
||||
file,
|
||||
parent: sourceFile,
|
||||
});
|
||||
});
|
||||
|
||||
return Promise.all(
|
||||
resolved.map(file => {
|
||||
return loadImportContent(result, stmt, file, options, state)
|
||||
})
|
||||
)
|
||||
})
|
||||
.then(result => {
|
||||
// Merge loaded statements
|
||||
stmt.children = result.reduce((result, statements) => {
|
||||
return statements ? result.concat(statements) : result
|
||||
}, []);
|
||||
})
|
||||
}
|
||||
|
||||
function loadImportContent(result, stmt, filename, options, state) {
|
||||
const atRule = stmt.node;
|
||||
const { media, layer } = stmt;
|
||||
if (options.skipDuplicates) {
|
||||
// skip files already imported at the same scope
|
||||
if (
|
||||
state.importedFiles[filename] &&
|
||||
state.importedFiles[filename][media]
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
// save imported files to skip them next time
|
||||
if (!state.importedFiles[filename]) state.importedFiles[filename] = {};
|
||||
state.importedFiles[filename][media] = true;
|
||||
}
|
||||
|
||||
return Promise.resolve(options.load(filename, options)).then(
|
||||
content => {
|
||||
if (content.trim() === "") {
|
||||
result.warn(`${filename} is empty`, { node: atRule });
|
||||
return
|
||||
}
|
||||
|
||||
// skip previous imported files not containing @import rules
|
||||
if (state.hashFiles[content] && state.hashFiles[content][media])
|
||||
return
|
||||
|
||||
return processContent(
|
||||
result,
|
||||
content,
|
||||
filename,
|
||||
options,
|
||||
postcss
|
||||
).then(importedResult => {
|
||||
const styles = importedResult.root;
|
||||
result.messages = result.messages.concat(importedResult.messages);
|
||||
|
||||
if (options.skipDuplicates) {
|
||||
const hasImport = styles.some(child => {
|
||||
return child.type === "atrule" && child.name === "import"
|
||||
});
|
||||
if (!hasImport) {
|
||||
// save hash files to skip them next time
|
||||
if (!state.hashFiles[content]) state.hashFiles[content] = {};
|
||||
state.hashFiles[content][media] = true;
|
||||
}
|
||||
}
|
||||
|
||||
// recursion: import @import from imported file
|
||||
return parseStyles(result, styles, options, state, media, layer)
|
||||
})
|
||||
}
|
||||
)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
AtImport.postcss = true;
|
||||
|
||||
var postcssImport = AtImport;
|
||||
|
||||
var index = /*#__PURE__*/_mergeNamespaces({
|
||||
__proto__: null,
|
||||
'default': postcssImport
|
||||
}, [postcssImport]);
|
||||
|
||||
export { index as i };
|
8816
webui/node_modules/vite/dist/node/chunks/dep-9d3f225a.js
generated
vendored
Normal file
8816
webui/node_modules/vite/dist/node/chunks/dep-9d3f225a.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
816
webui/node_modules/vite/dist/node/cli.js
generated
vendored
Normal file
816
webui/node_modules/vite/dist/node/cli.js
generated
vendored
Normal file
|
@ -0,0 +1,816 @@
|
|||
import { performance } from 'node:perf_hooks';
|
||||
import { EventEmitter } from 'events';
|
||||
import { y as picocolors, u as createLogger, e as resolveConfig } from './chunks/dep-0fc8e132.js';
|
||||
import { VERSION } from './constants.js';
|
||||
import 'node:fs';
|
||||
import 'node:path';
|
||||
import 'node:url';
|
||||
import 'node:module';
|
||||
import 'tty';
|
||||
import 'esbuild';
|
||||
import 'path';
|
||||
import 'fs';
|
||||
import 'assert';
|
||||
import 'util';
|
||||
import 'net';
|
||||
import 'url';
|
||||
import 'http';
|
||||
import 'stream';
|
||||
import 'os';
|
||||
import 'child_process';
|
||||
import 'node:os';
|
||||
import 'node:crypto';
|
||||
import 'node:util';
|
||||
import 'node:dns';
|
||||
import 'resolve';
|
||||
import 'crypto';
|
||||
import 'buffer';
|
||||
import 'module';
|
||||
import 'zlib';
|
||||
import 'https';
|
||||
import 'tls';
|
||||
import 'node:http';
|
||||
import 'node:https';
|
||||
import 'worker_threads';
|
||||
import 'querystring';
|
||||
import 'node:readline';
|
||||
import 'node:child_process';
|
||||
import 'node:zlib';
|
||||
|
||||
function toArr(any) {
|
||||
return any == null ? [] : Array.isArray(any) ? any : [any];
|
||||
}
|
||||
|
||||
function toVal(out, key, val, opts) {
|
||||
var x, old=out[key], nxt=(
|
||||
!!~opts.string.indexOf(key) ? (val == null || val === true ? '' : String(val))
|
||||
: typeof val === 'boolean' ? val
|
||||
: !!~opts.boolean.indexOf(key) ? (val === 'false' ? false : val === 'true' || (out._.push((x = +val,x * 0 === 0) ? x : val),!!val))
|
||||
: (x = +val,x * 0 === 0) ? x : val
|
||||
);
|
||||
out[key] = old == null ? nxt : (Array.isArray(old) ? old.concat(nxt) : [old, nxt]);
|
||||
}
|
||||
|
||||
function mri2 (args, opts) {
|
||||
args = args || [];
|
||||
opts = opts || {};
|
||||
|
||||
var k, arr, arg, name, val, out={ _:[] };
|
||||
var i=0, j=0, idx=0, len=args.length;
|
||||
|
||||
const alibi = opts.alias !== void 0;
|
||||
const strict = opts.unknown !== void 0;
|
||||
const defaults = opts.default !== void 0;
|
||||
|
||||
opts.alias = opts.alias || {};
|
||||
opts.string = toArr(opts.string);
|
||||
opts.boolean = toArr(opts.boolean);
|
||||
|
||||
if (alibi) {
|
||||
for (k in opts.alias) {
|
||||
arr = opts.alias[k] = toArr(opts.alias[k]);
|
||||
for (i=0; i < arr.length; i++) {
|
||||
(opts.alias[arr[i]] = arr.concat(k)).splice(i, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i=opts.boolean.length; i-- > 0;) {
|
||||
arr = opts.alias[opts.boolean[i]] || [];
|
||||
for (j=arr.length; j-- > 0;) opts.boolean.push(arr[j]);
|
||||
}
|
||||
|
||||
for (i=opts.string.length; i-- > 0;) {
|
||||
arr = opts.alias[opts.string[i]] || [];
|
||||
for (j=arr.length; j-- > 0;) opts.string.push(arr[j]);
|
||||
}
|
||||
|
||||
if (defaults) {
|
||||
for (k in opts.default) {
|
||||
name = typeof opts.default[k];
|
||||
arr = opts.alias[k] = opts.alias[k] || [];
|
||||
if (opts[name] !== void 0) {
|
||||
opts[name].push(k);
|
||||
for (i=0; i < arr.length; i++) {
|
||||
opts[name].push(arr[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const keys = strict ? Object.keys(opts.alias) : [];
|
||||
|
||||
for (i=0; i < len; i++) {
|
||||
arg = args[i];
|
||||
|
||||
if (arg === '--') {
|
||||
out._ = out._.concat(args.slice(++i));
|
||||
break;
|
||||
}
|
||||
|
||||
for (j=0; j < arg.length; j++) {
|
||||
if (arg.charCodeAt(j) !== 45) break; // "-"
|
||||
}
|
||||
|
||||
if (j === 0) {
|
||||
out._.push(arg);
|
||||
} else if (arg.substring(j, j + 3) === 'no-') {
|
||||
name = arg.substring(j + 3);
|
||||
if (strict && !~keys.indexOf(name)) {
|
||||
return opts.unknown(arg);
|
||||
}
|
||||
out[name] = false;
|
||||
} else {
|
||||
for (idx=j+1; idx < arg.length; idx++) {
|
||||
if (arg.charCodeAt(idx) === 61) break; // "="
|
||||
}
|
||||
|
||||
name = arg.substring(j, idx);
|
||||
val = arg.substring(++idx) || (i+1 === len || (''+args[i+1]).charCodeAt(0) === 45 || args[++i]);
|
||||
arr = (j === 2 ? [name] : name);
|
||||
|
||||
for (idx=0; idx < arr.length; idx++) {
|
||||
name = arr[idx];
|
||||
if (strict && !~keys.indexOf(name)) return opts.unknown('-'.repeat(j) + name);
|
||||
toVal(out, name, (idx + 1 < arr.length) || val, opts);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (defaults) {
|
||||
for (k in opts.default) {
|
||||
if (out[k] === void 0) {
|
||||
out[k] = opts.default[k];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (alibi) {
|
||||
for (k in out) {
|
||||
arr = opts.alias[k] || [];
|
||||
while (arr.length > 0) {
|
||||
out[arr.shift()] = out[k];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
const removeBrackets = (v) => v.replace(/[<[].+/, "").trim();
|
||||
const findAllBrackets = (v) => {
|
||||
const ANGLED_BRACKET_RE_GLOBAL = /<([^>]+)>/g;
|
||||
const SQUARE_BRACKET_RE_GLOBAL = /\[([^\]]+)\]/g;
|
||||
const res = [];
|
||||
const parse = (match) => {
|
||||
let variadic = false;
|
||||
let value = match[1];
|
||||
if (value.startsWith("...")) {
|
||||
value = value.slice(3);
|
||||
variadic = true;
|
||||
}
|
||||
return {
|
||||
required: match[0].startsWith("<"),
|
||||
value,
|
||||
variadic
|
||||
};
|
||||
};
|
||||
let angledMatch;
|
||||
while (angledMatch = ANGLED_BRACKET_RE_GLOBAL.exec(v)) {
|
||||
res.push(parse(angledMatch));
|
||||
}
|
||||
let squareMatch;
|
||||
while (squareMatch = SQUARE_BRACKET_RE_GLOBAL.exec(v)) {
|
||||
res.push(parse(squareMatch));
|
||||
}
|
||||
return res;
|
||||
};
|
||||
const getMriOptions = (options) => {
|
||||
const result = {alias: {}, boolean: []};
|
||||
for (const [index, option] of options.entries()) {
|
||||
if (option.names.length > 1) {
|
||||
result.alias[option.names[0]] = option.names.slice(1);
|
||||
}
|
||||
if (option.isBoolean) {
|
||||
if (option.negated) {
|
||||
const hasStringTypeOption = options.some((o, i) => {
|
||||
return i !== index && o.names.some((name) => option.names.includes(name)) && typeof o.required === "boolean";
|
||||
});
|
||||
if (!hasStringTypeOption) {
|
||||
result.boolean.push(option.names[0]);
|
||||
}
|
||||
} else {
|
||||
result.boolean.push(option.names[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
const findLongest = (arr) => {
|
||||
return arr.sort((a, b) => {
|
||||
return a.length > b.length ? -1 : 1;
|
||||
})[0];
|
||||
};
|
||||
const padRight = (str, length) => {
|
||||
return str.length >= length ? str : `${str}${" ".repeat(length - str.length)}`;
|
||||
};
|
||||
const camelcase = (input) => {
|
||||
return input.replace(/([a-z])-([a-z])/g, (_, p1, p2) => {
|
||||
return p1 + p2.toUpperCase();
|
||||
});
|
||||
};
|
||||
const setDotProp = (obj, keys, val) => {
|
||||
let i = 0;
|
||||
let length = keys.length;
|
||||
let t = obj;
|
||||
let x;
|
||||
for (; i < length; ++i) {
|
||||
x = t[keys[i]];
|
||||
t = t[keys[i]] = i === length - 1 ? val : x != null ? x : !!~keys[i + 1].indexOf(".") || !(+keys[i + 1] > -1) ? {} : [];
|
||||
}
|
||||
};
|
||||
const setByType = (obj, transforms) => {
|
||||
for (const key of Object.keys(transforms)) {
|
||||
const transform = transforms[key];
|
||||
if (transform.shouldTransform) {
|
||||
obj[key] = Array.prototype.concat.call([], obj[key]);
|
||||
if (typeof transform.transformFunction === "function") {
|
||||
obj[key] = obj[key].map(transform.transformFunction);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
const getFileName = (input) => {
|
||||
const m = /([^\\\/]+)$/.exec(input);
|
||||
return m ? m[1] : "";
|
||||
};
|
||||
const camelcaseOptionName = (name) => {
|
||||
return name.split(".").map((v, i) => {
|
||||
return i === 0 ? camelcase(v) : v;
|
||||
}).join(".");
|
||||
};
|
||||
class CACError extends Error {
|
||||
constructor(message) {
|
||||
super(message);
|
||||
this.name = this.constructor.name;
|
||||
if (typeof Error.captureStackTrace === "function") {
|
||||
Error.captureStackTrace(this, this.constructor);
|
||||
} else {
|
||||
this.stack = new Error(message).stack;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Option {
|
||||
constructor(rawName, description, config) {
|
||||
this.rawName = rawName;
|
||||
this.description = description;
|
||||
this.config = Object.assign({}, config);
|
||||
rawName = rawName.replace(/\.\*/g, "");
|
||||
this.negated = false;
|
||||
this.names = removeBrackets(rawName).split(",").map((v) => {
|
||||
let name = v.trim().replace(/^-{1,2}/, "");
|
||||
if (name.startsWith("no-")) {
|
||||
this.negated = true;
|
||||
name = name.replace(/^no-/, "");
|
||||
}
|
||||
return camelcaseOptionName(name);
|
||||
}).sort((a, b) => a.length > b.length ? 1 : -1);
|
||||
this.name = this.names[this.names.length - 1];
|
||||
if (this.negated && this.config.default == null) {
|
||||
this.config.default = true;
|
||||
}
|
||||
if (rawName.includes("<")) {
|
||||
this.required = true;
|
||||
} else if (rawName.includes("[")) {
|
||||
this.required = false;
|
||||
} else {
|
||||
this.isBoolean = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const processArgs = process.argv;
|
||||
const platformInfo = `${process.platform}-${process.arch} node-${process.version}`;
|
||||
|
||||
class Command {
|
||||
constructor(rawName, description, config = {}, cli) {
|
||||
this.rawName = rawName;
|
||||
this.description = description;
|
||||
this.config = config;
|
||||
this.cli = cli;
|
||||
this.options = [];
|
||||
this.aliasNames = [];
|
||||
this.name = removeBrackets(rawName);
|
||||
this.args = findAllBrackets(rawName);
|
||||
this.examples = [];
|
||||
}
|
||||
usage(text) {
|
||||
this.usageText = text;
|
||||
return this;
|
||||
}
|
||||
allowUnknownOptions() {
|
||||
this.config.allowUnknownOptions = true;
|
||||
return this;
|
||||
}
|
||||
ignoreOptionDefaultValue() {
|
||||
this.config.ignoreOptionDefaultValue = true;
|
||||
return this;
|
||||
}
|
||||
version(version, customFlags = "-v, --version") {
|
||||
this.versionNumber = version;
|
||||
this.option(customFlags, "Display version number");
|
||||
return this;
|
||||
}
|
||||
example(example) {
|
||||
this.examples.push(example);
|
||||
return this;
|
||||
}
|
||||
option(rawName, description, config) {
|
||||
const option = new Option(rawName, description, config);
|
||||
this.options.push(option);
|
||||
return this;
|
||||
}
|
||||
alias(name) {
|
||||
this.aliasNames.push(name);
|
||||
return this;
|
||||
}
|
||||
action(callback) {
|
||||
this.commandAction = callback;
|
||||
return this;
|
||||
}
|
||||
isMatched(name) {
|
||||
return this.name === name || this.aliasNames.includes(name);
|
||||
}
|
||||
get isDefaultCommand() {
|
||||
return this.name === "" || this.aliasNames.includes("!");
|
||||
}
|
||||
get isGlobalCommand() {
|
||||
return this instanceof GlobalCommand;
|
||||
}
|
||||
hasOption(name) {
|
||||
name = name.split(".")[0];
|
||||
return this.options.find((option) => {
|
||||
return option.names.includes(name);
|
||||
});
|
||||
}
|
||||
outputHelp() {
|
||||
const {name, commands} = this.cli;
|
||||
const {
|
||||
versionNumber,
|
||||
options: globalOptions,
|
||||
helpCallback
|
||||
} = this.cli.globalCommand;
|
||||
let sections = [
|
||||
{
|
||||
body: `${name}${versionNumber ? `/${versionNumber}` : ""}`
|
||||
}
|
||||
];
|
||||
sections.push({
|
||||
title: "Usage",
|
||||
body: ` $ ${name} ${this.usageText || this.rawName}`
|
||||
});
|
||||
const showCommands = (this.isGlobalCommand || this.isDefaultCommand) && commands.length > 0;
|
||||
if (showCommands) {
|
||||
const longestCommandName = findLongest(commands.map((command) => command.rawName));
|
||||
sections.push({
|
||||
title: "Commands",
|
||||
body: commands.map((command) => {
|
||||
return ` ${padRight(command.rawName, longestCommandName.length)} ${command.description}`;
|
||||
}).join("\n")
|
||||
});
|
||||
sections.push({
|
||||
title: `For more info, run any command with the \`--help\` flag`,
|
||||
body: commands.map((command) => ` $ ${name}${command.name === "" ? "" : ` ${command.name}`} --help`).join("\n")
|
||||
});
|
||||
}
|
||||
let options = this.isGlobalCommand ? globalOptions : [...this.options, ...globalOptions || []];
|
||||
if (!this.isGlobalCommand && !this.isDefaultCommand) {
|
||||
options = options.filter((option) => option.name !== "version");
|
||||
}
|
||||
if (options.length > 0) {
|
||||
const longestOptionName = findLongest(options.map((option) => option.rawName));
|
||||
sections.push({
|
||||
title: "Options",
|
||||
body: options.map((option) => {
|
||||
return ` ${padRight(option.rawName, longestOptionName.length)} ${option.description} ${option.config.default === void 0 ? "" : `(default: ${option.config.default})`}`;
|
||||
}).join("\n")
|
||||
});
|
||||
}
|
||||
if (this.examples.length > 0) {
|
||||
sections.push({
|
||||
title: "Examples",
|
||||
body: this.examples.map((example) => {
|
||||
if (typeof example === "function") {
|
||||
return example(name);
|
||||
}
|
||||
return example;
|
||||
}).join("\n")
|
||||
});
|
||||
}
|
||||
if (helpCallback) {
|
||||
sections = helpCallback(sections) || sections;
|
||||
}
|
||||
console.log(sections.map((section) => {
|
||||
return section.title ? `${section.title}:
|
||||
${section.body}` : section.body;
|
||||
}).join("\n\n"));
|
||||
}
|
||||
outputVersion() {
|
||||
const {name} = this.cli;
|
||||
const {versionNumber} = this.cli.globalCommand;
|
||||
if (versionNumber) {
|
||||
console.log(`${name}/${versionNumber} ${platformInfo}`);
|
||||
}
|
||||
}
|
||||
checkRequiredArgs() {
|
||||
const minimalArgsCount = this.args.filter((arg) => arg.required).length;
|
||||
if (this.cli.args.length < minimalArgsCount) {
|
||||
throw new CACError(`missing required args for command \`${this.rawName}\``);
|
||||
}
|
||||
}
|
||||
checkUnknownOptions() {
|
||||
const {options, globalCommand} = this.cli;
|
||||
if (!this.config.allowUnknownOptions) {
|
||||
for (const name of Object.keys(options)) {
|
||||
if (name !== "--" && !this.hasOption(name) && !globalCommand.hasOption(name)) {
|
||||
throw new CACError(`Unknown option \`${name.length > 1 ? `--${name}` : `-${name}`}\``);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
checkOptionValue() {
|
||||
const {options: parsedOptions, globalCommand} = this.cli;
|
||||
const options = [...globalCommand.options, ...this.options];
|
||||
for (const option of options) {
|
||||
const value = parsedOptions[option.name.split(".")[0]];
|
||||
if (option.required) {
|
||||
const hasNegated = options.some((o) => o.negated && o.names.includes(option.name));
|
||||
if (value === true || value === false && !hasNegated) {
|
||||
throw new CACError(`option \`${option.rawName}\` value is missing`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
class GlobalCommand extends Command {
|
||||
constructor(cli) {
|
||||
super("@@global@@", "", {}, cli);
|
||||
}
|
||||
}
|
||||
|
||||
var __assign = Object.assign;
|
||||
class CAC extends EventEmitter {
|
||||
constructor(name = "") {
|
||||
super();
|
||||
this.name = name;
|
||||
this.commands = [];
|
||||
this.rawArgs = [];
|
||||
this.args = [];
|
||||
this.options = {};
|
||||
this.globalCommand = new GlobalCommand(this);
|
||||
this.globalCommand.usage("<command> [options]");
|
||||
}
|
||||
usage(text) {
|
||||
this.globalCommand.usage(text);
|
||||
return this;
|
||||
}
|
||||
command(rawName, description, config) {
|
||||
const command = new Command(rawName, description || "", config, this);
|
||||
command.globalCommand = this.globalCommand;
|
||||
this.commands.push(command);
|
||||
return command;
|
||||
}
|
||||
option(rawName, description, config) {
|
||||
this.globalCommand.option(rawName, description, config);
|
||||
return this;
|
||||
}
|
||||
help(callback) {
|
||||
this.globalCommand.option("-h, --help", "Display this message");
|
||||
this.globalCommand.helpCallback = callback;
|
||||
this.showHelpOnExit = true;
|
||||
return this;
|
||||
}
|
||||
version(version, customFlags = "-v, --version") {
|
||||
this.globalCommand.version(version, customFlags);
|
||||
this.showVersionOnExit = true;
|
||||
return this;
|
||||
}
|
||||
example(example) {
|
||||
this.globalCommand.example(example);
|
||||
return this;
|
||||
}
|
||||
outputHelp() {
|
||||
if (this.matchedCommand) {
|
||||
this.matchedCommand.outputHelp();
|
||||
} else {
|
||||
this.globalCommand.outputHelp();
|
||||
}
|
||||
}
|
||||
outputVersion() {
|
||||
this.globalCommand.outputVersion();
|
||||
}
|
||||
setParsedInfo({args, options}, matchedCommand, matchedCommandName) {
|
||||
this.args = args;
|
||||
this.options = options;
|
||||
if (matchedCommand) {
|
||||
this.matchedCommand = matchedCommand;
|
||||
}
|
||||
if (matchedCommandName) {
|
||||
this.matchedCommandName = matchedCommandName;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
unsetMatchedCommand() {
|
||||
this.matchedCommand = void 0;
|
||||
this.matchedCommandName = void 0;
|
||||
}
|
||||
parse(argv = processArgs, {
|
||||
run = true
|
||||
} = {}) {
|
||||
this.rawArgs = argv;
|
||||
if (!this.name) {
|
||||
this.name = argv[1] ? getFileName(argv[1]) : "cli";
|
||||
}
|
||||
let shouldParse = true;
|
||||
for (const command of this.commands) {
|
||||
const parsed = this.mri(argv.slice(2), command);
|
||||
const commandName = parsed.args[0];
|
||||
if (command.isMatched(commandName)) {
|
||||
shouldParse = false;
|
||||
const parsedInfo = __assign(__assign({}, parsed), {
|
||||
args: parsed.args.slice(1)
|
||||
});
|
||||
this.setParsedInfo(parsedInfo, command, commandName);
|
||||
this.emit(`command:${commandName}`, command);
|
||||
}
|
||||
}
|
||||
if (shouldParse) {
|
||||
for (const command of this.commands) {
|
||||
if (command.name === "") {
|
||||
shouldParse = false;
|
||||
const parsed = this.mri(argv.slice(2), command);
|
||||
this.setParsedInfo(parsed, command);
|
||||
this.emit(`command:!`, command);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (shouldParse) {
|
||||
const parsed = this.mri(argv.slice(2));
|
||||
this.setParsedInfo(parsed);
|
||||
}
|
||||
if (this.options.help && this.showHelpOnExit) {
|
||||
this.outputHelp();
|
||||
run = false;
|
||||
this.unsetMatchedCommand();
|
||||
}
|
||||
if (this.options.version && this.showVersionOnExit && this.matchedCommandName == null) {
|
||||
this.outputVersion();
|
||||
run = false;
|
||||
this.unsetMatchedCommand();
|
||||
}
|
||||
const parsedArgv = {args: this.args, options: this.options};
|
||||
if (run) {
|
||||
this.runMatchedCommand();
|
||||
}
|
||||
if (!this.matchedCommand && this.args[0]) {
|
||||
this.emit("command:*");
|
||||
}
|
||||
return parsedArgv;
|
||||
}
|
||||
mri(argv, command) {
|
||||
const cliOptions = [
|
||||
...this.globalCommand.options,
|
||||
...command ? command.options : []
|
||||
];
|
||||
const mriOptions = getMriOptions(cliOptions);
|
||||
let argsAfterDoubleDashes = [];
|
||||
const doubleDashesIndex = argv.indexOf("--");
|
||||
if (doubleDashesIndex > -1) {
|
||||
argsAfterDoubleDashes = argv.slice(doubleDashesIndex + 1);
|
||||
argv = argv.slice(0, doubleDashesIndex);
|
||||
}
|
||||
let parsed = mri2(argv, mriOptions);
|
||||
parsed = Object.keys(parsed).reduce((res, name) => {
|
||||
return __assign(__assign({}, res), {
|
||||
[camelcaseOptionName(name)]: parsed[name]
|
||||
});
|
||||
}, {_: []});
|
||||
const args = parsed._;
|
||||
const options = {
|
||||
"--": argsAfterDoubleDashes
|
||||
};
|
||||
const ignoreDefault = command && command.config.ignoreOptionDefaultValue ? command.config.ignoreOptionDefaultValue : this.globalCommand.config.ignoreOptionDefaultValue;
|
||||
let transforms = Object.create(null);
|
||||
for (const cliOption of cliOptions) {
|
||||
if (!ignoreDefault && cliOption.config.default !== void 0) {
|
||||
for (const name of cliOption.names) {
|
||||
options[name] = cliOption.config.default;
|
||||
}
|
||||
}
|
||||
if (Array.isArray(cliOption.config.type)) {
|
||||
if (transforms[cliOption.name] === void 0) {
|
||||
transforms[cliOption.name] = Object.create(null);
|
||||
transforms[cliOption.name]["shouldTransform"] = true;
|
||||
transforms[cliOption.name]["transformFunction"] = cliOption.config.type[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const key of Object.keys(parsed)) {
|
||||
if (key !== "_") {
|
||||
const keys = key.split(".");
|
||||
setDotProp(options, keys, parsed[key]);
|
||||
setByType(options, transforms);
|
||||
}
|
||||
}
|
||||
return {
|
||||
args,
|
||||
options
|
||||
};
|
||||
}
|
||||
runMatchedCommand() {
|
||||
const {args, options, matchedCommand: command} = this;
|
||||
if (!command || !command.commandAction)
|
||||
return;
|
||||
command.checkUnknownOptions();
|
||||
command.checkOptionValue();
|
||||
command.checkRequiredArgs();
|
||||
const actionArgs = [];
|
||||
command.args.forEach((arg, index) => {
|
||||
if (arg.variadic) {
|
||||
actionArgs.push(args.slice(index));
|
||||
} else {
|
||||
actionArgs.push(args[index]);
|
||||
}
|
||||
});
|
||||
actionArgs.push(options);
|
||||
return command.commandAction.apply(this, actionArgs);
|
||||
}
|
||||
}
|
||||
|
||||
const cac = (name = "") => new CAC(name);
|
||||
|
||||
const cli = cac('vite');
|
||||
/**
|
||||
* removing global flags before passing as command specific sub-configs
|
||||
*/
|
||||
function cleanOptions(options) {
|
||||
const ret = { ...options };
|
||||
delete ret['--'];
|
||||
delete ret.c;
|
||||
delete ret.config;
|
||||
delete ret.base;
|
||||
delete ret.l;
|
||||
delete ret.logLevel;
|
||||
delete ret.clearScreen;
|
||||
delete ret.d;
|
||||
delete ret.debug;
|
||||
delete ret.f;
|
||||
delete ret.filter;
|
||||
delete ret.m;
|
||||
delete ret.mode;
|
||||
return ret;
|
||||
}
|
||||
cli
|
||||
.option('-c, --config <file>', `[string] use specified config file`)
|
||||
.option('--base <path>', `[string] public base path (default: /)`)
|
||||
.option('-l, --logLevel <level>', `[string] info | warn | error | silent`)
|
||||
.option('--clearScreen', `[boolean] allow/disable clear screen when logging`)
|
||||
.option('-d, --debug [feat]', `[string | boolean] show debug logs`)
|
||||
.option('-f, --filter <filter>', `[string] filter debug logs`)
|
||||
.option('-m, --mode <mode>', `[string] set env mode`);
|
||||
// dev
|
||||
cli
|
||||
.command('[root]', 'start dev server') // default command
|
||||
.alias('serve') // the command is called 'serve' in Vite's API
|
||||
.alias('dev') // alias to align with the script name
|
||||
.option('--host [host]', `[string] specify hostname`)
|
||||
.option('--port <port>', `[number] specify port`)
|
||||
.option('--https', `[boolean] use TLS + HTTP/2`)
|
||||
.option('--open [path]', `[boolean | string] open browser on startup`)
|
||||
.option('--cors', `[boolean] enable CORS`)
|
||||
.option('--strictPort', `[boolean] exit if specified port is already in use`)
|
||||
.option('--force', `[boolean] force the optimizer to ignore the cache and re-bundle`)
|
||||
.action(async (root, options) => {
|
||||
// output structure is preserved even after bundling so require()
|
||||
// is ok here
|
||||
const { createServer } = await import('./chunks/dep-0fc8e132.js').then(function (n) { return n.E; });
|
||||
try {
|
||||
const server = await createServer({
|
||||
root,
|
||||
base: options.base,
|
||||
mode: options.mode,
|
||||
configFile: options.config,
|
||||
logLevel: options.logLevel,
|
||||
clearScreen: options.clearScreen,
|
||||
optimizeDeps: { force: options.force },
|
||||
server: cleanOptions(options)
|
||||
});
|
||||
if (!server.httpServer) {
|
||||
throw new Error('HTTP server not available');
|
||||
}
|
||||
await server.listen();
|
||||
const info = server.config.logger.info;
|
||||
// @ts-ignore
|
||||
const viteStartTime = global.__vite_start_time ?? false;
|
||||
const startupDurationString = viteStartTime
|
||||
? picocolors.exports.dim(`ready in ${picocolors.exports.white(picocolors.exports.bold(Math.ceil(performance.now() - viteStartTime)))} ms`)
|
||||
: '';
|
||||
info(`\n ${picocolors.exports.green(`${picocolors.exports.bold('VITE')} v${VERSION}`)} ${startupDurationString}\n`, { clear: !server.config.logger.hasWarned });
|
||||
server.printUrls();
|
||||
}
|
||||
catch (e) {
|
||||
createLogger(options.logLevel).error(picocolors.exports.red(`error when starting dev server:\n${e.stack}`), { error: e });
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
// build
|
||||
cli
|
||||
.command('build [root]', 'build for production')
|
||||
.option('--target <target>', `[string] transpile target (default: 'modules')`)
|
||||
.option('--outDir <dir>', `[string] output directory (default: dist)`)
|
||||
.option('--assetsDir <dir>', `[string] directory under outDir to place assets in (default: assets)`)
|
||||
.option('--assetsInlineLimit <number>', `[number] static asset base64 inline threshold in bytes (default: 4096)`)
|
||||
.option('--ssr [entry]', `[string] build specified entry for server-side rendering`)
|
||||
.option('--sourcemap', `[boolean] output source maps for build (default: false)`)
|
||||
.option('--minify [minifier]', `[boolean | "terser" | "esbuild"] enable/disable minification, ` +
|
||||
`or specify minifier to use (default: esbuild)`)
|
||||
.option('--manifest [name]', `[boolean | string] emit build manifest json`)
|
||||
.option('--ssrManifest [name]', `[boolean | string] emit ssr manifest json`)
|
||||
.option('--force', `[boolean] force the optimizer to ignore the cache and re-bundle (experimental)`)
|
||||
.option('--emptyOutDir', `[boolean] force empty outDir when it's outside of root`)
|
||||
.option('-w, --watch', `[boolean] rebuilds when modules have changed on disk`)
|
||||
.action(async (root, options) => {
|
||||
const { build } = await import('./chunks/dep-0fc8e132.js').then(function (n) { return n.D; });
|
||||
const buildOptions = cleanOptions(options);
|
||||
try {
|
||||
await build({
|
||||
root,
|
||||
base: options.base,
|
||||
mode: options.mode,
|
||||
configFile: options.config,
|
||||
logLevel: options.logLevel,
|
||||
clearScreen: options.clearScreen,
|
||||
optimizeDeps: { force: options.force },
|
||||
build: buildOptions
|
||||
});
|
||||
}
|
||||
catch (e) {
|
||||
createLogger(options.logLevel).error(picocolors.exports.red(`error during build:\n${e.stack}`), { error: e });
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
// optimize
|
||||
cli
|
||||
.command('optimize [root]', 'pre-bundle dependencies')
|
||||
.option('--force', `[boolean] force the optimizer to ignore the cache and re-bundle`)
|
||||
.action(async (root, options) => {
|
||||
const { optimizeDeps } = await import('./chunks/dep-0fc8e132.js').then(function (n) { return n.C; });
|
||||
try {
|
||||
const config = await resolveConfig({
|
||||
root,
|
||||
base: options.base,
|
||||
configFile: options.config,
|
||||
logLevel: options.logLevel
|
||||
}, 'build', 'development');
|
||||
await optimizeDeps(config, options.force, true);
|
||||
}
|
||||
catch (e) {
|
||||
createLogger(options.logLevel).error(picocolors.exports.red(`error when optimizing deps:\n${e.stack}`), { error: e });
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
cli
|
||||
.command('preview [root]', 'locally preview production build')
|
||||
.option('--host [host]', `[string] specify hostname`)
|
||||
.option('--port <port>', `[number] specify port`)
|
||||
.option('--strictPort', `[boolean] exit if specified port is already in use`)
|
||||
.option('--https', `[boolean] use TLS + HTTP/2`)
|
||||
.option('--open [path]', `[boolean | string] open browser on startup`)
|
||||
.action(async (root, options) => {
|
||||
const { preview } = await import('./chunks/dep-0fc8e132.js').then(function (n) { return n.F; });
|
||||
try {
|
||||
const server = await preview({
|
||||
root,
|
||||
base: options.base,
|
||||
configFile: options.config,
|
||||
logLevel: options.logLevel,
|
||||
mode: options.mode,
|
||||
preview: {
|
||||
port: options.port,
|
||||
strictPort: options.strictPort,
|
||||
host: options.host,
|
||||
https: options.https,
|
||||
open: options.open
|
||||
}
|
||||
});
|
||||
server.printUrls();
|
||||
}
|
||||
catch (e) {
|
||||
createLogger(options.logLevel).error(picocolors.exports.red(`error when starting preview server:\n${e.stack}`), { error: e });
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
cli.help();
|
||||
cli.version(VERSION);
|
||||
cli.parse();
|
120
webui/node_modules/vite/dist/node/constants.js
generated
vendored
Normal file
120
webui/node_modules/vite/dist/node/constants.js
generated
vendored
Normal file
|
@ -0,0 +1,120 @@
|
|||
import path, { resolve } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
var version = "3.0.9";
|
||||
|
||||
const VERSION = version;
|
||||
const DEFAULT_MAIN_FIELDS = [
|
||||
'module',
|
||||
'jsnext:main',
|
||||
'jsnext'
|
||||
];
|
||||
// Baseline support browserslist
|
||||
// "defaults and supports es6-module and supports es6-module-dynamic-import"
|
||||
// Higher browser versions may be needed for extra features.
|
||||
const ESBUILD_MODULES_TARGET = [
|
||||
'es2020',
|
||||
'edge88',
|
||||
'firefox78',
|
||||
'chrome87',
|
||||
'safari13' // transpile nullish coalescing
|
||||
];
|
||||
const DEFAULT_EXTENSIONS = [
|
||||
'.mjs',
|
||||
'.js',
|
||||
'.mts',
|
||||
'.ts',
|
||||
'.jsx',
|
||||
'.tsx',
|
||||
'.json'
|
||||
];
|
||||
const DEFAULT_CONFIG_FILES = [
|
||||
'vite.config.js',
|
||||
'vite.config.mjs',
|
||||
'vite.config.ts',
|
||||
'vite.config.cjs',
|
||||
'vite.config.mts',
|
||||
'vite.config.cts'
|
||||
];
|
||||
const JS_TYPES_RE = /\.(?:j|t)sx?$|\.mjs$/;
|
||||
const OPTIMIZABLE_ENTRY_RE = /\.(?:[cm]?[jt]s)$/;
|
||||
const SPECIAL_QUERY_RE = /[\?&](?:worker|sharedworker|raw|url)\b/;
|
||||
/**
|
||||
* Prefix for resolved fs paths, since windows paths may not be valid as URLs.
|
||||
*/
|
||||
const FS_PREFIX = `/@fs/`;
|
||||
/**
|
||||
* Prefix for resolved Ids that are not valid browser import specifiers
|
||||
*/
|
||||
const VALID_ID_PREFIX = `/@id/`;
|
||||
/**
|
||||
* Plugins that use 'virtual modules' (e.g. for helper functions), prefix the
|
||||
* module ID with `\0`, a convention from the rollup ecosystem.
|
||||
* This prevents other plugins from trying to process the id (like node resolution),
|
||||
* and core features like sourcemaps can use this info to differentiate between
|
||||
* virtual modules and regular files.
|
||||
* `\0` is not a permitted char in import URLs so we have to replace them during
|
||||
* import analysis. The id will be decoded back before entering the plugins pipeline.
|
||||
* These encoded virtual ids are also prefixed by the VALID_ID_PREFIX, so virtual
|
||||
* modules in the browser end up encoded as `/@id/__x00__{id}`
|
||||
*/
|
||||
const NULL_BYTE_PLACEHOLDER = `__x00__`;
|
||||
const CLIENT_PUBLIC_PATH = `/@vite/client`;
|
||||
const ENV_PUBLIC_PATH = `/@vite/env`;
|
||||
const VITE_PACKAGE_DIR = resolve(
|
||||
// import.meta.url is `dist/node/constants.js` after bundle
|
||||
fileURLToPath(import.meta.url), '../../..');
|
||||
const CLIENT_ENTRY = resolve(VITE_PACKAGE_DIR, 'dist/client/client.mjs');
|
||||
const ENV_ENTRY = resolve(VITE_PACKAGE_DIR, 'dist/client/env.mjs');
|
||||
const CLIENT_DIR = path.dirname(CLIENT_ENTRY);
|
||||
// ** READ THIS ** before editing `KNOWN_ASSET_TYPES`.
|
||||
// If you add an asset to `KNOWN_ASSET_TYPES`, make sure to also add it
|
||||
// to the TypeScript declaration file `packages/vite/client.d.ts` and
|
||||
// add a mime type to the `registerCustomMime` in
|
||||
// `packages/vite/src/node/plugin/assets.ts` if mime type cannot be
|
||||
// looked up by mrmime.
|
||||
const KNOWN_ASSET_TYPES = [
|
||||
// images
|
||||
'png',
|
||||
'jpe?g',
|
||||
'jfif',
|
||||
'pjpeg',
|
||||
'pjp',
|
||||
'gif',
|
||||
'svg',
|
||||
'ico',
|
||||
'webp',
|
||||
'avif',
|
||||
// media
|
||||
'mp4',
|
||||
'webm',
|
||||
'ogg',
|
||||
'mp3',
|
||||
'wav',
|
||||
'flac',
|
||||
'aac',
|
||||
// fonts
|
||||
'woff2?',
|
||||
'eot',
|
||||
'ttf',
|
||||
'otf',
|
||||
// other
|
||||
'webmanifest',
|
||||
'pdf',
|
||||
'txt'
|
||||
];
|
||||
const DEFAULT_ASSETS_RE = new RegExp(`\\.(` + KNOWN_ASSET_TYPES.join('|') + `)(\\?.*)?$`);
|
||||
const DEP_VERSION_RE = /[\?&](v=[\w\.-]+)\b/;
|
||||
const loopbackHosts = new Set([
|
||||
'localhost',
|
||||
'127.0.0.1',
|
||||
'::1',
|
||||
'0000:0000:0000:0000:0000:0000:0000:0001'
|
||||
]);
|
||||
const wildcardHosts = new Set([
|
||||
'0.0.0.0',
|
||||
'::',
|
||||
'0000:0000:0000:0000:0000:0000:0000:0000'
|
||||
]);
|
||||
|
||||
export { CLIENT_DIR, CLIENT_ENTRY, CLIENT_PUBLIC_PATH, DEFAULT_ASSETS_RE, DEFAULT_CONFIG_FILES, DEFAULT_EXTENSIONS, DEFAULT_MAIN_FIELDS, DEP_VERSION_RE, ENV_ENTRY, ENV_PUBLIC_PATH, ESBUILD_MODULES_TARGET, FS_PREFIX, JS_TYPES_RE, KNOWN_ASSET_TYPES, NULL_BYTE_PLACEHOLDER, OPTIMIZABLE_ENTRY_RE, SPECIAL_QUERY_RE, VALID_ID_PREFIX, VERSION, VITE_PACKAGE_DIR, loopbackHosts, wildcardHosts };
|
3292
webui/node_modules/vite/dist/node/index.d.ts
generated
vendored
Normal file
3292
webui/node_modules/vite/dist/node/index.d.ts
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
146
webui/node_modules/vite/dist/node/index.js
generated
vendored
Normal file
146
webui/node_modules/vite/dist/node/index.js
generated
vendored
Normal file
|
@ -0,0 +1,146 @@
|
|||
export { b as build, k as createFilter, u as createLogger, c as createServer, d as defineConfig, f as formatPostcssSourceMap, h as getDepOptimizationConfig, i as isDepsOptimizerEnabled, l as loadConfigFromFile, w as loadEnv, j as mergeAlias, m as mergeConfig, n as normalizePath, o as optimizeDeps, p as preview, g as resolveBaseUrl, e as resolveConfig, x as resolveEnvPrefix, a as resolvePackageData, r as resolvePackageEntry, v as searchForWorkspaceRoot, q as send, s as sortUserPlugins, t as transformWithEsbuild } from './chunks/dep-0fc8e132.js';
|
||||
export { VERSION as version } from './constants.js';
|
||||
export { version as esbuildVersion } from 'esbuild';
|
||||
export { VERSION as rollupVersion } from 'rollup';
|
||||
import 'node:fs';
|
||||
import 'node:path';
|
||||
import 'node:url';
|
||||
import 'node:perf_hooks';
|
||||
import 'node:module';
|
||||
import 'tty';
|
||||
import 'path';
|
||||
import 'fs';
|
||||
import 'events';
|
||||
import 'assert';
|
||||
import 'util';
|
||||
import 'net';
|
||||
import 'url';
|
||||
import 'http';
|
||||
import 'stream';
|
||||
import 'os';
|
||||
import 'child_process';
|
||||
import 'node:os';
|
||||
import 'node:crypto';
|
||||
import 'node:util';
|
||||
import 'node:dns';
|
||||
import 'resolve';
|
||||
import 'crypto';
|
||||
import 'buffer';
|
||||
import 'module';
|
||||
import 'zlib';
|
||||
import 'https';
|
||||
import 'tls';
|
||||
import 'node:http';
|
||||
import 'node:https';
|
||||
import 'worker_threads';
|
||||
import 'querystring';
|
||||
import 'node:readline';
|
||||
import 'node:child_process';
|
||||
import 'node:zlib';
|
||||
|
||||
// This file will be built for both ESM and CJS. Avoid relying on other modules as possible.
|
||||
const cssLangs = `\\.(css|less|sass|scss|styl|stylus|pcss|postcss)($|\\?)`;
|
||||
const cssLangRE = new RegExp(cssLangs);
|
||||
const isCSSRequest = (request) => cssLangRE.test(request);
|
||||
// Use splitVendorChunkPlugin() to get the same manualChunks strategy as Vite 2.7
|
||||
// We don't recommend using this strategy as a general solution moving forward
|
||||
// splitVendorChunk is a simple index/vendor strategy that was used in Vite
|
||||
// until v2.8. It is exposed to let people continue to use it in case it was
|
||||
// working well for their setups.
|
||||
// The cache needs to be reset on buildStart for watch mode to work correctly
|
||||
// Don't use this manualChunks strategy for ssr, lib mode, and 'umd' or 'iife'
|
||||
class SplitVendorChunkCache {
|
||||
constructor() {
|
||||
this.cache = new Map();
|
||||
}
|
||||
reset() {
|
||||
this.cache = new Map();
|
||||
}
|
||||
}
|
||||
function splitVendorChunk(options = {}) {
|
||||
const cache = options.cache ?? new SplitVendorChunkCache();
|
||||
return (id, { getModuleInfo }) => {
|
||||
if (id.includes('node_modules') &&
|
||||
!isCSSRequest(id) &&
|
||||
staticImportedByEntry(id, getModuleInfo, cache.cache)) {
|
||||
return 'vendor';
|
||||
}
|
||||
};
|
||||
}
|
||||
function staticImportedByEntry(id, getModuleInfo, cache, importStack = []) {
|
||||
if (cache.has(id)) {
|
||||
return cache.get(id);
|
||||
}
|
||||
if (importStack.includes(id)) {
|
||||
// circular deps!
|
||||
cache.set(id, false);
|
||||
return false;
|
||||
}
|
||||
const mod = getModuleInfo(id);
|
||||
if (!mod) {
|
||||
cache.set(id, false);
|
||||
return false;
|
||||
}
|
||||
if (mod.isEntry) {
|
||||
cache.set(id, true);
|
||||
return true;
|
||||
}
|
||||
const someImporterIs = mod.importers.some((importer) => staticImportedByEntry(importer, getModuleInfo, cache, importStack.concat(id)));
|
||||
cache.set(id, someImporterIs);
|
||||
return someImporterIs;
|
||||
}
|
||||
function splitVendorChunkPlugin() {
|
||||
const caches = [];
|
||||
function createSplitVendorChunk(output, config) {
|
||||
const cache = new SplitVendorChunkCache();
|
||||
caches.push(cache);
|
||||
const build = config.build ?? {};
|
||||
const format = output?.format;
|
||||
if (!build.ssr && !build.lib && format !== 'umd' && format !== 'iife') {
|
||||
return splitVendorChunk({ cache });
|
||||
}
|
||||
}
|
||||
return {
|
||||
name: 'vite:split-vendor-chunk',
|
||||
config(config) {
|
||||
let outputs = config?.build?.rollupOptions?.output;
|
||||
if (outputs) {
|
||||
outputs = Array.isArray(outputs) ? outputs : [outputs];
|
||||
for (const output of outputs) {
|
||||
const viteManualChunks = createSplitVendorChunk(output, config);
|
||||
if (viteManualChunks) {
|
||||
if (output.manualChunks) {
|
||||
if (typeof output.manualChunks === 'function') {
|
||||
const userManualChunks = output.manualChunks;
|
||||
output.manualChunks = (id, api) => {
|
||||
return userManualChunks(id, api) ?? viteManualChunks(id, api);
|
||||
};
|
||||
}
|
||||
// else, leave the object form of manualChunks untouched, as
|
||||
// we can't safely replicate rollup handling.
|
||||
}
|
||||
else {
|
||||
output.manualChunks = viteManualChunks;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
return {
|
||||
build: {
|
||||
rollupOptions: {
|
||||
output: {
|
||||
manualChunks: createSplitVendorChunk({}, config)
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
},
|
||||
buildStart() {
|
||||
caches.forEach((cache) => cache.reset());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export { splitVendorChunk, splitVendorChunkPlugin };
|
33
webui/node_modules/vite/index.cjs
generated
vendored
Normal file
33
webui/node_modules/vite/index.cjs
generated
vendored
Normal file
|
@ -0,0 +1,33 @@
|
|||
/* eslint-disable no-restricted-globals */
|
||||
|
||||
// type utils
|
||||
module.exports.defineConfig = (config) => config
|
||||
|
||||
// proxy cjs utils (sync functions)
|
||||
Object.assign(module.exports, require('./dist/node-cjs/publicUtils.cjs'))
|
||||
|
||||
// async functions, can be redirect from ESM build
|
||||
const asyncFunctions = [
|
||||
'build',
|
||||
'createServer',
|
||||
'preview',
|
||||
'transformWithEsbuild',
|
||||
'resolveConfig',
|
||||
'optimizeDeps',
|
||||
'formatPostcssSourceMap',
|
||||
'loadConfigFromFile'
|
||||
]
|
||||
asyncFunctions.forEach((name) => {
|
||||
module.exports[name] = (...args) =>
|
||||
import('./dist/node/index.js').then((i) => i[name](...args))
|
||||
})
|
||||
|
||||
// some sync functions are marked not supported due to their complexity and uncommon usage
|
||||
const unsupportedCJS = ['resolvePackageEntry', 'resolvePackageData']
|
||||
unsupportedCJS.forEach((name) => {
|
||||
module.exports[name] = () => {
|
||||
throw new Error(
|
||||
`"${name}" is not supported in CJS build of Vite 3.\nPlease use ESM or dynamic imports \`const { ${name} } = await import('vite')\`.`
|
||||
)
|
||||
}
|
||||
})
|
144
webui/node_modules/vite/package.json
generated
vendored
Normal file
144
webui/node_modules/vite/package.json
generated
vendored
Normal file
|
@ -0,0 +1,144 @@
|
|||
{
|
||||
"name": "vite",
|
||||
"version": "3.0.9",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"author": "Evan You",
|
||||
"description": "Native-ESM powered web dev build tool",
|
||||
"bin": {
|
||||
"vite": "bin/vite.js"
|
||||
},
|
||||
"main": "./dist/node/index.js",
|
||||
"module": "./dist/node/index.js",
|
||||
"types": "./dist/node/index.d.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/node/index.d.ts",
|
||||
"import": "./dist/node/index.js",
|
||||
"require": "./index.cjs"
|
||||
},
|
||||
"./client": {
|
||||
"types": "./client.d.ts"
|
||||
},
|
||||
"./dist/client/*": "./dist/client/*",
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"files": [
|
||||
"bin",
|
||||
"dist",
|
||||
"client.d.ts",
|
||||
"index.cjs",
|
||||
"src/client",
|
||||
"types"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^14.18.0 || >=16.0.0"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/vitejs/vite.git",
|
||||
"directory": "packages/vite"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/vitejs/vite/issues"
|
||||
},
|
||||
"homepage": "https://github.com/vitejs/vite/tree/main/#readme",
|
||||
"scripts": {
|
||||
"dev": "rimraf dist && pnpm run build-bundle -w",
|
||||
"build": "rimraf dist && run-s build-bundle build-types",
|
||||
"build-bundle": "rollup --config rollup.config.ts --configPlugin typescript",
|
||||
"build-types": "run-s build-temp-types patch-types roll-types check-dist-types",
|
||||
"build-temp-types": "tsc --emitDeclarationOnly --outDir temp/node -p src/node",
|
||||
"patch-types": "tsx scripts/patchTypes.ts",
|
||||
"roll-types": "api-extractor run && rimraf temp",
|
||||
"check-dist-types": "tsc --project tsconfig.check.json",
|
||||
"lint": "eslint --cache --ext .ts src/**",
|
||||
"format": "prettier --write --cache --parser typescript \"src/**/*.ts\"",
|
||||
"prepublishOnly": "npm run build"
|
||||
},
|
||||
"//": "READ CONTRIBUTING.md to understand what to put under deps vs. devDeps!",
|
||||
"dependencies": {
|
||||
"esbuild": "^0.14.47",
|
||||
"postcss": "^8.4.16",
|
||||
"resolve": "^1.22.1",
|
||||
"rollup": ">=2.75.6 <2.77.0 || ~2.77.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@ampproject/remapping": "^2.2.0",
|
||||
"@babel/parser": "^7.18.11",
|
||||
"@babel/types": "^7.18.10",
|
||||
"@jridgewell/trace-mapping": "^0.3.15",
|
||||
"@rollup/plugin-alias": "^3.1.9",
|
||||
"@rollup/plugin-commonjs": "^22.0.2",
|
||||
"@rollup/plugin-dynamic-import-vars": "^1.4.4",
|
||||
"@rollup/plugin-json": "^4.1.0",
|
||||
"@rollup/plugin-node-resolve": "13.3.0",
|
||||
"@rollup/plugin-typescript": "^8.3.4",
|
||||
"@rollup/pluginutils": "^4.2.1",
|
||||
"@vue/compiler-dom": "^3.2.37",
|
||||
"acorn": "^8.8.0",
|
||||
"cac": "^6.7.12",
|
||||
"chokidar": "^3.5.3",
|
||||
"connect": "^3.7.0",
|
||||
"connect-history-api-fallback": "^2.0.0",
|
||||
"convert-source-map": "^1.8.0",
|
||||
"cors": "^2.8.5",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"debug": "^4.3.4",
|
||||
"dotenv": "^14.3.2",
|
||||
"dotenv-expand": "^5.1.0",
|
||||
"es-module-lexer": "^1.0.3",
|
||||
"estree-walker": "^3.0.1",
|
||||
"etag": "^1.8.1",
|
||||
"fast-glob": "^3.2.11",
|
||||
"http-proxy": "^1.18.1",
|
||||
"json5": "^2.2.1",
|
||||
"launch-editor-middleware": "^2.5.0",
|
||||
"magic-string": "^0.26.2",
|
||||
"micromatch": "^4.0.5",
|
||||
"mlly": "^0.5.12",
|
||||
"mrmime": "^1.0.1",
|
||||
"okie": "^1.0.1",
|
||||
"open": "^8.4.0",
|
||||
"periscopic": "^3.0.4",
|
||||
"picocolors": "^1.0.0",
|
||||
"postcss-import": "^14.1.0",
|
||||
"postcss-load-config": "^4.0.1",
|
||||
"postcss-modules": "^4.3.1",
|
||||
"resolve.exports": "^1.1.0",
|
||||
"rollup-plugin-license": "^2.8.1",
|
||||
"sirv": "^2.0.2",
|
||||
"source-map-js": "^1.0.2",
|
||||
"source-map-support": "^0.5.21",
|
||||
"strip-ansi": "^7.0.1",
|
||||
"strip-literal": "^0.4.0",
|
||||
"tsconfck": "^2.0.1",
|
||||
"tslib": "^2.4.0",
|
||||
"types": "link:./types",
|
||||
"ufo": "^0.8.5",
|
||||
"ws": "^8.8.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"less": "*",
|
||||
"sass": "*",
|
||||
"stylus": "*",
|
||||
"terser": "^5.4.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"sass": {
|
||||
"optional": true
|
||||
},
|
||||
"stylus": {
|
||||
"optional": true
|
||||
},
|
||||
"less": {
|
||||
"optional": true
|
||||
},
|
||||
"terser": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
}
|
602
webui/node_modules/vite/src/client/client.ts
generated
vendored
Normal file
602
webui/node_modules/vite/src/client/client.ts
generated
vendored
Normal file
|
@ -0,0 +1,602 @@
|
|||
import type { ErrorPayload, HMRPayload, Update } from 'types/hmrPayload'
|
||||
import type { ModuleNamespace, ViteHotContext } from 'types/hot'
|
||||
import type { InferCustomEventPayload } from 'types/customEvent'
|
||||
import { ErrorOverlay, overlayId } from './overlay'
|
||||
// eslint-disable-next-line node/no-missing-import
|
||||
import '@vite/env'
|
||||
|
||||
// injected by the hmr plugin when served
|
||||
declare const __BASE__: string
|
||||
declare const __SERVER_HOST__: string
|
||||
declare const __HMR_PROTOCOL__: string | null
|
||||
declare const __HMR_HOSTNAME__: string | null
|
||||
declare const __HMR_PORT__: number | null
|
||||
declare const __HMR_DIRECT_TARGET__: string
|
||||
declare const __HMR_BASE__: string
|
||||
declare const __HMR_TIMEOUT__: number
|
||||
declare const __HMR_ENABLE_OVERLAY__: boolean
|
||||
|
||||
console.debug('[vite] connecting...')
|
||||
|
||||
const importMetaUrl = new URL(import.meta.url)
|
||||
|
||||
// use server configuration, then fallback to inference
|
||||
const serverHost = __SERVER_HOST__
|
||||
const socketProtocol =
|
||||
__HMR_PROTOCOL__ || (location.protocol === 'https:' ? 'wss' : 'ws')
|
||||
const hmrPort = __HMR_PORT__
|
||||
const socketHost = `${__HMR_HOSTNAME__ || importMetaUrl.hostname}:${
|
||||
hmrPort || importMetaUrl.port
|
||||
}${__HMR_BASE__}`
|
||||
const directSocketHost = __HMR_DIRECT_TARGET__
|
||||
const base = __BASE__ || '/'
|
||||
const messageBuffer: string[] = []
|
||||
|
||||
let socket: WebSocket
|
||||
try {
|
||||
let fallback: (() => void) | undefined
|
||||
// only use fallback when port is inferred to prevent confusion
|
||||
if (!hmrPort) {
|
||||
fallback = () => {
|
||||
// fallback to connecting directly to the hmr server
|
||||
// for servers which does not support proxying websocket
|
||||
socket = setupWebSocket(socketProtocol, directSocketHost, () => {
|
||||
const currentScriptHostURL = new URL(import.meta.url)
|
||||
const currentScriptHost =
|
||||
currentScriptHostURL.host +
|
||||
currentScriptHostURL.pathname.replace(/@vite\/client$/, '')
|
||||
console.error(
|
||||
'[vite] failed to connect to websocket.\n' +
|
||||
'your current setup:\n' +
|
||||
` (browser) ${currentScriptHost} <--[HTTP]--> ${serverHost} (server)\n` +
|
||||
` (browser) ${socketHost} <--[WebSocket (failing)]--> ${directSocketHost} (server)\n` +
|
||||
'Check out your Vite / network configuration and https://vitejs.dev/config/server-options.html#server-hmr .'
|
||||
)
|
||||
})
|
||||
socket.addEventListener(
|
||||
'open',
|
||||
() => {
|
||||
console.info(
|
||||
'[vite] Direct websocket connection fallback. Check out https://vitejs.dev/config/server-options.html#server-hmr to remove the previous connection error.'
|
||||
)
|
||||
},
|
||||
{ once: true }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
socket = setupWebSocket(socketProtocol, socketHost, fallback)
|
||||
} catch (error) {
|
||||
console.error(`[vite] failed to connect to websocket (${error}). `)
|
||||
}
|
||||
|
||||
function setupWebSocket(
|
||||
protocol: string,
|
||||
hostAndPath: string,
|
||||
onCloseWithoutOpen?: () => void
|
||||
) {
|
||||
const socket = new WebSocket(`${protocol}://${hostAndPath}`, 'vite-hmr')
|
||||
let isOpened = false
|
||||
|
||||
socket.addEventListener(
|
||||
'open',
|
||||
() => {
|
||||
isOpened = true
|
||||
},
|
||||
{ once: true }
|
||||
)
|
||||
|
||||
// Listen for messages
|
||||
socket.addEventListener('message', async ({ data }) => {
|
||||
handleMessage(JSON.parse(data))
|
||||
})
|
||||
|
||||
// ping server
|
||||
socket.addEventListener('close', async ({ wasClean }) => {
|
||||
if (wasClean) return
|
||||
|
||||
if (!isOpened && onCloseWithoutOpen) {
|
||||
onCloseWithoutOpen()
|
||||
return
|
||||
}
|
||||
|
||||
console.log(`[vite] server connection lost. polling for restart...`)
|
||||
await waitForSuccessfulPing(protocol, hostAndPath)
|
||||
location.reload()
|
||||
})
|
||||
|
||||
return socket
|
||||
}
|
||||
|
||||
function warnFailedFetch(err: Error, path: string | string[]) {
|
||||
if (!err.message.match('fetch')) {
|
||||
console.error(err)
|
||||
}
|
||||
console.error(
|
||||
`[hmr] Failed to reload ${path}. ` +
|
||||
`This could be due to syntax errors or importing non-existent ` +
|
||||
`modules. (see errors above)`
|
||||
)
|
||||
}
|
||||
|
||||
function cleanUrl(pathname: string): string {
|
||||
const url = new URL(pathname, location.toString())
|
||||
url.searchParams.delete('direct')
|
||||
return url.pathname + url.search
|
||||
}
|
||||
|
||||
let isFirstUpdate = true
|
||||
const outdatedLinkTags = new WeakSet<HTMLLinkElement>()
|
||||
|
||||
async function handleMessage(payload: HMRPayload) {
|
||||
switch (payload.type) {
|
||||
case 'connected':
|
||||
console.debug(`[vite] connected.`)
|
||||
sendMessageBuffer()
|
||||
// proxy(nginx, docker) hmr ws maybe caused timeout,
|
||||
// so send ping package let ws keep alive.
|
||||
setInterval(() => {
|
||||
if (socket.readyState === socket.OPEN) {
|
||||
socket.send('{"type":"ping"}')
|
||||
}
|
||||
}, __HMR_TIMEOUT__)
|
||||
break
|
||||
case 'update':
|
||||
notifyListeners('vite:beforeUpdate', payload)
|
||||
// if this is the first update and there's already an error overlay, it
|
||||
// means the page opened with existing server compile error and the whole
|
||||
// module script failed to load (since one of the nested imports is 500).
|
||||
// in this case a normal update won't work and a full reload is needed.
|
||||
if (isFirstUpdate && hasErrorOverlay()) {
|
||||
window.location.reload()
|
||||
return
|
||||
} else {
|
||||
clearErrorOverlay()
|
||||
isFirstUpdate = false
|
||||
}
|
||||
payload.updates.forEach((update) => {
|
||||
if (update.type === 'js-update') {
|
||||
queueUpdate(fetchUpdate(update))
|
||||
} else {
|
||||
// css-update
|
||||
// this is only sent when a css file referenced with <link> is updated
|
||||
const { path, timestamp } = update
|
||||
const searchUrl = cleanUrl(path)
|
||||
// can't use querySelector with `[href*=]` here since the link may be
|
||||
// using relative paths so we need to use link.href to grab the full
|
||||
// URL for the include check.
|
||||
const el = Array.from(
|
||||
document.querySelectorAll<HTMLLinkElement>('link')
|
||||
).find(
|
||||
(e) =>
|
||||
!outdatedLinkTags.has(e) && cleanUrl(e.href).includes(searchUrl)
|
||||
)
|
||||
if (el) {
|
||||
const newPath = `${base}${searchUrl.slice(1)}${
|
||||
searchUrl.includes('?') ? '&' : '?'
|
||||
}t=${timestamp}`
|
||||
|
||||
// rather than swapping the href on the existing tag, we will
|
||||
// create a new link tag. Once the new stylesheet has loaded we
|
||||
// will remove the existing link tag. This removes a Flash Of
|
||||
// Unstyled Content that can occur when swapping out the tag href
|
||||
// directly, as the new stylesheet has not yet been loaded.
|
||||
const newLinkTag = el.cloneNode() as HTMLLinkElement
|
||||
newLinkTag.href = new URL(newPath, el.href).href
|
||||
const removeOldEl = () => el.remove()
|
||||
newLinkTag.addEventListener('load', removeOldEl)
|
||||
newLinkTag.addEventListener('error', removeOldEl)
|
||||
outdatedLinkTags.add(el)
|
||||
el.after(newLinkTag)
|
||||
}
|
||||
console.log(`[vite] css hot updated: ${searchUrl}`)
|
||||
}
|
||||
})
|
||||
break
|
||||
case 'custom': {
|
||||
notifyListeners(payload.event, payload.data)
|
||||
break
|
||||
}
|
||||
case 'full-reload':
|
||||
notifyListeners('vite:beforeFullReload', payload)
|
||||
if (payload.path && payload.path.endsWith('.html')) {
|
||||
// if html file is edited, only reload the page if the browser is
|
||||
// currently on that page.
|
||||
const pagePath = decodeURI(location.pathname)
|
||||
const payloadPath = base + payload.path.slice(1)
|
||||
if (
|
||||
pagePath === payloadPath ||
|
||||
payload.path === '/index.html' ||
|
||||
(pagePath.endsWith('/') && pagePath + 'index.html' === payloadPath)
|
||||
) {
|
||||
location.reload()
|
||||
}
|
||||
return
|
||||
} else {
|
||||
location.reload()
|
||||
}
|
||||
break
|
||||
case 'prune':
|
||||
notifyListeners('vite:beforePrune', payload)
|
||||
// After an HMR update, some modules are no longer imported on the page
|
||||
// but they may have left behind side effects that need to be cleaned up
|
||||
// (.e.g style injections)
|
||||
// TODO Trigger their dispose callbacks.
|
||||
payload.paths.forEach((path) => {
|
||||
const fn = pruneMap.get(path)
|
||||
if (fn) {
|
||||
fn(dataMap.get(path))
|
||||
}
|
||||
})
|
||||
break
|
||||
case 'error': {
|
||||
notifyListeners('vite:error', payload)
|
||||
const err = payload.err
|
||||
if (enableOverlay) {
|
||||
createErrorOverlay(err)
|
||||
} else {
|
||||
console.error(
|
||||
`[vite] Internal Server Error\n${err.message}\n${err.stack}`
|
||||
)
|
||||
}
|
||||
break
|
||||
}
|
||||
default: {
|
||||
const check: never = payload
|
||||
return check
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function notifyListeners<T extends string>(
|
||||
event: T,
|
||||
data: InferCustomEventPayload<T>
|
||||
): void
|
||||
function notifyListeners(event: string, data: any): void {
|
||||
const cbs = customListenersMap.get(event)
|
||||
if (cbs) {
|
||||
cbs.forEach((cb) => cb(data))
|
||||
}
|
||||
}
|
||||
|
||||
const enableOverlay = __HMR_ENABLE_OVERLAY__
|
||||
|
||||
function createErrorOverlay(err: ErrorPayload['err']) {
|
||||
if (!enableOverlay) return
|
||||
clearErrorOverlay()
|
||||
document.body.appendChild(new ErrorOverlay(err))
|
||||
}
|
||||
|
||||
function clearErrorOverlay() {
|
||||
document
|
||||
.querySelectorAll(overlayId)
|
||||
.forEach((n) => (n as ErrorOverlay).close())
|
||||
}
|
||||
|
||||
function hasErrorOverlay() {
|
||||
return document.querySelectorAll(overlayId).length
|
||||
}
|
||||
|
||||
let pending = false
|
||||
let queued: Promise<(() => void) | undefined>[] = []
|
||||
|
||||
/**
|
||||
* buffer multiple hot updates triggered by the same src change
|
||||
* so that they are invoked in the same order they were sent.
|
||||
* (otherwise the order may be inconsistent because of the http request round trip)
|
||||
*/
|
||||
async function queueUpdate(p: Promise<(() => void) | undefined>) {
|
||||
queued.push(p)
|
||||
if (!pending) {
|
||||
pending = true
|
||||
await Promise.resolve()
|
||||
pending = false
|
||||
const loading = [...queued]
|
||||
queued = []
|
||||
;(await Promise.all(loading)).forEach((fn) => fn && fn())
|
||||
}
|
||||
}
|
||||
|
||||
async function waitForSuccessfulPing(
|
||||
socketProtocol: string,
|
||||
hostAndPath: string,
|
||||
ms = 1000
|
||||
) {
|
||||
const pingHostProtocol = socketProtocol === 'wss' ? 'https' : 'http'
|
||||
|
||||
// eslint-disable-next-line no-constant-condition
|
||||
while (true) {
|
||||
try {
|
||||
// A fetch on a websocket URL will return a successful promise with status 400,
|
||||
// but will reject a networking error.
|
||||
// When running on middleware mode, it returns status 426, and an cors error happens if mode is not no-cors
|
||||
await fetch(`${pingHostProtocol}://${hostAndPath}`, {
|
||||
mode: 'no-cors'
|
||||
})
|
||||
break
|
||||
} catch (e) {
|
||||
// wait ms before attempting to ping again
|
||||
await new Promise((resolve) => setTimeout(resolve, ms))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// https://wicg.github.io/construct-stylesheets
|
||||
const supportsConstructedSheet = (() => {
|
||||
// TODO: re-enable this try block once Chrome fixes the performance of
|
||||
// rule insertion in really big stylesheets
|
||||
// try {
|
||||
// new CSSStyleSheet()
|
||||
// return true
|
||||
// } catch (e) {}
|
||||
return false
|
||||
})()
|
||||
|
||||
const sheetsMap = new Map<
|
||||
string,
|
||||
HTMLStyleElement | CSSStyleSheet | undefined
|
||||
>()
|
||||
|
||||
export function updateStyle(id: string, content: string): void {
|
||||
let style = sheetsMap.get(id)
|
||||
if (supportsConstructedSheet && !content.includes('@import')) {
|
||||
if (style && !(style instanceof CSSStyleSheet)) {
|
||||
removeStyle(id)
|
||||
style = undefined
|
||||
}
|
||||
|
||||
if (!style) {
|
||||
style = new CSSStyleSheet()
|
||||
// @ts-expect-error: using experimental API
|
||||
style.replaceSync(content)
|
||||
// @ts-expect-error: using experimental API
|
||||
document.adoptedStyleSheets = [...document.adoptedStyleSheets, style]
|
||||
} else {
|
||||
// @ts-expect-error: using experimental API
|
||||
style.replaceSync(content)
|
||||
}
|
||||
} else {
|
||||
if (style && !(style instanceof HTMLStyleElement)) {
|
||||
removeStyle(id)
|
||||
style = undefined
|
||||
}
|
||||
|
||||
if (!style) {
|
||||
style = document.createElement('style')
|
||||
style.setAttribute('type', 'text/css')
|
||||
style.innerHTML = content
|
||||
document.head.appendChild(style)
|
||||
} else {
|
||||
style.innerHTML = content
|
||||
}
|
||||
}
|
||||
sheetsMap.set(id, style)
|
||||
}
|
||||
|
||||
export function removeStyle(id: string): void {
|
||||
const style = sheetsMap.get(id)
|
||||
if (style) {
|
||||
if (style instanceof CSSStyleSheet) {
|
||||
// @ts-expect-error: using experimental API
|
||||
document.adoptedStyleSheets = document.adoptedStyleSheets.filter(
|
||||
(s: CSSStyleSheet) => s !== style
|
||||
)
|
||||
} else {
|
||||
document.head.removeChild(style)
|
||||
}
|
||||
sheetsMap.delete(id)
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchUpdate({ path, acceptedPath, timestamp }: Update) {
|
||||
const mod = hotModulesMap.get(path)
|
||||
if (!mod) {
|
||||
// In a code-splitting project,
|
||||
// it is common that the hot-updating module is not loaded yet.
|
||||
// https://github.com/vitejs/vite/issues/721
|
||||
return
|
||||
}
|
||||
|
||||
const moduleMap = new Map<string, ModuleNamespace>()
|
||||
const isSelfUpdate = path === acceptedPath
|
||||
|
||||
// make sure we only import each dep once
|
||||
const modulesToUpdate = new Set<string>()
|
||||
if (isSelfUpdate) {
|
||||
// self update - only update self
|
||||
modulesToUpdate.add(path)
|
||||
} else {
|
||||
// dep update
|
||||
for (const { deps } of mod.callbacks) {
|
||||
deps.forEach((dep) => {
|
||||
if (acceptedPath === dep) {
|
||||
modulesToUpdate.add(dep)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// determine the qualified callbacks before we re-import the modules
|
||||
const qualifiedCallbacks = mod.callbacks.filter(({ deps }) => {
|
||||
return deps.some((dep) => modulesToUpdate.has(dep))
|
||||
})
|
||||
|
||||
await Promise.all(
|
||||
Array.from(modulesToUpdate).map(async (dep) => {
|
||||
const disposer = disposeMap.get(dep)
|
||||
if (disposer) await disposer(dataMap.get(dep))
|
||||
const [path, query] = dep.split(`?`)
|
||||
try {
|
||||
const newMod: ModuleNamespace = await import(
|
||||
/* @vite-ignore */
|
||||
base +
|
||||
path.slice(1) +
|
||||
`?import&t=${timestamp}${query ? `&${query}` : ''}`
|
||||
)
|
||||
moduleMap.set(dep, newMod)
|
||||
} catch (e) {
|
||||
warnFailedFetch(e, dep)
|
||||
}
|
||||
})
|
||||
)
|
||||
|
||||
return () => {
|
||||
for (const { deps, fn } of qualifiedCallbacks) {
|
||||
fn(deps.map((dep) => moduleMap.get(dep)))
|
||||
}
|
||||
const loggedPath = isSelfUpdate ? path : `${acceptedPath} via ${path}`
|
||||
console.log(`[vite] hot updated: ${loggedPath}`)
|
||||
}
|
||||
}
|
||||
|
||||
function sendMessageBuffer() {
|
||||
if (socket.readyState === 1) {
|
||||
messageBuffer.forEach((msg) => socket.send(msg))
|
||||
messageBuffer.length = 0
|
||||
}
|
||||
}
|
||||
|
||||
interface HotModule {
|
||||
id: string
|
||||
callbacks: HotCallback[]
|
||||
}
|
||||
|
||||
interface HotCallback {
|
||||
// the dependencies must be fetchable paths
|
||||
deps: string[]
|
||||
fn: (modules: Array<ModuleNamespace | undefined>) => void
|
||||
}
|
||||
|
||||
type CustomListenersMap = Map<string, ((data: any) => void)[]>
|
||||
|
||||
const hotModulesMap = new Map<string, HotModule>()
|
||||
const disposeMap = new Map<string, (data: any) => void | Promise<void>>()
|
||||
const pruneMap = new Map<string, (data: any) => void | Promise<void>>()
|
||||
const dataMap = new Map<string, any>()
|
||||
const customListenersMap: CustomListenersMap = new Map()
|
||||
const ctxToListenersMap = new Map<string, CustomListenersMap>()
|
||||
|
||||
export function createHotContext(ownerPath: string): ViteHotContext {
|
||||
if (!dataMap.has(ownerPath)) {
|
||||
dataMap.set(ownerPath, {})
|
||||
}
|
||||
|
||||
// when a file is hot updated, a new context is created
|
||||
// clear its stale callbacks
|
||||
const mod = hotModulesMap.get(ownerPath)
|
||||
if (mod) {
|
||||
mod.callbacks = []
|
||||
}
|
||||
|
||||
// clear stale custom event listeners
|
||||
const staleListeners = ctxToListenersMap.get(ownerPath)
|
||||
if (staleListeners) {
|
||||
for (const [event, staleFns] of staleListeners) {
|
||||
const listeners = customListenersMap.get(event)
|
||||
if (listeners) {
|
||||
customListenersMap.set(
|
||||
event,
|
||||
listeners.filter((l) => !staleFns.includes(l))
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const newListeners: CustomListenersMap = new Map()
|
||||
ctxToListenersMap.set(ownerPath, newListeners)
|
||||
|
||||
function acceptDeps(deps: string[], callback: HotCallback['fn'] = () => {}) {
|
||||
const mod: HotModule = hotModulesMap.get(ownerPath) || {
|
||||
id: ownerPath,
|
||||
callbacks: []
|
||||
}
|
||||
mod.callbacks.push({
|
||||
deps,
|
||||
fn: callback
|
||||
})
|
||||
hotModulesMap.set(ownerPath, mod)
|
||||
}
|
||||
|
||||
const hot: ViteHotContext = {
|
||||
get data() {
|
||||
return dataMap.get(ownerPath)
|
||||
},
|
||||
|
||||
accept(deps?: any, callback?: any) {
|
||||
if (typeof deps === 'function' || !deps) {
|
||||
// self-accept: hot.accept(() => {})
|
||||
acceptDeps([ownerPath], ([mod]) => deps && deps(mod))
|
||||
} else if (typeof deps === 'string') {
|
||||
// explicit deps
|
||||
acceptDeps([deps], ([mod]) => callback && callback(mod))
|
||||
} else if (Array.isArray(deps)) {
|
||||
acceptDeps(deps, callback)
|
||||
} else {
|
||||
throw new Error(`invalid hot.accept() usage.`)
|
||||
}
|
||||
},
|
||||
|
||||
// export names (first arg) are irrelevant on the client side, they're
|
||||
// extracted in the server for propagation
|
||||
acceptExports(_: string | readonly string[], callback?: any) {
|
||||
acceptDeps([ownerPath], callback && (([mod]) => callback(mod)))
|
||||
},
|
||||
|
||||
dispose(cb) {
|
||||
disposeMap.set(ownerPath, cb)
|
||||
},
|
||||
|
||||
// @ts-expect-error untyped
|
||||
prune(cb: (data: any) => void) {
|
||||
pruneMap.set(ownerPath, cb)
|
||||
},
|
||||
|
||||
// TODO
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
||||
decline() {},
|
||||
|
||||
invalidate() {
|
||||
// TODO should tell the server to re-perform hmr propagation
|
||||
// from this module as root
|
||||
location.reload()
|
||||
},
|
||||
|
||||
// custom events
|
||||
on(event, cb) {
|
||||
const addToMap = (map: Map<string, any[]>) => {
|
||||
const existing = map.get(event) || []
|
||||
existing.push(cb)
|
||||
map.set(event, existing)
|
||||
}
|
||||
addToMap(customListenersMap)
|
||||
addToMap(newListeners)
|
||||
},
|
||||
|
||||
send(event, data) {
|
||||
messageBuffer.push(JSON.stringify({ type: 'custom', event, data }))
|
||||
sendMessageBuffer()
|
||||
}
|
||||
}
|
||||
|
||||
return hot
|
||||
}
|
||||
|
||||
/**
|
||||
* urls here are dynamic import() urls that couldn't be statically analyzed
|
||||
*/
|
||||
export function injectQuery(url: string, queryToInject: string): string {
|
||||
// skip urls that won't be handled by vite
|
||||
if (!url.startsWith('.') && !url.startsWith('/')) {
|
||||
return url
|
||||
}
|
||||
|
||||
// can't use pathname from URL since it may be relative like ../
|
||||
const pathname = url.replace(/#.*$/, '').replace(/\?.*$/, '')
|
||||
const { search, hash } = new URL(url, 'http://vitejs.dev')
|
||||
|
||||
return `${pathname}?${queryToInject}${search ? `&` + search.slice(1) : ''}${
|
||||
hash || ''
|
||||
}`
|
||||
}
|
||||
|
||||
export { ErrorOverlay }
|
29
webui/node_modules/vite/src/client/env.ts
generated
vendored
Normal file
29
webui/node_modules/vite/src/client/env.ts
generated
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
declare const __MODE__: string
|
||||
declare const __DEFINES__: Record<string, any>
|
||||
|
||||
const context = (() => {
|
||||
if (typeof globalThis !== 'undefined') {
|
||||
return globalThis
|
||||
} else if (typeof self !== 'undefined') {
|
||||
return self
|
||||
} else if (typeof window !== 'undefined') {
|
||||
return window
|
||||
} else {
|
||||
return Function('return this')()
|
||||
}
|
||||
})()
|
||||
|
||||
// assign defines
|
||||
const defines = __DEFINES__
|
||||
Object.keys(defines).forEach((key) => {
|
||||
const segments = key.split('.')
|
||||
let target = context
|
||||
for (let i = 0; i < segments.length; i++) {
|
||||
const segment = segments[i]
|
||||
if (i === segments.length - 1) {
|
||||
target[segment] = defines[key]
|
||||
} else {
|
||||
target = target[segment] || (target[segment] = {})
|
||||
}
|
||||
}
|
||||
})
|
193
webui/node_modules/vite/src/client/overlay.ts
generated
vendored
Normal file
193
webui/node_modules/vite/src/client/overlay.ts
generated
vendored
Normal file
|
@ -0,0 +1,193 @@
|
|||
import type { ErrorPayload } from 'types/hmrPayload'
|
||||
|
||||
const template = /*html*/ `
|
||||
<style>
|
||||
:host {
|
||||
position: fixed;
|
||||
z-index: 99999;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow-y: scroll;
|
||||
margin: 0;
|
||||
background: rgba(0, 0, 0, 0.66);
|
||||
--monospace: 'SFMono-Regular', Consolas,
|
||||
'Liberation Mono', Menlo, Courier, monospace;
|
||||
--red: #ff5555;
|
||||
--yellow: #e2aa53;
|
||||
--purple: #cfa4ff;
|
||||
--cyan: #2dd9da;
|
||||
--dim: #c9c9c9;
|
||||
}
|
||||
|
||||
.window {
|
||||
font-family: var(--monospace);
|
||||
line-height: 1.5;
|
||||
width: 800px;
|
||||
color: #d8d8d8;
|
||||
margin: 30px auto;
|
||||
padding: 25px 40px;
|
||||
position: relative;
|
||||
background: #181818;
|
||||
border-radius: 6px 6px 8px 8px;
|
||||
box-shadow: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22);
|
||||
overflow: hidden;
|
||||
border-top: 8px solid var(--red);
|
||||
direction: ltr;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-family: var(--monospace);
|
||||
font-size: 16px;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1em;
|
||||
overflow-x: scroll;
|
||||
scrollbar-width: none;
|
||||
}
|
||||
|
||||
pre::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.message {
|
||||
line-height: 1.3;
|
||||
font-weight: 600;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.message-body {
|
||||
color: var(--red);
|
||||
}
|
||||
|
||||
.plugin {
|
||||
color: var(--purple);
|
||||
}
|
||||
|
||||
.file {
|
||||
color: var(--cyan);
|
||||
margin-bottom: 0;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.frame {
|
||||
color: var(--yellow);
|
||||
}
|
||||
|
||||
.stack {
|
||||
font-size: 13px;
|
||||
color: var(--dim);
|
||||
}
|
||||
|
||||
.tip {
|
||||
font-size: 13px;
|
||||
color: #999;
|
||||
border-top: 1px dotted #999;
|
||||
padding-top: 13px;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 13px;
|
||||
font-family: var(--monospace);
|
||||
color: var(--yellow);
|
||||
}
|
||||
|
||||
.file-link {
|
||||
text-decoration: underline;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
<div class="window">
|
||||
<pre class="message"><span class="plugin"></span><span class="message-body"></span></pre>
|
||||
<pre class="file"></pre>
|
||||
<pre class="frame"></pre>
|
||||
<pre class="stack"></pre>
|
||||
<div class="tip">
|
||||
Click outside or fix the code to dismiss.<br>
|
||||
You can also disable this overlay by setting
|
||||
<code>server.hmr.overlay</code> to <code>false</code> in <code>vite.config.js.</code>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
|
||||
const fileRE = /(?:[a-zA-Z]:\\|\/).*?:\d+:\d+/g
|
||||
const codeframeRE = /^(?:>?\s+\d+\s+\|.*|\s+\|\s*\^.*)\r?\n/gm
|
||||
|
||||
// Allow `ErrorOverlay` to extend `HTMLElement` even in environments where
|
||||
// `HTMLElement` was not originally defined.
|
||||
const { HTMLElement = class {} as typeof globalThis.HTMLElement } = globalThis
|
||||
export class ErrorOverlay extends HTMLElement {
|
||||
root: ShadowRoot
|
||||
|
||||
constructor(err: ErrorPayload['err']) {
|
||||
super()
|
||||
this.root = this.attachShadow({ mode: 'open' })
|
||||
this.root.innerHTML = template
|
||||
|
||||
codeframeRE.lastIndex = 0
|
||||
const hasFrame = err.frame && codeframeRE.test(err.frame)
|
||||
const message = hasFrame
|
||||
? err.message.replace(codeframeRE, '')
|
||||
: err.message
|
||||
if (err.plugin) {
|
||||
this.text('.plugin', `[plugin:${err.plugin}] `)
|
||||
}
|
||||
this.text('.message-body', message.trim())
|
||||
|
||||
const [file] = (err.loc?.file || err.id || 'unknown file').split(`?`)
|
||||
if (err.loc) {
|
||||
this.text('.file', `${file}:${err.loc.line}:${err.loc.column}`, true)
|
||||
} else if (err.id) {
|
||||
this.text('.file', file)
|
||||
}
|
||||
|
||||
if (hasFrame) {
|
||||
this.text('.frame', err.frame!.trim())
|
||||
}
|
||||
this.text('.stack', err.stack, true)
|
||||
|
||||
this.root.querySelector('.window')!.addEventListener('click', (e) => {
|
||||
e.stopPropagation()
|
||||
})
|
||||
this.addEventListener('click', () => {
|
||||
this.close()
|
||||
})
|
||||
}
|
||||
|
||||
text(selector: string, text: string, linkFiles = false): void {
|
||||
const el = this.root.querySelector(selector)!
|
||||
if (!linkFiles) {
|
||||
el.textContent = text
|
||||
} else {
|
||||
let curIndex = 0
|
||||
let match: RegExpExecArray | null
|
||||
while ((match = fileRE.exec(text))) {
|
||||
const { 0: file, index } = match
|
||||
if (index != null) {
|
||||
const frag = text.slice(curIndex, index)
|
||||
el.appendChild(document.createTextNode(frag))
|
||||
const link = document.createElement('a')
|
||||
link.textContent = file
|
||||
link.className = 'file-link'
|
||||
link.onclick = () => {
|
||||
fetch('/__open-in-editor?file=' + encodeURIComponent(file))
|
||||
}
|
||||
el.appendChild(link)
|
||||
curIndex += frag.length + file.length
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
close(): void {
|
||||
this.parentNode?.removeChild(this)
|
||||
}
|
||||
}
|
||||
|
||||
export const overlayId = 'vite-error-overlay'
|
||||
const { customElements } = globalThis // Ensure `customElements` is defined before the next line.
|
||||
if (customElements && !customElements.get(overlayId)) {
|
||||
customElements.define(overlayId, ErrorOverlay)
|
||||
}
|
10
webui/node_modules/vite/src/client/tsconfig.json
generated
vendored
Normal file
10
webui/node_modules/vite/src/client/tsconfig.json
generated
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"extends": "../../tsconfig.base.json",
|
||||
"include": ["./", "../../types"],
|
||||
"compilerOptions": {
|
||||
"types": [],
|
||||
"target": "ES2019",
|
||||
"lib": ["ESNext", "DOM"],
|
||||
"declaration": false
|
||||
}
|
||||
}
|
59
webui/node_modules/vite/types/alias.d.ts
generated
vendored
Normal file
59
webui/node_modules/vite/types/alias.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
/**
|
||||
Types from https://github.com/rollup/plugins/blob/master/packages/alias/types/index.d.ts
|
||||
Inlined because the plugin is bundled.
|
||||
|
||||
https://github.com/rollup/plugins/blob/master/LICENSE
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2019 RollupJS Plugin Contributors (https://github.com/rollup/plugins/graphs/contributors)
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
import type { PluginHooks } from 'rollup'
|
||||
|
||||
export interface Alias {
|
||||
find: string | RegExp
|
||||
replacement: string
|
||||
/**
|
||||
* Instructs the plugin to use an alternative resolving algorithm,
|
||||
* rather than the Rollup's resolver.
|
||||
* @default null
|
||||
*/
|
||||
customResolver?: ResolverFunction | ResolverObject | null
|
||||
}
|
||||
|
||||
export type ResolverFunction = PluginHooks['resolveId']
|
||||
|
||||
export interface ResolverObject {
|
||||
buildStart?: PluginHooks['buildStart']
|
||||
resolveId: ResolverFunction
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies an `Object`, or an `Array` of `Object`,
|
||||
* which defines aliases used to replace values in `import` or `require` statements.
|
||||
* With either format, the order of the entries is important,
|
||||
* in that the first defined rules are applied first.
|
||||
*
|
||||
* This is passed to \@rollup/plugin-alias as the "entries" field
|
||||
* https://github.com/rollup/plugins/tree/master/packages/alias#entries
|
||||
*/
|
||||
export type AliasOptions = readonly Alias[] | { [find: string]: string }
|
5
webui/node_modules/vite/types/anymatch.d.ts
generated
vendored
Normal file
5
webui/node_modules/vite/types/anymatch.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
export type AnymatchFn = (testString: string) => boolean
|
||||
export type AnymatchPattern = string | RegExp | AnymatchFn
|
||||
type AnymatchMatcher = AnymatchPattern | AnymatchPattern[]
|
||||
|
||||
export { AnymatchMatcher as Matcher }
|
229
webui/node_modules/vite/types/chokidar.d.ts
generated
vendored
Normal file
229
webui/node_modules/vite/types/chokidar.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,229 @@
|
|||
// Inlined to avoid extra dependency (chokidar is bundled in the published build)
|
||||
|
||||
// https://github.com/paulmillr/chokidar/blob/master/types/index.d.ts
|
||||
// MIT Licensed https://github.com/paulmillr/chokidar/blob/master/LICENSE
|
||||
|
||||
/**
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2012-2019 Paul Miller (https://paulmillr.com), Elan Shanker
|
||||
|
||||
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.
|
||||
*/
|
||||
/// <reference types="node" />
|
||||
|
||||
import type * as fs from 'node:fs'
|
||||
import { EventEmitter } from 'node:events'
|
||||
import type { Matcher } from './anymatch'
|
||||
|
||||
export class FSWatcher extends EventEmitter implements fs.FSWatcher {
|
||||
options: WatchOptions
|
||||
|
||||
/**
|
||||
* Constructs a new FSWatcher instance with optional WatchOptions parameter.
|
||||
*/
|
||||
constructor(options?: WatchOptions)
|
||||
|
||||
/**
|
||||
* Add files, directories, or glob patterns for tracking. Takes an array of strings or just one
|
||||
* string.
|
||||
*/
|
||||
add(paths: string | ReadonlyArray<string>): this
|
||||
|
||||
/**
|
||||
* Stop watching files, directories, or glob patterns. Takes an array of strings or just one
|
||||
* string.
|
||||
*/
|
||||
unwatch(paths: string | ReadonlyArray<string>): this
|
||||
|
||||
/**
|
||||
* Returns an object representing all the paths on the file system being watched by this
|
||||
* `FSWatcher` instance. The object's keys are all the directories (using absolute paths unless
|
||||
* the `cwd` option was used), and the values are arrays of the names of the items contained in
|
||||
* each directory.
|
||||
*/
|
||||
getWatched(): {
|
||||
[directory: string]: string[]
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all listeners from watched files.
|
||||
*/
|
||||
close(): Promise<void>
|
||||
|
||||
on(
|
||||
event: 'add' | 'addDir' | 'change',
|
||||
listener: (path: string, stats?: fs.Stats) => void
|
||||
): this
|
||||
|
||||
on(
|
||||
event: 'all',
|
||||
listener: (
|
||||
eventName: 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir',
|
||||
path: string,
|
||||
stats?: fs.Stats
|
||||
) => void
|
||||
): this
|
||||
|
||||
/**
|
||||
* Error occurred
|
||||
*/
|
||||
on(event: 'error', listener: (error: Error) => void): this
|
||||
|
||||
/**
|
||||
* Exposes the native Node `fs.FSWatcher events`
|
||||
*/
|
||||
on(
|
||||
event: 'raw',
|
||||
listener: (eventName: string, path: string, details: any) => void
|
||||
): this
|
||||
|
||||
/**
|
||||
* Fires when the initial scan is complete
|
||||
*/
|
||||
on(event: 'ready', listener: () => void): this
|
||||
|
||||
on(event: 'unlink' | 'unlinkDir', listener: (path: string) => void): this
|
||||
|
||||
on(event: string, listener: (...args: any[]) => void): this
|
||||
}
|
||||
|
||||
export interface WatchOptions {
|
||||
/**
|
||||
* Indicates whether the process should continue to run as long as files are being watched. If
|
||||
* set to `false` when using `fsevents` to watch, no more events will be emitted after `ready`,
|
||||
* even if the process continues to run.
|
||||
*/
|
||||
persistent?: boolean
|
||||
|
||||
/**
|
||||
* ([anymatch](https://github.com/micromatch/anymatch)-compatible definition) Defines files/paths to
|
||||
* be ignored. The whole relative or absolute path is tested, not just filename. If a function
|
||||
* with two arguments is provided, it gets called twice per path - once with a single argument
|
||||
* (the path), second time with two arguments (the path and the
|
||||
* [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object of that path).
|
||||
*/
|
||||
ignored?: Matcher
|
||||
|
||||
/**
|
||||
* If set to `false` then `add`/`addDir` events are also emitted for matching paths while
|
||||
* instantiating the watching as chokidar discovers these file paths (before the `ready` event).
|
||||
*/
|
||||
ignoreInitial?: boolean
|
||||
|
||||
/**
|
||||
* When `false`, only the symlinks themselves will be watched for changes instead of following
|
||||
* the link references and bubbling events through the link's path.
|
||||
*/
|
||||
followSymlinks?: boolean
|
||||
|
||||
/**
|
||||
* The base directory from which watch `paths` are to be derived. Paths emitted with events will
|
||||
* be relative to this.
|
||||
*/
|
||||
cwd?: string
|
||||
|
||||
/**
|
||||
* If set to true then the strings passed to .watch() and .add() are treated as literal path
|
||||
* names, even if they look like globs.
|
||||
*
|
||||
* @default false
|
||||
*/
|
||||
disableGlobbing?: boolean
|
||||
|
||||
/**
|
||||
* Whether to use fs.watchFile (backed by polling), or fs.watch. If polling leads to high CPU
|
||||
* utilization, consider setting this to `false`. It is typically necessary to **set this to
|
||||
* `true` to successfully watch files over a network**, and it may be necessary to successfully
|
||||
* watch files in other non-standard situations. Setting to `true` explicitly on OS X overrides
|
||||
* the `useFsEvents` default.
|
||||
*/
|
||||
usePolling?: boolean
|
||||
|
||||
/**
|
||||
* Whether to use the `fsevents` watching interface if available. When set to `true` explicitly
|
||||
* and `fsevents` is available this supercedes the `usePolling` setting. When set to `false` on
|
||||
* OS X, `usePolling: true` becomes the default.
|
||||
*/
|
||||
useFsEvents?: boolean
|
||||
|
||||
/**
|
||||
* If relying upon the [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object that
|
||||
* may get passed with `add`, `addDir`, and `change` events, set this to `true` to ensure it is
|
||||
* provided even in cases where it wasn't already available from the underlying watch events.
|
||||
*/
|
||||
alwaysStat?: boolean
|
||||
|
||||
/**
|
||||
* If set, limits how many levels of subdirectories will be traversed.
|
||||
*/
|
||||
depth?: number
|
||||
|
||||
/**
|
||||
* Interval of file system polling.
|
||||
*/
|
||||
interval?: number
|
||||
|
||||
/**
|
||||
* Interval of file system polling for binary files. ([see list of binary extensions](https://gi
|
||||
* thub.com/sindresorhus/binary-extensions/blob/master/binary-extensions.json))
|
||||
*/
|
||||
binaryInterval?: number
|
||||
|
||||
/**
|
||||
* Indicates whether to watch files that don't have read permissions if possible. If watching
|
||||
* fails due to `EPERM` or `EACCES` with this set to `true`, the errors will be suppressed
|
||||
* silently.
|
||||
*/
|
||||
ignorePermissionErrors?: boolean
|
||||
|
||||
/**
|
||||
* `true` if `useFsEvents` and `usePolling` are `false`). Automatically filters out artifacts
|
||||
* that occur when using editors that use "atomic writes" instead of writing directly to the
|
||||
* source file. If a file is re-added within 100 ms of being deleted, Chokidar emits a `change`
|
||||
* event rather than `unlink` then `add`. If the default of 100 ms does not work well for you,
|
||||
* you can override it by setting `atomic` to a custom value, in milliseconds.
|
||||
*/
|
||||
atomic?: boolean | number
|
||||
|
||||
/**
|
||||
* can be set to an object in order to adjust timing params:
|
||||
*/
|
||||
awaitWriteFinish?: AwaitWriteFinishOptions | boolean
|
||||
}
|
||||
|
||||
export interface AwaitWriteFinishOptions {
|
||||
/**
|
||||
* Amount of time in milliseconds for a file size to remain constant before emitting its event.
|
||||
*/
|
||||
stabilityThreshold?: number
|
||||
|
||||
/**
|
||||
* File size polling interval.
|
||||
*/
|
||||
pollInterval?: number
|
||||
}
|
||||
|
||||
/**
|
||||
* produces an instance of `FSWatcher`.
|
||||
*/
|
||||
export function watch(
|
||||
paths: string | ReadonlyArray<string>,
|
||||
options?: WatchOptions
|
||||
): FSWatcher
|
230
webui/node_modules/vite/types/commonjs.d.ts
generated
vendored
Normal file
230
webui/node_modules/vite/types/commonjs.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,230 @@
|
|||
/**
|
||||
* https://github.com/rollup/plugins/blob/master/packages/commonjs/types/index.d.ts
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file at
|
||||
* https://github.com/rollup/plugins/blob/master/LICENSE
|
||||
*/
|
||||
export interface RollupCommonJSOptions {
|
||||
/**
|
||||
* A minimatch pattern, or array of patterns, which specifies the files in
|
||||
* the build the plugin should operate on. By default, all files with
|
||||
* extension `".cjs"` or those in `extensions` are included, but you can
|
||||
* narrow this list by only including specific files. These files will be
|
||||
* analyzed and transpiled if either the analysis does not find ES module
|
||||
* specific statements or `transformMixedEsModules` is `true`.
|
||||
* @default undefined
|
||||
*/
|
||||
include?: string | RegExp | readonly (string | RegExp)[]
|
||||
/**
|
||||
* A minimatch pattern, or array of patterns, which specifies the files in
|
||||
* the build the plugin should _ignore_. By default, all files with
|
||||
* extensions other than those in `extensions` or `".cjs"` are ignored, but you
|
||||
* can exclude additional files. See also the `include` option.
|
||||
* @default undefined
|
||||
*/
|
||||
exclude?: string | RegExp | readonly (string | RegExp)[]
|
||||
/**
|
||||
* For extensionless imports, search for extensions other than .js in the
|
||||
* order specified. Note that you need to make sure that non-JavaScript files
|
||||
* are transpiled by another plugin first.
|
||||
* @default [ '.js' ]
|
||||
*/
|
||||
extensions?: ReadonlyArray<string>
|
||||
/**
|
||||
* If true then uses of `global` won't be dealt with by this plugin
|
||||
* @default false
|
||||
*/
|
||||
ignoreGlobal?: boolean
|
||||
/**
|
||||
* If false, skips source map generation for CommonJS modules. This will
|
||||
* improve performance.
|
||||
* @default true
|
||||
*/
|
||||
sourceMap?: boolean
|
||||
/**
|
||||
* Some `require` calls cannot be resolved statically to be translated to
|
||||
* imports.
|
||||
* When this option is set to `false`, the generated code will either
|
||||
* directly throw an error when such a call is encountered or, when
|
||||
* `dynamicRequireTargets` is used, when such a call cannot be resolved with a
|
||||
* configured dynamic require target.
|
||||
* Setting this option to `true` will instead leave the `require` call in the
|
||||
* code or use it as a fallback for `dynamicRequireTargets`.
|
||||
* @default false
|
||||
*/
|
||||
ignoreDynamicRequires?: boolean
|
||||
/**
|
||||
* Instructs the plugin whether to enable mixed module transformations. This
|
||||
* is useful in scenarios with modules that contain a mix of ES `import`
|
||||
* statements and CommonJS `require` expressions. Set to `true` if `require`
|
||||
* calls should be transformed to imports in mixed modules, or `false` if the
|
||||
* `require` expressions should survive the transformation. The latter can be
|
||||
* important if the code contains environment detection, or you are coding
|
||||
* for an environment with special treatment for `require` calls such as
|
||||
* ElectronJS. See also the `ignore` option.
|
||||
* @default false
|
||||
*/
|
||||
transformMixedEsModules?: boolean
|
||||
/**
|
||||
* By default, this plugin will try to hoist `require` statements as imports
|
||||
* to the top of each file. While this works well for many code bases and
|
||||
* allows for very efficient ESM output, it does not perfectly capture
|
||||
* CommonJS semantics as the order of side effects like log statements may
|
||||
* change. But it is especially problematic when there are circular `require`
|
||||
* calls between CommonJS modules as those often rely on the lazy execution of
|
||||
* nested `require` calls.
|
||||
*
|
||||
* Setting this option to `true` will wrap all CommonJS files in functions
|
||||
* which are executed when they are required for the first time, preserving
|
||||
* NodeJS semantics. Note that this can have an impact on the size and
|
||||
* performance of the generated code.
|
||||
*
|
||||
* The default value of `"auto"` will only wrap CommonJS files when they are
|
||||
* part of a CommonJS dependency cycle, e.g. an index file that is required by
|
||||
* many of its dependencies. All other CommonJS files are hoisted. This is the
|
||||
* recommended setting for most code bases.
|
||||
*
|
||||
* `false` will entirely prevent wrapping and hoist all files. This may still
|
||||
* work depending on the nature of cyclic dependencies but will often cause
|
||||
* problems.
|
||||
*
|
||||
* You can also provide a minimatch pattern, or array of patterns, to only
|
||||
* specify a subset of files which should be wrapped in functions for proper
|
||||
* `require` semantics.
|
||||
*
|
||||
* `"debug"` works like `"auto"` but after bundling, it will display a warning
|
||||
* containing a list of ids that have been wrapped which can be used as
|
||||
* minimatch pattern for fine-tuning.
|
||||
* @default "auto"
|
||||
*/
|
||||
strictRequires?: boolean | string | RegExp | readonly (string | RegExp)[]
|
||||
/**
|
||||
* Sometimes you have to leave require statements unconverted. Pass an array
|
||||
* containing the IDs or a `id => boolean` function.
|
||||
* @default []
|
||||
*/
|
||||
ignore?: ReadonlyArray<string> | ((id: string) => boolean)
|
||||
/**
|
||||
* In most cases, where `require` calls are inside a `try-catch` clause,
|
||||
* they should be left unconverted as it requires an optional dependency
|
||||
* that may or may not be installed beside the rolled up package.
|
||||
* Due to the conversion of `require` to a static `import` - the call is
|
||||
* hoisted to the top of the file, outside of the `try-catch` clause.
|
||||
*
|
||||
* - `true`: All `require` calls inside a `try` will be left unconverted.
|
||||
* - `false`: All `require` calls inside a `try` will be converted as if the
|
||||
* `try-catch` clause is not there.
|
||||
* - `remove`: Remove all `require` calls from inside any `try` block.
|
||||
* - `string[]`: Pass an array containing the IDs to left unconverted.
|
||||
* - `((id: string) => boolean|'remove')`: Pass a function that control
|
||||
* individual IDs.
|
||||
*
|
||||
* @default false
|
||||
*/
|
||||
ignoreTryCatch?:
|
||||
| boolean
|
||||
| 'remove'
|
||||
| ReadonlyArray<string>
|
||||
| ((id: string) => boolean | 'remove')
|
||||
/**
|
||||
* Controls how to render imports from external dependencies. By default,
|
||||
* this plugin assumes that all external dependencies are CommonJS. This
|
||||
* means they are rendered as default imports to be compatible with e.g.
|
||||
* NodeJS where ES modules can only import a default export from a CommonJS
|
||||
* dependency.
|
||||
*
|
||||
* If you set `esmExternals` to `true`, this plugins assumes that all
|
||||
* external dependencies are ES modules and respect the
|
||||
* `requireReturnsDefault` option. If that option is not set, they will be
|
||||
* rendered as namespace imports.
|
||||
*
|
||||
* You can also supply an array of ids to be treated as ES modules, or a
|
||||
* function that will be passed each external id to determine if it is an ES
|
||||
* module.
|
||||
* @default false
|
||||
*/
|
||||
esmExternals?: boolean | ReadonlyArray<string> | ((id: string) => boolean)
|
||||
/**
|
||||
* Controls what is returned when requiring an ES module from a CommonJS file.
|
||||
* When using the `esmExternals` option, this will also apply to external
|
||||
* modules. By default, this plugin will render those imports as namespace
|
||||
* imports i.e.
|
||||
*
|
||||
* ```js
|
||||
* // input
|
||||
* const foo = require('foo');
|
||||
*
|
||||
* // output
|
||||
* import * as foo from 'foo';
|
||||
* ```
|
||||
*
|
||||
* However there are some situations where this may not be desired.
|
||||
* For these situations, you can change Rollup's behaviour either globally or
|
||||
* per module. To change it globally, set the `requireReturnsDefault` option
|
||||
* to one of the following values:
|
||||
*
|
||||
* - `false`: This is the default, requiring an ES module returns its
|
||||
* namespace. This is the only option that will also add a marker
|
||||
* `__esModule: true` to the namespace to support interop patterns in
|
||||
* CommonJS modules that are transpiled ES modules.
|
||||
* - `"namespace"`: Like `false`, requiring an ES module returns its
|
||||
* namespace, but the plugin does not add the `__esModule` marker and thus
|
||||
* creates more efficient code. For external dependencies when using
|
||||
* `esmExternals: true`, no additional interop code is generated.
|
||||
* - `"auto"`: This is complementary to how `output.exports: "auto"` works in
|
||||
* Rollup: If a module has a default export and no named exports, requiring
|
||||
* that module returns the default export. In all other cases, the namespace
|
||||
* is returned. For external dependencies when using `esmExternals: true`, a
|
||||
* corresponding interop helper is added.
|
||||
* - `"preferred"`: If a module has a default export, requiring that module
|
||||
* always returns the default export, no matter whether additional named
|
||||
* exports exist. This is similar to how previous versions of this plugin
|
||||
* worked. Again for external dependencies when using `esmExternals: true`,
|
||||
* an interop helper is added.
|
||||
* - `true`: This will always try to return the default export on require
|
||||
* without checking if it actually exists. This can throw at build time if
|
||||
* there is no default export. This is how external dependencies are handled
|
||||
* when `esmExternals` is not used. The advantage over the other options is
|
||||
* that, like `false`, this does not add an interop helper for external
|
||||
* dependencies, keeping the code lean.
|
||||
*
|
||||
* To change this for individual modules, you can supply a function for
|
||||
* `requireReturnsDefault` instead. This function will then be called once for
|
||||
* each required ES module or external dependency with the corresponding id
|
||||
* and allows you to return different values for different modules.
|
||||
* @default false
|
||||
*/
|
||||
requireReturnsDefault?:
|
||||
| boolean
|
||||
| 'auto'
|
||||
| 'preferred'
|
||||
| 'namespace'
|
||||
| ((id: string) => boolean | 'auto' | 'preferred' | 'namespace')
|
||||
|
||||
/**
|
||||
* @default "auto"
|
||||
*/
|
||||
defaultIsModuleExports?: boolean | 'auto' | ((id: string) => boolean | 'auto')
|
||||
/**
|
||||
* Some modules contain dynamic `require` calls, or require modules that
|
||||
* contain circular dependencies, which are not handled well by static
|
||||
* imports. Including those modules as `dynamicRequireTargets` will simulate a
|
||||
* CommonJS (NodeJS-like) environment for them with support for dynamic
|
||||
* dependencies. It also enables `strictRequires` for those modules.
|
||||
*
|
||||
* Note: In extreme cases, this feature may result in some paths being
|
||||
* rendered as absolute in the final bundle. The plugin tries to avoid
|
||||
* exposing paths from the local machine, but if you are `dynamicRequirePaths`
|
||||
* with paths that are far away from your project's folder, that may require
|
||||
* replacing strings like `"/Users/John/Desktop/foo-project/"` -\> `"/"`.
|
||||
*/
|
||||
dynamicRequireTargets?: string | ReadonlyArray<string>
|
||||
/**
|
||||
* To avoid long paths when using the `dynamicRequireTargets` option, you can use this option to specify a directory
|
||||
* that is a common parent for all files that use dynamic require statements. Using a directory higher up such as `/`
|
||||
* may lead to unnecessarily long paths in the generated code and may expose directory names on your machine like your
|
||||
* home directory name. By default it uses the current working directory.
|
||||
*/
|
||||
dynamicRequireRoot?: string
|
||||
}
|
111
webui/node_modules/vite/types/connect.d.ts
generated
vendored
Normal file
111
webui/node_modules/vite/types/connect.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,111 @@
|
|||
// Inlined to avoid extra dependency
|
||||
// MIT Licensed https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
|
||||
|
||||
// Type definitions for connect v3.4.0
|
||||
// Project: https://github.com/senchalabs/connect
|
||||
// Definitions by: Maxime LUCE <https://github.com/SomaticIT>
|
||||
// Evan Hahn <https://github.com/EvanHahn>
|
||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||
|
||||
/// <reference types="node" />
|
||||
import * as http from 'node:http'
|
||||
|
||||
export namespace Connect {
|
||||
export type ServerHandle = HandleFunction | http.Server
|
||||
|
||||
export class IncomingMessage extends http.IncomingMessage {
|
||||
originalUrl?: http.IncomingMessage['url'] | undefined
|
||||
}
|
||||
|
||||
export type NextFunction = (err?: any) => void
|
||||
|
||||
export type SimpleHandleFunction = (
|
||||
req: IncomingMessage,
|
||||
res: http.ServerResponse
|
||||
) => void
|
||||
export type NextHandleFunction = (
|
||||
req: IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
next: NextFunction
|
||||
) => void
|
||||
export type ErrorHandleFunction = (
|
||||
err: any,
|
||||
req: IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
next: NextFunction
|
||||
) => void
|
||||
export type HandleFunction =
|
||||
| SimpleHandleFunction
|
||||
| NextHandleFunction
|
||||
| ErrorHandleFunction
|
||||
|
||||
export interface ServerStackItem {
|
||||
route: string
|
||||
handle: ServerHandle
|
||||
}
|
||||
|
||||
export interface Server extends NodeJS.EventEmitter {
|
||||
(req: http.IncomingMessage, res: http.ServerResponse, next?: Function): void
|
||||
|
||||
route: string
|
||||
stack: ServerStackItem[]
|
||||
|
||||
/**
|
||||
* Utilize the given middleware `handle` to the given `route`,
|
||||
* defaulting to _/_. This "route" is the mount-point for the
|
||||
* middleware, when given a value other than _/_ the middleware
|
||||
* is only effective when that segment is present in the request's
|
||||
* pathname.
|
||||
*
|
||||
* For example if we were to mount a function at _/admin_, it would
|
||||
* be invoked on _/admin_, and _/admin/settings_, however it would
|
||||
* not be invoked for _/_, or _/posts_.
|
||||
*/
|
||||
use(fn: NextHandleFunction): Server
|
||||
use(fn: HandleFunction): Server
|
||||
use(route: string, fn: NextHandleFunction): Server
|
||||
use(route: string, fn: HandleFunction): Server
|
||||
|
||||
/**
|
||||
* Handle server requests, punting them down
|
||||
* the middleware stack.
|
||||
*/
|
||||
handle(
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
next: Function
|
||||
): void
|
||||
|
||||
/**
|
||||
* Listen for connections.
|
||||
*
|
||||
* This method takes the same arguments
|
||||
* as node's `http.Server#listen()`.
|
||||
*
|
||||
* HTTP and HTTPS:
|
||||
*
|
||||
* If you run your application both as HTTP
|
||||
* and HTTPS you may wrap them individually,
|
||||
* since your Connect "server" is really just
|
||||
* a JavaScript `Function`.
|
||||
*
|
||||
* var connect = require('connect')
|
||||
* , http = require('http')
|
||||
* , https = require('https');
|
||||
*
|
||||
* var app = connect();
|
||||
*
|
||||
* http.createServer(app).listen(80);
|
||||
* https.createServer(options, app).listen(443);
|
||||
*/
|
||||
listen(
|
||||
port: number,
|
||||
hostname?: string,
|
||||
backlog?: number,
|
||||
callback?: Function
|
||||
): http.Server
|
||||
listen(port: number, hostname?: string, callback?: Function): http.Server
|
||||
listen(path: string, callback?: Function): http.Server
|
||||
listen(handle: any, listeningListener?: Function): http.Server
|
||||
}
|
||||
}
|
16
webui/node_modules/vite/types/customEvent.d.ts
generated
vendored
Normal file
16
webui/node_modules/vite/types/customEvent.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
import type {
|
||||
ErrorPayload,
|
||||
FullReloadPayload,
|
||||
PrunePayload,
|
||||
UpdatePayload
|
||||
} from './hmrPayload'
|
||||
|
||||
export interface CustomEventMap {
|
||||
'vite:beforeUpdate': UpdatePayload
|
||||
'vite:beforePrune': PrunePayload
|
||||
'vite:beforeFullReload': FullReloadPayload
|
||||
'vite:error': ErrorPayload
|
||||
}
|
||||
|
||||
export type InferCustomEventPayload<T extends string> =
|
||||
T extends keyof CustomEventMap ? CustomEventMap[T] : any
|
17
webui/node_modules/vite/types/dynamicImportVars.d.ts
generated
vendored
Normal file
17
webui/node_modules/vite/types/dynamicImportVars.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
export interface RollupDynamicImportVarsOptions {
|
||||
/**
|
||||
* Files to include in this plugin (default all).
|
||||
* @default []
|
||||
*/
|
||||
include?: string | RegExp | (string | RegExp)[]
|
||||
/**
|
||||
* Files to exclude in this plugin (default none).
|
||||
* @default []
|
||||
*/
|
||||
exclude?: string | RegExp | (string | RegExp)[]
|
||||
/**
|
||||
* By default, the plugin quits the build process when it encounters an error. If you set this option to true, it will throw a warning instead and leave the code untouched.
|
||||
* @default false
|
||||
*/
|
||||
warnOnError?: boolean
|
||||
}
|
57
webui/node_modules/vite/types/hmrPayload.d.ts
generated
vendored
Normal file
57
webui/node_modules/vite/types/hmrPayload.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
export type HMRPayload =
|
||||
| ConnectedPayload
|
||||
| UpdatePayload
|
||||
| FullReloadPayload
|
||||
| CustomPayload
|
||||
| ErrorPayload
|
||||
| PrunePayload
|
||||
|
||||
export interface ConnectedPayload {
|
||||
type: 'connected'
|
||||
}
|
||||
|
||||
export interface UpdatePayload {
|
||||
type: 'update'
|
||||
updates: Update[]
|
||||
}
|
||||
|
||||
export interface Update {
|
||||
type: 'js-update' | 'css-update'
|
||||
path: string
|
||||
acceptedPath: string
|
||||
timestamp: number
|
||||
}
|
||||
|
||||
export interface PrunePayload {
|
||||
type: 'prune'
|
||||
paths: string[]
|
||||
}
|
||||
|
||||
export interface FullReloadPayload {
|
||||
type: 'full-reload'
|
||||
path?: string
|
||||
}
|
||||
|
||||
export interface CustomPayload {
|
||||
type: 'custom'
|
||||
event: string
|
||||
data?: any
|
||||
}
|
||||
|
||||
export interface ErrorPayload {
|
||||
type: 'error'
|
||||
err: {
|
||||
[name: string]: any
|
||||
message: string
|
||||
stack: string
|
||||
id?: string
|
||||
frame?: string
|
||||
plugin?: string
|
||||
pluginCode?: string
|
||||
loc?: {
|
||||
file?: string
|
||||
line: number
|
||||
column: number
|
||||
}
|
||||
}
|
||||
}
|
33
webui/node_modules/vite/types/hot.d.ts
generated
vendored
Normal file
33
webui/node_modules/vite/types/hot.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,33 @@
|
|||
import type { InferCustomEventPayload } from './customEvent'
|
||||
|
||||
export type ModuleNamespace = Record<string, any> & {
|
||||
[Symbol.toStringTag]: 'Module'
|
||||
}
|
||||
|
||||
export interface ViteHotContext {
|
||||
readonly data: any
|
||||
|
||||
accept(): void
|
||||
accept(cb: (mod: ModuleNamespace | undefined) => void): void
|
||||
accept(dep: string, cb: (mod: ModuleNamespace | undefined) => void): void
|
||||
accept(
|
||||
deps: readonly string[],
|
||||
cb: (mods: Array<ModuleNamespace | undefined>) => void
|
||||
): void
|
||||
|
||||
acceptExports(exportNames: string | readonly string[]): void
|
||||
acceptExports(
|
||||
exportNames: string | readonly string[],
|
||||
cb: (mod: ModuleNamespace | undefined) => void
|
||||
): void
|
||||
|
||||
dispose(cb: (data: any) => void): void
|
||||
decline(): void
|
||||
invalidate(): void
|
||||
|
||||
on<T extends string>(
|
||||
event: T,
|
||||
cb: (payload: InferCustomEventPayload<T>) => void
|
||||
): void
|
||||
send<T extends string>(event: T, data?: InferCustomEventPayload<T>): void
|
||||
}
|
250
webui/node_modules/vite/types/http-proxy.d.ts
generated
vendored
Normal file
250
webui/node_modules/vite/types/http-proxy.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,250 @@
|
|||
// Inlined to avoid extra dependency
|
||||
// MIT Licensed https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
|
||||
|
||||
// Type definitions for node-http-proxy 1.17
|
||||
// Project: https://github.com/nodejitsu/node-http-proxy
|
||||
// Definitions by: Maxime LUCE <https://github.com/SomaticIT>
|
||||
// Florian Oellerich <https://github.com/Raigen>
|
||||
// Daniel Schmidt <https://github.com/DanielMSchmidt>
|
||||
// Jordan Abreu <https://github.com/jabreu610>
|
||||
// Samuel Bodin <https://github.com/bodinsamuel>
|
||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||
// TypeScript Version: 2.1
|
||||
|
||||
/// <reference types="node" />
|
||||
|
||||
import type * as net from 'node:net'
|
||||
import type * as http from 'node:http'
|
||||
import * as events from 'node:events'
|
||||
import type * as url from 'node:url'
|
||||
import type * as stream from 'node:stream'
|
||||
|
||||
export namespace HttpProxy {
|
||||
export type ProxyTarget = ProxyTargetUrl | ProxyTargetDetailed
|
||||
|
||||
export type ProxyTargetUrl = string | Partial<url.Url>
|
||||
|
||||
export interface ProxyTargetDetailed {
|
||||
host: string
|
||||
port: number
|
||||
protocol?: string | undefined
|
||||
hostname?: string | undefined
|
||||
socketPath?: string | undefined
|
||||
key?: string | undefined
|
||||
passphrase?: string | undefined
|
||||
pfx?: Buffer | string | undefined
|
||||
cert?: string | undefined
|
||||
ca?: string | undefined
|
||||
ciphers?: string | undefined
|
||||
secureProtocol?: string | undefined
|
||||
}
|
||||
|
||||
export type ErrorCallback = (
|
||||
err: Error,
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
target?: ProxyTargetUrl
|
||||
) => void
|
||||
|
||||
export class Server extends events.EventEmitter {
|
||||
/**
|
||||
* Creates the proxy server with specified options.
|
||||
* @param options - Config object passed to the proxy
|
||||
*/
|
||||
constructor(options?: ServerOptions)
|
||||
|
||||
/**
|
||||
* Used for proxying regular HTTP(S) requests
|
||||
* @param req - Client request.
|
||||
* @param res - Client response.
|
||||
* @param options - Additional options.
|
||||
*/
|
||||
web(
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
options?: ServerOptions,
|
||||
callback?: ErrorCallback
|
||||
): void
|
||||
|
||||
/**
|
||||
* Used for proxying regular HTTP(S) requests
|
||||
* @param req - Client request.
|
||||
* @param socket - Client socket.
|
||||
* @param head - Client head.
|
||||
* @param options - Additional options.
|
||||
*/
|
||||
ws(
|
||||
req: http.IncomingMessage,
|
||||
socket: unknown,
|
||||
head: unknown,
|
||||
options?: ServerOptions,
|
||||
callback?: ErrorCallback
|
||||
): void
|
||||
|
||||
/**
|
||||
* A function that wraps the object in a webserver, for your convenience
|
||||
* @param port - Port to listen on
|
||||
*/
|
||||
listen(port: number): Server
|
||||
|
||||
/**
|
||||
* A function that closes the inner webserver and stops listening on given port
|
||||
*/
|
||||
close(callback?: () => void): void
|
||||
|
||||
/**
|
||||
* Creates the proxy server with specified options.
|
||||
* @param options - Config object passed to the proxy
|
||||
* @returns Proxy object with handlers for `ws` and `web` requests
|
||||
*/
|
||||
static createProxyServer(options?: ServerOptions): Server
|
||||
|
||||
/**
|
||||
* Creates the proxy server with specified options.
|
||||
* @param options - Config object passed to the proxy
|
||||
* @returns Proxy object with handlers for `ws` and `web` requests
|
||||
*/
|
||||
static createServer(options?: ServerOptions): Server
|
||||
|
||||
/**
|
||||
* Creates the proxy server with specified options.
|
||||
* @param options - Config object passed to the proxy
|
||||
* @returns Proxy object with handlers for `ws` and `web` requests
|
||||
*/
|
||||
static createProxy(options?: ServerOptions): Server
|
||||
|
||||
addListener(event: string, listener: () => void): this
|
||||
on(event: string, listener: () => void): this
|
||||
on(event: 'error', listener: ErrorCallback): this
|
||||
on(
|
||||
event: 'start',
|
||||
listener: (
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
target: ProxyTargetUrl
|
||||
) => void
|
||||
): this
|
||||
on(
|
||||
event: 'proxyReq',
|
||||
listener: (
|
||||
proxyReq: http.ClientRequest,
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
options: ServerOptions
|
||||
) => void
|
||||
): this
|
||||
on(
|
||||
event: 'proxyRes',
|
||||
listener: (
|
||||
proxyRes: http.IncomingMessage,
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse
|
||||
) => void
|
||||
): this
|
||||
on(
|
||||
event: 'proxyReqWs',
|
||||
listener: (
|
||||
proxyReq: http.ClientRequest,
|
||||
req: http.IncomingMessage,
|
||||
socket: net.Socket,
|
||||
options: ServerOptions,
|
||||
head: any
|
||||
) => void
|
||||
): this
|
||||
on(
|
||||
event: 'econnreset',
|
||||
listener: (
|
||||
err: Error,
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
target: ProxyTargetUrl
|
||||
) => void
|
||||
): this
|
||||
on(
|
||||
event: 'end',
|
||||
listener: (
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
proxyRes: http.IncomingMessage
|
||||
) => void
|
||||
): this
|
||||
on(
|
||||
event: 'close',
|
||||
listener: (
|
||||
proxyRes: http.IncomingMessage,
|
||||
proxySocket: net.Socket,
|
||||
proxyHead: any
|
||||
) => void
|
||||
): this
|
||||
|
||||
once(event: string, listener: () => void): this
|
||||
removeListener(event: string, listener: () => void): this
|
||||
removeAllListeners(event?: string): this
|
||||
getMaxListeners(): number
|
||||
setMaxListeners(n: number): this
|
||||
listeners(event: string): Array<() => void>
|
||||
emit(event: string, ...args: any[]): boolean
|
||||
listenerCount(type: string): number
|
||||
}
|
||||
|
||||
export interface ServerOptions {
|
||||
/** URL string to be parsed with the url module. */
|
||||
target?: ProxyTarget | undefined
|
||||
/** URL string to be parsed with the url module. */
|
||||
forward?: ProxyTargetUrl | undefined
|
||||
/** Object to be passed to http(s).request. */
|
||||
agent?: any
|
||||
/** Object to be passed to https.createServer(). */
|
||||
ssl?: any
|
||||
/** If you want to proxy websockets. */
|
||||
ws?: boolean | undefined
|
||||
/** Adds x- forward headers. */
|
||||
xfwd?: boolean | undefined
|
||||
/** Verify SSL certificate. */
|
||||
secure?: boolean | undefined
|
||||
/** Explicitly specify if we are proxying to another proxy. */
|
||||
toProxy?: boolean | undefined
|
||||
/** Specify whether you want to prepend the target's path to the proxy path. */
|
||||
prependPath?: boolean | undefined
|
||||
/** Specify whether you want to ignore the proxy path of the incoming request. */
|
||||
ignorePath?: boolean | undefined
|
||||
/** Local interface string to bind for outgoing connections. */
|
||||
localAddress?: string | undefined
|
||||
/** Changes the origin of the host header to the target URL. */
|
||||
changeOrigin?: boolean | undefined
|
||||
/** specify whether you want to keep letter case of response header key */
|
||||
preserveHeaderKeyCase?: boolean | undefined
|
||||
/** Basic authentication i.e. 'user:password' to compute an Authorization header. */
|
||||
auth?: string | undefined
|
||||
/** Rewrites the location hostname on (301 / 302 / 307 / 308) redirects, Default: null. */
|
||||
hostRewrite?: string | undefined
|
||||
/** Rewrites the location host/ port on (301 / 302 / 307 / 308) redirects based on requested host/ port.Default: false. */
|
||||
autoRewrite?: boolean | undefined
|
||||
/** Rewrites the location protocol on (301 / 302 / 307 / 308) redirects to 'http' or 'https'.Default: null. */
|
||||
protocolRewrite?: string | undefined
|
||||
/** rewrites domain of set-cookie headers. */
|
||||
cookieDomainRewrite?:
|
||||
| false
|
||||
| string
|
||||
| { [oldDomain: string]: string }
|
||||
| undefined
|
||||
/** rewrites path of set-cookie headers. Default: false */
|
||||
cookiePathRewrite?:
|
||||
| false
|
||||
| string
|
||||
| { [oldPath: string]: string }
|
||||
| undefined
|
||||
/** object with extra headers to be added to target requests. */
|
||||
headers?: { [header: string]: string } | undefined
|
||||
/** Timeout (in milliseconds) when proxy receives no response from target. Default: 120000 (2 minutes) */
|
||||
proxyTimeout?: number | undefined
|
||||
/** Timeout (in milliseconds) for incoming requests */
|
||||
timeout?: number | undefined
|
||||
/** Specify whether you want to follow redirects. Default: false */
|
||||
followRedirects?: boolean | undefined
|
||||
/** If set to true, none of the webOutgoing passes are called and it's your responsibility to appropriately return the response by listening and acting on the proxyRes event */
|
||||
selfHandleResponse?: boolean | undefined
|
||||
/** Buffer */
|
||||
buffer?: stream.Stream | undefined
|
||||
}
|
||||
}
|
97
webui/node_modules/vite/types/importGlob.d.ts
generated
vendored
Normal file
97
webui/node_modules/vite/types/importGlob.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,97 @@
|
|||
export interface ImportGlobOptions<
|
||||
Eager extends boolean,
|
||||
AsType extends string
|
||||
> {
|
||||
/**
|
||||
* Import type for the import url.
|
||||
*/
|
||||
as?: AsType
|
||||
/**
|
||||
* Import as static or dynamic
|
||||
*
|
||||
* @default false
|
||||
*/
|
||||
eager?: Eager
|
||||
/**
|
||||
* Import only the specific named export. Set to `default` to import the default export.
|
||||
*/
|
||||
import?: string
|
||||
/**
|
||||
* Custom queries
|
||||
*/
|
||||
query?: string | Record<string, string | number | boolean>
|
||||
/**
|
||||
* Search files also inside `node_modules/` and hidden directories (e.g. `.git/`). This might have impact on performance.
|
||||
*
|
||||
* @default false
|
||||
*/
|
||||
exhaustive?: boolean
|
||||
}
|
||||
|
||||
export type GeneralImportGlobOptions = ImportGlobOptions<boolean, string>
|
||||
|
||||
export interface KnownAsTypeMap {
|
||||
raw: string
|
||||
url: string
|
||||
worker: Worker
|
||||
}
|
||||
|
||||
export interface ImportGlobFunction {
|
||||
/**
|
||||
* Import a list of files with a glob pattern.
|
||||
*
|
||||
* Overload 1: No generic provided, infer the type from `eager` and `as`
|
||||
*/
|
||||
<
|
||||
Eager extends boolean,
|
||||
As extends string,
|
||||
T = As extends keyof KnownAsTypeMap ? KnownAsTypeMap[As] : unknown
|
||||
>(
|
||||
glob: string | string[],
|
||||
options?: ImportGlobOptions<Eager, As>
|
||||
): (Eager extends true ? true : false) extends true
|
||||
? Record<string, T>
|
||||
: Record<string, () => Promise<T>>
|
||||
/**
|
||||
* Import a list of files with a glob pattern.
|
||||
*
|
||||
* Overload 2: Module generic provided, infer the type from `eager: false`
|
||||
*/
|
||||
<M>(
|
||||
glob: string | string[],
|
||||
options?: ImportGlobOptions<false, string>
|
||||
): Record<string, () => Promise<M>>
|
||||
/**
|
||||
* Import a list of files with a glob pattern.
|
||||
*
|
||||
* Overload 3: Module generic provided, infer the type from `eager: true`
|
||||
*/
|
||||
<M>(
|
||||
glob: string | string[],
|
||||
options: ImportGlobOptions<true, string>
|
||||
): Record<string, M>
|
||||
}
|
||||
|
||||
export interface ImportGlobEagerFunction {
|
||||
/**
|
||||
* Eagerly import a list of files with a glob pattern.
|
||||
*
|
||||
* Overload 1: No generic provided, infer the type from `as`
|
||||
*/
|
||||
<
|
||||
As extends string,
|
||||
T = As extends keyof KnownAsTypeMap ? KnownAsTypeMap[As] : unknown
|
||||
>(
|
||||
glob: string | string[],
|
||||
options?: Omit<ImportGlobOptions<boolean, As>, 'eager'>
|
||||
): Record<string, T>
|
||||
/**
|
||||
* Eagerly import a list of files with a glob pattern.
|
||||
*
|
||||
* Overload 2: Module generic provided
|
||||
*/
|
||||
<M>(
|
||||
glob: string | string[],
|
||||
options?: Omit<ImportGlobOptions<boolean, string>, 'eager'>
|
||||
): Record<string, M>
|
||||
}
|
35
webui/node_modules/vite/types/importMeta.d.ts
generated
vendored
Normal file
35
webui/node_modules/vite/types/importMeta.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
// This file is an augmentation to the built-in ImportMeta interface
|
||||
// Thus cannot contain any top-level imports
|
||||
// <https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation>
|
||||
|
||||
/* eslint-disable @typescript-eslint/consistent-type-imports */
|
||||
|
||||
// Duplicate of import('../src/node/importGlob').GlobOptions in order to
|
||||
// avoid breaking the production client type. Because this file is referenced
|
||||
// in vite/client.d.ts and in production src/node/importGlob.ts doesn't exist.
|
||||
interface GlobOptions {
|
||||
as?: string
|
||||
}
|
||||
|
||||
interface ImportMeta {
|
||||
url: string
|
||||
|
||||
readonly hot?: import('./hot').ViteHotContext
|
||||
|
||||
readonly env: ImportMetaEnv
|
||||
|
||||
glob: import('./importGlob').ImportGlobFunction
|
||||
/**
|
||||
* @deprecated Use `import.meta.glob('*', { eager: true })` instead
|
||||
*/
|
||||
globEager: import('./importGlob').ImportGlobEagerFunction
|
||||
}
|
||||
|
||||
interface ImportMetaEnv {
|
||||
[key: string]: any
|
||||
BASE_URL: string
|
||||
MODE: string
|
||||
DEV: boolean
|
||||
PROD: boolean
|
||||
SSR: boolean
|
||||
}
|
3
webui/node_modules/vite/types/package.json
generated
vendored
Normal file
3
webui/node_modules/vite/types/package.json
generated
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"//": "this file is just here to make pnpm happy with --frozen-lockfile"
|
||||
}
|
95
webui/node_modules/vite/types/shims.d.ts
generated
vendored
Normal file
95
webui/node_modules/vite/types/shims.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,95 @@
|
|||
declare module 'connect' {
|
||||
const connect: () => any
|
||||
export = connect
|
||||
}
|
||||
|
||||
declare module 'cors' {
|
||||
function cors(options: any): any
|
||||
export = cors
|
||||
}
|
||||
|
||||
declare module 'selfsigned' {
|
||||
export function generate(attrs: any, options: any, done?: any): any
|
||||
}
|
||||
|
||||
declare module 'http-proxy' {
|
||||
const proxy: any
|
||||
export = proxy
|
||||
}
|
||||
|
||||
declare module 'connect-history-api-fallback' {
|
||||
const plugin: any
|
||||
export = plugin
|
||||
}
|
||||
|
||||
declare module 'launch-editor-middleware' {
|
||||
const plugin: any
|
||||
export = plugin
|
||||
}
|
||||
|
||||
declare module 'postcss-load-config' {
|
||||
import type { Plugin, ProcessOptions } from 'postcss'
|
||||
function load(
|
||||
inline: any,
|
||||
root: string
|
||||
): Promise<{
|
||||
options: ProcessOptions
|
||||
plugins: Plugin[]
|
||||
}>
|
||||
export = load
|
||||
}
|
||||
|
||||
declare module 'postcss-import' {
|
||||
import type { Plugin } from 'postcss'
|
||||
const plugin: (options: {
|
||||
resolve: (
|
||||
id: string,
|
||||
basedir: string,
|
||||
importOptions: any
|
||||
) => string | string[] | Promise<string | string[]>
|
||||
}) => Plugin
|
||||
export = plugin
|
||||
}
|
||||
|
||||
declare module 'postcss-modules' {
|
||||
import type { Plugin } from 'postcss'
|
||||
const plugin: (options: any) => Plugin
|
||||
export = plugin
|
||||
}
|
||||
|
||||
declare module '@rollup/plugin-dynamic-import-vars' {
|
||||
import type { Plugin } from 'rollup'
|
||||
import type { BaseNode } from 'estree'
|
||||
|
||||
interface Options {
|
||||
include?: string | RegExp | (string | RegExp)[]
|
||||
exclude?: string | RegExp | (string | RegExp)[]
|
||||
warnOnError?: boolean
|
||||
}
|
||||
|
||||
const p: (o?: Options) => Plugin
|
||||
export default p
|
||||
export function dynamicImportToGlob(
|
||||
ast: BaseNode,
|
||||
source: string
|
||||
): null | string
|
||||
}
|
||||
|
||||
declare module 'rollup-plugin-web-worker-loader' {
|
||||
import type { Plugin } from 'rollup'
|
||||
|
||||
interface Options {
|
||||
targetPlatform?: string
|
||||
pattern?: RegExp
|
||||
extensions?: string[]
|
||||
sourcemap?: boolean
|
||||
inline?: boolean
|
||||
}
|
||||
|
||||
const p: (o?: Options) => Plugin
|
||||
export default p
|
||||
}
|
||||
|
||||
// LESS' types somewhat references this which doesn't make sense in Node,
|
||||
// so we have to shim it
|
||||
declare interface HTMLLinkElement {}
|
250
webui/node_modules/vite/types/terser.d.ts
generated
vendored
Normal file
250
webui/node_modules/vite/types/terser.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,250 @@
|
|||
// Modified and inlined to avoid extra dependency
|
||||
// Source: https://github.com/terser/terser/blob/master/tools/terser.d.ts
|
||||
// BSD Licensed https://github.com/terser/terser/blob/master/LICENSE
|
||||
|
||||
/*
|
||||
Terser is released under the BSD license:
|
||||
|
||||
Copyright 2012-2018 (c) Mihai Bazon <mihai.bazon@gmail.com>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials
|
||||
provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
|
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
||||
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
export namespace Terser {
|
||||
export type ECMA = 5 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020
|
||||
|
||||
export interface ParseOptions {
|
||||
bare_returns?: boolean
|
||||
/** @deprecated legacy option. Currently, all supported EcmaScript is valid to parse. */
|
||||
ecma?: ECMA
|
||||
html5_comments?: boolean
|
||||
shebang?: boolean
|
||||
}
|
||||
|
||||
export interface CompressOptions {
|
||||
arguments?: boolean
|
||||
arrows?: boolean
|
||||
booleans_as_integers?: boolean
|
||||
booleans?: boolean
|
||||
collapse_vars?: boolean
|
||||
comparisons?: boolean
|
||||
computed_props?: boolean
|
||||
conditionals?: boolean
|
||||
dead_code?: boolean
|
||||
defaults?: boolean
|
||||
directives?: boolean
|
||||
drop_console?: boolean
|
||||
drop_debugger?: boolean
|
||||
ecma?: ECMA
|
||||
evaluate?: boolean
|
||||
expression?: boolean
|
||||
global_defs?: object
|
||||
hoist_funs?: boolean
|
||||
hoist_props?: boolean
|
||||
hoist_vars?: boolean
|
||||
ie8?: boolean
|
||||
if_return?: boolean
|
||||
inline?: boolean | InlineFunctions
|
||||
join_vars?: boolean
|
||||
keep_classnames?: boolean | RegExp
|
||||
keep_fargs?: boolean
|
||||
keep_fnames?: boolean | RegExp
|
||||
keep_infinity?: boolean
|
||||
loops?: boolean
|
||||
module?: boolean
|
||||
negate_iife?: boolean
|
||||
passes?: number
|
||||
properties?: boolean
|
||||
pure_funcs?: string[]
|
||||
pure_getters?: boolean | 'strict'
|
||||
reduce_funcs?: boolean
|
||||
reduce_vars?: boolean
|
||||
sequences?: boolean | number
|
||||
side_effects?: boolean
|
||||
switches?: boolean
|
||||
toplevel?: boolean
|
||||
top_retain?: null | string | string[] | RegExp
|
||||
typeofs?: boolean
|
||||
unsafe_arrows?: boolean
|
||||
unsafe?: boolean
|
||||
unsafe_comps?: boolean
|
||||
unsafe_Function?: boolean
|
||||
unsafe_math?: boolean
|
||||
unsafe_symbols?: boolean
|
||||
unsafe_methods?: boolean
|
||||
unsafe_proto?: boolean
|
||||
unsafe_regexp?: boolean
|
||||
unsafe_undefined?: boolean
|
||||
unused?: boolean
|
||||
}
|
||||
|
||||
export enum InlineFunctions {
|
||||
Disabled = 0,
|
||||
SimpleFunctions = 1,
|
||||
WithArguments = 2,
|
||||
WithArgumentsAndVariables = 3
|
||||
}
|
||||
|
||||
export interface MangleOptions {
|
||||
eval?: boolean
|
||||
keep_classnames?: boolean | RegExp
|
||||
keep_fnames?: boolean | RegExp
|
||||
module?: boolean
|
||||
nth_identifier?: SimpleIdentifierMangler | WeightedIdentifierMangler
|
||||
properties?: boolean | ManglePropertiesOptions
|
||||
reserved?: string[]
|
||||
safari10?: boolean
|
||||
toplevel?: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* An identifier mangler for which the output is invariant with respect to the source code.
|
||||
*/
|
||||
export interface SimpleIdentifierMangler {
|
||||
/**
|
||||
* Obtains the nth most favored (usually shortest) identifier to rename a variable to.
|
||||
* The mangler will increment n and retry until the return value is not in use in scope, and is not a reserved word.
|
||||
* This function is expected to be stable; Evaluating get(n) === get(n) should always return true.
|
||||
* @param n - The ordinal of the identifier.
|
||||
*/
|
||||
get(n: number): string
|
||||
}
|
||||
|
||||
/**
|
||||
* An identifier mangler that leverages character frequency analysis to determine identifier precedence.
|
||||
*/
|
||||
export interface WeightedIdentifierMangler extends SimpleIdentifierMangler {
|
||||
/**
|
||||
* Modifies the internal weighting of the input characters by the specified delta.
|
||||
* Will be invoked on the entire printed AST, and then deduct mangleable identifiers.
|
||||
* @param chars - The characters to modify the weighting of.
|
||||
* @param delta - The numeric weight to add to the characters.
|
||||
*/
|
||||
consider(chars: string, delta: number): number
|
||||
/**
|
||||
* Resets character weights.
|
||||
*/
|
||||
reset(): void
|
||||
/**
|
||||
* Sorts identifiers by character frequency, in preparation for calls to get(n).
|
||||
*/
|
||||
sort(): void
|
||||
}
|
||||
|
||||
export interface ManglePropertiesOptions {
|
||||
builtins?: boolean
|
||||
debug?: boolean
|
||||
keep_quoted?: boolean | 'strict'
|
||||
nth_identifier?: SimpleIdentifierMangler | WeightedIdentifierMangler
|
||||
regex?: RegExp | string
|
||||
reserved?: string[]
|
||||
}
|
||||
|
||||
export interface FormatOptions {
|
||||
ascii_only?: boolean
|
||||
/** @deprecated Not implemented anymore */
|
||||
beautify?: boolean
|
||||
braces?: boolean
|
||||
comments?:
|
||||
| boolean
|
||||
| 'all'
|
||||
| 'some'
|
||||
| RegExp
|
||||
| ((
|
||||
node: any,
|
||||
comment: {
|
||||
value: string
|
||||
type: 'comment1' | 'comment2' | 'comment3' | 'comment4'
|
||||
pos: number
|
||||
line: number
|
||||
col: number
|
||||
}
|
||||
) => boolean)
|
||||
ecma?: ECMA
|
||||
ie8?: boolean
|
||||
keep_numbers?: boolean
|
||||
indent_level?: number
|
||||
indent_start?: number
|
||||
inline_script?: boolean
|
||||
keep_quoted_props?: boolean
|
||||
max_line_len?: number | false
|
||||
preamble?: string
|
||||
preserve_annotations?: boolean
|
||||
quote_keys?: boolean
|
||||
quote_style?: OutputQuoteStyle
|
||||
safari10?: boolean
|
||||
semicolons?: boolean
|
||||
shebang?: boolean
|
||||
shorthand?: boolean
|
||||
source_map?: SourceMapOptions
|
||||
webkit?: boolean
|
||||
width?: number
|
||||
wrap_iife?: boolean
|
||||
wrap_func_args?: boolean
|
||||
}
|
||||
|
||||
export enum OutputQuoteStyle {
|
||||
PreferDouble = 0,
|
||||
AlwaysSingle = 1,
|
||||
AlwaysDouble = 2,
|
||||
AlwaysOriginal = 3
|
||||
}
|
||||
|
||||
export interface MinifyOptions {
|
||||
compress?: boolean | CompressOptions
|
||||
ecma?: ECMA
|
||||
enclose?: boolean | string
|
||||
ie8?: boolean
|
||||
keep_classnames?: boolean | RegExp
|
||||
keep_fnames?: boolean | RegExp
|
||||
mangle?: boolean | MangleOptions
|
||||
module?: boolean
|
||||
nameCache?: object
|
||||
format?: FormatOptions
|
||||
/** @deprecated deprecated */
|
||||
output?: FormatOptions
|
||||
parse?: ParseOptions
|
||||
safari10?: boolean
|
||||
sourceMap?: boolean | SourceMapOptions
|
||||
toplevel?: boolean
|
||||
}
|
||||
|
||||
export interface MinifyOutput {
|
||||
code?: string
|
||||
map?: object | string
|
||||
decoded_map?: object | null
|
||||
}
|
||||
|
||||
export interface SourceMapOptions {
|
||||
/** Source map object, 'inline' or source map file content */
|
||||
content?: object | string
|
||||
includeSources?: boolean
|
||||
filename?: string
|
||||
root?: string
|
||||
url?: string | 'inline'
|
||||
}
|
||||
}
|
553
webui/node_modules/vite/types/ws.d.ts
generated
vendored
Normal file
553
webui/node_modules/vite/types/ws.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,553 @@
|
|||
// Modified and inlined to avoid extra dependency
|
||||
// Source: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/ws/index.d.ts
|
||||
|
||||
// Type definitions for ws 8.5
|
||||
// Project: https://github.com/websockets/ws
|
||||
// Definitions by: Paul Loyd <https://github.com/loyd>
|
||||
// Margus Lamp <https://github.com/mlamp>
|
||||
// Philippe D'Alva <https://github.com/TitaneBoy>
|
||||
// reduckted <https://github.com/reduckted>
|
||||
// teidesu <https://github.com/teidesu>
|
||||
// Bartosz Wojtkowiak <https://github.com/wojtkowiak>
|
||||
// Kyle Hensel <https://github.com/k-yle>
|
||||
// Samuel Skeen <https://github.com/cwadrupldijjit>
|
||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||
|
||||
/// <reference types="node" />
|
||||
|
||||
import { EventEmitter } from 'node:events'
|
||||
import type {
|
||||
Agent,
|
||||
ClientRequest,
|
||||
ClientRequestArgs,
|
||||
Server as HTTPServer,
|
||||
IncomingMessage,
|
||||
OutgoingHttpHeaders
|
||||
} from 'node:http'
|
||||
import type { Server as HTTPSServer } from 'node:https'
|
||||
import type { Duplex, DuplexOptions } from 'node:stream'
|
||||
import type { SecureContextOptions } from 'node:tls'
|
||||
import type { URL } from 'node:url'
|
||||
import type { ZlibOptions } from 'node:zlib'
|
||||
|
||||
// WebSocket socket.
|
||||
declare class WebSocket extends EventEmitter {
|
||||
/** The connection is not yet open. */
|
||||
static readonly CONNECTING: 0
|
||||
/** The connection is open and ready to communicate. */
|
||||
static readonly OPEN: 1
|
||||
/** The connection is in the process of closing. */
|
||||
static readonly CLOSING: 2
|
||||
/** The connection is closed. */
|
||||
static readonly CLOSED: 3
|
||||
|
||||
binaryType: 'nodebuffer' | 'arraybuffer' | 'fragments'
|
||||
readonly bufferedAmount: number
|
||||
readonly extensions: string
|
||||
/** Indicates whether the websocket is paused */
|
||||
readonly isPaused: boolean
|
||||
readonly protocol: string
|
||||
/** The current state of the connection */
|
||||
readonly readyState:
|
||||
| typeof WebSocket.CONNECTING
|
||||
| typeof WebSocket.OPEN
|
||||
| typeof WebSocket.CLOSING
|
||||
| typeof WebSocket.CLOSED
|
||||
readonly url: string
|
||||
|
||||
/** The connection is not yet open. */
|
||||
readonly CONNECTING: 0
|
||||
/** The connection is open and ready to communicate. */
|
||||
readonly OPEN: 1
|
||||
/** The connection is in the process of closing. */
|
||||
readonly CLOSING: 2
|
||||
/** The connection is closed. */
|
||||
readonly CLOSED: 3
|
||||
|
||||
onopen: ((event: WebSocket.Event) => void) | null
|
||||
onerror: ((event: WebSocket.ErrorEvent) => void) | null
|
||||
onclose: ((event: WebSocket.CloseEvent) => void) | null
|
||||
onmessage: ((event: WebSocket.MessageEvent) => void) | null
|
||||
|
||||
constructor(address: null)
|
||||
constructor(
|
||||
address: string | URL,
|
||||
options?: WebSocket.ClientOptions | ClientRequestArgs
|
||||
)
|
||||
constructor(
|
||||
address: string | URL,
|
||||
protocols?: string | string[],
|
||||
options?: WebSocket.ClientOptions | ClientRequestArgs
|
||||
)
|
||||
|
||||
close(code?: number, data?: string | Buffer): void
|
||||
ping(data?: any, mask?: boolean, cb?: (err: Error) => void): void
|
||||
pong(data?: any, mask?: boolean, cb?: (err: Error) => void): void
|
||||
send(data: any, cb?: (err?: Error) => void): void
|
||||
send(
|
||||
data: any,
|
||||
options: {
|
||||
mask?: boolean | undefined
|
||||
binary?: boolean | undefined
|
||||
compress?: boolean | undefined
|
||||
fin?: boolean | undefined
|
||||
},
|
||||
cb?: (err?: Error) => void
|
||||
): void
|
||||
terminate(): void
|
||||
|
||||
/**
|
||||
* Pause the websocket causing it to stop emitting events. Some events can still be
|
||||
* emitted after this is called, until all buffered data is consumed. This method
|
||||
* is a noop if the ready state is `CONNECTING` or `CLOSED`.
|
||||
*/
|
||||
pause(): void
|
||||
/**
|
||||
* Make a paused socket resume emitting events. This method is a noop if the ready
|
||||
* state is `CONNECTING` or `CLOSED`.
|
||||
*/
|
||||
resume(): void
|
||||
|
||||
// HTML5 WebSocket events
|
||||
addEventListener(
|
||||
method: 'message',
|
||||
cb: (event: WebSocket.MessageEvent) => void,
|
||||
options?: WebSocket.EventListenerOptions
|
||||
): void
|
||||
addEventListener(
|
||||
method: 'close',
|
||||
cb: (event: WebSocket.CloseEvent) => void,
|
||||
options?: WebSocket.EventListenerOptions
|
||||
): void
|
||||
addEventListener(
|
||||
method: 'error',
|
||||
cb: (event: WebSocket.ErrorEvent) => void,
|
||||
options?: WebSocket.EventListenerOptions
|
||||
): void
|
||||
addEventListener(
|
||||
method: 'open',
|
||||
cb: (event: WebSocket.Event) => void,
|
||||
options?: WebSocket.EventListenerOptions
|
||||
): void
|
||||
|
||||
removeEventListener(
|
||||
method: 'message',
|
||||
cb: (event: WebSocket.MessageEvent) => void
|
||||
): void
|
||||
removeEventListener(
|
||||
method: 'close',
|
||||
cb: (event: WebSocket.CloseEvent) => void
|
||||
): void
|
||||
removeEventListener(
|
||||
method: 'error',
|
||||
cb: (event: WebSocket.ErrorEvent) => void
|
||||
): void
|
||||
removeEventListener(
|
||||
method: 'open',
|
||||
cb: (event: WebSocket.Event) => void
|
||||
): void
|
||||
|
||||
// Events
|
||||
on(
|
||||
event: 'close',
|
||||
listener: (this: WebSocket, code: number, reason: Buffer) => void
|
||||
): this
|
||||
on(event: 'error', listener: (this: WebSocket, err: Error) => void): this
|
||||
on(
|
||||
event: 'upgrade',
|
||||
listener: (this: WebSocket, request: IncomingMessage) => void
|
||||
): this
|
||||
on(
|
||||
event: 'message',
|
||||
listener: (
|
||||
this: WebSocket,
|
||||
data: WebSocket.RawData,
|
||||
isBinary: boolean
|
||||
) => void
|
||||
): this
|
||||
on(event: 'open', listener: (this: WebSocket) => void): this
|
||||
on(
|
||||
event: 'ping' | 'pong',
|
||||
listener: (this: WebSocket, data: Buffer) => void
|
||||
): this
|
||||
on(
|
||||
event: 'unexpected-response',
|
||||
listener: (
|
||||
this: WebSocket,
|
||||
request: ClientRequest,
|
||||
response: IncomingMessage
|
||||
) => void
|
||||
): this
|
||||
on(
|
||||
event: string | symbol,
|
||||
listener: (this: WebSocket, ...args: any[]) => void
|
||||
): this
|
||||
|
||||
once(
|
||||
event: 'close',
|
||||
listener: (this: WebSocket, code: number, reason: Buffer) => void
|
||||
): this
|
||||
once(event: 'error', listener: (this: WebSocket, err: Error) => void): this
|
||||
once(
|
||||
event: 'upgrade',
|
||||
listener: (this: WebSocket, request: IncomingMessage) => void
|
||||
): this
|
||||
once(
|
||||
event: 'message',
|
||||
listener: (
|
||||
this: WebSocket,
|
||||
data: WebSocket.RawData,
|
||||
isBinary: boolean
|
||||
) => void
|
||||
): this
|
||||
once(event: 'open', listener: (this: WebSocket) => void): this
|
||||
once(
|
||||
event: 'ping' | 'pong',
|
||||
listener: (this: WebSocket, data: Buffer) => void
|
||||
): this
|
||||
once(
|
||||
event: 'unexpected-response',
|
||||
listener: (
|
||||
this: WebSocket,
|
||||
request: ClientRequest,
|
||||
response: IncomingMessage
|
||||
) => void
|
||||
): this
|
||||
once(
|
||||
event: string | symbol,
|
||||
listener: (this: WebSocket, ...args: any[]) => void
|
||||
): this
|
||||
|
||||
off(
|
||||
event: 'close',
|
||||
listener: (this: WebSocket, code: number, reason: Buffer) => void
|
||||
): this
|
||||
off(event: 'error', listener: (this: WebSocket, err: Error) => void): this
|
||||
off(
|
||||
event: 'upgrade',
|
||||
listener: (this: WebSocket, request: IncomingMessage) => void
|
||||
): this
|
||||
off(
|
||||
event: 'message',
|
||||
listener: (
|
||||
this: WebSocket,
|
||||
data: WebSocket.RawData,
|
||||
isBinary: boolean
|
||||
) => void
|
||||
): this
|
||||
off(event: 'open', listener: (this: WebSocket) => void): this
|
||||
off(
|
||||
event: 'ping' | 'pong',
|
||||
listener: (this: WebSocket, data: Buffer) => void
|
||||
): this
|
||||
off(
|
||||
event: 'unexpected-response',
|
||||
listener: (
|
||||
this: WebSocket,
|
||||
request: ClientRequest,
|
||||
response: IncomingMessage
|
||||
) => void
|
||||
): this
|
||||
off(
|
||||
event: string | symbol,
|
||||
listener: (this: WebSocket, ...args: any[]) => void
|
||||
): this
|
||||
|
||||
addListener(
|
||||
event: 'close',
|
||||
listener: (code: number, reason: Buffer) => void
|
||||
): this
|
||||
addListener(event: 'error', listener: (err: Error) => void): this
|
||||
addListener(
|
||||
event: 'upgrade',
|
||||
listener: (request: IncomingMessage) => void
|
||||
): this
|
||||
addListener(
|
||||
event: 'message',
|
||||
listener: (data: WebSocket.RawData, isBinary: boolean) => void
|
||||
): this
|
||||
addListener(event: 'open', listener: () => void): this
|
||||
addListener(event: 'ping' | 'pong', listener: (data: Buffer) => void): this
|
||||
addListener(
|
||||
event: 'unexpected-response',
|
||||
listener: (request: ClientRequest, response: IncomingMessage) => void
|
||||
): this
|
||||
addListener(event: string | symbol, listener: (...args: any[]) => void): this
|
||||
|
||||
removeListener(
|
||||
event: 'close',
|
||||
listener: (code: number, reason: Buffer) => void
|
||||
): this
|
||||
removeListener(event: 'error', listener: (err: Error) => void): this
|
||||
removeListener(
|
||||
event: 'upgrade',
|
||||
listener: (request: IncomingMessage) => void
|
||||
): this
|
||||
removeListener(
|
||||
event: 'message',
|
||||
listener: (data: WebSocket.RawData, isBinary: boolean) => void
|
||||
): this
|
||||
removeListener(event: 'open', listener: () => void): this
|
||||
removeListener(event: 'ping' | 'pong', listener: (data: Buffer) => void): this
|
||||
removeListener(
|
||||
event: 'unexpected-response',
|
||||
listener: (request: ClientRequest, response: IncomingMessage) => void
|
||||
): this
|
||||
removeListener(
|
||||
event: string | symbol,
|
||||
listener: (...args: any[]) => void
|
||||
): this
|
||||
}
|
||||
|
||||
declare const WebSocketAlias: typeof WebSocket
|
||||
interface WebSocketAlias extends WebSocket {} // tslint:disable-line no-empty-interface
|
||||
|
||||
declare namespace WebSocket {
|
||||
/**
|
||||
* Data represents the raw message payload received over the WebSocket.
|
||||
*/
|
||||
type RawData = Buffer | ArrayBuffer | Buffer[]
|
||||
|
||||
/**
|
||||
* Data represents the message payload received over the WebSocket.
|
||||
*/
|
||||
type Data = string | Buffer | ArrayBuffer | Buffer[]
|
||||
|
||||
/**
|
||||
* CertMeta represents the accepted types for certificate & key data.
|
||||
*/
|
||||
type CertMeta = string | string[] | Buffer | Buffer[]
|
||||
|
||||
/**
|
||||
* VerifyClientCallbackSync is a synchronous callback used to inspect the
|
||||
* incoming message. The return value (boolean) of the function determines
|
||||
* whether or not to accept the handshake.
|
||||
*/
|
||||
type VerifyClientCallbackSync = (info: {
|
||||
origin: string
|
||||
secure: boolean
|
||||
req: IncomingMessage
|
||||
}) => boolean
|
||||
|
||||
/**
|
||||
* VerifyClientCallbackAsync is an asynchronous callback used to inspect the
|
||||
* incoming message. The return value (boolean) of the function determines
|
||||
* whether or not to accept the handshake.
|
||||
*/
|
||||
type VerifyClientCallbackAsync = (
|
||||
info: { origin: string; secure: boolean; req: IncomingMessage },
|
||||
callback: (
|
||||
res: boolean,
|
||||
code?: number,
|
||||
message?: string,
|
||||
headers?: OutgoingHttpHeaders
|
||||
) => void
|
||||
) => void
|
||||
|
||||
interface ClientOptions extends SecureContextOptions {
|
||||
protocol?: string | undefined
|
||||
followRedirects?: boolean | undefined
|
||||
generateMask?(mask: Buffer): void
|
||||
handshakeTimeout?: number | undefined
|
||||
maxRedirects?: number | undefined
|
||||
perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined
|
||||
localAddress?: string | undefined
|
||||
protocolVersion?: number | undefined
|
||||
headers?: { [key: string]: string } | undefined
|
||||
origin?: string | undefined
|
||||
agent?: Agent | undefined
|
||||
host?: string | undefined
|
||||
family?: number | undefined
|
||||
checkServerIdentity?(servername: string, cert: CertMeta): boolean
|
||||
rejectUnauthorized?: boolean | undefined
|
||||
maxPayload?: number | undefined
|
||||
skipUTF8Validation?: boolean | undefined
|
||||
}
|
||||
|
||||
interface PerMessageDeflateOptions {
|
||||
serverNoContextTakeover?: boolean | undefined
|
||||
clientNoContextTakeover?: boolean | undefined
|
||||
serverMaxWindowBits?: number | undefined
|
||||
clientMaxWindowBits?: number | undefined
|
||||
zlibDeflateOptions?:
|
||||
| {
|
||||
flush?: number | undefined
|
||||
finishFlush?: number | undefined
|
||||
chunkSize?: number | undefined
|
||||
windowBits?: number | undefined
|
||||
level?: number | undefined
|
||||
memLevel?: number | undefined
|
||||
strategy?: number | undefined
|
||||
dictionary?: Buffer | Buffer[] | DataView | undefined
|
||||
info?: boolean | undefined
|
||||
}
|
||||
| undefined
|
||||
zlibInflateOptions?: ZlibOptions | undefined
|
||||
threshold?: number | undefined
|
||||
concurrencyLimit?: number | undefined
|
||||
}
|
||||
|
||||
interface Event {
|
||||
type: string
|
||||
target: WebSocket
|
||||
}
|
||||
|
||||
interface ErrorEvent {
|
||||
error: any
|
||||
message: string
|
||||
type: string
|
||||
target: WebSocket
|
||||
}
|
||||
|
||||
interface CloseEvent {
|
||||
wasClean: boolean
|
||||
code: number
|
||||
reason: string
|
||||
type: string
|
||||
target: WebSocket
|
||||
}
|
||||
|
||||
interface MessageEvent {
|
||||
data: Data
|
||||
type: string
|
||||
target: WebSocket
|
||||
}
|
||||
|
||||
interface EventListenerOptions {
|
||||
once?: boolean | undefined
|
||||
}
|
||||
|
||||
interface ServerOptions {
|
||||
host?: string | undefined
|
||||
port?: number | undefined
|
||||
backlog?: number | undefined
|
||||
server?: HTTPServer | HTTPSServer | undefined
|
||||
verifyClient?:
|
||||
| VerifyClientCallbackAsync
|
||||
| VerifyClientCallbackSync
|
||||
| undefined
|
||||
handleProtocols?: (
|
||||
protocols: Set<string>,
|
||||
request: IncomingMessage
|
||||
) => string | false
|
||||
path?: string | undefined
|
||||
noServer?: boolean | undefined
|
||||
clientTracking?: boolean | undefined
|
||||
perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined
|
||||
maxPayload?: number | undefined
|
||||
skipUTF8Validation?: boolean | undefined
|
||||
WebSocket?: typeof WebSocket.WebSocket | undefined
|
||||
}
|
||||
|
||||
interface AddressInfo {
|
||||
address: string
|
||||
family: string
|
||||
port: number
|
||||
}
|
||||
|
||||
// WebSocket Server
|
||||
class Server<T extends WebSocket = WebSocket> extends EventEmitter {
|
||||
options: ServerOptions
|
||||
path: string
|
||||
clients: Set<T>
|
||||
|
||||
constructor(options?: ServerOptions, callback?: () => void)
|
||||
|
||||
address(): AddressInfo | string
|
||||
close(cb?: (err?: Error) => void): void
|
||||
handleUpgrade(
|
||||
request: IncomingMessage,
|
||||
socket: Duplex,
|
||||
upgradeHead: Buffer,
|
||||
callback: (client: T, request: IncomingMessage) => void
|
||||
): void
|
||||
shouldHandle(request: IncomingMessage): boolean | Promise<boolean>
|
||||
|
||||
// Events
|
||||
on(
|
||||
event: 'connection',
|
||||
cb: (this: Server<T>, socket: T, request: IncomingMessage) => void
|
||||
): this
|
||||
on(event: 'error', cb: (this: Server<T>, error: Error) => void): this
|
||||
on(
|
||||
event: 'headers',
|
||||
cb: (this: Server<T>, headers: string[], request: IncomingMessage) => void
|
||||
): this
|
||||
on(event: 'close' | 'listening', cb: (this: Server<T>) => void): this
|
||||
on(
|
||||
event: string | symbol,
|
||||
listener: (this: Server<T>, ...args: any[]) => void
|
||||
): this
|
||||
|
||||
once(
|
||||
event: 'connection',
|
||||
cb: (this: Server<T>, socket: T, request: IncomingMessage) => void
|
||||
): this
|
||||
once(event: 'error', cb: (this: Server<T>, error: Error) => void): this
|
||||
once(
|
||||
event: 'headers',
|
||||
cb: (this: Server<T>, headers: string[], request: IncomingMessage) => void
|
||||
): this
|
||||
once(event: 'close' | 'listening', cb: (this: Server<T>) => void): this
|
||||
once(
|
||||
event: string | symbol,
|
||||
listener: (this: Server<T>, ...args: any[]) => void
|
||||
): this
|
||||
|
||||
off(
|
||||
event: 'connection',
|
||||
cb: (this: Server<T>, socket: T, request: IncomingMessage) => void
|
||||
): this
|
||||
off(event: 'error', cb: (this: Server<T>, error: Error) => void): this
|
||||
off(
|
||||
event: 'headers',
|
||||
cb: (this: Server<T>, headers: string[], request: IncomingMessage) => void
|
||||
): this
|
||||
off(event: 'close' | 'listening', cb: (this: Server<T>) => void): this
|
||||
off(
|
||||
event: string | symbol,
|
||||
listener: (this: Server<T>, ...args: any[]) => void
|
||||
): this
|
||||
|
||||
addListener(
|
||||
event: 'connection',
|
||||
cb: (client: T, request: IncomingMessage) => void
|
||||
): this
|
||||
addListener(event: 'error', cb: (err: Error) => void): this
|
||||
addListener(
|
||||
event: 'headers',
|
||||
cb: (headers: string[], request: IncomingMessage) => void
|
||||
): this
|
||||
addListener(event: 'close' | 'listening', cb: () => void): this
|
||||
addListener(
|
||||
event: string | symbol,
|
||||
listener: (...args: any[]) => void
|
||||
): this
|
||||
|
||||
removeListener(event: 'connection', cb: (client: T) => void): this
|
||||
removeListener(event: 'error', cb: (err: Error) => void): this
|
||||
removeListener(
|
||||
event: 'headers',
|
||||
cb: (headers: string[], request: IncomingMessage) => void
|
||||
): this
|
||||
removeListener(event: 'close' | 'listening', cb: () => void): this
|
||||
removeListener(
|
||||
event: string | symbol,
|
||||
listener: (...args: any[]) => void
|
||||
): this
|
||||
}
|
||||
|
||||
const WebSocketServer: typeof Server
|
||||
interface WebSocketServer extends Server {} // tslint:disable-line no-empty-interface
|
||||
const WebSocket: typeof WebSocketAlias
|
||||
interface WebSocket extends WebSocketAlias {} // tslint:disable-line no-empty-interface
|
||||
|
||||
// WebSocket stream
|
||||
function createWebSocketStream(
|
||||
websocket: WebSocket,
|
||||
options?: DuplexOptions
|
||||
): Duplex
|
||||
}
|
||||
|
||||
// export = WebSocket
|
||||
export { WebSocket, WebSocketAlias }
|
Loading…
Add table
Add a link
Reference in a new issue