Moonfanz commited on
Commit
e2f726f
·
verified ·
1 Parent(s): bf5b4de

Upload 1796 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. Dockerfile +10 -0
  2. __pycache__/debug.cpython-310.pyc +0 -0
  3. app.py +360 -0
  4. debug.py +32 -0
  5. image.py +38 -0
  6. node_modules/.bin/cssesc +3 -0
  7. node_modules/.bin/cssesc.cmd +3 -0
  8. node_modules/.bin/cssesc.ps1 +3 -0
  9. node_modules/.bin/glob +3 -0
  10. node_modules/.bin/glob.cmd +3 -0
  11. node_modules/.bin/glob.ps1 +3 -0
  12. node_modules/.bin/jiti +3 -0
  13. node_modules/.bin/jiti.cmd +3 -0
  14. node_modules/.bin/jiti.ps1 +3 -0
  15. node_modules/.bin/nanoid +3 -0
  16. node_modules/.bin/nanoid.cmd +3 -0
  17. node_modules/.bin/nanoid.ps1 +3 -0
  18. node_modules/.bin/node-which +3 -0
  19. node_modules/.bin/node-which.cmd +3 -0
  20. node_modules/.bin/node-which.ps1 +3 -0
  21. node_modules/.bin/resolve +3 -0
  22. node_modules/.bin/resolve.cmd +3 -0
  23. node_modules/.bin/resolve.ps1 +3 -0
  24. node_modules/.bin/sucrase +3 -0
  25. node_modules/.bin/sucrase-node +3 -0
  26. node_modules/.bin/sucrase-node.cmd +3 -0
  27. node_modules/.bin/sucrase-node.ps1 +3 -0
  28. node_modules/.bin/sucrase.cmd +3 -0
  29. node_modules/.bin/sucrase.ps1 +3 -0
  30. node_modules/.bin/tailwind +3 -0
  31. node_modules/.bin/tailwind.cmd +3 -0
  32. node_modules/.bin/tailwind.ps1 +3 -0
  33. node_modules/.bin/tailwindcss +3 -0
  34. node_modules/.bin/tailwindcss.cmd +3 -0
  35. node_modules/.bin/tailwindcss.ps1 +3 -0
  36. node_modules/.bin/yaml +3 -0
  37. node_modules/.bin/yaml.cmd +3 -0
  38. node_modules/.bin/yaml.ps1 +3 -0
  39. node_modules/.package-lock.json +1532 -0
  40. node_modules/@alloc/quick-lru/index.d.ts +128 -0
  41. node_modules/@alloc/quick-lru/index.js +263 -0
  42. node_modules/@alloc/quick-lru/license +9 -0
  43. node_modules/@alloc/quick-lru/package.json +43 -0
  44. node_modules/@alloc/quick-lru/readme.md +139 -0
  45. node_modules/@isaacs/cliui/LICENSE.txt +14 -0
  46. node_modules/@isaacs/cliui/README.md +143 -0
  47. node_modules/@isaacs/cliui/build/index.cjs +317 -0
  48. node_modules/@isaacs/cliui/build/index.d.cts +43 -0
  49. node_modules/@isaacs/cliui/build/lib/index.js +302 -0
  50. 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 [![Build Status](https://travis-ci.org/sindresorhus/quick-lru.svg?branch=master)](https://travis-ci.org/sindresorhus/quick-lru) [![Coverage Status](https://coveralls.io/repos/github/sindresorhus/quick-lru/badge.svg?branch=master)](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
+ ![ci](https://github.com/yargs/cliui/workflows/ci/badge.svg)
6
+ [![NPM version](https://img.shields.io/npm/v/cliui.svg)](https://www.npmjs.com/package/cliui)
7
+ [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)
8
+ ![nycrc config on GitHub](https://img.shields.io/nycrc/yargs/cliui)
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
+ }