feat:重构代码
This commit is contained in:
3
js_node/all.json
Normal file
3
js_node/all.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{"word":"tow","phonetic0":"/ təʊ /","phonetic1":"/ toʊ /","trans":[{"pos":"v.","cn":"拖,牵引(车、船等);(人)牵引,拖带(某人,某物)"},{"pos":"n.","cn":"(对车船等的)牵引,拖;牵引绳,拖链"},{"pos":"","cn":"【名】 (Tow)道(人名)"}],"sentences":[{"v":"They threatened to tow away my car.","tran":"他们威胁说要拖走我的车。"},{"v":"He had been using the vehicle to tow his work trailer..","tran":"他一直用那辆车来拖他的活动工作室。"},{"v":"The car broke down and we had to get somebody to give us a tow.","tran":"汽车抛锚了,我们只得让人拖走。"}],"phrases":[{"v":"in tow","tran":"拖着;在一起"},{"v":"tow truck","tran":"n. 拖车;牵引车"},{"v":"on tow","tran":"(车辆等)被拖(带)着"}],"synos":[{"pos":"n.","tran":"拖;[纺]麻的粗纤维;拖曳所用之绳","ws":["pull","drag"]},{"pos":"vt.","tran":"拖;牵引;曳","ws":["pull","trail"]}],"relWords":[],"memory":""},
|
||||
{"word":"toward","phonetic0":"/ təˈwɔːd /","phonetic1":"/ tɔːrd /","trans":[{"pos":"prep.","cn":"向;趋向;对于;接近(时间);靠近;用于,为了(同towards)"},{"pos":"adj.","cn":"即将来到的,进行中的"},{"pos":"n.","cn":"(Toward)(美、加、沙特)特沃德"}],"sentences":[{"v":"She turned back toward home.","tran":"她折了回来往家走去。"},{"v":"I took a step toward him.","tran":"我朝他迈出了一步。"},{"v":"He headed downhill toward the river.","tran":"他朝山脚下的小河走去。"}],"phrases":[{"v":"go toward","tran":"朝...方向走去"},{"v":"make toward","tran":"向…延伸;向…前进"}],"synos":[{"pos":"prep.","tran":"向;对于;为了;接近","ws":["unto","upon","out"]},{"pos":"adj.","tran":"即将来到的,进行中的","ws":["going","underway"]}],"relWords":[],"memory":""},
|
||||
{"word":"take","phonetic0":"/ teɪk /","phonetic1":"/ teɪk /","trans":[{"pos":"v.","cn":"携带,拿走;带去,引领;使达到,提升;拿,取;移走,拿开;偷走,误拿;取材于,收集;攻占,控制;选中,买下;订阅(报纸等);吃,服用;减去;记录,摘录;照相,摄影;量取,测定;就(座);以…...为例;接受,收取;接纳,接待(顾客、患者等);遭受,经受;忍受,容忍;(以某种方式)对待,处理;理解,考虑;误以为;赢得(比赛、竞赛等);产生(感情),持有(看法);采取(措施),采用(方法);做,拥有;采用(形式),就任(职位);花费,占用(时间); 需要,要求;使用;穿(特定尺码的鞋或衣物);容纳;授课;学习,选修(课程);参加(考试或测验);走(路线),乘坐(交通工具);跨过,跳过;踢,掷;举行投票,进行民意调查;成功,奏效;(语法)需带有(某种结构)"},{"pos":"n.","cn":"(一次拍摄的)镜头,场景;收入量;看法,态度;(印刷)一次排版量"}],"sentences":[{"v":"I'll take my coat upstairs. Shall I take yours, Roberta?","tran":"我将把我的外套拿到楼上去。要我把你的拿上去吗,罗伯塔?"},{"v":"She can't take criticism.","tran":"她受不了批评。"},{"v":"We take the 'Express'.","tran":"我们订阅的是《快报》。"}],"phrases":[{"v":"take some","tran":"不大容易"},{"v":"take care of oneself","tran":"照顾自己;颐养"},{"v":"take part","tran":"参与, 参加"}],"synos":[{"pos":"vt.","tran":"拿,取;采取;吃;接受","ws":["carry","adopt","have","eat","assume"]},{"pos":"vi.","tran":"拿;获得","ws":["pick up","get access to"]}],"relWords":[],"memory":""},
|
||||
156
js_node/crawl.js
Normal file
156
js_node/crawl.js
Normal file
@@ -0,0 +1,156 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { chromium } = require('playwright');
|
||||
|
||||
const SOURCE_DIR = path.join(__dirname, 'source');
|
||||
const RESULT_DIR = path.join(__dirname, 'result');
|
||||
const TOTAL_RESULT_FILE = path.join(__dirname, 'all.json');
|
||||
|
||||
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
||||
const MAX_COUNT = 3; // ✅ 设定最大爬取数(调试用)
|
||||
|
||||
let crawlCount = 0;
|
||||
const allResults = [];
|
||||
|
||||
// 创建 result 目录(如无)
|
||||
if (!fs.existsSync(RESULT_DIR)) {
|
||||
fs.mkdirSync(RESULT_DIR);
|
||||
}
|
||||
|
||||
// 追加写入总文件
|
||||
function appendToAll(result) {
|
||||
fs.appendFileSync(TOTAL_RESULT_FILE, JSON.stringify(result) + ',\n', 'utf-8');
|
||||
}
|
||||
|
||||
async function crawlWord(word, page, retry = 0) {
|
||||
const data = {
|
||||
word: word,
|
||||
phonetic0: '',
|
||||
phonetic1: '',
|
||||
trans: [],
|
||||
sentences: [],
|
||||
phrases: [],
|
||||
synos: [],
|
||||
relWords: [],
|
||||
memory: '',
|
||||
};
|
||||
|
||||
const url = `https://www.youdao.com/result?word=${encodeURIComponent(word)}&lang=en`;
|
||||
|
||||
try {
|
||||
await page.goto(url, { waitUntil: 'networkidle', timeout: 15000 });
|
||||
|
||||
// word
|
||||
const titleEl = await page.locator('.title').first();
|
||||
data.word = await titleEl.evaluate(el => el.firstChild?.nodeValue || '');
|
||||
|
||||
// phonetic
|
||||
const phones = await page.$$('.per-phone .phonetic');
|
||||
if (phones[0]) data.phonetic0 = (await phones[0].textContent())?.trim() || '';
|
||||
if (phones[1]) data.phonetic1 = (await phones[1].textContent())?.trim() || '';
|
||||
|
||||
// trans
|
||||
const trans = await page.$$('.basic .word-exp');
|
||||
for (const el of trans) {
|
||||
const pos = await el.$('.pos');
|
||||
const tran = await el.$('.trans');
|
||||
data.trans.push({
|
||||
pos: pos ? (await pos.textContent())?.trim() : '',
|
||||
cn: tran ? (await tran.textContent())?.trim() : '',
|
||||
});
|
||||
}
|
||||
|
||||
// sentences
|
||||
const sentList = await page.$$('.blng_sents_part .trans-container ul li .col2');
|
||||
for (const el of sentList) {
|
||||
const en = await el.$('.sen-eng');
|
||||
const ch = await el.$('.sen-ch');
|
||||
data.sentences.push({
|
||||
v: en ? (await en.textContent())?.trim() : '',
|
||||
tran: ch ? (await ch.textContent())?.trim() : '',
|
||||
});
|
||||
}
|
||||
|
||||
// phrases
|
||||
const phrs = await page.$$('.phrs ul li .phrs-content');
|
||||
for (const el of phrs) {
|
||||
const point = await el.$('.point');
|
||||
const tran = await el.$('.phr_trans');
|
||||
data.phrases.push({
|
||||
v: point ? (await point.textContent())?.trim() : '',
|
||||
tran: tran ? (await tran.textContent())?.trim() : '',
|
||||
});
|
||||
}
|
||||
|
||||
// 同义词(optional)
|
||||
try {
|
||||
await page.getByText('同近义词', { timeout: 2000 }).click();
|
||||
await page.waitForSelector('.syno', { timeout: 3000 });
|
||||
const synos = await page.$$('.syno-item');
|
||||
for (const el of synos) {
|
||||
const pos = await el.$('.index');
|
||||
const tran = await el.$('.synptran');
|
||||
const wordEl = await el.$('.clickable');
|
||||
let str = wordEl ? (await wordEl.textContent())?.trim() : '';
|
||||
data.synos.push({
|
||||
pos: pos ? (await pos.textContent())?.trim() : '',
|
||||
tran: tran ? (await tran.textContent())?.trim() : '',
|
||||
ws: str.split('/').map(s => s.trim()).filter(Boolean),
|
||||
});
|
||||
}
|
||||
} catch {}
|
||||
|
||||
return data;
|
||||
} catch (err) {
|
||||
if (retry < 2) {
|
||||
console.log(`🔁 ${word} 抓取失败,重试中...`);
|
||||
await sleep(1000);
|
||||
return crawlWord(word, page, retry + 1);
|
||||
} else {
|
||||
console.log(`❌ ${word} 抓取失败,跳过。`);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
(async () => {
|
||||
const files = fs.readdirSync(SOURCE_DIR).filter(f => f.endsWith('.json'));
|
||||
const browser = await chromium.launch({ headless: true });
|
||||
const page = await browser.newPage();
|
||||
|
||||
for (const file of files) {
|
||||
const filePath = path.join(SOURCE_DIR, file);
|
||||
const raw = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
||||
const wordList = raw.map(obj => obj.word).filter(Boolean);
|
||||
|
||||
const resultForThisFile = [];
|
||||
|
||||
console.log(`📂 处理文件:${file},共 ${wordList.length} 个单词`);
|
||||
|
||||
for (const word of wordList) {
|
||||
if (crawlCount >= MAX_COUNT) {
|
||||
console.log(`🚫 达到调试上限 ${MAX_COUNT},终止爬取`);
|
||||
await browser.close();
|
||||
return;
|
||||
}
|
||||
|
||||
const result = await crawlWord(word, page);
|
||||
if (result) {
|
||||
crawlCount++;
|
||||
appendToAll(result);
|
||||
resultForThisFile.push(result);
|
||||
}
|
||||
|
||||
await sleep(500);
|
||||
}
|
||||
|
||||
const outputName = path.basename(file, '.json') + '_v2.json';
|
||||
const outputPath = path.join(RESULT_DIR, outputName);
|
||||
fs.writeFileSync(outputPath, JSON.stringify(resultForThisFile, null, 2), 'utf-8');
|
||||
|
||||
console.log(`✅ 已保存:${outputName}`);
|
||||
}
|
||||
|
||||
await browser.close();
|
||||
console.log('\n🎉 所有任务完成!');
|
||||
})();
|
||||
@@ -10,6 +10,7 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"jquery": "^3.7.1",
|
||||
"jsdom": "^23.0.1"
|
||||
"jsdom": "^23.0.1",
|
||||
"playwright": "^1.54.1"
|
||||
}
|
||||
}
|
||||
|
||||
678
js_node/pnpm-lock.yaml
generated
678
js_node/pnpm-lock.yaml
generated
@@ -1,292 +1,304 @@
|
||||
lockfileVersion: '6.0'
|
||||
lockfileVersion: '9.0'
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
dependencies:
|
||||
jquery:
|
||||
specifier: ^3.7.1
|
||||
version: 3.7.1
|
||||
jsdom:
|
||||
specifier: ^23.0.1
|
||||
version: 23.0.1
|
||||
importers:
|
||||
|
||||
.:
|
||||
dependencies:
|
||||
jquery:
|
||||
specifier: ^3.7.1
|
||||
version: 3.7.1
|
||||
jsdom:
|
||||
specifier: ^23.0.1
|
||||
version: 23.2.0
|
||||
playwright:
|
||||
specifier: ^1.54.1
|
||||
version: 1.54.1
|
||||
|
||||
packages:
|
||||
|
||||
/agent-base@7.1.0:
|
||||
resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==}
|
||||
'@asamuzakjp/css-color@3.2.0':
|
||||
resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==}
|
||||
|
||||
'@asamuzakjp/dom-selector@2.0.2':
|
||||
resolution: {integrity: sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ==}
|
||||
|
||||
'@csstools/color-helpers@5.0.2':
|
||||
resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
'@csstools/css-calc@2.1.4':
|
||||
resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
'@csstools/css-parser-algorithms': ^3.0.5
|
||||
'@csstools/css-tokenizer': ^3.0.4
|
||||
|
||||
'@csstools/css-color-parser@3.0.10':
|
||||
resolution: {integrity: sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
'@csstools/css-parser-algorithms': ^3.0.5
|
||||
'@csstools/css-tokenizer': ^3.0.4
|
||||
|
||||
'@csstools/css-parser-algorithms@3.0.5':
|
||||
resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
'@csstools/css-tokenizer': ^3.0.4
|
||||
|
||||
'@csstools/css-tokenizer@3.0.4':
|
||||
resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
agent-base@7.1.4:
|
||||
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
|
||||
engines: {node: '>= 14'}
|
||||
dependencies:
|
||||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/asynckit@0.4.0:
|
||||
asynckit@0.4.0:
|
||||
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
|
||||
dev: false
|
||||
|
||||
/combined-stream@1.0.8:
|
||||
bidi-js@1.0.3:
|
||||
resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==}
|
||||
|
||||
call-bind-apply-helpers@1.0.2:
|
||||
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
combined-stream@1.0.8:
|
||||
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
|
||||
engines: {node: '>= 0.8'}
|
||||
dependencies:
|
||||
delayed-stream: 1.0.0
|
||||
dev: false
|
||||
|
||||
/cssstyle@3.0.0:
|
||||
resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
rrweb-cssom: 0.6.0
|
||||
dev: false
|
||||
css-tree@2.3.1:
|
||||
resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
|
||||
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
|
||||
|
||||
/data-urls@5.0.0:
|
||||
cssstyle@4.6.0:
|
||||
resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
data-urls@5.0.0:
|
||||
resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
|
||||
engines: {node: '>=18'}
|
||||
dependencies:
|
||||
whatwg-mimetype: 4.0.0
|
||||
whatwg-url: 14.0.0
|
||||
dev: false
|
||||
|
||||
/debug@4.3.4:
|
||||
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
|
||||
debug@4.4.1:
|
||||
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
|
||||
engines: {node: '>=6.0'}
|
||||
peerDependencies:
|
||||
supports-color: '*'
|
||||
peerDependenciesMeta:
|
||||
supports-color:
|
||||
optional: true
|
||||
dependencies:
|
||||
ms: 2.1.2
|
||||
dev: false
|
||||
|
||||
/decimal.js@10.4.3:
|
||||
resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
|
||||
dev: false
|
||||
decimal.js@10.6.0:
|
||||
resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
|
||||
|
||||
/delayed-stream@1.0.0:
|
||||
delayed-stream@1.0.0:
|
||||
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
dev: false
|
||||
|
||||
/entities@4.5.0:
|
||||
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
|
||||
dunder-proto@1.0.1:
|
||||
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
entities@6.0.1:
|
||||
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
|
||||
engines: {node: '>=0.12'}
|
||||
dev: false
|
||||
|
||||
/form-data@4.0.0:
|
||||
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
|
||||
es-define-property@1.0.1:
|
||||
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
es-errors@1.3.0:
|
||||
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
es-object-atoms@1.1.1:
|
||||
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
es-set-tostringtag@2.1.0:
|
||||
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
form-data@4.0.3:
|
||||
resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==}
|
||||
engines: {node: '>= 6'}
|
||||
dependencies:
|
||||
asynckit: 0.4.0
|
||||
combined-stream: 1.0.8
|
||||
mime-types: 2.1.35
|
||||
dev: false
|
||||
|
||||
/html-encoding-sniffer@4.0.0:
|
||||
fsevents@2.3.2:
|
||||
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
|
||||
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||
os: [darwin]
|
||||
|
||||
function-bind@1.1.2:
|
||||
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
|
||||
|
||||
get-intrinsic@1.3.0:
|
||||
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
get-proto@1.0.1:
|
||||
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
gopd@1.2.0:
|
||||
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
has-symbols@1.1.0:
|
||||
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
has-tostringtag@1.0.2:
|
||||
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
hasown@2.0.2:
|
||||
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
html-encoding-sniffer@4.0.0:
|
||||
resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
|
||||
engines: {node: '>=18'}
|
||||
dependencies:
|
||||
whatwg-encoding: 3.1.1
|
||||
dev: false
|
||||
|
||||
/http-proxy-agent@7.0.0:
|
||||
resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==}
|
||||
http-proxy-agent@7.0.2:
|
||||
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
|
||||
engines: {node: '>= 14'}
|
||||
dependencies:
|
||||
agent-base: 7.1.0
|
||||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/https-proxy-agent@7.0.2:
|
||||
resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==}
|
||||
https-proxy-agent@7.0.6:
|
||||
resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
|
||||
engines: {node: '>= 14'}
|
||||
dependencies:
|
||||
agent-base: 7.1.0
|
||||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/iconv-lite@0.6.3:
|
||||
iconv-lite@0.6.3:
|
||||
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
safer-buffer: 2.1.2
|
||||
dev: false
|
||||
|
||||
/is-potential-custom-element-name@1.0.1:
|
||||
is-potential-custom-element-name@1.0.1:
|
||||
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
|
||||
dev: false
|
||||
|
||||
/jquery@3.7.1:
|
||||
jquery@3.7.1:
|
||||
resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==}
|
||||
dev: false
|
||||
|
||||
/jsdom@23.0.1:
|
||||
resolution: {integrity: sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==}
|
||||
jsdom@23.2.0:
|
||||
resolution: {integrity: sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
canvas: ^2.11.2
|
||||
peerDependenciesMeta:
|
||||
canvas:
|
||||
optional: true
|
||||
dependencies:
|
||||
cssstyle: 3.0.0
|
||||
data-urls: 5.0.0
|
||||
decimal.js: 10.4.3
|
||||
form-data: 4.0.0
|
||||
html-encoding-sniffer: 4.0.0
|
||||
http-proxy-agent: 7.0.0
|
||||
https-proxy-agent: 7.0.2
|
||||
is-potential-custom-element-name: 1.0.1
|
||||
nwsapi: 2.2.7
|
||||
parse5: 7.1.2
|
||||
rrweb-cssom: 0.6.0
|
||||
saxes: 6.0.0
|
||||
symbol-tree: 3.2.4
|
||||
tough-cookie: 4.1.3
|
||||
w3c-xmlserializer: 5.0.0
|
||||
webidl-conversions: 7.0.0
|
||||
whatwg-encoding: 3.1.1
|
||||
whatwg-mimetype: 4.0.0
|
||||
whatwg-url: 14.0.0
|
||||
ws: 8.15.0
|
||||
xml-name-validator: 5.0.0
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- supports-color
|
||||
- utf-8-validate
|
||||
dev: false
|
||||
|
||||
/mime-db@1.52.0:
|
||||
lru-cache@10.4.3:
|
||||
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
|
||||
|
||||
math-intrinsics@1.1.0:
|
||||
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
mdn-data@2.0.30:
|
||||
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
|
||||
|
||||
mime-db@1.52.0:
|
||||
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
|
||||
engines: {node: '>= 0.6'}
|
||||
dev: false
|
||||
|
||||
/mime-types@2.1.35:
|
||||
mime-types@2.1.35:
|
||||
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
|
||||
engines: {node: '>= 0.6'}
|
||||
dependencies:
|
||||
mime-db: 1.52.0
|
||||
dev: false
|
||||
|
||||
/ms@2.1.2:
|
||||
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
|
||||
dev: false
|
||||
ms@2.1.3:
|
||||
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
|
||||
|
||||
/nwsapi@2.2.7:
|
||||
resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==}
|
||||
dev: false
|
||||
parse5@7.3.0:
|
||||
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
|
||||
|
||||
/parse5@7.1.2:
|
||||
resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
|
||||
dependencies:
|
||||
entities: 4.5.0
|
||||
dev: false
|
||||
playwright-core@1.54.1:
|
||||
resolution: {integrity: sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==}
|
||||
engines: {node: '>=18'}
|
||||
hasBin: true
|
||||
|
||||
/psl@1.9.0:
|
||||
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
|
||||
dev: false
|
||||
playwright@1.54.1:
|
||||
resolution: {integrity: sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g==}
|
||||
engines: {node: '>=18'}
|
||||
hasBin: true
|
||||
|
||||
/punycode@2.3.1:
|
||||
psl@1.15.0:
|
||||
resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==}
|
||||
|
||||
punycode@2.3.1:
|
||||
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
|
||||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
|
||||
/querystringify@2.2.0:
|
||||
querystringify@2.2.0:
|
||||
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
|
||||
dev: false
|
||||
|
||||
/requires-port@1.0.0:
|
||||
require-from-string@2.0.2:
|
||||
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
requires-port@1.0.0:
|
||||
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
|
||||
dev: false
|
||||
|
||||
/rrweb-cssom@0.6.0:
|
||||
rrweb-cssom@0.6.0:
|
||||
resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==}
|
||||
dev: false
|
||||
|
||||
/safer-buffer@2.1.2:
|
||||
rrweb-cssom@0.8.0:
|
||||
resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
|
||||
|
||||
safer-buffer@2.1.2:
|
||||
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
||||
dev: false
|
||||
|
||||
/saxes@6.0.0:
|
||||
saxes@6.0.0:
|
||||
resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
|
||||
engines: {node: '>=v12.22.7'}
|
||||
dependencies:
|
||||
xmlchars: 2.2.0
|
||||
dev: false
|
||||
|
||||
/symbol-tree@3.2.4:
|
||||
source-map-js@1.2.1:
|
||||
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
symbol-tree@3.2.4:
|
||||
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
|
||||
dev: false
|
||||
|
||||
/tough-cookie@4.1.3:
|
||||
resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==}
|
||||
tough-cookie@4.1.4:
|
||||
resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==}
|
||||
engines: {node: '>=6'}
|
||||
dependencies:
|
||||
psl: 1.9.0
|
||||
punycode: 2.3.1
|
||||
universalify: 0.2.0
|
||||
url-parse: 1.5.10
|
||||
dev: false
|
||||
|
||||
/tr46@5.0.0:
|
||||
resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==}
|
||||
tr46@5.1.1:
|
||||
resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
|
||||
engines: {node: '>=18'}
|
||||
dependencies:
|
||||
punycode: 2.3.1
|
||||
dev: false
|
||||
|
||||
/universalify@0.2.0:
|
||||
universalify@0.2.0:
|
||||
resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
|
||||
engines: {node: '>= 4.0.0'}
|
||||
dev: false
|
||||
|
||||
/url-parse@1.5.10:
|
||||
url-parse@1.5.10:
|
||||
resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
|
||||
dependencies:
|
||||
querystringify: 2.2.0
|
||||
requires-port: 1.0.0
|
||||
dev: false
|
||||
|
||||
/w3c-xmlserializer@5.0.0:
|
||||
w3c-xmlserializer@5.0.0:
|
||||
resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
|
||||
engines: {node: '>=18'}
|
||||
dependencies:
|
||||
xml-name-validator: 5.0.0
|
||||
dev: false
|
||||
|
||||
/webidl-conversions@7.0.0:
|
||||
webidl-conversions@7.0.0:
|
||||
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
|
||||
engines: {node: '>=12'}
|
||||
dev: false
|
||||
|
||||
/whatwg-encoding@3.1.1:
|
||||
whatwg-encoding@3.1.1:
|
||||
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
|
||||
engines: {node: '>=18'}
|
||||
dependencies:
|
||||
iconv-lite: 0.6.3
|
||||
dev: false
|
||||
|
||||
/whatwg-mimetype@4.0.0:
|
||||
whatwg-mimetype@4.0.0:
|
||||
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
|
||||
engines: {node: '>=18'}
|
||||
dev: false
|
||||
|
||||
/whatwg-url@14.0.0:
|
||||
resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==}
|
||||
whatwg-url@14.2.0:
|
||||
resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
|
||||
engines: {node: '>=18'}
|
||||
dependencies:
|
||||
tr46: 5.0.0
|
||||
webidl-conversions: 7.0.0
|
||||
dev: false
|
||||
|
||||
/ws@8.15.0:
|
||||
resolution: {integrity: sha512-H/Z3H55mrcrgjFwI+5jKavgXvwQLtfPCUEp6pi35VhoB0pfcHnSoyuTzkBEZpzq49g1193CUEwIvmsjcotenYw==}
|
||||
ws@8.18.3:
|
||||
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
peerDependencies:
|
||||
bufferutil: ^4.0.1
|
||||
@@ -296,13 +308,299 @@ packages:
|
||||
optional: true
|
||||
utf-8-validate:
|
||||
optional: true
|
||||
dev: false
|
||||
|
||||
/xml-name-validator@5.0.0:
|
||||
xml-name-validator@5.0.0:
|
||||
resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
|
||||
engines: {node: '>=18'}
|
||||
dev: false
|
||||
|
||||
/xmlchars@2.2.0:
|
||||
xmlchars@2.2.0:
|
||||
resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
|
||||
dev: false
|
||||
|
||||
snapshots:
|
||||
|
||||
'@asamuzakjp/css-color@3.2.0':
|
||||
dependencies:
|
||||
'@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
|
||||
'@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
|
||||
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
|
||||
'@csstools/css-tokenizer': 3.0.4
|
||||
lru-cache: 10.4.3
|
||||
|
||||
'@asamuzakjp/dom-selector@2.0.2':
|
||||
dependencies:
|
||||
bidi-js: 1.0.3
|
||||
css-tree: 2.3.1
|
||||
is-potential-custom-element-name: 1.0.1
|
||||
|
||||
'@csstools/color-helpers@5.0.2': {}
|
||||
|
||||
'@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
|
||||
dependencies:
|
||||
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
|
||||
'@csstools/css-tokenizer': 3.0.4
|
||||
|
||||
'@csstools/css-color-parser@3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
|
||||
dependencies:
|
||||
'@csstools/color-helpers': 5.0.2
|
||||
'@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
|
||||
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
|
||||
'@csstools/css-tokenizer': 3.0.4
|
||||
|
||||
'@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
|
||||
dependencies:
|
||||
'@csstools/css-tokenizer': 3.0.4
|
||||
|
||||
'@csstools/css-tokenizer@3.0.4': {}
|
||||
|
||||
agent-base@7.1.4: {}
|
||||
|
||||
asynckit@0.4.0: {}
|
||||
|
||||
bidi-js@1.0.3:
|
||||
dependencies:
|
||||
require-from-string: 2.0.2
|
||||
|
||||
call-bind-apply-helpers@1.0.2:
|
||||
dependencies:
|
||||
es-errors: 1.3.0
|
||||
function-bind: 1.1.2
|
||||
|
||||
combined-stream@1.0.8:
|
||||
dependencies:
|
||||
delayed-stream: 1.0.0
|
||||
|
||||
css-tree@2.3.1:
|
||||
dependencies:
|
||||
mdn-data: 2.0.30
|
||||
source-map-js: 1.2.1
|
||||
|
||||
cssstyle@4.6.0:
|
||||
dependencies:
|
||||
'@asamuzakjp/css-color': 3.2.0
|
||||
rrweb-cssom: 0.8.0
|
||||
|
||||
data-urls@5.0.0:
|
||||
dependencies:
|
||||
whatwg-mimetype: 4.0.0
|
||||
whatwg-url: 14.2.0
|
||||
|
||||
debug@4.4.1:
|
||||
dependencies:
|
||||
ms: 2.1.3
|
||||
|
||||
decimal.js@10.6.0: {}
|
||||
|
||||
delayed-stream@1.0.0: {}
|
||||
|
||||
dunder-proto@1.0.1:
|
||||
dependencies:
|
||||
call-bind-apply-helpers: 1.0.2
|
||||
es-errors: 1.3.0
|
||||
gopd: 1.2.0
|
||||
|
||||
entities@6.0.1: {}
|
||||
|
||||
es-define-property@1.0.1: {}
|
||||
|
||||
es-errors@1.3.0: {}
|
||||
|
||||
es-object-atoms@1.1.1:
|
||||
dependencies:
|
||||
es-errors: 1.3.0
|
||||
|
||||
es-set-tostringtag@2.1.0:
|
||||
dependencies:
|
||||
es-errors: 1.3.0
|
||||
get-intrinsic: 1.3.0
|
||||
has-tostringtag: 1.0.2
|
||||
hasown: 2.0.2
|
||||
|
||||
form-data@4.0.3:
|
||||
dependencies:
|
||||
asynckit: 0.4.0
|
||||
combined-stream: 1.0.8
|
||||
es-set-tostringtag: 2.1.0
|
||||
hasown: 2.0.2
|
||||
mime-types: 2.1.35
|
||||
|
||||
fsevents@2.3.2:
|
||||
optional: true
|
||||
|
||||
function-bind@1.1.2: {}
|
||||
|
||||
get-intrinsic@1.3.0:
|
||||
dependencies:
|
||||
call-bind-apply-helpers: 1.0.2
|
||||
es-define-property: 1.0.1
|
||||
es-errors: 1.3.0
|
||||
es-object-atoms: 1.1.1
|
||||
function-bind: 1.1.2
|
||||
get-proto: 1.0.1
|
||||
gopd: 1.2.0
|
||||
has-symbols: 1.1.0
|
||||
hasown: 2.0.2
|
||||
math-intrinsics: 1.1.0
|
||||
|
||||
get-proto@1.0.1:
|
||||
dependencies:
|
||||
dunder-proto: 1.0.1
|
||||
es-object-atoms: 1.1.1
|
||||
|
||||
gopd@1.2.0: {}
|
||||
|
||||
has-symbols@1.1.0: {}
|
||||
|
||||
has-tostringtag@1.0.2:
|
||||
dependencies:
|
||||
has-symbols: 1.1.0
|
||||
|
||||
hasown@2.0.2:
|
||||
dependencies:
|
||||
function-bind: 1.1.2
|
||||
|
||||
html-encoding-sniffer@4.0.0:
|
||||
dependencies:
|
||||
whatwg-encoding: 3.1.1
|
||||
|
||||
http-proxy-agent@7.0.2:
|
||||
dependencies:
|
||||
agent-base: 7.1.4
|
||||
debug: 4.4.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
https-proxy-agent@7.0.6:
|
||||
dependencies:
|
||||
agent-base: 7.1.4
|
||||
debug: 4.4.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
iconv-lite@0.6.3:
|
||||
dependencies:
|
||||
safer-buffer: 2.1.2
|
||||
|
||||
is-potential-custom-element-name@1.0.1: {}
|
||||
|
||||
jquery@3.7.1: {}
|
||||
|
||||
jsdom@23.2.0:
|
||||
dependencies:
|
||||
'@asamuzakjp/dom-selector': 2.0.2
|
||||
cssstyle: 4.6.0
|
||||
data-urls: 5.0.0
|
||||
decimal.js: 10.6.0
|
||||
form-data: 4.0.3
|
||||
html-encoding-sniffer: 4.0.0
|
||||
http-proxy-agent: 7.0.2
|
||||
https-proxy-agent: 7.0.6
|
||||
is-potential-custom-element-name: 1.0.1
|
||||
parse5: 7.3.0
|
||||
rrweb-cssom: 0.6.0
|
||||
saxes: 6.0.0
|
||||
symbol-tree: 3.2.4
|
||||
tough-cookie: 4.1.4
|
||||
w3c-xmlserializer: 5.0.0
|
||||
webidl-conversions: 7.0.0
|
||||
whatwg-encoding: 3.1.1
|
||||
whatwg-mimetype: 4.0.0
|
||||
whatwg-url: 14.2.0
|
||||
ws: 8.18.3
|
||||
xml-name-validator: 5.0.0
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- supports-color
|
||||
- utf-8-validate
|
||||
|
||||
lru-cache@10.4.3: {}
|
||||
|
||||
math-intrinsics@1.1.0: {}
|
||||
|
||||
mdn-data@2.0.30: {}
|
||||
|
||||
mime-db@1.52.0: {}
|
||||
|
||||
mime-types@2.1.35:
|
||||
dependencies:
|
||||
mime-db: 1.52.0
|
||||
|
||||
ms@2.1.3: {}
|
||||
|
||||
parse5@7.3.0:
|
||||
dependencies:
|
||||
entities: 6.0.1
|
||||
|
||||
playwright-core@1.54.1: {}
|
||||
|
||||
playwright@1.54.1:
|
||||
dependencies:
|
||||
playwright-core: 1.54.1
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.2
|
||||
|
||||
psl@1.15.0:
|
||||
dependencies:
|
||||
punycode: 2.3.1
|
||||
|
||||
punycode@2.3.1: {}
|
||||
|
||||
querystringify@2.2.0: {}
|
||||
|
||||
require-from-string@2.0.2: {}
|
||||
|
||||
requires-port@1.0.0: {}
|
||||
|
||||
rrweb-cssom@0.6.0: {}
|
||||
|
||||
rrweb-cssom@0.8.0: {}
|
||||
|
||||
safer-buffer@2.1.2: {}
|
||||
|
||||
saxes@6.0.0:
|
||||
dependencies:
|
||||
xmlchars: 2.2.0
|
||||
|
||||
source-map-js@1.2.1: {}
|
||||
|
||||
symbol-tree@3.2.4: {}
|
||||
|
||||
tough-cookie@4.1.4:
|
||||
dependencies:
|
||||
psl: 1.15.0
|
||||
punycode: 2.3.1
|
||||
universalify: 0.2.0
|
||||
url-parse: 1.5.10
|
||||
|
||||
tr46@5.1.1:
|
||||
dependencies:
|
||||
punycode: 2.3.1
|
||||
|
||||
universalify@0.2.0: {}
|
||||
|
||||
url-parse@1.5.10:
|
||||
dependencies:
|
||||
querystringify: 2.2.0
|
||||
requires-port: 1.0.0
|
||||
|
||||
w3c-xmlserializer@5.0.0:
|
||||
dependencies:
|
||||
xml-name-validator: 5.0.0
|
||||
|
||||
webidl-conversions@7.0.0: {}
|
||||
|
||||
whatwg-encoding@3.1.1:
|
||||
dependencies:
|
||||
iconv-lite: 0.6.3
|
||||
|
||||
whatwg-mimetype@4.0.0: {}
|
||||
|
||||
whatwg-url@14.2.0:
|
||||
dependencies:
|
||||
tr46: 5.1.1
|
||||
webidl-conversions: 7.0.0
|
||||
|
||||
ws@8.18.3: {}
|
||||
|
||||
xml-name-validator@5.0.0: {}
|
||||
|
||||
xmlchars@2.2.0: {}
|
||||
|
||||
107482
js_node/result/2024HongBao_T2_word.json
Normal file
107482
js_node/result/2024HongBao_T2_word.json
Normal file
File diff suppressed because it is too large
Load Diff
136
js_node/results.json
Normal file
136
js_node/results.json
Normal file
@@ -0,0 +1,136 @@
|
||||
[
|
||||
{
|
||||
"word": "expect",
|
||||
"synos": [
|
||||
{
|
||||
"pos": "vt.",
|
||||
"tran": "期望;指望;认为;预料",
|
||||
"ws": [
|
||||
"promise oneself",
|
||||
"guess",
|
||||
"find",
|
||||
"feel",
|
||||
"make"
|
||||
]
|
||||
},
|
||||
{
|
||||
"pos": "vi.",
|
||||
"tran": "期待;预期",
|
||||
"ws": [
|
||||
"look foward to",
|
||||
"to look forward to"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"word": "run",
|
||||
"synos": [
|
||||
{
|
||||
"pos": "vi.",
|
||||
"tran": "经营;奔跑;运转",
|
||||
"ws": [
|
||||
"go",
|
||||
"fare"
|
||||
]
|
||||
},
|
||||
{
|
||||
"pos": "vt.",
|
||||
"tran": "管理,经营;运行;参赛",
|
||||
"ws": [
|
||||
"conduct",
|
||||
"direct",
|
||||
"control",
|
||||
"supervise",
|
||||
"operate"
|
||||
]
|
||||
},
|
||||
{
|
||||
"pos": "n.",
|
||||
"tran": "奔跑;赛跑;趋向;奔跑的路程",
|
||||
"ws": [
|
||||
"footrace",
|
||||
"tendency to sth"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"word": "happy",
|
||||
"synos": [
|
||||
{
|
||||
"pos": "adj.",
|
||||
"tran": "幸福的;高兴的;巧妙的",
|
||||
"ws": [
|
||||
"pleased",
|
||||
"glad",
|
||||
"blessed",
|
||||
"smart"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"word": "blue",
|
||||
"synos": [
|
||||
{
|
||||
"pos": "adj.",
|
||||
"tran": "[光]蓝色的;忧郁的,沮丧的;下流的",
|
||||
"ws": [
|
||||
"dark",
|
||||
"disappointed",
|
||||
"dirty",
|
||||
"depressed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"pos": "n.",
|
||||
"tran": "[光]蓝色",
|
||||
"ws": [
|
||||
"azur",
|
||||
"blau"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"word": "think",
|
||||
"synos": [
|
||||
{
|
||||
"pos": "vt.",
|
||||
"tran": "想;认为;想起;想像;打算",
|
||||
"ws": [
|
||||
"like",
|
||||
"imagine",
|
||||
"expect",
|
||||
"count",
|
||||
"guess"
|
||||
]
|
||||
},
|
||||
{
|
||||
"pos": "vi.",
|
||||
"tran": "想;认为",
|
||||
"ws": [
|
||||
"consider",
|
||||
"ween"
|
||||
]
|
||||
},
|
||||
{
|
||||
"pos": "n.",
|
||||
"tran": "想;想法",
|
||||
"ws": [
|
||||
"idea",
|
||||
"idee"
|
||||
]
|
||||
},
|
||||
{
|
||||
"pos": "adj.",
|
||||
"tran": "思想的",
|
||||
"ws": [
|
||||
"ideological",
|
||||
"ideaistic"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
10762
js_node/source/2024HongBao_T2.json
Normal file
10762
js_node/source/2024HongBao_T2.json
Normal file
File diff suppressed because it is too large
Load Diff
54
js_node/test.cjs
Normal file
54
js_node/test.cjs
Normal file
@@ -0,0 +1,54 @@
|
||||
let path = require("path");
|
||||
let fs = require("fs");
|
||||
const axios = require('axios')
|
||||
|
||||
let str = fs.readFileSync('./save/allNew.min.json', "utf8");
|
||||
let failStr = fs.readFileSync('./fail.txt', "utf8");
|
||||
let source = "./source/";
|
||||
let result = "./result/";
|
||||
|
||||
let allNew = JSON.parse(str)
|
||||
let map = new Map()
|
||||
allNew.forEach(item => {
|
||||
if (item && item.word) {
|
||||
map.set(item.word, item);
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
let failList = JSON.parse(failStr)
|
||||
let list = JSON.parse(str)
|
||||
|
||||
//判断是不是目录
|
||||
const dirs = fs.readdirSync(source)
|
||||
dirs.forEach(dictName => {
|
||||
formatDict(source, dictName)
|
||||
})
|
||||
|
||||
async function sleep(val) {
|
||||
return new Promise(resolve => {
|
||||
setTimeout(resolve, val)
|
||||
})
|
||||
}
|
||||
|
||||
function formatDict(path, name) {
|
||||
try {
|
||||
let newObj = []
|
||||
let str = fs.readFileSync(path + name, "utf8");
|
||||
let list = JSON.parse(str)
|
||||
list.map(v => {
|
||||
if (!v) return
|
||||
let r = map.get(v.word);
|
||||
if (r) {
|
||||
newObj.push(r)
|
||||
}
|
||||
})
|
||||
|
||||
// fs.writeFileSync(result + name.replace('.json', '_word.json'), JSON.stringify(newObj));
|
||||
fs.writeFileSync(result + name.replace('.json', '_word.json'), JSON.stringify(newObj,null, 2));
|
||||
console.log(name, newObj.length)
|
||||
} catch (e) {
|
||||
console.log('err', name, e)
|
||||
}
|
||||
}
|
||||
|
||||
5
js_node/words.txt
Normal file
5
js_node/words.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
expect
|
||||
run
|
||||
happy
|
||||
blue
|
||||
think
|
||||
@@ -3,7 +3,7 @@ const {JSDOM} = require("jsdom");
|
||||
const $ = require("jquery");
|
||||
|
||||
const axios = require('axios')
|
||||
axios('https://dict.youdao.com/result?word=private&lang=en').then(r => {
|
||||
axios('https://dict.youdao.com/result?word=tow&lang=en').then(r => {
|
||||
// console.log('r', r.data)
|
||||
const {window} = new JSDOM(r.data);
|
||||
const $ = require("jquery")(window);
|
||||
@@ -41,7 +41,7 @@ axios('https://dict.youdao.com/result?word=private&lang=en').then(r => {
|
||||
$('.blng_sents_part .trans-container ul li .col2').each(function () {
|
||||
let item = {}
|
||||
item.v = $($(this).children()[0]).find('.sen-eng').text()
|
||||
item.trans = $($(this).children()[1]).find('.sen-ch').text()
|
||||
item.tran = $($(this).children()[1]).find('.sen-ch').text()
|
||||
data.sentences.push(item)
|
||||
})
|
||||
|
||||
@@ -49,28 +49,7 @@ axios('https://dict.youdao.com/result?word=private&lang=en').then(r => {
|
||||
$('.phrs ul li .phrs-content').each(function () {
|
||||
let item = {}
|
||||
item.v = $(this).find('.point').text()
|
||||
item.trans = $(this).find('.phr_trans').text()
|
||||
item.tran = $(this).find('.phr_trans').text()
|
||||
data.phrases.push(item)
|
||||
})
|
||||
|
||||
|
||||
let tabs = $('#catalogue_usage .dict-tabs .tab-item')
|
||||
if (tabs.length && tabs.length > 1) {
|
||||
$(tabs[1]).trigger('click')
|
||||
$(tabs[1]).click()
|
||||
|
||||
setTimeout(() => {
|
||||
//解析同近义词
|
||||
$('.syno ul li .syno-content').each(function () {
|
||||
let item = {}
|
||||
item.v = $(this).find('.synptran').text()
|
||||
item.trans = $(this).find('.clickable').text()
|
||||
data.synos.push(item)
|
||||
})
|
||||
// console.log('data', data)
|
||||
|
||||
console.log($('.syno'))
|
||||
}, 500)
|
||||
}
|
||||
// console.log('data', data)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -286,7 +286,8 @@ const chinaExam = [{
|
||||
translateLanguage: 'common',
|
||||
language: 'en',
|
||||
type: DictType.word,
|
||||
},]
|
||||
},
|
||||
]
|
||||
|
||||
// 青少儿英语
|
||||
const childrenEnglish = [{
|
||||
@@ -784,7 +785,8 @@ const childrenEnglish = [{
|
||||
translateLanguage: 'common',
|
||||
language: 'en',
|
||||
type: DictType.word,
|
||||
},]
|
||||
},
|
||||
]
|
||||
|
||||
const json = [...chinaExam, ...internationalExam, ...childrenEnglish,]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user