Spaces:
Running
Running
Upload 1796 files
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- Dockerfile +10 -0
- __pycache__/debug.cpython-310.pyc +0 -0
- app.py +360 -0
- debug.py +32 -0
- image.py +38 -0
- node_modules/.bin/cssesc +3 -0
- node_modules/.bin/cssesc.cmd +3 -0
- node_modules/.bin/cssesc.ps1 +3 -0
- node_modules/.bin/glob +3 -0
- node_modules/.bin/glob.cmd +3 -0
- node_modules/.bin/glob.ps1 +3 -0
- node_modules/.bin/jiti +3 -0
- node_modules/.bin/jiti.cmd +3 -0
- node_modules/.bin/jiti.ps1 +3 -0
- node_modules/.bin/nanoid +3 -0
- node_modules/.bin/nanoid.cmd +3 -0
- node_modules/.bin/nanoid.ps1 +3 -0
- node_modules/.bin/node-which +3 -0
- node_modules/.bin/node-which.cmd +3 -0
- node_modules/.bin/node-which.ps1 +3 -0
- node_modules/.bin/resolve +3 -0
- node_modules/.bin/resolve.cmd +3 -0
- node_modules/.bin/resolve.ps1 +3 -0
- node_modules/.bin/sucrase +3 -0
- node_modules/.bin/sucrase-node +3 -0
- node_modules/.bin/sucrase-node.cmd +3 -0
- node_modules/.bin/sucrase-node.ps1 +3 -0
- node_modules/.bin/sucrase.cmd +3 -0
- node_modules/.bin/sucrase.ps1 +3 -0
- node_modules/.bin/tailwind +3 -0
- node_modules/.bin/tailwind.cmd +3 -0
- node_modules/.bin/tailwind.ps1 +3 -0
- node_modules/.bin/tailwindcss +3 -0
- node_modules/.bin/tailwindcss.cmd +3 -0
- node_modules/.bin/tailwindcss.ps1 +3 -0
- node_modules/.bin/yaml +3 -0
- node_modules/.bin/yaml.cmd +3 -0
- node_modules/.bin/yaml.ps1 +3 -0
- node_modules/.package-lock.json +1532 -0
- node_modules/@alloc/quick-lru/index.d.ts +128 -0
- node_modules/@alloc/quick-lru/index.js +263 -0
- node_modules/@alloc/quick-lru/license +9 -0
- node_modules/@alloc/quick-lru/package.json +43 -0
- node_modules/@alloc/quick-lru/readme.md +139 -0
- node_modules/@isaacs/cliui/LICENSE.txt +14 -0
- node_modules/@isaacs/cliui/README.md +143 -0
- node_modules/@isaacs/cliui/build/index.cjs +317 -0
- node_modules/@isaacs/cliui/build/index.d.cts +43 -0
- node_modules/@isaacs/cliui/build/lib/index.js +302 -0
- node_modules/@isaacs/cliui/index.mjs +14 -0
Dockerfile
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
FROM python:3.9-slim
|
2 |
+
|
3 |
+
WORKDIR /app
|
4 |
+
|
5 |
+
COPY requirements.txt .
|
6 |
+
RUN pip install --no-cache-dir -r requirements.txt
|
7 |
+
|
8 |
+
COPY . .
|
9 |
+
|
10 |
+
CMD ["python", "app.py"]
|
__pycache__/debug.cpython-310.pyc
ADDED
Binary file (1.08 kB). View file
|
|
app.py
ADDED
@@ -0,0 +1,360 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import json
|
3 |
+
from datetime import datetime
|
4 |
+
from flask import Flask, request, render_template, jsonify, Response, send_from_directory, session
|
5 |
+
from flask_cors import CORS
|
6 |
+
import uuid
|
7 |
+
import debug
|
8 |
+
import logging
|
9 |
+
import time
|
10 |
+
import google.generativeai as genai
|
11 |
+
from werkzeug.utils import secure_filename
|
12 |
+
app = Flask(__name__)
|
13 |
+
CORS(app)
|
14 |
+
|
15 |
+
app.secret_key = os.urandom(24)
|
16 |
+
CHAT_HISTORY_DIR = '/tmp/chat_histories'
|
17 |
+
PRESETS_DIR = '/tmp/presets'
|
18 |
+
os.makedirs(PRESETS_DIR, exist_ok=True)
|
19 |
+
os.makedirs(CHAT_HISTORY_DIR, exist_ok=True)
|
20 |
+
UPLOAD_FOLDER = '/tmp/uploads'
|
21 |
+
if not os.path.exists(UPLOAD_FOLDER):
|
22 |
+
os.makedirs(UPLOAD_FOLDER)
|
23 |
+
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
|
24 |
+
|
25 |
+
logging.basicConfig(level=logging.DEBUG)
|
26 |
+
logger = logging.getLogger(__name__)
|
27 |
+
|
28 |
+
PREDEFINED_PRESETS = [
|
29 |
+
{
|
30 |
+
'id': 'default',
|
31 |
+
'name':'默认',
|
32 |
+
'content': "You are a helpful assistant."
|
33 |
+
},
|
34 |
+
{
|
35 |
+
'id':'article_editing',
|
36 |
+
'name':'文章润色',
|
37 |
+
'content': "As a writing improvement assistant, your task is to improve the spelling, grammar, clarity, concision, and overall readability of the text provided, while breaking down long sentences, reducing repetition, and providing suggestions for improvement. Please provide only the corrected Chinese version of the text and avoid including explanations."},
|
38 |
+
{
|
39 |
+
'id':'translation',
|
40 |
+
'name':'翻译',
|
41 |
+
'content': "我希望你能担任翻译、拼写校对和修辞改进的角色。我会用任何语言和你交流,你会识别语言,将其翻译并用更为优美和精炼的中文或英文回答我。请将我简单的词汇和句子替换成更为优美和高雅的表达方式,确保意思不变,但使其更具文学性。请仅回答更正和改进的部分,不要写解释。"
|
42 |
+
},
|
43 |
+
{
|
44 |
+
'id':'discussion',
|
45 |
+
'name':'辩论',
|
46 |
+
'content': "I want you to act as a debater. I will provide you with some topics related to current events and your task is to research both sides of the debates, present valid arguments for each side, refute opposing points of view, and draw persuasive conclusions based on evidence. Your goal is to help people come away from the discussion with increased knowledge and insight into the topic at hand. The entire conversation and instructions should be provided in Chinese."
|
47 |
+
},
|
48 |
+
{
|
49 |
+
'id':'regex_generator',
|
50 |
+
'name':'正则表达式生成器',
|
51 |
+
'content': "I want you to act as a regex generator. Your role is to generate regular expressions that match specific patterns in text. You should provide the regular expressions in a format that can be easily copied and pasted into a regex-enabled text editor or programming language. Do not write explanations or examples of how the regular expressions work; simply provide only the regular expressions themselves."
|
52 |
+
},
|
53 |
+
{
|
54 |
+
'id':'front_end_developer',
|
55 |
+
'name':'前端开发',
|
56 |
+
'content': "I want you to act as a Senior Frontend developer. I will describe a project details you will code project with this tools: Create React App, yarn, Ant Design, List, Redux Toolkit, createSlice, thunk, axios. You should merge files in single index.js file and nothing else. Do not write explanations."
|
57 |
+
}
|
58 |
+
]
|
59 |
+
|
60 |
+
class APIKeyManager:
|
61 |
+
def __init__(self):
|
62 |
+
self.api_keys = os.environ.get('API_KEYS', '').split(',')
|
63 |
+
self.daily_uses = {key: 0 for key in self.api_keys}
|
64 |
+
self.last_reset = datetime.now().date()
|
65 |
+
|
66 |
+
def reset_daily_uses(self):
|
67 |
+
today = datetime.now().date()
|
68 |
+
if today > self.last_reset:
|
69 |
+
self.daily_uses = {key: 0 for key in self.api_keys}
|
70 |
+
self.last_reset = today
|
71 |
+
|
72 |
+
def get_available_key(self):
|
73 |
+
self.reset_daily_uses()
|
74 |
+
for key in self.api_keys:
|
75 |
+
if self.daily_uses[key] < 200:
|
76 |
+
self.daily_uses[key] += 1
|
77 |
+
return key
|
78 |
+
return None
|
79 |
+
|
80 |
+
key_manager = APIKeyManager()
|
81 |
+
|
82 |
+
def get_or_create_session_id():
|
83 |
+
if 'session_id' not in session:
|
84 |
+
session['session_id'] = str(uuid.uuid4())
|
85 |
+
return session['session_id']
|
86 |
+
|
87 |
+
def get_chat_history_path(session_id):
|
88 |
+
return os.path.join(CHAT_HISTORY_DIR, f'{session_id}.json')
|
89 |
+
"""加载聊天历史记录"""
|
90 |
+
def load_chat_history(session_id):
|
91 |
+
|
92 |
+
history_path = get_chat_history_path(session_id)
|
93 |
+
try:
|
94 |
+
if os.path.exists(history_path):
|
95 |
+
with open(history_path, 'r', encoding='utf-8') as f:
|
96 |
+
return json.load(f)
|
97 |
+
except Exception as e:
|
98 |
+
print(f"Error loading chat history: {e}")
|
99 |
+
return []
|
100 |
+
"""保存聊天历史记录"""
|
101 |
+
def save_chat_history(session_id, history):
|
102 |
+
|
103 |
+
history_path = get_chat_history_path(session_id)
|
104 |
+
try:
|
105 |
+
with open(history_path, 'w', encoding='utf-8') as f:
|
106 |
+
json.dump(history, f, ensure_ascii=False, indent=2)
|
107 |
+
except Exception as e:
|
108 |
+
print(f"Error saving chat history: {e}")
|
109 |
+
|
110 |
+
def upload_to_gemini(path, mime_type=None):
|
111 |
+
"""上传文件到Gemini API"""
|
112 |
+
file = genai.upload_file(path, mime_type=mime_type)
|
113 |
+
logger.debug(f"Uploaded file '{file.display_name}' as: {file.uri}")
|
114 |
+
return file
|
115 |
+
|
116 |
+
def wait_for_files_active(files):
|
117 |
+
"""等待文件处理完成"""
|
118 |
+
logger.debug("Waiting for file processing...")
|
119 |
+
for name in (file.name for file in files):
|
120 |
+
file = genai.get_file(name)
|
121 |
+
while file.state.name == "PROCESSING":
|
122 |
+
logger.debug(".", end="", flush=True)
|
123 |
+
time.sleep(10)
|
124 |
+
file = genai.get_file(name)
|
125 |
+
if file.state.name != "ACTIVE":
|
126 |
+
raise Exception(f"File {file.name} failed to process")
|
127 |
+
logger.debug("...all files ready")
|
128 |
+
|
129 |
+
@app.route('/upload', methods=['POST'])
|
130 |
+
def upload_file():
|
131 |
+
if 'file' not in request.files:
|
132 |
+
return jsonify({'error': 'No file part'}), 400
|
133 |
+
|
134 |
+
file = request.files['file']
|
135 |
+
if file.filename == '':
|
136 |
+
return jsonify({'error': 'No selected file'}), 400
|
137 |
+
|
138 |
+
if file:
|
139 |
+
filename = secure_filename(file.filename)
|
140 |
+
filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
|
141 |
+
file.save(filepath)
|
142 |
+
|
143 |
+
# 获取MIME类型
|
144 |
+
mime_type = file.content_type
|
145 |
+
|
146 |
+
# 上传到Gemini
|
147 |
+
try:
|
148 |
+
gemini_file = upload_to_gemini(filepath, mime_type=mime_type)
|
149 |
+
wait_for_files_active([gemini_file])
|
150 |
+
return jsonify({
|
151 |
+
'success': True,
|
152 |
+
'filename': filename,
|
153 |
+
'gemini_uri': gemini_file.uri
|
154 |
+
})
|
155 |
+
except Exception as e:
|
156 |
+
logger.error(f"Error uploading file: {str(e)}")
|
157 |
+
return jsonify({'error': str(e)}), 500
|
158 |
+
|
159 |
+
def process_chat_with_files(chat_history, system_instruction, api_key):
|
160 |
+
"""
|
161 |
+
Combined function to handle file upload and chat functionality
|
162 |
+
|
163 |
+
Args:
|
164 |
+
chat_history (str): Chat history as JSON string
|
165 |
+
system_instruction (str): System instruction for the model
|
166 |
+
api_key (str): Gemini API key
|
167 |
+
|
168 |
+
Returns:
|
169 |
+
Response: Server-sent events response with chat messages
|
170 |
+
"""
|
171 |
+
try:
|
172 |
+
# Configure Gemini
|
173 |
+
genai.configure(api_key=api_key)
|
174 |
+
|
175 |
+
# Initialize model
|
176 |
+
generation_config = {
|
177 |
+
"temperature": 1,
|
178 |
+
"top_p": 0.95,
|
179 |
+
"top_k": 40,
|
180 |
+
"max_output_tokens": 8192,
|
181 |
+
"response_mime_type": "text/plain",
|
182 |
+
}
|
183 |
+
|
184 |
+
model = genai.GenerativeModel(
|
185 |
+
model_name="gemini-1.5-pro-002",
|
186 |
+
generation_config=generation_config,
|
187 |
+
system_instruction=system_instruction,
|
188 |
+
)
|
189 |
+
|
190 |
+
# Process files if any
|
191 |
+
|
192 |
+
# Create chat session
|
193 |
+
chat_session = model.start_chat()
|
194 |
+
|
195 |
+
def generate():
|
196 |
+
response = chat_session.send_message(chat_history, stream=True)
|
197 |
+
for chunk in response:
|
198 |
+
if chunk.text:
|
199 |
+
yield f"data: {chunk.text}\n\n"
|
200 |
+
|
201 |
+
return Response(generate(), mimetype='text/event-stream')
|
202 |
+
|
203 |
+
except Exception as e:
|
204 |
+
logger.error(f"Error in process_chat_with_files: {str(e)}")
|
205 |
+
return jsonify({'error': str(e)}), 500
|
206 |
+
|
207 |
+
@app.route('/presets', methods=['GET'])
|
208 |
+
def get_presets():
|
209 |
+
presets = []
|
210 |
+
for filename in os.listdir(PRESETS_DIR):
|
211 |
+
if filename.endswith('.json'):
|
212 |
+
with open(os.path.join(PRESETS_DIR, filename), 'r', encoding='utf-8') as f:
|
213 |
+
preset = json.load(f)
|
214 |
+
presets.append(preset)
|
215 |
+
return jsonify(PREDEFINED_PRESETS + presets)
|
216 |
+
|
217 |
+
@app.route('/add_preset', methods=['POST'])
|
218 |
+
def add_preset():
|
219 |
+
data = request.get_json()
|
220 |
+
if not data or 'name' not in data or 'content' not in data:
|
221 |
+
return jsonify({'status': 'error', 'error': 'Invalid request data'}), 400
|
222 |
+
|
223 |
+
preset_id = str(uuid.uuid4())
|
224 |
+
preset = {
|
225 |
+
'id': preset_id,
|
226 |
+
'name': data['name'],
|
227 |
+
'content': data['content']
|
228 |
+
}
|
229 |
+
with open(os.path.join(PRESETS_DIR, f'{preset_id}.json'), 'w', encoding='utf-8') as f:
|
230 |
+
json.dump(preset, f, ensure_ascii=False, indent=2)
|
231 |
+
return jsonify({'status': 'success', 'id': preset_id})
|
232 |
+
|
233 |
+
@app.route('/delete_preset', methods=['POST'])
|
234 |
+
def delete_preset():
|
235 |
+
data = request.get_json()
|
236 |
+
if not data or 'id' not in data:
|
237 |
+
return jsonify({'status': 'error', 'error': 'Invalid request data'}), 400
|
238 |
+
|
239 |
+
preset_id = data['id']
|
240 |
+
# 检查是否为预定义预设
|
241 |
+
for preset in PREDEFINED_PRESETS:
|
242 |
+
if preset['id'] == preset_id:
|
243 |
+
return jsonify({'status': 'error', 'error': 'Cannot delete predefined preset'}), 403
|
244 |
+
|
245 |
+
preset_file = os.path.join(PRESETS_DIR, f'{preset_id}.json')
|
246 |
+
if os.path.exists(preset_file):
|
247 |
+
os.remove(preset_file)
|
248 |
+
return jsonify({'status': 'success'})
|
249 |
+
return jsonify({'status': 'error', 'error': 'Preset not found'}), 404
|
250 |
+
|
251 |
+
@app.route('/upload', methods=['POST'])
|
252 |
+
def upload_file():
|
253 |
+
if 'file' not in request.files:
|
254 |
+
return jsonify({'error': 'No file part'}), 400
|
255 |
+
|
256 |
+
file = request.files['file']
|
257 |
+
if file.filename == '':
|
258 |
+
return jsonify({'error': 'No selected file'}), 400
|
259 |
+
|
260 |
+
if file:
|
261 |
+
filename = secure_filename(file.filename)
|
262 |
+
filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
|
263 |
+
file.save(filepath)
|
264 |
+
|
265 |
+
# 获取MIME类型
|
266 |
+
mime_type = file.content_type
|
267 |
+
|
268 |
+
# 上传到Gemini
|
269 |
+
try:
|
270 |
+
gemini_file = upload_to_gemini(filepath, mime_type=mime_type)
|
271 |
+
wait_for_files_active([gemini_file])
|
272 |
+
return jsonify({
|
273 |
+
'success': True,
|
274 |
+
'filename': filename,
|
275 |
+
'gemini_uri': gemini_file.uri
|
276 |
+
})
|
277 |
+
except Exception as e:
|
278 |
+
logger.error(f"Error uploading file: {str(e)}")
|
279 |
+
return jsonify({'error': str(e)}), 500
|
280 |
+
|
281 |
+
|
282 |
+
@app.route('/')
|
283 |
+
def index():
|
284 |
+
return render_template('index.html')
|
285 |
+
|
286 |
+
@app.route('/chat', methods=['POST'])
|
287 |
+
def chat():
|
288 |
+
data = request.get_json()
|
289 |
+
if not data or 'message' not in data or 'preset' not in data:
|
290 |
+
return jsonify({'status': 'error', 'error': 'Invalid request data'}), 400
|
291 |
+
|
292 |
+
message = data['message']
|
293 |
+
preset_id = data['preset']
|
294 |
+
session_id = get_or_create_session_id()
|
295 |
+
chat_history = load_chat_history(session_id)
|
296 |
+
files = data.get('files', [])
|
297 |
+
system_instruction = ""
|
298 |
+
preset_name = None
|
299 |
+
|
300 |
+
for preset in PREDEFINED_PRESETS:
|
301 |
+
if preset['id'] == preset_id:
|
302 |
+
system_message = preset['content']
|
303 |
+
preset_name = preset['name']
|
304 |
+
break
|
305 |
+
|
306 |
+
if system_message is None:
|
307 |
+
preset_file = os.path.join(PRESETS_DIR, f'{preset_id}.json')
|
308 |
+
if os.path.exists(preset_file):
|
309 |
+
with open(preset_file, 'r', encoding='utf-8') as f:
|
310 |
+
preset_data = json.load(f)
|
311 |
+
system_message = preset_data['content']
|
312 |
+
preset_name = preset_data['name']
|
313 |
+
else:
|
314 |
+
# 使用默认预设
|
315 |
+
default_preset = next(p for p in PREDEFINED_PRESETS if p['id'] == 'default')
|
316 |
+
system_message = default_preset['content']
|
317 |
+
preset_name = default_preset['name']
|
318 |
+
|
319 |
+
key = key_manager.get_available_key()
|
320 |
+
if not key:
|
321 |
+
yield "No available API keys."
|
322 |
+
return
|
323 |
+
|
324 |
+
debug.log_prompt(chat_history, preset_name)
|
325 |
+
|
326 |
+
messages = chat_history + {"role": "user", "parts": [message]}
|
327 |
+
|
328 |
+
return process_chat_with_files(messages, files, system_instruction, key)
|
329 |
+
|
330 |
+
|
331 |
+
@app.route('/history', methods=['GET'])
|
332 |
+
def get_history():
|
333 |
+
"""获取聊天历史记录"""
|
334 |
+
session_id = get_or_create_session_id()
|
335 |
+
history = load_chat_history(session_id)
|
336 |
+
return jsonify(history)
|
337 |
+
|
338 |
+
@app.route('/clear_history', methods=['POST'])
|
339 |
+
def clear_history():
|
340 |
+
"""清除聊天历史记录"""
|
341 |
+
session_id = get_or_create_session_id()
|
342 |
+
try:
|
343 |
+
os.remove(get_chat_history_path(session_id))
|
344 |
+
return jsonify({"status": "success"})
|
345 |
+
except Exception as e:
|
346 |
+
return jsonify({"status": "error", "message": str(e)})
|
347 |
+
@app.route('/switch_models', methods=['POST'])
|
348 |
+
def switch_models():
|
349 |
+
"""切换模型"""
|
350 |
+
data = request.get_json()
|
351 |
+
if not data or 'model' not in data:
|
352 |
+
return jsonify({'status': 'error', 'error': 'Invalid request data'}), 400
|
353 |
+
|
354 |
+
model = data['model']
|
355 |
+
session['model'] = model
|
356 |
+
return jsonify({'status': 'success', 'model': model})
|
357 |
+
|
358 |
+
|
359 |
+
if __name__ == '__main__':
|
360 |
+
app.run(debug=True, host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))
|
debug.py
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import logging
|
2 |
+
from flask import Flask
|
3 |
+
from werkzeug.middleware.proxy_fix import ProxyFix
|
4 |
+
|
5 |
+
logging.basicConfig(level=logging.INFO)
|
6 |
+
logger = logging.getLogger(__name__)
|
7 |
+
app = Flask(__name__)
|
8 |
+
app.wsgi_app = ProxyFix(app.wsgi_app)
|
9 |
+
|
10 |
+
# 创建自定义的日志过滤器
|
11 |
+
class StaticFilter(logging.Filter):
|
12 |
+
def filter(self, record):
|
13 |
+
# 如果是静态资源的请求并且状态码是304,则不记录
|
14 |
+
return not (
|
15 |
+
('/static/' in record.getMessage() and '304' in record.getMessage()) or
|
16 |
+
('.css' in record.getMessage() and '304' in record.getMessage()) or
|
17 |
+
('.js' in record.getMessage() and '304' in record.getMessage())
|
18 |
+
)
|
19 |
+
|
20 |
+
# 配置werkzeug的日志
|
21 |
+
logging.getLogger('werkzeug').addFilter(StaticFilter())
|
22 |
+
|
23 |
+
# 设置基本的日志格式
|
24 |
+
logging.basicConfig(
|
25 |
+
level=logging.INFO,
|
26 |
+
format='%(name)s:%(message)s'
|
27 |
+
)
|
28 |
+
|
29 |
+
def log_prompt(messages, preset_name):
|
30 |
+
logger.info(f"Preset: {preset_name}")
|
31 |
+
for message in messages:
|
32 |
+
logger.info(message)
|
image.py
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import requests
|
2 |
+
from flask import jsonify
|
3 |
+
|
4 |
+
def generate_image(prompt, API_KEY):
|
5 |
+
try:
|
6 |
+
url = "https://api.siliconflow.cn/v1/images/generations"
|
7 |
+
payload = {
|
8 |
+
"model": "black-forest-labs/FLUX.1-schnell",
|
9 |
+
"prompt": prompt,
|
10 |
+
"negative_prompt": "",
|
11 |
+
"image_size": "768x1024",
|
12 |
+
"batch_size": 1,
|
13 |
+
"num_inference_steps": 20,
|
14 |
+
"guidance_scale": 7.5,
|
15 |
+
"seed": 42746333
|
16 |
+
}
|
17 |
+
|
18 |
+
headers = {
|
19 |
+
"Authorization": f"Bearer {API_KEY}",
|
20 |
+
"Content-Type": "application/json"
|
21 |
+
}
|
22 |
+
|
23 |
+
response = requests.post(url, json=payload, headers=headers)
|
24 |
+
response_data = response.json()
|
25 |
+
|
26 |
+
# 返回图片URL和其他相关信息
|
27 |
+
return jsonify({
|
28 |
+
'success': True,
|
29 |
+
'image_url': response_data['images'][0]['url'],
|
30 |
+
'created': response_data['created'],
|
31 |
+
'inference_time': response_data['timings']['inference']
|
32 |
+
})
|
33 |
+
|
34 |
+
except Exception as e:
|
35 |
+
return jsonify({
|
36 |
+
'success': False,
|
37 |
+
'error': str(e)
|
38 |
+
}), 500
|
node_modules/.bin/cssesc
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:45f8a95cd64d2610a3a1007ebfa30acfd1cd85c3732e8ad2cba2c8d481e546d0
|
3 |
+
size 383
|
node_modules/.bin/cssesc.cmd
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:7359ecf99abe40a63d62024e521a456502eab67ad716105a231371fc1982a858
|
3 |
+
size 322
|
node_modules/.bin/cssesc.ps1
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:374097dc2c3fac96d5a11ec029ec1598d4098a70242bb3c31012a85bd5ee4655
|
3 |
+
size 793
|
node_modules/.bin/glob
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:130747a55febb9be265dba4f9089710e9c07ba271991f6b51cc368ab248e6480
|
3 |
+
size 391
|
node_modules/.bin/glob.cmd
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:df2ccc1e8c6ca43ba5e5b7bcf3b98e1d6af8aab688a6bd089dda07b916f0ca9f
|
3 |
+
size 326
|
node_modules/.bin/glob.ps1
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:76d0468f0c2a332cc900218fb3cd3dfff4ba6e836b7cd0d682b298c92b965aeb
|
3 |
+
size 809
|
node_modules/.bin/jiti
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:de38b4847b2364ef7277f1c40e35a2956b1020238939d1b84346b5e9de44d4e7
|
3 |
+
size 381
|
node_modules/.bin/jiti.cmd
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:15c05fa4b7ffb951fa06095884a35c7b68d29e9b10ee68330650b70aab4fe9cd
|
3 |
+
size 321
|
node_modules/.bin/jiti.ps1
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:ec861c1ad10be6dbc742f7ad3df668795a6719b78cd6bd6018d13ffe5e7214d8
|
3 |
+
size 789
|
node_modules/.bin/nanoid
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:49446fa7e9ea1b36b205bab243f2928f1230d8dbeb09881eef1d039149ad3238
|
3 |
+
size 391
|
node_modules/.bin/nanoid.cmd
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:65f7afb9e8bf7fd4ff2087803c18e8818334768bfe92b9c1f28346050678c0ca
|
3 |
+
size 326
|
node_modules/.bin/nanoid.ps1
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:c2b48c0422548661c689493b3249b16f93599ca15fc3af5e821f9e6bccbe2aad
|
3 |
+
size 809
|
node_modules/.bin/node-which
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:ae614137ec19cd41eab2f7a85cc508e6a19042b0dda0a2815c07e5fb43a6e059
|
3 |
+
size 389
|
node_modules/.bin/node-which.cmd
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:818856453703b9e61de47223e7505ad77cb4f40f456e348dae2ca9cd501abad0
|
3 |
+
size 325
|
node_modules/.bin/node-which.ps1
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:d293014f7b06fffc145f94cd02bd82b53c2dbbc3eba99ff62dedf882adcc1711
|
3 |
+
size 805
|
node_modules/.bin/resolve
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:ff5b354487e931da1b9c345b69fc645171767767863741e16433202a48234805
|
3 |
+
size 387
|
node_modules/.bin/resolve.cmd
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:85098bc212a2502f131e973a046be744b6c4a964852a8f09aca6222b8385f2e1
|
3 |
+
size 324
|
node_modules/.bin/resolve.ps1
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:dc0bcab59997f2fe5940bb357c67882c7a5d364dedb28242fa64ac9f10567f82
|
3 |
+
size 801
|
node_modules/.bin/sucrase
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:c58e4c8a4d504b05868c51346b895d1aede548f35a7dfe884c5719434205b74d
|
3 |
+
size 387
|
node_modules/.bin/sucrase-node
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:6a300e3712e2f6ec58b28c92fac777abf9fc4bf5c6b33bb5d7e93627a4076c03
|
3 |
+
size 397
|
node_modules/.bin/sucrase-node.cmd
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:10218c3692f8447c44751dc4a880396feda78654f0de4a15fd1202ce6c74f5d0
|
3 |
+
size 329
|
node_modules/.bin/sucrase-node.ps1
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:7e0f37a3bce9e720a0fa5ef8c09dbf977ef98b8a6854a707214177de4ea99935
|
3 |
+
size 821
|
node_modules/.bin/sucrase.cmd
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:5fe326cff606355f96cc406c405ae8358fc431229931713ffdca4267abf3e0f6
|
3 |
+
size 324
|
node_modules/.bin/sucrase.ps1
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:2ec817123310ec7c788bdb55c215f7ba0ff09e53eaa3c31fd9c94356d7bed390
|
3 |
+
size 801
|
node_modules/.bin/tailwind
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:dd913503f0c9a49c0e4cf5554d867c78e7137ece97030b53ff2ae04113853cc5
|
3 |
+
size 393
|
node_modules/.bin/tailwind.cmd
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:6ae7c3f42c8be1f99ed8feac587bd2209f604a3e392a0eddf4ef95d2899a0ac6
|
3 |
+
size 327
|
node_modules/.bin/tailwind.ps1
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:9686bec910192b004996759cdb3f6d1b77c11aa87189b32f4b391343848b07e8
|
3 |
+
size 813
|
node_modules/.bin/tailwindcss
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:dd913503f0c9a49c0e4cf5554d867c78e7137ece97030b53ff2ae04113853cc5
|
3 |
+
size 393
|
node_modules/.bin/tailwindcss.cmd
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:6ae7c3f42c8be1f99ed8feac587bd2209f604a3e392a0eddf4ef95d2899a0ac6
|
3 |
+
size 327
|
node_modules/.bin/tailwindcss.ps1
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:9686bec910192b004996759cdb3f6d1b77c11aa87189b32f4b391343848b07e8
|
3 |
+
size 813
|
node_modules/.bin/yaml
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:16d4e808827daf638b1f0fc3f7f56de0e5f3a5e2950b0b8ef7535cdf4724bce6
|
3 |
+
size 373
|
node_modules/.bin/yaml.cmd
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:fd3e6538ec1018083ba89d43d80b406fc13ae722b7a5ba512211d70965d3f50a
|
3 |
+
size 317
|
node_modules/.bin/yaml.ps1
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:33e7d103b962140a5b3a797f1344e2299c31521c4486683c69e09c2310158c70
|
3 |
+
size 773
|
node_modules/.package-lock.json
ADDED
@@ -0,0 +1,1532 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "custom-gpt",
|
3 |
+
"version": "1.0.0",
|
4 |
+
"lockfileVersion": 3,
|
5 |
+
"requires": true,
|
6 |
+
"packages": {
|
7 |
+
"node_modules/@alloc/quick-lru": {
|
8 |
+
"version": "5.2.0",
|
9 |
+
"resolved": "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
|
10 |
+
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
|
11 |
+
"dev": true,
|
12 |
+
"license": "MIT",
|
13 |
+
"engines": {
|
14 |
+
"node": ">=10"
|
15 |
+
},
|
16 |
+
"funding": {
|
17 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
18 |
+
}
|
19 |
+
},
|
20 |
+
"node_modules/@isaacs/cliui": {
|
21 |
+
"version": "8.0.2",
|
22 |
+
"resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
23 |
+
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
|
24 |
+
"dev": true,
|
25 |
+
"license": "ISC",
|
26 |
+
"dependencies": {
|
27 |
+
"string-width": "^5.1.2",
|
28 |
+
"string-width-cjs": "npm:string-width@^4.2.0",
|
29 |
+
"strip-ansi": "^7.0.1",
|
30 |
+
"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
|
31 |
+
"wrap-ansi": "^8.1.0",
|
32 |
+
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
|
33 |
+
},
|
34 |
+
"engines": {
|
35 |
+
"node": ">=12"
|
36 |
+
}
|
37 |
+
},
|
38 |
+
"node_modules/@jridgewell/gen-mapping": {
|
39 |
+
"version": "0.3.5",
|
40 |
+
"resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
|
41 |
+
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
|
42 |
+
"dev": true,
|
43 |
+
"license": "MIT",
|
44 |
+
"dependencies": {
|
45 |
+
"@jridgewell/set-array": "^1.2.1",
|
46 |
+
"@jridgewell/sourcemap-codec": "^1.4.10",
|
47 |
+
"@jridgewell/trace-mapping": "^0.3.24"
|
48 |
+
},
|
49 |
+
"engines": {
|
50 |
+
"node": ">=6.0.0"
|
51 |
+
}
|
52 |
+
},
|
53 |
+
"node_modules/@jridgewell/resolve-uri": {
|
54 |
+
"version": "3.1.2",
|
55 |
+
"resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
56 |
+
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
57 |
+
"dev": true,
|
58 |
+
"license": "MIT",
|
59 |
+
"engines": {
|
60 |
+
"node": ">=6.0.0"
|
61 |
+
}
|
62 |
+
},
|
63 |
+
"node_modules/@jridgewell/set-array": {
|
64 |
+
"version": "1.2.1",
|
65 |
+
"resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz",
|
66 |
+
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
|
67 |
+
"dev": true,
|
68 |
+
"license": "MIT",
|
69 |
+
"engines": {
|
70 |
+
"node": ">=6.0.0"
|
71 |
+
}
|
72 |
+
},
|
73 |
+
"node_modules/@jridgewell/sourcemap-codec": {
|
74 |
+
"version": "1.5.0",
|
75 |
+
"resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
|
76 |
+
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
|
77 |
+
"dev": true,
|
78 |
+
"license": "MIT"
|
79 |
+
},
|
80 |
+
"node_modules/@jridgewell/trace-mapping": {
|
81 |
+
"version": "0.3.25",
|
82 |
+
"resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
|
83 |
+
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
|
84 |
+
"dev": true,
|
85 |
+
"license": "MIT",
|
86 |
+
"dependencies": {
|
87 |
+
"@jridgewell/resolve-uri": "^3.1.0",
|
88 |
+
"@jridgewell/sourcemap-codec": "^1.4.14"
|
89 |
+
}
|
90 |
+
},
|
91 |
+
"node_modules/@nodelib/fs.scandir": {
|
92 |
+
"version": "2.1.5",
|
93 |
+
"resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
94 |
+
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
|
95 |
+
"dev": true,
|
96 |
+
"license": "MIT",
|
97 |
+
"dependencies": {
|
98 |
+
"@nodelib/fs.stat": "2.0.5",
|
99 |
+
"run-parallel": "^1.1.9"
|
100 |
+
},
|
101 |
+
"engines": {
|
102 |
+
"node": ">= 8"
|
103 |
+
}
|
104 |
+
},
|
105 |
+
"node_modules/@nodelib/fs.stat": {
|
106 |
+
"version": "2.0.5",
|
107 |
+
"resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
|
108 |
+
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
|
109 |
+
"dev": true,
|
110 |
+
"license": "MIT",
|
111 |
+
"engines": {
|
112 |
+
"node": ">= 8"
|
113 |
+
}
|
114 |
+
},
|
115 |
+
"node_modules/@nodelib/fs.walk": {
|
116 |
+
"version": "1.2.8",
|
117 |
+
"resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
|
118 |
+
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
|
119 |
+
"dev": true,
|
120 |
+
"license": "MIT",
|
121 |
+
"dependencies": {
|
122 |
+
"@nodelib/fs.scandir": "2.1.5",
|
123 |
+
"fastq": "^1.6.0"
|
124 |
+
},
|
125 |
+
"engines": {
|
126 |
+
"node": ">= 8"
|
127 |
+
}
|
128 |
+
},
|
129 |
+
"node_modules/@pkgjs/parseargs": {
|
130 |
+
"version": "0.11.0",
|
131 |
+
"resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
132 |
+
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
|
133 |
+
"dev": true,
|
134 |
+
"license": "MIT",
|
135 |
+
"optional": true,
|
136 |
+
"engines": {
|
137 |
+
"node": ">=14"
|
138 |
+
}
|
139 |
+
},
|
140 |
+
"node_modules/@tailwindcss/typography": {
|
141 |
+
"version": "0.5.15",
|
142 |
+
"resolved": "https://registry.npmmirror.com/@tailwindcss/typography/-/typography-0.5.15.tgz",
|
143 |
+
"integrity": "sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==",
|
144 |
+
"dev": true,
|
145 |
+
"license": "MIT",
|
146 |
+
"dependencies": {
|
147 |
+
"lodash.castarray": "^4.4.0",
|
148 |
+
"lodash.isplainobject": "^4.0.6",
|
149 |
+
"lodash.merge": "^4.6.2",
|
150 |
+
"postcss-selector-parser": "6.0.10"
|
151 |
+
},
|
152 |
+
"peerDependencies": {
|
153 |
+
"tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20"
|
154 |
+
}
|
155 |
+
},
|
156 |
+
"node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
|
157 |
+
"version": "6.0.10",
|
158 |
+
"resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
|
159 |
+
"integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
|
160 |
+
"dev": true,
|
161 |
+
"license": "MIT",
|
162 |
+
"dependencies": {
|
163 |
+
"cssesc": "^3.0.0",
|
164 |
+
"util-deprecate": "^1.0.2"
|
165 |
+
},
|
166 |
+
"engines": {
|
167 |
+
"node": ">=4"
|
168 |
+
}
|
169 |
+
},
|
170 |
+
"node_modules/ansi-regex": {
|
171 |
+
"version": "6.1.0",
|
172 |
+
"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.1.0.tgz",
|
173 |
+
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
|
174 |
+
"dev": true,
|
175 |
+
"license": "MIT",
|
176 |
+
"engines": {
|
177 |
+
"node": ">=12"
|
178 |
+
},
|
179 |
+
"funding": {
|
180 |
+
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
|
181 |
+
}
|
182 |
+
},
|
183 |
+
"node_modules/ansi-styles": {
|
184 |
+
"version": "6.2.1",
|
185 |
+
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz",
|
186 |
+
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
|
187 |
+
"dev": true,
|
188 |
+
"license": "MIT",
|
189 |
+
"engines": {
|
190 |
+
"node": ">=12"
|
191 |
+
},
|
192 |
+
"funding": {
|
193 |
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
194 |
+
}
|
195 |
+
},
|
196 |
+
"node_modules/any-promise": {
|
197 |
+
"version": "1.3.0",
|
198 |
+
"resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz",
|
199 |
+
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
|
200 |
+
"dev": true,
|
201 |
+
"license": "MIT"
|
202 |
+
},
|
203 |
+
"node_modules/anymatch": {
|
204 |
+
"version": "3.1.3",
|
205 |
+
"resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
|
206 |
+
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
|
207 |
+
"dev": true,
|
208 |
+
"license": "ISC",
|
209 |
+
"dependencies": {
|
210 |
+
"normalize-path": "^3.0.0",
|
211 |
+
"picomatch": "^2.0.4"
|
212 |
+
},
|
213 |
+
"engines": {
|
214 |
+
"node": ">= 8"
|
215 |
+
}
|
216 |
+
},
|
217 |
+
"node_modules/arg": {
|
218 |
+
"version": "5.0.2",
|
219 |
+
"resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz",
|
220 |
+
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
|
221 |
+
"dev": true,
|
222 |
+
"license": "MIT"
|
223 |
+
},
|
224 |
+
"node_modules/balanced-match": {
|
225 |
+
"version": "1.0.2",
|
226 |
+
"resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
|
227 |
+
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
|
228 |
+
"dev": true,
|
229 |
+
"license": "MIT"
|
230 |
+
},
|
231 |
+
"node_modules/binary-extensions": {
|
232 |
+
"version": "2.3.0",
|
233 |
+
"resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
|
234 |
+
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
|
235 |
+
"dev": true,
|
236 |
+
"license": "MIT",
|
237 |
+
"engines": {
|
238 |
+
"node": ">=8"
|
239 |
+
},
|
240 |
+
"funding": {
|
241 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
242 |
+
}
|
243 |
+
},
|
244 |
+
"node_modules/brace-expansion": {
|
245 |
+
"version": "2.0.1",
|
246 |
+
"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
247 |
+
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
248 |
+
"dev": true,
|
249 |
+
"license": "MIT",
|
250 |
+
"dependencies": {
|
251 |
+
"balanced-match": "^1.0.0"
|
252 |
+
}
|
253 |
+
},
|
254 |
+
"node_modules/braces": {
|
255 |
+
"version": "3.0.3",
|
256 |
+
"resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
|
257 |
+
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
258 |
+
"dev": true,
|
259 |
+
"license": "MIT",
|
260 |
+
"dependencies": {
|
261 |
+
"fill-range": "^7.1.1"
|
262 |
+
},
|
263 |
+
"engines": {
|
264 |
+
"node": ">=8"
|
265 |
+
}
|
266 |
+
},
|
267 |
+
"node_modules/camelcase-css": {
|
268 |
+
"version": "2.0.1",
|
269 |
+
"resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz",
|
270 |
+
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
|
271 |
+
"dev": true,
|
272 |
+
"license": "MIT",
|
273 |
+
"engines": {
|
274 |
+
"node": ">= 6"
|
275 |
+
}
|
276 |
+
},
|
277 |
+
"node_modules/chokidar": {
|
278 |
+
"version": "3.6.0",
|
279 |
+
"resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
|
280 |
+
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
281 |
+
"dev": true,
|
282 |
+
"license": "MIT",
|
283 |
+
"dependencies": {
|
284 |
+
"anymatch": "~3.1.2",
|
285 |
+
"braces": "~3.0.2",
|
286 |
+
"glob-parent": "~5.1.2",
|
287 |
+
"is-binary-path": "~2.1.0",
|
288 |
+
"is-glob": "~4.0.1",
|
289 |
+
"normalize-path": "~3.0.0",
|
290 |
+
"readdirp": "~3.6.0"
|
291 |
+
},
|
292 |
+
"engines": {
|
293 |
+
"node": ">= 8.10.0"
|
294 |
+
},
|
295 |
+
"funding": {
|
296 |
+
"url": "https://paulmillr.com/funding/"
|
297 |
+
},
|
298 |
+
"optionalDependencies": {
|
299 |
+
"fsevents": "~2.3.2"
|
300 |
+
}
|
301 |
+
},
|
302 |
+
"node_modules/chokidar/node_modules/glob-parent": {
|
303 |
+
"version": "5.1.2",
|
304 |
+
"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
|
305 |
+
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
306 |
+
"dev": true,
|
307 |
+
"license": "ISC",
|
308 |
+
"dependencies": {
|
309 |
+
"is-glob": "^4.0.1"
|
310 |
+
},
|
311 |
+
"engines": {
|
312 |
+
"node": ">= 6"
|
313 |
+
}
|
314 |
+
},
|
315 |
+
"node_modules/color-convert": {
|
316 |
+
"version": "2.0.1",
|
317 |
+
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
|
318 |
+
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
319 |
+
"dev": true,
|
320 |
+
"license": "MIT",
|
321 |
+
"dependencies": {
|
322 |
+
"color-name": "~1.1.4"
|
323 |
+
},
|
324 |
+
"engines": {
|
325 |
+
"node": ">=7.0.0"
|
326 |
+
}
|
327 |
+
},
|
328 |
+
"node_modules/color-name": {
|
329 |
+
"version": "1.1.4",
|
330 |
+
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
|
331 |
+
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
332 |
+
"dev": true,
|
333 |
+
"license": "MIT"
|
334 |
+
},
|
335 |
+
"node_modules/commander": {
|
336 |
+
"version": "4.1.1",
|
337 |
+
"resolved": "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz",
|
338 |
+
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
|
339 |
+
"dev": true,
|
340 |
+
"license": "MIT",
|
341 |
+
"engines": {
|
342 |
+
"node": ">= 6"
|
343 |
+
}
|
344 |
+
},
|
345 |
+
"node_modules/cross-spawn": {
|
346 |
+
"version": "7.0.3",
|
347 |
+
"resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
348 |
+
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
|
349 |
+
"dev": true,
|
350 |
+
"license": "MIT",
|
351 |
+
"dependencies": {
|
352 |
+
"path-key": "^3.1.0",
|
353 |
+
"shebang-command": "^2.0.0",
|
354 |
+
"which": "^2.0.1"
|
355 |
+
},
|
356 |
+
"engines": {
|
357 |
+
"node": ">= 8"
|
358 |
+
}
|
359 |
+
},
|
360 |
+
"node_modules/cssesc": {
|
361 |
+
"version": "3.0.0",
|
362 |
+
"resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz",
|
363 |
+
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
|
364 |
+
"dev": true,
|
365 |
+
"license": "MIT",
|
366 |
+
"bin": {
|
367 |
+
"cssesc": "bin/cssesc"
|
368 |
+
},
|
369 |
+
"engines": {
|
370 |
+
"node": ">=4"
|
371 |
+
}
|
372 |
+
},
|
373 |
+
"node_modules/didyoumean": {
|
374 |
+
"version": "1.2.2",
|
375 |
+
"resolved": "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz",
|
376 |
+
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
|
377 |
+
"dev": true,
|
378 |
+
"license": "Apache-2.0"
|
379 |
+
},
|
380 |
+
"node_modules/dlv": {
|
381 |
+
"version": "1.1.3",
|
382 |
+
"resolved": "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz",
|
383 |
+
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
|
384 |
+
"dev": true,
|
385 |
+
"license": "MIT"
|
386 |
+
},
|
387 |
+
"node_modules/eastasianwidth": {
|
388 |
+
"version": "0.2.0",
|
389 |
+
"resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
390 |
+
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
|
391 |
+
"dev": true,
|
392 |
+
"license": "MIT"
|
393 |
+
},
|
394 |
+
"node_modules/emoji-regex": {
|
395 |
+
"version": "9.2.2",
|
396 |
+
"resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz",
|
397 |
+
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
|
398 |
+
"dev": true,
|
399 |
+
"license": "MIT"
|
400 |
+
},
|
401 |
+
"node_modules/fast-glob": {
|
402 |
+
"version": "3.3.2",
|
403 |
+
"resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz",
|
404 |
+
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
|
405 |
+
"dev": true,
|
406 |
+
"license": "MIT",
|
407 |
+
"dependencies": {
|
408 |
+
"@nodelib/fs.stat": "^2.0.2",
|
409 |
+
"@nodelib/fs.walk": "^1.2.3",
|
410 |
+
"glob-parent": "^5.1.2",
|
411 |
+
"merge2": "^1.3.0",
|
412 |
+
"micromatch": "^4.0.4"
|
413 |
+
},
|
414 |
+
"engines": {
|
415 |
+
"node": ">=8.6.0"
|
416 |
+
}
|
417 |
+
},
|
418 |
+
"node_modules/fast-glob/node_modules/glob-parent": {
|
419 |
+
"version": "5.1.2",
|
420 |
+
"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
|
421 |
+
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
422 |
+
"dev": true,
|
423 |
+
"license": "ISC",
|
424 |
+
"dependencies": {
|
425 |
+
"is-glob": "^4.0.1"
|
426 |
+
},
|
427 |
+
"engines": {
|
428 |
+
"node": ">= 6"
|
429 |
+
}
|
430 |
+
},
|
431 |
+
"node_modules/fastq": {
|
432 |
+
"version": "1.17.1",
|
433 |
+
"resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz",
|
434 |
+
"integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
|
435 |
+
"dev": true,
|
436 |
+
"license": "ISC",
|
437 |
+
"dependencies": {
|
438 |
+
"reusify": "^1.0.4"
|
439 |
+
}
|
440 |
+
},
|
441 |
+
"node_modules/fill-range": {
|
442 |
+
"version": "7.1.1",
|
443 |
+
"resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
|
444 |
+
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
445 |
+
"dev": true,
|
446 |
+
"license": "MIT",
|
447 |
+
"dependencies": {
|
448 |
+
"to-regex-range": "^5.0.1"
|
449 |
+
},
|
450 |
+
"engines": {
|
451 |
+
"node": ">=8"
|
452 |
+
}
|
453 |
+
},
|
454 |
+
"node_modules/foreground-child": {
|
455 |
+
"version": "3.3.0",
|
456 |
+
"resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.0.tgz",
|
457 |
+
"integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
|
458 |
+
"dev": true,
|
459 |
+
"license": "ISC",
|
460 |
+
"dependencies": {
|
461 |
+
"cross-spawn": "^7.0.0",
|
462 |
+
"signal-exit": "^4.0.1"
|
463 |
+
},
|
464 |
+
"engines": {
|
465 |
+
"node": ">=14"
|
466 |
+
},
|
467 |
+
"funding": {
|
468 |
+
"url": "https://github.com/sponsors/isaacs"
|
469 |
+
}
|
470 |
+
},
|
471 |
+
"node_modules/function-bind": {
|
472 |
+
"version": "1.1.2",
|
473 |
+
"resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
|
474 |
+
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
475 |
+
"dev": true,
|
476 |
+
"license": "MIT",
|
477 |
+
"funding": {
|
478 |
+
"url": "https://github.com/sponsors/ljharb"
|
479 |
+
}
|
480 |
+
},
|
481 |
+
"node_modules/glob": {
|
482 |
+
"version": "10.4.5",
|
483 |
+
"resolved": "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz",
|
484 |
+
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
|
485 |
+
"dev": true,
|
486 |
+
"license": "ISC",
|
487 |
+
"dependencies": {
|
488 |
+
"foreground-child": "^3.1.0",
|
489 |
+
"jackspeak": "^3.1.2",
|
490 |
+
"minimatch": "^9.0.4",
|
491 |
+
"minipass": "^7.1.2",
|
492 |
+
"package-json-from-dist": "^1.0.0",
|
493 |
+
"path-scurry": "^1.11.1"
|
494 |
+
},
|
495 |
+
"bin": {
|
496 |
+
"glob": "dist/esm/bin.mjs"
|
497 |
+
},
|
498 |
+
"funding": {
|
499 |
+
"url": "https://github.com/sponsors/isaacs"
|
500 |
+
}
|
501 |
+
},
|
502 |
+
"node_modules/glob-parent": {
|
503 |
+
"version": "6.0.2",
|
504 |
+
"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz",
|
505 |
+
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
|
506 |
+
"dev": true,
|
507 |
+
"license": "ISC",
|
508 |
+
"dependencies": {
|
509 |
+
"is-glob": "^4.0.3"
|
510 |
+
},
|
511 |
+
"engines": {
|
512 |
+
"node": ">=10.13.0"
|
513 |
+
}
|
514 |
+
},
|
515 |
+
"node_modules/hasown": {
|
516 |
+
"version": "2.0.2",
|
517 |
+
"resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
|
518 |
+
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
519 |
+
"dev": true,
|
520 |
+
"license": "MIT",
|
521 |
+
"dependencies": {
|
522 |
+
"function-bind": "^1.1.2"
|
523 |
+
},
|
524 |
+
"engines": {
|
525 |
+
"node": ">= 0.4"
|
526 |
+
}
|
527 |
+
},
|
528 |
+
"node_modules/is-binary-path": {
|
529 |
+
"version": "2.1.0",
|
530 |
+
"resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
531 |
+
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
|
532 |
+
"dev": true,
|
533 |
+
"license": "MIT",
|
534 |
+
"dependencies": {
|
535 |
+
"binary-extensions": "^2.0.0"
|
536 |
+
},
|
537 |
+
"engines": {
|
538 |
+
"node": ">=8"
|
539 |
+
}
|
540 |
+
},
|
541 |
+
"node_modules/is-core-module": {
|
542 |
+
"version": "2.15.1",
|
543 |
+
"resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.15.1.tgz",
|
544 |
+
"integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
|
545 |
+
"dev": true,
|
546 |
+
"license": "MIT",
|
547 |
+
"dependencies": {
|
548 |
+
"hasown": "^2.0.2"
|
549 |
+
},
|
550 |
+
"engines": {
|
551 |
+
"node": ">= 0.4"
|
552 |
+
},
|
553 |
+
"funding": {
|
554 |
+
"url": "https://github.com/sponsors/ljharb"
|
555 |
+
}
|
556 |
+
},
|
557 |
+
"node_modules/is-extglob": {
|
558 |
+
"version": "2.1.1",
|
559 |
+
"resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
|
560 |
+
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
|
561 |
+
"dev": true,
|
562 |
+
"license": "MIT",
|
563 |
+
"engines": {
|
564 |
+
"node": ">=0.10.0"
|
565 |
+
}
|
566 |
+
},
|
567 |
+
"node_modules/is-fullwidth-code-point": {
|
568 |
+
"version": "3.0.0",
|
569 |
+
"resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
570 |
+
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
571 |
+
"dev": true,
|
572 |
+
"license": "MIT",
|
573 |
+
"engines": {
|
574 |
+
"node": ">=8"
|
575 |
+
}
|
576 |
+
},
|
577 |
+
"node_modules/is-glob": {
|
578 |
+
"version": "4.0.3",
|
579 |
+
"resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
|
580 |
+
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
|
581 |
+
"dev": true,
|
582 |
+
"license": "MIT",
|
583 |
+
"dependencies": {
|
584 |
+
"is-extglob": "^2.1.1"
|
585 |
+
},
|
586 |
+
"engines": {
|
587 |
+
"node": ">=0.10.0"
|
588 |
+
}
|
589 |
+
},
|
590 |
+
"node_modules/is-number": {
|
591 |
+
"version": "7.0.0",
|
592 |
+
"resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
|
593 |
+
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
594 |
+
"dev": true,
|
595 |
+
"license": "MIT",
|
596 |
+
"engines": {
|
597 |
+
"node": ">=0.12.0"
|
598 |
+
}
|
599 |
+
},
|
600 |
+
"node_modules/isexe": {
|
601 |
+
"version": "2.0.0",
|
602 |
+
"resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
|
603 |
+
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
|
604 |
+
"dev": true,
|
605 |
+
"license": "ISC"
|
606 |
+
},
|
607 |
+
"node_modules/jackspeak": {
|
608 |
+
"version": "3.4.3",
|
609 |
+
"resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz",
|
610 |
+
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
|
611 |
+
"dev": true,
|
612 |
+
"license": "BlueOak-1.0.0",
|
613 |
+
"dependencies": {
|
614 |
+
"@isaacs/cliui": "^8.0.2"
|
615 |
+
},
|
616 |
+
"funding": {
|
617 |
+
"url": "https://github.com/sponsors/isaacs"
|
618 |
+
},
|
619 |
+
"optionalDependencies": {
|
620 |
+
"@pkgjs/parseargs": "^0.11.0"
|
621 |
+
}
|
622 |
+
},
|
623 |
+
"node_modules/jiti": {
|
624 |
+
"version": "1.21.6",
|
625 |
+
"resolved": "https://registry.npmmirror.com/jiti/-/jiti-1.21.6.tgz",
|
626 |
+
"integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
|
627 |
+
"dev": true,
|
628 |
+
"license": "MIT",
|
629 |
+
"bin": {
|
630 |
+
"jiti": "bin/jiti.js"
|
631 |
+
}
|
632 |
+
},
|
633 |
+
"node_modules/lilconfig": {
|
634 |
+
"version": "2.1.0",
|
635 |
+
"resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz",
|
636 |
+
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
|
637 |
+
"dev": true,
|
638 |
+
"license": "MIT",
|
639 |
+
"engines": {
|
640 |
+
"node": ">=10"
|
641 |
+
}
|
642 |
+
},
|
643 |
+
"node_modules/lines-and-columns": {
|
644 |
+
"version": "1.2.4",
|
645 |
+
"resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
646 |
+
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
|
647 |
+
"dev": true,
|
648 |
+
"license": "MIT"
|
649 |
+
},
|
650 |
+
"node_modules/lodash.castarray": {
|
651 |
+
"version": "4.4.0",
|
652 |
+
"resolved": "https://registry.npmmirror.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
|
653 |
+
"integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
|
654 |
+
"dev": true,
|
655 |
+
"license": "MIT"
|
656 |
+
},
|
657 |
+
"node_modules/lodash.isplainobject": {
|
658 |
+
"version": "4.0.6",
|
659 |
+
"resolved": "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
|
660 |
+
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
|
661 |
+
"dev": true,
|
662 |
+
"license": "MIT"
|
663 |
+
},
|
664 |
+
"node_modules/lodash.merge": {
|
665 |
+
"version": "4.6.2",
|
666 |
+
"resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz",
|
667 |
+
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
|
668 |
+
"dev": true,
|
669 |
+
"license": "MIT"
|
670 |
+
},
|
671 |
+
"node_modules/lru-cache": {
|
672 |
+
"version": "10.4.3",
|
673 |
+
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz",
|
674 |
+
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
|
675 |
+
"dev": true,
|
676 |
+
"license": "ISC"
|
677 |
+
},
|
678 |
+
"node_modules/merge2": {
|
679 |
+
"version": "1.4.1",
|
680 |
+
"resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
|
681 |
+
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
|
682 |
+
"dev": true,
|
683 |
+
"license": "MIT",
|
684 |
+
"engines": {
|
685 |
+
"node": ">= 8"
|
686 |
+
}
|
687 |
+
},
|
688 |
+
"node_modules/micromatch": {
|
689 |
+
"version": "4.0.8",
|
690 |
+
"resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
|
691 |
+
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
|
692 |
+
"dev": true,
|
693 |
+
"license": "MIT",
|
694 |
+
"dependencies": {
|
695 |
+
"braces": "^3.0.3",
|
696 |
+
"picomatch": "^2.3.1"
|
697 |
+
},
|
698 |
+
"engines": {
|
699 |
+
"node": ">=8.6"
|
700 |
+
}
|
701 |
+
},
|
702 |
+
"node_modules/minimatch": {
|
703 |
+
"version": "9.0.5",
|
704 |
+
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz",
|
705 |
+
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
|
706 |
+
"dev": true,
|
707 |
+
"license": "ISC",
|
708 |
+
"dependencies": {
|
709 |
+
"brace-expansion": "^2.0.1"
|
710 |
+
},
|
711 |
+
"engines": {
|
712 |
+
"node": ">=16 || 14 >=14.17"
|
713 |
+
},
|
714 |
+
"funding": {
|
715 |
+
"url": "https://github.com/sponsors/isaacs"
|
716 |
+
}
|
717 |
+
},
|
718 |
+
"node_modules/minipass": {
|
719 |
+
"version": "7.1.2",
|
720 |
+
"resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz",
|
721 |
+
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
|
722 |
+
"dev": true,
|
723 |
+
"license": "ISC",
|
724 |
+
"engines": {
|
725 |
+
"node": ">=16 || 14 >=14.17"
|
726 |
+
}
|
727 |
+
},
|
728 |
+
"node_modules/mz": {
|
729 |
+
"version": "2.7.0",
|
730 |
+
"resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz",
|
731 |
+
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
|
732 |
+
"dev": true,
|
733 |
+
"license": "MIT",
|
734 |
+
"dependencies": {
|
735 |
+
"any-promise": "^1.0.0",
|
736 |
+
"object-assign": "^4.0.1",
|
737 |
+
"thenify-all": "^1.0.0"
|
738 |
+
}
|
739 |
+
},
|
740 |
+
"node_modules/nanoid": {
|
741 |
+
"version": "3.3.7",
|
742 |
+
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
|
743 |
+
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
|
744 |
+
"dev": true,
|
745 |
+
"funding": [
|
746 |
+
{
|
747 |
+
"type": "github",
|
748 |
+
"url": "https://github.com/sponsors/ai"
|
749 |
+
}
|
750 |
+
],
|
751 |
+
"license": "MIT",
|
752 |
+
"bin": {
|
753 |
+
"nanoid": "bin/nanoid.cjs"
|
754 |
+
},
|
755 |
+
"engines": {
|
756 |
+
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
757 |
+
}
|
758 |
+
},
|
759 |
+
"node_modules/normalize-path": {
|
760 |
+
"version": "3.0.0",
|
761 |
+
"resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
|
762 |
+
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
763 |
+
"dev": true,
|
764 |
+
"license": "MIT",
|
765 |
+
"engines": {
|
766 |
+
"node": ">=0.10.0"
|
767 |
+
}
|
768 |
+
},
|
769 |
+
"node_modules/object-assign": {
|
770 |
+
"version": "4.1.1",
|
771 |
+
"resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz",
|
772 |
+
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
773 |
+
"dev": true,
|
774 |
+
"license": "MIT",
|
775 |
+
"engines": {
|
776 |
+
"node": ">=0.10.0"
|
777 |
+
}
|
778 |
+
},
|
779 |
+
"node_modules/object-hash": {
|
780 |
+
"version": "3.0.0",
|
781 |
+
"resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz",
|
782 |
+
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
|
783 |
+
"dev": true,
|
784 |
+
"license": "MIT",
|
785 |
+
"engines": {
|
786 |
+
"node": ">= 6"
|
787 |
+
}
|
788 |
+
},
|
789 |
+
"node_modules/package-json-from-dist": {
|
790 |
+
"version": "1.0.1",
|
791 |
+
"resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
|
792 |
+
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
|
793 |
+
"dev": true,
|
794 |
+
"license": "BlueOak-1.0.0"
|
795 |
+
},
|
796 |
+
"node_modules/path-key": {
|
797 |
+
"version": "3.1.1",
|
798 |
+
"resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
|
799 |
+
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
800 |
+
"dev": true,
|
801 |
+
"license": "MIT",
|
802 |
+
"engines": {
|
803 |
+
"node": ">=8"
|
804 |
+
}
|
805 |
+
},
|
806 |
+
"node_modules/path-parse": {
|
807 |
+
"version": "1.0.7",
|
808 |
+
"resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz",
|
809 |
+
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
|
810 |
+
"dev": true,
|
811 |
+
"license": "MIT"
|
812 |
+
},
|
813 |
+
"node_modules/path-scurry": {
|
814 |
+
"version": "1.11.1",
|
815 |
+
"resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz",
|
816 |
+
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
|
817 |
+
"dev": true,
|
818 |
+
"license": "BlueOak-1.0.0",
|
819 |
+
"dependencies": {
|
820 |
+
"lru-cache": "^10.2.0",
|
821 |
+
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
|
822 |
+
},
|
823 |
+
"engines": {
|
824 |
+
"node": ">=16 || 14 >=14.18"
|
825 |
+
},
|
826 |
+
"funding": {
|
827 |
+
"url": "https://github.com/sponsors/isaacs"
|
828 |
+
}
|
829 |
+
},
|
830 |
+
"node_modules/picocolors": {
|
831 |
+
"version": "1.1.1",
|
832 |
+
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
|
833 |
+
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
834 |
+
"dev": true,
|
835 |
+
"license": "ISC"
|
836 |
+
},
|
837 |
+
"node_modules/picomatch": {
|
838 |
+
"version": "2.3.1",
|
839 |
+
"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
|
840 |
+
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
841 |
+
"dev": true,
|
842 |
+
"license": "MIT",
|
843 |
+
"engines": {
|
844 |
+
"node": ">=8.6"
|
845 |
+
},
|
846 |
+
"funding": {
|
847 |
+
"url": "https://github.com/sponsors/jonschlinkert"
|
848 |
+
}
|
849 |
+
},
|
850 |
+
"node_modules/pify": {
|
851 |
+
"version": "2.3.0",
|
852 |
+
"resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz",
|
853 |
+
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
|
854 |
+
"dev": true,
|
855 |
+
"license": "MIT",
|
856 |
+
"engines": {
|
857 |
+
"node": ">=0.10.0"
|
858 |
+
}
|
859 |
+
},
|
860 |
+
"node_modules/pirates": {
|
861 |
+
"version": "4.0.6",
|
862 |
+
"resolved": "https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz",
|
863 |
+
"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
|
864 |
+
"dev": true,
|
865 |
+
"license": "MIT",
|
866 |
+
"engines": {
|
867 |
+
"node": ">= 6"
|
868 |
+
}
|
869 |
+
},
|
870 |
+
"node_modules/postcss": {
|
871 |
+
"version": "8.4.47",
|
872 |
+
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.47.tgz",
|
873 |
+
"integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
|
874 |
+
"dev": true,
|
875 |
+
"funding": [
|
876 |
+
{
|
877 |
+
"type": "opencollective",
|
878 |
+
"url": "https://opencollective.com/postcss/"
|
879 |
+
},
|
880 |
+
{
|
881 |
+
"type": "tidelift",
|
882 |
+
"url": "https://tidelift.com/funding/github/npm/postcss"
|
883 |
+
},
|
884 |
+
{
|
885 |
+
"type": "github",
|
886 |
+
"url": "https://github.com/sponsors/ai"
|
887 |
+
}
|
888 |
+
],
|
889 |
+
"license": "MIT",
|
890 |
+
"dependencies": {
|
891 |
+
"nanoid": "^3.3.7",
|
892 |
+
"picocolors": "^1.1.0",
|
893 |
+
"source-map-js": "^1.2.1"
|
894 |
+
},
|
895 |
+
"engines": {
|
896 |
+
"node": "^10 || ^12 || >=14"
|
897 |
+
}
|
898 |
+
},
|
899 |
+
"node_modules/postcss-import": {
|
900 |
+
"version": "15.1.0",
|
901 |
+
"resolved": "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz",
|
902 |
+
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
|
903 |
+
"dev": true,
|
904 |
+
"license": "MIT",
|
905 |
+
"dependencies": {
|
906 |
+
"postcss-value-parser": "^4.0.0",
|
907 |
+
"read-cache": "^1.0.0",
|
908 |
+
"resolve": "^1.1.7"
|
909 |
+
},
|
910 |
+
"engines": {
|
911 |
+
"node": ">=14.0.0"
|
912 |
+
},
|
913 |
+
"peerDependencies": {
|
914 |
+
"postcss": "^8.0.0"
|
915 |
+
}
|
916 |
+
},
|
917 |
+
"node_modules/postcss-js": {
|
918 |
+
"version": "4.0.1",
|
919 |
+
"resolved": "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.0.1.tgz",
|
920 |
+
"integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
|
921 |
+
"dev": true,
|
922 |
+
"license": "MIT",
|
923 |
+
"dependencies": {
|
924 |
+
"camelcase-css": "^2.0.1"
|
925 |
+
},
|
926 |
+
"engines": {
|
927 |
+
"node": "^12 || ^14 || >= 16"
|
928 |
+
},
|
929 |
+
"funding": {
|
930 |
+
"type": "opencollective",
|
931 |
+
"url": "https://opencollective.com/postcss/"
|
932 |
+
},
|
933 |
+
"peerDependencies": {
|
934 |
+
"postcss": "^8.4.21"
|
935 |
+
}
|
936 |
+
},
|
937 |
+
"node_modules/postcss-load-config": {
|
938 |
+
"version": "4.0.2",
|
939 |
+
"resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
|
940 |
+
"integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
|
941 |
+
"dev": true,
|
942 |
+
"funding": [
|
943 |
+
{
|
944 |
+
"type": "opencollective",
|
945 |
+
"url": "https://opencollective.com/postcss/"
|
946 |
+
},
|
947 |
+
{
|
948 |
+
"type": "github",
|
949 |
+
"url": "https://github.com/sponsors/ai"
|
950 |
+
}
|
951 |
+
],
|
952 |
+
"license": "MIT",
|
953 |
+
"dependencies": {
|
954 |
+
"lilconfig": "^3.0.0",
|
955 |
+
"yaml": "^2.3.4"
|
956 |
+
},
|
957 |
+
"engines": {
|
958 |
+
"node": ">= 14"
|
959 |
+
},
|
960 |
+
"peerDependencies": {
|
961 |
+
"postcss": ">=8.0.9",
|
962 |
+
"ts-node": ">=9.0.0"
|
963 |
+
},
|
964 |
+
"peerDependenciesMeta": {
|
965 |
+
"postcss": {
|
966 |
+
"optional": true
|
967 |
+
},
|
968 |
+
"ts-node": {
|
969 |
+
"optional": true
|
970 |
+
}
|
971 |
+
}
|
972 |
+
},
|
973 |
+
"node_modules/postcss-load-config/node_modules/lilconfig": {
|
974 |
+
"version": "3.1.2",
|
975 |
+
"resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.2.tgz",
|
976 |
+
"integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
|
977 |
+
"dev": true,
|
978 |
+
"license": "MIT",
|
979 |
+
"engines": {
|
980 |
+
"node": ">=14"
|
981 |
+
},
|
982 |
+
"funding": {
|
983 |
+
"url": "https://github.com/sponsors/antonk52"
|
984 |
+
}
|
985 |
+
},
|
986 |
+
"node_modules/postcss-nested": {
|
987 |
+
"version": "6.2.0",
|
988 |
+
"resolved": "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.2.0.tgz",
|
989 |
+
"integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
|
990 |
+
"dev": true,
|
991 |
+
"funding": [
|
992 |
+
{
|
993 |
+
"type": "opencollective",
|
994 |
+
"url": "https://opencollective.com/postcss/"
|
995 |
+
},
|
996 |
+
{
|
997 |
+
"type": "github",
|
998 |
+
"url": "https://github.com/sponsors/ai"
|
999 |
+
}
|
1000 |
+
],
|
1001 |
+
"license": "MIT",
|
1002 |
+
"dependencies": {
|
1003 |
+
"postcss-selector-parser": "^6.1.1"
|
1004 |
+
},
|
1005 |
+
"engines": {
|
1006 |
+
"node": ">=12.0"
|
1007 |
+
},
|
1008 |
+
"peerDependencies": {
|
1009 |
+
"postcss": "^8.2.14"
|
1010 |
+
}
|
1011 |
+
},
|
1012 |
+
"node_modules/postcss-selector-parser": {
|
1013 |
+
"version": "6.1.2",
|
1014 |
+
"resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
|
1015 |
+
"integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
|
1016 |
+
"dev": true,
|
1017 |
+
"license": "MIT",
|
1018 |
+
"dependencies": {
|
1019 |
+
"cssesc": "^3.0.0",
|
1020 |
+
"util-deprecate": "^1.0.2"
|
1021 |
+
},
|
1022 |
+
"engines": {
|
1023 |
+
"node": ">=4"
|
1024 |
+
}
|
1025 |
+
},
|
1026 |
+
"node_modules/postcss-value-parser": {
|
1027 |
+
"version": "4.2.0",
|
1028 |
+
"resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
|
1029 |
+
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
|
1030 |
+
"dev": true,
|
1031 |
+
"license": "MIT"
|
1032 |
+
},
|
1033 |
+
"node_modules/queue-microtask": {
|
1034 |
+
"version": "1.2.3",
|
1035 |
+
"resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
|
1036 |
+
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
|
1037 |
+
"dev": true,
|
1038 |
+
"funding": [
|
1039 |
+
{
|
1040 |
+
"type": "github",
|
1041 |
+
"url": "https://github.com/sponsors/feross"
|
1042 |
+
},
|
1043 |
+
{
|
1044 |
+
"type": "patreon",
|
1045 |
+
"url": "https://www.patreon.com/feross"
|
1046 |
+
},
|
1047 |
+
{
|
1048 |
+
"type": "consulting",
|
1049 |
+
"url": "https://feross.org/support"
|
1050 |
+
}
|
1051 |
+
],
|
1052 |
+
"license": "MIT"
|
1053 |
+
},
|
1054 |
+
"node_modules/read-cache": {
|
1055 |
+
"version": "1.0.0",
|
1056 |
+
"resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz",
|
1057 |
+
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
|
1058 |
+
"dev": true,
|
1059 |
+
"license": "MIT",
|
1060 |
+
"dependencies": {
|
1061 |
+
"pify": "^2.3.0"
|
1062 |
+
}
|
1063 |
+
},
|
1064 |
+
"node_modules/readdirp": {
|
1065 |
+
"version": "3.6.0",
|
1066 |
+
"resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
|
1067 |
+
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
|
1068 |
+
"dev": true,
|
1069 |
+
"license": "MIT",
|
1070 |
+
"dependencies": {
|
1071 |
+
"picomatch": "^2.2.1"
|
1072 |
+
},
|
1073 |
+
"engines": {
|
1074 |
+
"node": ">=8.10.0"
|
1075 |
+
}
|
1076 |
+
},
|
1077 |
+
"node_modules/resolve": {
|
1078 |
+
"version": "1.22.8",
|
1079 |
+
"resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz",
|
1080 |
+
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
|
1081 |
+
"dev": true,
|
1082 |
+
"license": "MIT",
|
1083 |
+
"dependencies": {
|
1084 |
+
"is-core-module": "^2.13.0",
|
1085 |
+
"path-parse": "^1.0.7",
|
1086 |
+
"supports-preserve-symlinks-flag": "^1.0.0"
|
1087 |
+
},
|
1088 |
+
"bin": {
|
1089 |
+
"resolve": "bin/resolve"
|
1090 |
+
},
|
1091 |
+
"funding": {
|
1092 |
+
"url": "https://github.com/sponsors/ljharb"
|
1093 |
+
}
|
1094 |
+
},
|
1095 |
+
"node_modules/reusify": {
|
1096 |
+
"version": "1.0.4",
|
1097 |
+
"resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz",
|
1098 |
+
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
|
1099 |
+
"dev": true,
|
1100 |
+
"license": "MIT",
|
1101 |
+
"engines": {
|
1102 |
+
"iojs": ">=1.0.0",
|
1103 |
+
"node": ">=0.10.0"
|
1104 |
+
}
|
1105 |
+
},
|
1106 |
+
"node_modules/run-parallel": {
|
1107 |
+
"version": "1.2.0",
|
1108 |
+
"resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
|
1109 |
+
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
|
1110 |
+
"dev": true,
|
1111 |
+
"funding": [
|
1112 |
+
{
|
1113 |
+
"type": "github",
|
1114 |
+
"url": "https://github.com/sponsors/feross"
|
1115 |
+
},
|
1116 |
+
{
|
1117 |
+
"type": "patreon",
|
1118 |
+
"url": "https://www.patreon.com/feross"
|
1119 |
+
},
|
1120 |
+
{
|
1121 |
+
"type": "consulting",
|
1122 |
+
"url": "https://feross.org/support"
|
1123 |
+
}
|
1124 |
+
],
|
1125 |
+
"license": "MIT",
|
1126 |
+
"dependencies": {
|
1127 |
+
"queue-microtask": "^1.2.2"
|
1128 |
+
}
|
1129 |
+
},
|
1130 |
+
"node_modules/shebang-command": {
|
1131 |
+
"version": "2.0.0",
|
1132 |
+
"resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
|
1133 |
+
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
1134 |
+
"dev": true,
|
1135 |
+
"license": "MIT",
|
1136 |
+
"dependencies": {
|
1137 |
+
"shebang-regex": "^3.0.0"
|
1138 |
+
},
|
1139 |
+
"engines": {
|
1140 |
+
"node": ">=8"
|
1141 |
+
}
|
1142 |
+
},
|
1143 |
+
"node_modules/shebang-regex": {
|
1144 |
+
"version": "3.0.0",
|
1145 |
+
"resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
1146 |
+
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
1147 |
+
"dev": true,
|
1148 |
+
"license": "MIT",
|
1149 |
+
"engines": {
|
1150 |
+
"node": ">=8"
|
1151 |
+
}
|
1152 |
+
},
|
1153 |
+
"node_modules/signal-exit": {
|
1154 |
+
"version": "4.1.0",
|
1155 |
+
"resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz",
|
1156 |
+
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
|
1157 |
+
"dev": true,
|
1158 |
+
"license": "ISC",
|
1159 |
+
"engines": {
|
1160 |
+
"node": ">=14"
|
1161 |
+
},
|
1162 |
+
"funding": {
|
1163 |
+
"url": "https://github.com/sponsors/isaacs"
|
1164 |
+
}
|
1165 |
+
},
|
1166 |
+
"node_modules/source-map-js": {
|
1167 |
+
"version": "1.2.1",
|
1168 |
+
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
|
1169 |
+
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
1170 |
+
"dev": true,
|
1171 |
+
"license": "BSD-3-Clause",
|
1172 |
+
"engines": {
|
1173 |
+
"node": ">=0.10.0"
|
1174 |
+
}
|
1175 |
+
},
|
1176 |
+
"node_modules/string-width": {
|
1177 |
+
"version": "5.1.2",
|
1178 |
+
"resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz",
|
1179 |
+
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
|
1180 |
+
"dev": true,
|
1181 |
+
"license": "MIT",
|
1182 |
+
"dependencies": {
|
1183 |
+
"eastasianwidth": "^0.2.0",
|
1184 |
+
"emoji-regex": "^9.2.2",
|
1185 |
+
"strip-ansi": "^7.0.1"
|
1186 |
+
},
|
1187 |
+
"engines": {
|
1188 |
+
"node": ">=12"
|
1189 |
+
},
|
1190 |
+
"funding": {
|
1191 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
1192 |
+
}
|
1193 |
+
},
|
1194 |
+
"node_modules/string-width-cjs": {
|
1195 |
+
"name": "string-width",
|
1196 |
+
"version": "4.2.3",
|
1197 |
+
"resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
|
1198 |
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
1199 |
+
"dev": true,
|
1200 |
+
"license": "MIT",
|
1201 |
+
"dependencies": {
|
1202 |
+
"emoji-regex": "^8.0.0",
|
1203 |
+
"is-fullwidth-code-point": "^3.0.0",
|
1204 |
+
"strip-ansi": "^6.0.1"
|
1205 |
+
},
|
1206 |
+
"engines": {
|
1207 |
+
"node": ">=8"
|
1208 |
+
}
|
1209 |
+
},
|
1210 |
+
"node_modules/string-width-cjs/node_modules/ansi-regex": {
|
1211 |
+
"version": "5.0.1",
|
1212 |
+
"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
1213 |
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
1214 |
+
"dev": true,
|
1215 |
+
"license": "MIT",
|
1216 |
+
"engines": {
|
1217 |
+
"node": ">=8"
|
1218 |
+
}
|
1219 |
+
},
|
1220 |
+
"node_modules/string-width-cjs/node_modules/emoji-regex": {
|
1221 |
+
"version": "8.0.0",
|
1222 |
+
"resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
1223 |
+
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
1224 |
+
"dev": true,
|
1225 |
+
"license": "MIT"
|
1226 |
+
},
|
1227 |
+
"node_modules/string-width-cjs/node_modules/strip-ansi": {
|
1228 |
+
"version": "6.0.1",
|
1229 |
+
"resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
1230 |
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
1231 |
+
"dev": true,
|
1232 |
+
"license": "MIT",
|
1233 |
+
"dependencies": {
|
1234 |
+
"ansi-regex": "^5.0.1"
|
1235 |
+
},
|
1236 |
+
"engines": {
|
1237 |
+
"node": ">=8"
|
1238 |
+
}
|
1239 |
+
},
|
1240 |
+
"node_modules/strip-ansi": {
|
1241 |
+
"version": "7.1.0",
|
1242 |
+
"resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz",
|
1243 |
+
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
|
1244 |
+
"dev": true,
|
1245 |
+
"license": "MIT",
|
1246 |
+
"dependencies": {
|
1247 |
+
"ansi-regex": "^6.0.1"
|
1248 |
+
},
|
1249 |
+
"engines": {
|
1250 |
+
"node": ">=12"
|
1251 |
+
},
|
1252 |
+
"funding": {
|
1253 |
+
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
|
1254 |
+
}
|
1255 |
+
},
|
1256 |
+
"node_modules/strip-ansi-cjs": {
|
1257 |
+
"name": "strip-ansi",
|
1258 |
+
"version": "6.0.1",
|
1259 |
+
"resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
1260 |
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
1261 |
+
"dev": true,
|
1262 |
+
"license": "MIT",
|
1263 |
+
"dependencies": {
|
1264 |
+
"ansi-regex": "^5.0.1"
|
1265 |
+
},
|
1266 |
+
"engines": {
|
1267 |
+
"node": ">=8"
|
1268 |
+
}
|
1269 |
+
},
|
1270 |
+
"node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
|
1271 |
+
"version": "5.0.1",
|
1272 |
+
"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
1273 |
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
1274 |
+
"dev": true,
|
1275 |
+
"license": "MIT",
|
1276 |
+
"engines": {
|
1277 |
+
"node": ">=8"
|
1278 |
+
}
|
1279 |
+
},
|
1280 |
+
"node_modules/sucrase": {
|
1281 |
+
"version": "3.35.0",
|
1282 |
+
"resolved": "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.0.tgz",
|
1283 |
+
"integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
|
1284 |
+
"dev": true,
|
1285 |
+
"license": "MIT",
|
1286 |
+
"dependencies": {
|
1287 |
+
"@jridgewell/gen-mapping": "^0.3.2",
|
1288 |
+
"commander": "^4.0.0",
|
1289 |
+
"glob": "^10.3.10",
|
1290 |
+
"lines-and-columns": "^1.1.6",
|
1291 |
+
"mz": "^2.7.0",
|
1292 |
+
"pirates": "^4.0.1",
|
1293 |
+
"ts-interface-checker": "^0.1.9"
|
1294 |
+
},
|
1295 |
+
"bin": {
|
1296 |
+
"sucrase": "bin/sucrase",
|
1297 |
+
"sucrase-node": "bin/sucrase-node"
|
1298 |
+
},
|
1299 |
+
"engines": {
|
1300 |
+
"node": ">=16 || 14 >=14.17"
|
1301 |
+
}
|
1302 |
+
},
|
1303 |
+
"node_modules/supports-preserve-symlinks-flag": {
|
1304 |
+
"version": "1.0.0",
|
1305 |
+
"resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
|
1306 |
+
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
|
1307 |
+
"dev": true,
|
1308 |
+
"license": "MIT",
|
1309 |
+
"engines": {
|
1310 |
+
"node": ">= 0.4"
|
1311 |
+
},
|
1312 |
+
"funding": {
|
1313 |
+
"url": "https://github.com/sponsors/ljharb"
|
1314 |
+
}
|
1315 |
+
},
|
1316 |
+
"node_modules/tailwindcss": {
|
1317 |
+
"version": "3.4.14",
|
1318 |
+
"resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.14.tgz",
|
1319 |
+
"integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==",
|
1320 |
+
"dev": true,
|
1321 |
+
"license": "MIT",
|
1322 |
+
"dependencies": {
|
1323 |
+
"@alloc/quick-lru": "^5.2.0",
|
1324 |
+
"arg": "^5.0.2",
|
1325 |
+
"chokidar": "^3.5.3",
|
1326 |
+
"didyoumean": "^1.2.2",
|
1327 |
+
"dlv": "^1.1.3",
|
1328 |
+
"fast-glob": "^3.3.0",
|
1329 |
+
"glob-parent": "^6.0.2",
|
1330 |
+
"is-glob": "^4.0.3",
|
1331 |
+
"jiti": "^1.21.0",
|
1332 |
+
"lilconfig": "^2.1.0",
|
1333 |
+
"micromatch": "^4.0.5",
|
1334 |
+
"normalize-path": "^3.0.0",
|
1335 |
+
"object-hash": "^3.0.0",
|
1336 |
+
"picocolors": "^1.0.0",
|
1337 |
+
"postcss": "^8.4.23",
|
1338 |
+
"postcss-import": "^15.1.0",
|
1339 |
+
"postcss-js": "^4.0.1",
|
1340 |
+
"postcss-load-config": "^4.0.1",
|
1341 |
+
"postcss-nested": "^6.0.1",
|
1342 |
+
"postcss-selector-parser": "^6.0.11",
|
1343 |
+
"resolve": "^1.22.2",
|
1344 |
+
"sucrase": "^3.32.0"
|
1345 |
+
},
|
1346 |
+
"bin": {
|
1347 |
+
"tailwind": "lib/cli.js",
|
1348 |
+
"tailwindcss": "lib/cli.js"
|
1349 |
+
},
|
1350 |
+
"engines": {
|
1351 |
+
"node": ">=14.0.0"
|
1352 |
+
}
|
1353 |
+
},
|
1354 |
+
"node_modules/thenify": {
|
1355 |
+
"version": "3.3.1",
|
1356 |
+
"resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz",
|
1357 |
+
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
|
1358 |
+
"dev": true,
|
1359 |
+
"license": "MIT",
|
1360 |
+
"dependencies": {
|
1361 |
+
"any-promise": "^1.0.0"
|
1362 |
+
}
|
1363 |
+
},
|
1364 |
+
"node_modules/thenify-all": {
|
1365 |
+
"version": "1.6.0",
|
1366 |
+
"resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz",
|
1367 |
+
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
|
1368 |
+
"dev": true,
|
1369 |
+
"license": "MIT",
|
1370 |
+
"dependencies": {
|
1371 |
+
"thenify": ">= 3.1.0 < 4"
|
1372 |
+
},
|
1373 |
+
"engines": {
|
1374 |
+
"node": ">=0.8"
|
1375 |
+
}
|
1376 |
+
},
|
1377 |
+
"node_modules/to-regex-range": {
|
1378 |
+
"version": "5.0.1",
|
1379 |
+
"resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
1380 |
+
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
1381 |
+
"dev": true,
|
1382 |
+
"license": "MIT",
|
1383 |
+
"dependencies": {
|
1384 |
+
"is-number": "^7.0.0"
|
1385 |
+
},
|
1386 |
+
"engines": {
|
1387 |
+
"node": ">=8.0"
|
1388 |
+
}
|
1389 |
+
},
|
1390 |
+
"node_modules/ts-interface-checker": {
|
1391 |
+
"version": "0.1.13",
|
1392 |
+
"resolved": "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
|
1393 |
+
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
|
1394 |
+
"dev": true,
|
1395 |
+
"license": "Apache-2.0"
|
1396 |
+
},
|
1397 |
+
"node_modules/util-deprecate": {
|
1398 |
+
"version": "1.0.2",
|
1399 |
+
"resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
1400 |
+
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
|
1401 |
+
"dev": true,
|
1402 |
+
"license": "MIT"
|
1403 |
+
},
|
1404 |
+
"node_modules/which": {
|
1405 |
+
"version": "2.0.2",
|
1406 |
+
"resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
|
1407 |
+
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
1408 |
+
"dev": true,
|
1409 |
+
"license": "ISC",
|
1410 |
+
"dependencies": {
|
1411 |
+
"isexe": "^2.0.0"
|
1412 |
+
},
|
1413 |
+
"bin": {
|
1414 |
+
"node-which": "bin/node-which"
|
1415 |
+
},
|
1416 |
+
"engines": {
|
1417 |
+
"node": ">= 8"
|
1418 |
+
}
|
1419 |
+
},
|
1420 |
+
"node_modules/wrap-ansi": {
|
1421 |
+
"version": "8.1.0",
|
1422 |
+
"resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
|
1423 |
+
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
|
1424 |
+
"dev": true,
|
1425 |
+
"license": "MIT",
|
1426 |
+
"dependencies": {
|
1427 |
+
"ansi-styles": "^6.1.0",
|
1428 |
+
"string-width": "^5.0.1",
|
1429 |
+
"strip-ansi": "^7.0.1"
|
1430 |
+
},
|
1431 |
+
"engines": {
|
1432 |
+
"node": ">=12"
|
1433 |
+
},
|
1434 |
+
"funding": {
|
1435 |
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
1436 |
+
}
|
1437 |
+
},
|
1438 |
+
"node_modules/wrap-ansi-cjs": {
|
1439 |
+
"name": "wrap-ansi",
|
1440 |
+
"version": "7.0.0",
|
1441 |
+
"resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
1442 |
+
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
1443 |
+
"dev": true,
|
1444 |
+
"license": "MIT",
|
1445 |
+
"dependencies": {
|
1446 |
+
"ansi-styles": "^4.0.0",
|
1447 |
+
"string-width": "^4.1.0",
|
1448 |
+
"strip-ansi": "^6.0.0"
|
1449 |
+
},
|
1450 |
+
"engines": {
|
1451 |
+
"node": ">=10"
|
1452 |
+
},
|
1453 |
+
"funding": {
|
1454 |
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
1455 |
+
}
|
1456 |
+
},
|
1457 |
+
"node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
|
1458 |
+
"version": "5.0.1",
|
1459 |
+
"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
1460 |
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
1461 |
+
"dev": true,
|
1462 |
+
"license": "MIT",
|
1463 |
+
"engines": {
|
1464 |
+
"node": ">=8"
|
1465 |
+
}
|
1466 |
+
},
|
1467 |
+
"node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
|
1468 |
+
"version": "4.3.0",
|
1469 |
+
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
1470 |
+
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
1471 |
+
"dev": true,
|
1472 |
+
"license": "MIT",
|
1473 |
+
"dependencies": {
|
1474 |
+
"color-convert": "^2.0.1"
|
1475 |
+
},
|
1476 |
+
"engines": {
|
1477 |
+
"node": ">=8"
|
1478 |
+
},
|
1479 |
+
"funding": {
|
1480 |
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
1481 |
+
}
|
1482 |
+
},
|
1483 |
+
"node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
|
1484 |
+
"version": "8.0.0",
|
1485 |
+
"resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
1486 |
+
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
1487 |
+
"dev": true,
|
1488 |
+
"license": "MIT"
|
1489 |
+
},
|
1490 |
+
"node_modules/wrap-ansi-cjs/node_modules/string-width": {
|
1491 |
+
"version": "4.2.3",
|
1492 |
+
"resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
|
1493 |
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
1494 |
+
"dev": true,
|
1495 |
+
"license": "MIT",
|
1496 |
+
"dependencies": {
|
1497 |
+
"emoji-regex": "^8.0.0",
|
1498 |
+
"is-fullwidth-code-point": "^3.0.0",
|
1499 |
+
"strip-ansi": "^6.0.1"
|
1500 |
+
},
|
1501 |
+
"engines": {
|
1502 |
+
"node": ">=8"
|
1503 |
+
}
|
1504 |
+
},
|
1505 |
+
"node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
|
1506 |
+
"version": "6.0.1",
|
1507 |
+
"resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
1508 |
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
1509 |
+
"dev": true,
|
1510 |
+
"license": "MIT",
|
1511 |
+
"dependencies": {
|
1512 |
+
"ansi-regex": "^5.0.1"
|
1513 |
+
},
|
1514 |
+
"engines": {
|
1515 |
+
"node": ">=8"
|
1516 |
+
}
|
1517 |
+
},
|
1518 |
+
"node_modules/yaml": {
|
1519 |
+
"version": "2.6.0",
|
1520 |
+
"resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.6.0.tgz",
|
1521 |
+
"integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
|
1522 |
+
"dev": true,
|
1523 |
+
"license": "ISC",
|
1524 |
+
"bin": {
|
1525 |
+
"yaml": "bin.mjs"
|
1526 |
+
},
|
1527 |
+
"engines": {
|
1528 |
+
"node": ">= 14"
|
1529 |
+
}
|
1530 |
+
}
|
1531 |
+
}
|
1532 |
+
}
|
node_modules/@alloc/quick-lru/index.d.ts
ADDED
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
declare namespace QuickLRU {
|
2 |
+
interface Options<KeyType, ValueType> {
|
3 |
+
/**
|
4 |
+
The maximum number of milliseconds an item should remain in the cache.
|
5 |
+
|
6 |
+
@default Infinity
|
7 |
+
|
8 |
+
By default, `maxAge` will be `Infinity`, which means that items will never expire.
|
9 |
+
Lazy expiration upon the next write or read call.
|
10 |
+
|
11 |
+
Individual expiration of an item can be specified by the `set(key, value, maxAge)` method.
|
12 |
+
*/
|
13 |
+
readonly maxAge?: number;
|
14 |
+
|
15 |
+
/**
|
16 |
+
The maximum number of items before evicting the least recently used items.
|
17 |
+
*/
|
18 |
+
readonly maxSize: number;
|
19 |
+
|
20 |
+
/**
|
21 |
+
Called right before an item is evicted from the cache.
|
22 |
+
|
23 |
+
Useful for side effects or for items like object URLs that need explicit cleanup (`revokeObjectURL`).
|
24 |
+
*/
|
25 |
+
onEviction?: (key: KeyType, value: ValueType) => void;
|
26 |
+
}
|
27 |
+
}
|
28 |
+
|
29 |
+
declare class QuickLRU<KeyType, ValueType>
|
30 |
+
implements Iterable<[KeyType, ValueType]> {
|
31 |
+
/**
|
32 |
+
The stored item count.
|
33 |
+
*/
|
34 |
+
readonly size: number;
|
35 |
+
|
36 |
+
/**
|
37 |
+
Simple ["Least Recently Used" (LRU) cache](https://en.m.wikipedia.org/wiki/Cache_replacement_policies#Least_Recently_Used_.28LRU.29).
|
38 |
+
|
39 |
+
The instance is [`iterable`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Iteration_protocols) so you can use it directly in a [`for…of`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...of) loop.
|
40 |
+
|
41 |
+
@example
|
42 |
+
```
|
43 |
+
import QuickLRU = require('quick-lru');
|
44 |
+
|
45 |
+
const lru = new QuickLRU({maxSize: 1000});
|
46 |
+
|
47 |
+
lru.set('🦄', '🌈');
|
48 |
+
|
49 |
+
lru.has('🦄');
|
50 |
+
//=> true
|
51 |
+
|
52 |
+
lru.get('🦄');
|
53 |
+
//=> '🌈'
|
54 |
+
```
|
55 |
+
*/
|
56 |
+
constructor(options: QuickLRU.Options<KeyType, ValueType>);
|
57 |
+
|
58 |
+
[Symbol.iterator](): IterableIterator<[KeyType, ValueType]>;
|
59 |
+
|
60 |
+
/**
|
61 |
+
Set an item. Returns the instance.
|
62 |
+
|
63 |
+
Individual expiration of an item can be specified with the `maxAge` option. If not specified, the global `maxAge` value will be used in case it is specified in the constructor, otherwise the item will never expire.
|
64 |
+
|
65 |
+
@returns The list instance.
|
66 |
+
*/
|
67 |
+
set(key: KeyType, value: ValueType, options?: {maxAge?: number}): this;
|
68 |
+
|
69 |
+
/**
|
70 |
+
Get an item.
|
71 |
+
|
72 |
+
@returns The stored item or `undefined`.
|
73 |
+
*/
|
74 |
+
get(key: KeyType): ValueType | undefined;
|
75 |
+
|
76 |
+
/**
|
77 |
+
Check if an item exists.
|
78 |
+
*/
|
79 |
+
has(key: KeyType): boolean;
|
80 |
+
|
81 |
+
/**
|
82 |
+
Get an item without marking it as recently used.
|
83 |
+
|
84 |
+
@returns The stored item or `undefined`.
|
85 |
+
*/
|
86 |
+
peek(key: KeyType): ValueType | undefined;
|
87 |
+
|
88 |
+
/**
|
89 |
+
Delete an item.
|
90 |
+
|
91 |
+
@returns `true` if the item is removed or `false` if the item doesn't exist.
|
92 |
+
*/
|
93 |
+
delete(key: KeyType): boolean;
|
94 |
+
|
95 |
+
/**
|
96 |
+
Delete all items.
|
97 |
+
*/
|
98 |
+
clear(): void;
|
99 |
+
|
100 |
+
/**
|
101 |
+
Update the `maxSize` in-place, discarding items as necessary. Insertion order is mostly preserved, though this is not a strong guarantee.
|
102 |
+
|
103 |
+
Useful for on-the-fly tuning of cache sizes in live systems.
|
104 |
+
*/
|
105 |
+
resize(maxSize: number): void;
|
106 |
+
|
107 |
+
/**
|
108 |
+
Iterable for all the keys.
|
109 |
+
*/
|
110 |
+
keys(): IterableIterator<KeyType>;
|
111 |
+
|
112 |
+
/**
|
113 |
+
Iterable for all the values.
|
114 |
+
*/
|
115 |
+
values(): IterableIterator<ValueType>;
|
116 |
+
|
117 |
+
/**
|
118 |
+
Iterable for all entries, starting with the oldest (ascending in recency).
|
119 |
+
*/
|
120 |
+
entriesAscending(): IterableIterator<[KeyType, ValueType]>;
|
121 |
+
|
122 |
+
/**
|
123 |
+
Iterable for all entries, starting with the newest (descending in recency).
|
124 |
+
*/
|
125 |
+
entriesDescending(): IterableIterator<[KeyType, ValueType]>;
|
126 |
+
}
|
127 |
+
|
128 |
+
export = QuickLRU;
|
node_modules/@alloc/quick-lru/index.js
ADDED
@@ -0,0 +1,263 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
'use strict';
|
2 |
+
|
3 |
+
class QuickLRU {
|
4 |
+
constructor(options = {}) {
|
5 |
+
if (!(options.maxSize && options.maxSize > 0)) {
|
6 |
+
throw new TypeError('`maxSize` must be a number greater than 0');
|
7 |
+
}
|
8 |
+
|
9 |
+
if (typeof options.maxAge === 'number' && options.maxAge === 0) {
|
10 |
+
throw new TypeError('`maxAge` must be a number greater than 0');
|
11 |
+
}
|
12 |
+
|
13 |
+
this.maxSize = options.maxSize;
|
14 |
+
this.maxAge = options.maxAge || Infinity;
|
15 |
+
this.onEviction = options.onEviction;
|
16 |
+
this.cache = new Map();
|
17 |
+
this.oldCache = new Map();
|
18 |
+
this._size = 0;
|
19 |
+
}
|
20 |
+
|
21 |
+
_emitEvictions(cache) {
|
22 |
+
if (typeof this.onEviction !== 'function') {
|
23 |
+
return;
|
24 |
+
}
|
25 |
+
|
26 |
+
for (const [key, item] of cache) {
|
27 |
+
this.onEviction(key, item.value);
|
28 |
+
}
|
29 |
+
}
|
30 |
+
|
31 |
+
_deleteIfExpired(key, item) {
|
32 |
+
if (typeof item.expiry === 'number' && item.expiry <= Date.now()) {
|
33 |
+
if (typeof this.onEviction === 'function') {
|
34 |
+
this.onEviction(key, item.value);
|
35 |
+
}
|
36 |
+
|
37 |
+
return this.delete(key);
|
38 |
+
}
|
39 |
+
|
40 |
+
return false;
|
41 |
+
}
|
42 |
+
|
43 |
+
_getOrDeleteIfExpired(key, item) {
|
44 |
+
const deleted = this._deleteIfExpired(key, item);
|
45 |
+
if (deleted === false) {
|
46 |
+
return item.value;
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
_getItemValue(key, item) {
|
51 |
+
return item.expiry ? this._getOrDeleteIfExpired(key, item) : item.value;
|
52 |
+
}
|
53 |
+
|
54 |
+
_peek(key, cache) {
|
55 |
+
const item = cache.get(key);
|
56 |
+
|
57 |
+
return this._getItemValue(key, item);
|
58 |
+
}
|
59 |
+
|
60 |
+
_set(key, value) {
|
61 |
+
this.cache.set(key, value);
|
62 |
+
this._size++;
|
63 |
+
|
64 |
+
if (this._size >= this.maxSize) {
|
65 |
+
this._size = 0;
|
66 |
+
this._emitEvictions(this.oldCache);
|
67 |
+
this.oldCache = this.cache;
|
68 |
+
this.cache = new Map();
|
69 |
+
}
|
70 |
+
}
|
71 |
+
|
72 |
+
_moveToRecent(key, item) {
|
73 |
+
this.oldCache.delete(key);
|
74 |
+
this._set(key, item);
|
75 |
+
}
|
76 |
+
|
77 |
+
* _entriesAscending() {
|
78 |
+
for (const item of this.oldCache) {
|
79 |
+
const [key, value] = item;
|
80 |
+
if (!this.cache.has(key)) {
|
81 |
+
const deleted = this._deleteIfExpired(key, value);
|
82 |
+
if (deleted === false) {
|
83 |
+
yield item;
|
84 |
+
}
|
85 |
+
}
|
86 |
+
}
|
87 |
+
|
88 |
+
for (const item of this.cache) {
|
89 |
+
const [key, value] = item;
|
90 |
+
const deleted = this._deleteIfExpired(key, value);
|
91 |
+
if (deleted === false) {
|
92 |
+
yield item;
|
93 |
+
}
|
94 |
+
}
|
95 |
+
}
|
96 |
+
|
97 |
+
get(key) {
|
98 |
+
if (this.cache.has(key)) {
|
99 |
+
const item = this.cache.get(key);
|
100 |
+
|
101 |
+
return this._getItemValue(key, item);
|
102 |
+
}
|
103 |
+
|
104 |
+
if (this.oldCache.has(key)) {
|
105 |
+
const item = this.oldCache.get(key);
|
106 |
+
if (this._deleteIfExpired(key, item) === false) {
|
107 |
+
this._moveToRecent(key, item);
|
108 |
+
return item.value;
|
109 |
+
}
|
110 |
+
}
|
111 |
+
}
|
112 |
+
|
113 |
+
set(key, value, {maxAge = this.maxAge === Infinity ? undefined : Date.now() + this.maxAge} = {}) {
|
114 |
+
if (this.cache.has(key)) {
|
115 |
+
this.cache.set(key, {
|
116 |
+
value,
|
117 |
+
maxAge
|
118 |
+
});
|
119 |
+
} else {
|
120 |
+
this._set(key, {value, expiry: maxAge});
|
121 |
+
}
|
122 |
+
}
|
123 |
+
|
124 |
+
has(key) {
|
125 |
+
if (this.cache.has(key)) {
|
126 |
+
return !this._deleteIfExpired(key, this.cache.get(key));
|
127 |
+
}
|
128 |
+
|
129 |
+
if (this.oldCache.has(key)) {
|
130 |
+
return !this._deleteIfExpired(key, this.oldCache.get(key));
|
131 |
+
}
|
132 |
+
|
133 |
+
return false;
|
134 |
+
}
|
135 |
+
|
136 |
+
peek(key) {
|
137 |
+
if (this.cache.has(key)) {
|
138 |
+
return this._peek(key, this.cache);
|
139 |
+
}
|
140 |
+
|
141 |
+
if (this.oldCache.has(key)) {
|
142 |
+
return this._peek(key, this.oldCache);
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
delete(key) {
|
147 |
+
const deleted = this.cache.delete(key);
|
148 |
+
if (deleted) {
|
149 |
+
this._size--;
|
150 |
+
}
|
151 |
+
|
152 |
+
return this.oldCache.delete(key) || deleted;
|
153 |
+
}
|
154 |
+
|
155 |
+
clear() {
|
156 |
+
this.cache.clear();
|
157 |
+
this.oldCache.clear();
|
158 |
+
this._size = 0;
|
159 |
+
}
|
160 |
+
|
161 |
+
resize(newSize) {
|
162 |
+
if (!(newSize && newSize > 0)) {
|
163 |
+
throw new TypeError('`maxSize` must be a number greater than 0');
|
164 |
+
}
|
165 |
+
|
166 |
+
const items = [...this._entriesAscending()];
|
167 |
+
const removeCount = items.length - newSize;
|
168 |
+
if (removeCount < 0) {
|
169 |
+
this.cache = new Map(items);
|
170 |
+
this.oldCache = new Map();
|
171 |
+
this._size = items.length;
|
172 |
+
} else {
|
173 |
+
if (removeCount > 0) {
|
174 |
+
this._emitEvictions(items.slice(0, removeCount));
|
175 |
+
}
|
176 |
+
|
177 |
+
this.oldCache = new Map(items.slice(removeCount));
|
178 |
+
this.cache = new Map();
|
179 |
+
this._size = 0;
|
180 |
+
}
|
181 |
+
|
182 |
+
this.maxSize = newSize;
|
183 |
+
}
|
184 |
+
|
185 |
+
* keys() {
|
186 |
+
for (const [key] of this) {
|
187 |
+
yield key;
|
188 |
+
}
|
189 |
+
}
|
190 |
+
|
191 |
+
* values() {
|
192 |
+
for (const [, value] of this) {
|
193 |
+
yield value;
|
194 |
+
}
|
195 |
+
}
|
196 |
+
|
197 |
+
* [Symbol.iterator]() {
|
198 |
+
for (const item of this.cache) {
|
199 |
+
const [key, value] = item;
|
200 |
+
const deleted = this._deleteIfExpired(key, value);
|
201 |
+
if (deleted === false) {
|
202 |
+
yield [key, value.value];
|
203 |
+
}
|
204 |
+
}
|
205 |
+
|
206 |
+
for (const item of this.oldCache) {
|
207 |
+
const [key, value] = item;
|
208 |
+
if (!this.cache.has(key)) {
|
209 |
+
const deleted = this._deleteIfExpired(key, value);
|
210 |
+
if (deleted === false) {
|
211 |
+
yield [key, value.value];
|
212 |
+
}
|
213 |
+
}
|
214 |
+
}
|
215 |
+
}
|
216 |
+
|
217 |
+
* entriesDescending() {
|
218 |
+
let items = [...this.cache];
|
219 |
+
for (let i = items.length - 1; i >= 0; --i) {
|
220 |
+
const item = items[i];
|
221 |
+
const [key, value] = item;
|
222 |
+
const deleted = this._deleteIfExpired(key, value);
|
223 |
+
if (deleted === false) {
|
224 |
+
yield [key, value.value];
|
225 |
+
}
|
226 |
+
}
|
227 |
+
|
228 |
+
items = [...this.oldCache];
|
229 |
+
for (let i = items.length - 1; i >= 0; --i) {
|
230 |
+
const item = items[i];
|
231 |
+
const [key, value] = item;
|
232 |
+
if (!this.cache.has(key)) {
|
233 |
+
const deleted = this._deleteIfExpired(key, value);
|
234 |
+
if (deleted === false) {
|
235 |
+
yield [key, value.value];
|
236 |
+
}
|
237 |
+
}
|
238 |
+
}
|
239 |
+
}
|
240 |
+
|
241 |
+
* entriesAscending() {
|
242 |
+
for (const [key, value] of this._entriesAscending()) {
|
243 |
+
yield [key, value.value];
|
244 |
+
}
|
245 |
+
}
|
246 |
+
|
247 |
+
get size() {
|
248 |
+
if (!this._size) {
|
249 |
+
return this.oldCache.size;
|
250 |
+
}
|
251 |
+
|
252 |
+
let oldCacheSize = 0;
|
253 |
+
for (const key of this.oldCache.keys()) {
|
254 |
+
if (!this.cache.has(key)) {
|
255 |
+
oldCacheSize++;
|
256 |
+
}
|
257 |
+
}
|
258 |
+
|
259 |
+
return Math.min(this._size + oldCacheSize, this.maxSize);
|
260 |
+
}
|
261 |
+
}
|
262 |
+
|
263 |
+
module.exports = QuickLRU;
|
node_modules/@alloc/quick-lru/license
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
MIT License
|
2 |
+
|
3 |
+
Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
|
4 |
+
|
5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
6 |
+
|
7 |
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
8 |
+
|
9 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
node_modules/@alloc/quick-lru/package.json
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "@alloc/quick-lru",
|
3 |
+
"version": "5.2.0",
|
4 |
+
"description": "Simple “Least Recently Used” (LRU) cache",
|
5 |
+
"license": "MIT",
|
6 |
+
"repository": "sindresorhus/quick-lru",
|
7 |
+
"funding": "https://github.com/sponsors/sindresorhus",
|
8 |
+
"author": {
|
9 |
+
"name": "Sindre Sorhus",
|
10 |
+
"email": "[email protected]",
|
11 |
+
"url": "https://sindresorhus.com"
|
12 |
+
},
|
13 |
+
"engines": {
|
14 |
+
"node": ">=10"
|
15 |
+
},
|
16 |
+
"scripts": {
|
17 |
+
"test": "xo && nyc ava && tsd"
|
18 |
+
},
|
19 |
+
"files": [
|
20 |
+
"index.js",
|
21 |
+
"index.d.ts"
|
22 |
+
],
|
23 |
+
"keywords": [
|
24 |
+
"lru",
|
25 |
+
"quick",
|
26 |
+
"cache",
|
27 |
+
"caching",
|
28 |
+
"least",
|
29 |
+
"recently",
|
30 |
+
"used",
|
31 |
+
"fast",
|
32 |
+
"map",
|
33 |
+
"hash",
|
34 |
+
"buffer"
|
35 |
+
],
|
36 |
+
"devDependencies": {
|
37 |
+
"ava": "^2.0.0",
|
38 |
+
"coveralls": "^3.0.3",
|
39 |
+
"nyc": "^15.0.0",
|
40 |
+
"tsd": "^0.11.0",
|
41 |
+
"xo": "^0.26.0"
|
42 |
+
}
|
43 |
+
}
|
node_modules/@alloc/quick-lru/readme.md
ADDED
@@ -0,0 +1,139 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# quick-lru [](https://travis-ci.org/sindresorhus/quick-lru) [](https://coveralls.io/github/sindresorhus/quick-lru?branch=master)
|
2 |
+
|
3 |
+
> Simple [“Least Recently Used” (LRU) cache](https://en.m.wikipedia.org/wiki/Cache_replacement_policies#Least_Recently_Used_.28LRU.29)
|
4 |
+
|
5 |
+
Useful when you need to cache something and limit memory usage.
|
6 |
+
|
7 |
+
Inspired by the [`hashlru` algorithm](https://github.com/dominictarr/hashlru#algorithm), but instead uses [`Map`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map) to support keys of any type, not just strings, and values can be `undefined`.
|
8 |
+
|
9 |
+
## Install
|
10 |
+
|
11 |
+
```
|
12 |
+
$ npm install quick-lru
|
13 |
+
```
|
14 |
+
|
15 |
+
## Usage
|
16 |
+
|
17 |
+
```js
|
18 |
+
const QuickLRU = require('quick-lru');
|
19 |
+
|
20 |
+
const lru = new QuickLRU({maxSize: 1000});
|
21 |
+
|
22 |
+
lru.set('🦄', '🌈');
|
23 |
+
|
24 |
+
lru.has('🦄');
|
25 |
+
//=> true
|
26 |
+
|
27 |
+
lru.get('🦄');
|
28 |
+
//=> '🌈'
|
29 |
+
```
|
30 |
+
|
31 |
+
## API
|
32 |
+
|
33 |
+
### new QuickLRU(options?)
|
34 |
+
|
35 |
+
Returns a new instance.
|
36 |
+
|
37 |
+
### options
|
38 |
+
|
39 |
+
Type: `object`
|
40 |
+
|
41 |
+
#### maxSize
|
42 |
+
|
43 |
+
*Required*\
|
44 |
+
Type: `number`
|
45 |
+
|
46 |
+
The maximum number of items before evicting the least recently used items.
|
47 |
+
|
48 |
+
#### maxAge
|
49 |
+
|
50 |
+
Type: `number`\
|
51 |
+
Default: `Infinity`
|
52 |
+
|
53 |
+
The maximum number of milliseconds an item should remain in cache.
|
54 |
+
By default maxAge will be Infinity, which means that items will never expire.
|
55 |
+
|
56 |
+
Lazy expiration happens upon the next `write` or `read` call.
|
57 |
+
|
58 |
+
Individual expiration of an item can be specified by the `set(key, value, options)` method.
|
59 |
+
|
60 |
+
#### onEviction
|
61 |
+
|
62 |
+
*Optional*\
|
63 |
+
Type: `(key, value) => void`
|
64 |
+
|
65 |
+
Called right before an item is evicted from the cache.
|
66 |
+
|
67 |
+
Useful for side effects or for items like object URLs that need explicit cleanup (`revokeObjectURL`).
|
68 |
+
|
69 |
+
### Instance
|
70 |
+
|
71 |
+
The instance is [`iterable`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Iteration_protocols) so you can use it directly in a [`for…of`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...of) loop.
|
72 |
+
|
73 |
+
Both `key` and `value` can be of any type.
|
74 |
+
|
75 |
+
#### .set(key, value, options?)
|
76 |
+
|
77 |
+
Set an item. Returns the instance.
|
78 |
+
|
79 |
+
Individual expiration of an item can be specified with the `maxAge` option. If not specified, the global `maxAge` value will be used in case it is specified on the constructor, otherwise the item will never expire.
|
80 |
+
|
81 |
+
#### .get(key)
|
82 |
+
|
83 |
+
Get an item.
|
84 |
+
|
85 |
+
#### .has(key)
|
86 |
+
|
87 |
+
Check if an item exists.
|
88 |
+
|
89 |
+
#### .peek(key)
|
90 |
+
|
91 |
+
Get an item without marking it as recently used.
|
92 |
+
|
93 |
+
#### .delete(key)
|
94 |
+
|
95 |
+
Delete an item.
|
96 |
+
|
97 |
+
Returns `true` if the item is removed or `false` if the item doesn't exist.
|
98 |
+
|
99 |
+
#### .clear()
|
100 |
+
|
101 |
+
Delete all items.
|
102 |
+
|
103 |
+
#### .resize(maxSize)
|
104 |
+
|
105 |
+
Update the `maxSize`, discarding items as necessary. Insertion order is mostly preserved, though this is not a strong guarantee.
|
106 |
+
|
107 |
+
Useful for on-the-fly tuning of cache sizes in live systems.
|
108 |
+
|
109 |
+
#### .keys()
|
110 |
+
|
111 |
+
Iterable for all the keys.
|
112 |
+
|
113 |
+
#### .values()
|
114 |
+
|
115 |
+
Iterable for all the values.
|
116 |
+
|
117 |
+
#### .entriesAscending()
|
118 |
+
|
119 |
+
Iterable for all entries, starting with the oldest (ascending in recency).
|
120 |
+
|
121 |
+
#### .entriesDescending()
|
122 |
+
|
123 |
+
Iterable for all entries, starting with the newest (descending in recency).
|
124 |
+
|
125 |
+
#### .size
|
126 |
+
|
127 |
+
The stored item count.
|
128 |
+
|
129 |
+
---
|
130 |
+
|
131 |
+
<div align="center">
|
132 |
+
<b>
|
133 |
+
<a href="https://tidelift.com/subscription/pkg/npm-quick-lru?utm_source=npm-quick-lru&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
|
134 |
+
</b>
|
135 |
+
<br>
|
136 |
+
<sub>
|
137 |
+
Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
|
138 |
+
</sub>
|
139 |
+
</div>
|
node_modules/@isaacs/cliui/LICENSE.txt
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) 2015, Contributors
|
2 |
+
|
3 |
+
Permission to use, copy, modify, and/or distribute this software
|
4 |
+
for any purpose with or without fee is hereby granted, provided
|
5 |
+
that the above copyright notice and this permission notice
|
6 |
+
appear in all copies.
|
7 |
+
|
8 |
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
9 |
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
10 |
+
OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
|
11 |
+
LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
|
12 |
+
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
13 |
+
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
14 |
+
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
node_modules/@isaacs/cliui/README.md
ADDED
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# @isaacs/cliui
|
2 |
+
|
3 |
+
Temporary fork of [cliui](http://npm.im/cliui).
|
4 |
+
|
5 |
+

|
6 |
+
[](https://www.npmjs.com/package/cliui)
|
7 |
+
[](https://conventionalcommits.org)
|
8 |
+

|
9 |
+
|
10 |
+
easily create complex multi-column command-line-interfaces.
|
11 |
+
|
12 |
+
## Example
|
13 |
+
|
14 |
+
```js
|
15 |
+
const ui = require('cliui')()
|
16 |
+
|
17 |
+
ui.div('Usage: $0 [command] [options]')
|
18 |
+
|
19 |
+
ui.div({
|
20 |
+
text: 'Options:',
|
21 |
+
padding: [2, 0, 1, 0]
|
22 |
+
})
|
23 |
+
|
24 |
+
ui.div(
|
25 |
+
{
|
26 |
+
text: "-f, --file",
|
27 |
+
width: 20,
|
28 |
+
padding: [0, 4, 0, 4]
|
29 |
+
},
|
30 |
+
{
|
31 |
+
text: "the file to load." +
|
32 |
+
chalk.green("(if this description is long it wraps).")
|
33 |
+
,
|
34 |
+
width: 20
|
35 |
+
},
|
36 |
+
{
|
37 |
+
text: chalk.red("[required]"),
|
38 |
+
align: 'right'
|
39 |
+
}
|
40 |
+
)
|
41 |
+
|
42 |
+
console.log(ui.toString())
|
43 |
+
```
|
44 |
+
|
45 |
+
## Deno/ESM Support
|
46 |
+
|
47 |
+
As of `v7` `cliui` supports [Deno](https://github.com/denoland/deno) and
|
48 |
+
[ESM](https://nodejs.org/api/esm.html#esm_ecmascript_modules):
|
49 |
+
|
50 |
+
```typescript
|
51 |
+
import cliui from "https://deno.land/x/cliui/deno.ts";
|
52 |
+
|
53 |
+
const ui = cliui({})
|
54 |
+
|
55 |
+
ui.div('Usage: $0 [command] [options]')
|
56 |
+
|
57 |
+
ui.div({
|
58 |
+
text: 'Options:',
|
59 |
+
padding: [2, 0, 1, 0]
|
60 |
+
})
|
61 |
+
|
62 |
+
ui.div({
|
63 |
+
text: "-f, --file",
|
64 |
+
width: 20,
|
65 |
+
padding: [0, 4, 0, 4]
|
66 |
+
})
|
67 |
+
|
68 |
+
console.log(ui.toString())
|
69 |
+
```
|
70 |
+
|
71 |
+
<img width="500" src="screenshot.png">
|
72 |
+
|
73 |
+
## Layout DSL
|
74 |
+
|
75 |
+
cliui exposes a simple layout DSL:
|
76 |
+
|
77 |
+
If you create a single `ui.div`, passing a string rather than an
|
78 |
+
object:
|
79 |
+
|
80 |
+
* `\n`: characters will be interpreted as new rows.
|
81 |
+
* `\t`: characters will be interpreted as new columns.
|
82 |
+
* `\s`: characters will be interpreted as padding.
|
83 |
+
|
84 |
+
**as an example...**
|
85 |
+
|
86 |
+
```js
|
87 |
+
var ui = require('./')({
|
88 |
+
width: 60
|
89 |
+
})
|
90 |
+
|
91 |
+
ui.div(
|
92 |
+
'Usage: node ./bin/foo.js\n' +
|
93 |
+
' <regex>\t provide a regex\n' +
|
94 |
+
' <glob>\t provide a glob\t [required]'
|
95 |
+
)
|
96 |
+
|
97 |
+
console.log(ui.toString())
|
98 |
+
```
|
99 |
+
|
100 |
+
**will output:**
|
101 |
+
|
102 |
+
```shell
|
103 |
+
Usage: node ./bin/foo.js
|
104 |
+
<regex> provide a regex
|
105 |
+
<glob> provide a glob [required]
|
106 |
+
```
|
107 |
+
|
108 |
+
## Methods
|
109 |
+
|
110 |
+
```js
|
111 |
+
cliui = require('cliui')
|
112 |
+
```
|
113 |
+
|
114 |
+
### cliui({width: integer})
|
115 |
+
|
116 |
+
Specify the maximum width of the UI being generated.
|
117 |
+
If no width is provided, cliui will try to get the current window's width and use it, and if that doesn't work, width will be set to `80`.
|
118 |
+
|
119 |
+
### cliui({wrap: boolean})
|
120 |
+
|
121 |
+
Enable or disable the wrapping of text in a column.
|
122 |
+
|
123 |
+
### cliui.div(column, column, column)
|
124 |
+
|
125 |
+
Create a row with any number of columns, a column
|
126 |
+
can either be a string, or an object with the following
|
127 |
+
options:
|
128 |
+
|
129 |
+
* **text:** some text to place in the column.
|
130 |
+
* **width:** the width of a column.
|
131 |
+
* **align:** alignment, `right` or `center`.
|
132 |
+
* **padding:** `[top, right, bottom, left]`.
|
133 |
+
* **border:** should a border be placed around the div?
|
134 |
+
|
135 |
+
### cliui.span(column, column, column)
|
136 |
+
|
137 |
+
Similar to `div`, except the next row will be appended without
|
138 |
+
a new line being created.
|
139 |
+
|
140 |
+
### cliui.resetOutput()
|
141 |
+
|
142 |
+
Resets the UI elements of the current cliui instance, maintaining the values
|
143 |
+
set for `width` and `wrap`.
|
node_modules/@isaacs/cliui/build/index.cjs
ADDED
@@ -0,0 +1,317 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
'use strict';
|
2 |
+
|
3 |
+
const align = {
|
4 |
+
right: alignRight,
|
5 |
+
center: alignCenter
|
6 |
+
};
|
7 |
+
const top = 0;
|
8 |
+
const right = 1;
|
9 |
+
const bottom = 2;
|
10 |
+
const left = 3;
|
11 |
+
class UI {
|
12 |
+
constructor(opts) {
|
13 |
+
var _a;
|
14 |
+
this.width = opts.width;
|
15 |
+
/* c8 ignore start */
|
16 |
+
this.wrap = (_a = opts.wrap) !== null && _a !== void 0 ? _a : true;
|
17 |
+
/* c8 ignore stop */
|
18 |
+
this.rows = [];
|
19 |
+
}
|
20 |
+
span(...args) {
|
21 |
+
const cols = this.div(...args);
|
22 |
+
cols.span = true;
|
23 |
+
}
|
24 |
+
resetOutput() {
|
25 |
+
this.rows = [];
|
26 |
+
}
|
27 |
+
div(...args) {
|
28 |
+
if (args.length === 0) {
|
29 |
+
this.div('');
|
30 |
+
}
|
31 |
+
if (this.wrap && this.shouldApplyLayoutDSL(...args) && typeof args[0] === 'string') {
|
32 |
+
return this.applyLayoutDSL(args[0]);
|
33 |
+
}
|
34 |
+
const cols = args.map(arg => {
|
35 |
+
if (typeof arg === 'string') {
|
36 |
+
return this.colFromString(arg);
|
37 |
+
}
|
38 |
+
return arg;
|
39 |
+
});
|
40 |
+
this.rows.push(cols);
|
41 |
+
return cols;
|
42 |
+
}
|
43 |
+
shouldApplyLayoutDSL(...args) {
|
44 |
+
return args.length === 1 && typeof args[0] === 'string' &&
|
45 |
+
/[\t\n]/.test(args[0]);
|
46 |
+
}
|
47 |
+
applyLayoutDSL(str) {
|
48 |
+
const rows = str.split('\n').map(row => row.split('\t'));
|
49 |
+
let leftColumnWidth = 0;
|
50 |
+
// simple heuristic for layout, make sure the
|
51 |
+
// second column lines up along the left-hand.
|
52 |
+
// don't allow the first column to take up more
|
53 |
+
// than 50% of the screen.
|
54 |
+
rows.forEach(columns => {
|
55 |
+
if (columns.length > 1 && mixin.stringWidth(columns[0]) > leftColumnWidth) {
|
56 |
+
leftColumnWidth = Math.min(Math.floor(this.width * 0.5), mixin.stringWidth(columns[0]));
|
57 |
+
}
|
58 |
+
});
|
59 |
+
// generate a table:
|
60 |
+
// replacing ' ' with padding calculations.
|
61 |
+
// using the algorithmically generated width.
|
62 |
+
rows.forEach(columns => {
|
63 |
+
this.div(...columns.map((r, i) => {
|
64 |
+
return {
|
65 |
+
text: r.trim(),
|
66 |
+
padding: this.measurePadding(r),
|
67 |
+
width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined
|
68 |
+
};
|
69 |
+
}));
|
70 |
+
});
|
71 |
+
return this.rows[this.rows.length - 1];
|
72 |
+
}
|
73 |
+
colFromString(text) {
|
74 |
+
return {
|
75 |
+
text,
|
76 |
+
padding: this.measurePadding(text)
|
77 |
+
};
|
78 |
+
}
|
79 |
+
measurePadding(str) {
|
80 |
+
// measure padding without ansi escape codes
|
81 |
+
const noAnsi = mixin.stripAnsi(str);
|
82 |
+
return [0, noAnsi.match(/\s*$/)[0].length, 0, noAnsi.match(/^\s*/)[0].length];
|
83 |
+
}
|
84 |
+
toString() {
|
85 |
+
const lines = [];
|
86 |
+
this.rows.forEach(row => {
|
87 |
+
this.rowToString(row, lines);
|
88 |
+
});
|
89 |
+
// don't display any lines with the
|
90 |
+
// hidden flag set.
|
91 |
+
return lines
|
92 |
+
.filter(line => !line.hidden)
|
93 |
+
.map(line => line.text)
|
94 |
+
.join('\n');
|
95 |
+
}
|
96 |
+
rowToString(row, lines) {
|
97 |
+
this.rasterize(row).forEach((rrow, r) => {
|
98 |
+
let str = '';
|
99 |
+
rrow.forEach((col, c) => {
|
100 |
+
const { width } = row[c]; // the width with padding.
|
101 |
+
const wrapWidth = this.negatePadding(row[c]); // the width without padding.
|
102 |
+
let ts = col; // temporary string used during alignment/padding.
|
103 |
+
if (wrapWidth > mixin.stringWidth(col)) {
|
104 |
+
ts += ' '.repeat(wrapWidth - mixin.stringWidth(col));
|
105 |
+
}
|
106 |
+
// align the string within its column.
|
107 |
+
if (row[c].align && row[c].align !== 'left' && this.wrap) {
|
108 |
+
const fn = align[row[c].align];
|
109 |
+
ts = fn(ts, wrapWidth);
|
110 |
+
if (mixin.stringWidth(ts) < wrapWidth) {
|
111 |
+
/* c8 ignore start */
|
112 |
+
const w = width || 0;
|
113 |
+
/* c8 ignore stop */
|
114 |
+
ts += ' '.repeat(w - mixin.stringWidth(ts) - 1);
|
115 |
+
}
|
116 |
+
}
|
117 |
+
// apply border and padding to string.
|
118 |
+
const padding = row[c].padding || [0, 0, 0, 0];
|
119 |
+
if (padding[left]) {
|
120 |
+
str += ' '.repeat(padding[left]);
|
121 |
+
}
|
122 |
+
str += addBorder(row[c], ts, '| ');
|
123 |
+
str += ts;
|
124 |
+
str += addBorder(row[c], ts, ' |');
|
125 |
+
if (padding[right]) {
|
126 |
+
str += ' '.repeat(padding[right]);
|
127 |
+
}
|
128 |
+
// if prior row is span, try to render the
|
129 |
+
// current row on the prior line.
|
130 |
+
if (r === 0 && lines.length > 0) {
|
131 |
+
str = this.renderInline(str, lines[lines.length - 1]);
|
132 |
+
}
|
133 |
+
});
|
134 |
+
// remove trailing whitespace.
|
135 |
+
lines.push({
|
136 |
+
text: str.replace(/ +$/, ''),
|
137 |
+
span: row.span
|
138 |
+
});
|
139 |
+
});
|
140 |
+
return lines;
|
141 |
+
}
|
142 |
+
// if the full 'source' can render in
|
143 |
+
// the target line, do so.
|
144 |
+
renderInline(source, previousLine) {
|
145 |
+
const match = source.match(/^ */);
|
146 |
+
/* c8 ignore start */
|
147 |
+
const leadingWhitespace = match ? match[0].length : 0;
|
148 |
+
/* c8 ignore stop */
|
149 |
+
const target = previousLine.text;
|
150 |
+
const targetTextWidth = mixin.stringWidth(target.trimEnd());
|
151 |
+
if (!previousLine.span) {
|
152 |
+
return source;
|
153 |
+
}
|
154 |
+
// if we're not applying wrapping logic,
|
155 |
+
// just always append to the span.
|
156 |
+
if (!this.wrap) {
|
157 |
+
previousLine.hidden = true;
|
158 |
+
return target + source;
|
159 |
+
}
|
160 |
+
if (leadingWhitespace < targetTextWidth) {
|
161 |
+
return source;
|
162 |
+
}
|
163 |
+
previousLine.hidden = true;
|
164 |
+
return target.trimEnd() + ' '.repeat(leadingWhitespace - targetTextWidth) + source.trimStart();
|
165 |
+
}
|
166 |
+
rasterize(row) {
|
167 |
+
const rrows = [];
|
168 |
+
const widths = this.columnWidths(row);
|
169 |
+
let wrapped;
|
170 |
+
// word wrap all columns, and create
|
171 |
+
// a data-structure that is easy to rasterize.
|
172 |
+
row.forEach((col, c) => {
|
173 |
+
// leave room for left and right padding.
|
174 |
+
col.width = widths[c];
|
175 |
+
if (this.wrap) {
|
176 |
+
wrapped = mixin.wrap(col.text, this.negatePadding(col), { hard: true }).split('\n');
|
177 |
+
}
|
178 |
+
else {
|
179 |
+
wrapped = col.text.split('\n');
|
180 |
+
}
|
181 |
+
if (col.border) {
|
182 |
+
wrapped.unshift('.' + '-'.repeat(this.negatePadding(col) + 2) + '.');
|
183 |
+
wrapped.push("'" + '-'.repeat(this.negatePadding(col) + 2) + "'");
|
184 |
+
}
|
185 |
+
// add top and bottom padding.
|
186 |
+
if (col.padding) {
|
187 |
+
wrapped.unshift(...new Array(col.padding[top] || 0).fill(''));
|
188 |
+
wrapped.push(...new Array(col.padding[bottom] || 0).fill(''));
|
189 |
+
}
|
190 |
+
wrapped.forEach((str, r) => {
|
191 |
+
if (!rrows[r]) {
|
192 |
+
rrows.push([]);
|
193 |
+
}
|
194 |
+
const rrow = rrows[r];
|
195 |
+
for (let i = 0; i < c; i++) {
|
196 |
+
if (rrow[i] === undefined) {
|
197 |
+
rrow.push('');
|
198 |
+
}
|
199 |
+
}
|
200 |
+
rrow.push(str);
|
201 |
+
});
|
202 |
+
});
|
203 |
+
return rrows;
|
204 |
+
}
|
205 |
+
negatePadding(col) {
|
206 |
+
/* c8 ignore start */
|
207 |
+
let wrapWidth = col.width || 0;
|
208 |
+
/* c8 ignore stop */
|
209 |
+
if (col.padding) {
|
210 |
+
wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0);
|
211 |
+
}
|
212 |
+
if (col.border) {
|
213 |
+
wrapWidth -= 4;
|
214 |
+
}
|
215 |
+
return wrapWidth;
|
216 |
+
}
|
217 |
+
columnWidths(row) {
|
218 |
+
if (!this.wrap) {
|
219 |
+
return row.map(col => {
|
220 |
+
return col.width || mixin.stringWidth(col.text);
|
221 |
+
});
|
222 |
+
}
|
223 |
+
let unset = row.length;
|
224 |
+
let remainingWidth = this.width;
|
225 |
+
// column widths can be set in config.
|
226 |
+
const widths = row.map(col => {
|
227 |
+
if (col.width) {
|
228 |
+
unset--;
|
229 |
+
remainingWidth -= col.width;
|
230 |
+
return col.width;
|
231 |
+
}
|
232 |
+
return undefined;
|
233 |
+
});
|
234 |
+
// any unset widths should be calculated.
|
235 |
+
/* c8 ignore start */
|
236 |
+
const unsetWidth = unset ? Math.floor(remainingWidth / unset) : 0;
|
237 |
+
/* c8 ignore stop */
|
238 |
+
return widths.map((w, i) => {
|
239 |
+
if (w === undefined) {
|
240 |
+
return Math.max(unsetWidth, _minWidth(row[i]));
|
241 |
+
}
|
242 |
+
return w;
|
243 |
+
});
|
244 |
+
}
|
245 |
+
}
|
246 |
+
function addBorder(col, ts, style) {
|
247 |
+
if (col.border) {
|
248 |
+
if (/[.']-+[.']/.test(ts)) {
|
249 |
+
return '';
|
250 |
+
}
|
251 |
+
if (ts.trim().length !== 0) {
|
252 |
+
return style;
|
253 |
+
}
|
254 |
+
return ' ';
|
255 |
+
}
|
256 |
+
return '';
|
257 |
+
}
|
258 |
+
// calculates the minimum width of
|
259 |
+
// a column, based on padding preferences.
|
260 |
+
function _minWidth(col) {
|
261 |
+
const padding = col.padding || [];
|
262 |
+
const minWidth = 1 + (padding[left] || 0) + (padding[right] || 0);
|
263 |
+
if (col.border) {
|
264 |
+
return minWidth + 4;
|
265 |
+
}
|
266 |
+
return minWidth;
|
267 |
+
}
|
268 |
+
function getWindowWidth() {
|
269 |
+
/* c8 ignore start */
|
270 |
+
if (typeof process === 'object' && process.stdout && process.stdout.columns) {
|
271 |
+
return process.stdout.columns;
|
272 |
+
}
|
273 |
+
return 80;
|
274 |
+
}
|
275 |
+
/* c8 ignore stop */
|
276 |
+
function alignRight(str, width) {
|
277 |
+
str = str.trim();
|
278 |
+
const strWidth = mixin.stringWidth(str);
|
279 |
+
if (strWidth < width) {
|
280 |
+
return ' '.repeat(width - strWidth) + str;
|
281 |
+
}
|
282 |
+
return str;
|
283 |
+
}
|
284 |
+
function alignCenter(str, width) {
|
285 |
+
str = str.trim();
|
286 |
+
const strWidth = mixin.stringWidth(str);
|
287 |
+
/* c8 ignore start */
|
288 |
+
if (strWidth >= width) {
|
289 |
+
return str;
|
290 |
+
}
|
291 |
+
/* c8 ignore stop */
|
292 |
+
return ' '.repeat((width - strWidth) >> 1) + str;
|
293 |
+
}
|
294 |
+
let mixin;
|
295 |
+
function cliui(opts, _mixin) {
|
296 |
+
mixin = _mixin;
|
297 |
+
return new UI({
|
298 |
+
/* c8 ignore start */
|
299 |
+
width: (opts === null || opts === void 0 ? void 0 : opts.width) || getWindowWidth(),
|
300 |
+
wrap: opts === null || opts === void 0 ? void 0 : opts.wrap
|
301 |
+
/* c8 ignore stop */
|
302 |
+
});
|
303 |
+
}
|
304 |
+
|
305 |
+
// Bootstrap cliui with CommonJS dependencies:
|
306 |
+
const stringWidth = require('string-width-cjs');
|
307 |
+
const stripAnsi = require('strip-ansi-cjs');
|
308 |
+
const wrap = require('wrap-ansi-cjs');
|
309 |
+
function ui(opts) {
|
310 |
+
return cliui(opts, {
|
311 |
+
stringWidth,
|
312 |
+
stripAnsi,
|
313 |
+
wrap
|
314 |
+
});
|
315 |
+
}
|
316 |
+
|
317 |
+
module.exports = ui;
|
node_modules/@isaacs/cliui/build/index.d.cts
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
interface UIOptions {
|
2 |
+
width: number;
|
3 |
+
wrap?: boolean;
|
4 |
+
rows?: string[];
|
5 |
+
}
|
6 |
+
interface Column {
|
7 |
+
text: string;
|
8 |
+
width?: number;
|
9 |
+
align?: "right" | "left" | "center";
|
10 |
+
padding: number[];
|
11 |
+
border?: boolean;
|
12 |
+
}
|
13 |
+
interface ColumnArray extends Array<Column> {
|
14 |
+
span: boolean;
|
15 |
+
}
|
16 |
+
interface Line {
|
17 |
+
hidden?: boolean;
|
18 |
+
text: string;
|
19 |
+
span?: boolean;
|
20 |
+
}
|
21 |
+
declare class UI {
|
22 |
+
width: number;
|
23 |
+
wrap: boolean;
|
24 |
+
rows: ColumnArray[];
|
25 |
+
constructor(opts: UIOptions);
|
26 |
+
span(...args: ColumnArray): void;
|
27 |
+
resetOutput(): void;
|
28 |
+
div(...args: (Column | string)[]): ColumnArray;
|
29 |
+
private shouldApplyLayoutDSL;
|
30 |
+
private applyLayoutDSL;
|
31 |
+
private colFromString;
|
32 |
+
private measurePadding;
|
33 |
+
toString(): string;
|
34 |
+
rowToString(row: ColumnArray, lines: Line[]): Line[];
|
35 |
+
// if the full 'source' can render in
|
36 |
+
// the target line, do so.
|
37 |
+
private renderInline;
|
38 |
+
private rasterize;
|
39 |
+
private negatePadding;
|
40 |
+
private columnWidths;
|
41 |
+
}
|
42 |
+
declare function ui(opts: UIOptions): UI;
|
43 |
+
export { ui as default };
|
node_modules/@isaacs/cliui/build/lib/index.js
ADDED
@@ -0,0 +1,302 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
'use strict';
|
2 |
+
const align = {
|
3 |
+
right: alignRight,
|
4 |
+
center: alignCenter
|
5 |
+
};
|
6 |
+
const top = 0;
|
7 |
+
const right = 1;
|
8 |
+
const bottom = 2;
|
9 |
+
const left = 3;
|
10 |
+
export class UI {
|
11 |
+
constructor(opts) {
|
12 |
+
var _a;
|
13 |
+
this.width = opts.width;
|
14 |
+
/* c8 ignore start */
|
15 |
+
this.wrap = (_a = opts.wrap) !== null && _a !== void 0 ? _a : true;
|
16 |
+
/* c8 ignore stop */
|
17 |
+
this.rows = [];
|
18 |
+
}
|
19 |
+
span(...args) {
|
20 |
+
const cols = this.div(...args);
|
21 |
+
cols.span = true;
|
22 |
+
}
|
23 |
+
resetOutput() {
|
24 |
+
this.rows = [];
|
25 |
+
}
|
26 |
+
div(...args) {
|
27 |
+
if (args.length === 0) {
|
28 |
+
this.div('');
|
29 |
+
}
|
30 |
+
if (this.wrap && this.shouldApplyLayoutDSL(...args) && typeof args[0] === 'string') {
|
31 |
+
return this.applyLayoutDSL(args[0]);
|
32 |
+
}
|
33 |
+
const cols = args.map(arg => {
|
34 |
+
if (typeof arg === 'string') {
|
35 |
+
return this.colFromString(arg);
|
36 |
+
}
|
37 |
+
return arg;
|
38 |
+
});
|
39 |
+
this.rows.push(cols);
|
40 |
+
return cols;
|
41 |
+
}
|
42 |
+
shouldApplyLayoutDSL(...args) {
|
43 |
+
return args.length === 1 && typeof args[0] === 'string' &&
|
44 |
+
/[\t\n]/.test(args[0]);
|
45 |
+
}
|
46 |
+
applyLayoutDSL(str) {
|
47 |
+
const rows = str.split('\n').map(row => row.split('\t'));
|
48 |
+
let leftColumnWidth = 0;
|
49 |
+
// simple heuristic for layout, make sure the
|
50 |
+
// second column lines up along the left-hand.
|
51 |
+
// don't allow the first column to take up more
|
52 |
+
// than 50% of the screen.
|
53 |
+
rows.forEach(columns => {
|
54 |
+
if (columns.length > 1 && mixin.stringWidth(columns[0]) > leftColumnWidth) {
|
55 |
+
leftColumnWidth = Math.min(Math.floor(this.width * 0.5), mixin.stringWidth(columns[0]));
|
56 |
+
}
|
57 |
+
});
|
58 |
+
// generate a table:
|
59 |
+
// replacing ' ' with padding calculations.
|
60 |
+
// using the algorithmically generated width.
|
61 |
+
rows.forEach(columns => {
|
62 |
+
this.div(...columns.map((r, i) => {
|
63 |
+
return {
|
64 |
+
text: r.trim(),
|
65 |
+
padding: this.measurePadding(r),
|
66 |
+
width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined
|
67 |
+
};
|
68 |
+
}));
|
69 |
+
});
|
70 |
+
return this.rows[this.rows.length - 1];
|
71 |
+
}
|
72 |
+
colFromString(text) {
|
73 |
+
return {
|
74 |
+
text,
|
75 |
+
padding: this.measurePadding(text)
|
76 |
+
};
|
77 |
+
}
|
78 |
+
measurePadding(str) {
|
79 |
+
// measure padding without ansi escape codes
|
80 |
+
const noAnsi = mixin.stripAnsi(str);
|
81 |
+
return [0, noAnsi.match(/\s*$/)[0].length, 0, noAnsi.match(/^\s*/)[0].length];
|
82 |
+
}
|
83 |
+
toString() {
|
84 |
+
const lines = [];
|
85 |
+
this.rows.forEach(row => {
|
86 |
+
this.rowToString(row, lines);
|
87 |
+
});
|
88 |
+
// don't display any lines with the
|
89 |
+
// hidden flag set.
|
90 |
+
return lines
|
91 |
+
.filter(line => !line.hidden)
|
92 |
+
.map(line => line.text)
|
93 |
+
.join('\n');
|
94 |
+
}
|
95 |
+
rowToString(row, lines) {
|
96 |
+
this.rasterize(row).forEach((rrow, r) => {
|
97 |
+
let str = '';
|
98 |
+
rrow.forEach((col, c) => {
|
99 |
+
const { width } = row[c]; // the width with padding.
|
100 |
+
const wrapWidth = this.negatePadding(row[c]); // the width without padding.
|
101 |
+
let ts = col; // temporary string used during alignment/padding.
|
102 |
+
if (wrapWidth > mixin.stringWidth(col)) {
|
103 |
+
ts += ' '.repeat(wrapWidth - mixin.stringWidth(col));
|
104 |
+
}
|
105 |
+
// align the string within its column.
|
106 |
+
if (row[c].align && row[c].align !== 'left' && this.wrap) {
|
107 |
+
const fn = align[row[c].align];
|
108 |
+
ts = fn(ts, wrapWidth);
|
109 |
+
if (mixin.stringWidth(ts) < wrapWidth) {
|
110 |
+
/* c8 ignore start */
|
111 |
+
const w = width || 0;
|
112 |
+
/* c8 ignore stop */
|
113 |
+
ts += ' '.repeat(w - mixin.stringWidth(ts) - 1);
|
114 |
+
}
|
115 |
+
}
|
116 |
+
// apply border and padding to string.
|
117 |
+
const padding = row[c].padding || [0, 0, 0, 0];
|
118 |
+
if (padding[left]) {
|
119 |
+
str += ' '.repeat(padding[left]);
|
120 |
+
}
|
121 |
+
str += addBorder(row[c], ts, '| ');
|
122 |
+
str += ts;
|
123 |
+
str += addBorder(row[c], ts, ' |');
|
124 |
+
if (padding[right]) {
|
125 |
+
str += ' '.repeat(padding[right]);
|
126 |
+
}
|
127 |
+
// if prior row is span, try to render the
|
128 |
+
// current row on the prior line.
|
129 |
+
if (r === 0 && lines.length > 0) {
|
130 |
+
str = this.renderInline(str, lines[lines.length - 1]);
|
131 |
+
}
|
132 |
+
});
|
133 |
+
// remove trailing whitespace.
|
134 |
+
lines.push({
|
135 |
+
text: str.replace(/ +$/, ''),
|
136 |
+
span: row.span
|
137 |
+
});
|
138 |
+
});
|
139 |
+
return lines;
|
140 |
+
}
|
141 |
+
// if the full 'source' can render in
|
142 |
+
// the target line, do so.
|
143 |
+
renderInline(source, previousLine) {
|
144 |
+
const match = source.match(/^ */);
|
145 |
+
/* c8 ignore start */
|
146 |
+
const leadingWhitespace = match ? match[0].length : 0;
|
147 |
+
/* c8 ignore stop */
|
148 |
+
const target = previousLine.text;
|
149 |
+
const targetTextWidth = mixin.stringWidth(target.trimEnd());
|
150 |
+
if (!previousLine.span) {
|
151 |
+
return source;
|
152 |
+
}
|
153 |
+
// if we're not applying wrapping logic,
|
154 |
+
// just always append to the span.
|
155 |
+
if (!this.wrap) {
|
156 |
+
previousLine.hidden = true;
|
157 |
+
return target + source;
|
158 |
+
}
|
159 |
+
if (leadingWhitespace < targetTextWidth) {
|
160 |
+
return source;
|
161 |
+
}
|
162 |
+
previousLine.hidden = true;
|
163 |
+
return target.trimEnd() + ' '.repeat(leadingWhitespace - targetTextWidth) + source.trimStart();
|
164 |
+
}
|
165 |
+
rasterize(row) {
|
166 |
+
const rrows = [];
|
167 |
+
const widths = this.columnWidths(row);
|
168 |
+
let wrapped;
|
169 |
+
// word wrap all columns, and create
|
170 |
+
// a data-structure that is easy to rasterize.
|
171 |
+
row.forEach((col, c) => {
|
172 |
+
// leave room for left and right padding.
|
173 |
+
col.width = widths[c];
|
174 |
+
if (this.wrap) {
|
175 |
+
wrapped = mixin.wrap(col.text, this.negatePadding(col), { hard: true }).split('\n');
|
176 |
+
}
|
177 |
+
else {
|
178 |
+
wrapped = col.text.split('\n');
|
179 |
+
}
|
180 |
+
if (col.border) {
|
181 |
+
wrapped.unshift('.' + '-'.repeat(this.negatePadding(col) + 2) + '.');
|
182 |
+
wrapped.push("'" + '-'.repeat(this.negatePadding(col) + 2) + "'");
|
183 |
+
}
|
184 |
+
// add top and bottom padding.
|
185 |
+
if (col.padding) {
|
186 |
+
wrapped.unshift(...new Array(col.padding[top] || 0).fill(''));
|
187 |
+
wrapped.push(...new Array(col.padding[bottom] || 0).fill(''));
|
188 |
+
}
|
189 |
+
wrapped.forEach((str, r) => {
|
190 |
+
if (!rrows[r]) {
|
191 |
+
rrows.push([]);
|
192 |
+
}
|
193 |
+
const rrow = rrows[r];
|
194 |
+
for (let i = 0; i < c; i++) {
|
195 |
+
if (rrow[i] === undefined) {
|
196 |
+
rrow.push('');
|
197 |
+
}
|
198 |
+
}
|
199 |
+
rrow.push(str);
|
200 |
+
});
|
201 |
+
});
|
202 |
+
return rrows;
|
203 |
+
}
|
204 |
+
negatePadding(col) {
|
205 |
+
/* c8 ignore start */
|
206 |
+
let wrapWidth = col.width || 0;
|
207 |
+
/* c8 ignore stop */
|
208 |
+
if (col.padding) {
|
209 |
+
wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0);
|
210 |
+
}
|
211 |
+
if (col.border) {
|
212 |
+
wrapWidth -= 4;
|
213 |
+
}
|
214 |
+
return wrapWidth;
|
215 |
+
}
|
216 |
+
columnWidths(row) {
|
217 |
+
if (!this.wrap) {
|
218 |
+
return row.map(col => {
|
219 |
+
return col.width || mixin.stringWidth(col.text);
|
220 |
+
});
|
221 |
+
}
|
222 |
+
let unset = row.length;
|
223 |
+
let remainingWidth = this.width;
|
224 |
+
// column widths can be set in config.
|
225 |
+
const widths = row.map(col => {
|
226 |
+
if (col.width) {
|
227 |
+
unset--;
|
228 |
+
remainingWidth -= col.width;
|
229 |
+
return col.width;
|
230 |
+
}
|
231 |
+
return undefined;
|
232 |
+
});
|
233 |
+
// any unset widths should be calculated.
|
234 |
+
/* c8 ignore start */
|
235 |
+
const unsetWidth = unset ? Math.floor(remainingWidth / unset) : 0;
|
236 |
+
/* c8 ignore stop */
|
237 |
+
return widths.map((w, i) => {
|
238 |
+
if (w === undefined) {
|
239 |
+
return Math.max(unsetWidth, _minWidth(row[i]));
|
240 |
+
}
|
241 |
+
return w;
|
242 |
+
});
|
243 |
+
}
|
244 |
+
}
|
245 |
+
function addBorder(col, ts, style) {
|
246 |
+
if (col.border) {
|
247 |
+
if (/[.']-+[.']/.test(ts)) {
|
248 |
+
return '';
|
249 |
+
}
|
250 |
+
if (ts.trim().length !== 0) {
|
251 |
+
return style;
|
252 |
+
}
|
253 |
+
return ' ';
|
254 |
+
}
|
255 |
+
return '';
|
256 |
+
}
|
257 |
+
// calculates the minimum width of
|
258 |
+
// a column, based on padding preferences.
|
259 |
+
function _minWidth(col) {
|
260 |
+
const padding = col.padding || [];
|
261 |
+
const minWidth = 1 + (padding[left] || 0) + (padding[right] || 0);
|
262 |
+
if (col.border) {
|
263 |
+
return minWidth + 4;
|
264 |
+
}
|
265 |
+
return minWidth;
|
266 |
+
}
|
267 |
+
function getWindowWidth() {
|
268 |
+
/* c8 ignore start */
|
269 |
+
if (typeof process === 'object' && process.stdout && process.stdout.columns) {
|
270 |
+
return process.stdout.columns;
|
271 |
+
}
|
272 |
+
return 80;
|
273 |
+
}
|
274 |
+
/* c8 ignore stop */
|
275 |
+
function alignRight(str, width) {
|
276 |
+
str = str.trim();
|
277 |
+
const strWidth = mixin.stringWidth(str);
|
278 |
+
if (strWidth < width) {
|
279 |
+
return ' '.repeat(width - strWidth) + str;
|
280 |
+
}
|
281 |
+
return str;
|
282 |
+
}
|
283 |
+
function alignCenter(str, width) {
|
284 |
+
str = str.trim();
|
285 |
+
const strWidth = mixin.stringWidth(str);
|
286 |
+
/* c8 ignore start */
|
287 |
+
if (strWidth >= width) {
|
288 |
+
return str;
|
289 |
+
}
|
290 |
+
/* c8 ignore stop */
|
291 |
+
return ' '.repeat((width - strWidth) >> 1) + str;
|
292 |
+
}
|
293 |
+
let mixin;
|
294 |
+
export function cliui(opts, _mixin) {
|
295 |
+
mixin = _mixin;
|
296 |
+
return new UI({
|
297 |
+
/* c8 ignore start */
|
298 |
+
width: (opts === null || opts === void 0 ? void 0 : opts.width) || getWindowWidth(),
|
299 |
+
wrap: opts === null || opts === void 0 ? void 0 : opts.wrap
|
300 |
+
/* c8 ignore stop */
|
301 |
+
});
|
302 |
+
}
|
node_modules/@isaacs/cliui/index.mjs
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// Bootstrap cliui with ESM dependencies:
|
2 |
+
import { cliui } from './build/lib/index.js'
|
3 |
+
|
4 |
+
import stringWidth from 'string-width'
|
5 |
+
import stripAnsi from 'strip-ansi'
|
6 |
+
import wrap from 'wrap-ansi'
|
7 |
+
|
8 |
+
export default function ui (opts) {
|
9 |
+
return cliui(opts, {
|
10 |
+
stringWidth,
|
11 |
+
stripAnsi,
|
12 |
+
wrap
|
13 |
+
})
|
14 |
+
}
|