ttminis 0.0.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +375 -0
- package/dist/index.js.map +1 -0
- package/dist/package.json +78 -0
- package/dist/public/assets/index-BviU6qZO.css +1 -0
- package/dist/public/assets/index-ByWk_npW.js +8 -0
- package/dist/public/assets/index-CJ1rHN6I.js +8 -0
- package/dist/public/assets/index-CLQjAUJK.css +1 -0
- package/dist/public/assets/index-CQJ5-grc.js +8 -0
- package/dist/public/assets/index-Cxmxbovb.js +8 -0
- package/dist/public/assets/index-VGraupy7.js +9 -0
- package/dist/public/assets/index-X73Ca9DJ.js +8 -0
- package/dist/public/assets/index-hoDP6v4Q.css +1 -0
- package/dist/public/assets/react-CHdo91hT.svg +1 -0
- package/dist/public/icon.svg +8 -0
- package/dist/public/index-BviU6qZO.css +1 -0
- package/dist/public/index-ByWk_npW.js +8 -0
- package/dist/public/index-CJ1rHN6I.js +8 -0
- package/dist/public/index-CLQjAUJK.css +1 -0
- package/dist/public/index-CQJ5-grc.js +8 -0
- package/dist/public/index-Cxmxbovb.js +8 -0
- package/dist/public/index-VGraupy7.js +9 -0
- package/dist/public/index-X73Ca9DJ.js +8 -0
- package/dist/public/index-hoDP6v4Q.css +1 -0
- package/dist/public/index.html +14 -0
- package/dist/public/react-CHdo91hT.svg +1 -0
- package/dist/public/vite.svg +1 -0
- package/package.json +78 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var inquirer = require('inquirer');
|
|
5
|
+
var path = require('path');
|
|
6
|
+
var os = require('os');
|
|
7
|
+
var fs = require('fs');
|
|
8
|
+
var express = require('express');
|
|
9
|
+
var WebSocket = require('ws');
|
|
10
|
+
var commander = require('commander');
|
|
11
|
+
|
|
12
|
+
function _interopNamespaceDefault(e) {
|
|
13
|
+
var n = Object.create(null);
|
|
14
|
+
if (e) {
|
|
15
|
+
Object.keys(e).forEach(function (k) {
|
|
16
|
+
if (k !== 'default') {
|
|
17
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
18
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () { return e[k]; }
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
n.default = e;
|
|
26
|
+
return Object.freeze(n);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
var path__namespace = /*#__PURE__*/_interopNamespaceDefault(path);
|
|
30
|
+
var os__namespace = /*#__PURE__*/_interopNamespaceDefault(os);
|
|
31
|
+
|
|
32
|
+
async function openUrl(url) {
|
|
33
|
+
const { launch } = await import('chrome-launcher');
|
|
34
|
+
try {
|
|
35
|
+
const userDataDir = path__namespace.join(os__namespace.homedir(), '.my-chrome-dev-profile');
|
|
36
|
+
await launch({
|
|
37
|
+
startingUrl: url,
|
|
38
|
+
chromeFlags: [
|
|
39
|
+
'--auto-open-devtools-for-tabs', // 自动打开 DevTools
|
|
40
|
+
'--no-default-browser-check',
|
|
41
|
+
'--allow-insecure-localhost',
|
|
42
|
+
'--allow-running-insecure-content',
|
|
43
|
+
'--remote-allow-origins=*',
|
|
44
|
+
`--user-data-dir=${userDataDir}`,
|
|
45
|
+
'--disk-cache-size=0',
|
|
46
|
+
'--media-cache-size=0',
|
|
47
|
+
],
|
|
48
|
+
});
|
|
49
|
+
await new Promise(resolve => { });
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
return false;
|
|
54
|
+
// return Promise.reject(e);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const CONFIG_PATH = path.join(os.homedir(), '.ttminisrc');
|
|
59
|
+
const getTTMinisRC = () => {
|
|
60
|
+
// only check one time
|
|
61
|
+
if (!fs.existsSync(CONFIG_PATH)) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// safe parse
|
|
66
|
+
let res = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf8'));
|
|
67
|
+
return res;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const setTTMinisRC = (config) => {
|
|
71
|
+
// updata cache config
|
|
72
|
+
config = config;
|
|
73
|
+
const originConfig = getTTMinisRC() || {};
|
|
74
|
+
fs.writeFileSync(CONFIG_PATH, JSON.stringify({ ...originConfig, ...config }));
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
function getLocalIPs() {
|
|
78
|
+
// 有线网卡关键词(Windows/macOS 常见 + 一些 Linux 命名)
|
|
79
|
+
const WIRED_KEYWORDS = [
|
|
80
|
+
'ethernet',
|
|
81
|
+
'以太网',
|
|
82
|
+
'本地连接',
|
|
83
|
+
'en',
|
|
84
|
+
'lan',
|
|
85
|
+
'enp',
|
|
86
|
+
'eno', // en0/en1, enp0s3...
|
|
87
|
+
];
|
|
88
|
+
// 无线网卡关键词(Windows/macOS 常见 + 一些 Linux 命名)
|
|
89
|
+
const WIRELESS_KEYWORDS = [
|
|
90
|
+
'wi-fi',
|
|
91
|
+
'wifi',
|
|
92
|
+
'无线',
|
|
93
|
+
'无线网络连接',
|
|
94
|
+
'wlan',
|
|
95
|
+
'wlp',
|
|
96
|
+
'wl',
|
|
97
|
+
'airport', // 老旧 macOS/工具里偶见
|
|
98
|
+
];
|
|
99
|
+
// 虚拟/隧道/容器/桥接等常见关键词
|
|
100
|
+
const VIRTUAL_INTERFACE_KEYWORDS = [
|
|
101
|
+
'vmware',
|
|
102
|
+
'virtual',
|
|
103
|
+
'docker',
|
|
104
|
+
'vbox',
|
|
105
|
+
'br-',
|
|
106
|
+
'bridge',
|
|
107
|
+
'tun',
|
|
108
|
+
'tap',
|
|
109
|
+
'hamachi',
|
|
110
|
+
'vEthernet',
|
|
111
|
+
'vnic',
|
|
112
|
+
'utun',
|
|
113
|
+
'hyper-v',
|
|
114
|
+
'loopback',
|
|
115
|
+
'lo',
|
|
116
|
+
'ppp',
|
|
117
|
+
'tailscale',
|
|
118
|
+
'zerotier',
|
|
119
|
+
'npcap',
|
|
120
|
+
'npf',
|
|
121
|
+
'wg',
|
|
122
|
+
'wireguard',
|
|
123
|
+
'anyconnect',
|
|
124
|
+
'teleport',
|
|
125
|
+
];
|
|
126
|
+
// 判断是否为物理网卡(基于名称的启发式)
|
|
127
|
+
function isPhysicalInterface(name) {
|
|
128
|
+
const lower = name.toLowerCase();
|
|
129
|
+
return (WIRED_KEYWORDS.some(k => lower.includes(k)) ||
|
|
130
|
+
WIRELESS_KEYWORDS.some(k => lower.includes(k)));
|
|
131
|
+
}
|
|
132
|
+
// 判断是否为虚拟/隧道接口
|
|
133
|
+
function isVirtualInterface(name) {
|
|
134
|
+
const lower = name.toLowerCase();
|
|
135
|
+
return VIRTUAL_INTERFACE_KEYWORDS.some(k => lower.includes(k));
|
|
136
|
+
}
|
|
137
|
+
// 判断局域网私有 IPv4
|
|
138
|
+
function isPrivateIPv4(ip) {
|
|
139
|
+
return (ip.startsWith('10.') ||
|
|
140
|
+
ip.startsWith('192.168.') ||
|
|
141
|
+
/^172\.(1[6-9]|2\d|3[01])\./.test(ip));
|
|
142
|
+
}
|
|
143
|
+
// 兼容不同 Node 版本中 family 的类型('IPv4' | 4)
|
|
144
|
+
function isIPv4Family(f) {
|
|
145
|
+
return f === 4 || f === 'IPv4';
|
|
146
|
+
}
|
|
147
|
+
const nets = os.networkInterfaces();
|
|
148
|
+
const results = [];
|
|
149
|
+
for (const name of Object.keys(nets)) {
|
|
150
|
+
const addrs = nets[name] || [];
|
|
151
|
+
// 先粗略排除明显虚拟接口
|
|
152
|
+
if (isVirtualInterface(name))
|
|
153
|
+
continue;
|
|
154
|
+
// 需要看地址再判断是否物理
|
|
155
|
+
// 有些系统的命名不标准,允许在地址层面兜底
|
|
156
|
+
let matchedPhysicalName = isPhysicalInterface(name);
|
|
157
|
+
for (const net of addrs) {
|
|
158
|
+
if (!isIPv4Family(net.family))
|
|
159
|
+
continue;
|
|
160
|
+
if (net.internal)
|
|
161
|
+
continue;
|
|
162
|
+
if (!net.address || !isPrivateIPv4(net.address))
|
|
163
|
+
continue;
|
|
164
|
+
// 若名称判断不通过,但地址是私有网段、且非回环/非内网,考虑接纳
|
|
165
|
+
// 但排除明显虚拟(已经在上面过滤 name)
|
|
166
|
+
if (matchedPhysicalName || shouldAcceptByHeuristic(name, net.address)) {
|
|
167
|
+
results.push({ name, address: net.address });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// 去重(同名+同地址)
|
|
172
|
+
const unique = dedupe(results);
|
|
173
|
+
// 稳定排序:无线优先 or 有线优先按需定。这里有线优先,再无线,再其他。
|
|
174
|
+
unique.sort((a, b) => {
|
|
175
|
+
const rank = (n) => {
|
|
176
|
+
const lower = n.toLowerCase();
|
|
177
|
+
if (WIRED_KEYWORDS.some(k => lower.includes(k)))
|
|
178
|
+
return 0;
|
|
179
|
+
if (WIRELESS_KEYWORDS.some(k => lower.includes(k)))
|
|
180
|
+
return 1;
|
|
181
|
+
return 2;
|
|
182
|
+
};
|
|
183
|
+
const ra = rank(a.name);
|
|
184
|
+
const rb = rank(b.name);
|
|
185
|
+
if (ra !== rb)
|
|
186
|
+
return ra - rb;
|
|
187
|
+
// 同级按名称自然排序
|
|
188
|
+
return a.name.localeCompare(b.name, undefined, { numeric: true });
|
|
189
|
+
});
|
|
190
|
+
return unique.map(item => item.address);
|
|
191
|
+
// 兜底启发式:如果名字不明显,但常见物理命名模式且 IP 为私网,接受
|
|
192
|
+
function shouldAcceptByHeuristic(name, ip) {
|
|
193
|
+
name.toLowerCase();
|
|
194
|
+
// macOS: en0/en1
|
|
195
|
+
if (/^en\d+$/i.test(name))
|
|
196
|
+
return true;
|
|
197
|
+
// Linux: enpXsY / enoX / wlpXsY
|
|
198
|
+
if (/^(enp|eno|wlp)\w+$/i.test(name))
|
|
199
|
+
return true;
|
|
200
|
+
// Windows: 以太网 / Wi-Fi(非虚拟已过滤)
|
|
201
|
+
if (/(以太网|本地连接|wi-?fi|无线)/.test(name))
|
|
202
|
+
return true;
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
function dedupe(arr) {
|
|
206
|
+
const seen = new Set();
|
|
207
|
+
const out = [];
|
|
208
|
+
for (const item of arr) {
|
|
209
|
+
const key = `${item.name}|${item.address}`;
|
|
210
|
+
if (!seen.has(key)) {
|
|
211
|
+
seen.add(key);
|
|
212
|
+
out.push(item);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return out;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
async function init() {
|
|
220
|
+
const promptModule = inquirer.createPromptModule();
|
|
221
|
+
const { clientKey: lastUsedClientKey } = getTTMinisRC() || {};
|
|
222
|
+
if (lastUsedClientKey) {
|
|
223
|
+
const { selectedClientKey } = await promptModule([
|
|
224
|
+
{
|
|
225
|
+
type: 'list',
|
|
226
|
+
name: 'selectedClientKey',
|
|
227
|
+
message: 'Select game client key for debugging:',
|
|
228
|
+
choices: [
|
|
229
|
+
{
|
|
230
|
+
name: `${lastUsedClientKey} (last used)`,
|
|
231
|
+
value: lastUsedClientKey,
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
name: 'Add a new client key',
|
|
235
|
+
value: 'new',
|
|
236
|
+
},
|
|
237
|
+
],
|
|
238
|
+
},
|
|
239
|
+
]);
|
|
240
|
+
if (selectedClientKey === 'new') {
|
|
241
|
+
/**
|
|
242
|
+
* 输入新的 clientKey
|
|
243
|
+
*/
|
|
244
|
+
const { clientKey } = await promptModule([
|
|
245
|
+
{
|
|
246
|
+
type: 'input',
|
|
247
|
+
name: 'clientKey',
|
|
248
|
+
message: 'Input new client key:',
|
|
249
|
+
validate: input => {
|
|
250
|
+
if (!input) {
|
|
251
|
+
return 'Client key is required, please input client key';
|
|
252
|
+
}
|
|
253
|
+
return true;
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
]);
|
|
257
|
+
setTTMinisRC({
|
|
258
|
+
clientKey,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
// 并将 selectedClientKey 放到最前面
|
|
263
|
+
setTTMinisRC({
|
|
264
|
+
clientKey: selectedClientKey,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
// 没有历史 clientKey,直接输入新的 clientKey
|
|
270
|
+
const { clientKey } = await promptModule([
|
|
271
|
+
{
|
|
272
|
+
type: 'input',
|
|
273
|
+
name: 'clientKey',
|
|
274
|
+
message: 'Input your Client Key:',
|
|
275
|
+
validate: input => {
|
|
276
|
+
if (!input) {
|
|
277
|
+
return 'Client key is required, please input client key';
|
|
278
|
+
}
|
|
279
|
+
return true;
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
]);
|
|
283
|
+
setTTMinisRC({
|
|
284
|
+
clientKey,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
const HTTP_PORT = 3000;
|
|
290
|
+
const WEBSOCKET_PORT = 4004;
|
|
291
|
+
|
|
292
|
+
class WebSocketServer {
|
|
293
|
+
constructor() {
|
|
294
|
+
this.ws = null;
|
|
295
|
+
}
|
|
296
|
+
init() {
|
|
297
|
+
this.ws = new WebSocket.Server({ port: WEBSOCKET_PORT });
|
|
298
|
+
this.ws.on('connection', ws => {
|
|
299
|
+
ws.on('message', message => {
|
|
300
|
+
console.log('ws message', message);
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
const wsServer = new WebSocketServer();
|
|
306
|
+
|
|
307
|
+
async function start() {
|
|
308
|
+
const { clientKey } = getTTMinisRC() || {};
|
|
309
|
+
const staicPath = path.join(__dirname, 'public');
|
|
310
|
+
/**
|
|
311
|
+
* 启动调试服务
|
|
312
|
+
*/
|
|
313
|
+
const app = express();
|
|
314
|
+
/**
|
|
315
|
+
* playground/dist 作为静态资源目录
|
|
316
|
+
*/
|
|
317
|
+
app.use(express.static(staicPath));
|
|
318
|
+
app.use((req, res, next) => {
|
|
319
|
+
res.header('Access-Control-Allow-Origin', '*');
|
|
320
|
+
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
|
|
321
|
+
res.header('Cache-Control', 'no-cache, no-store, must-revalidate');
|
|
322
|
+
res.header('Pragma', 'no-cache');
|
|
323
|
+
res.header('Expires', '0');
|
|
324
|
+
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
|
|
325
|
+
next();
|
|
326
|
+
});
|
|
327
|
+
/**
|
|
328
|
+
* 获取当前环境变量
|
|
329
|
+
*/
|
|
330
|
+
app.get('/api/env', (req, res) => {
|
|
331
|
+
res.json({
|
|
332
|
+
clientKey,
|
|
333
|
+
httpPort: HTTP_PORT,
|
|
334
|
+
wsPort: WEBSOCKET_PORT,
|
|
335
|
+
schema: `https://www.tiktok.com/ttms/dev/${clientKey}?host_list=${encodeURIComponent(JSON.stringify(getLocalIPs()))}&port=${WEBSOCKET_PORT}`,
|
|
336
|
+
});
|
|
337
|
+
});
|
|
338
|
+
app.get('*', (req, res) => {
|
|
339
|
+
res.sendFile(path.join(staicPath, `index.html`));
|
|
340
|
+
});
|
|
341
|
+
/**
|
|
342
|
+
* 启动调试服务
|
|
343
|
+
*/
|
|
344
|
+
app.listen(HTTP_PORT, () => {
|
|
345
|
+
wsServer.init();
|
|
346
|
+
console.log(`Server is running on port ${HTTP_PORT}`);
|
|
347
|
+
});
|
|
348
|
+
/**
|
|
349
|
+
* 打开浏览器访问 http://localhost:3000
|
|
350
|
+
*/
|
|
351
|
+
await openUrl(`http://localhost:${HTTP_PORT}`);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* 开发环境下的命令行工具 dev 指令
|
|
356
|
+
*/
|
|
357
|
+
/**
|
|
358
|
+
* 1. 第一步:让开发者填写或者选择历史存在的 clientKey 开始调试
|
|
359
|
+
*/
|
|
360
|
+
async function dev() {
|
|
361
|
+
await init();
|
|
362
|
+
start();
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
const program = new commander.Command();
|
|
366
|
+
program
|
|
367
|
+
.name('ttms')
|
|
368
|
+
.description('TTMinis Command Line Interface')
|
|
369
|
+
.option('--version', 'Output the version number')
|
|
370
|
+
.option('--help', 'Display help for command')
|
|
371
|
+
.option('login', 'Login to TTMinis')
|
|
372
|
+
.option('dev', 'Start the development server');
|
|
373
|
+
program.command('dev').description('Start the development server').action(dev);
|
|
374
|
+
program.parse(process.argv);
|
|
375
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/openUrl.ts","../src/utils/ttminisrc.ts","../src/utils/getLocalIPs.ts","../src/commands/dev/init.ts","../src/commands/dev/config.ts","../src/commands/dev/ws.ts","../src/commands/dev/start.ts","../src/commands/dev/index.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["path","os","Command"],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ttminis",
|
|
3
|
+
"version": "0.0.1-beta.1",
|
|
4
|
+
"description": "TikTok Minis Command Line Tool",
|
|
5
|
+
"license": "ISC",
|
|
6
|
+
"bin": {
|
|
7
|
+
"ttms": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"prepublish": "npm run build",
|
|
14
|
+
"build": "rollup -c"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"TikTok",
|
|
18
|
+
"Minis"
|
|
19
|
+
],
|
|
20
|
+
"author": "zhanghongyang.mocha",
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"acorn": "^8.15.0",
|
|
23
|
+
"archiver": "^7.0.1",
|
|
24
|
+
"axios": "^1.11.0",
|
|
25
|
+
"boxen": "^6.2.1",
|
|
26
|
+
"chalk": "^4.1.2",
|
|
27
|
+
"cheerio": "^1.1.1",
|
|
28
|
+
"chokidar": "^4.0.3",
|
|
29
|
+
"chrome-launcher": "^1.2.0",
|
|
30
|
+
"chrome-remote-interface": "^0.33.3",
|
|
31
|
+
"commander": "^11.1.0",
|
|
32
|
+
"esbuild": "^0.25.9",
|
|
33
|
+
"estraverse": "^5.3.0",
|
|
34
|
+
"express": "4.18.2",
|
|
35
|
+
"express-fileupload": "1.5.2",
|
|
36
|
+
"express-static-gzip": "^3.0.0",
|
|
37
|
+
"form-data": "^4.0.4",
|
|
38
|
+
"glob": "^11.0.3",
|
|
39
|
+
"got": "^11.8.5",
|
|
40
|
+
"handlebars": "4.7.8",
|
|
41
|
+
"inquirer": "^12.7.0",
|
|
42
|
+
"jsdom": "^26.1.0",
|
|
43
|
+
"mime-types": "^3.0.1",
|
|
44
|
+
"multer": "^2.0.2",
|
|
45
|
+
"open": "^10.2.0",
|
|
46
|
+
"ora": "^9.0.0",
|
|
47
|
+
"p-limit": "5.0.0",
|
|
48
|
+
"prettier": "^3.6.2",
|
|
49
|
+
"qs": "6.12.1",
|
|
50
|
+
"semver": "^7.7.2",
|
|
51
|
+
"ttmg-pack": "0.3.1",
|
|
52
|
+
"ws": "^8.18.3"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@babel/core": "^7.28.3",
|
|
56
|
+
"@babel/preset-env": "^7.28.3",
|
|
57
|
+
"@rollup/plugin-alias": "^5.1.1",
|
|
58
|
+
"@rollup/plugin-babel": "^6.0.4",
|
|
59
|
+
"@rollup/plugin-commonjs": "^28.0.6",
|
|
60
|
+
"@rollup/plugin-json": "^6.1.0",
|
|
61
|
+
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
62
|
+
"@rollup/plugin-replace": "^6.0.2",
|
|
63
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
64
|
+
"@rollup/plugin-typescript": "^12.1.4",
|
|
65
|
+
"@types/node": "^24.2.0",
|
|
66
|
+
"compression": "^1.8.1",
|
|
67
|
+
"eslint": "^9.31.0",
|
|
68
|
+
"rollup": "^4.46.4",
|
|
69
|
+
"rollup-plugin-copy": "3.5.0",
|
|
70
|
+
"rollup-plugin-visualizer": "^6.0.3",
|
|
71
|
+
"ts-node": "^10.9.2",
|
|
72
|
+
"tsconfig-paths": "^4.2.0",
|
|
73
|
+
"typescript": "^5.9.2"
|
|
74
|
+
},
|
|
75
|
+
"engines": {
|
|
76
|
+
"node": ">=20.19.1 <21 || >=22"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:#ffffffde;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#242424;font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;font-weight:400;line-height:1.5}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}a{color:#646cff;-webkit-text-decoration:inherit;text-decoration:inherit;font-weight:500}a:hover{color:#535bf2}body{place-items:center;min-width:320px;min-height:100vh;margin:0;display:flex}h1{font-size:3.2em;line-height:1.1}button{cursor:pointer;background-color:#1a1a1a;border:1px solid #0000;border-radius:8px;padding:.6em 1.2em;font-family:inherit;font-size:1em;font-weight:500;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme:light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}
|