初始化提交
This commit is contained in:
commit
0cf07bfca6
Binary file not shown.
|
|
@ -0,0 +1,12 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="zh-CN">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Claude Web</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<script type="module" src="/src/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,173 @@
|
||||||
|
<template>
|
||||||
|
<div class="app">
|
||||||
|
<TopBar
|
||||||
|
:tabs="store.tabs"
|
||||||
|
:activeTabId="store.activeTabId"
|
||||||
|
@newTab="store.addTab()"
|
||||||
|
@setActiveTab="(id) => (store.activeTabId = id)"
|
||||||
|
@layoutPreset="applyLayoutPreset"
|
||||||
|
@addPane="addPane"
|
||||||
|
@toggleConfig="showConfig = !showConfig"
|
||||||
|
@stopAll="stopAll"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div class="main">
|
||||||
|
<div class="center">
|
||||||
|
<PaneGrid
|
||||||
|
v-if="activeTab"
|
||||||
|
:tab="activeTab"
|
||||||
|
:sessions="store.sessions"
|
||||||
|
@focusPane="(id) => (focusedPaneId = id)"
|
||||||
|
@send="onSend"
|
||||||
|
@updateMode="({ sessionId, mode }) => store.setMode(sessionId, mode)"
|
||||||
|
@respondPermission="onRespondPermission"
|
||||||
|
@stopSession="stopSession"
|
||||||
|
@closeSession="closeSession"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="right" v-if="focusedSession">
|
||||||
|
<div class="panel">
|
||||||
|
<div class="panel-title">窗格设置</div>
|
||||||
|
|
||||||
|
<div class="field">
|
||||||
|
<div class="label">模式</div>
|
||||||
|
<select v-model="focusedSession.mode" class="input" @change="store.saveState()">
|
||||||
|
<option value="plan">plan</option>
|
||||||
|
<option value="ask">ask</option>
|
||||||
|
<option value="auto">auto</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field">
|
||||||
|
<div class="label">工作目录</div>
|
||||||
|
<input v-model="focusedSession.cwd" class="input" placeholder="如:E:\\Projects\\repo" @blur="store.saveState()" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="hint">Ask 模式下出现工具请求会在窗格内弹出确认。</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bottom" v-if="showConfig">
|
||||||
|
<ConfigPanel />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { computed, onMounted, ref } from 'vue';
|
||||||
|
import TopBar from './components/TopBar.vue';
|
||||||
|
import PaneGrid from './components/PaneGrid.vue';
|
||||||
|
import ConfigPanel from './components/ConfigPanel.vue';
|
||||||
|
import { useSessionStore } from './stores/sessionStore';
|
||||||
|
|
||||||
|
const store = useSessionStore();
|
||||||
|
const showConfig = ref(true);
|
||||||
|
const focusedPaneId = ref(null);
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
store.initSocket();
|
||||||
|
const restored = await store.fetchState();
|
||||||
|
if (!restored && store.tabs.length === 0) store.addTab('Tab 1');
|
||||||
|
await store.fetchConfig().catch(() => {});
|
||||||
|
});
|
||||||
|
|
||||||
|
const activeTab = computed(() => store.tabs.find((t) => t.id === store.activeTabId));
|
||||||
|
const focusedSession = computed(() => (focusedPaneId.value ? store.sessions[focusedPaneId.value] : null));
|
||||||
|
|
||||||
|
function addPane() {
|
||||||
|
if (!store.activeTabId) return;
|
||||||
|
store.addPane(store.activeTabId);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onSend({ sessionId, prompt }) {
|
||||||
|
store.sendMessage(sessionId, prompt);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onRespondPermission({ sessionId, approved }) {
|
||||||
|
const session = store.sessions[sessionId];
|
||||||
|
if (!session || !session.permissionRequest || !store.socket) return;
|
||||||
|
|
||||||
|
store.socket.emit('confirm_tool', {
|
||||||
|
sessionId,
|
||||||
|
toolUseId: session.permissionRequest.toolUseId,
|
||||||
|
approved
|
||||||
|
});
|
||||||
|
|
||||||
|
session.permissionRequest = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function stopAll() {
|
||||||
|
if (!store.socket) return;
|
||||||
|
store.socket.emit('stop_all');
|
||||||
|
Object.values(store.sessions).forEach((s) => {
|
||||||
|
if (s) s.status = 'idle';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function stopSession(sessionId) {
|
||||||
|
if (!store.socket) return;
|
||||||
|
store.socket.emit('stop_session', { sessionId });
|
||||||
|
const s = store.sessions[sessionId];
|
||||||
|
if (s) s.status = 'idle';
|
||||||
|
}
|
||||||
|
|
||||||
|
function closeSession(sessionId) {
|
||||||
|
if (!store.socket) return;
|
||||||
|
store.socket.emit('close_session', { sessionId });
|
||||||
|
|
||||||
|
const tab = activeTab.value;
|
||||||
|
if (tab) tab.panes = tab.panes.filter((p) => p.i !== sessionId);
|
||||||
|
|
||||||
|
if (focusedPaneId.value === sessionId) focusedPaneId.value = null;
|
||||||
|
delete store.sessions[sessionId];
|
||||||
|
store.saveState();
|
||||||
|
}
|
||||||
|
|
||||||
|
function applyLayoutPreset(preset) {
|
||||||
|
const tab = activeTab.value;
|
||||||
|
if (!tab) return;
|
||||||
|
|
||||||
|
const panes = tab.panes;
|
||||||
|
if (preset === 1) {
|
||||||
|
if (panes[0]) {
|
||||||
|
panes[0].x = 0;
|
||||||
|
panes[0].y = 0;
|
||||||
|
panes[0].w = 12;
|
||||||
|
panes[0].h = 12;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (preset === 2) {
|
||||||
|
panes.slice(0, 2).forEach((p, idx) => {
|
||||||
|
p.x = idx * 6;
|
||||||
|
p.y = 0;
|
||||||
|
p.w = 6;
|
||||||
|
p.h = 12;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (preset === 4) {
|
||||||
|
panes.slice(0, 4).forEach((p, idx) => {
|
||||||
|
p.w = 6;
|
||||||
|
p.h = 6;
|
||||||
|
p.x = (idx % 2) * 6;
|
||||||
|
p.y = Math.floor(idx / 2) * 6;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
store.saveState();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.app { display: flex; flex-direction: column; height: 100vh; }
|
||||||
|
.main { flex: 1; display: flex; min-height: 0; }
|
||||||
|
.center { flex: 1; min-width: 0; }
|
||||||
|
.right { width: 320px; border-left: 1px solid #e5e7eb; background: #fafafa; overflow: auto; }
|
||||||
|
.bottom { height: 260px; border-top: 1px solid #e5e7eb; overflow: auto; }
|
||||||
|
.panel { padding: 12px; }
|
||||||
|
.panel-title { font-weight: 600; margin-bottom: 12px; }
|
||||||
|
.field { margin-bottom: 12px; }
|
||||||
|
.label { font-size: 12px; color: #6b7280; margin-bottom: 6px; }
|
||||||
|
.input { width: 100%; padding: 8px; border: 1px solid #d1d5db; border-radius: 8px; }
|
||||||
|
.hint { font-size: 12px; color: #6b7280; }
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,197 @@
|
||||||
|
<template>
|
||||||
|
<div class="pane" @click="$emit('focus')">
|
||||||
|
<div class="header">
|
||||||
|
<div class="title">{{ title }}</div>
|
||||||
|
<div class="actions">
|
||||||
|
<!-- 模式切换入口 -->
|
||||||
|
<select :value="mode" @change="e => $emit('updateMode', e.target.value)" class="mode-select">
|
||||||
|
<option value="ask">Ask 模式</option>
|
||||||
|
<option value="auto">Auto 模式</option>
|
||||||
|
<option value="plan">Plan 模式</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<button v-if="status === 'running'" class="btn-icon stop" title="停止" @click="$emit('stop')">
|
||||||
|
<i class="pi pi-stop-circle"></i>
|
||||||
|
</button>
|
||||||
|
<button class="btn-icon close" title="关闭" @click="$emit('close')">
|
||||||
|
<i class="pi pi-times"></i>
|
||||||
|
</button>
|
||||||
|
<div class="status" :class="status">{{ status }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="messages" ref="msgEl">
|
||||||
|
<div v-for="(m, idx) in messages" :key="idx" class="msg-container" :class="[m.role, m.type]">
|
||||||
|
<div class="msg-header">
|
||||||
|
<span class="role-tag">{{ m.role === 'assistant' ? 'Claude' : 'User' }}</span>
|
||||||
|
<span v-if="m.type === 'thinking'" class="type-tag">思考中...</span>
|
||||||
|
<span v-else-if="m.type === 'tool_use'" class="type-tag">工具调用</span>
|
||||||
|
<span v-else-if="m.type === 'tool_result'" class="type-tag">执行结果</span>
|
||||||
|
<span class="timestamp">{{ new Date(m.timestamp || Date.now()).toLocaleTimeString() }}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 普通文本消息 -->
|
||||||
|
<div v-if="!m.type || m.type === 'text'" class="content-box">
|
||||||
|
<pre class="content">{{ m.content }}</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 思维链块 (Thinking) -->
|
||||||
|
<div v-else-if="m.type === 'thinking'" class="thinking-box">
|
||||||
|
<div class="thinking-header" @click="m.collapsed = !m.collapsed">
|
||||||
|
<i :class="['pi', m.collapsed ? 'pi-chevron-right' : 'pi-chevron-down']"></i>
|
||||||
|
查看思考过程
|
||||||
|
</div>
|
||||||
|
<div v-show="!m.collapsed" class="thinking-content">
|
||||||
|
{{ m.content }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 工具调用 (Tool Use) -->
|
||||||
|
<div v-else-if="m.type === 'tool_use'" class="tool-use-box">
|
||||||
|
<div class="tool-title">
|
||||||
|
<i class="pi pi-box"></i>
|
||||||
|
{{ m.metadata?.name || '未知工具' }}
|
||||||
|
</div>
|
||||||
|
<div class="tool-args">
|
||||||
|
<pre>{{ JSON.stringify(m.metadata?.input || {}, null, 2) }}</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 工具结果 (Tool Result) -->
|
||||||
|
<div v-else-if="m.type === 'tool_result'" class="tool-result-box" :class="{ error: m.metadata?.subtype !== 'success' }">
|
||||||
|
<div class="tool-result-header">
|
||||||
|
<i :class="['pi', m.metadata?.subtype === 'success' ? 'pi-check-circle' : 'pi-exclamation-circle']"></i>
|
||||||
|
{{ m.metadata?.subtype === 'success' ? '执行成功' : '执行异常' }}
|
||||||
|
</div>
|
||||||
|
<div class="tool-result-content">
|
||||||
|
<pre>{{ m.content }}</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="permissionRequest" class="permission">
|
||||||
|
<div class="perm-title">工具权限请求</div>
|
||||||
|
<div class="perm-body">
|
||||||
|
<div>工具:<b>{{ permissionRequest.tool }}</b></div>
|
||||||
|
<div class="reason" v-if="permissionRequest.reason">原因:{{ permissionRequest.reason }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="perm-actions">
|
||||||
|
<button class="btn deny" @click="respond(false)">拒绝</button>
|
||||||
|
<button class="btn allow" @click="respond(true)">允许</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="input">
|
||||||
|
<input
|
||||||
|
v-model="draft"
|
||||||
|
class="text"
|
||||||
|
placeholder="输入指令..."
|
||||||
|
@keydown.enter.prevent="send"
|
||||||
|
/>
|
||||||
|
<button class="send" @click="send" :disabled="!draft || status === 'running'">发送</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { nextTick, ref, watch } from 'vue';
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
sessionId: { type: String, required: true },
|
||||||
|
title: { type: String, default: '' },
|
||||||
|
status: { type: String, default: 'idle' },
|
||||||
|
mode: { type: String, default: 'ask' },
|
||||||
|
messages: { type: Array, default: () => [] },
|
||||||
|
socket: { type: Object, default: null },
|
||||||
|
permissionRequest: { type: Object, default: null }
|
||||||
|
});
|
||||||
|
|
||||||
|
const emit = defineEmits(['send', 'focus', 'respondPermission', 'stop', 'close', 'updateMode']);
|
||||||
|
|
||||||
|
const draft = ref('');
|
||||||
|
const msgEl = ref(null);
|
||||||
|
|
||||||
|
function send() {
|
||||||
|
const text = draft.value.trim();
|
||||||
|
if (!text) return;
|
||||||
|
emit('send', { sessionId: props.sessionId, prompt: text });
|
||||||
|
draft.value = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
function respond(approved) {
|
||||||
|
emit('respondPermission', { approved });
|
||||||
|
}
|
||||||
|
|
||||||
|
function scrollToBottom() {
|
||||||
|
if (!msgEl.value) return;
|
||||||
|
msgEl.value.scrollTop = msgEl.value.scrollHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.messages.length,
|
||||||
|
async () => {
|
||||||
|
await nextTick();
|
||||||
|
scrollToBottom();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// 工具权限请求由 store 统一分发到各 session,通过 props.permissionRequest 传入
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.pane { height: 100%; display:flex; flex-direction:column; border:1px solid #e5e7eb; border-radius:12px; overflow:hidden; background:#fff; }
|
||||||
|
.header { display:flex; justify-content:space-between; align-items:center; padding:8px 10px; border-bottom:1px solid #e5e7eb; background:#f9fafb; }
|
||||||
|
.title { font-weight:600; font-size:12px; color:#111827; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width: 45%; }
|
||||||
|
.actions { display:flex; align-items:center; gap:8px; }
|
||||||
|
.mode-select { font-size:12px; padding:4px 8px; border:1px solid #d1d5db; border-radius:8px; background:#fff; color:#111827; }
|
||||||
|
|
||||||
|
.status { font-size:12px; color:#6b7280; }
|
||||||
|
.status.running { color:#b45309; }
|
||||||
|
.status.idle { color:#059669; }
|
||||||
|
|
||||||
|
.messages { flex:1; min-height:0; overflow:auto; padding:10px; background:#fff; }
|
||||||
|
|
||||||
|
/* 消息容器:按 role 分左右 */
|
||||||
|
.msg-container { display:flex; flex-direction:column; gap:6px; margin-bottom:12px; }
|
||||||
|
.msg-container.user { align-items:flex-end; }
|
||||||
|
.msg-container.assistant, .msg-container.system { align-items:flex-start; }
|
||||||
|
|
||||||
|
.msg-header { display:flex; align-items:center; gap:6px; font-size:11px; color:#6b7280; }
|
||||||
|
.role-tag { font-weight:600; color:#374151; }
|
||||||
|
.type-tag { background:#eef2ff; color:#3730a3; border:1px solid #c7d2fe; padding:1px 6px; border-radius:999px; }
|
||||||
|
.timestamp { margin-left:auto; opacity:0.8; }
|
||||||
|
|
||||||
|
.content-box { max-width: 92%; border-radius:12px; padding:8px 10px; border:1px solid #e5e7eb; background:#f9fafb; }
|
||||||
|
.msg-container.user .content-box { background:#111827; border-color:#111827; }
|
||||||
|
.msg-container.user .content { color:#fff; }
|
||||||
|
.msg-container.assistant .content-box { background:#ffffff; }
|
||||||
|
|
||||||
|
.content { margin:0; white-space:pre-wrap; word-break:break-word; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size:12px; color:#111827; }
|
||||||
|
|
||||||
|
/* Thinking 折叠块 */
|
||||||
|
.thinking-box { max-width: 92%; border:1px dashed #d1d5db; background:#fcfcfd; border-radius:12px; overflow:hidden; }
|
||||||
|
.thinking-header { display:flex; align-items:center; gap:8px; padding:8px 10px; cursor:pointer; font-size:12px; color:#374151; background:#f3f4f6; }
|
||||||
|
.thinking-content { padding:10px; font-size:12px; color:#111827; white-space:pre-wrap; word-break:break-word; }
|
||||||
|
|
||||||
|
/* 工具调用/结果卡片 */
|
||||||
|
.tool-use-box, .tool-result-box { max-width: 92%; border-radius:12px; border:1px solid #e5e7eb; background:#f8fafc; overflow:hidden; }
|
||||||
|
.tool-title, .tool-result-header { display:flex; align-items:center; gap:8px; padding:8px 10px; font-weight:600; font-size:12px; color:#111827; background:#eef2f7; }
|
||||||
|
.tool-args, .tool-result-content { padding:10px; }
|
||||||
|
.tool-args pre, .tool-result-content pre { margin:0; font-size:12px; white-space:pre-wrap; word-break:break-word; }
|
||||||
|
.tool-result-box.error { border-color:#fecaca; }
|
||||||
|
.tool-result-box.error .tool-result-header { background:#fff1f2; color:#991b1b; }
|
||||||
|
|
||||||
|
.permission { border-top:1px solid #e5e7eb; background:#fff7ed; padding:10px; }
|
||||||
|
.perm-title { font-weight:700; font-size:12px; margin-bottom:6px; }
|
||||||
|
.reason { font-size:12px; color:#6b7280; margin-top:4px; }
|
||||||
|
.perm-actions { display:flex; gap:8px; margin-top:8px; }
|
||||||
|
.btn { padding:6px 10px; border-radius:10px; border:1px solid #e5e7eb; background:#fff; cursor:pointer; }
|
||||||
|
.btn.allow { background:#111827; color:#fff; border-color:#111827; }
|
||||||
|
.btn.deny { background:#fff; }
|
||||||
|
|
||||||
|
.input { display:flex; gap:8px; padding:10px; border-top:1px solid #e5e7eb; background:#fff; }
|
||||||
|
.text { flex:1; padding:8px; border:1px solid #d1d5db; border-radius:10px; }
|
||||||
|
.send { padding:8px 12px; border-radius:10px; border:1px solid #111827; background:#111827; color:#fff; cursor:pointer; }
|
||||||
|
.send:disabled { opacity:0.5; cursor:not-allowed; }
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,209 @@
|
||||||
|
<template>
|
||||||
|
<div class="bottom-panel">
|
||||||
|
<div class="panel-tabs">
|
||||||
|
<button
|
||||||
|
class="tab-btn"
|
||||||
|
:class="{ active: activeTab === 'config' }"
|
||||||
|
@click="activeTab = 'config'"
|
||||||
|
>配置查看器</button>
|
||||||
|
<button
|
||||||
|
class="tab-btn"
|
||||||
|
:class="{ active: activeTab === 'logs' }"
|
||||||
|
@click="activeTab = 'logs'"
|
||||||
|
>日志搜索与导出</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel-content">
|
||||||
|
<!-- 配置查看器 -->
|
||||||
|
<div v-if="activeTab === 'config'" class="tab-pane config-pane">
|
||||||
|
<div class="header">
|
||||||
|
<div class="title">Claude Code 配置</div>
|
||||||
|
<button class="refresh-btn" @click="store.fetchConfig()">刷新</button>
|
||||||
|
</div>
|
||||||
|
<div class="tree-container">
|
||||||
|
<div v-if="!store.configs" class="loading">正在加载配置...</div>
|
||||||
|
<div v-else class="config-tree">
|
||||||
|
<div v-for="(val, key) in store.configs" :key="key" class="config-item">
|
||||||
|
<div class="config-key">{{ key }}</div>
|
||||||
|
<pre class="config-val">{{ JSON.stringify(val, null, 2) }}</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 日志搜索与导出 -->
|
||||||
|
<div v-if="activeTab === 'logs'" class="tab-pane logs-pane">
|
||||||
|
<div class="header log-header">
|
||||||
|
<div class="search-filters">
|
||||||
|
<div class="filter-row">
|
||||||
|
<input
|
||||||
|
v-model="searchQuery"
|
||||||
|
placeholder="搜索关键词..."
|
||||||
|
class="search-input"
|
||||||
|
@keyup.enter="searchLogs"
|
||||||
|
/>
|
||||||
|
<select v-model="selectedSessionId" class="session-select">
|
||||||
|
<option value="">所有会话</option>
|
||||||
|
<option v-for="(s, id) in store.sessions" :key="id" :value="id">{{ id }}</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="filter-row">
|
||||||
|
<span class="date-label">从</span>
|
||||||
|
<input type="datetime-local" v-model="dateFrom" class="date-input" />
|
||||||
|
<span class="date-label">至</span>
|
||||||
|
<input type="datetime-local" v-model="dateTo" class="date-input" />
|
||||||
|
<button class="action-btn" @click="searchLogs">搜索</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="export-actions">
|
||||||
|
<div class="export-group">
|
||||||
|
<span class="export-label">当前/筛选:</span>
|
||||||
|
<button
|
||||||
|
class="action-btn"
|
||||||
|
:disabled="!selectedSessionId && !searchQuery && !dateFrom && !dateTo"
|
||||||
|
@click="exportLogs('json')"
|
||||||
|
>JSON</button>
|
||||||
|
<button
|
||||||
|
class="action-btn primary"
|
||||||
|
:disabled="!selectedSessionId"
|
||||||
|
@click="exportLogs('markdown')"
|
||||||
|
>MD</button>
|
||||||
|
</div>
|
||||||
|
<div class="export-group">
|
||||||
|
<span class="export-label">全量:</span>
|
||||||
|
<button class="action-btn" @click="exportAll('json')">全部 JSON</button>
|
||||||
|
<button class="action-btn primary" @click="exportAll('markdown')">全部 MD</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="log-results" ref="logResultsEl">
|
||||||
|
<div v-if="searching" class="loading">搜索中...</div>
|
||||||
|
<div v-else-if="logs.length === 0" class="empty">无匹配结果</div>
|
||||||
|
<div v-else class="log-list">
|
||||||
|
<div v-for="log in logs" :key="log.id" class="log-entry">
|
||||||
|
<div class="log-meta">
|
||||||
|
<span class="log-role" :class="log.role">{{ log.role }}</span>
|
||||||
|
<span class="log-session">{{ log.session_id }}</span>
|
||||||
|
<span class="log-time">{{ new Date(log.timestamp).toLocaleString() }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="log-text">{{ log.content }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted, watch, nextTick } from 'vue';
|
||||||
|
import { useSessionStore } from '../stores/sessionStore';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
|
const store = useSessionStore();
|
||||||
|
const activeTab = ref('config');
|
||||||
|
|
||||||
|
// 日志搜索相关
|
||||||
|
const searchQuery = ref('');
|
||||||
|
const selectedSessionId = ref('');
|
||||||
|
const dateFrom = ref('');
|
||||||
|
const dateTo = ref('');
|
||||||
|
const logs = ref([]);
|
||||||
|
const searching = ref(false);
|
||||||
|
const logResultsEl = ref(null);
|
||||||
|
|
||||||
|
async function searchLogs() {
|
||||||
|
searching.value = true;
|
||||||
|
try {
|
||||||
|
const params = {
|
||||||
|
query: searchQuery.value,
|
||||||
|
sessionId: selectedSessionId.value,
|
||||||
|
from: dateFrom.value,
|
||||||
|
to: dateTo.value
|
||||||
|
};
|
||||||
|
const res = await axios.get('/api/logs/search', { params });
|
||||||
|
logs.value = res.data;
|
||||||
|
// 搜索完成后滚动到顶部
|
||||||
|
nextTick(() => {
|
||||||
|
if (logResultsEl.value) {
|
||||||
|
logResultsEl.value.scrollTop = 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.error('搜索日志失败:', err);
|
||||||
|
} finally {
|
||||||
|
searching.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 监听 Tab 切换,自动触发搜索
|
||||||
|
watch(activeTab, (newTab) => {
|
||||||
|
if (newTab === 'logs' && logs.value.length === 0) {
|
||||||
|
searchLogs();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function exportLogs(format) {
|
||||||
|
const params = new URLSearchParams({ format });
|
||||||
|
if (selectedSessionId.value) params.append('sessionId', selectedSessionId.value);
|
||||||
|
if (searchQuery.value) params.append('query', searchQuery.value);
|
||||||
|
if (dateFrom.value) params.append('from', dateFrom.value);
|
||||||
|
if (dateTo.value) params.append('to', dateTo.value);
|
||||||
|
|
||||||
|
window.open(`/api/logs/export?${params.toString()}`, '_blank');
|
||||||
|
}
|
||||||
|
|
||||||
|
function exportAll(format) {
|
||||||
|
window.open(`/api/logs/export?format=${format}`, '_blank');
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
if (activeTab.value === 'logs') searchLogs();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.bottom-panel { height: 100%; display: flex; flex-direction: column; background: #fff; }
|
||||||
|
.panel-tabs { display: flex; border-bottom: 1px solid #e5e7eb; background: #f9fafb; padding: 0 10px; }
|
||||||
|
.tab-btn {
|
||||||
|
padding: 10px 16px; border: none; background: transparent; cursor: pointer;
|
||||||
|
font-size: 13px; font-weight: 500; color: #6b7280; border-bottom: 2px solid transparent;
|
||||||
|
}
|
||||||
|
.tab-btn.active { color: #111827; border-bottom-color: #111827; }
|
||||||
|
|
||||||
|
.panel-content { flex: 1; overflow: hidden; }
|
||||||
|
.tab-pane { height: 100%; display: flex; flex-direction: column; }
|
||||||
|
|
||||||
|
.header { display: flex; justify-content: space-between; align-items: center; padding: 10px 16px; border-bottom: 1px solid #e5e7eb; }
|
||||||
|
.title { font-weight: 600; font-size: 14px; }
|
||||||
|
.refresh-btn, .action-btn {
|
||||||
|
padding: 6px 12px; border: 1px solid #d1d5db; border-radius: 6px;
|
||||||
|
background: #fff; cursor: pointer; font-size: 12px;
|
||||||
|
}
|
||||||
|
.action-btn.primary { background: #111827; color: #fff; border-color: #111827; }
|
||||||
|
.action-btn:disabled { opacity: 0.5; cursor: not-allowed; }
|
||||||
|
|
||||||
|
.tree-container, .log-results { flex: 1; overflow: auto; padding: 16px; }
|
||||||
|
|
||||||
|
/* Config styles */
|
||||||
|
.config-item { margin-bottom: 20px; }
|
||||||
|
.config-key { font-weight: 700; font-size: 12px; color: #374151; margin-bottom: 8px; text-transform: uppercase; }
|
||||||
|
.config-val { margin: 0; padding: 12px; background: #f3f4f6; border-radius: 8px; font-size: 12px; overflow: auto; font-family: ui-monospace, monospace; }
|
||||||
|
|
||||||
|
/* Log styles */
|
||||||
|
.log-header { gap: 12px; }
|
||||||
|
.search-box { display: flex; gap: 8px; flex: 1; }
|
||||||
|
.search-input { flex: 1; padding: 6px 10px; border: 1px solid #d1d5db; border-radius: 6px; font-size: 13px; }
|
||||||
|
.session-select { padding: 6px; border: 1px solid #d1d5db; border-radius: 6px; font-size: 13px; }
|
||||||
|
.log-entry { padding: 10px; border-bottom: 1px solid #f3f4f6; }
|
||||||
|
.log-meta { display: flex; gap: 10px; margin-bottom: 4px; align-items: center; }
|
||||||
|
.log-role { font-size: 10px; font-weight: 700; text-transform: uppercase; padding: 2px 6px; border-radius: 4px; }
|
||||||
|
.log-role.user { background: #dbeafe; color: #1e40af; }
|
||||||
|
.log-role.assistant { background: #dcfce7; color: #166534; }
|
||||||
|
.log-session { font-size: 11px; color: #6b7280; font-family: monospace; }
|
||||||
|
.log-time { font-size: 11px; color: #9ca3af; margin-left: auto; }
|
||||||
|
.log-text { font-size: 13px; white-space: pre-wrap; color: #374151; line-height: 1.5; }
|
||||||
|
|
||||||
|
.loading, .empty { text-align: center; color: #6b7280; padding: 40px; }
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
<template>
|
||||||
|
<GridLayout
|
||||||
|
:layout="layout"
|
||||||
|
:col-num="12"
|
||||||
|
:row-height="30"
|
||||||
|
:is-draggable="true"
|
||||||
|
:is-resizable="true"
|
||||||
|
:vertical-compact="true"
|
||||||
|
:use-css-transforms="true"
|
||||||
|
@layout-updated="onLayoutUpdated"
|
||||||
|
class="grid"
|
||||||
|
>
|
||||||
|
<GridItem
|
||||||
|
v-for="item in layout"
|
||||||
|
:key="item.i"
|
||||||
|
:x="item.x"
|
||||||
|
:y="item.y"
|
||||||
|
:w="item.w"
|
||||||
|
:h="item.h"
|
||||||
|
:i="item.i"
|
||||||
|
drag-allow-from=".header"
|
||||||
|
>
|
||||||
|
<ChatPane
|
||||||
|
:sessionId="item.i"
|
||||||
|
:title="item.i"
|
||||||
|
:mode="sessions[item.i]?.mode || 'ask'"
|
||||||
|
:status="sessions[item.i]?.status || 'idle'"
|
||||||
|
:messages="sessions[item.i]?.messages || []"
|
||||||
|
:socket="store.socket"
|
||||||
|
:permissionRequest="sessions[item.i]?.permissionRequest || null"
|
||||||
|
@focus="$emit('focusPane', item.i)"
|
||||||
|
@send="(payload) => $emit('send', payload)"
|
||||||
|
@updateMode="(mode) => $emit('updateMode', { sessionId: item.i, mode })"
|
||||||
|
@respondPermission="({ approved }) => $emit('respondPermission', { sessionId: item.i, approved })"
|
||||||
|
@stop="$emit('stopSession', item.i)"
|
||||||
|
@close="$emit('closeSession', item.i)"
|
||||||
|
/>
|
||||||
|
</GridItem>
|
||||||
|
</GridLayout>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import { GridLayout, GridItem } from 'vue-grid-layout-v3';
|
||||||
|
import ChatPane from './ChatPane.vue';
|
||||||
|
import { useSessionStore } from '../stores/sessionStore';
|
||||||
|
|
||||||
|
const store = useSessionStore();
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
tab: { type: Object, required: true },
|
||||||
|
sessions: { type: Object, required: true }
|
||||||
|
});
|
||||||
|
|
||||||
|
const emit = defineEmits(['focusPane', 'send', 'updateMode', 'respondPermission', 'stopSession', 'closeSession']);
|
||||||
|
|
||||||
|
const layout = computed(() => props.tab.panes);
|
||||||
|
|
||||||
|
function onLayoutUpdated(newLayout) {
|
||||||
|
// 同步布局信息到 store
|
||||||
|
newLayout.forEach(newPos => {
|
||||||
|
const pane = props.tab.panes.find(p => p.i === newPos.i);
|
||||||
|
if (pane) {
|
||||||
|
pane.x = newPos.x;
|
||||||
|
pane.y = newPos.y;
|
||||||
|
pane.w = newPos.w;
|
||||||
|
pane.h = newPos.h;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
store.saveState();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.grid { width: 100%; height: 100%; background: #f3f4f6; padding: 10px; box-sizing: border-box; }
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
<template>
|
||||||
|
<div class="topbar">
|
||||||
|
<div class="tabs">
|
||||||
|
<button class="tab add" @click="$emit('newTab')">+ 新建</button>
|
||||||
|
<button
|
||||||
|
v-for="t in tabs"
|
||||||
|
:key="t.id"
|
||||||
|
class="tab"
|
||||||
|
:class="{ active: t.id === activeTabId }"
|
||||||
|
@click="$emit('setActiveTab', t.id)"
|
||||||
|
>
|
||||||
|
{{ t.name }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="actions">
|
||||||
|
<button class="btn" @click="$emit('layoutPreset', 1)">单</button>
|
||||||
|
<button class="btn" @click="$emit('layoutPreset', 2)">双</button>
|
||||||
|
<button class="btn" @click="$emit('layoutPreset', 4)">四</button>
|
||||||
|
<button class="btn stop" @click="$emit('stopAll')">停止全部</button>
|
||||||
|
<button class="btn" @click="$emit('addPane')">+ 窗格</button>
|
||||||
|
<button class="btn" @click="$emit('toggleConfig')">配置</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
defineProps({
|
||||||
|
tabs: { type: Array, default: () => [] },
|
||||||
|
activeTabId: { type: String, default: null }
|
||||||
|
});
|
||||||
|
defineEmits(['newTab', 'setActiveTab', 'layoutPreset', 'addPane', 'toggleConfig', 'stopAll']);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.topbar { display:flex; align-items:center; justify-content:space-between; padding:10px 12px; border-bottom:1px solid #e5e7eb; background:#fff; }
|
||||||
|
.tabs { display:flex; gap:8px; align-items:center; overflow:auto; }
|
||||||
|
.tab { border:1px solid #e5e7eb; background:#f9fafb; padding:6px 10px; border-radius:999px; cursor:pointer; white-space:nowrap; }
|
||||||
|
.tab.active { background:#111827; color:#fff; border-color:#111827; }
|
||||||
|
.tab.add { background:#fff; }
|
||||||
|
.actions { display:flex; gap:8px; }
|
||||||
|
.btn { border:1px solid #e5e7eb; background:#fff; padding:6px 10px; border-radius:10px; cursor:pointer; }
|
||||||
|
.btn.stop { color: #dc2626; border-color: #fecaca; }
|
||||||
|
.btn.stop:hover { background: #fef2f2; }
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
import { createApp } from 'vue';
|
||||||
|
import { createPinia } from 'pinia';
|
||||||
|
import PrimeVue from 'primevue/config';
|
||||||
|
import ToastService from 'primevue/toastservice';
|
||||||
|
|
||||||
|
import App from './App.vue';
|
||||||
|
|
||||||
|
import 'primeicons/primeicons.css';
|
||||||
|
|
||||||
|
const app = createApp(App);
|
||||||
|
app.use(createPinia());
|
||||||
|
app.use(PrimeVue);
|
||||||
|
app.use(ToastService);
|
||||||
|
app.mount('#app');
|
||||||
|
|
@ -0,0 +1,251 @@
|
||||||
|
import { defineStore } from 'pinia';
|
||||||
|
import { io } from 'socket.io-client';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
|
export const useSessionStore = defineStore('session', {
|
||||||
|
state: () => ({
|
||||||
|
tabs: [], // { id, name, panes: [] }
|
||||||
|
activeTabId: null,
|
||||||
|
sessions: {}, // { sessionId: { messages: [], mode, cwd, status, permissionRequest? } }
|
||||||
|
socket: null,
|
||||||
|
configs: null,
|
||||||
|
focusedPaneId: null
|
||||||
|
}),
|
||||||
|
actions: {
|
||||||
|
initSocket() {
|
||||||
|
if (this.socket) return;
|
||||||
|
|
||||||
|
const debug = (...args) => {
|
||||||
|
if (localStorage.getItem('CLAUDE_WEB_DEBUG') === '1') {
|
||||||
|
console.log('[DEBUG]', ...args);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
debug('initializing connection...');
|
||||||
|
// 使用相对路径,由 Vite proxy 转发到 3001
|
||||||
|
this.socket = io('/', {
|
||||||
|
path: '/socket.io',
|
||||||
|
transports: ['websocket', 'polling']
|
||||||
|
});
|
||||||
|
|
||||||
|
this.socket.on('connect', () => {
|
||||||
|
debug('connected:', this.socket.id);
|
||||||
|
// 连接成功后,确保所有已有 session 都加入房间
|
||||||
|
Object.keys(this.sessions || {}).forEach((id) => {
|
||||||
|
debug('re-joining session:', id);
|
||||||
|
this.socket.emit('join_session', id);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
this.socket.on('connect_error', (e) => {
|
||||||
|
console.error('[socket] connect_error:', e?.message || e);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.socket.on('disconnect', (reason) => {
|
||||||
|
console.warn('[socket] disconnected:', reason);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.socket.on('text', ({ sessionId, token }) => {
|
||||||
|
debug('text', sessionId, token);
|
||||||
|
const session = this.sessions[sessionId];
|
||||||
|
if (!session) {
|
||||||
|
debug('text session not found:', sessionId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const lastMsg = session.messages[session.messages.length - 1];
|
||||||
|
if (lastMsg && lastMsg.role === 'assistant' && lastMsg.type !== 'thinking') {
|
||||||
|
lastMsg.content += token;
|
||||||
|
} else {
|
||||||
|
session.messages.push({ role: 'assistant', content: token });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.socket.on('done', ({ sessionId }) => {
|
||||||
|
debug('done', sessionId);
|
||||||
|
if (this.sessions[sessionId]) this.sessions[sessionId].status = 'idle';
|
||||||
|
});
|
||||||
|
|
||||||
|
this.socket.on('error', ({ sessionId, error }) => {
|
||||||
|
console.error('[socket error]', sessionId, error);
|
||||||
|
const session = this.sessions[sessionId];
|
||||||
|
if (session) {
|
||||||
|
session.status = 'idle';
|
||||||
|
session.messages.push({
|
||||||
|
role: 'assistant',
|
||||||
|
content: `[系统错误] ${error}`
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.socket.on('claude_event', ({ sessionId, message }) => {
|
||||||
|
debug('claude_event', sessionId, message);
|
||||||
|
const session = this.sessions[sessionId];
|
||||||
|
if (!session) return;
|
||||||
|
|
||||||
|
// 这里的 message 是 SDK 传回的原始对象,可以包含 thinking, tool_use 等
|
||||||
|
if (message.type === 'assistant') {
|
||||||
|
const content = message.content || [];
|
||||||
|
content.forEach(block => {
|
||||||
|
if (block.type === 'thinking') {
|
||||||
|
// 查找是否已有 thinking 块,如果有则追加(流式情况下可能多次收到助理块)
|
||||||
|
let lastMsg = session.messages[session.messages.length - 1];
|
||||||
|
if (lastMsg && lastMsg.type === 'thinking' && !lastMsg.finalized) {
|
||||||
|
lastMsg.content += block.thinking;
|
||||||
|
} else {
|
||||||
|
session.messages.push({
|
||||||
|
role: 'assistant',
|
||||||
|
type: 'thinking',
|
||||||
|
content: block.thinking,
|
||||||
|
collapsed: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (message.type === 'tool_use') {
|
||||||
|
session.messages.push({
|
||||||
|
role: 'assistant',
|
||||||
|
type: 'tool_use',
|
||||||
|
content: `调用工具: ${message.name}`,
|
||||||
|
metadata: message
|
||||||
|
});
|
||||||
|
} else if (message.type === 'result') {
|
||||||
|
session.messages.push({
|
||||||
|
role: 'system',
|
||||||
|
type: 'tool_result',
|
||||||
|
content: message.subtype === 'success' ? '工具执行成功' : `工具执行失败: ${message.content}`,
|
||||||
|
metadata: message
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.socket.on('tool_permission_request', (data) => {
|
||||||
|
console.warn('[socket tool_permission_request]', data);
|
||||||
|
const { sessionId } = data;
|
||||||
|
const session = this.sessions[sessionId];
|
||||||
|
if (!session) return;
|
||||||
|
session.permissionRequest = data;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
async fetchState() {
|
||||||
|
this.initSocket();
|
||||||
|
try {
|
||||||
|
const res = await axios.get('/api/state');
|
||||||
|
if (res.data.tabs) {
|
||||||
|
this.tabs = res.data.tabs;
|
||||||
|
if (this.tabs.length > 0 && !this.activeTabId) {
|
||||||
|
this.activeTabId = this.tabs[0].id;
|
||||||
|
}
|
||||||
|
this.sessions = res.data.sessions || {};
|
||||||
|
|
||||||
|
// 如果此时已经连接,则立刻 join;否则 connect 回调里会统一 join
|
||||||
|
if (this.socket?.connected) {
|
||||||
|
Object.keys(this.sessions).forEach((id) => {
|
||||||
|
this.socket.emit('join_session', id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Failed to fetch state:', err);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
saveState() {
|
||||||
|
if (!this.socket?.connected) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.socket.emit('save_state', {
|
||||||
|
tabs: this.tabs,
|
||||||
|
sessions: this.sessions
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
async fetchConfig() {
|
||||||
|
try {
|
||||||
|
const res = await axios.get('/api/config');
|
||||||
|
this.configs = res.data;
|
||||||
|
} catch (err) {
|
||||||
|
// 忽略 config 报错
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
setMode(sessionId, mode) {
|
||||||
|
const session = this.sessions[sessionId];
|
||||||
|
if (session) {
|
||||||
|
session.mode = mode;
|
||||||
|
this.saveState();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
addTab(name = 'New Tab') {
|
||||||
|
this.initSocket();
|
||||||
|
const id = Date.now().toString();
|
||||||
|
this.tabs.push({ id, name, panes: [], layoutConfig: {} });
|
||||||
|
this.activeTabId = id;
|
||||||
|
this.addPane(id);
|
||||||
|
this.saveState();
|
||||||
|
},
|
||||||
|
|
||||||
|
addPane(tabId) {
|
||||||
|
this.initSocket();
|
||||||
|
const tab = this.tabs.find((t) => t.id === tabId);
|
||||||
|
if (tab) {
|
||||||
|
const paneId = `pane_${Date.now()}`;
|
||||||
|
const newPane = {
|
||||||
|
id: paneId,
|
||||||
|
x: (tab.panes.length * 4) % 12,
|
||||||
|
y: Math.floor(tab.panes.length / 3) * 4,
|
||||||
|
w: 4,
|
||||||
|
h: 6,
|
||||||
|
i: paneId
|
||||||
|
};
|
||||||
|
tab.panes.push(newPane);
|
||||||
|
this.sessions[paneId] = { messages: [], mode: 'ask', cwd: '', status: 'idle' };
|
||||||
|
|
||||||
|
if (this.socket?.connected) {
|
||||||
|
this.socket.emit('join_session', paneId);
|
||||||
|
}
|
||||||
|
this.saveState();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async sendMessage(sessionId, prompt) {
|
||||||
|
this.initSocket();
|
||||||
|
const session = this.sessions[sessionId];
|
||||||
|
if (!session) {
|
||||||
|
console.error('[sendMessage] session not found:', sessionId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (localStorage.getItem('CLAUDE_WEB_DEBUG') === '1') {
|
||||||
|
console.log('[sendMessage] sending:', { sessionId, prompt, mode: session.mode, cwd: session.cwd });
|
||||||
|
}
|
||||||
|
|
||||||
|
session.status = 'running';
|
||||||
|
session.messages.push({ role: 'user', content: prompt });
|
||||||
|
|
||||||
|
if (!this.socket?.connected) {
|
||||||
|
session.status = 'idle';
|
||||||
|
session.messages.push({ role: 'assistant', content: '[错误] Socket 未连接,请刷新页面重试。' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.socket.emit('send_message', {
|
||||||
|
sessionId,
|
||||||
|
prompt,
|
||||||
|
mode: session.mode,
|
||||||
|
cwd: session.cwd,
|
||||||
|
allowedTools: session.allowedTools,
|
||||||
|
deniedTools: session.deniedTools
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
stopSession(sessionId) {
|
||||||
|
if (this.socket?.connected) {
|
||||||
|
this.socket.emit('stop_session', { sessionId });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
import { defineConfig } from 'vite';
|
||||||
|
import vue from '@vitejs/plugin-vue';
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [vue()],
|
||||||
|
root: path.resolve(__dirname, './'),
|
||||||
|
base: './',
|
||||||
|
server: {
|
||||||
|
port: 3000,
|
||||||
|
proxy: {
|
||||||
|
'/api': 'http://localhost:3001',
|
||||||
|
'/socket.io': {
|
||||||
|
target: 'http://localhost:3001',
|
||||||
|
ws: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
'@': path.resolve(__dirname, './src')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
build: {
|
||||||
|
outDir: '../dist'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../autoprefixer/bin/autoprefixer" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../autoprefixer/bin/autoprefixer" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\autoprefixer\bin\autoprefixer" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../autoprefixer/bin/autoprefixer" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../baseline-browser-mapping/dist/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../baseline-browser-mapping/dist/cli.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\baseline-browser-mapping\dist\cli.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../baseline-browser-mapping/dist/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../baseline-browser-mapping/dist/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../baseline-browser-mapping/dist/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../baseline-browser-mapping/dist/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../browserslist/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../browserslist/cli.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\browserslist\cli.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../browserslist/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../browserslist/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../browserslist/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../browserslist/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../claude-code-config-manager/bin/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../claude-code-config-manager/bin/cli.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\claude-code-config-manager\bin\cli.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../claude-code-config-manager/bin/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../claude-code-config-manager/bin/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../claude-code-config-manager/bin/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../claude-code-config-manager/bin/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../concurrently/dist/bin/concurrently.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../concurrently/dist/bin/concurrently.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\concurrently\dist\bin\concurrently.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../concurrently/dist/bin/concurrently.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../concurrently/dist/bin/concurrently.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../concurrently/dist/bin/concurrently.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../concurrently/dist/bin/concurrently.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../concurrently/dist/bin/concurrently.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../concurrently/dist/bin/concurrently.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\concurrently\dist\bin\concurrently.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../concurrently/dist/bin/concurrently.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../concurrently/dist/bin/concurrently.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../concurrently/dist/bin/concurrently.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../concurrently/dist/bin/concurrently.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../cssesc/bin/cssesc" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../cssesc/bin/cssesc" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\cssesc\bin\cssesc" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../cssesc/bin/cssesc" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../cssesc/bin/cssesc" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../cssesc/bin/cssesc" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../cssesc/bin/cssesc" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../esbuild/bin/esbuild" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../esbuild/bin/esbuild" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\esbuild\bin\esbuild" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../esprima/bin/esparse.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../esprima/bin/esparse.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\esprima\bin\esparse.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../esprima/bin/esparse.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../esprima/bin/esparse.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../esprima/bin/esparse.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../esprima/bin/esparse.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../esprima/bin/esvalidate.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../esprima/bin/esvalidate.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\esprima\bin\esvalidate.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../esprima/bin/esvalidate.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../esprima/bin/esvalidate.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../esprima/bin/esvalidate.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../esprima/bin/esvalidate.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../jiti/bin/jiti.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../jiti/bin/jiti.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\jiti\bin\jiti.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../jiti/bin/jiti.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../jiti/bin/jiti.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../jiti/bin/jiti.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../jiti/bin/jiti.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../js-yaml/bin/js-yaml.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../js-yaml/bin/js-yaml.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\js-yaml\bin\js-yaml.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../mime/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../mime/cli.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mime\cli.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../mime/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../mime/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../mime/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../mime/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../nanoid/bin/nanoid.cjs" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../nanoid/bin/nanoid.cjs" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nanoid\bin\nanoid.cjs" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../which/bin/which.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../which/bin/which.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\which\bin\which.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../which/bin/which.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../which/bin/which.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../which/bin/which.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../which/bin/which.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../nodemon/bin/nodemon.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../nodemon/bin/nodemon.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nodemon\bin\nodemon.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../nodemon/bin/nodemon.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../nodemon/bin/nodemon.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../nodemon/bin/nodemon.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../nodemon/bin/nodemon.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../touch/bin/nodetouch.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../touch/bin/nodetouch.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\touch\bin\nodetouch.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../touch/bin/nodetouch.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../touch/bin/nodetouch.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../touch/bin/nodetouch.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../touch/bin/nodetouch.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../@babel/parser/bin/babel-parser.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../@babel/parser/bin/babel-parser.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\@babel\parser\bin\babel-parser.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../prebuild-install/bin.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../prebuild-install/bin.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\prebuild-install\bin.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../prebuild-install/bin.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../prebuild-install/bin.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../prebuild-install/bin.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../prebuild-install/bin.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../rc/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../rc/cli.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\rc\cli.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../rc/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../rc/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../rc/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../rc/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../resolve/bin/resolve" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../resolve/bin/resolve" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\resolve\bin\resolve" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../resolve/bin/resolve" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../resolve/bin/resolve" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../resolve/bin/resolve" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../resolve/bin/resolve" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../rollup/dist/bin/rollup" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../rollup/dist/bin/rollup" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\rollup\dist\bin\rollup" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../rollup/dist/bin/rollup" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../rollup/dist/bin/rollup" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../rollup/dist/bin/rollup" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../rollup/dist/bin/rollup" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../semver/bin/semver.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\semver\bin\semver.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../sucrase/bin/sucrase" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../sucrase/bin/sucrase" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../sucrase/bin/sucrase-node" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../sucrase/bin/sucrase-node" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\sucrase\bin\sucrase-node" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../sucrase/bin/sucrase-node" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../sucrase/bin/sucrase-node" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../sucrase/bin/sucrase-node" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../sucrase/bin/sucrase-node" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\sucrase\bin\sucrase" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../sucrase/bin/sucrase" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../sucrase/bin/sucrase" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../sucrase/bin/sucrase" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../sucrase/bin/sucrase" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../tailwindcss/lib/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../tailwindcss/lib/cli.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\tailwindcss\lib\cli.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../tailwindcss/lib/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../tailwindcss/lib/cli.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\tailwindcss\lib\cli.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../tailwindcss/lib/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../tree-kill/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../tree-kill/cli.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\tree-kill\cli.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../tree-kill/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../tree-kill/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../tree-kill/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../tree-kill/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../update-browserslist-db/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../update-browserslist-db/cli.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\update-browserslist-db\cli.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../update-browserslist-db/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../update-browserslist-db/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../update-browserslist-db/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../update-browserslist-db/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../vite/bin/vite.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../vite/bin/vite.js" "$@"
|
||||||
|
fi
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\vite\bin\vite.js" %*
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../vite/bin/vite.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../vite/bin/vite.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../vite/bin/vite.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../vite/bin/vite.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue