Merge branch 'develop' into feat/scylladb

This commit is contained in:
Namekuji 2023-09-20 01:56:34 -04:00
commit 19d7dc8b84
No known key found for this signature in database
GPG key ID: 1D62332C07FBA532
23 changed files with 195 additions and 88 deletions

View file

@ -675,7 +675,7 @@ emptyToDisableSmtpAuth: "Leave username and password empty to disable SMTP verif
smtpSecure: "Use implicit SSL/TLS for SMTP connections" smtpSecure: "Use implicit SSL/TLS for SMTP connections"
smtpSecureInfo: "Turn this off when using STARTTLS" smtpSecureInfo: "Turn this off when using STARTTLS"
testEmail: "Test email delivery" testEmail: "Test email delivery"
wordMute: "Word mute" wordMute: "Word and language mutes"
regexpError: "Regular Expression error" regexpError: "Regular Expression error"
regexpErrorDescription: "An error occurred in the regular expression on line {line} regexpErrorDescription: "An error occurred in the regular expression on line {line}
of your {tab} word mutes:" of your {tab} word mutes:"
@ -1375,14 +1375,19 @@ _menuDisplay:
hide: "Hide" hide: "Hide"
_wordMute: _wordMute:
muteWords: "Muted words" muteWords: "Muted words"
muteLangs: "Muted Languages"
muteWordsDescription: "Separate with spaces for an AND condition or with line breaks muteWordsDescription: "Separate with spaces for an AND condition or with line breaks
for an OR condition." for an OR condition."
muteWordsDescription2: "Surround keywords with slashes to use regular expressions." muteWordsDescription2: "Surround keywords with slashes to use regular expressions."
muteLangsDescription: "Separate with spaces or line breaks for an OR condition."
muteLangsDescription2: "Use language code e.g. en, fr, ja, zh."
softDescription: "Hide posts that fulfil the set conditions from the timeline." softDescription: "Hide posts that fulfil the set conditions from the timeline."
langDescription: "Hide posts that match set language from the timeline."
hardDescription: "Prevents posts fulfilling the set conditions from being added hardDescription: "Prevents posts fulfilling the set conditions from being added
to the timeline. In addition, these posts will not be added to the timeline even to the timeline. In addition, these posts will not be added to the timeline even
if the conditions are changed." if the conditions are changed."
soft: "Soft" soft: "Soft"
lang: "Language"
hard: "Hard" hard: "Hard"
mutedNotes: "Muted posts" mutedNotes: "Muted posts"
_instanceMute: _instanceMute:

View file

@ -1200,11 +1200,16 @@ _menuDisplay:
hide: "隠す" hide: "隠す"
_wordMute: _wordMute:
muteWords: "ミュートするワード" muteWords: "ミュートするワード"
muteLangs: "ミュートされた言語"
muteWordsDescription: "スペースで区切るとAND指定になり、改行で区切るとOR指定になります。" muteWordsDescription: "スペースで区切るとAND指定になり、改行で区切るとOR指定になります。"
muteWordsDescription2: "キーワードをスラッシュで囲むと正規表現になります。" muteWordsDescription2: "キーワードをスラッシュで囲むと正規表現になります。"
muteLangsDescription: "OR 条件の場合はスペースまたは改行で区切ります。"
muteLangsDescription2: "言語コードを使用します。例: en, fr, ja, zh."
softDescription: "指定した条件の投稿をタイムラインから隠します。" softDescription: "指定した条件の投稿をタイムラインから隠します。"
langDescription: "設定した言語に一致する投稿をタイムラインから非表示にします。"
hardDescription: "指定した条件の投稿をタイムラインに追加しないようにします。追加されなかった投稿は、条件を変更しても除外されたままになります。" hardDescription: "指定した条件の投稿をタイムラインに追加しないようにします。追加されなかった投稿は、条件を変更しても除外されたままになります。"
soft: "ソフト" soft: "ソフト"
lang: "言語"
hard: "ハード" hard: "ハード"
mutedNotes: "ミュートされた投稿" mutedNotes: "ミュートされた投稿"
_instanceMute: _instanceMute:

View file

@ -1110,11 +1110,16 @@ _menuDisplay:
hide: "隐藏" hide: "隐藏"
_wordMute: _wordMute:
muteWords: "过滤词" muteWords: "过滤词"
muteLangs: "过滤语言"
muteWordsDescription: "AND 条件用空格分隔OR 条件用换行符分隔。" muteWordsDescription: "AND 条件用空格分隔OR 条件用换行符分隔。"
muteWordsDescription2: "将关键字用斜线括起来表示正则表达式。" muteWordsDescription2: "将关键字用斜线括起来表示正则表达式。"
muteLangsDescription: "OR 条件用空格,换行符分隔"
muteLangsDescription2: "使用语言代码。例: en, fr, ja, zh."
softDescription: "隐藏时间线中指定条件的帖子。" softDescription: "隐藏时间线中指定条件的帖子。"
langDescription: "从时间线中隐藏与设置语言匹配的帖子。"
hardDescription: "防止将具有指定条件的帖子添加到时间线。 即使您更改条件,原先未添加的帖文也会被排除在外。" hardDescription: "防止将具有指定条件的帖子添加到时间线。 即使您更改条件,原先未添加的帖文也会被排除在外。"
soft: "软过滤" soft: "软过滤"
lang: "语言"
hard: "硬过滤" hard: "硬过滤"
mutedNotes: "已过滤的帖子" mutedNotes: "已过滤的帖子"
_instanceMute: _instanceMute:

View file

@ -1,6 +1,6 @@
{ {
"name": "firefish", "name": "firefish",
"version": "1.0.5-dev13", "version": "1.0.5-dev14",
"codename": "aqua", "codename": "aqua",
"repository": { "repository": {
"type": "git", "type": "git",

View file

@ -133,6 +133,7 @@
"tar-stream": "^3.1.6", "tar-stream": "^3.1.6",
"tesseract.js": "^4.1.1", "tesseract.js": "^4.1.1",
"tinycolor2": "1.6.0", "tinycolor2": "1.6.0",
"tinyld": "^1.3.4",
"tmp": "0.2.1", "tmp": "0.2.1",
"twemoji-parser": "14.0.0", "twemoji-parser": "14.0.0",
"typeorm": "0.3.17", "typeorm": "0.3.17",
@ -144,7 +145,7 @@
}, },
"devDependencies": { "devDependencies": {
"@swc/cli": "^0.1.62", "@swc/cli": "^0.1.62",
"@swc/core": "^1.3.75", "@swc/core": "1.3.82",
"@types/adm-zip": "^0.5.0", "@types/adm-zip": "^0.5.0",
"@types/bcryptjs": "2.4.2", "@types/bcryptjs": "2.4.2",
"@types/escape-regexp": "0.0.1", "@types/escape-regexp": "0.0.1",

View file

@ -0,0 +1,7 @@
declare module "langdetect" {
interface DetectResult {
lang: string;
prob: number;
}
export function detect(words: string): DetectResult[];
}

View file

@ -38,6 +38,7 @@ import {
} from "@/db/scylla.js"; } from "@/db/scylla.js";
import { LocalFollowingsCache } from "@/misc/cache.js"; import { LocalFollowingsCache } from "@/misc/cache.js";
import { userByIdCache } from "@/services/user-cache.js"; import { userByIdCache } from "@/services/user-cache.js";
import { detect as detectLanguage_ } from "tinyld";
export async function populatePoll( export async function populatePoll(
note: Note | ScyllaNote, note: Note | ScyllaNote,
@ -302,6 +303,8 @@ export const NoteRepository = db.getRepository(Note).extend({
note.emojis.concat(reactionEmojiNames), note.emojis.concat(reactionEmojiNames),
host, host,
); );
const lang = detectLanguage_(`${note.cw ?? ''}\n${note.text ?? ''}`) ?? "unknown"
const reactionEmoji = await populateEmojis(reactionEmojiNames, host); const reactionEmoji = await populateEmojis(reactionEmojiNames, host);
const packed: Packed<"Note"> = await awaitAll({ const packed: Packed<"Note"> = await awaitAll({
id: note.id, id: note.id,
@ -376,6 +379,7 @@ export const NoteRepository = db.getRepository(Note).extend({
: undefined, : undefined,
} }
: {}), : {}),
lang: lang,
}); });
if (packed.user.isCat && packed.user.speakAsCat && packed.text) { if (packed.user.isCat && packed.user.speakAsCat && packed.text) {

View file

@ -193,8 +193,12 @@ export default define(meta, paramDef, async (ps, user) => {
.andWhere( .andWhere(
new Brackets((qb) => { new Brackets((qb) => {
qb.where("note.userId = :meId", { meId: user.id }); qb.where("note.userId = :meId", { meId: user.id });
if (hasFollowing) if (hasFollowing) {
qb.orWhere(`note.userId IN (${followingQuery.getQuery()})`); qb.orWhere(
`note.userId IN (${followingQuery.getQuery()})`,
followingQuery.getParameters(),
);
}
}), }),
) )
.leftJoinAndSelect("note.reply", "reply") .leftJoinAndSelect("note.reply", "reply")

View file

@ -354,7 +354,12 @@ const isMyRenote = $i && $i.id === note.value.userId;
const showContent = ref(false); const showContent = ref(false);
const isDeleted = ref(false); const isDeleted = ref(false);
const muted = ref( const muted = ref(
getWordSoftMute(note.value, $i, defaultStore.state.mutedWords), getWordSoftMute(
note.value,
$i,
defaultStore.state.mutedWords,
defaultStore.state.mutedLangs,
),
); );
const translation = ref(null); const translation = ref(null);
const translating = ref(false); const translating = ref(false);

View file

@ -210,7 +210,12 @@ const reactButton = ref<HTMLElement>();
const showContent = ref(false); const showContent = ref(false);
const isDeleted = ref(false); const isDeleted = ref(false);
const muted = ref( const muted = ref(
getWordSoftMute(note.value, $i, defaultStore.state.mutedWords), getWordSoftMute(
note.value,
$i,
defaultStore.state.mutedWords,
defaultStore.state.mutedLangs,
),
); );
const translation = ref(null); const translation = ref(null);
const translating = ref(false); const translating = ref(false);

View file

@ -266,7 +266,12 @@ const appearNote = computed(() =>
); );
const isDeleted = ref(false); const isDeleted = ref(false);
const muted = ref( const muted = ref(
getWordSoftMute(note.value, $i, defaultStore.state.mutedWords), getWordSoftMute(
note.value,
$i,
defaultStore.state.mutedWords,
defaultStore.state.mutedLangs,
),
); );
const translation = ref(null); const translation = ref(null);
const translating = ref(false); const translating = ref(false);

View file

@ -29,7 +29,7 @@
>{{ maxTextLength - textLength }}</span >{{ maxTextLength - textLength }}</span
> >
<span v-if="localOnly" class="local-only" <span v-if="localOnly" class="local-only"
><i class="ph-hand-fist ph-bold ph-lg"></i ><i class="ph-users ph-bold ph-lg"></i
></span> ></span>
<button <button
ref="visibilityButton" ref="visibilityButton"

View file

@ -195,7 +195,7 @@ const renote = (viaKeyboard = false, ev?: MouseEvent) => {
if (canRenote.value) { if (canRenote.value) {
buttonActions.push({ buttonActions.push({
text: `${i18n.ts.renote} (${i18n.ts.local})`, text: `${i18n.ts.renote} (${i18n.ts.local})`,
icon: "ph-hand-fist ph-bold ph-lg", icon: "ph-users ph-bold ph-lg",
danger: false, danger: false,
action: () => { action: () => {
vibrate([30, 30, 60]); vibrate([30, 30, 60]);

View file

@ -19,7 +19,7 @@
<span v-if="note.localOnly" :class="$style.localOnly" <span v-if="note.localOnly" :class="$style.localOnly"
><i ><i
v-tooltip="i18n.ts._visibility.localOnly" v-tooltip="i18n.ts._visibility.localOnly"
class="ph-hand-fist ph-bold ph-lg" class="ph-users ph-bold ph-lg"
></i ></i
></span> ></span>
</template> </template>

View file

@ -97,7 +97,7 @@
@click="localOnly = !localOnly" @click="localOnly = !localOnly"
> >
<div :class="$style.icon"> <div :class="$style.icon">
<i class="ph-hand-fist ph-bold ph-lg"></i> <i class="ph-users ph-bold ph-lg"></i>
</div> </div>
<div :class="$style.body"> <div :class="$style.body">
<span :class="$style.itemTitle">{{ <span :class="$style.itemTitle">{{

View file

@ -431,7 +431,7 @@ const headerActions = computed(() => [
const headerTabs = computed(() => [ const headerTabs = computed(() => [
{ {
key: "local", key: "local",
icon: "ph-hand-fist ph-bold ph-lg", icon: "ph-users ph-bold ph-lg",
title: i18n.ts.local, title: i18n.ts.local,
}, },
{ {

View file

@ -9,7 +9,7 @@
<template #empty <template #empty
><FormInfo>{{ i18n.ts.noUsers }}</FormInfo></template ><FormInfo>{{ i18n.ts.noUsers }}</FormInfo></template
> >
<template #default="{ items }"> <template #default="{ items }" class="_formlinks">
<FormLink <FormLink
v-for="mute in items" v-for="mute in items"
:key="mute.id" :key="mute.id"
@ -25,7 +25,7 @@
<template #empty <template #empty
><FormInfo>{{ i18n.ts.noUsers }}</FormInfo></template ><FormInfo>{{ i18n.ts.noUsers }}</FormInfo></template
> >
<template #default="{ items }"> <template #default="{ items }" class="_formlinks">
<FormLink <FormLink
v-for="block in items" v-for="block in items"
:key="block.id" :key="block.id"

View file

@ -17,6 +17,17 @@
}}</template }}</template
> >
</FormTextarea> </FormTextarea>
<MkInfo class="_formBlock">{{
i18n.ts._wordMute.langDescription
}}</MkInfo>
<FormTextarea v-model="softMutedLangs" class="_formBlock">
<span>{{ i18n.ts._wordMute.muteLangs }}</span>
<template #caption
>{{ i18n.ts._wordMute.muteLangsDescription }}<br />{{
i18n.ts._wordMute.muteLangsDescription2
}}</template
>
</FormTextarea>
</div> </div>
<div v-show="tab === 'hard'"> <div v-show="tab === 'hard'">
<MkInfo class="_formBlock" <MkInfo class="_formBlock"
@ -76,6 +87,7 @@ const render = (mutedWords) =>
const tab = ref("soft"); const tab = ref("soft");
const softMutedWords = ref(render(defaultStore.state.mutedWords)); const softMutedWords = ref(render(defaultStore.state.mutedWords));
const softMutedLangs = ref(render(defaultStore.state.mutedLangs));
const hardMutedWords = ref(render($i!.mutedWords)); const hardMutedWords = ref(render($i!.mutedWords));
const hardWordMutedNotesCount = ref(null); const hardWordMutedNotesCount = ref(null);
const changed = ref(false); const changed = ref(false);
@ -88,6 +100,10 @@ watch(softMutedWords, () => {
changed.value = true; changed.value = true;
}); });
watch(softMutedLangs, () => {
changed.value = true;
});
watch(hardMutedWords, () => { watch(hardMutedWords, () => {
changed.value = true; changed.value = true;
}); });
@ -134,9 +150,10 @@ async function save() {
return lines; return lines;
}; };
let softMutes, hardMutes; let softMutes, softMLangs, hardMutes;
try { try {
softMutes = parseMutes(softMutedWords.value, i18n.ts._wordMute.soft); softMutes = parseMutes(softMutedWords.value, i18n.ts._wordMute.soft);
softMLangs = parseMutes(softMutedLangs.value, i18n.ts._wordMute.lang);
hardMutes = parseMutes(hardMutedWords.value, i18n.ts._wordMute.hard); hardMutes = parseMutes(hardMutedWords.value, i18n.ts._wordMute.hard);
} catch (err) { } catch (err) {
// already displayed error message in parseMutes // already displayed error message in parseMutes
@ -144,6 +161,7 @@ async function save() {
} }
defaultStore.set("mutedWords", softMutes); defaultStore.set("mutedWords", softMutes);
defaultStore.set("mutedLangs", softMLangs);
await os.api("i/update", { await os.api("i/update", {
mutedWords: hardMutes, mutedWords: hardMutes,
}); });

View file

@ -6,6 +6,19 @@ export interface Muted {
const NotMuted = { muted: false, matched: [] }; const NotMuted = { muted: false, matched: [] };
function checkLangMute(
note: NoteLike,
mutedLangs: Array<string | string[]>,
): Muted {
const mutedLangList = new Set(
mutedLangs.reduce((arr, x) => [...arr, ...(Array.isArray(x) ? x : [x])]),
);
if (mutedLangList.has((note.lang?.[0]?.lang || "").split("-")[0])) {
return { muted: true, matched: [note.lang?.[0]?.lang] };
}
return NotMuted;
}
function checkWordMute( function checkWordMute(
note: NoteLike, note: NoteLike,
mutedWords: Array<string | string[]>, mutedWords: Array<string | string[]>,
@ -62,6 +75,7 @@ export function getWordSoftMute(
note: Record<string, any>, note: Record<string, any>,
me: Record<string, any> | null | undefined, me: Record<string, any> | null | undefined,
mutedWords: Array<string | string[]>, mutedWords: Array<string | string[]>,
mutedLangs: Array<string | string[]>,
): Muted { ): Muted {
// 自分自身 // 自分自身
if (me && note.userId === me.id) { if (me && note.userId === me.id) {
@ -91,6 +105,29 @@ export function getWordSoftMute(
} }
} }
} }
if (mutedLangs.length > 0) {
let noteLangMuted = checkLangMute(note, mutedLangs);
if (noteLangMuted.muted) {
noteLangMuted.what = "note";
return noteLangMuted;
}
if (note.renote) {
let renoteLangMuted = checkLangMute(note, mutedLangs);
if (renoteLangMuted.muted) {
renoteLangMuted.what = note.text == null ? "renote" : "quote";
return renoteLangMuted;
}
}
if (note.reply) {
let replyLangMuted = checkLangMute(note, mutedLangs);
if (replyLangMuted.muted) {
replyLangMuted.what = "reply";
return replyLangMuted;
}
}
}
return NotMuted; return NotMuted;
} }

View file

@ -101,6 +101,10 @@ export const defaultStore = markRaw(
where: "account", where: "account",
default: [], default: [],
}, },
mutedLangs: {
where: "account",
default: [],
},
mutedAds: { mutedAds: {
where: "account", where: "account",
default: [] as string[], default: [] as string[],

View file

@ -25,7 +25,7 @@
"@microsoft/api-extractor": "^7.36.0", "@microsoft/api-extractor": "^7.36.0",
"@microsoft/api-documenter": "^7.22.21", "@microsoft/api-documenter": "^7.22.21",
"@swc/cli": "^0.1.62", "@swc/cli": "^0.1.62",
"@swc/core": "^1.3.62", "@swc/core": "1.3.82",
"@types/jest": "^27.4.0", "@types/jest": "^27.4.0",
"@types/node": "20.3.1", "@types/node": "20.3.1",
"jest": "^27.4.5", "jest": "^27.4.5",

View file

@ -10,7 +10,7 @@
}, },
"devDependencies": { "devDependencies": {
"@swc/cli": "^0.1.62", "@swc/cli": "^0.1.62",
"@swc/core": "^1.3.62", "@swc/core": "1.3.82",
"@swc/core-android-arm64": "1.3.11", "@swc/core-android-arm64": "1.3.11",
"firefish-js": "workspace:*", "firefish-js": "workspace:*",
"idb-keyval": "^6.2.1", "idb-keyval": "^6.2.1",

View file

@ -414,6 +414,9 @@ importers:
tinycolor2: tinycolor2:
specifier: 1.6.0 specifier: 1.6.0
version: 1.6.0 version: 1.6.0
tinyld:
specifier: ^1.3.4
version: 1.3.4
tmp: tmp:
specifier: 0.2.1 specifier: 0.2.1
version: 0.2.1 version: 0.2.1
@ -448,10 +451,10 @@ importers:
devDependencies: devDependencies:
'@swc/cli': '@swc/cli':
specifier: ^0.1.62 specifier: ^0.1.62
version: 0.1.62(@swc/core@1.3.85)(chokidar@3.5.3) version: 0.1.62(@swc/core@1.3.82)(chokidar@3.5.3)
'@swc/core': '@swc/core':
specifier: ^1.3.75 specifier: 1.3.82
version: 1.3.85 version: 1.3.82
'@types/adm-zip': '@types/adm-zip':
specifier: ^0.5.0 specifier: ^0.5.0
version: 0.5.1 version: 0.5.1
@ -598,13 +601,13 @@ importers:
version: 2.0.0 version: 2.0.0
swc-loader: swc-loader:
specifier: ^0.2.3 specifier: ^0.2.3
version: 0.2.3(@swc/core@1.3.85)(webpack@5.88.2) version: 0.2.3(@swc/core@1.3.82)(webpack@5.88.2)
ts-loader: ts-loader:
specifier: 9.4.4 specifier: 9.4.4
version: 9.4.4(typescript@5.1.6)(webpack@5.88.2) version: 9.4.4(typescript@5.1.6)(webpack@5.88.2)
ts-node: ts-node:
specifier: 10.9.1 specifier: 10.9.1
version: 10.9.1(@swc/core@1.3.85)(@types/node@18.11.18)(typescript@5.1.6) version: 10.9.1(@swc/core@1.3.82)(@types/node@18.11.18)(typescript@5.1.6)
tsconfig-paths: tsconfig-paths:
specifier: 4.2.0 specifier: 4.2.0
version: 4.2.0 version: 4.2.0
@ -613,7 +616,7 @@ importers:
version: 5.1.6 version: 5.1.6
webpack: webpack:
specifier: ^5.88.2 specifier: ^5.88.2
version: 5.88.2(@swc/core@1.3.85)(webpack-cli@5.1.4) version: 5.88.2(@swc/core@1.3.82)(webpack-cli@5.1.4)
ws: ws:
specifier: 8.13.0 specifier: 8.13.0
version: 8.13.0 version: 8.13.0
@ -912,10 +915,10 @@ importers:
version: 7.37.0(@types/node@20.3.1) version: 7.37.0(@types/node@20.3.1)
'@swc/cli': '@swc/cli':
specifier: ^0.1.62 specifier: ^0.1.62
version: 0.1.62(@swc/core@1.3.85)(chokidar@3.5.3) version: 0.1.62(@swc/core@1.3.82)(chokidar@3.5.3)
'@swc/core': '@swc/core':
specifier: ^1.3.62 specifier: 1.3.82
version: 1.3.85 version: 1.3.82
'@types/jest': '@types/jest':
specifier: ^27.4.0 specifier: ^27.4.0
version: 27.5.2 version: 27.5.2
@ -939,7 +942,7 @@ importers:
version: 27.1.5(@babel/core@7.22.20)(@types/jest@27.5.2)(jest@27.5.1)(typescript@5.1.3) version: 27.1.5(@babel/core@7.22.20)(@types/jest@27.5.2)(jest@27.5.1)(typescript@5.1.3)
ts-node: ts-node:
specifier: 10.4.0 specifier: 10.4.0
version: 10.4.0(@swc/core@1.3.85)(@types/node@20.3.1)(typescript@5.1.3) version: 10.4.0(@swc/core@1.3.82)(@types/node@20.3.1)(typescript@5.1.3)
tsd: tsd:
specifier: ^0.28.1 specifier: ^0.28.1
version: 0.28.1 version: 0.28.1
@ -1069,10 +1072,10 @@ importers:
devDependencies: devDependencies:
'@swc/cli': '@swc/cli':
specifier: ^0.1.62 specifier: ^0.1.62
version: 0.1.62(@swc/core@1.3.85)(chokidar@3.5.3) version: 0.1.62(@swc/core@1.3.82)(chokidar@3.5.3)
'@swc/core': '@swc/core':
specifier: ^1.3.62 specifier: 1.3.82
version: 1.3.85 version: 1.3.82
'@swc/core-android-arm64': '@swc/core-android-arm64':
specifier: 1.3.11 specifier: 1.3.11
version: 1.3.11 version: 1.3.11
@ -1084,10 +1087,10 @@ importers:
version: 6.2.1 version: 6.2.1
swc-loader: swc-loader:
specifier: ^0.2.3 specifier: ^0.2.3
version: 0.2.3(@swc/core@1.3.85)(webpack@5.88.2) version: 0.2.3(@swc/core@1.3.82)(webpack@5.88.2)
webpack: webpack:
specifier: ^5.85.1 specifier: ^5.85.1
version: 5.88.2(@swc/core@1.3.85)(webpack-cli@5.1.4) version: 5.88.2(@swc/core@1.3.82)(webpack-cli@5.1.4)
webpack-cli: webpack-cli:
specifier: ^5.1.3 specifier: ^5.1.3
version: 5.1.4(webpack@5.88.2) version: 5.1.4(webpack@5.88.2)
@ -3277,7 +3280,7 @@ packages:
resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==}
dev: false dev: false
/@swc/cli@0.1.62(@swc/core@1.3.85)(chokidar@3.5.3): /@swc/cli@0.1.62(@swc/core@1.3.82)(chokidar@3.5.3):
resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==} resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==}
engines: {node: '>= 12.13'} engines: {node: '>= 12.13'}
hasBin: true hasBin: true
@ -3289,7 +3292,7 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@mole-inc/bin-wrapper': 8.0.1 '@mole-inc/bin-wrapper': 8.0.1
'@swc/core': 1.3.85 '@swc/core': 1.3.82
chokidar: 3.5.3 chokidar: 3.5.3
commander: 7.2.0 commander: 7.2.0
fast-glob: 3.3.1 fast-glob: 3.3.1
@ -3306,88 +3309,88 @@ packages:
dependencies: dependencies:
'@swc/wasm': 1.2.130 '@swc/wasm': 1.2.130
/@swc/core-darwin-arm64@1.3.85: /@swc/core-darwin-arm64@1.3.82:
resolution: {integrity: sha512-jTikp+i4nO4Ofe6qGm4I3sFeebD1OvueBCHITux5tQKD6umN1c2z4CRGv6K49NIz/qEpUcdr6Qny6K+3yibVFQ==} resolution: {integrity: sha512-JfsyDW34gVKD3uE0OUpUqYvAD3yseEaicnFP6pB292THtLJb0IKBBnK50vV/RzEJtc1bR3g1kNfxo2PeurZTrA==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
requiresBuild: true requiresBuild: true
optional: true optional: true
/@swc/core-darwin-x64@1.3.85: /@swc/core-darwin-x64@1.3.82:
resolution: {integrity: sha512-3uHYkjVU+2F+YbVYtq5rH0uCJIztFTALaS3mQEfQUZKXZ5/8jD5titTCRqFKtSlQg0CzaFZgsYsuqwYBmgN0mA==} resolution: {integrity: sha512-ogQWgNMq7qTpITjcP3dnzkFNj7bh6SwMr859GvtOTrE75H7L7jDWxESfH4f8foB/LGxBKiDNmxKhitCuAsZK4A==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
requiresBuild: true requiresBuild: true
optional: true optional: true
/@swc/core-linux-arm-gnueabihf@1.3.85: /@swc/core-linux-arm-gnueabihf@1.3.82:
resolution: {integrity: sha512-ouHzAHsFaEOkRuoTAOI/8n2m8BQAAnb4vr/xbMhhDOmix0lp5eNsW5Iac/EcJ2uG6B3n7P2K8oycj9SWkj+pfw==} resolution: {integrity: sha512-7TMXG1lXlNhD0kUiEqs+YlGV4irAdBa2quuy+XI3oJf2fBK6dQfEq4xBy65B3khrorzQS3O0oDGQ+cmdpHExHA==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
optional: true optional: true
/@swc/core-linux-arm64-gnu@1.3.85: /@swc/core-linux-arm64-gnu@1.3.82:
resolution: {integrity: sha512-/Z1CZOWiO+NqJEh1J20PIxQFHMH43upQJ1l7FJ5Z7+MyuYF8WkeJ7OSovau729pBR+38vvvccEJrMZIztfv7hQ==} resolution: {integrity: sha512-26JkOujbzcItPAmIbD5vHJxQVy5ihcSu3YHTKwope1h28sApZdtE7S3e2G3gsZRTIdsCQkXUtAQeqHxGWWR3pw==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
optional: true optional: true
/@swc/core-linux-arm64-musl@1.3.85: /@swc/core-linux-arm64-musl@1.3.82:
resolution: {integrity: sha512-gfh7CfKavi076dbMBTzfdawSGcYfZ4+1Q+8aRkSesqepKHcIWIJti8Cf3zB4a6CHNhJe+VN0Gb7DEfumydAm1w==} resolution: {integrity: sha512-8Izj9tuuMpoc3cqiPBRtwqpO1BZ/+sfZVsEhLxrbOFlcSb8LnKyMle1g3JMMUwI4EU75RGVIzZMn8A6GOKdJbA==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
optional: true optional: true
/@swc/core-linux-x64-gnu@1.3.85: /@swc/core-linux-x64-gnu@1.3.82:
resolution: {integrity: sha512-lWVqjHKzofb9q1qrBM4dLqO7CIisp08/xMS5Hz9DWex1gTc5F2b6yJO6Ceqwa256GMweJcdP6A5EvEFQAiZ5dg==} resolution: {integrity: sha512-0GSrIBScQwTaPv46T2qB7XnDYxndRCpwH4HMjh6FN+I+lfPUhTSJKW8AonqrqT1TbpFIgvzQs7EnTsD7AnSCow==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
optional: true optional: true
/@swc/core-linux-x64-musl@1.3.85: /@swc/core-linux-x64-musl@1.3.82:
resolution: {integrity: sha512-EPJmlfqC05TUetnlErxNRyIp7Nc3B2w9abET6oQ/EgldeAeQnZ3M6svMViET/c2QSomgrU3rdP+Qcozkt62/4A==} resolution: {integrity: sha512-KJUnaaepDKNzrEbwz4jv0iC3/t9x0NSoe06fnkAlhh2+NFKWKKJhVCOBTrpds8n7eylBDIXUlK34XQafjVMUdg==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
optional: true optional: true
/@swc/core-win32-arm64-msvc@1.3.85: /@swc/core-win32-arm64-msvc@1.3.82:
resolution: {integrity: sha512-ibckJDZw8kNosciMexwk0z75ZyUhwtiFMV9rSBpup0opa7NNCUCoERCJ1e9LRyMdhsVUoLpZg/KZiHCdTw96hQ==} resolution: {integrity: sha512-TR3MHKhDYIyGyFcyl2d/p1ftceXcubAhX5wRSOdtOyr5+K/v3jbyCCqN7bbqO5o43wQVCwwR/drHleYyDZvg8Q==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
requiresBuild: true requiresBuild: true
optional: true optional: true
/@swc/core-win32-ia32-msvc@1.3.85: /@swc/core-win32-ia32-msvc@1.3.82:
resolution: {integrity: sha512-hY4MpHGUVQHL1T2kgRXOigDho4DTIpVPYzJ4uyy8VQRbS7GzN5XtvdGP/fA4zp8+2BQjcig+6J7Y92SY15ouNQ==} resolution: {integrity: sha512-ZX4HzVVt6hs84YUg70UvyBJnBOIspmQQM0iXSzBvOikk3zRoN7BnDwQH4GScvevCEBuou60+i4I6d5kHLOfh8Q==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
requiresBuild: true requiresBuild: true
optional: true optional: true
/@swc/core-win32-x64-msvc@1.3.85: /@swc/core-win32-x64-msvc@1.3.82:
resolution: {integrity: sha512-ktxWOMFJ0iqKn6WUHtXqi4CS7xkyHmrRtjllGRuGqxmLmDX/HSOfuQ55Tm1KXKk5oHLacJkUbOSF2kBrpZ8dpg==} resolution: {integrity: sha512-4mJMnex21kbQoaHeAmHnVwQN9/XAfPszJ6n9HI7SVH+aAHnbBIR0M59/b50/CJMjTj5niUGk7EwQ3nhVNOG32g==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
requiresBuild: true requiresBuild: true
optional: true optional: true
/@swc/core@1.3.85: /@swc/core@1.3.82:
resolution: {integrity: sha512-qnoxp+2O0GtvRdYnXgR1v8J7iymGGYpx6f6yCK9KxipOZOjrlKILFANYlghQxZyPUfXwK++TFxfSlX4r9wK+kg==} resolution: {integrity: sha512-jpC1a18HMH67018Ij2jh+hT7JBFu7ZKcQVfrZ8K6JuEY+kjXmbea07P9MbQUZbAe0FB+xi3CqEVCP73MebodJQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
requiresBuild: true requiresBuild: true
peerDependencies: peerDependencies:
@ -3398,16 +3401,16 @@ packages:
dependencies: dependencies:
'@swc/types': 0.1.4 '@swc/types': 0.1.4
optionalDependencies: optionalDependencies:
'@swc/core-darwin-arm64': 1.3.85 '@swc/core-darwin-arm64': 1.3.82
'@swc/core-darwin-x64': 1.3.85 '@swc/core-darwin-x64': 1.3.82
'@swc/core-linux-arm-gnueabihf': 1.3.85 '@swc/core-linux-arm-gnueabihf': 1.3.82
'@swc/core-linux-arm64-gnu': 1.3.85 '@swc/core-linux-arm64-gnu': 1.3.82
'@swc/core-linux-arm64-musl': 1.3.85 '@swc/core-linux-arm64-musl': 1.3.82
'@swc/core-linux-x64-gnu': 1.3.85 '@swc/core-linux-x64-gnu': 1.3.82
'@swc/core-linux-x64-musl': 1.3.85 '@swc/core-linux-x64-musl': 1.3.82
'@swc/core-win32-arm64-msvc': 1.3.85 '@swc/core-win32-arm64-msvc': 1.3.82
'@swc/core-win32-ia32-msvc': 1.3.85 '@swc/core-win32-ia32-msvc': 1.3.82
'@swc/core-win32-x64-msvc': 1.3.85 '@swc/core-win32-x64-msvc': 1.3.82
/@swc/types@0.1.4: /@swc/types@0.1.4:
resolution: {integrity: sha512-z/G02d+59gyyUb7KYhKi9jOhicek6QD2oMaotUyG+lUkybpXoV49dY9bj7Ah5Q+y7knK2jU67UTX9FyfGzaxQg==} resolution: {integrity: sha512-z/G02d+59gyyUb7KYhKi9jOhicek6QD2oMaotUyG+lUkybpXoV49dY9bj7Ah5Q+y7knK2jU67UTX9FyfGzaxQg==}
@ -5000,7 +5003,7 @@ packages:
webpack: 5.x.x webpack: 5.x.x
webpack-cli: 5.x.x webpack-cli: 5.x.x
dependencies: dependencies:
webpack: 5.88.2(@swc/core@1.3.85)(webpack-cli@5.1.4) webpack: 5.88.2(@swc/core@1.3.82)(webpack-cli@5.1.4)
webpack-cli: 5.1.4(webpack@5.88.2) webpack-cli: 5.1.4(webpack@5.88.2)
dev: true dev: true
@ -5011,7 +5014,7 @@ packages:
webpack: 5.x.x webpack: 5.x.x
webpack-cli: 5.x.x webpack-cli: 5.x.x
dependencies: dependencies:
webpack: 5.88.2(@swc/core@1.3.85)(webpack-cli@5.1.4) webpack: 5.88.2(@swc/core@1.3.82)(webpack-cli@5.1.4)
webpack-cli: 5.1.4(webpack@5.88.2) webpack-cli: 5.1.4(webpack@5.88.2)
dev: true dev: true
@ -5026,7 +5029,7 @@ packages:
webpack-dev-server: webpack-dev-server:
optional: true optional: true
dependencies: dependencies:
webpack: 5.88.2(@swc/core@1.3.85)(webpack-cli@5.1.4) webpack: 5.88.2(@swc/core@1.3.82)(webpack-cli@5.1.4)
webpack-cli: 5.1.4(webpack@5.88.2) webpack-cli: 5.1.4(webpack@5.88.2)
dev: true dev: true
@ -11589,7 +11592,7 @@ packages:
pretty-format: 27.5.1 pretty-format: 27.5.1
slash: 3.0.0 slash: 3.0.0
strip-json-comments: 3.1.1 strip-json-comments: 3.1.1
ts-node: 10.4.0(@swc/core@1.3.85)(@types/node@20.3.1)(typescript@5.1.3) ts-node: 10.4.0(@swc/core@1.3.82)(@types/node@20.3.1)(typescript@5.1.3)
transitivePeerDependencies: transitivePeerDependencies:
- bufferutil - bufferutil
- canvas - canvas
@ -12552,7 +12555,7 @@ packages:
json5: 2.2.3 json5: 2.2.3
loader-utils: 2.0.4 loader-utils: 2.0.4
schema-utils: 3.3.0 schema-utils: 3.3.0
webpack: 5.88.2(@swc/core@1.3.85)(webpack-cli@5.1.4) webpack: 5.88.2(@swc/core@1.3.82)(webpack-cli@5.1.4)
dev: true dev: true
/json5@1.0.2: /json5@1.0.2:
@ -17108,14 +17111,14 @@ packages:
whet.extend: 0.9.9 whet.extend: 0.9.9
dev: true dev: true
/swc-loader@0.2.3(@swc/core@1.3.85)(webpack@5.88.2): /swc-loader@0.2.3(@swc/core@1.3.82)(webpack@5.88.2):
resolution: {integrity: sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==} resolution: {integrity: sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==}
peerDependencies: peerDependencies:
'@swc/core': ^1.2.147 '@swc/core': ^1.2.147
webpack: '>=2' webpack: '>=2'
dependencies: dependencies:
'@swc/core': 1.3.85 '@swc/core': 1.3.82
webpack: 5.88.2(@swc/core@1.3.85)(webpack-cli@5.1.4) webpack: 5.88.2(@swc/core@1.3.82)(webpack-cli@5.1.4)
dev: true dev: true
/swiper@10.2.0: /swiper@10.2.0:
@ -17251,7 +17254,7 @@ packages:
supports-hyperlinks: 2.3.0 supports-hyperlinks: 2.3.0
dev: true dev: true
/terser-webpack-plugin@5.3.9(@swc/core@1.3.85)(webpack@5.88.2): /terser-webpack-plugin@5.3.9(@swc/core@1.3.82)(webpack@5.88.2):
resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==}
engines: {node: '>= 10.13.0'} engines: {node: '>= 10.13.0'}
peerDependencies: peerDependencies:
@ -17268,12 +17271,12 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@jridgewell/trace-mapping': 0.3.19 '@jridgewell/trace-mapping': 0.3.19
'@swc/core': 1.3.85 '@swc/core': 1.3.82
jest-worker: 27.5.1 jest-worker: 27.5.1
schema-utils: 3.3.0 schema-utils: 3.3.0
serialize-javascript: 6.0.1 serialize-javascript: 6.0.1
terser: 5.19.4 terser: 5.19.4
webpack: 5.88.2(@swc/core@1.3.85)(webpack-cli@5.1.4) webpack: 5.88.2(@swc/core@1.3.82)(webpack-cli@5.1.4)
dev: true dev: true
/terser@5.19.4: /terser@5.19.4:
@ -17402,7 +17405,6 @@ packages:
resolution: {integrity: sha512-u26CNoaInA4XpDU+8s/6Cq8xHc2T5M4fXB3ICfXPokUQoLzmPgSZU02TAkFwFMJCWTjk53gtkS8pETTreZwCqw==} resolution: {integrity: sha512-u26CNoaInA4XpDU+8s/6Cq8xHc2T5M4fXB3ICfXPokUQoLzmPgSZU02TAkFwFMJCWTjk53gtkS8pETTreZwCqw==}
engines: {node: '>= 12.10.0', npm: '>= 6.12.0', yarn: '>= 1.20.0'} engines: {node: '>= 12.10.0', npm: '>= 6.12.0', yarn: '>= 1.20.0'}
hasBin: true hasBin: true
dev: true
/titleize@3.0.0: /titleize@3.0.0:
resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==}
@ -17621,10 +17623,10 @@ packages:
micromatch: 4.0.5 micromatch: 4.0.5
semver: 7.5.4 semver: 7.5.4
typescript: 5.1.6 typescript: 5.1.6
webpack: 5.88.2(@swc/core@1.3.85)(webpack-cli@5.1.4) webpack: 5.88.2(@swc/core@1.3.82)(webpack-cli@5.1.4)
dev: true dev: true
/ts-node@10.4.0(@swc/core@1.3.85)(@types/node@20.3.1)(typescript@5.1.3): /ts-node@10.4.0(@swc/core@1.3.82)(@types/node@20.3.1)(typescript@5.1.3):
resolution: {integrity: sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==} resolution: {integrity: sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -17639,7 +17641,7 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@cspotcode/source-map-support': 0.7.0 '@cspotcode/source-map-support': 0.7.0
'@swc/core': 1.3.85 '@swc/core': 1.3.82
'@tsconfig/node10': 1.0.9 '@tsconfig/node10': 1.0.9
'@tsconfig/node12': 1.0.11 '@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3 '@tsconfig/node14': 1.0.3
@ -17655,7 +17657,7 @@ packages:
yn: 3.1.1 yn: 3.1.1
dev: true dev: true
/ts-node@10.9.1(@swc/core@1.3.85)(@types/node@18.11.18)(typescript@5.1.6): /ts-node@10.9.1(@swc/core@1.3.82)(@types/node@18.11.18)(typescript@5.1.6):
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -17670,7 +17672,7 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@cspotcode/source-map-support': 0.8.1 '@cspotcode/source-map-support': 0.8.1
'@swc/core': 1.3.85 '@swc/core': 1.3.82
'@tsconfig/node10': 1.0.9 '@tsconfig/node10': 1.0.9
'@tsconfig/node12': 1.0.11 '@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3 '@tsconfig/node14': 1.0.3
@ -17960,7 +17962,7 @@ packages:
pg: 8.11.3 pg: 8.11.3
reflect-metadata: 0.1.13 reflect-metadata: 0.1.13
sha.js: 2.4.11 sha.js: 2.4.11
ts-node: 10.9.1(@swc/core@1.3.85)(@types/node@18.11.18)(typescript@5.1.6) ts-node: 10.9.1(@swc/core@1.3.82)(@types/node@18.11.18)(typescript@5.1.6)
tslib: 2.6.2 tslib: 2.6.2
uuid: 9.0.0 uuid: 9.0.0
yargs: 17.7.2 yargs: 17.7.2
@ -18593,7 +18595,7 @@ packages:
import-local: 3.1.0 import-local: 3.1.0
interpret: 3.1.1 interpret: 3.1.1
rechoir: 0.8.0 rechoir: 0.8.0
webpack: 5.88.2(@swc/core@1.3.85)(webpack-cli@5.1.4) webpack: 5.88.2(@swc/core@1.3.82)(webpack-cli@5.1.4)
webpack-merge: 5.9.0 webpack-merge: 5.9.0
dev: true dev: true
@ -18610,7 +18612,7 @@ packages:
engines: {node: '>=10.13.0'} engines: {node: '>=10.13.0'}
dev: true dev: true
/webpack@5.88.2(@swc/core@1.3.85)(webpack-cli@5.1.4): /webpack@5.88.2(@swc/core@1.3.82)(webpack-cli@5.1.4):
resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==}
engines: {node: '>=10.13.0'} engines: {node: '>=10.13.0'}
hasBin: true hasBin: true
@ -18641,7 +18643,7 @@ packages:
neo-async: 2.6.2 neo-async: 2.6.2
schema-utils: 3.3.0 schema-utils: 3.3.0
tapable: 2.2.1 tapable: 2.2.1
terser-webpack-plugin: 5.3.9(@swc/core@1.3.85)(webpack@5.88.2) terser-webpack-plugin: 5.3.9(@swc/core@1.3.82)(webpack@5.88.2)
watchpack: 2.4.0 watchpack: 2.4.0
webpack-cli: 5.1.4(webpack@5.88.2) webpack-cli: 5.1.4(webpack@5.88.2)
webpack-sources: 3.2.3 webpack-sources: 3.2.3