Compare commits

...

12 Commits

Author SHA1 Message Date
かっこかり 30aa14f01a
Merge 69890d5441 into d2154214ba 2026-01-29 23:43:13 +00:00
kakkokari-gtyih 69890d5441 fix 2026-01-30 08:43:06 +09:00
kakkokari-gtyih 41f271d60c Merge branch 'develop' into enh-remove-v-code-diff 2026-01-30 08:42:23 +09:00
renovate[bot] d2154214ba
fix(deps): update dependency tar to v7.5.7 [security] (#17104)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-29 18:18:34 +09:00
kakkokari-gtyih e10d3d15c3 Merge branch 'develop' into enh-remove-v-code-diff 2026-01-24 02:46:33 +09:00
kakkokari-gtyih 54f76a767f fix 2026-01-22 10:38:09 +09:00
kakkokari-gtyih 3e4cc32e51 refactor: split mkcodediff to isolate concerns 2026-01-22 10:36:57 +09:00
kakkokari-gtyih 327f41bace Merge remote-tracking branch 'msky/develop' into enh-remove-v-code-diff 2026-01-22 10:32:53 +09:00
kakkokari-gtyih 67b88808db fix(deps): resolve version mismatch in shiki 2026-01-22 10:09:23 +09:00
kakkokari-gtyih 020e75feb5 remove v-code-diff 2026-01-22 10:06:10 +09:00
kakkokari-gtyih 6a151cdd80 run pnpm dedupe 2026-01-21 21:42:02 +09:00
kakkokari-gtyih 3f5240a254 enhance(frontend): remove v-code-diff 2026-01-21 21:41:51 +09:00
9 changed files with 279 additions and 117 deletions

View File

@ -59,7 +59,7 @@
"ignore-walk": "8.0.0",
"js-yaml": "4.1.1",
"postcss": "8.5.6",
"tar": "7.5.6",
"tar": "7.5.7",
"terser": "5.46.0"
},
"devDependencies": {

View File

@ -25,6 +25,7 @@
"@rollup/plugin-replace": "6.0.3",
"@rollup/pluginutils": "5.3.0",
"@sentry/vue": "10.34.0",
"@shikijs/transformers": "3.21.0",
"@syuilo/aiscript": "1.2.1",
"@syuilo/aiscript-0-19-0": "npm:@syuilo/aiscript@^0.19.0",
"@twemoji/parser": "16.0.0",
@ -43,6 +44,7 @@
"compare-versions": "6.1.1",
"cropperjs": "2.1.0",
"date-fns": "4.1.0",
"diff": "8.0.3",
"eventemitter3": "5.0.1",
"execa": "9.6.1",
"exifreader": "4.36.0",
@ -72,7 +74,6 @@
"three": "0.182.0",
"throttle-debounce": "5.0.2",
"tinycolor2": "1.6.0",
"v-code-diff": "1.13.1",
"vite": "7.3.1",
"vue": "3.5.26",
"wanakana": "5.3.1"

View File

@ -9,29 +9,40 @@ SPDX-License-Identifier: AGPL-3.0-only
:class="[$style.codeBlockRoot, {
[$style.codeEditor]: codeEditor,
[$style.outerStyle]: !codeEditor && withOuterStyle,
[$style.withMaxHeight]: maxHeight != null,
[$style.dark]: darkMode,
[$style.light]: !darkMode,
}]" v-html="html"></div>
</template>
<script lang="ts" setup>
import { computed, ref, watch } from 'vue';
import { computed, ref, shallowRef, watch } from 'vue';
import { bundledLanguagesInfo } from 'shiki/langs';
import type { transformerNotationDiff as transformerNotationDiff_typeReferenceOnly } from '@shikijs/transformers';
import type { diffLines as diffLines_typeReferenceOnly } from 'diff';
import type { BundledLanguage } from 'shiki/langs';
import { getHighlighter, getTheme } from '@/utility/code-highlighter.js';
import { store } from '@/store.js';
const props = withDefaults(defineProps<{
code: string;
diffBase?: string;
lang?: string;
codeEditor?: boolean;
withOuterStyle?: boolean;
maxHeight?: number | null;
}>(), {
codeEditor: false,
withOuterStyle: true,
maxHeight: null,
});
const maxHeight = computed(() => props.maxHeight != null ? `${props.maxHeight}px` : null);
const highlighter = await getHighlighter();
const transformerNotationDiff = shallowRef<typeof transformerNotationDiff_typeReferenceOnly | null>(null);
const diffLines = shallowRef<typeof diffLines_typeReferenceOnly | null>(null);
const darkMode = store.r.darkMode;
const codeLang = ref<BundledLanguage | 'aiscript'>('js');
@ -40,13 +51,34 @@ const [lightThemeName, darkThemeName] = await Promise.all([
getTheme('dark', true),
]);
const html = computed(() => highlighter.codeToHtml(props.code, {
const code = computed(() => {
if (props.diffBase != null && diffLines.value != null) {
const diffedLines = diffLines.value(props.diffBase, props.code);
const diffed = diffedLines.map((part) => {
if (part.added) {
return part.value.split('\n').map(line => line ? `${line} // [!code ++]` : line).join('\n');
} else if (part.removed) {
return part.value.split('\n').map(line => line ? `${line} // [!code --]` : line).join('\n');
} else {
return part.value;
}
}).join('');
return diffed;
} else {
return props.code;
}
});
const html = computed(() => highlighter.codeToHtml(code.value, {
lang: codeLang.value,
themes: {
fallback: 'dark-plus',
light: lightThemeName,
dark: darkThemeName,
},
transformers: props.diffBase != null && transformerNotationDiff.value != null
? [transformerNotationDiff.value({})]
: [],
defaultColor: false,
cssVariablePrefix: '--shiki-',
}));
@ -73,6 +105,19 @@ async function fetchLanguage(to: string): Promise<void> {
}
}
watch(() => props.diffBase, async (to) => {
if (to != null) {
if (transformerNotationDiff.value == null) {
const { transformerNotationDiff: tf } = await import('@shikijs/transformers');
transformerNotationDiff.value = tf;
}
if (diffLines.value == null) {
const { diffLines: dl } = await import('diff');
diffLines.value = dl;
}
}
}, { immediate: true });
watch(() => props.lang, (to) => {
if (codeLang.value === to || !to) return;
return new Promise((resolve) => {
@ -96,6 +141,33 @@ watch(() => props.lang, (to) => {
& code {
font-family: Consolas, Monaco, Andale Mono, Ubuntu Mono, monospace;
}
&>code {
display: block;
min-width: fit-content;
}
& :global(.line) {
display: inline-block;
width: 100%;
}
}
.codeBlockRoot :global(.shiki.has-diff) {
& :global(.line.diff.remove) {
background-color: rgba(244, 63, 94, .14);
text-decoration: line-through;
}
& :global(.line.diff.add) {
background-color: rgba(75, 192, 107, .14);
}
}
.codeBlockRoot.withMaxHeight :global(.shiki) {
max-height: v-bind(maxHeight);
scrollbar-color: var(--MI_THEME-scrollbarHandle) transparent;
scrollbar-width: thin;
}
.outerStyle.codeBlockRoot :global(.shiki) {

View File

@ -21,14 +21,17 @@ SPDX-License-Identifier: AGPL-3.0-only
v-if="show && lang"
class="_selectable"
:code="code"
:diffBase="diffBase"
:lang="lang"
:withOuterStyle="withOuterStyle"
:maxHeight="props.maxHeight"
/>
<pre
v-else-if="show"
class="_selectable"
:class="[$style.codeBlockFallbackRoot, {
[$style.outerStyle]: withOuterStyle,
[$style.withMaxHeight]: maxHeight != null,
}]"
><code :class="$style.codeBlockFallbackCode">{{ code }}</code></pre>
<button v-else :class="$style.codePlaceholderRoot" @click="show = true">
@ -41,25 +44,33 @@ SPDX-License-Identifier: AGPL-3.0-only
</div>
</template>
<script lang="ts" setup>
import { defineAsyncComponent, ref } from 'vue';
import { i18n } from '@/i18n.js';
import { copyToClipboard } from '@/utility/copy-to-clipboard.js';
import { prefer } from '@/preferences.js';
const props = withDefaults(defineProps<{
<script lang="ts">
export type MkCodeProps = {
code: string;
diffBase?: string;
forceShow?: boolean;
copyButton?: boolean;
withOuterStyle?: boolean;
lang?: string;
}>(), {
maxHeight?: number | null;
};
</script>
<script lang="ts" setup>
import { defineAsyncComponent, ref, computed } from 'vue';
import { i18n } from '@/i18n.js';
import { copyToClipboard } from '@/utility/copy-to-clipboard.js';
import { prefer } from '@/preferences.js';
const props = withDefaults(defineProps<MkCodeProps>(), {
copyButton: true,
forceShow: false,
withOuterStyle: true,
maxHeight: null,
});
const show = ref(props.forceShow === true ? true : !prefer.s.dataSaver.code);
const maxHeight = computed(() => props.maxHeight != null ? `${props.maxHeight}px` : null);
const XCode = defineAsyncComponent(() => import('@/components/MkCode.core.vue'));
@ -94,6 +105,12 @@ function copy() {
display: block;
overflow-wrap: anywhere;
overflow: auto;
&.withMaxHeight {
scrollbar-color: var(--MI_THEME-scrollbarHandle) transparent;
scrollbar-width: thin;
max-height: v-bind(maxHeight);
}
}
.outerStyle.codeBlockFallbackRoot {

View File

@ -0,0 +1,50 @@
/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
/* eslint-disable @typescript-eslint/explicit-function-return-type */
/* eslint-disable import/no-default-export */
import type { StoryObj } from '@storybook/vue3';
import MkCodeDiff from './MkCodeDiff.vue';
const code = `for (let i, 100) {
<: if (i % 15 == 0) "FizzBuzz"
elif (i % 3 == 0) "Fizz"
elif (i % 5 == 0) "Buzz"
else i
}`;
const diffBase = `for (let i, 100) {
<: if (i % 3 == 0) "Fizz"
elif (i % 5 == 0) "Buzz"
else i
}`;
export const Default = {
render(args) {
return {
components: {
MkCodeDiff,
},
setup() {
return {
args,
};
},
computed: {
props() {
return {
...this.args,
};
},
},
template: '<MkCodeDiff v-bind="props" />',
};
},
args: {
code,
diffBase,
lang: 'is',
},
parameters: {
layout: 'centered',
},
} satisfies StoryObj<typeof MkCodeDiff>;

View File

@ -0,0 +1,14 @@
<!--
SPDX-FileCopyrightText: syuilo and misskey-project
SPDX-License-Identifier: AGPL-3.0-only
-->
<template>
<MkCode v-bind="props" />
</template>
<script lang="ts" setup>
import MkCode from '@/components/MkCode.vue';
import type { MkCodeProps } from '@/components/MkCode.vue';
const props = defineProps<MkCodeProps & { diffBase: string }>();
</script>

View File

@ -131,22 +131,29 @@ SPDX-License-Identifier: AGPL-3.0-only
<MkTime :time="log.createdAt"/>
</template>
<div>
<div class="_gaps_s">
<div style="display: flex; gap: var(--MI-margin); flex-wrap: wrap;">
<div style="flex: 1;">{{ i18n.ts.moderator }}: <MkA :to="`/admin/user/${log.userId}`" class="_link">@{{ log.user?.username }}</MkA></div>
<div style="flex: 1;">{{ i18n.ts.dateAndTime }}: <MkTime :time="log.createdAt" mode="detail"/></div>
</div>
<template v-if="log.type === 'updateServerSettings'">
<div :class="$style.diff">
<CodeDiff :context="5" :hideHeader="true" :oldString="JSON5.stringify(log.info.before, null, '\t')" :newString="JSON5.stringify(log.info.after, null, '\t')" language="javascript" maxHeight="300px"/>
</div>
<MkCodeDiff
lang="js"
forceShow
:code="JSON5.stringify(log.info.after, null, '\t')"
:diffBase="JSON5.stringify(log.info.before, null, '\t')"
:maxHeight="300"
></MkCodeDiff>
</template>
<template v-else-if="log.type === 'updateUserNote'">
<div>{{ i18n.ts.user }}: {{ log.info.userId }}</div>
<div :class="$style.diff">
<CodeDiff :context="5" :hideHeader="true" :oldString="log.info.before ?? ''" :newString="log.info.after ?? ''" maxHeight="300px"/>
</div>
<MkCodeDiff
forceShow
:code="log.info.after ?? ''"
:diffBase="log.info.before ?? ''"
:maxHeight="300"
></MkCodeDiff>
</template>
<template v-else-if="log.type === 'suspend'">
<div>{{ i18n.ts.user }}: <MkA :to="`/admin/user/${log.info.userId}`" class="_link">@{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</MkA></div>
@ -155,9 +162,13 @@ SPDX-License-Identifier: AGPL-3.0-only
<div>{{ i18n.ts.user }}: <MkA :to="`/admin/user/${log.info.userId}`" class="_link">@{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</MkA></div>
</template>
<template v-else-if="log.type === 'updateRole'">
<div :class="$style.diff">
<CodeDiff :context="5" :hideHeader="true" :oldString="JSON5.stringify(log.info.before, null, '\t')" :newString="JSON5.stringify(log.info.after, null, '\t')" language="javascript" maxHeight="300px"/>
</div>
<MkCodeDiff
lang="js"
forceShow
:code="JSON5.stringify(log.info.after, null, '\t')"
:diffBase="JSON5.stringify(log.info.before, null, '\t')"
:maxHeight="300"
></MkCodeDiff>
</template>
<template v-else-if="log.type === 'assignRole'">
<div>{{ i18n.ts.user }}: {{ log.info.userId }}</div>
@ -169,54 +180,91 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<template v-else-if="log.type === 'updateCustomEmoji'">
<div>{{ i18n.ts.emoji }}: {{ log.info.emojiId }}</div>
<div :class="$style.diff">
<CodeDiff :context="5" :hideHeader="true" :oldString="JSON5.stringify(log.info.before, null, '\t')" :newString="JSON5.stringify(log.info.after, null, '\t')" language="javascript" maxHeight="300px"/>
</div>
<MkCodeDiff
lang="js"
forceShow
:code="JSON5.stringify(log.info.after, null, '\t')"
:diffBase="JSON5.stringify(log.info.before, null, '\t')"
:maxHeight="300"
></MkCodeDiff>
</template>
<template v-else-if="log.type === 'updateAd'">
<div :class="$style.diff">
<CodeDiff :context="5" :hideHeader="true" :oldString="JSON5.stringify(log.info.before, null, '\t')" :newString="JSON5.stringify(log.info.after, null, '\t')" language="javascript" maxHeight="300px"/>
</div>
<MkCodeDiff
lang="js"
forceShow
:code="JSON5.stringify(log.info.after, null, '\t')"
:diffBase="JSON5.stringify(log.info.before, null, '\t')"
:maxHeight="300"
></MkCodeDiff>
</template>
<template v-else-if="log.type === 'updateGlobalAnnouncement'">
<div :class="$style.diff">
<CodeDiff :context="5" :hideHeader="true" :oldString="JSON5.stringify(log.info.before, null, '\t')" :newString="JSON5.stringify(log.info.after, null, '\t')" language="javascript" maxHeight="300px"/>
</div>
<MkCodeDiff
lang="js"
forceShow
:code="JSON5.stringify(log.info.after, null, '\t')"
:diffBase="JSON5.stringify(log.info.before, null, '\t')"
:maxHeight="300"
></MkCodeDiff>
</template>
<template v-else-if="log.type === 'updateUserAnnouncement'">
<div :class="$style.diff">
<CodeDiff :context="5" :hideHeader="true" :oldString="JSON5.stringify(log.info.before, null, '\t')" :newString="JSON5.stringify(log.info.after, null, '\t')" language="javascript" maxHeight="300px"/>
</div>
<MkCodeDiff
lang="js"
forceShow
:code="JSON5.stringify(log.info.after, null, '\t')"
:diffBase="JSON5.stringify(log.info.before, null, '\t')"
:maxHeight="300"
></MkCodeDiff>
</template>
<template v-else-if="log.type === 'updateAvatarDecoration'">
<div :class="$style.diff">
<CodeDiff :context="5" :hideHeader="true" :oldString="JSON5.stringify(log.info.before, null, '\t')" :newString="JSON5.stringify(log.info.after, null, '\t')" language="javascript" maxHeight="300px"/>
</div>
<MkCodeDiff
lang="js"
forceShow
:code="JSON5.stringify(log.info.after, null, '\t')"
:diffBase="JSON5.stringify(log.info.before, null, '\t')"
:maxHeight="300"
></MkCodeDiff>
</template>
<template v-else-if="log.type === 'updateRemoteInstanceNote'">
<div :class="$style.diff">
<CodeDiff :context="5" :hideHeader="true" :oldString="log.info.before ?? ''" :newString="log.info.after ?? ''" maxHeight="300px"/>
</div>
<MkCodeDiff
forceShow
:code="log.info.after ?? ''"
:diffBase="log.info.before ?? ''"
:maxHeight="300"
></MkCodeDiff>
</template>
<template v-else-if="log.type === 'updateSystemWebhook'">
<div :class="$style.diff">
<CodeDiff :context="5" :hideHeader="true" :oldString="JSON5.stringify(log.info.before, null, '\t')" :newString="JSON5.stringify(log.info.after, null, '\t')" language="javascript" maxHeight="300px"/>
</div>
<MkCodeDiff
lang="js"
forceShow
:code="JSON5.stringify(log.info.after, null, '\t')"
:diffBase="JSON5.stringify(log.info.before, null, '\t')"
:maxHeight="300"
></MkCodeDiff>
</template>
<template v-else-if="log.type === 'updateAbuseReportNotificationRecipient'">
<div :class="$style.diff">
<CodeDiff :context="5" :hideHeader="true" :oldString="JSON5.stringify(log.info.before, null, '\t')" :newString="JSON5.stringify(log.info.after, null, '\t')" language="javascript" maxHeight="300px"/>
</div>
<MkCodeDiff
lang="js"
forceShow
:code="JSON5.stringify(log.info.after, null, '\t')"
:diffBase="JSON5.stringify(log.info.before, null, '\t')"
:maxHeight="300"
></MkCodeDiff>
</template>
<template v-else-if="log.type === 'updateAbuseReportNote'">
<div :class="$style.diff">
<CodeDiff :context="5" :hideHeader="true" :oldString="log.info.before ?? ''" :newString="log.info.after ?? ''" maxHeight="300px"/>
</div>
<MkCodeDiff
forceShow
:code="log.info.after ?? ''"
:diffBase="log.info.before ?? ''"
:maxHeight="300"
></MkCodeDiff>
</template>
<template v-else-if="log.type === 'updateProxyAccountDescription'">
<div :class="$style.diff">
<CodeDiff :context="5" :hideHeader="true" :oldString="log.info.before ?? ''" :newString="log.info.after ?? ''" maxHeight="300px"/>
</div>
<MkCodeDiff
forceShow
:code="log.info.after ?? ''"
:diffBase="log.info.before ?? ''"
:maxHeight="300"
></MkCodeDiff>
</template>
<details>
@ -229,7 +277,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import * as Misskey from 'misskey-js';
import { CodeDiff } from 'v-code-diff';
import MkCodeDiff from '@/components/MkCodeDiff.vue';
import JSON5 from 'json5';
import { i18n } from '@/i18n.js';
import MkFolder from '@/components/MkFolder.vue';
@ -240,13 +288,6 @@ const props = defineProps<{
</script>
<style lang="scss" module>
.diff {
background: #fff;
color: #000;
border-radius: 6px;
overflow: clip;
}
.logYellow {
color: var(--MI_THEME-warn);
}

View File

@ -32,8 +32,8 @@ importers:
specifier: 8.5.6
version: 8.5.6
tar:
specifier: 7.5.6
version: 7.5.6
specifier: 7.5.7
version: 7.5.7
terser:
specifier: 5.46.0
version: 5.46.0
@ -677,6 +677,9 @@ importers:
'@sentry/vue':
specifier: 10.34.0
version: 10.34.0(vue@3.5.26(typescript@5.9.3))
'@shikijs/transformers':
specifier: 3.21.0
version: 3.21.0
'@syuilo/aiscript':
specifier: 1.2.1
version: 1.2.1
@ -731,6 +734,9 @@ importers:
date-fns:
specifier: 4.1.0
version: 4.1.0
diff:
specifier: 8.0.3
version: 8.0.3
eventemitter3:
specifier: 5.0.1
version: 5.0.1
@ -818,9 +824,6 @@ importers:
tinycolor2:
specifier: 1.6.0
version: 1.6.0
v-code-diff:
specifier: 1.13.1
version: 1.13.1(vue@3.5.26(typescript@5.9.3))
vite:
specifier: 7.3.1
version: 7.3.1(@types/node@24.10.9)(sass@1.97.2)(terser@5.46.0)(tsx@4.21.0)
@ -3726,6 +3729,9 @@ packages:
'@shikijs/themes@3.21.0':
resolution: {integrity: sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==}
'@shikijs/transformers@3.21.0':
resolution: {integrity: sha512-CZwvCWWIiRRiFk9/JKzdEooakAP8mQDtBOQ1TKiCaS2E1bYtyBCOkUzS8akO34/7ufICQ29oeSfkb3tT5KtrhA==}
'@shikijs/types@3.21.0':
resolution: {integrity: sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==}
@ -6244,9 +6250,6 @@ packages:
dezalgo@1.0.4:
resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==}
diff-match-patch@1.0.5:
resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==}
diff-sequences@29.6.3:
resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@ -6255,8 +6258,8 @@ packages:
resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
engines: {node: '>=0.3.1'}
diff@8.0.2:
resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==}
diff@8.0.3:
resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==}
engines: {node: '>=0.3.1'}
dijkstrajs@1.0.3:
@ -7117,10 +7120,6 @@ packages:
headers-polyfill@4.0.3:
resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==}
highlight.js@11.11.1:
resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
engines: {node: '>=12.0.0'}
hosted-git-info@2.8.9:
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
@ -10178,8 +10177,8 @@ packages:
engines: {node: '>=10'}
deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me
tar@7.5.6:
resolution: {integrity: sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==}
tar@7.5.7:
resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==}
engines: {node: '>=18'}
deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me
@ -10661,15 +10660,6 @@ packages:
resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
hasBin: true
v-code-diff@1.13.1:
resolution: {integrity: sha512-9LTV1dZhC1oYTntyB94vfumGgsfIX5u0fEDSI2Txx4vCE5sI5LkgeLJRRy2SsTVZmDcV+R73sBr0GpPn0TJxMw==}
peerDependencies:
'@vue/composition-api': ^1.4.9
vue: ^2.6.0 || >=3.0.0
peerDependenciesMeta:
'@vue/composition-api':
optional: true
v8-to-istanbul@9.3.0:
resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
engines: {node: '>=10.12.0'}
@ -10831,17 +10821,6 @@ packages:
vue-component-type-helpers@3.2.2:
resolution: {integrity: sha512-x8C2nx5XlUNM0WirgfTkHjJGO/ABBxlANZDtHw2HclHtQnn+RFPTnbjMJn8jHZW4TlUam0asHcA14lf1C6Jb+A==}
vue-demi@0.14.10:
resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
engines: {node: '>=12'}
hasBin: true
peerDependencies:
'@vue/composition-api': ^1.0.0-rc.1
vue: ^3.0.0-0 || ^2.6.0
peerDependenciesMeta:
'@vue/composition-api':
optional: true
vue-docgen-api@4.79.2:
resolution: {integrity: sha512-n9ENAcs+40awPZMsas7STqjkZiVlIjxIKgiJr5rSohDP0/JCrD9VtlzNojafsA1MChm/hz2h3PDtUedx3lbgfA==}
peerDependencies:
@ -13107,7 +13086,7 @@ snapshots:
'@rushstack/rig-package': 0.6.0
'@rushstack/terminal': 0.21.0(@types/node@24.10.9)
'@rushstack/ts-command-line': 5.1.7(@types/node@24.10.9)
diff: 8.0.2
diff: 8.0.3
lodash: 4.17.23
minimatch: 10.0.3
resolve: 1.22.11
@ -14124,6 +14103,11 @@ snapshots:
dependencies:
'@shikijs/types': 3.21.0
'@shikijs/transformers@3.21.0':
dependencies:
'@shikijs/core': 3.21.0
'@shikijs/types': 3.21.0
'@shikijs/types@3.21.0':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
@ -17214,13 +17198,11 @@ snapshots:
asap: 2.0.6
wrappy: 1.0.2
diff-match-patch@1.0.5: {}
diff-sequences@29.6.3: {}
diff@5.2.0: {}
diff@8.0.2: {}
diff@8.0.3: {}
dijkstrajs@1.0.3: {}
@ -18376,8 +18358,6 @@ snapshots:
headers-polyfill@4.0.3: {}
highlight.js@11.11.1: {}
hosted-git-info@2.8.9: {}
hosted-git-info@4.1.0:
@ -20126,7 +20106,7 @@ snapshots:
nopt: 9.0.0
proc-log: 6.1.0
semver: 7.7.3
tar: 7.5.6
tar: 7.5.7
tinyglobby: 0.2.15
which: 6.0.0
transitivePeerDependencies:
@ -21992,7 +21972,7 @@ snapshots:
yallist: 4.0.0
optional: true
tar@7.5.6:
tar@7.5.7:
dependencies:
'@isaacs/fs-minipass': 4.0.1
chownr: 3.0.0
@ -22417,14 +22397,6 @@ snapshots:
uuid@9.0.1: {}
v-code-diff@1.13.1(vue@3.5.26(typescript@5.9.3)):
dependencies:
diff: 5.2.0
diff-match-patch: 1.0.5
highlight.js: 11.11.1
vue: 3.5.26(typescript@5.9.3)
vue-demi: 0.14.10(vue@3.5.26(typescript@5.9.3))
v8-to-istanbul@9.3.0:
dependencies:
'@jridgewell/trace-mapping': 0.3.31
@ -22562,10 +22534,6 @@ snapshots:
vue-component-type-helpers@3.2.2: {}
vue-demi@0.14.10(vue@3.5.26(typescript@5.9.3)):
dependencies:
vue: 3.5.26(typescript@5.9.3)
vue-docgen-api@4.79.2(vue@3.5.26(typescript@5.9.3)):
dependencies:
'@babel/parser': 7.28.5

View File

@ -29,7 +29,6 @@ onlyBuiltDependencies:
- re2
- sharp
- utf-8-validate
- v-code-diff
- vue-demi
ignorePatchFailures: false
minimumReleaseAge: 10080 # delay 7days to mitigate supply-chain attack