From 0d75636ee7b8bf7bc9ebdad67717901b93523552 Mon Sep 17 00:00:00 2001 From: thororen <78185467+thororen1234@users.noreply.github.com> Date: Sun, 12 Apr 2026 15:14:15 -0400 Subject: [PATCH 01/18] fix Decor, BetterSession & Experiments (#4107) --- .../betterSessions/components/RenameButton.tsx | 12 ++++++++++++ src/plugins/betterSessions/components/icons.tsx | 8 ++++++++ src/plugins/betterSessions/index.tsx | 16 ++++------------ src/plugins/betterSessions/styles.css | 7 +++++++ src/plugins/decor/index.tsx | 2 +- src/plugins/experiments/index.tsx | 16 ++++++++++++---- src/plugins/reviewDB/components/ReviewsView.tsx | 7 ++++--- 7 files changed, 48 insertions(+), 20 deletions(-) diff --git a/src/plugins/betterSessions/components/RenameButton.tsx b/src/plugins/betterSessions/components/RenameButton.tsx index b9857f01d..c1c24d2e2 100644 --- a/src/plugins/betterSessions/components/RenameButton.tsx +++ b/src/plugins/betterSessions/components/RenameButton.tsx @@ -30,3 +30,15 @@ export function RenameButton({ session, state }: { session: SessionInfo["session ); } + +export function NewButton() { + return ( + + ); +} diff --git a/src/plugins/betterSessions/components/icons.tsx b/src/plugins/betterSessions/components/icons.tsx index a9f0f989e..cbfbe0053 100644 --- a/src/plugins/betterSessions/components/icons.tsx +++ b/src/plugins/betterSessions/components/icons.tsx @@ -25,6 +25,7 @@ export const DiscordIcon = (props: React.PropsWithChildren @@ -35,6 +36,7 @@ export const ChromeIcon = (props: React.PropsWithChildren @@ -48,6 +50,7 @@ export const EdgeIcon = (props: React.PropsWithChildren> {...props} fill="currentColor" viewBox="0 0 24 24" + style={{ marginLeft: "0.0.0043403em", marginTop: "0.46px" }} > @@ -58,6 +61,7 @@ export const FirefoxIcon = (props: React.PropsWithChildren @@ -68,6 +72,7 @@ export const IEIcon = (props: React.PropsWithChildren>) {...props} fill="currentColor" viewBox="0 0 512 512" + style={{ marginLeft: "0.0.00434028em", marginTop: "0.456px" }} > @@ -78,6 +83,7 @@ export const OperaIcon = (props: React.PropsWithChildren {...props} fill="currentColor" viewBox="0 0 496 512" + style={{ marginLeft: "0.00434027777em", marginTop: "2px" }} > @@ -88,6 +94,7 @@ export const SafariIcon = (props: React.PropsWithChildren @@ -98,6 +105,7 @@ export const UnknownIcon = (props: React.PropsWithChildren diff --git a/src/plugins/betterSessions/index.tsx b/src/plugins/betterSessions/index.tsx index b6dabbaa0..a0b5291e7 100644 --- a/src/plugins/betterSessions/index.tsx +++ b/src/plugins/betterSessions/index.tsx @@ -26,7 +26,7 @@ import definePlugin, { OptionType } from "@utils/types"; import { findComponentByCodeLazy, findCssClassesLazy, findStoreLazy } from "@webpack"; import { Constants, React, RestAPI, SettingsRouter, Tooltip } from "@webpack/common"; -import { RenameButton } from "./components/RenameButton"; +import { NewButton, RenameButton } from "./components/RenameButton"; import { Session, SessionInfo } from "./types"; import { fetchNamesFromDataStore, getDefaultName, GetOsColor, GetPlatformIcon, savedSessionsCache, saveSessionsToDataStore } from "./utils"; @@ -74,8 +74,8 @@ export default definePlugin({ }, // Replace the icon { - match: /children:\[(?=.{0,125}?width:"32")(?<=,icon:(\i)\}.+?)/, - replace: "children:[$self.renderIcon({...arguments[0],DeviceIcon:$1}),false&&" + match: /(?<=Icon:(\i).{0,250}className:\i\.\i,children:\[)/, + replace: "$self.renderIcon({...arguments[0],DeviceIcon:$1}),false&&" } ] } @@ -92,15 +92,7 @@ export default definePlugin({ <> {title} {(savedSession == null || savedSession.isNew) && ( -
- NEW -
+ )} diff --git a/src/plugins/betterSessions/styles.css b/src/plugins/betterSessions/styles.css index 47613ac71..fafba1ed0 100644 --- a/src/plugins/betterSessions/styles.css +++ b/src/plugins/betterSessions/styles.css @@ -7,4 +7,11 @@ .vc-betterSessions-rename-btn { margin-left: 4px; translate: 0 -2px; +} + +.vc-betterSessions-new-btn { + margin-left: 4px; + translate: 0 -2px; + pointer-events: none; + padding: 1px 4px; } \ No newline at end of file diff --git a/src/plugins/decor/index.tsx b/src/plugins/decor/index.tsx index fc2e93a99..f47cc1f1b 100644 --- a/src/plugins/decor/index.tsx +++ b/src/plugins/decor/index.tsx @@ -50,7 +50,7 @@ export default definePlugin({ find: "80,onlyAnimateOnHoverOrFocus:!", replacement: [ { - match: /(?<==)\i=>{let{children.{20,200}isSelected:\i=!1.{0,5}\}=\i/, + match: /(?<==)\i=>{let{children.{20,200}isSelected:\i.{0,5}\}=\i/, replace: "$self.DecorationGridItem=$&", }, { diff --git a/src/plugins/experiments/index.tsx b/src/plugins/experiments/index.tsx index 8085a0ca3..ede964457 100644 --- a/src/plugins/experiments/index.tsx +++ b/src/plugins/experiments/index.tsx @@ -74,10 +74,18 @@ export default definePlugin({ }, { find: 'placeholder:"Search experiments"', - replacement: { - match: /(?<=children:\[)(?=\(0,\i\.jsx?\)\(\i\.\i,{placeholder:"Search experiments")/, - replace: "$self.WarningCard()," - } + replacement: [ + { + match: /(?<=children:\[)(?=null!=.{0,150}"Installation ID:)/, + replace: "$self.WarningCard()," + }, + // for some reason the installation id and copy buttons are on + // different lines so it looks stupid when the card above is added + { + match: /(?<=,marginBottom:16)(?=\},children:\[)/, + replace: ',flexDirection:"row",alignItems:"center"' + } + ] }, // Change top right toolbar button from the help one to the dev one { diff --git a/src/plugins/reviewDB/components/ReviewsView.tsx b/src/plugins/reviewDB/components/ReviewsView.tsx index 55bedf48f..e53e0bbd5 100644 --- a/src/plugins/reviewDB/components/ReviewsView.tsx +++ b/src/plugins/reviewDB/components/ReviewsView.tsx @@ -65,10 +65,11 @@ export default function ReviewsView({ fallbackValue: null, deps: [refetchSignal, signal, page], onSuccess: data => { - if (settings.store.hideBlockedUsers) - data!.reviews = data!.reviews?.filter(r => !RelationshipStore.isBlocked(r.sender.discordID)); + if (settings.store.hideBlockedUsers) data!.reviews = data!.reviews?.filter(r => !RelationshipStore.isBlocked(r.sender.discordID)); + const systemReviews = data!.reviews.filter(r => r.type === ReviewType.System); + const normalReviews = data!.reviews.filter(r => r.type !== ReviewType.System); - data!.reviews.reverse(); + data!.reviews = [...systemReviews, ...normalReviews.reverse()]; scrollToTop?.(); onFetchReviews(data!); } From 38961f7844bb0b7cc012f9d35e1fc246d76bab55 Mon Sep 17 00:00:00 2001 From: thororen <78185467+thororen1234@users.noreply.github.com> Date: Wed, 15 Apr 2026 17:07:06 -0400 Subject: [PATCH 02/18] fix Select menus not showing (#4112) --- src/plugins/noDefaultHangStatus/README.md | 5 ----- src/plugins/noDefaultHangStatus/index.ts | 24 ----------------------- src/plugins/noMosaic/index.ts | 4 ++-- src/plugins/viewIcons/index.tsx | 2 +- src/webpack/common/components.ts | 4 ++-- 5 files changed, 5 insertions(+), 34 deletions(-) delete mode 100644 src/plugins/noDefaultHangStatus/README.md delete mode 100644 src/plugins/noDefaultHangStatus/index.ts diff --git a/src/plugins/noDefaultHangStatus/README.md b/src/plugins/noDefaultHangStatus/README.md deleted file mode 100644 index e6bc9f83a..000000000 --- a/src/plugins/noDefaultHangStatus/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# NoDefaultHangStatus - -Disable the default hang status when joining voice channels - -![Visualization](https://github.com/Vendicated/Vencord/assets/24937357/329a9742-236f-48f7-94ff-c3510eca505a) diff --git a/src/plugins/noDefaultHangStatus/index.ts b/src/plugins/noDefaultHangStatus/index.ts deleted file mode 100644 index 2245c9101..000000000 --- a/src/plugins/noDefaultHangStatus/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Vencord, a Discord client mod - * Copyright (c) 2024 Vendicated and contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import { Devs } from "@utils/constants"; -import definePlugin from "@utils/types"; - -export default definePlugin({ - name: "NoDefaultHangStatus", - description: "Disable the default hang status when joining voice channels", - authors: [Devs.D3SOX], - - patches: [ - { - find: ".CHILLING)", - replacement: { - match: /{enableHangStatus:(\i),/, - replace: "{_enableHangStatus:$1=false," - } - } - ] -}); diff --git a/src/plugins/noMosaic/index.ts b/src/plugins/noMosaic/index.ts index 4ec64cc39..c52e19a6b 100644 --- a/src/plugins/noMosaic/index.ts +++ b/src/plugins/noMosaic/index.ts @@ -29,8 +29,8 @@ export default definePlugin({ { find: '"PLAINTEXT_PREVIEW":"OTHER"', replacement: { - match: /=>"IMAGE"===\i\|\|"VIDEO"===\i(?:\|\|("VISUAL_PLACEHOLDER"===\i))?;/, - replace: (_, visualPlaceholderPred) => visualPlaceholderPred != null ? `=>${visualPlaceholderPred};` : "=>false;" + match: /return"IMAGE"===\i\|\|"VIDEO"===\i(?:\|\|("VISUAL_PLACEHOLDER"===\i)\|\|\i&&"CLIP"===\i)?/, + replace: (_, visualPlaceholderPred) => visualPlaceholderPred != null ? `return ${visualPlaceholderPred}` : "return false" } }, { diff --git a/src/plugins/viewIcons/index.tsx b/src/plugins/viewIcons/index.tsx index 0e9c6b7f6..17130e191 100644 --- a/src/plugins/viewIcons/index.tsx +++ b/src/plugins/viewIcons/index.tsx @@ -197,7 +197,7 @@ export default definePlugin({ patches: [ // Avatar component used in User DMs "User Profile" popup in the right and User Profile Modal pfp { - find: "imageClassName:null!=", + find: ".AVATAR),{trackUserProfileAction:", replacement: { match: /avatarSrc:(\i),eventHandlers:(\i).+?"div",.{0,100}className:\i,/, replace: "$&style:{cursor:\"pointer\"},onClick:()=>{$self.openAvatar($1)},", diff --git a/src/webpack/common/components.ts b/src/webpack/common/components.ts index 2a1ca4efb..98d453abf 100644 --- a/src/webpack/common/components.ts +++ b/src/webpack/common/components.ts @@ -58,8 +58,8 @@ export const TooltipContainer = TooltipContainerComponent as never; export const TextInput = waitForComponent("TextInput", filters.componentByCode("#{intl::MAXIMUM_LENGTH_ERROR}", '"input"')); export const TextArea = waitForComponent("TextArea", filters.componentByCode("this.getPaddingRight()},id:")); -export const Select = waitForComponent("Select", filters.componentByCode('"Select"')); -export const SearchableSelect = waitForComponent("SearchableSelect", filters.componentByCode('"SearchableSelect"')); +export const Select = waitForComponent("Select", filters.componentByCode('selectionMode:"single",onSelectionChange:', "isSelected:")); +export const SearchableSelect = waitForComponent("SearchableSelect", filters.componentByCode('?"multiple":"single",required:')); export const Slider = waitForComponent("Slider", filters.componentByCode("markDash", "this.renderMark(")); export const Popout = waitForComponent("Popout", filters.componentByCode("ref:this.ref,", "renderPopout:this.renderPopout,")); export const Dialog = waitForComponent("Dialog", filters.componentByCode('role:"dialog",tabIndex:-1')); From 541e50dcf45eefee104916dc64805439cb24a5f0 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Wed, 15 Apr 2026 23:09:10 +0200 Subject: [PATCH 03/18] 1.14.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 088ffe3ee..42821bdc0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "vencord", "private": "true", - "version": "1.14.6", + "version": "1.14.7", "description": "The cutest Discord client mod", "homepage": "https://github.com/Vendicated/Vencord#readme", "bugs": { From 610c3719c80004c5641be20bcb2add90a0c48ad1 Mon Sep 17 00:00:00 2001 From: V Date: Thu, 16 Apr 2026 03:42:59 +0200 Subject: [PATCH 04/18] Introduce plugin tags for easier searching (#3553) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: sadan4 <117494111+sadan4@users.noreply.github.com> --- scripts/generatePluginList.ts | 11 ++- src/components/CheckedTextInput.tsx | 12 +-- .../settings/tabs/plugins/PluginModal.css | 22 +++++- .../settings/tabs/plugins/PluginModal.tsx | 22 ++++-- .../settings/tabs/plugins/index.tsx | 74 ++++++++++++------- .../settings/tabs/plugins/styles.css | 7 +- .../settings/tabs/sync/CloudTab.tsx | 2 +- .../accountPanelServerProfile/index.tsx | 1 + src/plugins/alwaysAnimate/index.ts | 1 + src/plugins/alwaysExpandRoles/index.ts | 1 + src/plugins/alwaysTrust/index.ts | 1 + src/plugins/anonymiseFileNames/index.tsx | 1 + src/plugins/appleMusic.desktop/index.tsx | 1 + src/plugins/arRPC.web/index.tsx | 1 + .../index.ts | 1 + src/plugins/betterFolders/index.tsx | 2 +- src/plugins/betterGifAltText/index.ts | 1 + src/plugins/betterGifPicker/index.ts | 1 + src/plugins/betterNotes/index.tsx | 1 + src/plugins/betterRoleContext/index.tsx | 1 + src/plugins/betterRoleDot/index.ts | 1 + src/plugins/betterSessions/index.tsx | 2 +- src/plugins/betterSettings/index.tsx | 1 + src/plugins/betterUploadButton/index.ts | 1 + src/plugins/biggerStreamPreview/index.tsx | 1 + src/plugins/blurNsfw/index.ts | 1 + src/plugins/callTimer/index.tsx | 1 + src/plugins/characterCounter/index.tsx | 1 + src/plugins/clearURLs/index.ts | 1 + src/plugins/clientTheme/index.tsx | 1 + src/plugins/colorSighted/index.ts | 1 + src/plugins/consoleJanitor/index.tsx | 1 + src/plugins/consoleShortcuts/index.ts | 1 + src/plugins/copyEmojiMarkdown/index.tsx | 1 + src/plugins/copyFileContents/index.tsx | 1 + src/plugins/copyStickerLinks/index.tsx | 1 + src/plugins/copyUserURLs/index.tsx | 1 + src/plugins/crashHandler/index.ts | 2 +- src/plugins/ctrlEnterSend/index.ts | 1 + src/plugins/customCommands/index.ts | 3 +- src/plugins/customIdle/index.ts | 1 + src/plugins/customRPC/index.tsx | 1 + src/plugins/dearrow/index.tsx | 1 + src/plugins/decor/index.tsx | 1 + src/plugins/devCompanion.dev/index.tsx | 1 + src/plugins/disableCallIdle/index.ts | 1 + src/plugins/dontRoundMyTimestamps/index.ts | 1 + src/plugins/experiments/index.tsx | 1 + src/plugins/expressionCloner/index.tsx | 5 +- src/plugins/f8break/index.ts | 1 + src/plugins/fakeNitro/index.tsx | 1 + src/plugins/fakeProfileThemes/index.tsx | 1 + src/plugins/favEmojiFirst/index.ts | 1 + src/plugins/favGifSearch/index.tsx | 1 + src/plugins/fixCodeblockGap/index.ts | 1 + src/plugins/fixImagesQuality/index.tsx | 1 + .../fixSpotifyEmbeds.desktop/index.tsx | 1 + src/plugins/fixYoutubeEmbeds.desktop/index.ts | 1 + src/plugins/forceOwnerCrown/index.ts | 1 + src/plugins/friendInvites/index.ts | 1 + src/plugins/friendsSince/index.tsx | 1 + src/plugins/fullSearchContext/index.tsx | 1 + src/plugins/fullUserInChatbox/index.tsx | 1 + src/plugins/gameActivityToggle/index.tsx | 1 + src/plugins/gifPaste/index.ts | 1 + src/plugins/greetStickerPicker/index.tsx | 1 + src/plugins/hideAttachments/index.tsx | 1 + src/plugins/iLoveSpam/index.ts | 1 + src/plugins/ignoreActivities/index.tsx | 1 + src/plugins/imageFilename/index.ts | 1 + src/plugins/imageLink/index.ts | 1 + src/plugins/imageZoom/index.tsx | 3 +- src/plugins/implicitRelationships/index.ts | 1 + src/plugins/ircColors/index.ts | 1 + src/plugins/keepCurrentChannel/index.ts | 1 + src/plugins/lastfmRichPresence/index.tsx | 1 + src/plugins/loadingQuotes/index.ts | 1 + src/plugins/memberCount/index.tsx | 1 + src/plugins/mentionAvatars/index.tsx | 1 + src/plugins/messageClickActions/index.ts | 1 + src/plugins/messageLatency/index.tsx | 1 + src/plugins/messageLinkEmbeds/index.tsx | 1 + src/plugins/messageLogger/index.tsx | 1 + src/plugins/moreQuickReactions/index.ts | 1 + src/plugins/mutualGroupDMs/index.tsx | 1 + src/plugins/newGuildSettings/index.tsx | 3 +- src/plugins/noBlockedMessages/index.ts | 1 + src/plugins/noDeepLinks.web/index.ts | 1 + src/plugins/noDevtoolsWarning/index.ts | 1 + src/plugins/noF1/index.ts | 1 + src/plugins/noMaskedUrlPaste/index.ts | 1 + src/plugins/noMosaic/index.ts | 3 +- src/plugins/noOnboardingDelay/index.ts | 1 + src/plugins/noPendingCount/index.ts | 1 + src/plugins/noProfileThemes/index.ts | 1 + src/plugins/noReplyMention/index.tsx | 1 + src/plugins/noServerEmojis/index.ts | 1 + .../noSystemBadge.discordDesktop/index.ts | 1 + src/plugins/noTypingAnimation/index.ts | 1 + src/plugins/noUnblockToJump/index.ts | 1 + src/plugins/notificationVolume/index.ts | 1 + src/plugins/onePingPerDM/index.ts | 1 + src/plugins/oneko/index.ts | 1 + src/plugins/openInApp/index.ts | 1 + src/plugins/overrideForumDefaults/index.tsx | 1 + src/plugins/pauseInvitesForever/index.tsx | 3 +- src/plugins/permissionFreeWill/index.ts | 1 + src/plugins/permissionsViewer/index.tsx | 1 + src/plugins/petpet/index.ts | 1 + src/plugins/pictureInPicture/index.tsx | 1 + src/plugins/pinDms/index.tsx | 1 + src/plugins/plainFolderIcon/index.ts | 1 + src/plugins/platformIndicators/index.tsx | 1 + src/plugins/previewMessage/index.tsx | 1 + src/plugins/quickMention/index.tsx | 1 + src/plugins/quickReply/index.ts | 1 + src/plugins/reactErrorDecoder/index.ts | 3 +- .../readAllNotificationsButton/index.tsx | 1 + src/plugins/relationshipNotifier/index.ts | 1 + src/plugins/replaceGoogleSearch/index.tsx | 1 + src/plugins/replyTimestamp/index.tsx | 1 + src/plugins/revealAllSpoilers/index.ts | 2 +- src/plugins/reverseImageSearch/index.tsx | 3 +- src/plugins/reviewDB/index.tsx | 1 + src/plugins/roleColorEverywhere/index.tsx | 1 + src/plugins/secretRingTone/index.ts | 1 + src/plugins/seeSummaries/index.tsx | 1 + src/plugins/sendTimestamps/index.tsx | 1 + src/plugins/serverInfo/index.tsx | 3 +- src/plugins/serverListIndicators/index.tsx | 1 + src/plugins/shikiCodeblocks.desktop/index.ts | 1 + src/plugins/showAllMessageButtons/index.ts | 1 + src/plugins/showConnections/index.tsx | 1 + src/plugins/showHiddenChannels/index.tsx | 1 + src/plugins/showHiddenThings/index.ts | 3 +- src/plugins/showMeYourName/index.tsx | 1 + src/plugins/showTimeoutDuration/index.tsx | 1 + src/plugins/silentMessageToggle/index.tsx | 1 + src/plugins/silentTyping/index.tsx | 1 + src/plugins/sortFriendRequests/index.tsx | 1 + src/plugins/spotifyControls/index.tsx | 1 + src/plugins/spotifyCrack/index.ts | 1 + src/plugins/spotifyShareCommands/index.ts | 1 + src/plugins/startupTimings/index.tsx | 1 + src/plugins/stickerPaste/index.ts | 1 + src/plugins/streamerModeOnStream/index.ts | 1 + src/plugins/superReactionTweaks/index.ts | 1 + src/plugins/textReplace/index.tsx | 1 + src/plugins/themeAttributes/index.ts | 1 + src/plugins/translate/index.tsx | 1 + src/plugins/typingIndicator/index.tsx | 1 + src/plugins/typingTweaks/index.tsx | 1 + src/plugins/unindent/index.ts | 1 + src/plugins/unlockedAvatarZoom/index.ts | 1 + src/plugins/unsuppressEmbeds/index.tsx | 1 + src/plugins/userMessagesPronouns/index.ts | 1 + src/plugins/userVoiceShow/index.tsx | 1 + src/plugins/usrbg/index.tsx | 1 + src/plugins/validReply/index.ts | 1 + src/plugins/validUser/index.tsx | 3 +- src/plugins/vcDoubleClick/index.ts | 1 + src/plugins/vcNarrator/index.tsx | 1 + src/plugins/vencordToolbox/index.tsx | 1 + src/plugins/viewIcons/index.tsx | 3 +- src/plugins/viewRaw/index.tsx | 1 + src/plugins/voiceDownload/index.tsx | 1 + src/plugins/voiceMessages/index.tsx | 1 + src/plugins/volumeBooster/index.ts | 1 + src/plugins/webContextMenus.web/index.ts | 1 + src/plugins/webKeybinds.web/index.ts | 1 + src/plugins/webScreenShareFixes.web/index.ts | 1 + src/plugins/whoReacted/index.tsx | 1 + src/plugins/xsOverlay/index.tsx | 3 +- src/plugins/youtubeAdblock.desktop/index.ts | 1 + src/utils/types.ts | 31 +++++++- 175 files changed, 313 insertions(+), 67 deletions(-) diff --git a/scripts/generatePluginList.ts b/scripts/generatePluginList.ts index 2f7ac7314..92bcba75e 100644 --- a/scripts/generatePluginList.ts +++ b/scripts/generatePluginList.ts @@ -33,6 +33,7 @@ interface PluginData { name: string; description: string; tags: string[]; + searchTerms: string[]; authors: Dev[]; dependencies: string[]; hasPatches: boolean; @@ -111,7 +112,8 @@ async function parseFile(fileName: string) { hasCommands: false, enabledByDefault: false, required: false, - tags: [] as string[] + tags: [] as string[], + searchTerms: [] as string[], } as PluginData; for (const prop of pluginObj.properties) { @@ -140,9 +142,10 @@ async function parseFile(fileName: string) { }); break; case "tags": - if (!isArrayLiteralExpression(value)) throw fail("tags is not an array literal"); - data.tags = value.elements.map(e => { - if (!isStringLiteral(e)) throw fail("tags array contains non-string literals"); + case "searchTerms": + if (!isArrayLiteralExpression(value)) throw fail(`${key} is not an array literal`); + data[key] = value.elements.map(e => { + if (!isStringLiteral(e)) throw fail(`${key} array contains non-string literals`); return e.text; }); break; diff --git a/src/components/CheckedTextInput.tsx b/src/components/CheckedTextInput.tsx index 8d37a5609..522540de4 100644 --- a/src/components/CheckedTextInput.tsx +++ b/src/components/CheckedTextInput.tsx @@ -16,13 +16,13 @@ * along with this program. If not, see . */ -import { React, TextInput } from "@webpack/common"; +import { React, TextInput, useState } from "@webpack/common"; interface TextInputProps { /** * WARNING: Changing this between renders will have no effect! */ - value: string; + initialValue: string; /** * This will only be called if the new value passed validate() */ @@ -39,13 +39,15 @@ interface TextInputProps { * A very simple wrapper around Discord's TextInput that validates input and shows * the user an error message and only calls your onChange when the input is valid */ -export function CheckedTextInput({ value: initialValue, onChange, validate }: TextInputProps) { - const [value, setValue] = React.useState(initialValue); - const [error, setError] = React.useState(); +export function CheckedTextInput({ initialValue, onChange, validate }: TextInputProps) { + const [value, setValue] = useState(initialValue); + const [error, setError] = useState(); function handleChange(v: string) { setValue(v); + const res = validate(v); + if (res === true) { setError(void 0); onChange(v); diff --git a/src/components/settings/tabs/plugins/PluginModal.css b/src/components/settings/tabs/plugins/PluginModal.css index a4a84391f..085b2bab6 100644 --- a/src/components/settings/tabs/plugins/PluginModal.css +++ b/src/components/settings/tabs/plugins/PluginModal.css @@ -3,9 +3,25 @@ } .vc-plugin-modal-info { - align-items: center; + display: flex; + gap: 1em; + justify-content: space-between; + align-items: start; } -.vc-plugin-modal-description { - flex-grow: 1; +.vc-plugin-modal-tags { + display: flex; + flex-wrap: wrap; + gap: 4px; + margin-block: 8px 16px; +} + +.vc-plugin-modal-tag { + align-items: center; + border: 1px solid var(--border-normal); + border-radius: 9999px; + display: flex; + justify-content: center; + padding: 6px 12px; + color: var(--text-default); } \ No newline at end of file diff --git a/src/components/settings/tabs/plugins/PluginModal.tsx b/src/components/settings/tabs/plugins/PluginModal.tsx index 05dbb4134..c67e39647 100644 --- a/src/components/settings/tabs/plugins/PluginModal.tsx +++ b/src/components/settings/tabs/plugins/PluginModal.tsx @@ -21,7 +21,6 @@ import "./PluginModal.css"; import { generateId } from "@api/Commands"; import { useSettings } from "@api/Settings"; import ErrorBoundary from "@components/ErrorBoundary"; -import { Flex } from "@components/Flex"; import { debounce } from "@shared/debounce"; import { gitRemote } from "@shared/vencordUserAgent"; import { classNameFactory } from "@utils/css"; @@ -29,7 +28,7 @@ import { proxyLazy } from "@utils/lazy"; import { Margins } from "@utils/margins"; import { classes, isObjectEmpty } from "@utils/misc"; import { ModalCloseButton, ModalContent, ModalHeader, ModalProps, ModalRoot, ModalSize, openModal } from "@utils/modal"; -import { OptionType, Plugin } from "@utils/types"; +import { OptionType, Plugin, PluginTag } from "@utils/types"; import { User } from "@vencord/discord-types"; import { findCssClassesLazy } from "@webpack"; import { Clickable, FluxDispatcher, Forms, React, Text, Tooltip, useEffect, useMemo, UserStore, UserSummaryItem, UserUtils, useState } from "@webpack/common"; @@ -68,6 +67,16 @@ function makeDummyUser(user: { username: string; id?: string; avatar?: string; } return newUser; } +function PluginTags({ tags }: { tags: PluginTag[]; }) { + return ( +
+ {tags.map(tag => ( +
{tag}
+ ))} +
+ ); +} + export default function PluginModal({ plugin, onRestartNeeded, onClose, transitionState }: PluginModalProps) { const pluginSettings = useSettings([`plugins.${plugin.name}.*`]).plugins[plugin.name]; const hasSettings = Boolean(pluginSettings && plugin.options && !isObjectEmpty(plugin.options)); @@ -161,8 +170,11 @@ export default function PluginModal({ plugin, onRestartNeeded, onClose, transiti
- - {plugin.description} +
+
+ {plugin.description} + {!!plugin.tags?.length && } +
{!pluginMeta.userPlugin && (
)} - +
Authors
diff --git a/src/components/settings/tabs/plugins/index.tsx b/src/components/settings/tabs/plugins/index.tsx index 92fd34541..1ce0d862d 100644 --- a/src/components/settings/tabs/plugins/index.tsx +++ b/src/components/settings/tabs/plugins/index.tsx @@ -34,7 +34,8 @@ import { Logger } from "@utils/Logger"; import { Margins } from "@utils/margins"; import { classes } from "@utils/misc"; import { useAwaiter, useCleanupEffect } from "@utils/react"; -import { Alerts, Button, lodash, Parser, React, Select, TextInput, Tooltip, useMemo, useState } from "@webpack/common"; +import { PluginTag, PluginTags } from "@utils/types"; +import { Alerts, Button, lodash, Parser, React, SearchableSelect, Select, TextInput, Tooltip, useMemo, useRef, useState } from "@webpack/common"; import { JSX } from "react"; import Plugins, { ExcludedPlugins, PluginMeta } from "~plugins"; @@ -115,7 +116,8 @@ function ExcludedPluginsList({ search }: { search: string; }) { function PluginSettings() { const settings = useSettings(); - const changes = useMemo(() => new ChangeList(), []); + const changeRef = useRef>(null); + const changes = changeRef.current ??= new ChangeList(); useCleanupEffect(() => { if (changes.hasChanges) @@ -159,14 +161,13 @@ function PluginSettings() { const hasUserPlugins = useMemo(() => !IS_STANDALONE && Object.values(PluginMeta).some(m => m.userPlugin), []); - const [searchValue, setSearchValue] = useState({ value: "", status: SearchStatus.ALL }); + const [searchValue, setSearchValue] = useState({ value: "", tags: [] as PluginTag[], status: SearchStatus.ALL }); const search = searchValue.value.toLowerCase(); const onSearch = (query: string) => setSearchValue(prev => ({ ...prev, value: query })); - const onStatusChange = (status: SearchStatus) => setSearchValue(prev => ({ ...prev, status })); const pluginFilter = (plugin: typeof Plugins[keyof typeof Plugins]) => { - const { status } = searchValue; + const { status, tags } = searchValue; const enabled = isPluginEnabled(plugin.name); switch (status) { @@ -187,12 +188,14 @@ function PluginSettings() { break; } + if (tags.length && tags.some(t => !plugin.tags?.includes(t))) return false; + if (!search.length) return true; return ( plugin.name.toLowerCase().includes(search) || plugin.description.toLowerCase().includes(search) || - plugin.tags?.some(t => t.toLowerCase().includes(search)) + plugin.searchTerms?.some(t => t.toLowerCase().includes(search)) ); }; @@ -267,29 +270,43 @@ function PluginSettings() { Filters -
- - - -
- - setSearchValue(prev => ({ ...prev, status }))} + isSelected={v => v === searchValue.status} + closeOnSelect={true} + placeholder="Filter by Type" + /> + ({ label: tag, value: tag }))} + value={searchValue.tags} + onChange={tags => setSearchValue(prev => ({ ...prev, tags }))} + closeOnSelect={false} + placeholder="Filter by Tags" + multi + />
-
+
Plugins @@ -311,6 +328,7 @@ function PluginSettings() { Required Plugins +
{requiredPlugins.length ? requiredPlugins diff --git a/src/components/settings/tabs/plugins/styles.css b/src/components/settings/tabs/plugins/styles.css index 2685c6b1f..3241af6f5 100644 --- a/src/components/settings/tabs/plugins/styles.css +++ b/src/components/settings/tabs/plugins/styles.css @@ -45,7 +45,12 @@ display: grid; height: 40px; gap: 10px; - grid-template-columns: 1fr 150px; + grid-template-columns: 1fr 1fr; + align-items: center; +} + +.vc-plugins-filter-control { + height: 40px; } .vc-addon-badge { diff --git a/src/components/settings/tabs/sync/CloudTab.tsx b/src/components/settings/tabs/sync/CloudTab.tsx index 0f01dbd13..0a18fb91d 100644 --- a/src/components/settings/tabs/sync/CloudTab.tsx +++ b/src/components/settings/tabs/sync/CloudTab.tsx @@ -97,7 +97,7 @@ function CloudSetupSection() { { cloud.url = v; cloud.authenticated = false; diff --git a/src/plugins/accountPanelServerProfile/index.tsx b/src/plugins/accountPanelServerProfile/index.tsx index f7a5b5ea4..311988dea 100644 --- a/src/plugins/accountPanelServerProfile/index.tsx +++ b/src/plugins/accountPanelServerProfile/index.tsx @@ -62,6 +62,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "AccountPanelServerProfile", description: "Right click your account panel in the bottom left to view your profile in the current server", + tags: ["Appearance", "Servers"], authors: [Devs.Nuckyz, Devs.relitrix], settings, diff --git a/src/plugins/alwaysAnimate/index.ts b/src/plugins/alwaysAnimate/index.ts index 8a057c981..d61dd0206 100644 --- a/src/plugins/alwaysAnimate/index.ts +++ b/src/plugins/alwaysAnimate/index.ts @@ -22,6 +22,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "AlwaysAnimate", description: "Animates anything that can be animated", + tags: ["Appearance", "Fun"], authors: [Devs.FieryFlames], patches: [ diff --git a/src/plugins/alwaysExpandRoles/index.ts b/src/plugins/alwaysExpandRoles/index.ts index 2fff8a8de..c7899ecf0 100644 --- a/src/plugins/alwaysExpandRoles/index.ts +++ b/src/plugins/alwaysExpandRoles/index.ts @@ -24,6 +24,7 @@ migratePluginSettings("AlwaysExpandRoles", "ShowAllRoles"); export default definePlugin({ name: "AlwaysExpandRoles", description: "Always expands the role list in profile popouts", + tags: ["Appearance", "Roles"], authors: [Devs.surgedevs], patches: [ { diff --git a/src/plugins/alwaysTrust/index.ts b/src/plugins/alwaysTrust/index.ts index 0c89ae116..5d539c98c 100644 --- a/src/plugins/alwaysTrust/index.ts +++ b/src/plugins/alwaysTrust/index.ts @@ -38,6 +38,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "AlwaysTrust", description: "Removes the annoying untrusted domain and suspicious file popup", + tags: ["Utility"], authors: [Devs.zt, Devs.Trwy], patches: [ { diff --git a/src/plugins/anonymiseFileNames/index.tsx b/src/plugins/anonymiseFileNames/index.tsx index 6b4a5a9ab..4256616ae 100644 --- a/src/plugins/anonymiseFileNames/index.tsx +++ b/src/plugins/anonymiseFileNames/index.tsx @@ -68,6 +68,7 @@ export default definePlugin({ name: "AnonymiseFileNames", authors: [Devs.fawn], description: "Anonymise uploaded file names", + tags: ["Privacy", "Utility"], settings, patches: [ diff --git a/src/plugins/appleMusic.desktop/index.tsx b/src/plugins/appleMusic.desktop/index.tsx index f6fc9da93..d1b32c029 100644 --- a/src/plugins/appleMusic.desktop/index.tsx +++ b/src/plugins/appleMusic.desktop/index.tsx @@ -154,6 +154,7 @@ function getImageAsset(type: AssetImageType, data: TrackData) { export default definePlugin({ name: "AppleMusicRichPresence", description: "Discord rich presence for your Apple Music!", + tags: ["Activity", "Media"], authors: [Devs.RyanCaoDev], hidden: !IS_MAC, reporterTestable: ReporterTestable.None, diff --git a/src/plugins/arRPC.web/index.tsx b/src/plugins/arRPC.web/index.tsx index 538bfe314..7d54ddc36 100644 --- a/src/plugins/arRPC.web/index.tsx +++ b/src/plugins/arRPC.web/index.tsx @@ -40,6 +40,7 @@ let ws: WebSocket; export default definePlugin({ name: "WebRichPresence (arRPC)", description: "Client plugin for arRPC to enable RPC on Discord Web (experimental)", + tags: ["Activity", "Utility"], authors: [Devs.Ducko], reporterTestable: ReporterTestable.None, hidden: IS_VESKTOP || "legcord" in window, diff --git a/src/plugins/autoDndWhilePlaying.discordDesktop/index.ts b/src/plugins/autoDndWhilePlaying.discordDesktop/index.ts index faf238cd8..5a2026689 100644 --- a/src/plugins/autoDndWhilePlaying.discordDesktop/index.ts +++ b/src/plugins/autoDndWhilePlaying.discordDesktop/index.ts @@ -42,6 +42,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "AutoDNDWhilePlaying", description: "Automatically updates your online status (online, idle, dnd) when launching games", + tags: ["Activity", "Utility"], authors: [Devs.thororen], settings, flux: { diff --git a/src/plugins/betterFolders/index.tsx b/src/plugins/betterFolders/index.tsx index ad23c1e3d..8878b8d80 100644 --- a/src/plugins/betterFolders/index.tsx +++ b/src/plugins/betterFolders/index.tsx @@ -138,7 +138,7 @@ export default definePlugin({ name: "BetterFolders", description: "Shows server folders on dedicated sidebar and adds folder related improvements", authors: [Devs.juby, Devs.AutumnVN, Devs.Nuckyz], - + tags: ["Organisation", "Servers", "Appearance"], settings, patches: [ diff --git a/src/plugins/betterGifAltText/index.ts b/src/plugins/betterGifAltText/index.ts index 0a381e547..3b95f912e 100644 --- a/src/plugins/betterGifAltText/index.ts +++ b/src/plugins/betterGifAltText/index.ts @@ -24,6 +24,7 @@ export default definePlugin({ authors: [Devs.Ven], description: "Change GIF alt text from simply being 'GIF' to containing the gif tags / filename", + tags: ["Media", "Accessibility", "Customisation"], patches: [ { find: ".modalContext})};", diff --git a/src/plugins/betterGifPicker/index.ts b/src/plugins/betterGifPicker/index.ts index 2562a7208..aa9b09687 100644 --- a/src/plugins/betterGifPicker/index.ts +++ b/src/plugins/betterGifPicker/index.ts @@ -11,6 +11,7 @@ export default definePlugin({ name: "BetterGifPicker", description: "Makes the gif picker open the favourite category by default", authors: [Devs.Samwich], + tags: ["Emotes", "Customisation"], patches: [ { find: "renderHeaderContent(){", diff --git a/src/plugins/betterNotes/index.tsx b/src/plugins/betterNotes/index.tsx index 68aa70c61..465010cff 100644 --- a/src/plugins/betterNotes/index.tsx +++ b/src/plugins/betterNotes/index.tsx @@ -40,6 +40,7 @@ export default definePlugin({ name: "BetterNotesBox", description: "Hide notes or disable spellcheck (Configure in settings!!)", authors: [Devs.Ven], + tags: ["Customisation", "Utility"], settings, patches: [ diff --git a/src/plugins/betterRoleContext/index.tsx b/src/plugins/betterRoleContext/index.tsx index f9eae586d..61343418e 100644 --- a/src/plugins/betterRoleContext/index.tsx +++ b/src/plugins/betterRoleContext/index.tsx @@ -65,6 +65,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "BetterRoleContext", description: "Adds options to copy role color / edit role / view role icon when right clicking roles in the user profile", + tags: ["Roles", "Appearance"], authors: [Devs.Ven, Devs.goodbee], dependencies: ["UserSettingsAPI"], diff --git a/src/plugins/betterRoleDot/index.ts b/src/plugins/betterRoleDot/index.ts index d2c8d3f31..03760ab68 100644 --- a/src/plugins/betterRoleDot/index.ts +++ b/src/plugins/betterRoleDot/index.ts @@ -26,6 +26,7 @@ export default definePlugin({ authors: [Devs.Ven, Devs.AutumnVN], description: "Copy role colour on RoleDot (accessibility setting) click. Also allows using both RoleDot and coloured names simultaneously", + tags: ["Roles", "Appearance"], patches: [ { diff --git a/src/plugins/betterSessions/index.tsx b/src/plugins/betterSessions/index.tsx index a0b5291e7..bfe1f59cf 100644 --- a/src/plugins/betterSessions/index.tsx +++ b/src/plugins/betterSessions/index.tsx @@ -56,7 +56,7 @@ export default definePlugin({ name: "BetterSessions", description: "Enhances the sessions (devices) menu. Allows you to view exact timestamps, give each session a custom name, and receive notifications about new sessions.", authors: [Devs.amia], - + tags: ["Notifications", "Customisation", "Utility"], settings: settings, patches: [ diff --git a/src/plugins/betterSettings/index.tsx b/src/plugins/betterSettings/index.tsx index 8ea90ffd6..d37fbe666 100644 --- a/src/plugins/betterSettings/index.tsx +++ b/src/plugins/betterSettings/index.tsx @@ -78,6 +78,7 @@ export default definePlugin({ name: "BetterSettings", description: "Enhances your settings-menu-opening experience", authors: [Devs.Kyuuhachi], + tags: ["Appearance", "Customisation", "Organisation"], settings, start() { diff --git a/src/plugins/betterUploadButton/index.ts b/src/plugins/betterUploadButton/index.ts index 9639dc60a..44fe643d2 100644 --- a/src/plugins/betterUploadButton/index.ts +++ b/src/plugins/betterUploadButton/index.ts @@ -23,6 +23,7 @@ export default definePlugin({ name: "BetterUploadButton", authors: [Devs.fawn, Devs.Ven], description: "Upload with a single click, open menu with right click", + tags: ["Utility", "Shortcuts"], patches: [ { find: ".CHAT_INPUT_BUTTON_NOTIFICATION,", diff --git a/src/plugins/biggerStreamPreview/index.tsx b/src/plugins/biggerStreamPreview/index.tsx index 2e8beb86a..a1e8959c9 100644 --- a/src/plugins/biggerStreamPreview/index.tsx +++ b/src/plugins/biggerStreamPreview/index.tsx @@ -89,6 +89,7 @@ export const userContextPatch: NavContextMenuPatchCallback = (children, { user } export default definePlugin({ name: "BiggerStreamPreview", description: "This plugin allows you to enlarge stream previews", + tags: ["Media", "Appearance"], authors: [Devs.phil], contextMenus: { "user-context": userContextPatch, diff --git a/src/plugins/blurNsfw/index.ts b/src/plugins/blurNsfw/index.ts index 1681f8c57..5db9fc2e6 100644 --- a/src/plugins/blurNsfw/index.ts +++ b/src/plugins/blurNsfw/index.ts @@ -41,6 +41,7 @@ function setCss() { export default definePlugin({ name: "BlurNSFW", description: "Blur attachments in NSFW channels until hovered", + tags: ["Privacy", "Appearance"], authors: [Devs.Ven], patches: [ diff --git a/src/plugins/callTimer/index.tsx b/src/plugins/callTimer/index.tsx index 6503568e8..7e7457663 100644 --- a/src/plugins/callTimer/index.tsx +++ b/src/plugins/callTimer/index.tsx @@ -51,6 +51,7 @@ function formatDuration(ms: number) { export default definePlugin({ name: "CallTimer", description: "Adds a timer to vcs", + tags: ["Voice", "Utility"], authors: [Devs.Ven], managedStyle: alignedChatInputFix, diff --git a/src/plugins/characterCounter/index.tsx b/src/plugins/characterCounter/index.tsx index 209924bc2..57b9c3f30 100644 --- a/src/plugins/characterCounter/index.tsx +++ b/src/plugins/characterCounter/index.tsx @@ -35,6 +35,7 @@ export default definePlugin({ name: "CharacterCounter", description: "Adds a character counter to the chat input", authors: [Devs.thororen], + tags: ["Utility"], settings, patches: [ { diff --git a/src/plugins/clearURLs/index.ts b/src/plugins/clearURLs/index.ts index 362706079..ed1d65962 100644 --- a/src/plugins/clearURLs/index.ts +++ b/src/plugins/clearURLs/index.ts @@ -50,6 +50,7 @@ interface RuleSet { export default definePlugin({ name: "ClearURLs", description: "Automatically removes tracking elements from URLs you send", + tags: ["Privacy", "Utility"], authors: [Devs.adryd, Devs.thororen], rules: [] as RuleSet[], diff --git a/src/plugins/clientTheme/index.tsx b/src/plugins/clientTheme/index.tsx index 984318e29..48e16971d 100644 --- a/src/plugins/clientTheme/index.tsx +++ b/src/plugins/clientTheme/index.tsx @@ -29,6 +29,7 @@ export default definePlugin({ name: "ClientTheme", authors: [Devs.Nuckyz], description: "Recreation of the old client theme experiment. Add a color to your Discord client theme", + tags: ["Appearance", "Customisation"], settings, startAt: StartAt.DOMContentLoaded, diff --git a/src/plugins/colorSighted/index.ts b/src/plugins/colorSighted/index.ts index 025cfb94e..0f9201632 100644 --- a/src/plugins/colorSighted/index.ts +++ b/src/plugins/colorSighted/index.ts @@ -23,6 +23,7 @@ export default definePlugin({ name: "ColorSighted", description: "Removes the colorblind-friendly icons from statuses, just like 2015-2017 Discord", authors: [Devs.lewisakura], + tags: ["Appearance", "Accessibility"], patches: [ { find: "Masks.STATUS_ONLINE", diff --git a/src/plugins/consoleJanitor/index.tsx b/src/plugins/consoleJanitor/index.tsx index d30d6ced3..2cde73cc9 100644 --- a/src/plugins/consoleJanitor/index.tsx +++ b/src/plugins/consoleJanitor/index.tsx @@ -108,6 +108,7 @@ export default definePlugin({ name: "ConsoleJanitor", description: "Disables annoying console messages/errors", authors: [Devs.Nuckyz, Devs.sadan], + tags: ["Developers", "Console", "Utility"], settings, startAt: StartAt.Init, diff --git a/src/plugins/consoleShortcuts/index.ts b/src/plugins/consoleShortcuts/index.ts index 3b35e89e4..a65ece9ae 100644 --- a/src/plugins/consoleShortcuts/index.ts +++ b/src/plugins/consoleShortcuts/index.ts @@ -243,6 +243,7 @@ export default definePlugin({ name: "ConsoleShortcuts", description: "Adds shorter Aliases for many things on the window. Run `shortcutList` for a list.", authors: [Devs.Ven], + tags: ["Developers", "Console", "Shortcuts", "Utility"], startAt: StartAt.Init, patches: [ diff --git a/src/plugins/copyEmojiMarkdown/index.tsx b/src/plugins/copyEmojiMarkdown/index.tsx index e03197fec..dfa46a350 100644 --- a/src/plugins/copyEmojiMarkdown/index.tsx +++ b/src/plugins/copyEmojiMarkdown/index.tsx @@ -51,6 +51,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "CopyEmojiMarkdown", description: "Allows you to copy emojis as formatted string (<:blobcatcozy:1026533070955872337>)", + tags: ["Emotes", "Utility"], authors: [Devs.HappyEnderman, Devs.Vishnya], settings, diff --git a/src/plugins/copyFileContents/index.tsx b/src/plugins/copyFileContents/index.tsx index be7ec07a2..c74a5c544 100644 --- a/src/plugins/copyFileContents/index.tsx +++ b/src/plugins/copyFileContents/index.tsx @@ -22,6 +22,7 @@ const CheckMarkIcon = () => { export default definePlugin({ name: "CopyFileContents", description: "Adds a button to text file attachments to copy their contents", + tags: ["Utility"], authors: [Devs.Obsidian, Devs.Nuckyz], patches: [ { diff --git a/src/plugins/copyStickerLinks/index.tsx b/src/plugins/copyStickerLinks/index.tsx index 635b8d313..bc8fe8e90 100644 --- a/src/plugins/copyStickerLinks/index.tsx +++ b/src/plugins/copyStickerLinks/index.tsx @@ -87,6 +87,7 @@ const expressionPickerPatch: NavContextMenuPatchCallback = (children, props: { t export default definePlugin({ name: "CopyStickerLinks", description: "Adds the ability to copy & open Sticker links", + tags: ["Emotes", "Utility"], authors: [Devs.Ven, Devs.Byeoon], contextMenus: { "message": messageContextMenuPatch, diff --git a/src/plugins/copyUserURLs/index.tsx b/src/plugins/copyUserURLs/index.tsx index 744f7ccac..07ac0721d 100644 --- a/src/plugins/copyUserURLs/index.tsx +++ b/src/plugins/copyUserURLs/index.tsx @@ -47,6 +47,7 @@ export default definePlugin({ name: "CopyUserURLs", authors: [Devs.castdrian], description: "Adds a 'Copy User URL' option to the user context menu.", + tags: ["Utility", "Friends"], contextMenus: { "user-context": UserContextMenuPatch } diff --git a/src/plugins/crashHandler/index.ts b/src/plugins/crashHandler/index.ts index 4fd77c7af..04786132e 100644 --- a/src/plugins/crashHandler/index.ts +++ b/src/plugins/crashHandler/index.ts @@ -61,8 +61,8 @@ export default definePlugin({ name: "CrashHandler", description: "Utility plugin for handling and possibly recovering from crashes without a restart", authors: [Devs.Nuckyz], + tags: ["Utility", "Developers"], enabledByDefault: true, - settings, patches: [ diff --git a/src/plugins/ctrlEnterSend/index.ts b/src/plugins/ctrlEnterSend/index.ts index 7b0b26b9a..ba6eb3df6 100644 --- a/src/plugins/ctrlEnterSend/index.ts +++ b/src/plugins/ctrlEnterSend/index.ts @@ -12,6 +12,7 @@ export default definePlugin({ name: "CtrlEnterSend", authors: [Devs.UlyssesZhan], description: "Use Ctrl+Enter to send messages (customizable)", + tags: ["Shortcuts", "Chat"], settings: definePluginSettings({ submitRule: { description: "The way to send a message", diff --git a/src/plugins/customCommands/index.ts b/src/plugins/customCommands/index.ts index 37edf902a..fe22de6e4 100644 --- a/src/plugins/customCommands/index.ts +++ b/src/plugins/customCommands/index.ts @@ -91,8 +91,9 @@ migratePluginSettings("CustomCommands", "MessageTags"); export default definePlugin({ name: "CustomCommands", description: "Allows you to create custom slash commands / tags", - tags: ["MessageTags"], + searchTerms: ["MessageTags"], authors: [Devs.Ven, Devs.Luna,], + tags: ["Commands", "Customisation", "Utility"], settings, async start() { diff --git a/src/plugins/customIdle/index.ts b/src/plugins/customIdle/index.ts index 225386a0d..78665a51f 100644 --- a/src/plugins/customIdle/index.ts +++ b/src/plugins/customIdle/index.ts @@ -29,6 +29,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "CustomIdle", description: "Allows you to set the time before Discord goes idle (or disable auto-idle)", + tags: ["Activity", "Customisation"], authors: [Devs.newwares], settings, patches: [ diff --git a/src/plugins/customRPC/index.tsx b/src/plugins/customRPC/index.tsx index d41c904d0..8c28ef45d 100644 --- a/src/plugins/customRPC/index.tsx +++ b/src/plugins/customRPC/index.tsx @@ -213,6 +213,7 @@ export async function setRpc(disable?: boolean) { export default definePlugin({ name: "CustomRPC", description: "Add a fully customisable Rich Presence (Game status) to your Discord profile", + tags: ["Activity", "Customisation"], authors: [Devs.captain, Devs.AutumnVN, Devs.nin0dev], dependencies: ["UserSettingsAPI"], // This plugin's patch is not important for functionality, so don't require a restart diff --git a/src/plugins/dearrow/index.tsx b/src/plugins/dearrow/index.tsx index 7cb60384e..f91c91d45 100644 --- a/src/plugins/dearrow/index.tsx +++ b/src/plugins/dearrow/index.tsx @@ -171,6 +171,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "Dearrow", description: "Makes YouTube embed titles and thumbnails less sensationalist, powered by Dearrow", + tags: ["Media", "Utility"], authors: [Devs.Ven], settings, diff --git a/src/plugins/decor/index.tsx b/src/plugins/decor/index.tsx index f47cc1f1b..94e9a3e59 100644 --- a/src/plugins/decor/index.tsx +++ b/src/plugins/decor/index.tsx @@ -27,6 +27,7 @@ export interface AvatarDecoration { export default definePlugin({ name: "Decor", description: "Create and use your own custom avatar decorations, or pick your favorite from the presets.", + tags: ["Appearance", "Customisation"], authors: [Devs.FieryFlames], patches: [ // Patch MediaResolver to return correct URL for Decor avatar decorations diff --git a/src/plugins/devCompanion.dev/index.tsx b/src/plugins/devCompanion.dev/index.tsx index 472264d18..35ed0bf46 100644 --- a/src/plugins/devCompanion.dev/index.tsx +++ b/src/plugins/devCompanion.dev/index.tsx @@ -246,6 +246,7 @@ function initWs(isManual = false) { export default definePlugin({ name: "DevCompanion", description: "Dev Companion Plugin", + tags: ["Developers", "Utility"], authors: [Devs.Ven], reporterTestable: ReporterTestable.None, settings, diff --git a/src/plugins/disableCallIdle/index.ts b/src/plugins/disableCallIdle/index.ts index 216f1218c..523580e76 100644 --- a/src/plugins/disableCallIdle/index.ts +++ b/src/plugins/disableCallIdle/index.ts @@ -22,6 +22,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "DisableCallIdle", description: "Disables automatically getting kicked from a DM voice call after 3 minutes and being moved to an AFK voice channel.", + tags: ["Voice", "Utility"], authors: [Devs.Nuckyz], patches: [ { diff --git a/src/plugins/dontRoundMyTimestamps/index.ts b/src/plugins/dontRoundMyTimestamps/index.ts index 4c432c73f..7d8cb9b14 100644 --- a/src/plugins/dontRoundMyTimestamps/index.ts +++ b/src/plugins/dontRoundMyTimestamps/index.ts @@ -24,6 +24,7 @@ export default definePlugin({ name: "DontRoundMyTimestamps", authors: [Devs.Lexi], description: "Always rounds relative timestamps down, so 7.6y becomes 7y instead of 8y", + tags: ["Appearance", "Utility"], start() { moment.relativeTimeRounding(Math.floor); diff --git a/src/plugins/experiments/index.tsx b/src/plugins/experiments/index.tsx index ede964457..69a063891 100644 --- a/src/plugins/experiments/index.tsx +++ b/src/plugins/experiments/index.tsx @@ -47,6 +47,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "Experiments", description: "Enable Access to Experiments & other dev-only features in Discord!", + tags: ["Developers", "Utility"], authors: [ Devs.Megu, Devs.Ven, diff --git a/src/plugins/expressionCloner/index.tsx b/src/plugins/expressionCloner/index.tsx index cc33448c5..9dff27d13 100644 --- a/src/plugins/expressionCloner/index.tsx +++ b/src/plugins/expressionCloner/index.tsx @@ -230,7 +230,7 @@ function CloneModal({ data }: { data: Sticker | Emoji; }) { <> Custom Name { data.name = v; setName(v); @@ -409,7 +409,8 @@ migratePluginSettings("ExpressionCloner", "EmoteCloner"); export default definePlugin({ name: "ExpressionCloner", description: "Allows you to clone Emotes & Stickers to your own server (right click them)", - tags: ["StickerCloner", "EmoteCloner", "EmojiCloner"], + tags: ["Emotes", "Servers"], + searchTerms: ["StickerCloner", "EmoteCloner", "EmojiCloner"], authors: [Devs.Ven, Devs.Nuckyz], contextMenus: { "message": messageContextMenuPatch, diff --git a/src/plugins/f8break/index.ts b/src/plugins/f8break/index.ts index 89dd2c92f..5b1b118ce 100644 --- a/src/plugins/f8break/index.ts +++ b/src/plugins/f8break/index.ts @@ -22,6 +22,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "F8Break", description: "Pause the client when you press F8 with DevTools (+ breakpoints) open.", + tags: ["Developers", "Shortcuts"], authors: [Devs.lewisakura], start() { diff --git a/src/plugins/fakeNitro/index.tsx b/src/plugins/fakeNitro/index.tsx index 13a5b5e82..1e6b9ef9f 100644 --- a/src/plugins/fakeNitro/index.tsx +++ b/src/plugins/fakeNitro/index.tsx @@ -174,6 +174,7 @@ export default definePlugin({ name: "FakeNitro", authors: [Devs.Arjix, Devs.D3SOX, Devs.Ven, Devs.fawn, Devs.captain, Devs.Nuckyz, Devs.AutumnVN, Devs.sadan], description: "Allows you to send fake emojis/stickers, use nitro themes, and stream in nitro quality", + tags: ["Emotes", "Appearance", "Customisation", "Chat"], dependencies: ["MessageEventsAPI"], settings, diff --git a/src/plugins/fakeProfileThemes/index.tsx b/src/plugins/fakeProfileThemes/index.tsx index 76826d9d8..319ce2750 100644 --- a/src/plugins/fakeProfileThemes/index.tsx +++ b/src/plugins/fakeProfileThemes/index.tsx @@ -196,6 +196,7 @@ function SettingsAboutComponent() { export default definePlugin({ name: "FakeProfileThemes", description: "Allows profile theming by hiding the colors in your bio thanks to invisible 3y3 encoding", + tags: ["Appearance", "Customisation"], authors: [Devs.Alyxia, Devs.Remty], patches: [ { diff --git a/src/plugins/favEmojiFirst/index.ts b/src/plugins/favEmojiFirst/index.ts index 8d8172900..11692b9fd 100644 --- a/src/plugins/favEmojiFirst/index.ts +++ b/src/plugins/favEmojiFirst/index.ts @@ -37,6 +37,7 @@ export default definePlugin({ name: "FavoriteEmojiFirst", authors: [Devs.Aria, Devs.Ven], description: "Puts your favorite emoji first in the emoji autocomplete.", + tags: ["Emotes", "Customisation"], patches: [ { find: "renderResults({results:", diff --git a/src/plugins/favGifSearch/index.tsx b/src/plugins/favGifSearch/index.tsx index 0847c54b3..2a3d14728 100644 --- a/src/plugins/favGifSearch/index.tsx +++ b/src/plugins/favGifSearch/index.tsx @@ -84,6 +84,7 @@ export default definePlugin({ name: "FavoriteGifSearch", authors: [Devs.Aria], description: "Adds a search bar to favorite gifs.", + tags: ["Media", "Customisation"], patches: [ { diff --git a/src/plugins/fixCodeblockGap/index.ts b/src/plugins/fixCodeblockGap/index.ts index 721175fe7..ed9a98b5a 100644 --- a/src/plugins/fixCodeblockGap/index.ts +++ b/src/plugins/fixCodeblockGap/index.ts @@ -22,6 +22,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "FixCodeblockGap", description: "Removes the gap between codeblocks and text below it", + tags: ["Appearance"], authors: [Devs.Grzesiek11], patches: [ { diff --git a/src/plugins/fixImagesQuality/index.tsx b/src/plugins/fixImagesQuality/index.tsx index 98945c933..a10adb27e 100644 --- a/src/plugins/fixImagesQuality/index.tsx +++ b/src/plugins/fixImagesQuality/index.tsx @@ -24,6 +24,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "FixImagesQuality", description: "Improves quality of images by loading them at their original resolution", + tags: ["Media", "Appearance"], authors: [Devs.Nuckyz, Devs.Ven], settings, diff --git a/src/plugins/fixSpotifyEmbeds.desktop/index.tsx b/src/plugins/fixSpotifyEmbeds.desktop/index.tsx index c5b42742a..4ca6f5fe3 100644 --- a/src/plugins/fixSpotifyEmbeds.desktop/index.tsx +++ b/src/plugins/fixSpotifyEmbeds.desktop/index.tsx @@ -23,5 +23,6 @@ export default definePlugin({ name: "FixSpotifyEmbeds", description: "Fixes spotify embeds being incredibly loud by letting you customise the volume", authors: [Devs.Ven], + tags: ["Media", "Customisation"], settings, }); diff --git a/src/plugins/fixYoutubeEmbeds.desktop/index.ts b/src/plugins/fixYoutubeEmbeds.desktop/index.ts index 55486d763..404b38d9d 100644 --- a/src/plugins/fixYoutubeEmbeds.desktop/index.ts +++ b/src/plugins/fixYoutubeEmbeds.desktop/index.ts @@ -10,5 +10,6 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "FixYoutubeEmbeds", description: "Bypasses youtube videos being blocked from display on Discord (for example by UMG)", + tags: ["Media", "Utility"], authors: [Devs.coolelectronics] }); diff --git a/src/plugins/forceOwnerCrown/index.ts b/src/plugins/forceOwnerCrown/index.ts index f7e4b4701..17997568a 100644 --- a/src/plugins/forceOwnerCrown/index.ts +++ b/src/plugins/forceOwnerCrown/index.ts @@ -25,6 +25,7 @@ export default definePlugin({ name: "ForceOwnerCrown", description: "Force the owner crown next to usernames even if the server is large.", authors: [Devs.D3SOX, Devs.Nickyux], + tags: ["Roles", "Appearance", "Servers"], patches: [ { find: "#{intl::GUILD_OWNER}),children:", diff --git a/src/plugins/friendInvites/index.ts b/src/plugins/friendInvites/index.ts index 0af611bc9..ec677e297 100644 --- a/src/plugins/friendInvites/index.ts +++ b/src/plugins/friendInvites/index.ts @@ -26,6 +26,7 @@ const FriendInvites = findByPropsLazy("createFriendInvite"); export default definePlugin({ name: "FriendInvites", description: "Create and manage friend invite links via slash commands (/create friend invite, /view friend invites, /revoke friend invites).", + tags: ["Friends", "Commands"], authors: [Devs.afn, Devs.Dziurwa], commands: [ { diff --git a/src/plugins/friendsSince/index.tsx b/src/plugins/friendsSince/index.tsx index 6197d0c30..f246cd910 100644 --- a/src/plugins/friendsSince/index.tsx +++ b/src/plugins/friendsSince/index.tsx @@ -22,6 +22,7 @@ const Section = findComponentByCodeLazy("headingVariant:", '"section"', "heading export default definePlugin({ name: "FriendsSince", description: "Shows when you became friends with someone in the user popout", + tags: ["Friends"], authors: [Devs.Elvyra, Devs.Antti], patches: [ // DM User Sidebar diff --git a/src/plugins/fullSearchContext/index.tsx b/src/plugins/fullSearchContext/index.tsx index 2f20cd53b..672552d9f 100644 --- a/src/plugins/fullSearchContext/index.tsx +++ b/src/plugins/fullSearchContext/index.tsx @@ -81,6 +81,7 @@ migratePluginSettings("FullSearchContext", "SearchReply"); export default definePlugin({ name: "FullSearchContext", description: "Makes the message context menu in message search results have all options you'd expect", + tags: ["Utility"], authors: [Devs.Ven, Devs.Aria], patches: [{ diff --git a/src/plugins/fullUserInChatbox/index.tsx b/src/plugins/fullUserInChatbox/index.tsx index 9ac4f811d..dfed0036e 100644 --- a/src/plugins/fullUserInChatbox/index.tsx +++ b/src/plugins/fullUserInChatbox/index.tsx @@ -23,6 +23,7 @@ interface UserMentionComponentProps { export default definePlugin({ name: "FullUserInChatbox", description: "Makes the user mention in the chatbox have more functionalities, like left/right clicking", + tags: ["Shortcuts", "Utility"], authors: [Devs.sadan], patches: [ diff --git a/src/plugins/gameActivityToggle/index.tsx b/src/plugins/gameActivityToggle/index.tsx index 102ee3cf4..4f39dc1ff 100644 --- a/src/plugins/gameActivityToggle/index.tsx +++ b/src/plugins/gameActivityToggle/index.tsx @@ -104,6 +104,7 @@ function GameActivityToggleButton(props: { nameplate?: any; }) { export default definePlugin({ name: "GameActivityToggle", description: "Adds a button next to the mic and deafen button to toggle game activity.", + tags: ["Activity", "Shortcuts"], authors: [Devs.Nuckyz, Devs.RuukuLada], dependencies: ["UserSettingsAPI"], settings, diff --git a/src/plugins/gifPaste/index.ts b/src/plugins/gifPaste/index.ts index 4e520d122..40479790e 100644 --- a/src/plugins/gifPaste/index.ts +++ b/src/plugins/gifPaste/index.ts @@ -24,6 +24,7 @@ import { ExpressionPickerStore } from "@webpack/common"; export default definePlugin({ name: "GifPaste", description: "Makes picking a gif in the gif picker insert a link into the chatbox instead of instantly sending it", + tags: ["Media", "Chat"], authors: [Devs.Ven], patches: [{ diff --git a/src/plugins/greetStickerPicker/index.tsx b/src/plugins/greetStickerPicker/index.tsx index db20bd3dd..216498e24 100644 --- a/src/plugins/greetStickerPicker/index.tsx +++ b/src/plugins/greetStickerPicker/index.tsx @@ -153,6 +153,7 @@ function GreetMenu({ channel, message }: { message: Message, channel: Channel; } export default definePlugin({ name: "GreetStickerPicker", description: "Allows you to use any greet sticker instead of only the random one by right-clicking the 'Wave to say hi!' button", + tags: ["Emotes", "Customisation"], authors: [Devs.Ven], settings, diff --git a/src/plugins/hideAttachments/index.tsx b/src/plugins/hideAttachments/index.tsx index 0895ec864..b8a729e6e 100644 --- a/src/plugins/hideAttachments/index.tsx +++ b/src/plugins/hideAttachments/index.tsx @@ -55,6 +55,7 @@ async function toggleHide(channelId: string, messageId: string) { export default definePlugin({ name: "HideMedia", description: "Hide attachments and embeds for individual messages via hover button", + tags: ["Chat", "Appearance"], authors: [Devs.Ven], dependencies: ["MessageUpdaterAPI"], diff --git a/src/plugins/iLoveSpam/index.ts b/src/plugins/iLoveSpam/index.ts index e30417455..4dd8c7117 100644 --- a/src/plugins/iLoveSpam/index.ts +++ b/src/plugins/iLoveSpam/index.ts @@ -22,6 +22,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "iLoveSpam", description: "Do not hide messages from 'likely spammers'", + tags: ["Utility", "Chat"], authors: [Devs.botato, Devs.Nyako], patches: [ { diff --git a/src/plugins/ignoreActivities/index.tsx b/src/plugins/ignoreActivities/index.tsx index 223382c45..63668d695 100644 --- a/src/plugins/ignoreActivities/index.tsx +++ b/src/plugins/ignoreActivities/index.tsx @@ -229,6 +229,7 @@ export default definePlugin({ name: "IgnoreActivities", authors: [Devs.Nuckyz, Devs.Kylie], description: "Ignore activities from showing up on your status ONLY. You can configure which ones are specifically ignored from the Registered Games and Activities tabs, or use the general settings below", + tags: ["Activity", "Privacy", "Customisation"], dependencies: ["UserSettingsAPI"], settings, diff --git a/src/plugins/imageFilename/index.ts b/src/plugins/imageFilename/index.ts index 77717e5b5..d421fb43a 100644 --- a/src/plugins/imageFilename/index.ts +++ b/src/plugins/imageFilename/index.ts @@ -23,6 +23,7 @@ export default definePlugin({ name: "ImageFilename", authors: [Devs.Ven], description: "Display the file name of images & GIFs as a tooltip when hovering over them", + tags: ["Media", "Utility"], settings, patches: [ diff --git a/src/plugins/imageLink/index.ts b/src/plugins/imageLink/index.ts index 08d3a0247..0d01cb1d3 100644 --- a/src/plugins/imageLink/index.ts +++ b/src/plugins/imageLink/index.ts @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "ImageLink", description: "Never hide image links in messages, even if it's the only content", + tags: ["Media", "Appearance"], authors: [Devs.Kyuuhachi, Devs.Sqaaakoi], patches: [ diff --git a/src/plugins/imageZoom/index.tsx b/src/plugins/imageZoom/index.tsx index 4bdfe4378..b1a6972f9 100644 --- a/src/plugins/imageZoom/index.tsx +++ b/src/plugins/imageZoom/index.tsx @@ -156,8 +156,9 @@ const imageContextMenuPatch: NavContextMenuPatchCallback = (children, props) => export default definePlugin({ name: "ImageZoom", description: "Lets you zoom in to images and gifs. Use scroll wheel to zoom in and shift + scroll wheel to increase lens radius / size", + tags: ["Media", "Utility"], authors: [Devs.Aria], - tags: ["ImageUtilities"], + searchTerms: ["ImageUtilities"], managedStyle, diff --git a/src/plugins/implicitRelationships/index.ts b/src/plugins/implicitRelationships/index.ts index 9e0a3e234..18adf29dc 100644 --- a/src/plugins/implicitRelationships/index.ts +++ b/src/plugins/implicitRelationships/index.ts @@ -26,6 +26,7 @@ import { Settings } from "Vencord"; export default definePlugin({ name: "ImplicitRelationships", description: "Shows your implicit relationships in the Friends tab.", + tags: ["Friends", "Servers"], authors: [Devs.Dolfies], patches: [ // Counts header diff --git a/src/plugins/ircColors/index.ts b/src/plugins/ircColors/index.ts index fbe5431bc..950c1a87c 100644 --- a/src/plugins/ircColors/index.ts +++ b/src/plugins/ircColors/index.ts @@ -59,6 +59,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "IrcColors", description: "Makes username colors in chat unique, like in IRC clients", + tags: ["Appearance", "Customisation"], authors: [Devs.Grzesiek11, Devs.jamesbt365], settings, diff --git a/src/plugins/keepCurrentChannel/index.ts b/src/plugins/keepCurrentChannel/index.ts index 92a389eb4..61c585aaa 100644 --- a/src/plugins/keepCurrentChannel/index.ts +++ b/src/plugins/keepCurrentChannel/index.ts @@ -43,6 +43,7 @@ let previousCache: PreviousChannel | undefined; export default definePlugin({ name: "KeepCurrentChannel", description: "Attempt to navigate to the channel you were in before switching accounts or loading Discord.", + tags: ["Utility", "Organisation"], authors: [Devs.Nuckyz], patches: [ diff --git a/src/plugins/lastfmRichPresence/index.tsx b/src/plugins/lastfmRichPresence/index.tsx index 4848b7438..3d3275a90 100644 --- a/src/plugins/lastfmRichPresence/index.tsx +++ b/src/plugins/lastfmRichPresence/index.tsx @@ -179,6 +179,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "LastFMRichPresence", description: "Little plugin for Last.fm rich presence", + tags: ["Activity", "Media"], authors: [Devs.dzshn, Devs.RuiNtD, Devs.blahajZip, Devs.archeruwu], settings, diff --git a/src/plugins/loadingQuotes/index.ts b/src/plugins/loadingQuotes/index.ts index 3b9896b58..134db49d9 100644 --- a/src/plugins/loadingQuotes/index.ts +++ b/src/plugins/loadingQuotes/index.ts @@ -57,6 +57,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "LoadingQuotes", description: "Replace Discords loading quotes", + tags: ["Appearance", "Fun", "Customisation"], authors: [Devs.Ven, Devs.KraXen72, Devs.UlyssesZhan], settings, diff --git a/src/plugins/memberCount/index.tsx b/src/plugins/memberCount/index.tsx index 83c4f85ef..7f94cece4 100644 --- a/src/plugins/memberCount/index.tsx +++ b/src/plugins/memberCount/index.tsx @@ -62,6 +62,7 @@ export const cl = classNameFactory("vc-membercount-"); export default definePlugin({ name: "MemberCount", description: "Shows the number of online members, total members, and users in voice channels on the server — in the member list and tooltip.", + tags: ["Servers", "Utility"], authors: [Devs.Ven, Devs.Commandtechno, Devs.Apexo], settings, diff --git a/src/plugins/mentionAvatars/index.tsx b/src/plugins/mentionAvatars/index.tsx index 4e79da5cf..185582daf 100644 --- a/src/plugins/mentionAvatars/index.tsx +++ b/src/plugins/mentionAvatars/index.tsx @@ -45,6 +45,7 @@ function DefaultRoleIcon() { export default definePlugin({ name: "MentionAvatars", description: "Shows user avatars and role icons inside mentions", + tags: ["Appearance", "Customisation"], authors: [Devs.Ven, Devs.SerStars], patches: [{ diff --git a/src/plugins/messageClickActions/index.ts b/src/plugins/messageClickActions/index.ts index b9eb718d1..b0a9e67da 100644 --- a/src/plugins/messageClickActions/index.ts +++ b/src/plugins/messageClickActions/index.ts @@ -59,6 +59,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "MessageClickActions", description: "Hold Backspace and click to delete, double click to edit/reply", + tags: ["Chat", "Shortcuts"], authors: [Devs.Ven], settings, diff --git a/src/plugins/messageLatency/index.tsx b/src/plugins/messageLatency/index.tsx index 4c451a1e5..2520497ee 100644 --- a/src/plugins/messageLatency/index.tsx +++ b/src/plugins/messageLatency/index.tsx @@ -29,6 +29,7 @@ const DISCORD_KT_DELAY = 1471228928; export default definePlugin({ name: "MessageLatency", description: "Displays an indicator for messages that took ≥n seconds to send", + tags: ["Chat", "Utility"], authors: [Devs.arHSM], settings: definePluginSettings({ diff --git a/src/plugins/messageLinkEmbeds/index.tsx b/src/plugins/messageLinkEmbeds/index.tsx index 941891204..7dee0a9d4 100644 --- a/src/plugins/messageLinkEmbeds/index.tsx +++ b/src/plugins/messageLinkEmbeds/index.tsx @@ -367,6 +367,7 @@ function AutomodEmbedAccessory(props: MessageEmbedProps): JSX.Element | null { export default definePlugin({ name: "MessageLinkEmbeds", description: "Adds a preview to messages that link another message", + tags: ["Chat", "Appearance"], authors: [Devs.TheSun, Devs.Ven, Devs.RyanCaoDev], dependencies: ["MessageAccessoriesAPI", "MessageUpdaterAPI", "UserSettingsAPI"], diff --git a/src/plugins/messageLogger/index.tsx b/src/plugins/messageLogger/index.tsx index ef32ad514..5988fa201 100644 --- a/src/plugins/messageLogger/index.tsx +++ b/src/plugins/messageLogger/index.tsx @@ -144,6 +144,7 @@ export function parseEditContent(content: string, message: Message) { export default definePlugin({ name: "MessageLogger", description: "Temporarily logs deleted and edited messages.", + tags: ["Chat", "Utility"], authors: [Devs.rushii, Devs.Ven, Devs.AutumnVN, Devs.Nickyux, Devs.Kyuuhachi], dependencies: ["MessageUpdaterAPI"], diff --git a/src/plugins/moreQuickReactions/index.ts b/src/plugins/moreQuickReactions/index.ts index 9b8e7b761..e18ffe63f 100644 --- a/src/plugins/moreQuickReactions/index.ts +++ b/src/plugins/moreQuickReactions/index.ts @@ -20,6 +20,7 @@ export default definePlugin({ name: "MoreQuickReactions", description: "Increases the number of reactions available in the Quick React hover menu", authors: [Devs.iamme], + tags: ["Emotes", "Reactions", "Customisation", "Shortcuts"], settings, get reactionCount() { diff --git a/src/plugins/mutualGroupDMs/index.tsx b/src/plugins/mutualGroupDMs/index.tsx index 63746e06b..ea2bca17f 100644 --- a/src/plugins/mutualGroupDMs/index.tsx +++ b/src/plugins/mutualGroupDMs/index.tsx @@ -86,6 +86,7 @@ const IS_PATCHED = Symbol("MutualGroupDMs.Patched"); export default definePlugin({ name: "MutualGroupDMs", description: "Shows mutual group dms in profiles", + tags: ["Friends", "Appearance"], authors: [Devs.amia], patches: [ diff --git a/src/plugins/newGuildSettings/index.tsx b/src/plugins/newGuildSettings/index.tsx index 7d8687d30..553861e0c 100644 --- a/src/plugins/newGuildSettings/index.tsx +++ b/src/plugins/newGuildSettings/index.tsx @@ -118,7 +118,8 @@ function applyDefaultSettings(guildId: string | null) { export default definePlugin({ name: "NewGuildSettings", description: "Automatically mute new servers and change various other settings upon joining", - tags: ["MuteNewGuild", "mute", "server"], + tags: ["Servers", "Customisation"], + searchTerms: ["MuteNewGuild", "mute", "server"], authors: [Devs.Glitch, Devs.Nuckyz, Devs.carince, Devs.Mopi, Devs.GabiRP], contextMenus: { "guild-context": makeContextMenuPatch(false), diff --git a/src/plugins/noBlockedMessages/index.ts b/src/plugins/noBlockedMessages/index.ts index 39c718a9c..9f14a088a 100644 --- a/src/plugins/noBlockedMessages/index.ts +++ b/src/plugins/noBlockedMessages/index.ts @@ -50,6 +50,7 @@ export default definePlugin({ name: "NoBlockedMessages", description: "Hides all blocked/ignored messages from chat completely", authors: [Devs.rushii, Devs.Samu, Devs.jamesbt365], + tags: ["Accessibility", "Chat"], settings, patches: [ diff --git a/src/plugins/noDeepLinks.web/index.ts b/src/plugins/noDeepLinks.web/index.ts index e217308ad..f68c9aef8 100644 --- a/src/plugins/noDeepLinks.web/index.ts +++ b/src/plugins/noDeepLinks.web/index.ts @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "DisableDeepLinks", description: "Disables Discord's stupid deep linking feature which tries to force you to use their Desktop App", + tags: ["Utility"], authors: [Devs.Ven], required: true, diff --git a/src/plugins/noDevtoolsWarning/index.ts b/src/plugins/noDevtoolsWarning/index.ts index 5c35fa67b..d5dcad53c 100644 --- a/src/plugins/noDevtoolsWarning/index.ts +++ b/src/plugins/noDevtoolsWarning/index.ts @@ -23,6 +23,7 @@ export default definePlugin({ name: "NoDevtoolsWarning", description: "Disables the 'HOLD UP' banner in the console. As a side effect, also prevents Discord from hiding your token, which prevents random logouts.", authors: [Devs.Ven], + tags: ["Developers", "Console"], patches: [{ find: "setDevtoolsCallbacks", replacement: { diff --git a/src/plugins/noF1/index.ts b/src/plugins/noF1/index.ts index a40be5acc..36e088e46 100644 --- a/src/plugins/noF1/index.ts +++ b/src/plugins/noF1/index.ts @@ -22,6 +22,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "NoF1", description: "Disables F1 help bind.", + tags: ["Utility"], authors: [Devs.Cyn], patches: [ { diff --git a/src/plugins/noMaskedUrlPaste/index.ts b/src/plugins/noMaskedUrlPaste/index.ts index 64f522cae..fc10f8970 100644 --- a/src/plugins/noMaskedUrlPaste/index.ts +++ b/src/plugins/noMaskedUrlPaste/index.ts @@ -11,6 +11,7 @@ export default definePlugin({ name: "NoMaskedUrlPaste", authors: [Devs.CatNoir], description: "Pasting a link while having text selected will not paste as masked URL", + tags: ["Chat", "Utility"], patches: [ { find: ".selection,preventEmojiSurrogates:", diff --git a/src/plugins/noMosaic/index.ts b/src/plugins/noMosaic/index.ts index c52e19a6b..b360e1ea1 100644 --- a/src/plugins/noMosaic/index.ts +++ b/src/plugins/noMosaic/index.ts @@ -21,7 +21,8 @@ export default definePlugin({ name: "NoMosaic", authors: [Devs.AutumnVN], description: "Removes Discord image mosaic", - tags: ["image", "mosaic", "media"], + tags: ["Media", "Appearance", "Chat"], + searchTerms: ["image", "mosaic", "media"], settings, diff --git a/src/plugins/noOnboardingDelay/index.ts b/src/plugins/noOnboardingDelay/index.ts index 285109761..b5f963463 100644 --- a/src/plugins/noOnboardingDelay/index.ts +++ b/src/plugins/noOnboardingDelay/index.ts @@ -22,6 +22,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "NoOnboardingDelay", description: "Skips the slow and annoying onboarding delay", + tags: ["Utility", "Servers"], authors: [Devs.nekohaxx], patches: [ { diff --git a/src/plugins/noPendingCount/index.ts b/src/plugins/noPendingCount/index.ts index b1a7ffad8..5bede8b49 100644 --- a/src/plugins/noPendingCount/index.ts +++ b/src/plugins/noPendingCount/index.ts @@ -47,6 +47,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "NoPendingCount", description: "Removes the ping count of incoming friend requests, message requests, and nitro offers.", + tags: ["Notifications", "Appearance"], authors: [Devs.amia], settings: settings, diff --git a/src/plugins/noProfileThemes/index.ts b/src/plugins/noProfileThemes/index.ts index 7c440df80..a4fe648d0 100644 --- a/src/plugins/noProfileThemes/index.ts +++ b/src/plugins/noProfileThemes/index.ts @@ -23,6 +23,7 @@ import { UserStore } from "@webpack/common"; export default definePlugin({ name: "NoProfileThemes", description: "Completely removes Nitro profile themes from everyone but yourself", + tags: ["Appearance"], authors: [Devs.TheKodeToad], patches: [ { diff --git a/src/plugins/noReplyMention/index.tsx b/src/plugins/noReplyMention/index.tsx index a08a04b8b..2e2bb9c6b 100644 --- a/src/plugins/noReplyMention/index.tsx +++ b/src/plugins/noReplyMention/index.tsx @@ -62,6 +62,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "NoReplyMention", description: "Disables reply pings by default", + tags: ["Chat", "Notifications"], authors: [Devs.DustyAngel47, Devs.rae, Devs.pylix, Devs.outfoxxed], settings, diff --git a/src/plugins/noServerEmojis/index.ts b/src/plugins/noServerEmojis/index.ts index 6550dabb8..fd764dbf3 100644 --- a/src/plugins/noServerEmojis/index.ts +++ b/src/plugins/noServerEmojis/index.ts @@ -26,6 +26,7 @@ export default definePlugin({ name: "NoServerEmojis", authors: [Devs.UlyssesZhan], description: "Do not show server emojis in the autocomplete menu.", + tags: ["Emotes", "Servers"], settings, patches: [ diff --git a/src/plugins/noSystemBadge.discordDesktop/index.ts b/src/plugins/noSystemBadge.discordDesktop/index.ts index 0fbb5332a..c01c0b87a 100644 --- a/src/plugins/noSystemBadge.discordDesktop/index.ts +++ b/src/plugins/noSystemBadge.discordDesktop/index.ts @@ -22,6 +22,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "NoSystemBadge", description: "Disables the taskbar and system tray unread count badge.", + tags: ["Notifications", "Appearance"], authors: [Devs.rushii], patches: [ { diff --git a/src/plugins/noTypingAnimation/index.ts b/src/plugins/noTypingAnimation/index.ts index 74bcdd50e..6eca410fa 100644 --- a/src/plugins/noTypingAnimation/index.ts +++ b/src/plugins/noTypingAnimation/index.ts @@ -11,6 +11,7 @@ export default definePlugin({ name: "NoTypingAnimation", authors: [Devs.AutumnVN], description: "Disables the CPU-intensive typing dots animation", + tags: ["Appearance"], patches: [ { find: "dotCycle", diff --git a/src/plugins/noUnblockToJump/index.ts b/src/plugins/noUnblockToJump/index.ts index 5d876fc7b..6c1f504b6 100644 --- a/src/plugins/noUnblockToJump/index.ts +++ b/src/plugins/noUnblockToJump/index.ts @@ -22,6 +22,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "NoUnblockToJump", description: "Allows you to jump to messages of blocked or ignored users and likely spammers without unblocking them", + tags: ["Utility"], authors: [Devs.dzshn], patches: [ { diff --git a/src/plugins/notificationVolume/index.ts b/src/plugins/notificationVolume/index.ts index d320d76f1..5959c0dd1 100644 --- a/src/plugins/notificationVolume/index.ts +++ b/src/plugins/notificationVolume/index.ts @@ -21,6 +21,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "NotificationVolume", description: "Save your ears and set a separate volume for notifications and in-app sounds", + tags: ["Notifications", "Voice"], authors: [Devs.philipbry], settings, patches: [ diff --git a/src/plugins/onePingPerDM/index.ts b/src/plugins/onePingPerDM/index.ts index fae787a84..4faed9c89 100644 --- a/src/plugins/onePingPerDM/index.ts +++ b/src/plugins/onePingPerDM/index.ts @@ -36,6 +36,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "OnePingPerDM", description: "If unread messages are sent by a user in DMs multiple times, you'll only receive one audio ping. Read the messages to reset the limit", + tags: ["Notifications", "Customisation"], authors: [Devs.ProffDea], settings, patches: [ diff --git a/src/plugins/oneko/index.ts b/src/plugins/oneko/index.ts index cabe4db99..31459c6b3 100644 --- a/src/plugins/oneko/index.ts +++ b/src/plugins/oneko/index.ts @@ -22,6 +22,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "oneko", description: "cat follow mouse (real)", + tags: ["Fun", "Appearance"], // Listing adryd here because this literally just evals her script authors: [Devs.Ven, Devs.adryd], diff --git a/src/plugins/openInApp/index.ts b/src/plugins/openInApp/index.ts index de788b2df..2abd9f724 100644 --- a/src/plugins/openInApp/index.ts +++ b/src/plugins/openInApp/index.ts @@ -80,6 +80,7 @@ const Native = VencordNative.pluginHelpers.OpenInApp as PluginNative | undefined; export default definePlugin({ name: "ReactErrorDecoder", - description: 'Replaces "Minifed React Error" with the actual error.', + description: 'Replaces "Minified React Error" with the actual error.', + tags: ["Developers"], authors: [Devs.Cyn, Devs.maisymoe], patches: [ { diff --git a/src/plugins/readAllNotificationsButton/index.tsx b/src/plugins/readAllNotificationsButton/index.tsx index 8031a3b9d..75a18f351 100644 --- a/src/plugins/readAllNotificationsButton/index.tsx +++ b/src/plugins/readAllNotificationsButton/index.tsx @@ -66,6 +66,7 @@ const ReadAllButton = () => ( export default definePlugin({ name: "ReadAllNotificationsButton", description: "Read all server notifications with a single button click!", + tags: ["Notifications", "Shortcuts"], authors: [Devs.kemo], dependencies: ["ServerListAPI"], diff --git a/src/plugins/relationshipNotifier/index.ts b/src/plugins/relationshipNotifier/index.ts index d913dde48..ddb432e43 100644 --- a/src/plugins/relationshipNotifier/index.ts +++ b/src/plugins/relationshipNotifier/index.ts @@ -26,6 +26,7 @@ import { syncAndRunChecks, syncFriends, syncGroups, syncGuilds } from "./utils"; export default definePlugin({ name: "RelationshipNotifier", description: "Notifies you when a friend, group chat, or server removes you.", + tags: ["Friends", "Notifications"], authors: [Devs.nick], settings, diff --git a/src/plugins/replaceGoogleSearch/index.tsx b/src/plugins/replaceGoogleSearch/index.tsx index 5f0d15d32..907d1bc1b 100644 --- a/src/plugins/replaceGoogleSearch/index.tsx +++ b/src/plugins/replaceGoogleSearch/index.tsx @@ -130,6 +130,7 @@ const messageContextMenuPatch: NavContextMenuPatchCallback = (children, _props) export default definePlugin({ name: "ReplaceGoogleSearch", description: "Replaces the Google search with different Engine(s)", + tags: ["Utility", "Customisation"], authors: [Devs.Moxxie, Devs.Ethan], settings, diff --git a/src/plugins/replyTimestamp/index.tsx b/src/plugins/replyTimestamp/index.tsx index 65e969241..021caea59 100644 --- a/src/plugins/replyTimestamp/index.tsx +++ b/src/plugins/replyTimestamp/index.tsx @@ -58,6 +58,7 @@ function ReplyTimestamp({ export default definePlugin({ name: "ReplyTimestamp", description: "Shows a timestamp on replied-message previews", + tags: ["Chat", "Appearance"], authors: [Devs.Kyuuhachi], patches: [ diff --git a/src/plugins/revealAllSpoilers/index.ts b/src/plugins/revealAllSpoilers/index.ts index 173632d7a..a1176d7b5 100644 --- a/src/plugins/revealAllSpoilers/index.ts +++ b/src/plugins/revealAllSpoilers/index.ts @@ -27,7 +27,7 @@ export default definePlugin({ name: "RevealAllSpoilers", description: "Reveal all spoilers in a message by Ctrl-clicking a spoiler, or in the chat with Ctrl+Shift-click", authors: [Devs.whqwert], - + tags: ["Accessibility", "Chat", "Shortcuts", "Utility"], patches: [ { find: ".removeObscurity,", diff --git a/src/plugins/reverseImageSearch/index.tsx b/src/plugins/reverseImageSearch/index.tsx index 10d3fad19..68845c0a1 100644 --- a/src/plugins/reverseImageSearch/index.tsx +++ b/src/plugins/reverseImageSearch/index.tsx @@ -102,8 +102,9 @@ const imageContextMenuPatch: NavContextMenuPatchCallback = (children, props) => export default definePlugin({ name: "ReverseImageSearch", description: "Adds ImageSearch to image context menus", + tags: ["Media", "Utility"], authors: [Devs.Ven, Devs.Nuckyz], - tags: ["ImageUtilities"], + searchTerms: ["ImageUtilities"], patches: [ { diff --git a/src/plugins/reviewDB/index.tsx b/src/plugins/reviewDB/index.tsx index 647d716ae..6c80cdf62 100644 --- a/src/plugins/reviewDB/index.tsx +++ b/src/plugins/reviewDB/index.tsx @@ -70,6 +70,7 @@ const userContextPatch: NavContextMenuPatchCallback = (children, { user }: { use export default definePlugin({ name: "ReviewDB", description: "Review other users (Adds a new settings to profiles)", + tags: ["Friends", "Servers"], authors: [Devs.mantikafasi, Devs.Ven], settings, diff --git a/src/plugins/roleColorEverywhere/index.tsx b/src/plugins/roleColorEverywhere/index.tsx index 6f170c41a..2b4b3e0c7 100644 --- a/src/plugins/roleColorEverywhere/index.tsx +++ b/src/plugins/roleColorEverywhere/index.tsx @@ -75,6 +75,7 @@ export default definePlugin({ name: "RoleColorEverywhere", authors: [Devs.KingFish, Devs.lewisakura, Devs.AutumnVN, Devs.Kyuuhachi, Devs.jamesbt365], description: "Adds the top role color anywhere possible", + tags: ["Roles", "Appearance"], settings, patches: [ diff --git a/src/plugins/secretRingTone/index.ts b/src/plugins/secretRingTone/index.ts index f2913afd1..4ebbe3b84 100644 --- a/src/plugins/secretRingTone/index.ts +++ b/src/plugins/secretRingTone/index.ts @@ -20,6 +20,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "SecretRingToneEnabler", description: "Always play the secret version of the discord ringtone (except during special ringtone events)", + tags: ["Notifications", "Fun"], authors: [Devs.AndrewDLO, Devs.FieryFlames, Devs.RamziAH], settings, patches: [ diff --git a/src/plugins/seeSummaries/index.tsx b/src/plugins/seeSummaries/index.tsx index faa642fc7..29dd7d383 100644 --- a/src/plugins/seeSummaries/index.tsx +++ b/src/plugins/seeSummaries/index.tsx @@ -52,6 +52,7 @@ interface ChannelSummaries { export default definePlugin({ name: "Summaries", description: "Enables Discord's experimental Summaries feature on every server, displaying AI generated summaries of conversations", + tags: ["Chat", "Fun"], authors: [Devs.mantikafasi], settings, patches: [ diff --git a/src/plugins/sendTimestamps/index.tsx b/src/plugins/sendTimestamps/index.tsx index 9f49d5a3a..b349d68a2 100644 --- a/src/plugins/sendTimestamps/index.tsx +++ b/src/plugins/sendTimestamps/index.tsx @@ -168,6 +168,7 @@ const SendTimestampButton: ChatBarButtonFactory = ({ isAnyChat }) => { export default definePlugin({ name: "SendTimestamps", description: "Send timestamps easily via chat box button & text shortcuts. Read the extended description!", + tags: ["Chat", "Commands"], authors: [Devs.Ven, Devs.Tyler, Devs.Grzesiek11], settings, diff --git a/src/plugins/serverInfo/index.tsx b/src/plugins/serverInfo/index.tsx index 98b9b2d51..5a6f51c31 100644 --- a/src/plugins/serverInfo/index.tsx +++ b/src/plugins/serverInfo/index.tsx @@ -27,9 +27,10 @@ const Patch: NavContextMenuPatchCallback = (children, { guild }: { guild: Guild; export default definePlugin({ name: "ServerInfo", description: "Allows you to view info about a server", + tags: ["Servers", "Utility"], authors: [Devs.Ven, Devs.Nuckyz], dependencies: ["DynamicImageModalAPI"], - tags: ["guild", "info", "ServerProfile"], + searchTerms: ["guild", "info", "ServerProfile"], contextMenus: { "guild-context": Patch, diff --git a/src/plugins/serverListIndicators/index.tsx b/src/plugins/serverListIndicators/index.tsx index 17a11a37d..23557ae28 100644 --- a/src/plugins/serverListIndicators/index.tsx +++ b/src/plugins/serverListIndicators/index.tsx @@ -91,6 +91,7 @@ function ServersIndicator() { export default definePlugin({ name: "ServerListIndicators", description: "Add online friend count or server count in the server list", + tags: ["Servers", "Appearance"], authors: [Devs.dzshn], dependencies: ["ServerListAPI"], diff --git a/src/plugins/shikiCodeblocks.desktop/index.ts b/src/plugins/shikiCodeblocks.desktop/index.ts index 670b2856c..fbc03854a 100644 --- a/src/plugins/shikiCodeblocks.desktop/index.ts +++ b/src/plugins/shikiCodeblocks.desktop/index.ts @@ -33,6 +33,7 @@ import { clearStyles } from "./utils/createStyle"; export default definePlugin({ name: "ShikiCodeblocks", description: "Brings vscode-style codeblocks into Discord, powered by Shiki", + tags: ["Appearance", "Chat", "Customisation"], authors: [Devs.Vap], reporterTestable: ReporterTestable.Patches, settings, diff --git a/src/plugins/showAllMessageButtons/index.ts b/src/plugins/showAllMessageButtons/index.ts index aa52d34bc..9c4dfa59e 100644 --- a/src/plugins/showAllMessageButtons/index.ts +++ b/src/plugins/showAllMessageButtons/index.ts @@ -22,6 +22,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "ShowAllMessageButtons", description: "Always show all message buttons no matter if you are holding the shift key or not.", + tags: ["Chat", "Utility"], authors: [Devs.Nuckyz], patches: [ diff --git a/src/plugins/showConnections/index.tsx b/src/plugins/showConnections/index.tsx index e4a259dfa..5ec9e38c0 100644 --- a/src/plugins/showConnections/index.tsx +++ b/src/plugins/showConnections/index.tsx @@ -155,6 +155,7 @@ function CompactConnectionComponent({ connection, theme }: { connection: Connect export default definePlugin({ name: "ShowConnections", description: "Show connected accounts in user popouts", + tags: ["Friends", "Appearance"], authors: [Devs.TheKodeToad], settings, diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx index 27ded4703..609fc95a1 100644 --- a/src/plugins/showHiddenChannels/index.tsx +++ b/src/plugins/showHiddenChannels/index.tsx @@ -71,6 +71,7 @@ function isUncategorized(objChannel: { channel: Channel; comparator: number; }) export default definePlugin({ name: "ShowHiddenChannels", description: "Show channels that you do not have access to view.", + tags: ["Servers", "Utility"], authors: [Devs.BigDuck, Devs.AverageReactEnjoyer, Devs.D3SOX, Devs.Ven, Devs.Nuckyz, Devs.Nickyux, Devs.dzshn], settings, diff --git a/src/plugins/showHiddenThings/index.ts b/src/plugins/showHiddenThings/index.ts index 9a329474d..5ef238327 100644 --- a/src/plugins/showHiddenThings/index.ts +++ b/src/plugins/showHiddenThings/index.ts @@ -37,8 +37,9 @@ const settings = definePluginSettings({ export default definePlugin({ name: "ShowHiddenThings", - tags: ["ShowTimeouts", "ShowInvitesPaused", "ShowModView", "DisableDiscoveryFilters"], + searchTerms: ["ShowTimeouts", "ShowInvitesPaused", "ShowModView", "DisableDiscoveryFilters"], description: "Displays various hidden & moderator-only things regardless of permissions.", + tags: ["Servers", "Utility"], authors: [Devs.Dolfies], settings, diff --git a/src/plugins/showMeYourName/index.tsx b/src/plugins/showMeYourName/index.tsx index 24a1121dc..d4ffeefd3 100644 --- a/src/plugins/showMeYourName/index.tsx +++ b/src/plugins/showMeYourName/index.tsx @@ -56,6 +56,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "ShowMeYourName", description: "Display usernames next to nicks, or no nicks at all", + tags: ["Appearance", "Customisation"], authors: [Devs.Rini, Devs.TheKodeToad, Devs.rae], patches: [ { diff --git a/src/plugins/showTimeoutDuration/index.tsx b/src/plugins/showTimeoutDuration/index.tsx index 99fa10df0..974114460 100644 --- a/src/plugins/showTimeoutDuration/index.tsx +++ b/src/plugins/showTimeoutDuration/index.tsx @@ -68,6 +68,7 @@ function renderTimeout(message: Message, inline: boolean) { export default definePlugin({ name: "ShowTimeoutDuration", description: "Shows how much longer a user's timeout will last, either in the timeout icon tooltip or next to it", + tags: ["Servers", "Utility"], authors: [Devs.Ven, Devs.Sqaaakoi], settings, diff --git a/src/plugins/silentMessageToggle/index.tsx b/src/plugins/silentMessageToggle/index.tsx index c3ab733fa..131f8e578 100644 --- a/src/plugins/silentMessageToggle/index.tsx +++ b/src/plugins/silentMessageToggle/index.tsx @@ -104,6 +104,7 @@ export default definePlugin({ name: "SilentMessageToggle", authors: [Devs.Nuckyz, Devs.CatNoir], description: "Adds a button to the chat bar to toggle sending a silent message.", + tags: ["Chat", "Utility"], settings, chatBarButton: { diff --git a/src/plugins/silentTyping/index.tsx b/src/plugins/silentTyping/index.tsx index 4fdad1003..fae0c2a74 100644 --- a/src/plugins/silentTyping/index.tsx +++ b/src/plugins/silentTyping/index.tsx @@ -112,6 +112,7 @@ export default definePlugin({ name: "SilentTyping", authors: [Devs.Ven, Devs.Rini, Devs.ImBanana], description: "Hide that you are typing", + tags: ["Chat", "Privacy"], settings, contextMenus: { diff --git a/src/plugins/sortFriendRequests/index.tsx b/src/plugins/sortFriendRequests/index.tsx index 11a14c154..8f05270f0 100644 --- a/src/plugins/sortFriendRequests/index.tsx +++ b/src/plugins/sortFriendRequests/index.tsx @@ -53,6 +53,7 @@ export default definePlugin({ name: "SortFriendRequests", authors: [Devs.Megu], description: "Sorts friend requests by date of receipt", + tags: ["Friends", "Organisation"], settings, patches: [{ diff --git a/src/plugins/spotifyControls/index.tsx b/src/plugins/spotifyControls/index.tsx index a6bc716e8..29a092eab 100644 --- a/src/plugins/spotifyControls/index.tsx +++ b/src/plugins/spotifyControls/index.tsx @@ -32,6 +32,7 @@ function toggleHoverControls(value: boolean) { export default definePlugin({ name: "SpotifyControls", description: "Adds a Spotify player above the account panel", + tags: ["Media", "Activity"], authors: [Devs.Ven, Devs.afn, Devs.KraXen72, Devs.Av32000, Devs.nin0dev], options: { hoverControls: { diff --git a/src/plugins/spotifyCrack/index.ts b/src/plugins/spotifyCrack/index.ts index 505e53a12..d15d1fd86 100644 --- a/src/plugins/spotifyCrack/index.ts +++ b/src/plugins/spotifyCrack/index.ts @@ -38,6 +38,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "SpotifyCrack", description: "Free listen along, no auto-pausing in voice chat, and allows activity to continue playing when idling", + tags: ["Media", "Utility"], authors: [Devs.Cyn, Devs.Nuckyz], settings, diff --git a/src/plugins/spotifyShareCommands/index.ts b/src/plugins/spotifyShareCommands/index.ts index b4a85eb16..ec350a255 100644 --- a/src/plugins/spotifyShareCommands/index.ts +++ b/src/plugins/spotifyShareCommands/index.ts @@ -98,6 +98,7 @@ function makeCommand(name: string, formatUrl: (track: Track) => string): Command export default definePlugin({ name: "SpotifyShareCommands", description: "Share your current Spotify track, album or artist via slash command (/track, /album, /artist)", + tags: ["Media", "Commands"], authors: [Devs.katlyn], commands: [ makeCommand("track", track => `https://open.spotify.com/track/${track.id}`), diff --git a/src/plugins/startupTimings/index.tsx b/src/plugins/startupTimings/index.tsx index 4a8c06807..d61d004eb 100644 --- a/src/plugins/startupTimings/index.tsx +++ b/src/plugins/startupTimings/index.tsx @@ -27,6 +27,7 @@ import StartupTimingPage from "./StartupTimingPage"; export default definePlugin({ name: "StartupTimings", description: "Adds Startup Timings to the Settings menu", + tags: ["Developers"], authors: [Devs.Megu], start() { SettingsPlugin.customEntries.push({ diff --git a/src/plugins/stickerPaste/index.ts b/src/plugins/stickerPaste/index.ts index 8a0082073..0dd0bd2b3 100644 --- a/src/plugins/stickerPaste/index.ts +++ b/src/plugins/stickerPaste/index.ts @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "StickerPaste", description: "Makes picking a sticker in the sticker picker insert it into the chatbox instead of instantly sending", + tags: ["Emotes", "Chat"], authors: [Devs.ImBanana], patches: [ diff --git a/src/plugins/streamerModeOnStream/index.ts b/src/plugins/streamerModeOnStream/index.ts index b92fb16b6..10c986526 100644 --- a/src/plugins/streamerModeOnStream/index.ts +++ b/src/plugins/streamerModeOnStream/index.ts @@ -37,6 +37,7 @@ function toggleStreamerMode({ streamKey }: StreamEvent, value: boolean) { export default definePlugin({ name: "StreamerModeOnStream", description: "Automatically enables streamer mode when you start streaming in Discord", + tags: ["Privacy", "Utility"], authors: [Devs.IcedMarina], flux: { STREAM_CREATE: d => toggleStreamerMode(d, true), diff --git a/src/plugins/superReactionTweaks/index.ts b/src/plugins/superReactionTweaks/index.ts index abe7bb135..0f262d42b 100644 --- a/src/plugins/superReactionTweaks/index.ts +++ b/src/plugins/superReactionTweaks/index.ts @@ -37,6 +37,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "SuperReactionTweaks", description: "Customize the limit of Super Reactions playing at once, and super react by default", + tags: ["Reactions", "Emotes"], authors: [Devs.FieryFlames, Devs.ant0n], patches: [ { diff --git a/src/plugins/textReplace/index.tsx b/src/plugins/textReplace/index.tsx index 81cea86e0..4ffea1fb1 100644 --- a/src/plugins/textReplace/index.tsx +++ b/src/plugins/textReplace/index.tsx @@ -269,6 +269,7 @@ const TEXT_REPLACE_RULES_CHANNEL_ID = "1102784112584040479"; export default definePlugin({ name: "TextReplace", description: "Replace text in your messages. You can find pre-made rules in the #textreplace-rules channel in Vencord's Server", + tags: ["Chat", "Customisation", "Utility"], authors: [Devs.AutumnVN, Devs.TheKodeToad], settings, diff --git a/src/plugins/themeAttributes/index.ts b/src/plugins/themeAttributes/index.ts index bc50571e8..f7ac5ad62 100644 --- a/src/plugins/themeAttributes/index.ts +++ b/src/plugins/themeAttributes/index.ts @@ -14,6 +14,7 @@ import { UserStore } from "@webpack/common"; export default definePlugin({ name: "ThemeAttributes", description: "Adds data attributes to various elements for theming purposes", + tags: ["Appearance", "Customisation"], authors: [Devs.Ven, Devs.Board], patches: [ diff --git a/src/plugins/translate/index.tsx b/src/plugins/translate/index.tsx index be9c5d279..c62a3860d 100644 --- a/src/plugins/translate/index.tsx +++ b/src/plugins/translate/index.tsx @@ -64,6 +64,7 @@ let tooltipTimeout: any; export default definePlugin({ name: "Translate", description: "Translate messages with Google Translate or DeepL", + tags: ["Chat", "Utility"], authors: [Devs.Ven, Devs.AshtonMemer], settings, contextMenus: { diff --git a/src/plugins/typingIndicator/index.tsx b/src/plugins/typingIndicator/index.tsx index 2e7c9cff2..077044e23 100644 --- a/src/plugins/typingIndicator/index.tsx +++ b/src/plugins/typingIndicator/index.tsx @@ -161,6 +161,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "TypingIndicator", description: "Adds an indicator if someone is typing on a channel.", + tags: ["Notifications", "Appearance", "Servers"], authors: [Devs.Nuckyz, Devs.fawn, Devs.Sqaaakoi], settings, diff --git a/src/plugins/typingTweaks/index.tsx b/src/plugins/typingTweaks/index.tsx index 9e92ce80b..495ba78b5 100644 --- a/src/plugins/typingTweaks/index.tsx +++ b/src/plugins/typingTweaks/index.tsx @@ -95,6 +95,7 @@ const TypingUser = ErrorBoundary.wrap(function TypingUser({ user, guildId }: Typ export default definePlugin({ name: "TypingTweaks", description: "Show avatars and role colours in the typing indicator", + tags: ["Appearance", "Customisation"], authors: [Devs.zt, Devs.sadan], settings, diff --git a/src/plugins/unindent/index.ts b/src/plugins/unindent/index.ts index 1a548a68e..007993cf0 100644 --- a/src/plugins/unindent/index.ts +++ b/src/plugins/unindent/index.ts @@ -23,6 +23,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "Unindent", description: "Trims leading indentation from codeblocks", + tags: ["Chat", "Utility"], authors: [Devs.Ven], patches: [ diff --git a/src/plugins/unlockedAvatarZoom/index.ts b/src/plugins/unlockedAvatarZoom/index.ts index dc8de74db..fbab2b734 100644 --- a/src/plugins/unlockedAvatarZoom/index.ts +++ b/src/plugins/unlockedAvatarZoom/index.ts @@ -20,6 +20,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "UnlockedAvatarZoom", description: "Allows you to zoom in further in the image crop tool when changing your avatar", + tags: ["Media", "Utility"], authors: [Devs.nakoyasha], settings, patches: [ diff --git a/src/plugins/unsuppressEmbeds/index.tsx b/src/plugins/unsuppressEmbeds/index.tsx index 9eecd86d7..4c25ffea0 100644 --- a/src/plugins/unsuppressEmbeds/index.tsx +++ b/src/plugins/unsuppressEmbeds/index.tsx @@ -63,6 +63,7 @@ export default definePlugin({ name: "UnsuppressEmbeds", authors: [Devs.rad, Devs.HypedDomi], description: "Allows you to unsuppress embeds in messages", + tags: ["Chat", "Utility"], contextMenus: { "message": messageContextMenuPatch } diff --git a/src/plugins/userMessagesPronouns/index.ts b/src/plugins/userMessagesPronouns/index.ts index 56721e11f..1088e2f20 100644 --- a/src/plugins/userMessagesPronouns/index.ts +++ b/src/plugins/userMessagesPronouns/index.ts @@ -28,6 +28,7 @@ export default definePlugin({ name: "UserMessagesPronouns", authors: [Devs.Tyman, Devs.TheKodeToad, Devs.Ven, Devs.Elvyra], description: "Adds pronouns to chat user messages", + tags: ["Chat", "Appearance"], settings, patches: [ diff --git a/src/plugins/userVoiceShow/index.tsx b/src/plugins/userVoiceShow/index.tsx index 5a9a85add..2d05c2588 100644 --- a/src/plugins/userVoiceShow/index.tsx +++ b/src/plugins/userVoiceShow/index.tsx @@ -50,6 +50,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "UserVoiceShow", description: "Shows an indicator when a user is in a Voice Channel", + tags: ["Voice", "Appearance", "Friends"], authors: [Devs.Nuckyz, Devs.LordElias], dependencies: ["MemberListDecoratorsAPI", "MessageDecorationsAPI"], settings, diff --git a/src/plugins/usrbg/index.tsx b/src/plugins/usrbg/index.tsx index 36efe355e..01b85eb76 100644 --- a/src/plugins/usrbg/index.tsx +++ b/src/plugins/usrbg/index.tsx @@ -50,6 +50,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "USRBG", description: "Displays user banners from USRBG, allowing anyone to get a banner without Nitro", + tags: ["Appearance", "Customisation"], authors: [Devs.AutumnVN, Devs.katlyn, Devs.pylix, Devs.TheKodeToad], settings, patches: [ diff --git a/src/plugins/validReply/index.ts b/src/plugins/validReply/index.ts index 2ca072040..988d67cf4 100644 --- a/src/plugins/validReply/index.ts +++ b/src/plugins/validReply/index.ts @@ -33,6 +33,7 @@ const createMessageRecord = findByCodeLazy(".createFromServer(", ".isBlockedForM export default definePlugin({ name: "ValidReply", description: 'Fixes "Message could not be loaded" upon hovering over the reply', + tags: ["Chat", "Utility"], authors: [Devs.newwares], patches: [ { diff --git a/src/plugins/validUser/index.tsx b/src/plugins/validUser/index.tsx index 488b6bd65..e23211867 100644 --- a/src/plugins/validUser/index.tsx +++ b/src/plugins/validUser/index.tsx @@ -175,8 +175,9 @@ function MentionWrapper({ data, UserMention, RoleMention, parse, props }: Mentio export default definePlugin({ name: "ValidUser", description: "Fix mentions for unknown users showing up as '@unknown-user' (hover over a mention to fix it)", + tags: ["Chat", "Utility"], authors: [Devs.Ven, Devs.Dolfies], - tags: ["MentionCacheFix"], + searchTerms: ["MentionCacheFix"], patches: [ { diff --git a/src/plugins/vcDoubleClick/index.ts b/src/plugins/vcDoubleClick/index.ts index 8d4cae6a9..deadebd0a 100644 --- a/src/plugins/vcDoubleClick/index.ts +++ b/src/plugins/vcDoubleClick/index.ts @@ -28,6 +28,7 @@ const timers = {} as Record { export default definePlugin({ name: "VoiceMessages", description: "Allows you to send voice messages like on mobile. To do so, right click the upload button and click Send Voice Message", + tags: ["Voice"], authors: [Devs.Ven, Devs.Vap, Devs.Nickyux], settings, contextMenus: { diff --git a/src/plugins/volumeBooster/index.ts b/src/plugins/volumeBooster/index.ts index 4ab0c332a..e379686ad 100644 --- a/src/plugins/volumeBooster/index.ts +++ b/src/plugins/volumeBooster/index.ts @@ -51,6 +51,7 @@ export default definePlugin({ name: "VolumeBooster", authors: [Devs.Nuckyz, Devs.sadan], description: "Allows you to set the user and stream volume above the default maximum", + tags: ["Voice", "Utility"], settings, patches: [ diff --git a/src/plugins/webContextMenus.web/index.ts b/src/plugins/webContextMenus.web/index.ts index e4b9c510f..170f0719f 100644 --- a/src/plugins/webContextMenus.web/index.ts +++ b/src/plugins/webContextMenus.web/index.ts @@ -78,6 +78,7 @@ function fixImageUrl(urlString: string) { export default definePlugin({ name: "WebContextMenus", description: "Re-adds context menus missing in the web version of Discord: Links & Images (Copy/Open Link/Image), Text Area (Copy, Cut, Paste, SpellCheck)", + tags: ["Utility"], authors: [Devs.Ven], enabledByDefault: true, required: IS_VESKTOP, diff --git a/src/plugins/webKeybinds.web/index.ts b/src/plugins/webKeybinds.web/index.ts index 783f965d9..74b88d79d 100644 --- a/src/plugins/webKeybinds.web/index.ts +++ b/src/plugins/webKeybinds.web/index.ts @@ -26,6 +26,7 @@ const KeyBinds = findByPropsLazy("JUMP_TO_GUILD", "SERVER_NEXT"); export default definePlugin({ name: "WebKeybinds", description: "Re-adds keybinds missing in the web version of Discord: ctrl+t, ctrl+shift+t, ctrl+tab, ctrl+shift+tab, ctrl+1-9, ctrl+,. Only works fully on Vesktop/Legcord, not inside your browser", + tags: ["Shortcuts"], authors: [Devs.Ven], enabledByDefault: true, diff --git a/src/plugins/webScreenShareFixes.web/index.ts b/src/plugins/webScreenShareFixes.web/index.ts index e7fbc178e..ac06a00e2 100644 --- a/src/plugins/webScreenShareFixes.web/index.ts +++ b/src/plugins/webScreenShareFixes.web/index.ts @@ -11,6 +11,7 @@ export default definePlugin({ name: "WebScreenShareFixes", authors: [Devs.Kaitlyn], description: "Removes 2500kbps bitrate cap on chromium and vesktop clients.", + tags: ["Voice"], enabledByDefault: true, patches: [ diff --git a/src/plugins/whoReacted/index.tsx b/src/plugins/whoReacted/index.tsx index 7a39f35b2..0eb0a7d0f 100644 --- a/src/plugins/whoReacted/index.tsx +++ b/src/plugins/whoReacted/index.tsx @@ -78,6 +78,7 @@ function handleClickAvatar(event: React.UIEvent) { export default definePlugin({ name: "WhoReacted", description: "Renders the avatars of users who reacted to a message", + tags: ["Reactions", "Chat", "Appearance"], authors: [Devs.Ven, Devs.KannaDev, Devs.newwares], patches: [ diff --git a/src/plugins/xsOverlay/index.tsx b/src/plugins/xsOverlay/index.tsx index ba1849425..434236746 100644 --- a/src/plugins/xsOverlay/index.tsx +++ b/src/plugins/xsOverlay/index.tsx @@ -188,8 +188,9 @@ const Native = VencordNative.pluginHelpers.XSOverlay as PluginNative string; export interface PatchReplacement { @@ -100,6 +126,9 @@ export type IconProps = { height?: number | string; width?: number | string; cla export interface PluginDef { name: string; description: string; + /** Additional search terms that will bring up your plugin */ + searchTerms?: string[]; + tags?: PluginTag[]; authors: PluginAuthor[]; start?(): void; stop?(): void; @@ -177,8 +206,6 @@ export interface PluginDef { */ toolboxActions?: Record void> | (() => ReactNode); - tags?: string[]; - /** * Managed style to automatically enable and disable when the plugin is enabled or disabled */ From 402c8521a58d21196bca1347e651cc6522e703da Mon Sep 17 00:00:00 2001 From: Vendicated Date: Thu, 16 Apr 2026 04:01:24 +0200 Subject: [PATCH 05/18] Fix ViewIcons, MutualGroupDMs --- src/plugins/mutualGroupDMs/index.tsx | 2 +- src/plugins/viewIcons/index.tsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plugins/mutualGroupDMs/index.tsx b/src/plugins/mutualGroupDMs/index.tsx index ea2bca17f..88cc6d15a 100644 --- a/src/plugins/mutualGroupDMs/index.tsx +++ b/src/plugins/mutualGroupDMs/index.tsx @@ -35,7 +35,7 @@ const UserUtils = findByPropsLazy("getGlobalName"); const ProfileListClasses = findCssClassesLazy("empty", "textContainer", "connectionIcon"); const TabBarClasses = findCssClassesLazy("tabPanelScroller", "tabBarPanel"); const MutualsListClasses = findCssClassesLazy("row", "icon", "name", "details"); -const ExpandableList = findComponentByCodeLazy('action:"PRESS_SECTION"', "section"); +const ExpandableList = findComponentByCodeLazy('action:"PRESS_SECTION"', '"section"'); function getGroupDMName(channel: Channel) { return channel.name || diff --git a/src/plugins/viewIcons/index.tsx b/src/plugins/viewIcons/index.tsx index 5ede42f59..51c6885ce 100644 --- a/src/plugins/viewIcons/index.tsx +++ b/src/plugins/viewIcons/index.tsx @@ -198,10 +198,10 @@ export default definePlugin({ patches: [ // Avatar component used in User DMs "User Profile" popup in the right and User Profile Modal pfp { - find: ".AVATAR),{trackUserProfileAction:", + find: "return{avatarProps:{", replacement: { - match: /avatarSrc:(\i),eventHandlers:(\i).+?"div",.{0,100}className:\i,/, - replace: "$&style:{cursor:\"pointer\"},onClick:()=>{$self.openAvatar($1)},", + match: /(?<=avatarProps:(\i),eventHandlers:(\i).{0,50}?)return null==/, + replace: 'Object.assign($2,{style:{cursor:"pointer"},onClick:()=>$self.openAvatar($1.src)});$&', } }, // Banners From e836846a2e8b0ef1e89e9a66ab84f2b506caf23a Mon Sep 17 00:00:00 2001 From: Vendicated Date: Thu, 16 Apr 2026 04:19:42 +0200 Subject: [PATCH 06/18] upgrade dependencies --- package.json | 44 +- pnpm-lock.yaml | 2117 ++++++++++------- src/api/PluginManager.ts | 4 +- .../settings/tabs/plugins/PluginCard.tsx | 2 +- src/debug/loadLazyChunks.ts | 2 +- src/plugins/consoleShortcuts/index.ts | 2 +- src/plugins/implicitRelationships/index.ts | 26 +- src/utils/text.ts | 1 - src/webpack/patchWebpack.ts | 2 +- src/webpack/webpack.ts | 2 +- tsconfig.json | 25 +- 11 files changed, 1351 insertions(+), 876 deletions(-) diff --git a/package.json b/package.json index 42821bdc0..aef46773b 100644 --- a/package.json +++ b/package.json @@ -40,44 +40,44 @@ "@vap/shiki": "0.10.5", "fflate": "^0.8.2", "gifenc": "github:mattdesl/gifenc#64842fca317b112a8590f8fef2bf3825da8f6fe3", - "monaco-editor": "^0.54.0", + "monaco-editor": "^0.55.1", "nanoid": "^5.1.6", "virtual-merge": "^1.0.1" }, "devDependencies": { - "@stylistic/eslint-plugin": "^5.6.0", - "@types/chrome": "^0.1.30", - "@types/lodash": "^4.17.20", - "@types/node": "^24.10.1", + "@stylistic/eslint-plugin": "^5.10.0", + "@types/chrome": "^0.1.40", + "@types/lodash": "^4.17.24", + "@types/node": "^25.6.0", "@types/react": "^19.0.10", "@types/react-dom": "^19.0.4", - "@types/yazl": "^3.3.0", + "@types/yazl": "^3.3.1", "@vencord/discord-types": "link:packages/discord-types", - "diff": "^8.0.2", - "esbuild": "^0.27.0", - "eslint": "9.39.1", + "diff": "^9.0.0", + "esbuild": "^0.28.0", + "eslint": "10.2.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-path-alias": "2.1.0", "eslint-plugin-react": "^7.37.5", "eslint-plugin-simple-header": "^1.2.1", - "eslint-plugin-simple-import-sort": "^12.1.1", - "eslint-plugin-unused-imports": "^4.3.0", + "eslint-plugin-simple-import-sort": "^13.0.0", + "eslint-plugin-unused-imports": "^4.4.1", "highlight.js": "11.11.1", "html-minifier-terser": "^7.2.0", "moment": "^2.22.2", "p-limit": "^7.3.0", - "puppeteer-core": "^24.30.0", - "standalone-electron-types": "^34.2.0", - "stylelint": "^16.25.0", - "stylelint-config-standard": "^39.0.1", - "svgo": "^4.0.0", + "puppeteer-core": "^24.41.0", + "standalone-electron-types": "^41.2.1", + "stylelint": "^17.8.0", + "stylelint-config-standard": "^40.0.0", + "svgo": "^4.0.1", "ts-patch": "^3.3.0", - "ts-pattern": "^5.6.0", - "tsx": "^4.20.6", - "type-fest": "^5.2.0", - "typescript": "^5.9.3", - "typescript-eslint": "^8.47.0", - "typescript-transform-paths": "^3.5.5", + "ts-pattern": "^5.9.0", + "tsx": "^4.21.0", + "type-fest": "^5.5.0", + "typescript": "^6.0.2", + "typescript-eslint": "^8.58.2", + "typescript-transform-paths": "^3.5.6", "zip-local": "^0.3.5" }, "packageManager": "pnpm@10.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index baca9c229..4008f9efc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,8 +29,8 @@ importers: specifier: github:mattdesl/gifenc#64842fca317b112a8590f8fef2bf3825da8f6fe3 version: https://codeload.github.com/mattdesl/gifenc/tar.gz/64842fca317b112a8590f8fef2bf3825da8f6fe3 monaco-editor: - specifier: ^0.54.0 - version: 0.54.0 + specifier: ^0.55.1 + version: 0.55.1 nanoid: specifier: ^5.1.6 version: 5.1.6 @@ -39,17 +39,17 @@ importers: version: 1.0.2 devDependencies: '@stylistic/eslint-plugin': - specifier: ^5.6.0 - version: 5.6.0(eslint@9.39.1) + specifier: ^5.10.0 + version: 5.10.0(eslint@10.2.0) '@types/chrome': - specifier: ^0.1.30 - version: 0.1.30 + specifier: ^0.1.40 + version: 0.1.40 '@types/lodash': - specifier: ^4.17.20 - version: 4.17.20 + specifier: ^4.17.24 + version: 4.17.24 '@types/node': - specifier: ^24.10.1 - version: 24.10.1 + specifier: ^25.6.0 + version: 25.6.0 '@types/react': specifier: ^19.0.10 version: 19.0.12 @@ -57,38 +57,38 @@ importers: specifier: ^19.0.4 version: 19.0.4(@types/react@19.0.12) '@types/yazl': - specifier: ^3.3.0 - version: 3.3.0 + specifier: ^3.3.1 + version: 3.3.1 '@vencord/discord-types': specifier: link:packages/discord-types version: link:packages/discord-types diff: - specifier: ^8.0.2 - version: 8.0.2 + specifier: ^9.0.0 + version: 9.0.0 esbuild: - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.28.0 + version: 0.28.0 eslint: - specifier: 9.39.1 - version: 9.39.1 + specifier: 10.2.0 + version: 10.2.0 eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)) + version: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0)) eslint-plugin-path-alias: specifier: 2.1.0 - version: 2.1.0(patch_hash=87545cb13985b338c8fa2ea7b0a3c75c57ad7fbc81c56b38d6c9438329957727)(eslint@9.39.1) + version: 2.1.0(patch_hash=87545cb13985b338c8fa2ea7b0a3c75c57ad7fbc81c56b38d6c9438329957727)(eslint@10.2.0) eslint-plugin-react: specifier: ^7.37.5 - version: 7.37.5(eslint@9.39.1) + version: 7.37.5(eslint@10.2.0) eslint-plugin-simple-header: specifier: ^1.2.1 - version: 1.2.2(eslint@9.39.1) + version: 1.2.2(eslint@10.2.0) eslint-plugin-simple-import-sort: - specifier: ^12.1.1 - version: 12.1.1(eslint@9.39.1) + specifier: ^13.0.0 + version: 13.0.0(eslint@10.2.0) eslint-plugin-unused-imports: - specifier: ^4.3.0 - version: 4.3.0(@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1) + specifier: ^4.4.1 + version: 4.4.1(@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0) highlight.js: specifier: 11.11.1 version: 11.11.1 @@ -102,41 +102,41 @@ importers: specifier: ^7.3.0 version: 7.3.0 puppeteer-core: - specifier: ^24.30.0 - version: 24.30.0 + specifier: ^24.41.0 + version: 24.41.0 standalone-electron-types: - specifier: ^34.2.0 - version: 34.2.0 + specifier: ^41.2.1 + version: 41.2.1 stylelint: - specifier: ^16.25.0 - version: 16.25.0(typescript@5.9.3) + specifier: ^17.8.0 + version: 17.8.0(typescript@6.0.2) stylelint-config-standard: - specifier: ^39.0.1 - version: 39.0.1(stylelint@16.25.0(typescript@5.9.3)) + specifier: ^40.0.0 + version: 40.0.0(stylelint@17.8.0(typescript@6.0.2)) svgo: - specifier: ^4.0.0 - version: 4.0.0 + specifier: ^4.0.1 + version: 4.0.1 ts-patch: specifier: ^3.3.0 version: 3.3.0 ts-pattern: - specifier: ^5.6.0 - version: 5.6.2 + specifier: ^5.9.0 + version: 5.9.0 tsx: - specifier: ^4.20.6 - version: 4.20.6 + specifier: ^4.21.0 + version: 4.21.0 type-fest: - specifier: ^5.2.0 - version: 5.2.0 + specifier: ^5.5.0 + version: 5.5.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.2 + version: 6.0.2 typescript-eslint: - specifier: ^8.47.0 - version: 8.47.0(eslint@9.39.1)(typescript@5.9.3) + specifier: ^8.58.2 + version: 8.58.2(eslint@10.2.0)(typescript@6.0.2) typescript-transform-paths: - specifier: ^3.5.5 - version: 3.5.5(typescript@5.9.3) + specifier: ^3.5.6 + version: 3.5.6(typescript@6.0.2) zip-local: specifier: ^0.3.5 version: 0.3.5 @@ -195,45 +195,63 @@ importers: packages: - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@cacheable/memory@2.0.5': - resolution: {integrity: sha512-fkiAxCvssEyJZ5fxX4tcdZFRmW9JehSTGvvqmXn6rTzG5cH6V/3C4ad8yb01vOjp2xBydHkHrgpW0qeGtzt6VQ==} + '@cacheable/memory@2.0.8': + resolution: {integrity: sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==} - '@cacheable/utils@2.3.1': - resolution: {integrity: sha512-38NJXjIr4W1Sghun8ju+uYWD8h2c61B4dKwfnQHVDFpAJ9oS28RpfqZQJ6Dgd3RceGkILDY9YT+72HJR3LoeSQ==} + '@cacheable/utils@2.4.1': + resolution: {integrity: sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==} - '@csstools/css-parser-algorithms@3.0.5': - resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} - engines: {node: '>=18'} + '@csstools/css-calc@3.2.0': + resolution: {integrity: sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-tokenizer@3.0.4': - resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} - engines: {node: '>=18'} - - '@csstools/media-query-list-parser@4.0.3': - resolution: {integrity: sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==} - engines: {node: '>=18'} + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/selector-specificity@5.0.0': - resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} - engines: {node: '>=18'} + '@csstools/css-syntax-patches-for-csstree@1.1.3': + resolution: {integrity: sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==} peerDependencies: - postcss-selector-parser: ^7.0.0 + css-tree: ^3.2.1 + peerDependenciesMeta: + css-tree: + optional: true - '@dual-bundle/import-meta-resolve@4.2.1': - resolution: {integrity: sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==} + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} + + '@csstools/media-query-list-parser@5.0.0': + resolution: {integrity: sha512-T9lXmZOfnam3eMERPsszjY5NK0jX8RmThmmm99FZ8b7z8yMaFZWKwLWGZuTwdO3ddRY5fy13GmmEYZXB4I98Eg==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/selector-resolve-nested@4.0.0': + resolution: {integrity: sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss-selector-parser: ^7.1.1 + + '@csstools/selector-specificity@6.0.0': + resolution: {integrity: sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss-selector-parser: ^7.1.1 '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} @@ -241,8 +259,14 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.0': - resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==} + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.28.0': + resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -253,8 +277,14 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.0': - resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==} + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.28.0': + resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -265,8 +295,14 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.0': - resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==} + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.28.0': + resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -277,8 +313,14 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.0': - resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==} + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.28.0': + resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -289,8 +331,14 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.0': - resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==} + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.28.0': + resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -301,8 +349,14 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.0': - resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==} + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.0': + resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -313,8 +367,14 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.0': - resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==} + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.28.0': + resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -325,8 +385,14 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.0': - resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==} + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.0': + resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -337,8 +403,14 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.0': - resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==} + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.28.0': + resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -349,8 +421,14 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.0': - resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==} + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.28.0': + resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -361,8 +439,14 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.0': - resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==} + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.28.0': + resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -373,8 +457,14 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.0': - resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==} + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.28.0': + resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -385,8 +475,14 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.0': - resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==} + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.28.0': + resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -397,8 +493,14 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.0': - resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==} + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.28.0': + resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -409,8 +511,14 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.0': - resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==} + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.0': + resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -421,8 +529,14 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.0': - resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==} + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.28.0': + resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -433,8 +547,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.0': - resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==} + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.28.0': + resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -445,8 +565,14 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.0': - resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==} + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.28.0': + resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -457,8 +583,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.0': - resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==} + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.0': + resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -469,8 +601,14 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.0': - resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==} + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.28.0': + resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -481,8 +619,14 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.0': - resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==} + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.0': + resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -493,8 +637,14 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.27.0': - resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==} + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.28.0': + resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -505,8 +655,14 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.0': - resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==} + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.28.0': + resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -517,8 +673,14 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.0': - resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==} + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.28.0': + resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -529,8 +691,14 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.0': - resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==} + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.28.0': + resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -541,14 +709,20 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.0': - resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==} + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + '@esbuild/win32-x64@0.28.0': + resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -557,33 +731,25 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-helpers@0.5.5': + resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/js@9.39.1': - resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.7.1': + resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} @@ -625,11 +791,11 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@keyv/bigmap@1.3.0': - resolution: {integrity: sha512-KT01GjzV6AQD5+IYrcpoYLkCu1Jod3nau1Z7EsEuViO3TZGRacSbO9MfHmbJ1WaOXFtWLxPVj169cn2WNKPkIg==} + '@keyv/bigmap@1.3.1': + resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==} engines: {node: '>= 18'} peerDependencies: - keyv: ^5.5.4 + keyv: ^5.6.0 '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} @@ -646,25 +812,32 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@puppeteer/browsers@2.10.13': - resolution: {integrity: sha512-a9Ruw3j3qlnB5a/zHRTkruppynxqaeE4H9WNj5eYGRWqw0ZauZ23f4W2ARf3hghF5doozyD+CRtt7XSYuYRI/Q==} + '@puppeteer/browsers@2.13.0': + resolution: {integrity: sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==} engines: {node: '>=18'} hasBin: true '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@stylistic/eslint-plugin@5.6.0': - resolution: {integrity: sha512-owEc4B8ME+O/xyZOkLVyLqPMsUgJXIM4XzCm5Vt3WvRXpyoOfYxgA+JkEiFqXPCI8+Nc2BzAT+KGAK7QleGs8Q==} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + + '@stylistic/eslint-plugin@5.10.0': + resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: '>=9.0.0' + eslint: ^9.0.0 || ^10.0.0 '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - '@types/chrome@0.1.30': - resolution: {integrity: sha512-rcP14i+ip4s3SLG6JzNOWIDd+0i8Bg+kBslHl8d4g6m/e2kEbWnR90AtlOPUZj9ONVRbKxnQUqsInxFzXyqLdA==} + '@types/chrome@0.1.40': + resolution: {integrity: sha512-UnfyRAe8ORu9HSuTH0EqyOEUin3JrWW9Nl/gDXezNfTUrfIoxw+WRZgKOxGz0t5BnjbfXBnS2eCYfW2PxH1wcA==} + + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -693,17 +866,17 @@ packages: '@types/lodash@4.17.15': resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} - '@types/lodash@4.17.20': - resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + '@types/lodash@4.17.24': + resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} '@types/node@22.13.13': resolution: {integrity: sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==} - '@types/node@22.19.1': - resolution: {integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==} + '@types/node@22.19.17': + resolution: {integrity: sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==} - '@types/node@24.10.1': - resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/node@25.6.0': + resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} @@ -722,69 +895,72 @@ packages: '@types/react@19.0.12': resolution: {integrity: sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==} + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@types/yazl@3.3.0': - resolution: {integrity: sha512-mFL6lGkk2N5u5nIxpNV/K5LW3qVSbxhJrMxYGOOxZndWxMgCamr/iCsq/1t9kd8pEwhuNP91LC5qZm/qS9pOEw==} + '@types/yazl@3.3.1': + resolution: {integrity: sha512-DIWfCKpsTp6hE5BDBHV3+fIL/bLUF9Bv13iDrWnMlmhQpH67buNvI291ZauQ1xcccxK3FqQ9honnXpq4R8NMuQ==} - '@typescript-eslint/eslint-plugin@8.47.0': - resolution: {integrity: sha512-fe0rz9WJQ5t2iaLfdbDc9T80GJy0AeO453q8C3YCilnGozvOyCG5t+EZtg7j7D88+c3FipfP/x+wzGnh1xp8ZA==} + '@typescript-eslint/eslint-plugin@8.58.2': + resolution: {integrity: sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.47.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser': ^8.58.2 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.47.0': - resolution: {integrity: sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==} + '@typescript-eslint/parser@8.58.2': + resolution: {integrity: sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.47.0': - resolution: {integrity: sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==} + '@typescript-eslint/project-service@8.58.2': + resolution: {integrity: sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.47.0': - resolution: {integrity: sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==} + '@typescript-eslint/scope-manager@8.58.2': + resolution: {integrity: sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.47.0': - resolution: {integrity: sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==} + '@typescript-eslint/tsconfig-utils@8.58.2': + resolution: {integrity: sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.47.0': - resolution: {integrity: sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A==} + '@typescript-eslint/type-utils@8.58.2': + resolution: {integrity: sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.47.0': - resolution: {integrity: sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==} + '@typescript-eslint/types@8.58.2': + resolution: {integrity: sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.47.0': - resolution: {integrity: sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==} + '@typescript-eslint/typescript-estree@8.58.2': + resolution: {integrity: sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.47.0': - resolution: {integrity: sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==} + '@typescript-eslint/utils@8.58.2': + resolution: {integrity: sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.47.0': - resolution: {integrity: sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==} + '@typescript-eslint/visitor-keys@8.58.2': + resolution: {integrity: sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vap/core@0.0.12': @@ -808,8 +984,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true @@ -817,16 +993,20 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -850,10 +1030,6 @@ packages: resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - array-unique@0.3.2: resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} engines: {node: '>=0.10.0'} @@ -910,8 +1086,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - b4a@1.7.3: - resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} + b4a@1.8.0: + resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} peerDependencies: react-native-b4a: '*' peerDependenciesMeta: @@ -921,8 +1097,9 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - balanced-match@2.0.0: - resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} bare-events@2.8.2: resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} @@ -932,8 +1109,8 @@ packages: bare-abort-controller: optional: true - bare-fs@4.5.1: - resolution: {integrity: sha512-zGUCsm3yv/ePt2PHNbVxjjn0nNB1MkIaR4wOCxJ2ig5pCf5cCVAYJXVhQg/3OhhJV6DB1ts7Hv0oUaElc2TPQg==} + bare-fs@4.7.1: + resolution: {integrity: sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -941,35 +1118,37 @@ packages: bare-buffer: optional: true - bare-os@3.6.2: - resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} + bare-os@3.8.7: + resolution: {integrity: sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==} engines: {bare: '>=1.14.0'} bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-stream@2.7.0: - resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} + bare-stream@2.13.0: + resolution: {integrity: sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==} peerDependencies: + bare-abort-controller: '*' bare-buffer: '*' bare-events: '*' peerDependenciesMeta: + bare-abort-controller: + optional: true bare-buffer: optional: true bare-events: optional: true - bare-url@2.3.2: - resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==} + bare-url@2.4.0: + resolution: {integrity: sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==} base@0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} - basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + basic-ftp@5.3.0: + resolution: {integrity: sha512-5K9eNNn7ywHPsYnFwjKgYH8Hf8B5emh7JKcPaVjjrMJFQQwGpwowEnZNEtHs7DfR7hCZsmaK3VA4HUK0YarT+w==} engines: {node: '>=10.0.0'} - deprecated: Security vulnerability fixed in 5.2.0, please upgrade boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -977,8 +1156,15 @@ packages: brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@1.1.14: + resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} + + brace-expansion@2.1.0: + resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} + + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -994,8 +1180,8 @@ packages: resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} engines: {node: '>=0.10.0'} - cacheable@2.2.0: - resolution: {integrity: sha512-LEJxRqfeomiiRd2t0uON6hxAtgOoWDfY3fugebbz+J3vDLO+SkdfFChQcOHTZhj9SYa9iwE9MGYNX72dKiOE4w==} + cacheable@2.3.4: + resolution: {integrity: sha512-djgxybDbw9fL/ZWMI3+CE8ZilNxcwFkVtDc1gJ+IlOSSWkSMPQabhV/XCHTQ6pwwN6aivXPZ43omTooZiX06Ew==} call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} @@ -1005,6 +1191,10 @@ packages: resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} + call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} @@ -1020,8 +1210,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chromium-bidi@11.0.0: - resolution: {integrity: sha512-cM3DI+OOb89T3wO8cpPSro80Q9eKYJ7hGVXoGS3GkDPxnYSqiv+6xwpIf6XERyJ9Tdsl09hmNmY94BkgZdVekw==} + chromium-bidi@14.0.0: + resolution: {integrity: sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==} peerDependencies: devtools-protocol: '*' @@ -1072,8 +1262,8 @@ packages: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -1085,9 +1275,9 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-functions-list@3.2.3: - resolution: {integrity: sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==} - engines: {node: '>=12 || >=16'} + css-functions-list@3.3.3: + resolution: {integrity: sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==} + engines: {node: '>=12'} css-select@5.2.2: resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} @@ -1096,8 +1286,8 @@ packages: resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - css-tree@3.1.0: - resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} css-what@6.2.2: @@ -1191,17 +1381,13 @@ packages: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} - devtools-protocol@0.0.1521046: - resolution: {integrity: sha512-vhE6eymDQSKWUXwwA37NtTTVEzjtGVfDr3pRbsWEQ5onH/Snp2c+2xZHWJJawG/0hCCJLRGt4xVtEVUVILol4w==} + devtools-protocol@0.0.1595872: + resolution: {integrity: sha512-kRfgp8vWVjBu/fbYCiVFiOqsCk3CrMKEo3WbgGT2NXK2dG7vawWPBljixajVgGK9II8rDO9G0oD0zLt3I1daRg==} - diff@8.0.2: - resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} + diff@9.0.0: + resolution: {integrity: sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==} engines: {node: '>=0.3.1'} - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -1216,8 +1402,8 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.1.7: - resolution: {integrity: sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==} + dompurify@3.2.7: + resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==} domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} @@ -1250,6 +1436,10 @@ packages: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} + es-abstract@1.24.2: + resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} + engines: {node: '>= 0.4'} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -1283,8 +1473,13 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.27.0: - resolution: {integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==} + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.28.0: + resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} engines: {node: '>=18'} hasBin: true @@ -1307,8 +1502,8 @@ packages: peerDependencies: eslint-plugin-import: '>=1.4.0' - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-resolver-node@0.3.10: + resolution: {integrity: sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==} eslint-module-utils@2.12.1: resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} @@ -1357,23 +1552,23 @@ packages: peerDependencies: eslint: '>=8.41.0' - eslint-plugin-simple-import-sort@12.1.1: - resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==} + eslint-plugin-simple-import-sort@13.0.0: + resolution: {integrity: sha512-McAc+/Nlvcg4byY/CABGH8kqnefWBj8s3JA2okEtz8ixbECQgU46p0HkTUKa4YS7wvgGceimlc34p1nXqbWqtA==} peerDependencies: eslint: '>=5.0.0' - eslint-plugin-unused-imports@4.3.0: - resolution: {integrity: sha512-ZFBmXMGBYfHttdRtOG9nFFpmUvMtbHSjsKrS20vdWdbfiVYsO3yA2SGYy9i9XmZJDfMGBflZGBCm70SEnFQtOA==} + eslint-plugin-unused-imports@4.4.1: + resolution: {integrity: sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ==} peerDependencies: '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 - eslint: ^9.0.0 || ^8.0.0 + eslint: ^10.0.0 || ^9.0.0 || ^8.0.0 peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} @@ -1383,9 +1578,13 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.39.1: - resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.2.0: + resolution: {integrity: sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: jiti: '*' @@ -1397,13 +1596,17 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -1464,17 +1667,26 @@ packages: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - file-entry-cache@10.1.4: - resolution: {integrity: sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==} + file-entry-cache@11.1.2: + resolution: {integrity: sha512-N2WFfK12gmrK1c1GXOqiAJ1tc5YE+R53zvQ+t5P8S5XhnmKYVB5eZEiLNZKDSmoG8wqqbF9EXYBBW/nef19log==} file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} @@ -1500,11 +1712,11 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flat-cache@6.1.19: - resolution: {integrity: sha512-l/K33newPTZMTGAnnzaiqSl6NnH7Namh8jBNjrgjprWxGmZUuxx/sJNIRaijOh3n7q7ESbhNZC+pvVZMFdeU4A==} + flat-cache@6.1.22: + resolution: {integrity: sha512-N2dnzVJIphnNsjHcrxGW7DePckJ6haPrSFqpsBUhHYgwtKGVq4JrBGielEGD2fCVnsGm1zlBVZ8wGhkyuetgug==} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} @@ -1545,6 +1757,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -1564,8 +1780,8 @@ packages: get-tsconfig@4.10.0: resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} get-uri@6.0.5: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} @@ -1607,17 +1823,13 @@ packages: resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==} engines: {node: '>=16'} - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@16.2.0: + resolution: {integrity: sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==} + engines: {node: '>=20'} globjoin@0.1.4: resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} @@ -1629,9 +1841,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} @@ -1640,6 +1849,10 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-flag@5.0.1: + resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} + engines: {node: '>=12'} + has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -1671,8 +1884,8 @@ packages: resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} engines: {node: '>=0.10.0'} - hashery@1.2.0: - resolution: {integrity: sha512-43XJKpwle72Ik5Zpam7MuzRWyNdwwdf6XHlh8wCj2PggvWf+v/Dm5B0dxGZOmddidgeO6Ofu9As/o231Ti/9PA==} + hashery@1.5.1: + resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==} engines: {node: '>=20'} hasown@2.0.2: @@ -1687,17 +1900,20 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} - hookified@1.13.0: - resolution: {integrity: sha512-6sPYUY8olshgM/1LDNW4QZQN0IqgKhtl/1C8koNZBJrKLBk3AZl6chQtNwpNztvfiApHMEwMHek5rv993PRbWw==} + hookified@1.15.1: + resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==} + + hookified@2.1.1: + resolution: {integrity: sha512-AHb76R16GB5EsPBE2J7Ko5kiEyXwviB9P5SMrAKcuAu4vJPZttViAbj9+tZeaQE5zjDme+1vcHP78Yj/WoAveA==} html-minifier-terser@7.2.0: resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true - html-tags@3.3.1: - resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} - engines: {node: '>=8'} + html-tags@5.1.0: + resolution: {integrity: sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==} + engines: {node: '>=20.10'} http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} @@ -1719,6 +1935,9 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -1840,6 +2059,10 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} @@ -1955,8 +2178,8 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - keyv@5.5.4: - resolution: {integrity: sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==} + keyv@5.6.0: + resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} kind-of@3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} @@ -1970,9 +2193,6 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - known-css-properties@0.37.0: - resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -1984,9 +2204,6 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} @@ -2018,18 +2235,18 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - mathml-tag-names@2.1.3: - resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + mathml-tag-names@4.0.0: + resolution: {integrity: sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==} mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - mdn-data@2.12.2: - resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} - meow@13.2.0: - resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} - engines: {node: '>=18'} + meow@14.1.0: + resolution: {integrity: sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==} + engines: {node: '>=20'} merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -2039,11 +2256,18 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: @@ -2059,8 +2283,8 @@ packages: moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - monaco-editor@0.54.0: - resolution: {integrity: sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==} + monaco-editor@0.55.1: + resolution: {integrity: sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==} ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -2085,13 +2309,17 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + netmask@2.1.1: + resolution: {integrity: sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==} engines: {node: '>= 0.4.0'} no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + node-exports-info@1.6.0: + resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} + engines: {node: '>= 0.4'} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -2210,46 +2438,39 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss-resolve-nested-selector@0.1.6: - resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==} - postcss-safe-parser@7.0.1: resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} engines: {node: '>=18.0'} peerDependencies: postcss: ^8.4.31 - postcss-selector-parser@7.1.0: - resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} engines: {node: '>=4'} postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + postcss@8.5.10: + resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -2270,15 +2491,15 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@24.30.0: - resolution: {integrity: sha512-2S3Smy0t0W4wJnNvDe7W0bE7wDmZjfZ3ljfMgJd6hn2Hq/f0jgN+x9PULZo2U3fu5UUIJ+JP8cNUGllu8P91Pg==} + puppeteer-core@24.41.0: + resolution: {integrity: sha512-rLIUri7E/NQ3APSEYCCozaSJx0u8Tu9wxO6BJwnvXmIgILSK3L0TombaVh3izp1njAGrO6H2ru0hcIrLF+gWLw==} engines: {node: '>=18'} q@1.5.1: @@ -2289,8 +2510,8 @@ packages: (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) - qified@0.5.2: - resolution: {integrity: sha512-7gJ6mxcQb9vUBOtbKm5mDevbe2uRcOEVp1g4gb/Q+oLntB3HY8eBhOYRxFI2mlDFlY1e4DOSCptzxarXRvzxCA==} + qified@0.9.1: + resolution: {integrity: sha512-n7mar4T0xQ+39dE2vGTAlbxUEpndwPANH0kDef1/MYsB8Bba9wshkybIRx74qgcvKQPEWErf9AqAdYjhzY2Ilg==} engines: {node: '>=20'} queue-microtask@1.2.3: @@ -2331,10 +2552,6 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -2347,15 +2564,15 @@ packages: engines: {node: '>= 0.4'} hasBin: true - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} - engines: {node: '>= 0.4'} - hasBin: true - resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true + resolve@2.0.0-next.6: + resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==} + engines: {node: '>= 0.4'} + hasBin: true + ret@0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} @@ -2382,8 +2599,9 @@ packages: safe-regex@1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} - sax@1.4.3: - resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + engines: {node: '>=11.0.0'} semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} @@ -2394,8 +2612,8 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} hasBin: true @@ -2443,9 +2661,9 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} @@ -2494,8 +2712,8 @@ packages: resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} engines: {node: '>=0.10.0'} - standalone-electron-types@34.2.0: - resolution: {integrity: sha512-+BIrNe0TdZBBBRS3G/F7cPbuBipSZylSjSrJu9+sjw84+vz36a5oZ7l9NeH7aXgMWmPzPZKsTm+K0nOIvhENJQ==} + standalone-electron-types@41.2.1: + resolution: {integrity: sha512-0NAQpGYvxpqZ87SNaWyJhmgmIZ3vkPkES01j3etqSoRepINU/LpNy9bk4Pyp/4me6rCs11jPoWqzQCEn+e+d6Q==} static-extend@0.1.2: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} @@ -2505,13 +2723,17 @@ packages: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} - streamx@2.23.0: - resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} + streamx@2.25.0: + resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@8.2.0: + resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + engines: {node: '>=20'} + string.prototype.matchall@4.0.12: resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} @@ -2535,38 +2757,42 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - stylelint-config-recommended@17.0.0: - resolution: {integrity: sha512-WaMSdEiPfZTSFVoYmJbxorJfA610O0tlYuU2aEwY33UQhSPgFbClrVJYWvy3jGJx+XW37O+LyNLiZOEXhKhJmA==} - engines: {node: '>=18.12.0'} + stylelint-config-recommended@18.0.0: + resolution: {integrity: sha512-mxgT2XY6YZ3HWWe3Di8umG6aBmWmHTblTgu/f10rqFXnyWxjKWwNdjSWkgkwCtxIKnqjSJzvFmPT5yabVIRxZg==} + engines: {node: '>=20.19.0'} peerDependencies: - stylelint: ^16.23.0 + stylelint: ^17.0.0 - stylelint-config-standard@39.0.1: - resolution: {integrity: sha512-b7Fja59EYHRNOTa3aXiuWnhUWXFU2Nfg6h61bLfAb5GS5fX3LMUD0U5t4S8N/4tpHQg3Acs2UVPR9jy2l1g/3A==} - engines: {node: '>=18.12.0'} + stylelint-config-standard@40.0.0: + resolution: {integrity: sha512-EznGJxOUhtWck2r6dJpbgAdPATIzvpLdK9+i5qPd4Lx70es66TkBPljSg4wN3Qnc6c4h2n+WbUrUynQ3fanjHw==} + engines: {node: '>=20.19.0'} peerDependencies: - stylelint: ^16.23.0 + stylelint: ^17.0.0 - stylelint@16.25.0: - resolution: {integrity: sha512-Li0avYWV4nfv1zPbdnxLYBGq4z8DVZxbRgx4Kn6V+Uftz1rMoF1qiEI3oL4kgWqyYgCgs7gT5maHNZ82Gk03vQ==} - engines: {node: '>=18.12.0'} + stylelint@17.8.0: + resolution: {integrity: sha512-oHkld9T60LDSaUQ4CSVc+tlt9eUoDlxhaGWShsUCKyIL14boZfmK5bSphZqx64aiC5tCqX+BsQMTMoSz8D1zIg==} + engines: {node: '>=20.19.0'} hasBin: true + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - supports-hyperlinks@3.2.0: - resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} - engines: {node: '>=14.18'} + supports-hyperlinks@4.4.0: + resolution: {integrity: sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==} + engines: {node: '>=20'} supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} @@ -2575,8 +2801,8 @@ packages: svg-tags@1.0.0: resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} - svgo@4.0.0: - resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==} + svgo@4.0.1: + resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==} engines: {node: '>=16'} hasBin: true @@ -2588,19 +2814,26 @@ packages: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - tar-fs@3.1.1: - resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} + tar-fs@3.1.2: + resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar-stream@3.1.8: + resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} + + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} terser@5.39.0: resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} engines: {node: '>=10'} hasBin: true - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} + + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} to-object-path@0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} @@ -2614,8 +2847,8 @@ packages: resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} engines: {node: '>=0.10.0'} - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -2627,6 +2860,9 @@ packages: ts-pattern@5.6.2: resolution: {integrity: sha512-d4IxJUXROL5NCa3amvMg6VQW2HVtZYmUTPfvVtO7zJWGYLJ+mry9v2OmYm+z67aniQoQ8/yFNadiEwtNS9qQiw==} + ts-pattern@5.9.0: + resolution: {integrity: sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg==} + tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -2638,8 +2874,8 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - tsx@4.20.6: - resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==} + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} engines: {node: '>=18.0.0'} hasBin: true @@ -2655,8 +2891,8 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - type-fest@5.2.0: - resolution: {integrity: sha512-xxCJm+Bckc6kQBknN7i9fnP/xobQRsRQxR01CztFkp/h++yfVxUUcmMgfR2HttJx/dpWjS9ubVuyspJv24Q9DA==} + type-fest@5.5.0: + resolution: {integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==} engines: {node: '>=20'} typed-array-buffer@1.0.3: @@ -2675,23 +2911,23 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typed-query-selector@2.12.0: - resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + typed-query-selector@2.12.1: + resolution: {integrity: sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==} - typescript-eslint@8.47.0: - resolution: {integrity: sha512-Lwe8i2XQ3WoMjua/r1PHrCTpkubPYJCAfOurtn+mtTzqB6jNd+14n9UN1bJ4s3F49x9ixAm0FLflB/JzQ57M8Q==} + typescript-eslint@8.58.2: + resolution: {integrity: sha512-V8iSng9mRbdZjl54VJ9NKr6ZB+dW0J3TzRXRGcSbLIej9jV86ZRtlYeTKDR/QLxXykocJ5icNzbsl2+5TzIvcQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - typescript-transform-paths@3.5.5: - resolution: {integrity: sha512-RMK86wKe/4+ad+3kMT9SKAs3K0tUHLe7hF+MLbD6VpC9VUmFuKorhf3pHz+qO5GdS4mUp2ncNUo14j6ws9UvBQ==} + typescript-transform-paths@3.5.6: + resolution: {integrity: sha512-3eQTG6Ogt+pgPEh45uX2s9OwcfAVjWnyNO+osjYcOqYaWDVMIFUkqW8e0O1cOaVwdMqQFQf6alDT+76xmeS2Ag==} peerDependencies: typescript: '>=3.6.5' - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + typescript@6.0.2: + resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} engines: {node: '>=14.17'} hasBin: true @@ -2705,8 +2941,12 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.19.2: + resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + + unicorn-magic@0.4.0: + resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} + engines: {node: '>=20'} union-value@1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} @@ -2743,8 +2983,8 @@ packages: vscode-textmate@5.2.0: resolution: {integrity: sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==} - webdriver-bidi-protocol@0.3.8: - resolution: {integrity: sha512-21Yi2GhGntMc671vNBCjiAeEVknXjVRoyu+k+9xOMShu+ZQfpGQwnBqbNz/Sv4GXZ6JmutlPAi2nIJcrymAWuQ==} + webdriver-bidi-protocol@0.4.1: + resolution: {integrity: sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==} which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} @@ -2762,6 +3002,10 @@ packages: resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} + which-typed-array@1.1.20: + resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} + engines: {node: '>= 0.4'} + which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -2787,12 +3031,12 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@5.0.1: - resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + write-file-atomic@7.0.1: + resolution: {integrity: sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==} + engines: {node: ^20.17.0 || >=22.9.0} - ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -2834,7 +3078,7 @@ packages: snapshots: - '@babel/code-frame@7.27.1': + '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 @@ -2842,235 +3086,308 @@ snapshots: '@babel/helper-validator-identifier@7.28.5': {} - '@cacheable/memory@2.0.5': + '@cacheable/memory@2.0.8': dependencies: - '@cacheable/utils': 2.3.1 - '@keyv/bigmap': 1.3.0(keyv@5.5.4) - hookified: 1.13.0 - keyv: 5.5.4 + '@cacheable/utils': 2.4.1 + '@keyv/bigmap': 1.3.1(keyv@5.6.0) + hookified: 1.15.1 + keyv: 5.6.0 - '@cacheable/utils@2.3.1': + '@cacheable/utils@2.4.1': dependencies: - hashery: 1.2.0 - keyv: 5.5.4 + hashery: 1.5.1 + keyv: 5.6.0 - '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-calc@3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-tokenizer@3.0.4': {} - - '@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-tokenizer': 4.0.0 - '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)': + '@csstools/css-syntax-patches-for-csstree@1.1.3(css-tree@3.2.1)': + optionalDependencies: + css-tree: 3.2.1 + + '@csstools/css-tokenizer@4.0.0': {} + + '@csstools/media-query-list-parser@5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - postcss-selector-parser: 7.1.0 + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 - '@dual-bundle/import-meta-resolve@4.2.1': {} + '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + + '@csstools/selector-specificity@6.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/aix-ppc64@0.27.0': + '@esbuild/aix-ppc64@0.27.7': + optional: true + + '@esbuild/aix-ppc64@0.28.0': optional: true '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm64@0.27.0': + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.28.0': optional: true '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-arm@0.27.0': + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-arm@0.28.0': optional: true '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/android-x64@0.27.0': + '@esbuild/android-x64@0.27.7': + optional: true + + '@esbuild/android-x64@0.28.0': optional: true '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.27.0': + '@esbuild/darwin-arm64@0.27.7': + optional: true + + '@esbuild/darwin-arm64@0.28.0': optional: true '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/darwin-x64@0.27.0': + '@esbuild/darwin-x64@0.27.7': + optional: true + + '@esbuild/darwin-x64@0.28.0': optional: true '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.27.0': + '@esbuild/freebsd-arm64@0.27.7': + optional: true + + '@esbuild/freebsd-arm64@0.28.0': optional: true '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.27.0': + '@esbuild/freebsd-x64@0.27.7': + optional: true + + '@esbuild/freebsd-x64@0.28.0': optional: true '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm64@0.27.0': + '@esbuild/linux-arm64@0.27.7': + optional: true + + '@esbuild/linux-arm64@0.28.0': optional: true '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-arm@0.27.0': + '@esbuild/linux-arm@0.27.7': + optional: true + + '@esbuild/linux-arm@0.28.0': optional: true '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-ia32@0.27.0': + '@esbuild/linux-ia32@0.27.7': + optional: true + + '@esbuild/linux-ia32@0.28.0': optional: true '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-loong64@0.27.0': + '@esbuild/linux-loong64@0.27.7': + optional: true + + '@esbuild/linux-loong64@0.28.0': optional: true '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-mips64el@0.27.0': + '@esbuild/linux-mips64el@0.27.7': + optional: true + + '@esbuild/linux-mips64el@0.28.0': optional: true '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-ppc64@0.27.0': + '@esbuild/linux-ppc64@0.27.7': + optional: true + + '@esbuild/linux-ppc64@0.28.0': optional: true '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.27.0': + '@esbuild/linux-riscv64@0.27.7': + optional: true + + '@esbuild/linux-riscv64@0.28.0': optional: true '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-s390x@0.27.0': + '@esbuild/linux-s390x@0.27.7': + optional: true + + '@esbuild/linux-s390x@0.28.0': optional: true '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/linux-x64@0.27.0': + '@esbuild/linux-x64@0.27.7': + optional: true + + '@esbuild/linux-x64@0.28.0': optional: true '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.27.0': + '@esbuild/netbsd-arm64@0.27.7': + optional: true + + '@esbuild/netbsd-arm64@0.28.0': optional: true '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.27.0': + '@esbuild/netbsd-x64@0.27.7': + optional: true + + '@esbuild/netbsd-x64@0.28.0': optional: true '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.27.0': + '@esbuild/openbsd-arm64@0.27.7': + optional: true + + '@esbuild/openbsd-arm64@0.28.0': optional: true '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.27.0': + '@esbuild/openbsd-x64@0.27.7': + optional: true + + '@esbuild/openbsd-x64@0.28.0': optional: true '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.27.0': + '@esbuild/openharmony-arm64@0.27.7': + optional: true + + '@esbuild/openharmony-arm64@0.28.0': optional: true '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/sunos-x64@0.27.0': + '@esbuild/sunos-x64@0.27.7': + optional: true + + '@esbuild/sunos-x64@0.28.0': optional: true '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-arm64@0.27.0': + '@esbuild/win32-arm64@0.27.7': + optional: true + + '@esbuild/win32-arm64@0.28.0': optional: true '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-ia32@0.27.0': + '@esbuild/win32-ia32@0.27.7': + optional: true + + '@esbuild/win32-ia32@0.28.0': optional: true '@esbuild/win32-x64@0.25.12': optional: true - '@esbuild/win32-x64@0.27.0': + '@esbuild/win32-x64@0.27.7': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)': + '@esbuild/win32-x64@0.28.0': + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@10.2.0)': dependencies: - eslint: 9.39.1 + eslint: 10.2.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.21.1': + '@eslint/config-array@0.23.5': dependencies: - '@eslint/object-schema': 2.1.7 + '@eslint/object-schema': 3.0.5 debug: 4.4.3 - minimatch: 3.1.2 + minimatch: 10.2.5 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.4.2': + '@eslint/config-helpers@0.5.5': dependencies: - '@eslint/core': 0.17.0 + '@eslint/core': 1.2.1 - '@eslint/core@0.17.0': + '@eslint/core@1.2.1': dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.1': + '@eslint/object-schema@3.0.5': {} + + '@eslint/plugin-kit@0.7.1': dependencies: - ajv: 6.12.6 - debug: 4.4.3 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.39.1': {} - - '@eslint/object-schema@2.1.7': {} - - '@eslint/plugin-kit@0.4.1': - dependencies: - '@eslint/core': 0.17.0 + '@eslint/core': 1.2.1 levn: 0.4.1 '@humanfs/core@0.19.1': {} @@ -3108,11 +3425,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@keyv/bigmap@1.3.0(keyv@5.5.4)': + '@keyv/bigmap@1.3.1(keyv@5.6.0)': dependencies: - hashery: 1.2.0 - hookified: 1.13.0 - keyv: 5.5.4 + hashery: 1.5.1 + hookified: 1.15.1 + keyv: 5.6.0 '@keyv/serialize@1.1.1': {} @@ -3126,16 +3443,16 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + fastq: 1.20.1 - '@puppeteer/browsers@2.10.13': + '@puppeteer/browsers@2.13.0': dependencies: debug: 4.4.3 extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 - semver: 7.7.3 - tar-fs: 3.1.1 + semver: 7.7.4 + tar-fs: 3.1.2 yargs: 17.7.2 transitivePeerDependencies: - bare-abort-controller @@ -3145,23 +3462,27 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@stylistic/eslint-plugin@5.6.0(eslint@9.39.1)': + '@sindresorhus/merge-streams@4.0.0': {} + + '@stylistic/eslint-plugin@5.10.0(eslint@10.2.0)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) - '@typescript-eslint/types': 8.47.0 - eslint: 9.39.1 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0) + '@typescript-eslint/types': 8.58.2 + eslint: 10.2.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 - picomatch: 4.0.3 + picomatch: 4.0.4 '@tootallnate/quickjs-emscripten@0.23.0': {} - '@types/chrome@0.1.30': + '@types/chrome@0.1.40': dependencies: '@types/filesystem': 0.0.36 '@types/har-format': 1.2.16 + '@types/esrecurse@4.3.1': {} + '@types/estree@1.0.8': {} '@types/filesystem@0.0.36': @@ -3187,19 +3508,19 @@ snapshots: '@types/lodash@4.17.15': {} - '@types/lodash@4.17.20': {} + '@types/lodash@4.17.24': {} '@types/node@22.13.13': dependencies: undici-types: 6.20.0 - '@types/node@22.19.1': + '@types/node@22.19.17': dependencies: undici-types: 6.21.0 - '@types/node@24.10.1': + '@types/node@25.6.0': dependencies: - undici-types: 7.16.0 + undici-types: 7.19.2 '@types/prop-types@15.7.15': {} @@ -3220,107 +3541,108 @@ snapshots: dependencies: csstype: 3.1.3 - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 24.10.1 + '@types/trusted-types@2.0.7': optional: true - '@types/yazl@3.3.0': + '@types/yauzl@2.10.3': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.6.0 + optional: true - '@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)': + '@types/yazl@3.3.1': + dependencies: + '@types/node': 25.6.0 + + '@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0)(typescript@6.0.2)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.47.0 - '@typescript-eslint/type-utils': 8.47.0(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.47.0 - eslint: 9.39.1 - graphemer: 1.4.0 + '@typescript-eslint/parser': 8.58.2(eslint@10.2.0)(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.58.2 + '@typescript-eslint/type-utils': 8.58.2(eslint@10.2.0)(typescript@6.0.2) + '@typescript-eslint/utils': 8.58.2(eslint@10.2.0)(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.58.2 + eslint: 10.2.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/parser@8.58.2(eslint@10.2.0)(typescript@6.0.2)': dependencies: - '@typescript-eslint/scope-manager': 8.47.0 - '@typescript-eslint/types': 8.47.0 - '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.47.0 + '@typescript-eslint/scope-manager': 8.58.2 + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/typescript-estree': 8.58.2(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.58.2 debug: 4.4.3 - eslint: 9.39.1 - typescript: 5.9.3 + eslint: 10.2.0 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.47.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.58.2(typescript@6.0.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.9.3) - '@typescript-eslint/types': 8.47.0 + '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@6.0.2) + '@typescript-eslint/types': 8.58.2 debug: 4.4.3 - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.47.0': + '@typescript-eslint/scope-manager@8.58.2': dependencies: - '@typescript-eslint/types': 8.47.0 - '@typescript-eslint/visitor-keys': 8.47.0 + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/visitor-keys': 8.58.2 - '@typescript-eslint/tsconfig-utils@8.47.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.58.2(typescript@6.0.2)': dependencies: - typescript: 5.9.3 + typescript: 6.0.2 - '@typescript-eslint/type-utils@8.47.0(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.58.2(eslint@10.2.0)(typescript@6.0.2)': dependencies: - '@typescript-eslint/types': 8.47.0 - '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/typescript-estree': 8.58.2(typescript@6.0.2) + '@typescript-eslint/utils': 8.58.2(eslint@10.2.0)(typescript@6.0.2) debug: 4.4.3 - eslint: 9.39.1 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 + eslint: 10.2.0 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.47.0': {} + '@typescript-eslint/types@8.58.2': {} - '@typescript-eslint/typescript-estree@8.47.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.58.2(typescript@6.0.2)': dependencies: - '@typescript-eslint/project-service': 8.47.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.9.3) - '@typescript-eslint/types': 8.47.0 - '@typescript-eslint/visitor-keys': 8.47.0 + '@typescript-eslint/project-service': 8.58.2(typescript@6.0.2) + '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@6.0.2) + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/visitor-keys': 8.58.2 debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.3 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 + minimatch: 10.2.5 + semver: 7.7.4 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.47.0(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/utils@8.58.2(eslint@10.2.0)(typescript@6.0.2)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) - '@typescript-eslint/scope-manager': 8.47.0 - '@typescript-eslint/types': 8.47.0 - '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3) - eslint: 9.39.1 - typescript: 5.9.3 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0) + '@typescript-eslint/scope-manager': 8.58.2 + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/typescript-estree': 8.58.2(typescript@6.0.2) + eslint: 10.2.0 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.47.0': + '@typescript-eslint/visitor-keys@8.58.2': dependencies: - '@typescript-eslint/types': 8.47.0 - eslint-visitor-keys: 4.2.1 + '@typescript-eslint/types': 8.58.2 + eslint-visitor-keys: 5.0.1 '@vap/core@0.0.12': dependencies: @@ -3338,24 +3660,24 @@ snapshots: moment: 2.30.1 type-fest: 4.41.0 - acorn-jsx@5.3.2(acorn@8.15.0): + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn@8.14.1: {} - acorn@8.15.0: {} + acorn@8.16.0: {} agent-base@7.1.4: {} - ajv@6.12.6: + ajv@6.14.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.17.1: + ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.1.0 @@ -3364,6 +3686,8 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.2.2: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -3390,8 +3714,6 @@ snapshots: is-string: 1.1.1 math-intrinsics: 1.1.0 - array-union@2.1.0: {} - array-unique@0.3.2: {} array.prototype.findlast@1.2.5: @@ -3405,10 +3727,10 @@ snapshots: array.prototype.findlastindex@1.2.6: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -3463,48 +3785,43 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - b4a@1.7.3: {} + b4a@1.8.0: {} balanced-match@1.0.2: {} - balanced-match@2.0.0: {} + balanced-match@4.0.4: {} bare-events@2.8.2: {} - bare-fs@4.5.1: + bare-fs@4.7.1: dependencies: bare-events: 2.8.2 bare-path: 3.0.0 - bare-stream: 2.7.0(bare-events@2.8.2) - bare-url: 2.3.2 + bare-stream: 2.13.0(bare-events@2.8.2) + bare-url: 2.4.0 fast-fifo: 1.3.2 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - optional: true - bare-os@3.6.2: - optional: true + bare-os@3.8.7: {} bare-path@3.0.0: dependencies: - bare-os: 3.6.2 - optional: true + bare-os: 3.8.7 - bare-stream@2.7.0(bare-events@2.8.2): + bare-stream@2.13.0(bare-events@2.8.2): dependencies: - streamx: 2.23.0 + streamx: 2.25.0 + teex: 1.0.1 optionalDependencies: bare-events: 2.8.2 transitivePeerDependencies: - - bare-abort-controller - react-native-b4a - optional: true - bare-url@2.3.2: + bare-url@2.4.0: dependencies: bare-path: 3.0.0 - optional: true base@0.11.2: dependencies: @@ -3516,7 +3833,7 @@ snapshots: mixin-deep: 1.3.2 pascalcase: 0.1.1 - basic-ftp@5.0.5: {} + basic-ftp@5.3.0: {} boolbase@1.0.0: {} @@ -3525,9 +3842,18 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@1.1.14: dependencies: balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.1.0: + dependencies: + balanced-match: 1.0.2 + + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 braces@3.0.3: dependencies: @@ -3549,13 +3875,13 @@ snapshots: union-value: 1.0.1 unset-value: 1.0.0 - cacheable@2.2.0: + cacheable@2.3.4: dependencies: - '@cacheable/memory': 2.0.5 - '@cacheable/utils': 2.3.1 - hookified: 1.13.0 - keyv: 5.5.4 - qified: 0.5.2 + '@cacheable/memory': 2.0.8 + '@cacheable/utils': 2.4.1 + hookified: 1.15.1 + keyv: 5.6.0 + qified: 0.9.1 call-bind-apply-helpers@1.0.2: dependencies: @@ -3569,6 +3895,13 @@ snapshots: get-intrinsic: 1.3.0 set-function-length: 1.2.2 + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + call-bound@1.0.4: dependencies: call-bind-apply-helpers: 1.0.2 @@ -3586,9 +3919,9 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chromium-bidi@11.0.0(devtools-protocol@0.0.1521046): + chromium-bidi@14.0.0(devtools-protocol@0.0.1595872): dependencies: - devtools-protocol: 0.0.1521046 + devtools-protocol: 0.0.1595872 mitt: 3.0.1 zod: 3.25.76 @@ -3634,14 +3967,14 @@ snapshots: copy-descriptor@0.1.1: {} - cosmiconfig@9.0.0(typescript@5.9.3): + cosmiconfig@9.0.1(typescript@6.0.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.1 parse-json: 5.2.0 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 cross-spawn@7.0.6: dependencies: @@ -3649,7 +3982,7 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-functions-list@3.2.3: {} + css-functions-list@3.3.3: {} css-select@5.2.2: dependencies: @@ -3664,9 +3997,9 @@ snapshots: mdn-data: 2.0.28 source-map-js: 1.2.1 - css-tree@3.1.0: + css-tree@3.2.1: dependencies: - mdn-data: 2.12.2 + mdn-data: 2.27.1 source-map-js: 1.2.1 css-what@6.2.2: {} @@ -3748,13 +4081,9 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 - devtools-protocol@0.0.1521046: {} + devtools-protocol@0.0.1595872: {} - diff@8.0.2: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 + diff@9.0.0: {} doctrine@2.1.0: dependencies: @@ -3772,7 +4101,9 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.1.7: {} + dompurify@3.2.7: + optionalDependencies: + '@types/trusted-types': 2.0.7 domutils@3.2.2: dependencies: @@ -3862,6 +4193,63 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 + es-abstract@1.24.2: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.20 + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -3935,34 +4323,63 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 - esbuild@0.27.0: + esbuild@0.27.7: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.0 - '@esbuild/android-arm': 0.27.0 - '@esbuild/android-arm64': 0.27.0 - '@esbuild/android-x64': 0.27.0 - '@esbuild/darwin-arm64': 0.27.0 - '@esbuild/darwin-x64': 0.27.0 - '@esbuild/freebsd-arm64': 0.27.0 - '@esbuild/freebsd-x64': 0.27.0 - '@esbuild/linux-arm': 0.27.0 - '@esbuild/linux-arm64': 0.27.0 - '@esbuild/linux-ia32': 0.27.0 - '@esbuild/linux-loong64': 0.27.0 - '@esbuild/linux-mips64el': 0.27.0 - '@esbuild/linux-ppc64': 0.27.0 - '@esbuild/linux-riscv64': 0.27.0 - '@esbuild/linux-s390x': 0.27.0 - '@esbuild/linux-x64': 0.27.0 - '@esbuild/netbsd-arm64': 0.27.0 - '@esbuild/netbsd-x64': 0.27.0 - '@esbuild/openbsd-arm64': 0.27.0 - '@esbuild/openbsd-x64': 0.27.0 - '@esbuild/openharmony-arm64': 0.27.0 - '@esbuild/sunos-x64': 0.27.0 - '@esbuild/win32-arm64': 0.27.0 - '@esbuild/win32-ia32': 0.27.0 - '@esbuild/win32-x64': 0.27.0 + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 + + esbuild@0.28.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.0 + '@esbuild/android-arm': 0.28.0 + '@esbuild/android-arm64': 0.28.0 + '@esbuild/android-x64': 0.28.0 + '@esbuild/darwin-arm64': 0.28.0 + '@esbuild/darwin-x64': 0.28.0 + '@esbuild/freebsd-arm64': 0.28.0 + '@esbuild/freebsd-x64': 0.28.0 + '@esbuild/linux-arm': 0.28.0 + '@esbuild/linux-arm64': 0.28.0 + '@esbuild/linux-ia32': 0.28.0 + '@esbuild/linux-loong64': 0.28.0 + '@esbuild/linux-mips64el': 0.28.0 + '@esbuild/linux-ppc64': 0.28.0 + '@esbuild/linux-riscv64': 0.28.0 + '@esbuild/linux-s390x': 0.28.0 + '@esbuild/linux-x64': 0.28.0 + '@esbuild/netbsd-arm64': 0.28.0 + '@esbuild/netbsd-x64': 0.28.0 + '@esbuild/openbsd-arm64': 0.28.0 + '@esbuild/openbsd-x64': 0.28.0 + '@esbuild/openharmony-arm64': 0.28.0 + '@esbuild/sunos-x64': 0.28.0 + '@esbuild/win32-arm64': 0.28.0 + '@esbuild/win32-ia32': 0.28.0 + '@esbuild/win32-x64': 0.28.0 escalade@3.2.0: {} @@ -3976,29 +4393,29 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0)): dependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0) - eslint-import-resolver-node@0.3.9: + eslint-import-resolver-node@0.3.10: dependencies: debug: 3.2.7 is-core-module: 2.16.1 - resolve: 1.22.11 + resolve: 2.0.0-next.6 transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.2(eslint@10.2.0)(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint@10.2.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3) - eslint: 9.39.1 - eslint-import-resolver-node: 0.3.9 + '@typescript-eslint/parser': 8.58.2(eslint@10.2.0)(typescript@6.0.2) + eslint: 10.2.0 + eslint-import-resolver-node: 0.3.10 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -4007,13 +4424,13 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.39.1 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1) + eslint: 10.2.0 + eslint-import-resolver-node: 0.3.10 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.2(eslint@10.2.0)(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint@10.2.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 - minimatch: 3.1.2 + minimatch: 3.1.5 object.fromentries: 2.0.8 object.groupby: 1.0.3 object.values: 1.2.1 @@ -4021,22 +4438,22 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.2(eslint@10.2.0)(typescript@6.0.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-path-alias@2.1.0(patch_hash=87545cb13985b338c8fa2ea7b0a3c75c57ad7fbc81c56b38d6c9438329957727)(eslint@9.39.1): + eslint-plugin-path-alias@2.1.0(patch_hash=87545cb13985b338c8fa2ea7b0a3c75c57ad7fbc81c56b38d6c9438329957727)(eslint@10.2.0): dependencies: - eslint: 9.39.1 + eslint: 10.2.0 find-pkg: 2.0.0 get-tsconfig: 4.10.0 nanomatch: 1.2.13 transitivePeerDependencies: - supports-color - eslint-plugin-react@7.37.5(eslint@9.39.1): + eslint-plugin-react@7.37.5(eslint@10.2.0): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -4044,7 +4461,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.39.1 + eslint: 10.2.0 estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -4058,22 +4475,24 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-simple-header@1.2.2(eslint@9.39.1): + eslint-plugin-simple-header@1.2.2(eslint@10.2.0): dependencies: - eslint: 9.39.1 + eslint: 10.2.0 - eslint-plugin-simple-import-sort@12.1.1(eslint@9.39.1): + eslint-plugin-simple-import-sort@13.0.0(eslint@10.2.0): dependencies: - eslint: 9.39.1 + eslint: 10.2.0 - eslint-plugin-unused-imports@4.3.0(@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1): + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0): dependencies: - eslint: 9.39.1 + eslint: 10.2.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0)(typescript@6.0.2) - eslint-scope@8.4.0: + eslint-scope@9.1.2: dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -4081,29 +4500,28 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.39.1: + eslint-visitor-keys@5.0.1: {} + + eslint@10.2.0: dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 - '@eslint/config-helpers': 0.4.2 - '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.39.1 - '@eslint/plugin-kit': 0.4.1 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.5.5 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - ajv: 6.12.6 - chalk: 4.1.2 + ajv: 6.14.0 cross-spawn: 7.0.6 debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.6.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -4113,8 +4531,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.4 transitivePeerDependencies: @@ -4122,13 +4539,19 @@ snapshots: espree@10.4.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 4.2.1 + espree@11.2.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 + esprima@4.0.1: {} - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -4191,7 +4614,7 @@ snapshots: fastest-levenshtein@1.0.16: {} - fastq@1.19.1: + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -4199,11 +4622,15 @@ snapshots: dependencies: pend: 1.2.0 + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + fflate@0.8.2: {} - file-entry-cache@10.1.4: + file-entry-cache@11.1.2: dependencies: - flat-cache: 6.1.19 + flat-cache: 6.1.22 file-entry-cache@8.0.0: dependencies: @@ -4228,16 +4655,16 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.2 keyv: 4.5.4 - flat-cache@6.1.19: + flat-cache@6.1.22: dependencies: - cacheable: 2.2.0 - flatted: 3.3.3 - hookified: 1.13.0 + cacheable: 2.3.4 + flatted: 3.4.2 + hookified: 1.15.1 - flatted@3.3.3: {} + flatted@3.4.2: {} for-each@0.3.5: dependencies: @@ -4275,6 +4702,8 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.5.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -4295,7 +4724,7 @@ snapshots: get-stream@5.2.0: dependencies: - pump: 3.0.3 + pump: 3.0.4 get-symbol-description@1.1.0: dependencies: @@ -4307,13 +4736,13 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - get-tsconfig@4.13.0: + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 get-uri@6.0.5: dependencies: - basic-ftp: 5.0.5 + basic-ftp: 5.3.0 data-uri-to-buffer: 6.0.2 debug: 4.4.3 transitivePeerDependencies: @@ -4361,21 +4790,19 @@ snapshots: kind-of: 6.0.3 which: 4.0.0 - globals@14.0.0: {} - globalthis@1.0.4: dependencies: define-properties: 1.2.1 gopd: 1.2.0 - globby@11.1.0: + globby@16.2.0: dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 + '@sindresorhus/merge-streams': 4.0.0 fast-glob: 3.3.3 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 + ignore: 7.0.5 + is-path-inside: 4.0.0 + slash: 5.1.0 + unicorn-magic: 0.4.0 globjoin@0.1.4: {} @@ -4383,12 +4810,12 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - has-bigints@1.1.0: {} has-flag@4.0.0: {} + has-flag@5.0.1: {} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 @@ -4422,9 +4849,9 @@ snapshots: is-number: 3.0.0 kind-of: 4.0.0 - hashery@1.2.0: + hashery@1.5.1: dependencies: - hookified: 1.13.0 + hookified: 1.15.1 hasown@2.0.2: dependencies: @@ -4436,7 +4863,9 @@ snapshots: dependencies: parse-passwd: 1.0.0 - hookified@1.13.0: {} + hookified@1.15.1: {} + + hookified@2.1.1: {} html-minifier-terser@7.2.0: dependencies: @@ -4448,7 +4877,7 @@ snapshots: relateurl: 0.2.7 terser: 5.39.0 - html-tags@3.3.1: {} + html-tags@5.1.0: {} http-proxy-agent@7.0.2: dependencies: @@ -4473,6 +4902,8 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-meta-resolve@4.2.0: {} + imurmurhash@0.1.4: {} ini@1.3.8: {} @@ -4590,6 +5021,8 @@ snapshots: is-number@7.0.0: {} + is-path-inside@4.0.0: {} + is-plain-object@2.0.4: dependencies: isobject: 3.0.1 @@ -4703,7 +5136,7 @@ snapshots: dependencies: json-buffer: 3.0.1 - keyv@5.5.4: + keyv@5.6.0: dependencies: '@keyv/serialize': 1.1.1 @@ -4717,8 +5150,6 @@ snapshots: kind-of@6.0.3: {} - known-css-properties@0.37.0: {} - levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -4730,8 +5161,6 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash.merge@4.6.2: {} - lodash.truncate@4.4.2: {} loose-envify@1.4.0: @@ -4754,28 +5183,36 @@ snapshots: math-intrinsics@1.1.0: {} - mathml-tag-names@2.1.3: {} + mathml-tag-names@4.0.0: {} mdn-data@2.0.28: {} - mdn-data@2.12.2: {} + mdn-data@2.27.1: {} - meow@13.2.0: {} + meow@14.1.0: {} merge2@1.4.1: {} micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 + + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.5 minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 - minimatch@9.0.5: + minimatch@3.1.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 1.1.14 + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.0 minimist@1.2.8: {} @@ -4788,9 +5225,9 @@ snapshots: moment@2.30.1: {} - monaco-editor@0.54.0: + monaco-editor@0.55.1: dependencies: - dompurify: 3.1.7 + dompurify: 3.2.7 marked: 14.0.0 ms@2.0.0: {} @@ -4819,13 +5256,20 @@ snapshots: natural-compare@1.4.0: {} - netmask@2.0.2: {} + netmask@2.1.1: {} no-case@3.0.4: dependencies: lower-case: 2.0.2 tslib: 2.8.1 + node-exports-info@1.6.0: + dependencies: + array.prototype.flatmap: 1.3.3 + es-errors: 1.3.0 + object.entries: 1.1.9 + semver: 6.3.1 + normalize-path@3.0.0: {} nth-check@2.1.1: @@ -4873,9 +5317,9 @@ snapshots: object.groupby@1.0.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.2 object.pick@1.3.0: dependencies: @@ -4935,7 +5379,7 @@ snapshots: pac-resolver@7.0.1: dependencies: degenerator: 5.0.1 - netmask: 2.0.2 + netmask: 2.1.1 pako@1.0.11: {} @@ -4950,7 +5394,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.29.0 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -4970,32 +5414,28 @@ snapshots: path-parse@1.0.7: {} - path-type@4.0.0: {} - pend@1.2.0: {} picocolors@1.1.1: {} - picomatch@2.3.1: {} + picomatch@2.3.2: {} - picomatch@4.0.3: {} + picomatch@4.0.4: {} possible-typed-array-names@1.1.0: {} - postcss-resolve-nested-selector@0.1.6: {} - - postcss-safe-parser@7.0.1(postcss@8.5.6): + postcss-safe-parser@7.0.1(postcss@8.5.10): dependencies: - postcss: 8.5.6 + postcss: 8.5.10 - postcss-selector-parser@7.1.0: + postcss-selector-parser@7.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 postcss-value-parser@4.2.0: {} - postcss@8.5.6: + postcss@8.5.10: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -5026,22 +5466,22 @@ snapshots: proxy-from-env@1.1.0: {} - pump@3.0.3: + pump@3.0.4: dependencies: end-of-stream: 1.4.5 once: 1.4.0 punycode@2.3.1: {} - puppeteer-core@24.30.0: + puppeteer-core@24.41.0: dependencies: - '@puppeteer/browsers': 2.10.13 - chromium-bidi: 11.0.0(devtools-protocol@0.0.1521046) + '@puppeteer/browsers': 2.13.0 + chromium-bidi: 14.0.0(devtools-protocol@0.0.1595872) debug: 4.4.3 - devtools-protocol: 0.0.1521046 - typed-query-selector: 2.12.0 - webdriver-bidi-protocol: 0.3.8 - ws: 8.18.3 + devtools-protocol: 0.0.1595872 + typed-query-selector: 2.12.1 + webdriver-bidi-protocol: 0.4.1 + ws: 8.20.0 transitivePeerDependencies: - bare-abort-controller - bare-buffer @@ -5052,9 +5492,9 @@ snapshots: q@1.5.1: {} - qified@0.5.2: + qified@0.9.1: dependencies: - hookified: 1.13.0 + hookified: 2.1.1 queue-microtask@1.2.3: {} @@ -5098,8 +5538,6 @@ snapshots: resolve-from@4.0.0: {} - resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} resolve-url@0.2.1: {} @@ -5110,15 +5548,18 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@1.22.11: + resolve@2.0.0-next.5: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: + resolve@2.0.0-next.6: dependencies: + es-errors: 1.3.0 is-core-module: 2.16.1 + node-exports-info: 1.6.0 + object-keys: 1.1.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -5153,13 +5594,13 @@ snapshots: dependencies: ret: 0.1.15 - sax@1.4.3: {} + sax@1.6.0: {} semver@6.3.1: {} semver@7.7.1: {} - semver@7.7.3: {} + semver@7.7.4: {} set-function-length@1.2.2: dependencies: @@ -5226,7 +5667,7 @@ snapshots: signal-exit@4.1.0: {} - slash@3.0.0: {} + slash@5.1.0: {} slice-ansi@4.0.0: dependencies: @@ -5287,9 +5728,9 @@ snapshots: dependencies: extend-shallow: 3.0.2 - standalone-electron-types@34.2.0: + standalone-electron-types@41.2.1: dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.17 static-extend@0.1.2: dependencies: @@ -5301,11 +5742,11 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 - streamx@2.23.0: + streamx@2.25.0: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 - text-decoder: 1.2.3 + text-decoder: 1.2.7 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -5316,6 +5757,11 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@8.2.0: + dependencies: + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 + string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 @@ -5364,89 +5810,91 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + strip-bom@3.0.0: {} - strip-json-comments@3.1.1: {} - - stylelint-config-recommended@17.0.0(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-recommended@18.0.0(stylelint@17.8.0(typescript@6.0.2)): dependencies: - stylelint: 16.25.0(typescript@5.9.3) + stylelint: 17.8.0(typescript@6.0.2) - stylelint-config-standard@39.0.1(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-standard@40.0.0(stylelint@17.8.0(typescript@6.0.2)): dependencies: - stylelint: 16.25.0(typescript@5.9.3) - stylelint-config-recommended: 17.0.0(stylelint@16.25.0(typescript@5.9.3)) + stylelint: 17.8.0(typescript@6.0.2) + stylelint-config-recommended: 18.0.0(stylelint@17.8.0(typescript@6.0.2)) - stylelint@16.25.0(typescript@5.9.3): + stylelint@17.8.0(typescript@6.0.2): dependencies: - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) - '@dual-bundle/import-meta-resolve': 4.2.1 - balanced-match: 2.0.0 + '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-syntax-patches-for-csstree': 1.1.3(css-tree@3.2.1) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) colord: 2.9.3 - cosmiconfig: 9.0.0(typescript@5.9.3) - css-functions-list: 3.2.3 - css-tree: 3.1.0 + cosmiconfig: 9.0.1(typescript@6.0.2) + css-functions-list: 3.3.3 + css-tree: 3.2.1 debug: 4.4.3 fast-glob: 3.3.3 fastest-levenshtein: 1.0.16 - file-entry-cache: 10.1.4 + file-entry-cache: 11.1.2 global-modules: 2.0.0 - globby: 11.1.0 + globby: 16.2.0 globjoin: 0.1.4 - html-tags: 3.3.1 + html-tags: 5.1.0 ignore: 7.0.5 - imurmurhash: 0.1.4 + import-meta-resolve: 4.2.0 is-plain-object: 5.0.0 - known-css-properties: 0.37.0 - mathml-tag-names: 2.1.3 - meow: 13.2.0 + mathml-tag-names: 4.0.0 + meow: 14.1.0 micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.6 - postcss-resolve-nested-selector: 0.1.6 - postcss-safe-parser: 7.0.1(postcss@8.5.6) - postcss-selector-parser: 7.1.0 + postcss: 8.5.10 + postcss-safe-parser: 7.0.1(postcss@8.5.10) + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - resolve-from: 5.0.0 - string-width: 4.2.3 - supports-hyperlinks: 3.2.0 + string-width: 8.2.0 + supports-hyperlinks: 4.4.0 svg-tags: 1.0.0 table: 6.9.0 - write-file-atomic: 5.0.1 + write-file-atomic: 7.0.1 transitivePeerDependencies: - supports-color - typescript + supports-color@10.2.2: {} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - supports-hyperlinks@3.2.0: + supports-hyperlinks@4.4.0: dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 + has-flag: 5.0.1 + supports-color: 10.2.2 supports-preserve-symlinks-flag@1.0.0: {} svg-tags@1.0.0: {} - svgo@4.0.0: + svgo@4.0.1: dependencies: commander: 11.1.0 css-select: 5.2.2 - css-tree: 3.1.0 + css-tree: 3.2.1 css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 - sax: 1.4.3 + sax: 1.6.0 table@6.9.0: dependencies: - ajv: 8.17.1 + ajv: 8.18.0 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 @@ -5454,23 +5902,32 @@ snapshots: tagged-tag@1.0.0: {} - tar-fs@3.1.1: + tar-fs@3.1.2: dependencies: - pump: 3.0.3 - tar-stream: 3.1.7 + pump: 3.0.4 + tar-stream: 3.1.8 optionalDependencies: - bare-fs: 4.5.1 + bare-fs: 4.7.1 bare-path: 3.0.0 transitivePeerDependencies: - bare-abort-controller - bare-buffer - react-native-b4a - tar-stream@3.1.7: + tar-stream@3.1.8: dependencies: - b4a: 1.7.3 + b4a: 1.8.0 + bare-fs: 4.7.1 fast-fifo: 1.3.2 - streamx: 2.23.0 + streamx: 2.25.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + + teex@1.0.1: + dependencies: + streamx: 2.25.0 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -5482,12 +5939,17 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - text-decoder@1.2.3: + text-decoder@1.2.7: dependencies: - b4a: 1.7.3 + b4a: 1.8.0 transitivePeerDependencies: - react-native-b4a + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + to-object-path@0.3.0: dependencies: kind-of: 3.2.2 @@ -5503,9 +5965,9 @@ snapshots: regex-not: 1.0.2 safe-regex: 1.1.0 - ts-api-utils@2.1.0(typescript@5.9.3): + ts-api-utils@2.5.0(typescript@6.0.2): dependencies: - typescript: 5.9.3 + typescript: 6.0.2 ts-patch@3.3.0: dependencies: @@ -5518,6 +5980,8 @@ snapshots: ts-pattern@5.6.2: {} + ts-pattern@5.9.0: {} + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -5534,10 +5998,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - tsx@4.20.6: + tsx@4.21.0: dependencies: - esbuild: 0.25.12 - get-tsconfig: 4.13.0 + esbuild: 0.27.7 + get-tsconfig: 4.14.0 optionalDependencies: fsevents: 2.3.3 @@ -5549,7 +6013,7 @@ snapshots: type-fest@4.41.0: {} - type-fest@5.2.0: + type-fest@5.5.0: dependencies: tagged-tag: 1.0.0 @@ -5586,25 +6050,25 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typed-query-selector@2.12.0: {} + typed-query-selector@2.12.1: {} - typescript-eslint@8.47.0(eslint@9.39.1)(typescript@5.9.3): + typescript-eslint@8.58.2(eslint@10.2.0)(typescript@6.0.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.1)(typescript@5.9.3) - eslint: 9.39.1 - typescript: 5.9.3 + '@typescript-eslint/eslint-plugin': 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0)(typescript@6.0.2) + '@typescript-eslint/parser': 8.58.2(eslint@10.2.0)(typescript@6.0.2) + '@typescript-eslint/typescript-estree': 8.58.2(typescript@6.0.2) + '@typescript-eslint/utils': 8.58.2(eslint@10.2.0)(typescript@6.0.2) + eslint: 10.2.0 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - typescript-transform-paths@3.5.5(typescript@5.9.3): + typescript-transform-paths@3.5.6(typescript@6.0.2): dependencies: - minimatch: 9.0.5 - typescript: 5.9.3 + minimatch: 9.0.9 + typescript: 6.0.2 - typescript@5.9.3: {} + typescript@6.0.2: {} unbox-primitive@1.1.0: dependencies: @@ -5617,7 +6081,9 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.16.0: {} + undici-types@7.19.2: {} + + unicorn-magic@0.4.0: {} union-value@1.0.1: dependencies: @@ -5649,7 +6115,7 @@ snapshots: vscode-textmate@5.2.0: {} - webdriver-bidi-protocol@0.3.8: {} + webdriver-bidi-protocol@0.4.1: {} which-boxed-primitive@1.1.1: dependencies: @@ -5692,6 +6158,16 @@ snapshots: gopd: 1.2.0 has-tostringtag: 1.0.2 + which-typed-array@1.1.20: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + which@1.3.1: dependencies: isexe: 2.0.0 @@ -5714,12 +6190,11 @@ snapshots: wrappy@1.0.2: {} - write-file-atomic@5.0.1: + write-file-atomic@7.0.1: dependencies: - imurmurhash: 0.1.4 signal-exit: 4.1.0 - ws@8.18.3: {} + ws@8.20.0: {} y18n@5.0.8: {} diff --git a/src/api/PluginManager.ts b/src/api/PluginManager.ts index 3549c4fd9..b8ea8081e 100644 --- a/src/api/PluginManager.ts +++ b/src/api/PluginManager.ts @@ -27,6 +27,7 @@ import { addMessageClickListener, addMessagePreEditListener, addMessagePreSendLi import { addMessagePopoverButton, removeMessagePopoverButton } from "@api/MessagePopover"; import { Settings, SettingsStore } from "@api/Settings"; import { disableStyle, enableStyle } from "@api/Styles"; +import { traceFunction } from "@debug/Tracer"; import { Logger } from "@utils/Logger"; import { onlyOnce } from "@utils/onlyOnce"; import { canonicalizeFind, canonicalizeReplacement } from "@utils/patches"; @@ -37,9 +38,6 @@ import { patches } from "@webpack/patcher"; import Plugins from "~plugins"; export { Plugins as plugins }; - -import { traceFunction } from "../debug/Tracer"; - const logger = new Logger("PluginManager", "#a6d189"); export const PMLogger = logger; diff --git a/src/components/settings/tabs/plugins/PluginCard.tsx b/src/components/settings/tabs/plugins/PluginCard.tsx index cf08bad89..b563ca0d3 100644 --- a/src/components/settings/tabs/plugins/PluginCard.tsx +++ b/src/components/settings/tabs/plugins/PluginCard.tsx @@ -6,12 +6,12 @@ import { showNotice } from "@api/Notices"; import { isPluginEnabled, pluginRequiresRestart, startDependenciesRecursive, startPlugin, stopPlugin } from "@api/PluginManager"; +import { Settings } from "@api/Settings"; import { CogWheel, InfoIcon } from "@components/Icons"; import { AddonCard } from "@components/settings/AddonCard"; import { isObjectEmpty } from "@utils/misc"; import { Plugin } from "@utils/types"; import { React, showToast, Toasts } from "@webpack/common"; -import { Settings } from "Vencord"; import { cl, logger } from "."; import { openPluginModal } from "./PluginModal"; diff --git a/src/debug/loadLazyChunks.ts b/src/debug/loadLazyChunks.ts index 44e483faf..997e69fa2 100644 --- a/src/debug/loadLazyChunks.ts +++ b/src/debug/loadLazyChunks.ts @@ -9,8 +9,8 @@ import { canonicalizeMatch } from "@utils/patches"; import { ModuleFactory } from "@vencord/discord-types/webpack"; import * as Webpack from "@webpack"; import { wreq } from "@webpack"; +import { AnyModuleFactory } from "@webpack/types"; import pLimit from "p-limit"; -import { AnyModuleFactory } from "webpack"; function getWebpackChunkMap() { const sym = Symbol(); diff --git a/src/plugins/consoleShortcuts/index.ts b/src/plugins/consoleShortcuts/index.ts index a65ece9ae..51391b0b9 100644 --- a/src/plugins/consoleShortcuts/index.ts +++ b/src/plugins/consoleShortcuts/index.ts @@ -16,6 +16,7 @@ * along with this program. If not, see . */ +import { loadLazyChunks } from "@debug/loadLazyChunks"; import { Devs } from "@utils/constants"; import { getCurrentChannel, getCurrentGuild } from "@utils/discord"; import { runtimeHashMessageKey } from "@utils/intlHash"; @@ -28,7 +29,6 @@ import definePlugin, { PluginNative, StartAt } from "@utils/types"; import * as Webpack from "@webpack"; import { extract, filters, findAll, findModuleId, search } from "@webpack"; import * as Common from "@webpack/common"; -import { loadLazyChunks } from "debug/loadLazyChunks"; import type { ComponentType } from "react"; const DESKTOP_ONLY = (f: string) => () => { diff --git a/src/plugins/implicitRelationships/index.ts b/src/plugins/implicitRelationships/index.ts index 18adf29dc..3af463e3f 100644 --- a/src/plugins/implicitRelationships/index.ts +++ b/src/plugins/implicitRelationships/index.ts @@ -21,13 +21,25 @@ import { Devs } from "@utils/constants"; import { Logger } from "@utils/Logger"; import definePlugin, { OptionType } from "@utils/types"; import { Constants, FluxDispatcher, GuildStore, RelationshipStore, SnowflakeUtils, UserAffinitiesStore, UserStore } from "@webpack/common"; -import { Settings } from "Vencord"; + +const settings = definePluginSettings( + { + sortByAffinity: { + type: OptionType.BOOLEAN, + default: true, + description: "Whether to sort implicit relationships by their affinity to you.", + restartNeeded: true + }, + } +); export default definePlugin({ name: "ImplicitRelationships", description: "Shows your implicit relationships in the Friends tab.", tags: ["Friends", "Servers"], authors: [Devs.Dolfies], + settings, + patches: [ // Counts header { @@ -74,7 +86,7 @@ export default definePlugin({ { find: "getRelationshipCounts(){", replacement: { - predicate: () => Settings.plugins.ImplicitRelationships.sortByAffinity, + predicate: () => settings.store.sortByAffinity, match: /\}\)\.sortBy\((.+?)\)\.value\(\)/, replace: "}).sortBy(row => $self.wrapSort(($1), row)).value()" } @@ -103,16 +115,6 @@ export default definePlugin({ }, } ], - settings: definePluginSettings( - { - sortByAffinity: { - type: OptionType.BOOLEAN, - default: true, - description: "Whether to sort implicit relationships by their affinity to you.", - restartNeeded: true - }, - } - ), wrapSort(comparator: Function, row: any) { return row.type === 5 diff --git a/src/utils/text.ts b/src/utils/text.ts index 6dc5b008f..385bfa0b7 100644 --- a/src/utils/text.ts +++ b/src/utils/text.ts @@ -147,7 +147,6 @@ export function toInlineCode(s: string) { return "``" + ZWSP + s.replaceAll("`", ZWSP + "`" + ZWSP) + ZWSP + "``"; } -// @ts-expect-error Missing RegExp.escape export const escapeRegExp: (s: string) => string = RegExp.escape ?? function (s: string) { return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); }; diff --git a/src/webpack/patchWebpack.ts b/src/webpack/patchWebpack.ts index c6eece366..99ded5e90 100644 --- a/src/webpack/patchWebpack.ts +++ b/src/webpack/patchWebpack.ts @@ -5,13 +5,13 @@ */ import { Settings } from "@api/Settings"; +import { traceFunctionWithResults } from "@debug/Tracer"; import { makeLazy } from "@utils/lazy"; import { Logger } from "@utils/Logger"; import { interpolateIfDefined } from "@utils/misc"; import { Patch, PatchReplacement } from "@utils/types"; import { WebpackRequire } from "@vencord/discord-types/webpack"; -import { traceFunctionWithResults } from "../debug/Tracer"; import { AnyModuleFactory, AnyWebpackRequire, MaybePatchedModuleFactory, PatchedModuleFactory } from "./types"; import { _blacklistBadModules, _initWebpack, factoryListeners, findModuleFactory, moduleListeners, waitForSubscriptions, wreq } from "./webpack"; diff --git a/src/webpack/webpack.ts b/src/webpack/webpack.ts index aa1e10223..4c7f0e92c 100644 --- a/src/webpack/webpack.ts +++ b/src/webpack/webpack.ts @@ -16,6 +16,7 @@ * along with this program. If not, see . */ +import { traceFunction } from "@debug/Tracer"; import { makeLazy, proxyLazy } from "@utils/lazy"; import { LazyComponent } from "@utils/lazyReact"; import { Logger } from "@utils/Logger"; @@ -24,7 +25,6 @@ import { escapeRegExp } from "@utils/text"; import type { FluxStore } from "@vencord/discord-types"; import type { ModuleExports, ModuleFactory, WebpackRequire } from "@vencord/discord-types/webpack"; -import { traceFunction } from "../debug/Tracer"; import type { AnyModuleFactory, AnyWebpackRequire } from "./types"; const logger = new Logger("Webpack"); diff --git a/tsconfig.json b/tsconfig.json index 2e75625c5..682129bc4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,19 +20,20 @@ "target": "ESNEXT", "jsx": "preserve", - "baseUrl": "./src/", "paths": { - "@main/*": ["./main/*"], - "@api/*": ["./api/*"], - "@components/*": ["./components/*"], - "@utils/*": ["./utils/*"], - "@plugins/*": ["./plugins/*"], - "@shared/*": ["./shared/*"], - "@webpack/common": ["./webpack/common"], - "@webpack/common/*": ["./webpack/common/*"], - "@webpack": ["./webpack/webpack"], - "@webpack/patcher": ["./webpack/patchWebpack"], - "@webpack/wreq.d": ["./webpack/wreq.d"], + "@main/*": ["./src/main/*"], + "@api/*": ["./src/api/*"], + "@components/*": ["./src/components/*"], + "@debug/*": ["./src/debug/*"], + "@utils/*": ["./src/utils/*"], + "@plugins/*": ["./src/plugins/*"], + "@shared/*": ["./src/shared/*"], + "@webpack/common": ["./src/webpack/common"], + "@webpack/common/*": ["./src/webpack/common/*"], + "@webpack": ["./src/webpack/webpack"], + "@webpack/patcher": ["./src/webpack/patchWebpack"], + "@webpack/wreq.d": ["./src/webpack/wreq.d"], + "@webpack/types": ["./src/webpack/types"], }, "plugins": [ From 6b1c3a9445e565337dd437d83aea0be8f55704f8 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 16 Apr 2026 10:06:18 -0400 Subject: [PATCH 07/18] fix building --- scripts/utils.ts | 10 ++++++---- src/api/AudioPlayer.ts | 2 +- src/components/settings/tabs/plugins/index.tsx | 4 ++-- src/components/settings/tabs/vencord/index.tsx | 2 +- src/debug/reporterData.ts | 1 + src/equicordplugins/betterActivities/index.tsx | 2 +- src/equicordplugins/clientSideBlock/index.tsx | 2 +- src/equicordplugins/collapsibleUi/index.tsx | 2 +- src/equicordplugins/commandPalette/registry.tsx | 3 +-- src/equicordplugins/cursorBuddy/index.tsx | 2 +- .../discordDevBanner/components/makeDevBanner.tsx | 2 +- src/equicordplugins/equicordToolbox/index.tsx | 3 +-- src/equicordplugins/favouriteAnything/index.tsx | 2 +- src/equicordplugins/googleThat/index.tsx | 2 +- src/equicordplugins/hideServers/index.tsx | 2 +- src/equicordplugins/instantScreenshare/index.tsx | 2 +- src/equicordplugins/messageLoggerEnhanced/settings.tsx | 3 +-- src/equicordplugins/middleClickTweaks/index.ts | 2 +- src/equicordplugins/serverSearch/index.tsx | 3 +-- src/equicordplugins/showBadgesInChat/index.tsx | 2 +- src/plugins/devCompanion.dev/initWs.tsx | 6 +++--- src/plugins/devCompanion.dev/types/send.ts | 2 +- src/plugins/devCompanion.dev/util.tsx | 2 +- src/plugins/favEmojiFirst/index.tsx | 2 +- src/plugins/fixYoutubeEmbeds.desktop/index.tsx | 1 + src/plugins/fixYoutubeEmbeds.desktop/native.ts | 2 +- src/plugins/showMeYourName/index.tsx | 1 + src/webpack/patchWebpack.ts | 2 +- 28 files changed, 36 insertions(+), 35 deletions(-) diff --git a/scripts/utils.ts b/scripts/utils.ts index 701919c8a..ab3835cc7 100644 --- a/scripts/utils.ts +++ b/scripts/utils.ts @@ -152,7 +152,8 @@ export async function parseFile(fileName: string) { enabledByDefault: false, required: false, isModified: false, - tags: [] as string[] + tags: [] as string[], + searchTerms: [] as string[], } as PluginData; for (const prop of pluginObj.properties) { @@ -208,9 +209,10 @@ export async function parseFile(fileName: string) { }); break; case "tags": - if (!isArrayLiteralExpression(value)) throw fail("tags is not an array literal"); - data.tags = value.elements.map(e => { - if (!isStringLiteral(e)) throw fail("tags array contains non-string literals"); + case "searchTerms": + if (!isArrayLiteralExpression(value)) throw fail(`${key} is not an array literal`); + data[key] = value.elements.map(e => { + if (!isStringLiteral(e)) throw fail(`${key} array contains non-string literals`); return e.text; }); break; diff --git a/src/api/AudioPlayer.ts b/src/api/AudioPlayer.ts index 53d6c0614..d106d26b8 100644 --- a/src/api/AudioPlayer.ts +++ b/src/api/AudioPlayer.ts @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { findByCodeLazy, findLazy } from "webpack"; +import { findByCodeLazy, findLazy } from "@webpack"; let defaultSounds: null | string[] = null; const findDefaultSounds = findLazy(module => module.resolve && module.id && module.keys().some(key => key.endsWith(".mp3")), false); diff --git a/src/components/settings/tabs/plugins/index.tsx b/src/components/settings/tabs/plugins/index.tsx index 0da4cff12..ed75e2849 100644 --- a/src/components/settings/tabs/plugins/index.tsx +++ b/src/components/settings/tabs/plugins/index.tsx @@ -35,7 +35,7 @@ import { isTruthy } from "@utils/guards"; import { Logger } from "@utils/Logger"; import { Margins } from "@utils/margins"; import { classes } from "@utils/misc"; -import { useAwaiter, useCleanupEffect, useIntersection } from "@utils/react"; +import { useAwaiter, useIntersection } from "@utils/react"; import { PluginTag, PluginTags } from "@utils/types"; import { Alerts, lodash, Parser, React, SearchableSelect, Select, TextInput, Toasts, Tooltip, useCallback, useMemo, useRef, useState } from "@webpack/common"; import { JSX } from "react"; @@ -405,7 +405,7 @@ export default function PluginSettings() { Filters - ; + ; } + export const reporterData: ReporterData = { failedPatches: { foundNoModule: [], diff --git a/src/equicordplugins/betterActivities/index.tsx b/src/equicordplugins/betterActivities/index.tsx index edb29a7c8..97e97a918 100644 --- a/src/equicordplugins/betterActivities/index.tsx +++ b/src/equicordplugins/betterActivities/index.tsx @@ -20,7 +20,7 @@ export default definePlugin({ name: "BetterActivities", description: "Shows activity icons in the member list and allows showing all activities", authors: [Devs.D3SOX, Devs.Arjix, Devs.AutumnVN, Devs.thororen], - tags: ["activity"], + tags: ["Activity"], settings, patchActivityList, showAllActivitiesComponent, diff --git a/src/equicordplugins/clientSideBlock/index.tsx b/src/equicordplugins/clientSideBlock/index.tsx index 19c971c96..00d891d28 100644 --- a/src/equicordplugins/clientSideBlock/index.tsx +++ b/src/equicordplugins/clientSideBlock/index.tsx @@ -142,7 +142,7 @@ function activeNowView(cards) { export default definePlugin({ name: "ClientSideBlock", description: "Allows you to locally hide almost all content from any user", - tags: ["blocked", "block", "hide", "hidden", "noblockedmessages"], + searchTerms: ["blocked", "block", "hide", "hidden", "noblockedmessages"], authors: [Devs.Samwich, EquicordDevs.KamiRu], settings, activeNowView, diff --git a/src/equicordplugins/collapsibleUi/index.tsx b/src/equicordplugins/collapsibleUi/index.tsx index d72033893..05266c715 100644 --- a/src/equicordplugins/collapsibleUi/index.tsx +++ b/src/equicordplugins/collapsibleUi/index.tsx @@ -109,7 +109,7 @@ export default definePlugin({ name: "CollapsibleUI", description: "Native collapsible channel, member, chat button, and user area surfaces.", authors: [EquicordDevs.benjii], - tags: ["ui", "sidebar", "layout"], + searchTerms: ["ui", "sidebar", "layout"], managedStyle, settings, diff --git a/src/equicordplugins/commandPalette/registry.tsx b/src/equicordplugins/commandPalette/registry.tsx index ea1616940..8c7c87cf9 100644 --- a/src/equicordplugins/commandPalette/registry.tsx +++ b/src/equicordplugins/commandPalette/registry.tsx @@ -6,7 +6,7 @@ import { DataStore } from "@api/index"; import { isPluginEnabled, plugins, startPlugin, stopPlugin } from "@api/PluginManager"; -import { SettingsStore } from "@api/Settings"; +import { Settings, SettingsStore } from "@api/Settings"; import { getUserSettingLazy } from "@api/UserSettings"; import { openPluginModal } from "@components/settings/tabs"; import { toggleEnabled } from "@equicordplugins/equicordHelper/utils"; @@ -18,7 +18,6 @@ import { Guild } from "@vencord/discord-types"; import { findByPropsLazy, findExportedComponentLazy, findStoreLazy } from "@webpack"; import { Alerts, ChannelActionCreators, ChannelRouter, ChannelStore, ComponentDispatch, FluxDispatcher, GuildStore, IconUtils, MediaEngineStore, MessageStore, NavigationRouter, React, ReadStateStore, ReadStateUtils, SelectedChannelStore, SelectedGuildStore, SettingsRouter, StreamerModeStore, Toasts, useEffect, UserStore, VoiceActions } from "@webpack/common"; import type { FC, ReactElement, ReactNode } from "react"; -import { Settings } from "Vencord"; import commandPalette from "."; import { diff --git a/src/equicordplugins/cursorBuddy/index.tsx b/src/equicordplugins/cursorBuddy/index.tsx index 478d41cb8..7a5d82924 100644 --- a/src/equicordplugins/cursorBuddy/index.tsx +++ b/src/equicordplugins/cursorBuddy/index.tsx @@ -236,7 +236,7 @@ export default definePlugin({ name: "CursorBuddy", description: "Adds a sprite that follows your cursor.", authors: [Devs.Ven, Devs.adryd, EquicordDevs.nexpid, EquicordDevs.ZcraftElite], - tags: ["Oneko", "FatassHorse", "Pet"], + searchTerms: ["Oneko", "FatassHorse", "Pet"], settings, isModified: true, diff --git a/src/equicordplugins/discordDevBanner/components/makeDevBanner.tsx b/src/equicordplugins/discordDevBanner/components/makeDevBanner.tsx index 48ef55064..10642d7e0 100644 --- a/src/equicordplugins/discordDevBanner/components/makeDevBanner.tsx +++ b/src/equicordplugins/discordDevBanner/components/makeDevBanner.tsx @@ -4,10 +4,10 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ +import SettingsPlugin from "@plugins/_core/settings"; import { detectClient } from "@plugins/_core/supportHelper"; import { gitHashShort } from "@shared/vencordUserAgent"; import { React } from "@webpack/common"; -import SettingsPlugin from "plugins/_core/settings"; import { JSX } from "react"; import { ChromiumIcon, ClientIcon, DevBannerIcon, DiscordIcon, ElectronIcon, EquicordIcon, names, settings } from "."; diff --git a/src/equicordplugins/equicordToolbox/index.tsx b/src/equicordplugins/equicordToolbox/index.tsx index 5a6b32394..f2e9542f7 100644 --- a/src/equicordplugins/equicordToolbox/index.tsx +++ b/src/equicordplugins/equicordToolbox/index.tsx @@ -77,11 +77,10 @@ migratePluginSettings("EquicordToolbox", "VencordToolbox"); export default definePlugin({ name: "EquicordToolbox", description: "Adds a button next to the inbox button in the channel header that houses Equicord quick actions", + tags: ["Voice", "Accessibility"], authors: [Devs.Ven, Devs.AutumnVN], dependencies: ["HeaderBarAPI"], - settings, - headerBarButton: { icon: Icon, render: VencordPopoutButton, diff --git a/src/equicordplugins/favouriteAnything/index.tsx b/src/equicordplugins/favouriteAnything/index.tsx index b9d094962..4798868fc 100644 --- a/src/equicordplugins/favouriteAnything/index.tsx +++ b/src/equicordplugins/favouriteAnything/index.tsx @@ -26,7 +26,7 @@ export default definePlugin({ name: "FavouriteAnything", description: "Favourite any image, video, or file attachment", authors: [Devs.nin0dev, EquicordDevs.davri], - tags: ["favorite"], + searchTerms: ["favorite"], managedStyle, patches: [ // EMBEDS diff --git a/src/equicordplugins/googleThat/index.tsx b/src/equicordplugins/googleThat/index.tsx index 18f6753c3..ad70e3217 100644 --- a/src/equicordplugins/googleThat/index.tsx +++ b/src/equicordplugins/googleThat/index.tsx @@ -76,7 +76,7 @@ export default definePlugin({ name: "GoogleThat", description: "Adds a command to send a internet search link", authors: [Devs.Samwich, EquicordDevs.KrystalSkull], - tags: ["search", "google", "query", "duckduckgo", "command"], + searchTerms: ["search", "google", "query", "duckduckgo", "command"], settings, commands: [ { diff --git a/src/equicordplugins/hideServers/index.tsx b/src/equicordplugins/hideServers/index.tsx index 054c9ecac..e91104fea 100644 --- a/src/equicordplugins/hideServers/index.tsx +++ b/src/equicordplugins/hideServers/index.tsx @@ -77,7 +77,7 @@ export default definePlugin({ name: "HideServers", description: "Allows you to hide servers from the guild list and quick switcher by right clicking them", authors: [EquicordDevs.bep], - tags: ["guild", "server", "hide", "folder"], + searchTerms: ["guild", "server", "hide", "folder"], dependencies: ["ServerListAPI"], contextMenus: { diff --git a/src/equicordplugins/instantScreenshare/index.tsx b/src/equicordplugins/instantScreenshare/index.tsx index 1d0160048..6a55107be 100644 --- a/src/equicordplugins/instantScreenshare/index.tsx +++ b/src/equicordplugins/instantScreenshare/index.tsx @@ -64,7 +64,7 @@ export default definePlugin({ description: "Instantly screenshare when joining a voice channel with support for desktop sources, windows, and video input devices (cameras, capture cards)", authors: [Devs.HAHALOSAH, Devs.thororen, EquicordDevs.mart], dependencies: ["EquicordToolbox"], - tags: ["ScreenshareKeybind"], + searchTerms: ["ScreenshareKeybind"], autoStartStream, settings, diff --git a/src/equicordplugins/messageLoggerEnhanced/settings.tsx b/src/equicordplugins/messageLoggerEnhanced/settings.tsx index fce7de8b8..1c39df9e4 100644 --- a/src/equicordplugins/messageLoggerEnhanced/settings.tsx +++ b/src/equicordplugins/messageLoggerEnhanced/settings.tsx @@ -4,12 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { definePluginSettings } from "@api/Settings"; +import { definePluginSettings, Settings } from "@api/Settings"; import { Button } from "@components/Button"; import ErrorBoundary from "@components/ErrorBoundary"; import { OptionType } from "@utils/types"; import { Alerts, useState } from "@webpack/common"; -import { Settings } from "Vencord"; import { clearLogs, Native } from "."; import { ImageCacheDir, LogsDir } from "./components/FolderSelectInput"; diff --git a/src/equicordplugins/middleClickTweaks/index.ts b/src/equicordplugins/middleClickTweaks/index.ts index da10a5d21..97f2f3873 100644 --- a/src/equicordplugins/middleClickTweaks/index.ts +++ b/src/equicordplugins/middleClickTweaks/index.ts @@ -101,7 +101,7 @@ export default definePlugin({ authors: [EquicordDevs.Etorix, EquicordDevs.korzi], settings, - tags: ["LimitMiddleClickPaste"], + searchTerms: ["LimitMiddleClickPaste"], isPastingDisabled(isInput: boolean) { const pasteBlocked = Date.now() - lastMiddleClickUp < Math.max(settings.store.pasteThreshold, 1); diff --git a/src/equicordplugins/serverSearch/index.tsx b/src/equicordplugins/serverSearch/index.tsx index 48cbe348f..82989cb7b 100644 --- a/src/equicordplugins/serverSearch/index.tsx +++ b/src/equicordplugins/serverSearch/index.tsx @@ -10,8 +10,7 @@ import { addServerListElement, removeServerListElement, ServerListRenderPosition import ErrorBoundary from "@components/ErrorBoundary"; import { EquicordDevs } from "@utils/constants"; import definePlugin from "@utils/types"; -import { FluxDispatcher } from "@webpack/common"; -import { Tooltip } from "webpack/common/components"; +import { FluxDispatcher, Tooltip } from "@webpack/common"; function SearchIcon() { return ( diff --git a/src/equicordplugins/showBadgesInChat/index.tsx b/src/equicordplugins/showBadgesInChat/index.tsx index 60066cc52..f7a86d292 100644 --- a/src/equicordplugins/showBadgesInChat/index.tsx +++ b/src/equicordplugins/showBadgesInChat/index.tsx @@ -6,11 +6,11 @@ import "./styles.css"; +import badges from "@plugins/_api/badges"; import { Devs, EquicordDevs } from "@utils/constants"; import { isEquicordPluginDev, isPluginDev } from "@utils/misc"; import definePlugin from "@utils/types"; import { findComponentByCodeLazy, findCssClassesLazy } from "@webpack"; -import badges from "plugins/_api/badges"; const { roleIcon } = findCssClassesLazy("roleIcon", "separator"); const RoleIconComponent = findComponentByCodeLazy("#{intl::ROLE_ICON_ALT_TEXT}"); diff --git a/src/plugins/devCompanion.dev/initWs.tsx b/src/plugins/devCompanion.dev/initWs.tsx index 89bee1d38..49e931808 100644 --- a/src/plugins/devCompanion.dev/initWs.tsx +++ b/src/plugins/devCompanion.dev/initWs.tsx @@ -5,14 +5,14 @@ */ import { popNotice, showNotice } from "@api/Notices"; +import { Settings } from "@api/Settings"; import ErrorBoundary from "@components/ErrorBoundary"; +import { loadLazyChunks } from "@debug/loadLazyChunks"; +import { reporterData } from "@debug/reporterData"; import { getIntlMessageFromHash } from "@utils/discord"; import { canonicalizeMatch, canonicalizeReplace } from "@utils/patches"; import { filters, findAll, search, wreq } from "@webpack"; import { React, Toasts, useState } from "@webpack/common"; -import { loadLazyChunks } from "debug/loadLazyChunks"; -import { reporterData } from "debug/reporterData"; -import { Settings } from "Vencord"; import { CLIENT_VERSION, logger, PORT, settings } from "."; import { Recieve } from "./types"; diff --git a/src/plugins/devCompanion.dev/types/send.ts b/src/plugins/devCompanion.dev/types/send.ts index 86260a4e3..e9439e631 100644 --- a/src/plugins/devCompanion.dev/types/send.ts +++ b/src/plugins/devCompanion.dev/types/send.ts @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { ReporterData } from "debug/reporterData"; +import { ReporterData } from "@debug/reporterData"; export type OutgoingMessage = Base; export type FullOutgoingMessage = OutgoingMessage & Nonce; diff --git a/src/plugins/devCompanion.dev/util.tsx b/src/plugins/devCompanion.dev/util.tsx index 4fda47040..7611b8081 100644 --- a/src/plugins/devCompanion.dev/util.tsx +++ b/src/plugins/devCompanion.dev/util.tsx @@ -10,8 +10,8 @@ import { Settings } from "@api/Settings"; import { canonicalizeMatch } from "@utils/patches"; import { CodeFilter, stringMatches, wreq } from "@webpack"; import { Toasts } from "@webpack/common"; -import { WebpackPatcher } from "Vencord"; +import { WebpackPatcher } from "../../Vencord"; import { logger, settings as companionSettings } from "."; import { FindNode } from "./types/recieve"; diff --git a/src/plugins/favEmojiFirst/index.tsx b/src/plugins/favEmojiFirst/index.tsx index f369023c5..0d4d636a4 100644 --- a/src/plugins/favEmojiFirst/index.tsx +++ b/src/plugins/favEmojiFirst/index.tsx @@ -1101,7 +1101,7 @@ const messageSendListener = (_channelId: string, messageObj: { content: string; export default definePlugin({ name: "FavoriteEmojiFirst", authors: [Devs.Aria, Devs.Ven, EquicordDevs.justjxke], - tags: ["EmojiAlias"], + tags: ["Emotes", "Customisation"], description: "Puts your favorite emoji first in the emoji autocomplete and also has emoji alias.", settings, contextMenus: { diff --git a/src/plugins/fixYoutubeEmbeds.desktop/index.tsx b/src/plugins/fixYoutubeEmbeds.desktop/index.tsx index 6ea46fd7f..d76bd666e 100644 --- a/src/plugins/fixYoutubeEmbeds.desktop/index.tsx +++ b/src/plugins/fixYoutubeEmbeds.desktop/index.tsx @@ -27,6 +27,7 @@ migratePluginSettings("FixYoutubeEmbeds", "YoutubeDescription"); export default definePlugin({ name: "FixYoutubeEmbeds", description: "Bypasses youtube videos being blocked from display on Discord (for example by UMG)", + tags: ["Media", "Utility"], authors: [Devs.coolelectronics, Devs.arHSM], settings, patches: [ diff --git a/src/plugins/fixYoutubeEmbeds.desktop/native.ts b/src/plugins/fixYoutubeEmbeds.desktop/native.ts index f865a6566..950940b06 100644 --- a/src/plugins/fixYoutubeEmbeds.desktop/native.ts +++ b/src/plugins/fixYoutubeEmbeds.desktop/native.ts @@ -4,8 +4,8 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ +import { RendererSettings } from "@main/settings"; import { app } from "electron"; -import { RendererSettings } from "main/settings"; app.on("browser-window-created", (_, win) => { win.webContents.on("frame-created", (_, { frame }) => { diff --git a/src/plugins/showMeYourName/index.tsx b/src/plugins/showMeYourName/index.tsx index 4a82cc73f..101a6afa7 100644 --- a/src/plugins/showMeYourName/index.tsx +++ b/src/plugins/showMeYourName/index.tsx @@ -1070,6 +1070,7 @@ export default definePlugin({ description: "Display any permutation of custom nicknames, friend nicknames, server nicknames, display names, and usernames in chat.", authors: [EquicordDevs.Etorix, Devs.Rini, Devs.TheKodeToad, Devs.sadan, Devs.prism], tags: ["Appearance", "Customisation"], + searchTerms: ["SMYN", "Nicknames", "Custom Nicknames"], isModified: true, settings, diff --git a/src/webpack/patchWebpack.ts b/src/webpack/patchWebpack.ts index fb27cb752..2b1994f20 100644 --- a/src/webpack/patchWebpack.ts +++ b/src/webpack/patchWebpack.ts @@ -5,13 +5,13 @@ */ import { Settings } from "@api/Settings"; +import { reporterData } from "@debug/reporterData"; import { traceFunctionWithResults } from "@debug/Tracer"; import { makeLazy } from "@utils/lazy"; import { Logger } from "@utils/Logger"; import { interpolateIfDefined } from "@utils/misc"; import { Patch, PatchReplacement } from "@utils/types"; import { WebpackRequire } from "@vencord/discord-types/webpack"; -import { reporterData } from "debug/reporterData"; import { AnyModuleFactory, AnyWebpackRequire, MaybePatchedModuleFactory, PatchedModuleFactory } from "./types"; import { _blacklistBadModules, _initWebpack, factoryListeners, findModuleFactory, moduleListeners, waitForSubscriptions, wreq } from "./webpack"; From 32b6d94bb6863379f3d419f839beba1d604428e9 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 16 Apr 2026 10:22:12 -0400 Subject: [PATCH 08/18] Fix Lint --- scripts/utils.ts | 1 + .../ThemeSettings/components/SettingColorComponent.tsx | 1 + src/equicordplugins/favouriteAnything/polyfills.ts | 2 +- .../messageLoggerEnhanced/components/LogsModal.tsx | 2 +- .../messageLoggerEnhanced/utils/settingsUtils.ts | 2 +- src/equicordplugins/moreStickers/components/misc.tsx | 2 +- src/equicordplugins/rpcEditor/ReplaceSettings.tsx | 4 ++-- src/main/utils/extensions.ts | 2 +- 8 files changed, 9 insertions(+), 7 deletions(-) diff --git a/scripts/utils.ts b/scripts/utils.ts index ab3835cc7..2727f5447 100644 --- a/scripts/utils.ts +++ b/scripts/utils.ts @@ -38,6 +38,7 @@ export interface PluginData { name: string; description: string; tags: string[]; + searchTerms: string[]; authors: Dev[]; dependencies: string[]; hasPatches: boolean; diff --git a/src/components/ThemeSettings/components/SettingColorComponent.tsx b/src/components/ThemeSettings/components/SettingColorComponent.tsx index e01228c5f..9f3e00fd2 100644 --- a/src/components/ThemeSettings/components/SettingColorComponent.tsx +++ b/src/components/ThemeSettings/components/SettingColorComponent.tsx @@ -9,6 +9,7 @@ import "./colorStyles.css"; import { classNameFactory } from "@utils/css"; import { findByCodeLazy } from "@webpack"; import { ColorPicker, useMemo } from "@webpack/common"; +import type tinycolor from "tinycolor2"; // TinyColor is completely unmangled and it's duplicated in two modules! Fun! const TinyColor: tinycolor.Constructor = findByCodeLazy("this._gradientType="); diff --git a/src/equicordplugins/favouriteAnything/polyfills.ts b/src/equicordplugins/favouriteAnything/polyfills.ts index fc6950a20..1042633c0 100644 --- a/src/equicordplugins/favouriteAnything/polyfills.ts +++ b/src/equicordplugins/favouriteAnything/polyfills.ts @@ -44,7 +44,7 @@ interface Uint8ArrayConstructorExtended extends Uint8ArrayConstructor { ): Uint8ArrayExtended; } -function supportsToBase64(array: Uint8Array): array is Uint8ArrayExtended { +function supportsToBase64(array: Uint8Array): boolean { return "toBase64" in array && typeof array.toBase64 === "function"; } diff --git a/src/equicordplugins/messageLoggerEnhanced/components/LogsModal.tsx b/src/equicordplugins/messageLoggerEnhanced/components/LogsModal.tsx index 1d28a6348..3fa47d67b 100644 --- a/src/equicordplugins/messageLoggerEnhanced/components/LogsModal.tsx +++ b/src/equicordplugins/messageLoggerEnhanced/components/LogsModal.tsx @@ -17,7 +17,7 @@ import { find, findByCode, findByCodeLazy } from "@webpack"; import { Alerts, ChannelStore, ContextMenuApi, FluxDispatcher, GuildStore, Menu, NavigationRouter, React, TabBar, TextInput, Tooltip, useMemo, useRef, useState } from "@webpack/common"; import { DBMessageRecord, deleteMessageIDB, deleteMessagesBulkIDB } from "../db"; -import { clearLogs, cl, settings } from "../index"; +import { cl, clearLogs, settings } from "../index"; import { LoggedMessage, LoggedMessageJSON } from "../types"; import { messageJsonToMessageClass } from "../utils"; import { importLogs } from "../utils/settingsUtils"; diff --git a/src/equicordplugins/messageLoggerEnhanced/utils/settingsUtils.ts b/src/equicordplugins/messageLoggerEnhanced/utils/settingsUtils.ts index 64c6d9d03..0d59e56ab 100644 --- a/src/equicordplugins/messageLoggerEnhanced/utils/settingsUtils.ts +++ b/src/equicordplugins/messageLoggerEnhanced/utils/settingsUtils.ts @@ -21,7 +21,7 @@ import { chooseFile as chooseFileWeb } from "@utils/web"; import { Toasts } from "@webpack/common"; import { showSaveFilePicker } from "native-file-system-adapter"; -import { Native, clearLogs } from ".."; +import { clearLogs,Native } from ".."; import { addMessagesBulkIDB, iterateAllMessagesIDB } from "../db"; import { LoggedMessageJSON } from "../types"; diff --git a/src/equicordplugins/moreStickers/components/misc.tsx b/src/equicordplugins/moreStickers/components/misc.tsx index 783ded6d4..bca8f2990 100644 --- a/src/equicordplugins/moreStickers/components/misc.tsx +++ b/src/equicordplugins/moreStickers/components/misc.tsx @@ -144,7 +144,7 @@ export const Packs = () => { flexGrow: 1 }}> { try { diff --git a/src/equicordplugins/rpcEditor/ReplaceSettings.tsx b/src/equicordplugins/rpcEditor/ReplaceSettings.tsx index b85b0f7c1..81d541bf5 100644 --- a/src/equicordplugins/rpcEditor/ReplaceSettings.tsx +++ b/src/equicordplugins/rpcEditor/ReplaceSettings.tsx @@ -94,7 +94,7 @@ export function ReplaceSettings({ appIds, update, save }: SettingsProps) { } Application ID { onChange(v, i, "appId"); }} @@ -125,7 +125,7 @@ export function ReplaceSettings({ appIds, update, save }: SettingsProps) { <> Stream URL (must be YouTube or Twitch) { onChange(v, i, "newStreamUrl"); }} diff --git a/src/main/utils/extensions.ts b/src/main/utils/extensions.ts index 9ecfbfe82..0b19d9286 100644 --- a/src/main/utils/extensions.ts +++ b/src/main/utils/extensions.ts @@ -79,6 +79,6 @@ export async function installExt(id: string) { .catch(err => console.error(`Failed to extract extension ${id}`, err)); } - // @ts-expect-error Electron 36 Deprecates session.defaultSession.loadExtension() + // Electron 36 Deprecates session.defaultSession.loadExtension() session.defaultSession.extensions ? session.defaultSession.extensions.loadExtension(extDir) : session.defaultSession.loadExtension(extDir); } From 8a9ee4fb9ae99e371da933f39a32484fa459f2e1 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:12:39 -0400 Subject: [PATCH 09/18] tags --- src/equicordplugins/altKrispSwitch/index.tsx | 1 + .../alwaysExpandProfiles/index.ts | 1 + src/equicordplugins/animalese/index.ts | 1 + src/equicordplugins/atSomeone/index.ts | 1 + src/equicordplugins/autoZipper/index.ts | 1 + .../bannersEverywhere/index.tsx | 1 + src/equicordplugins/baseDecoder/index.tsx | 1 + .../betterAudioPlayer/index.tsx | 1 + .../betterBanReasons/index.tsx | 1 + .../betterBlockedUsers/index.tsx | 1 + src/equicordplugins/betterCommands/index.ts | 1 + src/equicordplugins/betterInvites/index.tsx | 1 + src/equicordplugins/betterPlusReacts/index.ts | 1 + src/equicordplugins/blockKeywords/index.ts | 1 + src/equicordplugins/blockKrisp/index.ts | 1 + src/equicordplugins/bypassPinPrompt/index.ts | 1 + src/equicordplugins/bypassStatus/index.tsx | 1 + src/equicordplugins/channelBadges/index.tsx | 1 + src/equicordplugins/channelTabs/index.tsx | 3 +- src/equicordplugins/cleanChannelName/index.ts | 1 + .../cleanerChannelGroups/index.ts | 1 + src/equicordplugins/clickableRoles/index.tsx | 1 + src/equicordplugins/clientSideBlock/index.tsx | 1 + .../index.tsx | 1 + src/equicordplugins/collapsibleUi/index.tsx | 1 + src/equicordplugins/commandPalette/index.tsx | 1 + src/equicordplugins/components.dev/index.tsx | 1 + src/equicordplugins/contentWarning/index.tsx | 1 + .../copyProfileColors/index.tsx | 1 + src/equicordplugins/copyStatusUrls/index.ts | 1 + src/equicordplugins/copyUserMention/index.tsx | 1 + src/equicordplugins/cursorBuddy/index.tsx | 1 + .../customFolderIcons/index.tsx | 1 + src/equicordplugins/customSounds/index.tsx | 1 + .../customStatusTimeouts/index.tsx | 1 + .../customTimestamps/index.tsx | 1 + .../customUserColors/index.tsx | 1 + src/equicordplugins/declutter/index.tsx | 1 + src/equicordplugins/disableCameras/index.tsx | 1 + .../discordDevBanner/index.tsx | 1 + .../dragFavoriteEmotes/index.tsx | 1 + src/equicordplugins/dragify/index.tsx | 1 + .../elementHighlighter.dev/index.tsx | 1 + .../equibopStreamFixes.equibop/index.tsx | 1 + src/equicordplugins/equicordHelper/index.tsx | 1 + src/equicordplugins/equissant/index.ts | 1 + src/equicordplugins/exitSounds/index.tsx | 1 + src/equicordplugins/exportMessages/index.tsx | 1 + .../fastDeleteChannels/index.tsx | 1 + .../favouriteAnything/index.tsx | 1 + src/equicordplugins/fileUpload/index.tsx | 1 + src/equicordplugins/findReply/index.tsx | 1 + .../fixFileExtensions/index.tsx | 1 + src/equicordplugins/followVoiceUser/index.tsx | 1 + src/equicordplugins/fontLoader/index.tsx | 1 + src/equicordplugins/forwardAnywhere/index.ts | 1 + .../frequentQuickSwitcher/index.tsx | 1 + src/equicordplugins/friendCodes/index.tsx | 1 + src/equicordplugins/friendTags/index.tsx | 1 + src/equicordplugins/friendshipRanks/index.tsx | 1 + src/equicordplugins/fullVcPfp/index.tsx | 1 + src/equicordplugins/ghosted/index.tsx | 1 + src/equicordplugins/gifCollections/index.tsx | 1 + src/equicordplugins/githubRepos/index.tsx | 1 + src/equicordplugins/globalBadges/index.tsx | 1 + src/equicordplugins/googleThat/index.tsx | 1 + .../guildPickerDumper/index.tsx | 1 + src/equicordplugins/hideChatButtons/index.tsx | 1 + src/equicordplugins/hideMessages/index.tsx | 1 + src/equicordplugins/hideServers/index.tsx | 1 + src/equicordplugins/holyNotes/index.tsx | 1 + src/equicordplugins/homeTyping/index.tsx | 1 + src/equicordplugins/hopOn/index.tsx | 1 + src/equicordplugins/husk/index.tsx | 1 + src/equicordplugins/iRememberYou/index.tsx | 1 + src/equicordplugins/iconViewer/index.tsx | 1 + src/equicordplugins/idleAutoRestart/index.tsx | 1 + src/equicordplugins/ignoreCalls/index.tsx | 1 + src/equicordplugins/inRole/index.tsx | 1 + src/equicordplugins/ingtoninator/index.tsx | 1 + .../instantScreenshare/index.tsx | 1 + .../invisibleChat.desktop/index.tsx | 1 + src/equicordplugins/inviteDefaults/index.ts | 1 + src/equicordplugins/jumpTo/index.tsx | 1 + src/equicordplugins/jumpscare/index.tsx | 1 + .../keyboardNavigation/index.tsx | 1 + src/equicordplugins/keyboardSounds/index.ts | 1 + src/equicordplugins/keywordNotify/index.tsx | 1 + src/equicordplugins/lastActive/index.tsx | 1 + src/equicordplugins/loginWithQR/index.tsx | 1 + .../mediaPlaybackSpeed/index.tsx | 1 + src/equicordplugins/messageBurst/index.ts | 1 + src/equicordplugins/messageColors/index.tsx | 1 + .../messageFetchTimer/index.tsx | 1 + .../messageLinkTooltip/index.tsx | 1 + .../messageLoggerEnhanced/index.tsx | 3 +- src/equicordplugins/messageNotifier/index.ts | 1 + src/equicordplugins/messagePeek/index.tsx | 1 + .../messageTranslate/index.tsx | 1 + .../micLoopbackTester/index.tsx | 1 + .../middleClickTweaks/index.ts | 1 + src/equicordplugins/moreCommands/index.ts | 1 + src/equicordplugins/moreStickers/index.tsx | 1 + src/equicordplugins/moreUserTags/index.tsx | 1 + src/equicordplugins/moyai/index.ts | 1 + .../neverPausePreviews/index.tsx | 1 + .../newPluginsManager/index.tsx | 1 + src/equicordplugins/noNitroUpsell/index.ts | 3 +- src/equicordplugins/noPushToTalk/index.ts | 1 + .../noRPC.discordDesktop/index.ts | 1 + src/equicordplugins/noRoleHeaders/index.ts | 1 + .../normalizeMessageLinks/index.ts | 1 + .../index.tsx | 1 + src/equicordplugins/orbolayBridge/index.tsx | 1 + src/equicordplugins/partyMode/index.ts | 1 + src/equicordplugins/pinIcon/index.tsx | 1 + .../pingNotifications/index.tsx | 1 + src/equicordplugins/platformSpoofer/index.tsx | 1 + src/equicordplugins/polishWording/index.ts | 1 + src/equicordplugins/profileSets/index.tsx | 1 + src/equicordplugins/questify/index.tsx | 1 + .../index.tsx | 1 + src/equicordplugins/quoter/index.tsx | 1 + src/equicordplugins/randomVoice/index.tsx | 1 + .../recentDMSwitcher/index.tsx | 1 + src/equicordplugins/remix/index.tsx | 1 + src/equicordplugins/repeatMessages/index.tsx | 1 + src/equicordplugins/replyPingControl/index.ts | 1 + src/equicordplugins/richMagnetLinks/index.tsx | 1 + src/equicordplugins/richPresence/index.tsx | 115 +++++++++--------- src/equicordplugins/rpcEditor/index.tsx | 1 + src/equicordplugins/rpcStats/index.tsx | 1 + .../saveFavoriteGIFs/index.tsx | 1 + .../scheduledMessages/index.tsx | 1 + .../screenRecorder.equibop/index.tsx | 5 +- src/equicordplugins/searchFix/index.tsx | 1 + src/equicordplugins/sekaiStickers/index.tsx | 1 + src/equicordplugins/selfForward/index.ts | 1 + src/equicordplugins/serverSearch/index.tsx | 1 + .../showBadgesInChat/index.tsx | 1 + .../showMessageEmbeds/index.tsx | 1 + .../showResourceChannels/index.ts | 1 + src/equicordplugins/showSongName/index.tsx | 1 + src/equicordplugins/sidebarChat/index.tsx | 1 + src/equicordplugins/signature/index.tsx | 1 + src/equicordplugins/snowfall/index.tsx | 3 +- src/equicordplugins/soggy/index.tsx | 1 + .../songLink.desktop/index.tsx | 1 + .../songSpotlight.desktop/index.tsx | 1 + .../splitLargeMessages/index.ts | 1 + .../spotifyActivityToggle/index.tsx | 1 + src/equicordplugins/statusPresets/index.tsx | 1 + .../statusWhileActive.desktop/index.ts | 1 + src/equicordplugins/steamStatusSync/index.tsx | 1 + src/equicordplugins/stickerBlocker/index.tsx | 1 + .../streamingCodecDisabler/index.ts | 1 + src/equicordplugins/talkInReverse/index.tsx | 1 + src/equicordplugins/themeLibrary/index.tsx | 1 + src/equicordplugins/tidalEmbeds/index.tsx | 1 + src/equicordplugins/tiktokTTS/index.ts | 1 + src/equicordplugins/timezones/index.tsx | 1 + src/equicordplugins/title/index.ts | 1 + .../toastNotifications/index.tsx | 1 + src/equicordplugins/toggleVideoBind/index.ts | 1 + src/equicordplugins/toneIndicators/index.tsx | 1 + src/equicordplugins/translatePlus/index.tsx | 1 + src/equicordplugins/triviaAI/index.tsx | 1 + src/equicordplugins/unitConverter/index.tsx | 1 + .../universalMention/index.tsx | 1 + .../unlimitedAccounts/index.ts | 1 + .../unreadBadgeCount/index.tsx | 1 + src/equicordplugins/urlHighlighter/index.tsx | 1 + src/equicordplugins/userpfp/index.tsx | 1 + .../vcNarratorCustom/index.tsx | 1 + src/equicordplugins/vcPanelSettings/index.tsx | 1 + src/equicordplugins/viewRawVariant/index.tsx | 1 + src/equicordplugins/voiceButtons/index.tsx | 1 + src/equicordplugins/voiceChannelLog/index.tsx | 1 + src/equicordplugins/voiceChatUtils/index.tsx | 1 + .../voiceJoinMessages/index.ts | 1 + .../voiceMessageTranscriber.desktop/index.tsx | 1 + src/equicordplugins/voiceRejoin/index.tsx | 1 + src/equicordplugins/waitForSlot/index.tsx | 1 + src/equicordplugins/wallpaperFree/index.tsx | 1 + src/equicordplugins/webpackTarball/index.tsx | 1 + .../whitelistedEmojis/index.tsx | 1 + src/equicordplugins/whosWatching/index.tsx | 1 + src/equicordplugins/wigglyText/index.tsx | 1 + src/equicordplugins/writeUpperCase/index.ts | 1 + 189 files changed, 252 insertions(+), 63 deletions(-) diff --git a/src/equicordplugins/altKrispSwitch/index.tsx b/src/equicordplugins/altKrispSwitch/index.tsx index a55216aa3..8f05a8e43 100644 --- a/src/equicordplugins/altKrispSwitch/index.tsx +++ b/src/equicordplugins/altKrispSwitch/index.tsx @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "AltKrispSwitch", description: "Makes the Noise Suppression Popout switch between None and Krisp instead of Krisp and Standard", + tags: ["Customisation", "Voice"], authors: [Devs.newwares], patches: [ { diff --git a/src/equicordplugins/alwaysExpandProfiles/index.ts b/src/equicordplugins/alwaysExpandProfiles/index.ts index c78baea4f..3a448288b 100644 --- a/src/equicordplugins/alwaysExpandProfiles/index.ts +++ b/src/equicordplugins/alwaysExpandProfiles/index.ts @@ -11,6 +11,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "AlwaysExpandProfiles", description: "Always expands profile popouts to the full modal", + tags: ["Appearance", "Utility"], authors: [Devs.thororen], patches: [ { diff --git a/src/equicordplugins/animalese/index.ts b/src/equicordplugins/animalese/index.ts index 1f8ccb568..a63bc44dc 100644 --- a/src/equicordplugins/animalese/index.ts +++ b/src/equicordplugins/animalese/index.ts @@ -193,6 +193,7 @@ async function playSound(buffer: AudioBuffer, volume: number) { export default definePlugin({ name: "Animalese", description: "Plays animal crossing animalese for every message sent (they yap a lot)", + tags: ["Customisation", "Fun"], authors: [EquicordDevs.ryanamay, EquicordDevs.Mocha], settings, diff --git a/src/equicordplugins/atSomeone/index.ts b/src/equicordplugins/atSomeone/index.ts index 40902e6c4..15a094059 100644 --- a/src/equicordplugins/atSomeone/index.ts +++ b/src/equicordplugins/atSomeone/index.ts @@ -13,6 +13,7 @@ export default definePlugin({ name: "AtSomeone", authors: [Devs.Joona], description: "Mention someone randomly", + tags: ["Chat", "Fun"], patches: [ { find: ".LAUNCHABLE_APPLICATIONS;", diff --git a/src/equicordplugins/autoZipper/index.ts b/src/equicordplugins/autoZipper/index.ts index ab0f2335f..a2b0a1d24 100644 --- a/src/equicordplugins/autoZipper/index.ts +++ b/src/equicordplugins/autoZipper/index.ts @@ -209,6 +209,7 @@ function handlePaste(event: ClipboardEvent) { export default definePlugin({ name: "AutoZipper", description: "Automatically zips specified file types and folders before uploading to Discord", + tags: ["Chat", "Organisation"], authors: [EquicordDevs.SSnowly], settings, diff --git a/src/equicordplugins/bannersEverywhere/index.tsx b/src/equicordplugins/bannersEverywhere/index.tsx index 5959a4022..6aea3cfe6 100644 --- a/src/equicordplugins/bannersEverywhere/index.tsx +++ b/src/equicordplugins/bannersEverywhere/index.tsx @@ -44,6 +44,7 @@ const DATASTORE_KEY = "bannersEverywhere"; export default definePlugin({ name: "BannersEverywhere", description: "Displays banners in the member list ", + tags: ["Appearance", "Customisation"], authors: [Devs.ImLvna, Devs.AutumnVN], settings, patches: [ diff --git a/src/equicordplugins/baseDecoder/index.tsx b/src/equicordplugins/baseDecoder/index.tsx index 35ba3d701..46253d954 100644 --- a/src/equicordplugins/baseDecoder/index.tsx +++ b/src/equicordplugins/baseDecoder/index.tsx @@ -107,6 +107,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "DecodeBase64", description: "Decode base64 content of any message and copy the decoded content.", + tags: ["Appearance", "Customisation", "Chat"], authors: [EquicordDevs.ThePirateStoner], settings, messagePopoverButton: { diff --git a/src/equicordplugins/betterAudioPlayer/index.tsx b/src/equicordplugins/betterAudioPlayer/index.tsx index 1692b2d85..94c3d9770 100644 --- a/src/equicordplugins/betterAudioPlayer/index.tsx +++ b/src/equicordplugins/betterAudioPlayer/index.tsx @@ -274,6 +274,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "BetterAudioPlayer", description: "Adds a spectrograph and oscilloscope visualizer to audio attachment players.", + tags: ["Appearance", "Media", "Voice"], authors: [EquicordDevs.creations], settings, diff --git a/src/equicordplugins/betterBanReasons/index.tsx b/src/equicordplugins/betterBanReasons/index.tsx index 68e849e1c..86d0b6dfe 100644 --- a/src/equicordplugins/betterBanReasons/index.tsx +++ b/src/equicordplugins/betterBanReasons/index.tsx @@ -74,6 +74,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "BetterBanReasons", description: "Create custom reasons to use in the Discord ban modal, and/or show a text input by default instead of the options.", + tags: ["Appearance", "Customisation"], authors: [Devs.Inbestigator], patches: [ { diff --git a/src/equicordplugins/betterBlockedUsers/index.tsx b/src/equicordplugins/betterBlockedUsers/index.tsx index ce936edb0..995a7af10 100644 --- a/src/equicordplugins/betterBlockedUsers/index.tsx +++ b/src/equicordplugins/betterBlockedUsers/index.tsx @@ -17,6 +17,7 @@ let updateFunc = (v: any) => { }; export default definePlugin({ name: "BetterBlockedUsers", description: "Allows you to search in blocked users list and makes names selectable in settings.", + tags: ["Appearance", "Shortcuts"], authors: [EquicordDevs.TheArmagan], patches: [ { diff --git a/src/equicordplugins/betterCommands/index.ts b/src/equicordplugins/betterCommands/index.ts index 6c7df169f..e81f961e3 100644 --- a/src/equicordplugins/betterCommands/index.ts +++ b/src/equicordplugins/betterCommands/index.ts @@ -33,6 +33,7 @@ function fetchIndex(target: object) { export default definePlugin({ name: "BetterCommands", description: "Enhances the command system with miscellaneous improvements.", + tags: ["Appearance", "Commands", "Shortcuts"], authors: [Devs.thororen], settings, patches: [ diff --git a/src/equicordplugins/betterInvites/index.tsx b/src/equicordplugins/betterInvites/index.tsx index 76b2facfa..1676df307 100644 --- a/src/equicordplugins/betterInvites/index.tsx +++ b/src/equicordplugins/betterInvites/index.tsx @@ -34,6 +34,7 @@ function lurk(id: string) { export default definePlugin({ name: "BetterInvites", description: "See invites expiration date, view inviter profile and preview servers before joining by clicking the name", + tags: ["Appearance", "Customisation", "Chat", "Servers"], authors: [EquicordDevs.iamme, Devs.thororen], patches: [ { diff --git a/src/equicordplugins/betterPlusReacts/index.ts b/src/equicordplugins/betterPlusReacts/index.ts index 2e3f84d2b..995a759a5 100644 --- a/src/equicordplugins/betterPlusReacts/index.ts +++ b/src/equicordplugins/betterPlusReacts/index.ts @@ -12,6 +12,7 @@ export default definePlugin({ name: "BetterPlusReacts", authors: [Devs.Joona], description: "The amount of plus before :emoji: is the message to add it to", + tags: ["Chat", "Emotes"], patches: [ { find: ".SLASH_COMMAND_USED,", diff --git a/src/equicordplugins/blockKeywords/index.ts b/src/equicordplugins/blockKeywords/index.ts index 3f7504373..13b44744c 100644 --- a/src/equicordplugins/blockKeywords/index.ts +++ b/src/equicordplugins/blockKeywords/index.ts @@ -70,6 +70,7 @@ export function containsBlockedKeywords(message: Message) { export default definePlugin({ name: "BlockKeywords", description: "Blocks messages containing specific user-defined keywords, as if the user sending them was blocked.", + tags: ["Appearance", "Customisation", "Privacy"], authors: [EquicordDevs.catcraft], patches: [ { diff --git a/src/equicordplugins/blockKrisp/index.ts b/src/equicordplugins/blockKrisp/index.ts index 28f6791ea..9b80b65e8 100644 --- a/src/equicordplugins/blockKrisp/index.ts +++ b/src/equicordplugins/blockKrisp/index.ts @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "BlockKrisp", description: "Prevent Krisp from loading", + tags: ["Privacy", "Utility", "Voice"], authors: [Devs.D3SOX], patches: [ // Block loading modules on Desktop diff --git a/src/equicordplugins/bypassPinPrompt/index.ts b/src/equicordplugins/bypassPinPrompt/index.ts index 6c1503cd2..c90c44b93 100644 --- a/src/equicordplugins/bypassPinPrompt/index.ts +++ b/src/equicordplugins/bypassPinPrompt/index.ts @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "BypassPinPrompt", description: "Bypass the pin prompt when using the pin functions", + tags: ["Shortcuts"], authors: [Devs.thororen], patches: [ ...[ diff --git a/src/equicordplugins/bypassStatus/index.tsx b/src/equicordplugins/bypassStatus/index.tsx index ac9d635d0..04d6861a2 100644 --- a/src/equicordplugins/bypassStatus/index.tsx +++ b/src/equicordplugins/bypassStatus/index.tsx @@ -157,6 +157,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "BypassStatus", description: "Still get notifications from specific sources when in do not disturb mode. Right-click on users/channels/guilds to set them to bypass do not disturb mode.", + tags: ["Activity", "Customisation", "Notifications", "Servers"], authors: [Devs.Inbestigator], dependencies: ["AudioPlayerAPI"], flux: { diff --git a/src/equicordplugins/channelBadges/index.tsx b/src/equicordplugins/channelBadges/index.tsx index 25096a123..ba65fc47a 100644 --- a/src/equicordplugins/channelBadges/index.tsx +++ b/src/equicordplugins/channelBadges/index.tsx @@ -32,6 +32,7 @@ function renderBadge(id: number, title: string) { export default definePlugin({ name: "ChannelBadges", description: "Adds badges to channels based on their type", + tags: ["Appearance", "Customisation", "Servers"], authors: [EquicordDevs.creations, Devs.thororen], settings, patches: [ diff --git a/src/equicordplugins/channelTabs/index.tsx b/src/equicordplugins/channelTabs/index.tsx index 35e6888a3..9cfa461ed 100644 --- a/src/equicordplugins/channelTabs/index.tsx +++ b/src/equicordplugins/channelTabs/index.tsx @@ -15,8 +15,8 @@ import { ChannelStore, Menu } from "@webpack/common"; import { JSX } from "react"; import ChannelsTabsContainer from "./components/ChannelTabsContainer"; -import { BasicChannelTabsProps, createTab, handleChannelSwitch, settings } from "./util"; import * as ChannelTabsUtils from "./util"; +import { BasicChannelTabsProps, createTab, handleChannelSwitch, settings } from "./util"; const contextMenuPatch: NavContextMenuPatchCallback = (children, props: { channel: Channel, messageId?: string; }) => { const { channel, messageId } = props; @@ -47,6 +47,7 @@ const contextMenuPatch: NavContextMenuPatchCallback = (children, props: { channe export default definePlugin({ name: "ChannelTabs", description: "Group your commonly visited channels in tabs, like a browser", + tags: ["Appearance", "Customisation", "Organisation", "Servers"], authors: [Devs.TheSun, Devs.TheKodeToad, EquicordDevs.keifufu, Devs.Nickyux, EquicordDevs.DiabeloDEV, EquicordDevs.justjxke], dependencies: ["ContextMenuAPI"], contextMenus: { diff --git a/src/equicordplugins/cleanChannelName/index.ts b/src/equicordplugins/cleanChannelName/index.ts index 822d5b5d2..9193ac648 100644 --- a/src/equicordplugins/cleanChannelName/index.ts +++ b/src/equicordplugins/cleanChannelName/index.ts @@ -12,6 +12,7 @@ export default definePlugin({ name: "CleanChannelName", authors: [Devs.AutumnVN], description: "remove all emoji and decor shit from channel names", + tags: ["Appearance", "Customisation", "Chat", "Emotes", "Servers"], patches: [ { find: "loadAllGuildAndPrivateChannelsFromDisk(){", diff --git a/src/equicordplugins/cleanerChannelGroups/index.ts b/src/equicordplugins/cleanerChannelGroups/index.ts index 73f5ba4ce..05c80840c 100644 --- a/src/equicordplugins/cleanerChannelGroups/index.ts +++ b/src/equicordplugins/cleanerChannelGroups/index.ts @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "CleanerChannelGroups", description: "Hides all channels in collapsed categories, even if they have unread messages.", + tags: ["Appearance", "Customisation", "Chat", "Organisation", "Servers"], authors: [EquicordDevs.justjxke], patches: [ { diff --git a/src/equicordplugins/clickableRoles/index.tsx b/src/equicordplugins/clickableRoles/index.tsx index 6f4005e58..c23359ffc 100644 --- a/src/equicordplugins/clickableRoles/index.tsx +++ b/src/equicordplugins/clickableRoles/index.tsx @@ -146,6 +146,7 @@ const WrappedClickableRole = ErrorBoundary.wrap(ClickableRole, { noop: true }); export default definePlugin({ name: "ClickableRoles", description: "Click on roles in user profiles and the member list to see which members have them.", + tags: ["Appearance", "Roles"], authors: [Devs.prism], patches: [ diff --git a/src/equicordplugins/clientSideBlock/index.tsx b/src/equicordplugins/clientSideBlock/index.tsx index 00d891d28..1aa51a646 100644 --- a/src/equicordplugins/clientSideBlock/index.tsx +++ b/src/equicordplugins/clientSideBlock/index.tsx @@ -142,6 +142,7 @@ function activeNowView(cards) { export default definePlugin({ name: "ClientSideBlock", description: "Allows you to locally hide almost all content from any user", + tags: ["Utility"], searchTerms: ["blocked", "block", "hide", "hidden", "noblockedmessages"], authors: [Devs.Samwich, EquicordDevs.KamiRu], settings, diff --git a/src/equicordplugins/clipsEnhancements.discordDesktop/index.tsx b/src/equicordplugins/clipsEnhancements.discordDesktop/index.tsx index 91320746e..5d4039046 100644 --- a/src/equicordplugins/clipsEnhancements.discordDesktop/index.tsx +++ b/src/equicordplugins/clipsEnhancements.discordDesktop/index.tsx @@ -72,6 +72,7 @@ migratePluginSettings("ClipsEnhancements", "TimelessClips"); export default definePlugin({ name: "ClipsEnhancements", description: "Add more Clip FPS and duration options, custom clip length, RPC tagging and more", + tags: ["Activity", "Media", "Utility"], authors: [Devs.niko, Devs.Joona, EquicordDevs.keircn], settings, patches: [ diff --git a/src/equicordplugins/collapsibleUi/index.tsx b/src/equicordplugins/collapsibleUi/index.tsx index 05266c715..7095cde41 100644 --- a/src/equicordplugins/collapsibleUi/index.tsx +++ b/src/equicordplugins/collapsibleUi/index.tsx @@ -108,6 +108,7 @@ const ChatButtonsRow = ErrorBoundary.wrap(({ buttons }: { buttons: ReactNode[]; export default definePlugin({ name: "CollapsibleUI", description: "Native collapsible channel, member, chat button, and user area surfaces.", + tags: ["Appearance", "Customisation", "Chat", "Servers"], authors: [EquicordDevs.benjii], searchTerms: ["ui", "sidebar", "layout"], managedStyle, diff --git a/src/equicordplugins/commandPalette/index.tsx b/src/equicordplugins/commandPalette/index.tsx index c11d44a83..6d3199c1a 100644 --- a/src/equicordplugins/commandPalette/index.tsx +++ b/src/equicordplugins/commandPalette/index.tsx @@ -201,6 +201,7 @@ function hotkeyUsesModifiers() { export default definePlugin({ name: "CommandPalette", description: "Quickly run actions through a searchable command palette", + tags: ["Appearance", "Customisation", "Commands", "Shortcuts"], authors: [EquicordDevs.justjxke], settings, patches: [ diff --git a/src/equicordplugins/components.dev/index.tsx b/src/equicordplugins/components.dev/index.tsx index b740b2403..539ca46bb 100644 --- a/src/equicordplugins/components.dev/index.tsx +++ b/src/equicordplugins/components.dev/index.tsx @@ -18,6 +18,7 @@ import ComponentsTab from "./components/ComponentsTab"; export default definePlugin({ name: "Components", description: "Adds a new tab to settings to browse Discord components.", + tags: ["Appearance", "Customisation", "Console", "Developers", "Organisation"], authors: [Devs.prism], dependencies: ["Settings"], startAt: StartAt.WebpackReady, diff --git a/src/equicordplugins/contentWarning/index.tsx b/src/equicordplugins/contentWarning/index.tsx index cb2283c19..0c6982df5 100644 --- a/src/equicordplugins/contentWarning/index.tsx +++ b/src/equicordplugins/contentWarning/index.tsx @@ -152,6 +152,7 @@ export default definePlugin({ name: "ContentWarning", authors: [EquicordDevs.camila314], description: "Allows you to specify certain trigger words that will be blurred by default. Hovering/Clicking on the blurred content will reveal it.", + tags: ["Appearance", "Utility"], settings, patches: [ { diff --git a/src/equicordplugins/copyProfileColors/index.tsx b/src/equicordplugins/copyProfileColors/index.tsx index 256e86994..fb175839c 100644 --- a/src/equicordplugins/copyProfileColors/index.tsx +++ b/src/equicordplugins/copyProfileColors/index.tsx @@ -90,6 +90,7 @@ const userContextMenuPatch: NavContextMenuPatchCallback = (children, { user }) = export default definePlugin({ name: "CopyProfileColors", description: "A plugin to copy people's profile gradient colors to clipboard.", + tags: ["Appearance", "Customisation"], authors: [EquicordDevs.Crxa, EquicordDevs.Cortex], contextMenus: { "user-context": userContextMenuPatch, diff --git a/src/equicordplugins/copyStatusUrls/index.ts b/src/equicordplugins/copyStatusUrls/index.ts index c05692269..ff17bb6f0 100644 --- a/src/equicordplugins/copyStatusUrls/index.ts +++ b/src/equicordplugins/copyStatusUrls/index.ts @@ -23,6 +23,7 @@ const getMetadataFromApi: (activity: any, userId: string) => Promise = find export default definePlugin({ name: "CopyStatusUrls", description: "Copy the users status url when you right-click it", + tags: ["Activity", "Utility"], authors: [Devs.sadan], patches: [ diff --git a/src/equicordplugins/copyUserMention/index.tsx b/src/equicordplugins/copyUserMention/index.tsx index e11eda7e0..afcdaa55f 100644 --- a/src/equicordplugins/copyUserMention/index.tsx +++ b/src/equicordplugins/copyUserMention/index.tsx @@ -48,6 +48,7 @@ export default definePlugin({ name: "CopyUserMention", authors: [EquicordDevs.Cortex, Devs.castdrian], description: "Adds a button to copy user's mention on the user context menu, works best with ValidUser.", + tags: ["Chat", "Utility"], contextMenus: { "user-context": UserContextMenuPatch } diff --git a/src/equicordplugins/cursorBuddy/index.tsx b/src/equicordplugins/cursorBuddy/index.tsx index 7a5d82924..1bfb47a5c 100644 --- a/src/equicordplugins/cursorBuddy/index.tsx +++ b/src/equicordplugins/cursorBuddy/index.tsx @@ -235,6 +235,7 @@ migratePluginSettings("CursorBuddy", "Oneko", "oneko"); export default definePlugin({ name: "CursorBuddy", description: "Adds a sprite that follows your cursor.", + tags: ["Appearance", "Customisation", "Fun"], authors: [Devs.Ven, Devs.adryd, EquicordDevs.nexpid, EquicordDevs.ZcraftElite], searchTerms: ["Oneko", "FatassHorse", "Pet"], settings, diff --git a/src/equicordplugins/customFolderIcons/index.tsx b/src/equicordplugins/customFolderIcons/index.tsx index eecc37762..7c860d5f5 100644 --- a/src/equicordplugins/customFolderIcons/index.tsx +++ b/src/equicordplugins/customFolderIcons/index.tsx @@ -14,6 +14,7 @@ import { folderProp, int2rgba } from "./util"; export default definePlugin({ name: "CustomFolderIcons", description: "Customize folder icons with any png", + tags: ["Appearance", "Customisation", "Organisation"], authors: [EquicordDevs.sadan], settings, patches: [ diff --git a/src/equicordplugins/customSounds/index.tsx b/src/equicordplugins/customSounds/index.tsx index 7af13bd02..9dbb11e90 100644 --- a/src/equicordplugins/customSounds/index.tsx +++ b/src/equicordplugins/customSounds/index.tsx @@ -393,6 +393,7 @@ export function findOverride(id: string): SoundOverride | null { export default definePlugin({ name: "CustomSounds", description: "Customize Discord's sounds.", + tags: ["Customisation", "Notifications", "Voice"], authors: [Devs.ScattrdBlade, Devs.TheKodeToad], settings, startAt: StartAt.Init, diff --git a/src/equicordplugins/customStatusTimeouts/index.tsx b/src/equicordplugins/customStatusTimeouts/index.tsx index 90b8eed4b..d76f258a1 100644 --- a/src/equicordplugins/customStatusTimeouts/index.tsx +++ b/src/equicordplugins/customStatusTimeouts/index.tsx @@ -54,6 +54,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "CustomStatusTimeouts", description: "Adds configurable timeout presets to the status (presence) menu.", + tags: ["Activity", "Utility"], authors: [EquicordDevs.Kiri, EquicordDevs.thororen], settings, patches: [ diff --git a/src/equicordplugins/customTimestamps/index.tsx b/src/equicordplugins/customTimestamps/index.tsx index 9aa55258a..3db95fdf3 100644 --- a/src/equicordplugins/customTimestamps/index.tsx +++ b/src/equicordplugins/customTimestamps/index.tsx @@ -125,6 +125,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "CustomTimestamps", description: "Custom timestamps on messages and tooltips", + tags: ["Appearance", "Customisation"], authors: [Devs.Rini, EquicordDevs.nvhhr, EquicordDevs.Suffocate, Devs.Obsidian], settings, settingsAboutComponent: () => ( diff --git a/src/equicordplugins/customUserColors/index.tsx b/src/equicordplugins/customUserColors/index.tsx index db4db60e5..55f92cf3f 100644 --- a/src/equicordplugins/customUserColors/index.tsx +++ b/src/equicordplugins/customUserColors/index.tsx @@ -100,6 +100,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "CustomUserColors", description: "Lets you add a custom color to any user, anywhere! Highly recommend to use with typingTweaks and roleColorEverywhere", + tags: ["Appearance", "Customisation", "Chat"], authors: [EquicordDevs.mochienya], contextMenus: { "user-context": userContextMenuPatch, diff --git a/src/equicordplugins/declutter/index.tsx b/src/equicordplugins/declutter/index.tsx index e816d9159..ea2e628b6 100644 --- a/src/equicordplugins/declutter/index.tsx +++ b/src/equicordplugins/declutter/index.tsx @@ -141,6 +141,7 @@ function SectionSeparator(title: string) { export default definePlugin({ name: "Declutter", description: "Cleans up Discord by removing non-essential UI elements like profile effects, shop tabs, boosts, and more.", + tags: ["Appearance", "Customisation"], authors: [EquicordDevs.Leon135, Devs.prism, Devs.Kyuuhachi], settings, patches: [ diff --git a/src/equicordplugins/disableCameras/index.tsx b/src/equicordplugins/disableCameras/index.tsx index aa928134b..0acdfeb5a 100644 --- a/src/equicordplugins/disableCameras/index.tsx +++ b/src/equicordplugins/disableCameras/index.tsx @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "DisableCameras", description: "Disables cameras in a call by default", + tags: ["Appearance", "Customisation", "Media", "Privacy"], authors: [Devs.Joona], patches: [ { diff --git a/src/equicordplugins/discordDevBanner/index.tsx b/src/equicordplugins/discordDevBanner/index.tsx index 4e56bd288..febc2eb2a 100644 --- a/src/equicordplugins/discordDevBanner/index.tsx +++ b/src/equicordplugins/discordDevBanner/index.tsx @@ -14,6 +14,7 @@ import { makeDevBanner, settings } from "./components"; export default definePlugin({ name: "DiscordDevBanner", description: "Enables the Discord developer banner, in which displays the build-ID", + tags: ["Appearance", "Console", "Developers"], authors: [EquicordDevs.KrystalSkull, Devs.thororen], settings, patches: [ diff --git a/src/equicordplugins/dragFavoriteEmotes/index.tsx b/src/equicordplugins/dragFavoriteEmotes/index.tsx index 2b8e6b096..f727028ae 100644 --- a/src/equicordplugins/dragFavoriteEmotes/index.tsx +++ b/src/equicordplugins/dragFavoriteEmotes/index.tsx @@ -45,6 +45,7 @@ export default definePlugin({ name: "DragFavoriteEmotes", authors: [EquicordDevs.PWall], description: "Adds the ability to change the order of your favourite emotes", + tags: ["Customisation", "Chat", "Emotes"], patches: [ { find: "#{intl::EMOJI_FAVORITE_TOOLTIP}", diff --git a/src/equicordplugins/dragify/index.tsx b/src/equicordplugins/dragify/index.tsx index d076ea7a7..bb1f3d63d 100644 --- a/src/equicordplugins/dragify/index.tsx +++ b/src/equicordplugins/dragify/index.tsx @@ -149,6 +149,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "Dragify", description: "Drop users, channels, or servers into chat to insert mentions or invites.", + tags: ["Chat", "Servers", "Utility", "Voice"], authors: [EquicordDevs.justjxke], settings, diff --git a/src/equicordplugins/elementHighlighter.dev/index.tsx b/src/equicordplugins/elementHighlighter.dev/index.tsx index edbda06bb..c466b1449 100644 --- a/src/equicordplugins/elementHighlighter.dev/index.tsx +++ b/src/equicordplugins/elementHighlighter.dev/index.tsx @@ -449,6 +449,7 @@ function onToggle(e: KeyboardEvent) { export default definePlugin({ name: "ElementHighlighter", description: "Highlight and inspect elements easily.", + tags: ["Developers"], authors: [Devs.prism], settings, diff --git a/src/equicordplugins/equibopStreamFixes.equibop/index.tsx b/src/equicordplugins/equibopStreamFixes.equibop/index.tsx index fb9a99b3f..2f6341ca1 100644 --- a/src/equicordplugins/equibopStreamFixes.equibop/index.tsx +++ b/src/equicordplugins/equibopStreamFixes.equibop/index.tsx @@ -89,6 +89,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "EquibopStreamFixes", description: "Tries to fix stream quality on Equibop by patching Discord's encoder and quality restrictions.", + tags: ["Voice"], authors: [EquicordDevs.creations], settings, diff --git a/src/equicordplugins/equicordHelper/index.tsx b/src/equicordplugins/equicordHelper/index.tsx index d7d082bb9..8bf3f9fc3 100644 --- a/src/equicordplugins/equicordHelper/index.tsx +++ b/src/equicordplugins/equicordHelper/index.tsx @@ -133,6 +133,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "EquicordHelper", description: "Used to provide support, fix discord caused crashes, and other misc features.", + tags: ["Appearance", "Commands", "Utility"], authors: [ Devs.thororen, EquicordDevs.nyx, diff --git a/src/equicordplugins/equissant/index.ts b/src/equicordplugins/equissant/index.ts index 188316213..b5b4ad4bd 100644 --- a/src/equicordplugins/equissant/index.ts +++ b/src/equicordplugins/equissant/index.ts @@ -33,6 +33,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "Equissant", description: "Crossant every specified amount of clicks :trolley:", + tags: ["Fun"], authors: [EquicordDevs.SomeAspy, Devs.thororen], dependencies: ["AudioPlayerAPI"], settings, diff --git a/src/equicordplugins/exitSounds/index.tsx b/src/equicordplugins/exitSounds/index.tsx index db67fe6ed..4273c32e0 100644 --- a/src/equicordplugins/exitSounds/index.tsx +++ b/src/equicordplugins/exitSounds/index.tsx @@ -104,6 +104,7 @@ let original: typeof ChannelActions.selectVoiceChannel; export default definePlugin({ name: "ExitSounds", description: "Play soundboard sounds when you disconnect from voice.", + tags: ["Fun", "Voice"], authors: [Devs.prism], dependencies: ["AudioPlayerAPI"], settings, diff --git a/src/equicordplugins/exportMessages/index.tsx b/src/equicordplugins/exportMessages/index.tsx index d2d3d68f5..ec3accf62 100644 --- a/src/equicordplugins/exportMessages/index.tsx +++ b/src/equicordplugins/exportMessages/index.tsx @@ -129,6 +129,7 @@ function getUsernames(contacts: ContactsList[], type: number): string[] { export default definePlugin({ name: "ExportMessages", description: "Allows you to export any message to a file", + tags: ["Chat", "Utility"], authors: [EquicordDevs.veygax, EquicordDevs.dat_insanity], settings, contextMenus: { diff --git a/src/equicordplugins/fastDeleteChannels/index.tsx b/src/equicordplugins/fastDeleteChannels/index.tsx index e4b20c200..adff9bea7 100644 --- a/src/equicordplugins/fastDeleteChannels/index.tsx +++ b/src/equicordplugins/fastDeleteChannels/index.tsx @@ -74,6 +74,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "FastDeleteChannels", description: "Adds a trash icon to delete channels", + tags: ["Servers", "Utility"], authors: [Devs.thororen], settings, patches: [ diff --git a/src/equicordplugins/favouriteAnything/index.tsx b/src/equicordplugins/favouriteAnything/index.tsx index 4798868fc..9aaa3c214 100644 --- a/src/equicordplugins/favouriteAnything/index.tsx +++ b/src/equicordplugins/favouriteAnything/index.tsx @@ -25,6 +25,7 @@ export const AttachmentContext = proxyLazyWebpack(() => React.createContext export default definePlugin({ name: "FileUpload", description: "Upload images and videos to file hosting services like Zipline and Nest", + tags: ["Media"], authors: [EquicordDevs.creations, EquicordDevs.keircn, Devs.ScattrdBlade], settings, patches: [ diff --git a/src/equicordplugins/findReply/index.tsx b/src/equicordplugins/findReply/index.tsx index e76cf8f69..7c86c64e2 100644 --- a/src/equicordplugins/findReply/index.tsx +++ b/src/equicordplugins/findReply/index.tsx @@ -89,6 +89,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "FindReply", description: "Jumps to the earliest reply to a message in a channel (lets you follow past conversations more easily).", + tags: ["Chat", "Shortcuts"], authors: [Devs.newwares], settings, messagePopoverButton: { diff --git a/src/equicordplugins/fixFileExtensions/index.tsx b/src/equicordplugins/fixFileExtensions/index.tsx index 489f4d5e5..0c2f3a2d7 100644 --- a/src/equicordplugins/fixFileExtensions/index.tsx +++ b/src/equicordplugins/fixFileExtensions/index.tsx @@ -29,6 +29,7 @@ export default definePlugin({ name: "FixFileExtensions", authors: [Devs.thororen], description: "Fixes file extensions by renaming them to a compatible supported format if possible", + tags: ["Media", "Utility"], reporterTestable: ReporterTestable.None, patches: [ // Taken from AnonymiseFileNames diff --git a/src/equicordplugins/followVoiceUser/index.tsx b/src/equicordplugins/followVoiceUser/index.tsx index 18ef15244..56f242166 100644 --- a/src/equicordplugins/followVoiceUser/index.tsx +++ b/src/equicordplugins/followVoiceUser/index.tsx @@ -74,6 +74,7 @@ const UserContextMenuPatch: NavContextMenuPatchCallback = (children, { channel, export default definePlugin({ name: "FollowVoiceUser", description: "Follow a friend in voice chat.", + tags: ["Voice"], authors: [EquicordDevs.TheArmagan], settings, settingsAboutComponent: () => ( diff --git a/src/equicordplugins/fontLoader/index.tsx b/src/equicordplugins/fontLoader/index.tsx index f81c1d9a5..aab6f31f3 100644 --- a/src/equicordplugins/fontLoader/index.tsx +++ b/src/equicordplugins/fontLoader/index.tsx @@ -200,6 +200,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "FontLoader", description: "Loads any font from Google Fonts", + tags: ["Appearance", "Customisation"], authors: [EquicordDevs.vmohammad], settings, diff --git a/src/equicordplugins/forwardAnywhere/index.ts b/src/equicordplugins/forwardAnywhere/index.ts index 4b1a4dd4e..0404c4acf 100644 --- a/src/equicordplugins/forwardAnywhere/index.ts +++ b/src/equicordplugins/forwardAnywhere/index.ts @@ -25,6 +25,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "ForwardAnywhere", description: "If a forward fails send it as a normal message also allows nsfw forwards", + tags: ["Chat", "Utility"], authors: [Devs.thororen], settings, patches: [ diff --git a/src/equicordplugins/frequentQuickSwitcher/index.tsx b/src/equicordplugins/frequentQuickSwitcher/index.tsx index c2d61a11e..f6c2a3770 100644 --- a/src/equicordplugins/frequentQuickSwitcher/index.tsx +++ b/src/equicordplugins/frequentQuickSwitcher/index.tsx @@ -37,6 +37,7 @@ function generateSearchResults(query) { export default definePlugin({ name: "FrequentQuickSwitcher", description: "Rewrites and filters the quick switcher results to be your most frequent channels", + tags: ["Shortcuts", "Servers"], authors: [Devs.Samwich], generateSearchResults: generateSearchResults, patches: [ diff --git a/src/equicordplugins/friendCodes/index.tsx b/src/equicordplugins/friendCodes/index.tsx index 8168cfe04..9997a8347 100644 --- a/src/equicordplugins/friendCodes/index.tsx +++ b/src/equicordplugins/friendCodes/index.tsx @@ -12,6 +12,7 @@ import FriendCodesPanel from "./FriendCodesPanel"; export default definePlugin({ name: "FriendCodes", description: "Generate FriendCodes to easily add friends", + tags: ["Friends", "Utility"], authors: [Devs.HypedDomi], patches: [ { diff --git a/src/equicordplugins/friendTags/index.tsx b/src/equicordplugins/friendTags/index.tsx index 0f893cdb8..520fafda4 100644 --- a/src/equicordplugins/friendTags/index.tsx +++ b/src/equicordplugins/friendTags/index.tsx @@ -209,6 +209,7 @@ const userPatch: NavContextMenuPatchCallback = (children, { user }) => { export default definePlugin({ name: "FriendTags", description: "Allows you to filter by custom tags in the quick switcher by starting a search with &", + tags: ["Shortcuts"], authors: [Devs.Samwich], settings, contextMenus: { diff --git a/src/equicordplugins/friendshipRanks/index.tsx b/src/equicordplugins/friendshipRanks/index.tsx index 9294c9f61..ff91f1cbd 100644 --- a/src/equicordplugins/friendshipRanks/index.tsx +++ b/src/equicordplugins/friendshipRanks/index.tsx @@ -143,6 +143,7 @@ function getBadgesToApply() { export default definePlugin({ name: "FriendshipRanks", description: "Adds badges showcasing how long you have been friends with a user for", + tags: ["Friends"], authors: [Devs.Samwich], start() { getBadgesToApply().forEach(b => Badges.addProfileBadge(b)); diff --git a/src/equicordplugins/fullVcPfp/index.tsx b/src/equicordplugins/fullVcPfp/index.tsx index f1664da80..09c9fec27 100644 --- a/src/equicordplugins/fullVcPfp/index.tsx +++ b/src/equicordplugins/fullVcPfp/index.tsx @@ -14,6 +14,7 @@ import style from "./style.css?managed"; export default definePlugin({ name: "FullVCPFP", description: "Makes avatars take up the entire vc tile", + tags: ["Appearance", "Voice"], authors: [EquicordDevs.mochienya], patches: [ { diff --git a/src/equicordplugins/ghosted/index.tsx b/src/equicordplugins/ghosted/index.tsx index 921970696..ca2b504d9 100644 --- a/src/equicordplugins/ghosted/index.tsx +++ b/src/equicordplugins/ghosted/index.tsx @@ -147,6 +147,7 @@ function makeContextItem(props) { export default definePlugin({ name: "Ghosted", description: "A cute ghost will appear if you don't answer their DMs", + tags: ["Chat", "Utility"], authors: [EquicordDevs.vei, Devs.sadan, EquicordDevs.justjxke, EquicordDevs.iamme], settings, dependencies: ["AudioPlayerAPI", "ServerListAPI"], diff --git a/src/equicordplugins/gifCollections/index.tsx b/src/equicordplugins/gifCollections/index.tsx index 8bfc180d7..92c3ac962 100644 --- a/src/equicordplugins/gifCollections/index.tsx +++ b/src/equicordplugins/gifCollections/index.tsx @@ -26,6 +26,7 @@ let oldTrendingCat: Category[] | null = null; export default definePlugin({ name: "GifCollections", description: "Allows you to create collections of gifs.", + tags: ["Chat", "Emotes"], authors: [EquicordDevs.creations], settings, contextMenus: { diff --git a/src/equicordplugins/githubRepos/index.tsx b/src/equicordplugins/githubRepos/index.tsx index 75f566a82..0bfdd025b 100644 --- a/src/equicordplugins/githubRepos/index.tsx +++ b/src/equicordplugins/githubRepos/index.tsx @@ -38,6 +38,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "GitHubRepos", description: "Displays a user's public GitHub repositories in their profile", + tags: ["Appearance"], authors: [EquicordDevs.talhakf, EquicordDevs.Panniku, EquicordDevs.benjii], settings, diff --git a/src/equicordplugins/globalBadges/index.tsx b/src/equicordplugins/globalBadges/index.tsx index 24802395a..53e772f9a 100644 --- a/src/equicordplugins/globalBadges/index.tsx +++ b/src/equicordplugins/globalBadges/index.tsx @@ -25,6 +25,7 @@ migratePluginSetting("GlobalBadges", "showRaincord", "showRa1ncord"); export default definePlugin({ name: "GlobalBadges", description: "Adds global badges from other client mods", + tags: ["Appearance"], authors: [Devs.HypedDomi, EquicordDevs.Wolfie, Devs.thororen], settings, settingsAboutComponent: () => ( diff --git a/src/equicordplugins/googleThat/index.tsx b/src/equicordplugins/googleThat/index.tsx index ad70e3217..ef6005761 100644 --- a/src/equicordplugins/googleThat/index.tsx +++ b/src/equicordplugins/googleThat/index.tsx @@ -75,6 +75,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "GoogleThat", description: "Adds a command to send a internet search link", + tags: ["Commands", "Utility"], authors: [Devs.Samwich, EquicordDevs.KrystalSkull], searchTerms: ["search", "google", "query", "duckduckgo", "command"], settings, diff --git a/src/equicordplugins/guildPickerDumper/index.tsx b/src/equicordplugins/guildPickerDumper/index.tsx index 58892bf73..fe9e86b39 100644 --- a/src/equicordplugins/guildPickerDumper/index.tsx +++ b/src/equicordplugins/guildPickerDumper/index.tsx @@ -95,6 +95,7 @@ async function zipGuildAssets(guild: Guild, type: "emojis" | "stickers") { export default definePlugin({ name: "GuildPickerDumper", description: "Context menu to dump and download a server's emojis and stickers.", + tags: ["Emotes", "Servers", "Utility"], authors: [EquicordDevs.Cortex, Devs.Samwich, EquicordDevs.Synth, Devs.thororen], contextMenus: { "guild-context": Patch, diff --git a/src/equicordplugins/hideChatButtons/index.tsx b/src/equicordplugins/hideChatButtons/index.tsx index 2a942ecd5..7d8d5f989 100644 --- a/src/equicordplugins/hideChatButtons/index.tsx +++ b/src/equicordplugins/hideChatButtons/index.tsx @@ -81,6 +81,7 @@ function ButtonsInnerComponent({ buttons }: { buttons: ReactNode; }) { export default definePlugin({ name: "HideChatButtons", description: "Able to hide the chat buttons", + tags: ["Chat", "Utility"], settings: settings, authors: [EquicordDevs.iamme], patches: [ diff --git a/src/equicordplugins/hideMessages/index.tsx b/src/equicordplugins/hideMessages/index.tsx index ca5feb6bd..4741a195f 100644 --- a/src/equicordplugins/hideMessages/index.tsx +++ b/src/equicordplugins/hideMessages/index.tsx @@ -49,6 +49,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "HideMessages", description: "A plugin to temporarily hide messages until you restart.", + tags: ["Chat", "Utility"], authors: [EquicordDevs.yash], contextMenus: { "message": messageCtxPatch diff --git a/src/equicordplugins/hideServers/index.tsx b/src/equicordplugins/hideServers/index.tsx index e91104fea..8de222d2f 100644 --- a/src/equicordplugins/hideServers/index.tsx +++ b/src/equicordplugins/hideServers/index.tsx @@ -76,6 +76,7 @@ export function removeIndicator() { export default definePlugin({ name: "HideServers", description: "Allows you to hide servers from the guild list and quick switcher by right clicking them", + tags: ["Servers", "Utility"], authors: [EquicordDevs.bep], searchTerms: ["guild", "server", "hide", "folder"], diff --git a/src/equicordplugins/holyNotes/index.tsx b/src/equicordplugins/holyNotes/index.tsx index f98001b74..cab8fde2c 100644 --- a/src/equicordplugins/holyNotes/index.tsx +++ b/src/equicordplugins/holyNotes/index.tsx @@ -72,6 +72,7 @@ function ToolBarHeader() { export default definePlugin({ name: "HolyNotes", description: "Save messages as notes to revisit later", + tags: ["Chat", "Organisation"], authors: [EquicordDevs.Wolfie], toolboxActions: { diff --git a/src/equicordplugins/homeTyping/index.tsx b/src/equicordplugins/homeTyping/index.tsx index 83fa1c0b9..0d652c337 100644 --- a/src/equicordplugins/homeTyping/index.tsx +++ b/src/equicordplugins/homeTyping/index.tsx @@ -18,6 +18,7 @@ const PrivateChannelSortStore = findStoreLazy("PrivateChannelSortStore") as { ge export default definePlugin({ name: "HomeTyping", description: "Changes the home button to a typing indicator if someone in your dms is typing", + tags: ["Chat"], authors: [Devs.Samwich], TypingIcon() { return ; diff --git a/src/equicordplugins/hopOn/index.tsx b/src/equicordplugins/hopOn/index.tsx index cd0de30ed..a9a2b15a6 100644 --- a/src/equicordplugins/hopOn/index.tsx +++ b/src/equicordplugins/hopOn/index.tsx @@ -32,6 +32,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "HopOn", description: "Hop on! Opens a configurable URL when a message matches a custom regex in the current channel.", + tags: ["Fun"], authors: [Devs.ImLvna], settings, flux: { diff --git a/src/equicordplugins/husk/index.tsx b/src/equicordplugins/husk/index.tsx index 25aad8e37..5f231db91 100644 --- a/src/equicordplugins/husk/index.tsx +++ b/src/equicordplugins/husk/index.tsx @@ -99,6 +99,7 @@ function getEmojiIdThatShouldBeUsed(guildId: string) { export default definePlugin({ name: "Husk", description: "Adds Husk button (check settings to change used emoji)", + tags: ["Emotes", "Fun"], authors: [Devs.nin0dev], settings, messagePopoverButton: { diff --git a/src/equicordplugins/iRememberYou/index.tsx b/src/equicordplugins/iRememberYou/index.tsx index dc9f62b57..2a469c2e2 100644 --- a/src/equicordplugins/iRememberYou/index.tsx +++ b/src/equicordplugins/iRememberYou/index.tsx @@ -19,6 +19,7 @@ import DataUI from "./components/ui"; export default definePlugin({ name: "IRememberYou", description: "Locally saves everyone you've been communicating with (including servers), in case of lose", + tags: ["Chat", "Servers"], authors: [EquicordDevs.zoodogood, EquicordDevs.keircn], dependencies: ["MessageEventsAPI"], diff --git a/src/equicordplugins/iconViewer/index.tsx b/src/equicordplugins/iconViewer/index.tsx index 1f364adf5..6df0d72f1 100644 --- a/src/equicordplugins/iconViewer/index.tsx +++ b/src/equicordplugins/iconViewer/index.tsx @@ -19,6 +19,7 @@ import { SettingsAbout } from "./components/Modals"; export default definePlugin({ name: "IconViewer", description: "Adds a new tab to settings to preview all icons.", + tags: ["Developers"], authors: [EquicordDevs.iamme], dependencies: ["Settings"], startAt: StartAt.WebpackReady, diff --git a/src/equicordplugins/idleAutoRestart/index.tsx b/src/equicordplugins/idleAutoRestart/index.tsx index 2112f671f..33d11e2eb 100644 --- a/src/equicordplugins/idleAutoRestart/index.tsx +++ b/src/equicordplugins/idleAutoRestart/index.tsx @@ -36,6 +36,7 @@ function onActivity() { export default definePlugin({ name: "IdleAutoRestart", description: "Automatically restarts the client after being idle for a configurable amount of time, but avoids restarting while you are in VC.", + tags: ["Utility"], authors: [EquicordDevs.SteelTech], settings, diff --git a/src/equicordplugins/ignoreCalls/index.tsx b/src/equicordplugins/ignoreCalls/index.tsx index 2505ce860..1a448fb7b 100644 --- a/src/equicordplugins/ignoreCalls/index.tsx +++ b/src/equicordplugins/ignoreCalls/index.tsx @@ -93,6 +93,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "IgnoreCalls", description: "Allows you to ignore calls from specific users or dm groups.", + tags: ["Voice"], authors: [EquicordDevs.TheArmagan, Devs.thororen], settings, patches: [ diff --git a/src/equicordplugins/inRole/index.tsx b/src/equicordplugins/inRole/index.tsx index 755f9219c..bba8ea205 100644 --- a/src/equicordplugins/inRole/index.tsx +++ b/src/equicordplugins/inRole/index.tsx @@ -34,6 +34,7 @@ function getMembersInRole(roleId: string, guildId: string) { export default definePlugin({ name: "InRole", description: "Know who is in a role with the role context menu or /inrole command (read plugin info!)", + tags: ["Commands", "Roles"], authors: [Devs.nin0dev], dependencies: ["UserSettingsAPI"], start() { diff --git a/src/equicordplugins/ingtoninator/index.tsx b/src/equicordplugins/ingtoninator/index.tsx index 43013fc4f..ad9ba2523 100644 --- a/src/equicordplugins/ingtoninator/index.tsx +++ b/src/equicordplugins/ingtoninator/index.tsx @@ -146,6 +146,7 @@ function disabledIcon() { export default definePlugin({ name: "Ingtoninator", description: "Suffixes 'ington' to a random word in your message", + tags: ["Fun"], authors: [EquicordDevs.zyqunix, EquicordDevs.BioTomateDE], settings, chatBarButton: { diff --git a/src/equicordplugins/instantScreenshare/index.tsx b/src/equicordplugins/instantScreenshare/index.tsx index 6a55107be..b947da3c1 100644 --- a/src/equicordplugins/instantScreenshare/index.tsx +++ b/src/equicordplugins/instantScreenshare/index.tsx @@ -62,6 +62,7 @@ async function autoStartStream(instant = true) { export default definePlugin({ name: "InstantScreenshare", description: "Instantly screenshare when joining a voice channel with support for desktop sources, windows, and video input devices (cameras, capture cards)", + tags: ["Media", "Voice"], authors: [Devs.HAHALOSAH, Devs.thororen, EquicordDevs.mart], dependencies: ["EquicordToolbox"], searchTerms: ["ScreenshareKeybind"], diff --git a/src/equicordplugins/invisibleChat.desktop/index.tsx b/src/equicordplugins/invisibleChat.desktop/index.tsx index 5589f8dec..f45bb427c 100644 --- a/src/equicordplugins/invisibleChat.desktop/index.tsx +++ b/src/equicordplugins/invisibleChat.desktop/index.tsx @@ -149,6 +149,7 @@ export async function buildEmbed(message: any, revealed: string): Promise export default definePlugin({ name: "InvisibleChat", description: "Encrypt your Messages in a non-suspicious way!", + tags: ["Chat"], authors: [Devs.SammCheese], dependencies: ["MessageUpdaterAPI"], reporterTestable: ReporterTestable.Patches, diff --git a/src/equicordplugins/inviteDefaults/index.ts b/src/equicordplugins/inviteDefaults/index.ts index 597c96fec..476651731 100644 --- a/src/equicordplugins/inviteDefaults/index.ts +++ b/src/equicordplugins/inviteDefaults/index.ts @@ -45,6 +45,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "InviteDefaults", description: "Allows you to edit the default values when creating server invites.", + tags: ["Servers"], authors: [EquicordDevs.VillainsRule], settings, patches: [ diff --git a/src/equicordplugins/jumpTo/index.tsx b/src/equicordplugins/jumpTo/index.tsx index 537d9c19f..791b2a93b 100644 --- a/src/equicordplugins/jumpTo/index.tsx +++ b/src/equicordplugins/jumpTo/index.tsx @@ -121,6 +121,7 @@ const MessageMenuPatch: NavContextMenuPatchCallback = (children, { message }: { export default definePlugin({ name: "JumpTo", description: "Adds context menu options to jump to the start or bottom of a channel/DM.", + tags: ["Chat", "Utility"], authors: [Devs.Samwich, Devs.thororen], contextMenus: { "channel-context": ChannelMenuPatch, diff --git a/src/equicordplugins/jumpscare/index.tsx b/src/equicordplugins/jumpscare/index.tsx index 5a8e4d531..8070cfd13 100644 --- a/src/equicordplugins/jumpscare/index.tsx +++ b/src/equicordplugins/jumpscare/index.tsx @@ -48,6 +48,7 @@ function getJumpscareRoot(): Root { export default definePlugin({ name: "Jumpscare", description: "Adds a configurable chance of jumpscaring you whenever you open a channel. Inspired by Geometry Dash Mega Hack", + tags: ["Fun"], authors: [Devs.surgedevs], dependencies: ["AudioPlayerAPI"], settings, diff --git a/src/equicordplugins/keyboardNavigation/index.tsx b/src/equicordplugins/keyboardNavigation/index.tsx index f0c6e8d2a..852edafa6 100644 --- a/src/equicordplugins/keyboardNavigation/index.tsx +++ b/src/equicordplugins/keyboardNavigation/index.tsx @@ -87,6 +87,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "KeyboardNavigation", description: "Allows you to navigate the UI with a keyboard.", + tags: ["Accessibility", "Shortcuts"], authors: [Devs.Ethan], settings, diff --git a/src/equicordplugins/keyboardSounds/index.ts b/src/equicordplugins/keyboardSounds/index.ts index 14c8018ff..e85262bdd 100644 --- a/src/equicordplugins/keyboardSounds/index.ts +++ b/src/equicordplugins/keyboardSounds/index.ts @@ -126,6 +126,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "KeyboardSounds", description: "Adds OperaGX or osu! sound effects when typing on your keyboard.", + tags: ["Fun"], authors: [Devs.HypedDomi, EquicordDevs.Etorix], dependencies: ["AudioPlayerAPI"], settings, diff --git a/src/equicordplugins/keywordNotify/index.tsx b/src/equicordplugins/keywordNotify/index.tsx index 10b08dddb..5b7664e03 100644 --- a/src/equicordplugins/keywordNotify/index.tsx +++ b/src/equicordplugins/keywordNotify/index.tsx @@ -318,6 +318,7 @@ export default definePlugin({ name: "KeywordNotify", authors: [EquicordDevs.camila314, EquicordDevs.x3rt], description: "Sends a notification if a given message matches certain keywords or regexes", + tags: ["Chat", "Notifications"], settings, patches: [ { diff --git a/src/equicordplugins/lastActive/index.tsx b/src/equicordplugins/lastActive/index.tsx index 9e8333a5e..9ca7a035c 100644 --- a/src/equicordplugins/lastActive/index.tsx +++ b/src/equicordplugins/lastActive/index.tsx @@ -135,6 +135,7 @@ export function LastActiveIcon() { export default definePlugin({ name: "LastActive", description: "A plugin to jump to last active message from yourself or another user in a channel/server.", + tags: ["Chat", "Utility"], authors: [EquicordDevs.Crxa], contextMenus: { "channel-context": ChannelContextMenuPatch, diff --git a/src/equicordplugins/loginWithQR/index.tsx b/src/equicordplugins/loginWithQR/index.tsx index 21f1c7c9d..e1f076aa2 100644 --- a/src/equicordplugins/loginWithQR/index.tsx +++ b/src/equicordplugins/loginWithQR/index.tsx @@ -42,6 +42,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "LoginWithQR", description: "Allows you to login to another device by scanning a login QR code, just like on mobile!", + tags: ["Utility"], authors: [EquicordDevs.nexpid], settings, diff --git a/src/equicordplugins/mediaPlaybackSpeed/index.tsx b/src/equicordplugins/mediaPlaybackSpeed/index.tsx index 42edab6e7..086f2f1e2 100644 --- a/src/equicordplugins/mediaPlaybackSpeed/index.tsx +++ b/src/equicordplugins/mediaPlaybackSpeed/index.tsx @@ -48,6 +48,7 @@ type MediaRef = RefObject | undefined; export default definePlugin({ name: "MediaPlaybackSpeed", description: "Allows changing the (default) playback speed of media embeds", + tags: ["Chat", "Media"], authors: [Devs.D3SOX], settings, patches: [ diff --git a/src/equicordplugins/messageBurst/index.ts b/src/equicordplugins/messageBurst/index.ts index 0d60216c8..9dd35b50a 100644 --- a/src/equicordplugins/messageBurst/index.ts +++ b/src/equicordplugins/messageBurst/index.ts @@ -66,6 +66,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "MessageBurst", description: "Merges messages sent within a time period with your previous sent message if no one else sends a message before you.", + tags: ["Chat"], authors: [EquicordDevs.port22exposed], settings, onBeforeMessageSend(channelId, message) { diff --git a/src/equicordplugins/messageColors/index.tsx b/src/equicordplugins/messageColors/index.tsx index 568718102..5217971a8 100644 --- a/src/equicordplugins/messageColors/index.tsx +++ b/src/equicordplugins/messageColors/index.tsx @@ -27,6 +27,7 @@ export default definePlugin({ authors: [EquicordDevs.Hen], name: "MessageColors", description: "Displays color codes like #FF0042 inside of messages", + tags: ["Appearance", "Chat"], settings, patches: [ // Create a new markdown rule, so it parses just like any other features diff --git a/src/equicordplugins/messageFetchTimer/index.tsx b/src/equicordplugins/messageFetchTimer/index.tsx index 139a35209..a60462f1e 100644 --- a/src/equicordplugins/messageFetchTimer/index.tsx +++ b/src/equicordplugins/messageFetchTimer/index.tsx @@ -147,6 +147,7 @@ function handleMessageLoad(data: any) { export default definePlugin({ name: "MessageFetchTimer", description: "Shows how long it took to fetch messages for the current channel", + tags: ["Chat", "Utility"], authors: [EquicordDevs.GroupXyz], settings, diff --git a/src/equicordplugins/messageLinkTooltip/index.tsx b/src/equicordplugins/messageLinkTooltip/index.tsx index 87f97581a..8e0d053f7 100644 --- a/src/equicordplugins/messageLinkTooltip/index.tsx +++ b/src/equicordplugins/messageLinkTooltip/index.tsx @@ -62,6 +62,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "MessageLinkTooltip", description: "Adds a tooltip with a message preview when hovering over message links, replies, and forwarded messages.", + tags: ["Appearance", "Chat"], authors: [Devs.Kyuuhachi], settings, diff --git a/src/equicordplugins/messageLoggerEnhanced/index.tsx b/src/equicordplugins/messageLoggerEnhanced/index.tsx index e8b3cdab9..aad1f85f5 100644 --- a/src/equicordplugins/messageLoggerEnhanced/index.tsx +++ b/src/equicordplugins/messageLoggerEnhanced/index.tsx @@ -18,8 +18,8 @@ import { FluxDispatcher, MessageStore, SelectedChannelStore, UserStore } from "@ import { LogsIcon, OpenLogsButton } from "./components/LogsButton"; import { openLogModal } from "./components/LogsModal"; import * as idb from "./db"; -import { addMessage } from "./LoggedMessageManager"; import * as LoggedMessageManager from "./LoggedMessageManager"; +import { addMessage } from "./LoggedMessageManager"; import { settings } from "./settings"; import { FetchMessagesResponse, LoadMessagePayload, LoggedMessage, LoggedMessageJSON, MessageCreatePayload, MessageDeleteBulkPayload, MessageDeletePayload, MessageUpdatePayload } from "./types"; import { cleanUpCachedMessage, cleanupUserObject, getNative, isGhostPinged, mapTimestamp, messageJsonToMessageClass, reAddDeletedMessages } from "./utils"; @@ -258,6 +258,7 @@ export default definePlugin({ name: "MessageLoggerEnhanced", authors: [Devs.Aria, EquicordDevs.keircn], description: "Improves MessageLogger with edited message history, ghost ping detection and more", + tags: ["Chat", "Servers"], dependencies: ["MessageLogger"], patches: [ diff --git a/src/equicordplugins/messageNotifier/index.ts b/src/equicordplugins/messageNotifier/index.ts index 7a41158d0..af9cee4b6 100644 --- a/src/equicordplugins/messageNotifier/index.ts +++ b/src/equicordplugins/messageNotifier/index.ts @@ -38,6 +38,7 @@ export default definePlugin({ authors: [EquicordDevs.cassie, EquicordDevs.mochienya], name: "MessageNotifier", description: "Get toasts for when chosen users send a message", + tags: ["Chat", "Notifications"], settings, flux: { MESSAGE_CREATE({ message, channelId, guildId }: MessageCreatePayload) { diff --git a/src/equicordplugins/messagePeek/index.tsx b/src/equicordplugins/messagePeek/index.tsx index 340552eac..b22824096 100644 --- a/src/equicordplugins/messagePeek/index.tsx +++ b/src/equicordplugins/messagePeek/index.tsx @@ -239,6 +239,7 @@ function shouldShowActivity(lastMessage: Message | undefined, hasActivity: boole export default definePlugin({ name: "MessagePeek", description: "Shows the last message preview and timestamp in the Direct Messages list.", + tags: ["Appearance", "Chat"], authors: [Devs.prism, EquicordDevs.justjxke], settings, patches: [ diff --git a/src/equicordplugins/messageTranslate/index.tsx b/src/equicordplugins/messageTranslate/index.tsx index 68adbbd0b..64b7f50d2 100644 --- a/src/equicordplugins/messageTranslate/index.tsx +++ b/src/equicordplugins/messageTranslate/index.tsx @@ -51,6 +51,7 @@ function triggerReRender(message: MessageWithContent) { export default definePlugin({ name: "MessageTranslate", description: "Auto translate messages to your language with caching, per-channel toggles, and more options.", + tags: ["Chat", "Utility"], authors: [EquicordDevs.creations], settings, diff --git a/src/equicordplugins/micLoopbackTester/index.tsx b/src/equicordplugins/micLoopbackTester/index.tsx index f0f249fd6..8e0a27a60 100644 --- a/src/equicordplugins/micLoopbackTester/index.tsx +++ b/src/equicordplugins/micLoopbackTester/index.tsx @@ -115,6 +115,7 @@ const MicLoopbackUserAreaButton: UserAreaButtonFactory = props => ( diff --git a/src/equicordplugins/newPluginsManager/index.tsx b/src/equicordplugins/newPluginsManager/index.tsx index 683d9de74..d4a340fc1 100644 --- a/src/equicordplugins/newPluginsManager/index.tsx +++ b/src/equicordplugins/newPluginsManager/index.tsx @@ -14,6 +14,7 @@ import { openNewPluginsModal } from "./NewPluginsModal"; export default definePlugin({ name: "NewPluginsManager", description: "Utility that notifies you when new plugins are added to Equicord", + tags: ["Utility"], authors: [Devs.Sqaaakoi], enabledByDefault: true, flux: { diff --git a/src/equicordplugins/noNitroUpsell/index.ts b/src/equicordplugins/noNitroUpsell/index.ts index d7b2eaf5d..cd3c2a665 100644 --- a/src/equicordplugins/noNitroUpsell/index.ts +++ b/src/equicordplugins/noNitroUpsell/index.ts @@ -10,7 +10,8 @@ import { OverridePremiumTypeStore } from "@webpack/common"; export default definePlugin({ name: "NoNitroUpsell", - description: "Removes ALL of Discord's nitro upsells by tricking the client into thinking you have nitro.", + description: "Removes all of Discord's nitro upsells by tricking the client into thinking you have nitro.", + tags: ["Utility"], authors: [Devs.thororen], flux: { CONNECTION_OPEN() { diff --git a/src/equicordplugins/noPushToTalk/index.ts b/src/equicordplugins/noPushToTalk/index.ts index ff5ee8682..fb2d922e8 100644 --- a/src/equicordplugins/noPushToTalk/index.ts +++ b/src/equicordplugins/noPushToTalk/index.ts @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "NoPushToTalk", description: "Bypasses the push-to-talk requirement for voice activity in channels that enforce it.", + tags: ["Servers", "Voice"], authors: [EquicordDevs.omaw], patches: [ { diff --git a/src/equicordplugins/noRPC.discordDesktop/index.ts b/src/equicordplugins/noRPC.discordDesktop/index.ts index 51ed1f962..df2d409de 100644 --- a/src/equicordplugins/noRPC.discordDesktop/index.ts +++ b/src/equicordplugins/noRPC.discordDesktop/index.ts @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "NoRPC", description: "Disables Discord's RPC server.", + tags: ["Privacy", "Servers"], authors: [Devs.Cyn], patches: [ { diff --git a/src/equicordplugins/noRoleHeaders/index.ts b/src/equicordplugins/noRoleHeaders/index.ts index 6b4a7d3a0..c008e9273 100644 --- a/src/equicordplugins/noRoleHeaders/index.ts +++ b/src/equicordplugins/noRoleHeaders/index.ts @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "NoRoleHeaders", description: "We are all equal!! Removes the role headers in the member list.", + tags: ["Appearance", "Fun", "Roles"], authors: [Devs.Samwich], patches: [ { diff --git a/src/equicordplugins/normalizeMessageLinks/index.ts b/src/equicordplugins/normalizeMessageLinks/index.ts index 062f1ee44..6ee61a440 100644 --- a/src/equicordplugins/normalizeMessageLinks/index.ts +++ b/src/equicordplugins/normalizeMessageLinks/index.ts @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "NormalizeMessageLinks", description: "Strip canary/ptb from message links", + tags: ["Chat"], authors: [Devs.bb010g], patches: [ { diff --git a/src/equicordplugins/notificationTitle.discordDesktop/index.tsx b/src/equicordplugins/notificationTitle.discordDesktop/index.tsx index 56d8b3fef..f2db23cac 100644 --- a/src/equicordplugins/notificationTitle.discordDesktop/index.tsx +++ b/src/equicordplugins/notificationTitle.discordDesktop/index.tsx @@ -20,6 +20,7 @@ const MessageTypes = findByPropsLazy("REPLY", "STAGE_RAISE_HAND", "CHANNEL_NAME_ export default definePlugin({ name: "NotificationTitle", description: "Makes desktop notifications more informative", + tags: ["Appearance", "Notifications"], authors: [Devs.Kyuuhachi], patches: [ diff --git a/src/equicordplugins/orbolayBridge/index.tsx b/src/equicordplugins/orbolayBridge/index.tsx index 6c9863ee4..36d1a6ad5 100644 --- a/src/equicordplugins/orbolayBridge/index.tsx +++ b/src/equicordplugins/orbolayBridge/index.tsx @@ -314,6 +314,7 @@ const createWebsocket = () => { export default definePlugin({ name: "OrbolayBridge", description: "Bridge plugin to connect Orbolay to Discord", + tags: ["Utility", "Voice"], authors: [EquicordDevs.SpikeHD], settings, flux: { diff --git a/src/equicordplugins/partyMode/index.ts b/src/equicordplugins/partyMode/index.ts index f7cddbf97..8641257ad 100644 --- a/src/equicordplugins/partyMode/index.ts +++ b/src/equicordplugins/partyMode/index.ts @@ -44,6 +44,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "PartyMode", description: "Allows you to use party mode cause the party never ends ✨", + tags: ["Fun"], authors: [Devs.UwUDev], reporterTestable: ReporterTestable.None, settings, diff --git a/src/equicordplugins/pinIcon/index.tsx b/src/equicordplugins/pinIcon/index.tsx index 1e6f5987f..d44edfe8f 100644 --- a/src/equicordplugins/pinIcon/index.tsx +++ b/src/equicordplugins/pinIcon/index.tsx @@ -25,6 +25,7 @@ const PinIcon = findComponentByCodeLazy("1-.06-.63L6.16"); export default definePlugin({ name: "PinIcon", description: "Adds a pin icon to pinned messages", + tags: ["Appearance", "Chat"], authors: [EquicordDevs.iamme], patches: [ { diff --git a/src/equicordplugins/pingNotifications/index.tsx b/src/equicordplugins/pingNotifications/index.tsx index e6b0e45e2..1d96249b5 100644 --- a/src/equicordplugins/pingNotifications/index.tsx +++ b/src/equicordplugins/pingNotifications/index.tsx @@ -92,6 +92,7 @@ function isUserBlocked(userId) { export default definePlugin({ name: "PingNotifications", description: "Customizable notifications with improved mention formatting", + tags: ["Chat", "Friends", "Notifications", "Servers"], authors: [EquicordDevs.smuki], settings, diff --git a/src/equicordplugins/platformSpoofer/index.tsx b/src/equicordplugins/platformSpoofer/index.tsx index e15a5df17..b8e574f3b 100644 --- a/src/equicordplugins/platformSpoofer/index.tsx +++ b/src/equicordplugins/platformSpoofer/index.tsx @@ -52,6 +52,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "PlatformSpoofer", description: "Spoof what platform or device you're on", + tags: ["Utility"], authors: [EquicordDevs.Drag, EquicordDevs.neoarz], settingsAboutComponent: () => ( diff --git a/src/equicordplugins/polishWording/index.ts b/src/equicordplugins/polishWording/index.ts index 57f925901..4f623c04a 100644 --- a/src/equicordplugins/polishWording/index.ts +++ b/src/equicordplugins/polishWording/index.ts @@ -64,6 +64,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "PolishWording", description: "Tweaks your messages to make them look nicer and have better grammar. See settings", + tags: ["Chat"], authors: [Devs.Samwich, EquicordDevs.WKoA], onBeforeMessageSend: presendObject, settings, diff --git a/src/equicordplugins/profileSets/index.tsx b/src/equicordplugins/profileSets/index.tsx index a2db97aa4..c9828017f 100644 --- a/src/equicordplugins/profileSets/index.tsx +++ b/src/equicordplugins/profileSets/index.tsx @@ -29,6 +29,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "ProfileSets", description: "Allows you to save and load different profile presets, via the Profile Section in Settings.", + tags: ["Appearance", "Customisation", "Utility"], authors: [EquicordDevs.omaw, EquicordDevs.justjxke], settings, patches: [ diff --git a/src/equicordplugins/questify/index.tsx b/src/equicordplugins/questify/index.tsx index cf0d1c4ab..c85e0be53 100644 --- a/src/equicordplugins/questify/index.tsx +++ b/src/equicordplugins/questify/index.tsx @@ -1360,6 +1360,7 @@ migratePluginToSettings(true, "Questify", "QuestCompleter", "completeVideoQuests export default definePlugin({ name: "Questify", description: "Enhance your Quest experience with a suite of features, or disable them entirely if they're not your thing.", + tags: ["Appearance", "Customisation", "Privacy", "Utility"], authors: [EquicordDevs.Etorix], dependencies: ["AudioPlayerAPI", "ServerListAPI"], startAt: StartAt.Init, // Needed in order to beat Read All Messages to inserting above the server list. diff --git a/src/equicordplugins/quickThemeSwitcher.discordDesktop/index.tsx b/src/equicordplugins/quickThemeSwitcher.discordDesktop/index.tsx index 449e35239..82e9af31c 100644 --- a/src/equicordplugins/quickThemeSwitcher.discordDesktop/index.tsx +++ b/src/equicordplugins/quickThemeSwitcher.discordDesktop/index.tsx @@ -244,6 +244,7 @@ const handleThemeNamesChange = () => settings.store.autoRefresh && debouncedRefr export default definePlugin({ name: "QuickThemeSwitcher", description: "Quickly switch between themes using keyboard shortcuts.", + tags: ["Appearance", "Utility"], authors: [Devs.prism], settings, startAt: StartAt.DOMContentLoaded, diff --git a/src/equicordplugins/quoter/index.tsx b/src/equicordplugins/quoter/index.tsx index 95825e3c1..d41104617 100644 --- a/src/equicordplugins/quoter/index.tsx +++ b/src/equicordplugins/quoter/index.tsx @@ -58,6 +58,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "Quoter", description: "Adds the ability to create an inspirational quote image from a message.", + tags: ["Chat"], authors: [Devs.Samwich, Devs.thororen, EquicordDevs.neoarz, Devs.prism], settings, diff --git a/src/equicordplugins/randomVoice/index.tsx b/src/equicordplugins/randomVoice/index.tsx index 6017aad6b..05c4a25d5 100644 --- a/src/equicordplugins/randomVoice/index.tsx +++ b/src/equicordplugins/randomVoice/index.tsx @@ -671,6 +671,7 @@ function renderOperationGroup({ export default definePlugin({ name: "RandomVoice", description: "Adds a button near mute to join a random voice channel.", + tags: ["Fun", "Voice"], authors: [EquicordDevs.xijexo, EquicordDevs.omaw, Devs.thororen], settings, diff --git a/src/equicordplugins/recentDMSwitcher/index.tsx b/src/equicordplugins/recentDMSwitcher/index.tsx index 96a271861..48e5977fa 100644 --- a/src/equicordplugins/recentDMSwitcher/index.tsx +++ b/src/equicordplugins/recentDMSwitcher/index.tsx @@ -332,6 +332,7 @@ function showCycleToast() { export default definePlugin({ name: "RecentDMSwitcher", description: "Ctrl+Tab between most recently used DMs (Ctrl+Shift+Tab reverse)", + tags: ["Chat", "Utility"], authors: [EquicordDevs.mmeta], settings, diff --git a/src/equicordplugins/remix/index.tsx b/src/equicordplugins/remix/index.tsx index 19595a5ef..a03d89d09 100644 --- a/src/equicordplugins/remix/index.tsx +++ b/src/equicordplugins/remix/index.tsx @@ -71,6 +71,7 @@ export function sendRemix(blob: Blob) { export default definePlugin({ name: "RemixRevived", description: "Revives Remix and breings it to Desktop", + tags: ["Customisation", "Fun"], authors: [EquicordDevs.MrDiamond, EquicordDevs.meowabyte], contextMenus: { "channel-attach": UploadContextMenuPatch, diff --git a/src/equicordplugins/repeatMessages/index.tsx b/src/equicordplugins/repeatMessages/index.tsx index 6ca6bc494..ef45a1fc7 100644 --- a/src/equicordplugins/repeatMessages/index.tsx +++ b/src/equicordplugins/repeatMessages/index.tsx @@ -132,6 +132,7 @@ migratePluginSettings("RepeatMessages", "RepeatMessage"); export default definePlugin({ name: "RepeatMessages", description: "Allows you to repeat messages quickly. If you hold shift while clicking the Repeat option, it will reply to the message.", + tags: ["Chat"], authors: [EquicordDevs.Tolgchu, Devs.thororen], contextMenus: { "message": messageCtxPatch diff --git a/src/equicordplugins/replyPingControl/index.ts b/src/equicordplugins/replyPingControl/index.ts index aa877cfb6..0db11f68a 100644 --- a/src/equicordplugins/replyPingControl/index.ts +++ b/src/equicordplugins/replyPingControl/index.ts @@ -27,6 +27,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "ReplyPingControl", description: "Control whether to always or never get pinged on message replies, with a whitelist feature", + tags: ["Chat", "Notifications"], authors: [Devs.ant0n, EquicordDevs.MrDiamond], settings, diff --git a/src/equicordplugins/richMagnetLinks/index.tsx b/src/equicordplugins/richMagnetLinks/index.tsx index 33a42efbb..4cfb0275f 100644 --- a/src/equicordplugins/richMagnetLinks/index.tsx +++ b/src/equicordplugins/richMagnetLinks/index.tsx @@ -13,6 +13,7 @@ export default definePlugin({ authors: [EquicordDevs.cassie, EquicordDevs.mochienya, EquicordDevs.secp192k1], name: "RichMagnetLinks", description: "Renders magnet links like message links", + tags: ["Appearance", "Chat"], patches: [ { find: "AUTO_MODERATION_SYSTEM_MESSAGE_RULES:", diff --git a/src/equicordplugins/richPresence/index.tsx b/src/equicordplugins/richPresence/index.tsx index 8c0d4874e..d5d90f5bb 100644 --- a/src/equicordplugins/richPresence/index.tsx +++ b/src/equicordplugins/richPresence/index.tsx @@ -22,80 +22,81 @@ type SettingsKey = keyof SettingsStore; const logger = new Logger("RichPresence"); -const services: Record = { - [ServiceTab.AudioBookShelf]: abs, - [ServiceTab.Tosu]: tosu, - [ServiceTab.StatsFm]: statsfm, - [ServiceTab.Jellyfin]: jellyfin, - [ServiceTab.ListenBrainz]: listenbrainz, - [ServiceTab.GensokyoRadio]: gensokyoRadio, +const services: Record = { + [ServiceTab.AudioBookShelf]: abs, + [ServiceTab.Tosu]: tosu, + [ServiceTab.StatsFm]: statsfm, + [ServiceTab.Jellyfin]: jellyfin, + [ServiceTab.ListenBrainz]: listenbrainz, + [ServiceTab.GensokyoRadio]: gensokyoRadio, }; const enableKeys: Record = { - [ServiceTab.AudioBookShelf]: "abs_enabled", - [ServiceTab.Tosu]: "tosu_enabled", - [ServiceTab.StatsFm]: "sfm_enabled", - [ServiceTab.Jellyfin]: "jf_enabled", - [ServiceTab.ListenBrainz]: "lb_enabled", - [ServiceTab.GensokyoRadio]: "gr_enabled", + [ServiceTab.AudioBookShelf]: "abs_enabled", + [ServiceTab.Tosu]: "tosu_enabled", + [ServiceTab.StatsFm]: "sfm_enabled", + [ServiceTab.Jellyfin]: "jf_enabled", + [ServiceTab.ListenBrainz]: "lb_enabled", + [ServiceTab.GensokyoRadio]: "gr_enabled", }; const activeServices = new Set(); function syncServices() { - const globalEnabled = settings.store.enabled; + const globalEnabled = settings.store.enabled; - for (const [id, service] of Object.entries(services)) { - const shouldRun = - globalEnabled && !!settings.store[enableKeys[id]]; - const isRunning = activeServices.has(id); + for (const [id, service] of Object.entries(services)) { + const shouldRun = + globalEnabled && !!settings.store[enableKeys[id]]; + const isRunning = activeServices.has(id); - if (shouldRun && !isRunning) { - logger.info(`Starting ${id} service`); - service.start(); - activeServices.add(id); - } else if (!shouldRun && isRunning) { - logger.info(`Stopping ${id} service`); - service.stop(); - activeServices.delete(id); - } - } + if (shouldRun && !isRunning) { + logger.info(`Starting ${id} service`); + service.start(); + activeServices.add(id); + } else if (!shouldRun && isRunning) { + logger.info(`Stopping ${id} service`); + service.stop(); + activeServices.delete(id); + } + } } function stopAllServices() { - for (const id of activeServices) { - logger.info(`Stopping ${id} service`); - services[id].stop(); - } - activeServices.clear(); + for (const id of activeServices) { + logger.info(`Stopping ${id} service`); + services[id].stop(); + } + activeServices.clear(); } export default definePlugin({ - name: "RichPresence", - description: "Unified rich presence hub for AudioBookShelf, osu!, stats.fm, Jellyfin, ListenBrainz, and Gensokyo Radio.", - authors: [ - EquicordDevs.vmohammad, - Devs.AutumnVN, - EquicordDevs.Crxa, - Devs.SerStars, - EquicordDevs.ZcraftElite, - EquicordDevs.qouesm, - Devs.RyanCaoDev, - EquicordDevs.Prince527, - EquicordDevs.creations, - ], - reporterTestable: ReporterTestable.None, + name: "RichPresence", + description: "Unified rich presence hub for AudioBookShelf, osu!, stats.fm, Jellyfin, ListenBrainz, and Gensokyo Radio.", + tags: ["Activity"], + authors: [ + EquicordDevs.vmohammad, + Devs.AutumnVN, + EquicordDevs.Crxa, + Devs.SerStars, + EquicordDevs.ZcraftElite, + EquicordDevs.qouesm, + Devs.RyanCaoDev, + EquicordDevs.Prince527, + EquicordDevs.creations, + ], + reporterTestable: ReporterTestable.None, - settings, + settings, - start() { - migrateOldSettings(); - syncServices(); - setOnServiceChange(syncServices); - }, + start() { + migrateOldSettings(); + syncServices(); + setOnServiceChange(syncServices); + }, - stop() { - stopAllServices(); - setOnServiceChange(null); - }, + stop() { + stopAllServices(); + setOnServiceChange(null); + }, }); diff --git a/src/equicordplugins/rpcEditor/index.tsx b/src/equicordplugins/rpcEditor/index.tsx index e60d6627f..b40009418 100644 --- a/src/equicordplugins/rpcEditor/index.tsx +++ b/src/equicordplugins/rpcEditor/index.tsx @@ -73,6 +73,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "RPCEditor", description: "Edit the type and content of any Rich Presence", + tags: ["Customisation"], authors: [Devs.Nyako, Devs.nin0dev], patches: [ { diff --git a/src/equicordplugins/rpcStats/index.tsx b/src/equicordplugins/rpcStats/index.tsx index 76f07a44a..0d0bc5f5c 100644 --- a/src/equicordplugins/rpcStats/index.tsx +++ b/src/equicordplugins/rpcStats/index.tsx @@ -172,6 +172,7 @@ async function updateData() { export default definePlugin({ name: "RPCStats", description: "Displays stats about your activity as an rpc", + tags: ["Utility"], authors: [Devs.Samwich], async start() { updateData(); diff --git a/src/equicordplugins/saveFavoriteGIFs/index.tsx b/src/equicordplugins/saveFavoriteGIFs/index.tsx index e5af23613..165a00705 100644 --- a/src/equicordplugins/saveFavoriteGIFs/index.tsx +++ b/src/equicordplugins/saveFavoriteGIFs/index.tsx @@ -115,6 +115,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "SaveFavoriteGIFs", description: "Export favorited GIF urls", + tags: ["Emotes", "Utility"], authors: [Devs.thororen], settings, commands: [ diff --git a/src/equicordplugins/scheduledMessages/index.tsx b/src/equicordplugins/scheduledMessages/index.tsx index 7fee1cbd2..6d78464f8 100644 --- a/src/equicordplugins/scheduledMessages/index.tsx +++ b/src/equicordplugins/scheduledMessages/index.tsx @@ -86,6 +86,7 @@ function handleReactionEvent(event: FluxReactionEvent): void { export default definePlugin({ name: "ScheduledMessages", description: "Schedule messages to be sent at a specific time or after a delay.", + tags: ["Chat", "Utility"], authors: [EquicordDevs.mmeta, Devs.prism], settings, diff --git a/src/equicordplugins/screenRecorder.equibop/index.tsx b/src/equicordplugins/screenRecorder.equibop/index.tsx index a24ef052b..b9446995c 100644 --- a/src/equicordplugins/screenRecorder.equibop/index.tsx +++ b/src/equicordplugins/screenRecorder.equibop/index.tsx @@ -14,7 +14,8 @@ let recoder: MediaRecorder; export default definePlugin({ name: "ScreenRecorder", - description: "epic screen recorder lol", + description: "Adds an option to record your screen and upload the recording to the channel", + tags: ["Chat"], authors: [Devs.AutumnVN], contextMenus: { "channel-attach": startRecording @@ -54,7 +55,7 @@ function stopRecording(children, props) { } action={() => { recoder.addEventListener("dataavailable", e => { - const file = new File([e.data], "watch if cute.webm", { type: "video/webm" }); + const file = new File([e.data], "recording.webm", { type: "video/webm" }); UploadHandler.promptToUpload([file], props.channel, 0); }); recoder.stop(); diff --git a/src/equicordplugins/searchFix/index.tsx b/src/equicordplugins/searchFix/index.tsx index e45e4cd16..f331c021b 100644 --- a/src/equicordplugins/searchFix/index.tsx +++ b/src/equicordplugins/searchFix/index.tsx @@ -39,6 +39,7 @@ function settingsComponent() { export default definePlugin({ name: "SearchFix", description: 'Fixes the annoying "We dropped the magnifying glass!" error.', + tags: ["Utility"], settingsAboutComponent: () => settingsComponent(), authors: [EquicordDevs.Jaxx], patches: [ diff --git a/src/equicordplugins/sekaiStickers/index.tsx b/src/equicordplugins/sekaiStickers/index.tsx index af1d6c1af..98e1ff8c5 100644 --- a/src/equicordplugins/sekaiStickers/index.tsx +++ b/src/equicordplugins/sekaiStickers/index.tsx @@ -33,6 +33,7 @@ let IS_FONTS_LOADED = false; export default definePlugin({ name: "SekaiStickers", description: "Sekai Stickers built in discord originally from github.com/TheOriginalAyaka", + tags: ["Chat", "Emotes"], authors: [Devs.MaiKokain], settings, chatBarButton: { diff --git a/src/equicordplugins/selfForward/index.ts b/src/equicordplugins/selfForward/index.ts index 74c9902bc..09672018c 100644 --- a/src/equicordplugins/selfForward/index.ts +++ b/src/equicordplugins/selfForward/index.ts @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "SelfForward", description: "Adds the current channel to the forward list popup", + tags: ["Utility"], authors: [EquicordDevs.VillainsRule], patches: [ { diff --git a/src/equicordplugins/serverSearch/index.tsx b/src/equicordplugins/serverSearch/index.tsx index 82989cb7b..101650afc 100644 --- a/src/equicordplugins/serverSearch/index.tsx +++ b/src/equicordplugins/serverSearch/index.tsx @@ -28,6 +28,7 @@ export default definePlugin({ name: "ServerSearch", authors: [EquicordDevs.camila314], description: "Navigate your servers better with a quick search button", + tags: ["Shortcuts", "Servers"], renderButton() { return diff --git a/src/equicordplugins/showBadgesInChat/index.tsx b/src/equicordplugins/showBadgesInChat/index.tsx index f7a86d292..d5487236d 100644 --- a/src/equicordplugins/showBadgesInChat/index.tsx +++ b/src/equicordplugins/showBadgesInChat/index.tsx @@ -142,6 +142,7 @@ export default definePlugin({ name: "ShowBadgesInChat", authors: [Devs.Inbestigator, EquicordDevs.KrystalSkull], description: "Shows the message author's badges beside their name in chat.", + tags: ["Appearance", "Chat"], settings, renderMessageDecoration(props) { return props.message?.author ? : null; diff --git a/src/equicordplugins/showMessageEmbeds/index.tsx b/src/equicordplugins/showMessageEmbeds/index.tsx index d224923d3..d503c2f77 100644 --- a/src/equicordplugins/showMessageEmbeds/index.tsx +++ b/src/equicordplugins/showMessageEmbeds/index.tsx @@ -193,6 +193,7 @@ function showFailureToast(message: string) { export default definePlugin({ name: "ShowMessageEmbeds", description: "Adds a context menu option to show embeds for links that don't have one", + tags: ["Appearance", "Chat"], authors: [EquicordDevs.Suffocate], patches: [ diff --git a/src/equicordplugins/showResourceChannels/index.ts b/src/equicordplugins/showResourceChannels/index.ts index d3ca76589..ecf2132f1 100644 --- a/src/equicordplugins/showResourceChannels/index.ts +++ b/src/equicordplugins/showResourceChannels/index.ts @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "ShowResourceChannels", description: "shows the channels hidden behind the server resources in the channel list", + tags: ["Servers"], authors: [EquicordDevs.VillainsRule], patches: [ { diff --git a/src/equicordplugins/showSongName/index.tsx b/src/equicordplugins/showSongName/index.tsx index 96cdd5ae7..29716e129 100644 --- a/src/equicordplugins/showSongName/index.tsx +++ b/src/equicordplugins/showSongName/index.tsx @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "ShowSongName", description: "Shows song name instead of artist for Spotify activity", + tags: ["Activity"], authors: [Devs.prism], patches: [ diff --git a/src/equicordplugins/sidebarChat/index.tsx b/src/equicordplugins/sidebarChat/index.tsx index 7b88e2603..2958acea9 100644 --- a/src/equicordplugins/sidebarChat/index.tsx +++ b/src/equicordplugins/sidebarChat/index.tsx @@ -130,6 +130,7 @@ export default definePlugin({ name: "SidebarChat", authors: [Devs.Joona], description: "Open a another channel or a DM as a sidebar or as a popout", + tags: ["Appearance", "Chat", "Servers"], patches: [ { find: 'case"pendingFriends":', diff --git a/src/equicordplugins/signature/index.tsx b/src/equicordplugins/signature/index.tsx index 1a7d28605..9379d2e6e 100644 --- a/src/equicordplugins/signature/index.tsx +++ b/src/equicordplugins/signature/index.tsx @@ -100,6 +100,7 @@ const ChatBarContextCheckbox: NavContextMenuPatchCallback = children => { export default definePlugin({ name: "Signature", description: "Automated fingerprint/end text", + tags: ["Appearance", "Chat"], authors: [Devs.Ven, Devs.Rini, Devs.ImBanana, EquicordDevs.KrystalSkull], onBeforeMessageSend(channelId, msg) { if (!settings.store.isEnabled) { diff --git a/src/equicordplugins/snowfall/index.tsx b/src/equicordplugins/snowfall/index.tsx index 7f103e9f4..abba96ae3 100644 --- a/src/equicordplugins/snowfall/index.tsx +++ b/src/equicordplugins/snowfall/index.tsx @@ -450,7 +450,8 @@ let container: HTMLDivElement | null = null; export default definePlugin({ name: "Snowfall", - description: "Let it snow on Discord! Ported from the BetterDiscord plugin by square.", + description: "Let it snow on Discord", + tags: ["Appearance"], authors: [EquicordDevs.ZcraftElite, EquicordDevs.square], settingsAboutComponent: () => ( diff --git a/src/equicordplugins/soggy/index.tsx b/src/equicordplugins/soggy/index.tsx index a622197d9..71d56a405 100644 --- a/src/equicordplugins/soggy/index.tsx +++ b/src/equicordplugins/soggy/index.tsx @@ -137,6 +137,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "Soggy", description: "Adds a soggy button to the toolbox", + tags: ["Fun"], authors: [EquicordDevs.sliwka], settings, dependencies: ["AudioPlayerAPI"], diff --git a/src/equicordplugins/songLink.desktop/index.tsx b/src/equicordplugins/songLink.desktop/index.tsx index 2961f1bd7..9131869b3 100644 --- a/src/equicordplugins/songLink.desktop/index.tsx +++ b/src/equicordplugins/songLink.desktop/index.tsx @@ -51,6 +51,7 @@ export const Native = VencordNative.pluginHelpers.SongLink as PluginNative { export default definePlugin({ name: "StatusPresets", description: "Allows you to remember your statuses and set them later", + tags: ["Activity", "Utility"], authors: [EquicordDevs.iamme], settings: settings, dependencies: ["UserSettingsAPI"], diff --git a/src/equicordplugins/statusWhileActive.desktop/index.ts b/src/equicordplugins/statusWhileActive.desktop/index.ts index 9d950e4b7..efb79ef53 100644 --- a/src/equicordplugins/statusWhileActive.desktop/index.ts +++ b/src/equicordplugins/statusWhileActive.desktop/index.ts @@ -56,6 +56,7 @@ function setStatus(preq, status) { export default definePlugin({ name: "StatusWhileActive", description: "Automatically updates your online status when in a voice channel.", + tags: ["Activity", "Customisation", "Voice"], authors: [EquicordDevs.smuki], settings, flux: { diff --git a/src/equicordplugins/steamStatusSync/index.tsx b/src/equicordplugins/steamStatusSync/index.tsx index 7a20e9035..0ca190e11 100644 --- a/src/equicordplugins/steamStatusSync/index.tsx +++ b/src/equicordplugins/steamStatusSync/index.tsx @@ -85,6 +85,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "SteamStatusSync", description: "Sync your status to Steam! (Online, Away, Invisible, or Offline.)", + tags: ["Activity", "Appearance", "Customisation"], authors: [EquicordDevs.niko], settings, diff --git a/src/equicordplugins/stickerBlocker/index.tsx b/src/equicordplugins/stickerBlocker/index.tsx index 1993ebabb..7b2f59101 100644 --- a/src/equicordplugins/stickerBlocker/index.tsx +++ b/src/equicordplugins/stickerBlocker/index.tsx @@ -130,6 +130,7 @@ function isStickerBlocked(name) { export default definePlugin({ name: "StickerBlocker", description: "Allows you to block stickers from being displayed.", + tags: ["Chat", "Emotes", "Utility"], authors: [Devs.Samwich], patches: [ { diff --git a/src/equicordplugins/streamingCodecDisabler/index.ts b/src/equicordplugins/streamingCodecDisabler/index.ts index 24e3ece83..61d68d710 100644 --- a/src/equicordplugins/streamingCodecDisabler/index.ts +++ b/src/equicordplugins/streamingCodecDisabler/index.ts @@ -56,6 +56,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "StreamingCodecDisabler", description: "Disable codecs for streaming of your choice", + tags: ["Utility", "Voice"], authors: [EquicordDevs.davidkra230], settings, diff --git a/src/equicordplugins/talkInReverse/index.tsx b/src/equicordplugins/talkInReverse/index.tsx index c469c9b31..5424f65c2 100644 --- a/src/equicordplugins/talkInReverse/index.tsx +++ b/src/equicordplugins/talkInReverse/index.tsx @@ -66,6 +66,7 @@ export default definePlugin({ name: "TalkInReverse", authors: [EquicordDevs.Tolgchu], description: "Reverses the message content before sending it.", + tags: ["Chat", "Fun"], dependencies: ["MessageEventsAPI"], chatBarButton: { icon: ReverseMessageIcon, diff --git a/src/equicordplugins/themeLibrary/index.tsx b/src/equicordplugins/themeLibrary/index.tsx index 084ce9650..6a2fe0955 100644 --- a/src/equicordplugins/themeLibrary/index.tsx +++ b/src/equicordplugins/themeLibrary/index.tsx @@ -16,6 +16,7 @@ import { settings } from "./utils/settings"; export default definePlugin({ name: "ThemeLibrary", description: "A library of themes for Vencord.", + tags: ["Appearance", "Customisation"], authors: [EquicordDevs.Fafa], settings, toolboxActions: { diff --git a/src/equicordplugins/tidalEmbeds/index.tsx b/src/equicordplugins/tidalEmbeds/index.tsx index 1e9269859..5aa376fe1 100644 --- a/src/equicordplugins/tidalEmbeds/index.tsx +++ b/src/equicordplugins/tidalEmbeds/index.tsx @@ -10,6 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "TidalEmbeds", description: "Embeds TIDAL songs to make them playable in Discord.", + tags: ["Appearance", "Chat", "Media"], authors: [EquicordDevs.vmohammad], dependencies: ["MessageUpdaterAPI"], patches: [ diff --git a/src/equicordplugins/tiktokTTS/index.ts b/src/equicordplugins/tiktokTTS/index.ts index da5d8c24c..0e2ddf9f4 100644 --- a/src/equicordplugins/tiktokTTS/index.ts +++ b/src/equicordplugins/tiktokTTS/index.ts @@ -211,6 +211,7 @@ async function processQueue() { export default definePlugin({ name: "TiktokTTS", description: "Adds a context menu option to read out chat messages with the good ol' Tiktok TTS voice :sob:", + tags: ["Accessibility", "Chat", "Voice"], authors: [EquicordDevs.VillainsRule, EquicordDevs.examplegit], dependencies: ["AudioPlayerAPI"], settings, diff --git a/src/equicordplugins/timezones/index.tsx b/src/equicordplugins/timezones/index.tsx index b40c3a515..9901e3b8b 100644 --- a/src/equicordplugins/timezones/index.tsx +++ b/src/equicordplugins/timezones/index.tsx @@ -257,6 +257,7 @@ export default definePlugin({ name: "Timezones", authors: [Devs.Aria, EquicordDevs.creations], description: "Shows the local time of users in profiles and message headers", + tags: ["Appearance", "Chat", "Utility"], contextMenus: { "user-context": userContextMenuPatch }, diff --git a/src/equicordplugins/title/index.ts b/src/equicordplugins/title/index.ts index 9e67a72a0..a9c9138ed 100644 --- a/src/equicordplugins/title/index.ts +++ b/src/equicordplugins/title/index.ts @@ -29,6 +29,7 @@ function setTitle(v: string) { export default definePlugin({ name: "Title", description: "Replaces the window title prefix", + tags: ["Customisation"], authors: [Devs.Kyuuhachi], settings, diff --git a/src/equicordplugins/toastNotifications/index.tsx b/src/equicordplugins/toastNotifications/index.tsx index cd1be8023..dfa961176 100644 --- a/src/equicordplugins/toastNotifications/index.tsx +++ b/src/equicordplugins/toastNotifications/index.tsx @@ -210,6 +210,7 @@ const addMention = (id: string, type: string, guildId?: string): ReactNode => { export default definePlugin({ name: "ToastNotifications", description: "Show a toast notification whenever you receive a direct message.", + tags: ["Appearance", "Customisation", "Notifications"], authors: [EquicordDevs.Skully, EquicordDevs.Ethan, EquicordDevs.Buzzy], settings, flux: { diff --git a/src/equicordplugins/toggleVideoBind/index.ts b/src/equicordplugins/toggleVideoBind/index.ts index 3a56c4e8f..323a1e771 100644 --- a/src/equicordplugins/toggleVideoBind/index.ts +++ b/src/equicordplugins/toggleVideoBind/index.ts @@ -59,6 +59,7 @@ function handleKeydown({ code, ctrlKey, shiftKey, altKey }: KeyboardEvent) { export default definePlugin({ name: "ToggleVideoBind", description: "Adds a customizable bind to toggle webcam.", + tags: ["Utility", "Voice"], authors: [EquicordDevs.mochienya], settings, start() { diff --git a/src/equicordplugins/toneIndicators/index.tsx b/src/equicordplugins/toneIndicators/index.tsx index 6dc0ba1a0..cf70719f5 100644 --- a/src/equicordplugins/toneIndicators/index.tsx +++ b/src/equicordplugins/toneIndicators/index.tsx @@ -163,6 +163,7 @@ function patchChildrenTree(children: any): any { export default definePlugin({ name: "ToneIndicators", description: "Show tooltips for tone indicators like /srs, /gen, etc. in sent messages.", + tags: ["Chat", "Utility"], authors: [EquicordDevs.justjxke], settings, diff --git a/src/equicordplugins/translatePlus/index.tsx b/src/equicordplugins/translatePlus/index.tsx index 78e48b120..cfe3e57c4 100644 --- a/src/equicordplugins/translatePlus/index.tsx +++ b/src/equicordplugins/translatePlus/index.tsx @@ -46,6 +46,7 @@ const messageCtxPatch: NavContextMenuPatchCallback = (children, { message }) => export default definePlugin({ name: "Translate+", description: "Vencord's translate plugin but with support for artistic languages!", + tags: ["Chat", "Utility"], authors: [Devs.Ven, EquicordDevs.Prince527], settings, contextMenus: { diff --git a/src/equicordplugins/triviaAI/index.tsx b/src/equicordplugins/triviaAI/index.tsx index f4c860347..29a2fa89f 100644 --- a/src/equicordplugins/triviaAI/index.tsx +++ b/src/equicordplugins/triviaAI/index.tsx @@ -40,6 +40,7 @@ const messageCtxPatch: NavContextMenuPatchCallback = (children, { message }: { m export default definePlugin({ name: "TriviaAI", description: "A plugin that helps you answer trivia questions using AI.", + tags: ["Appearance", "Customisation", "Fun"], authors: [EquicordDevs.yash], settings, contextMenus: { diff --git a/src/equicordplugins/unitConverter/index.tsx b/src/equicordplugins/unitConverter/index.tsx index 36d83568e..f8a3d11cb 100644 --- a/src/equicordplugins/unitConverter/index.tsx +++ b/src/equicordplugins/unitConverter/index.tsx @@ -48,6 +48,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "UnitConverter", description: "Converts metric units to Imperal units and vice versa", + tags: ["Utility"], authors: [Devs.sadan], messagePopoverButton: { icon: ConvertIcon, diff --git a/src/equicordplugins/universalMention/index.tsx b/src/equicordplugins/universalMention/index.tsx index 2d8a977bb..f6f8b6998 100644 --- a/src/equicordplugins/universalMention/index.tsx +++ b/src/equicordplugins/universalMention/index.tsx @@ -39,6 +39,7 @@ export default definePlugin({ name: "UniversalMention", authors: [EquicordDevs.justjxke], description: "Mention any user, regardless of channel access.", + tags: ["Chat", "Servers", "Utility"], settings, settingsAboutComponent: () => ( diff --git a/src/equicordplugins/unlimitedAccounts/index.ts b/src/equicordplugins/unlimitedAccounts/index.ts index cbf77811d..eeb41a955 100644 --- a/src/equicordplugins/unlimitedAccounts/index.ts +++ b/src/equicordplugins/unlimitedAccounts/index.ts @@ -32,6 +32,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "UnlimitedAccounts", description: "Increases the amount of accounts you can add.", + tags: ["Utility"], authors: [Devs.thororen], settings, patches: [ diff --git a/src/equicordplugins/unreadBadgeCount/index.tsx b/src/equicordplugins/unreadBadgeCount/index.tsx index 0f08d06cd..a9135df54 100644 --- a/src/equicordplugins/unreadBadgeCount/index.tsx +++ b/src/equicordplugins/unreadBadgeCount/index.tsx @@ -33,6 +33,7 @@ export default definePlugin({ name: "UnreadCountBadge", authors: [Devs.Joona], description: "Shows unread message count badges on channels in the channel list", + tags: ["Appearance", "Customisation", "Servers"], settings, patches: [ diff --git a/src/equicordplugins/urlHighlighter/index.tsx b/src/equicordplugins/urlHighlighter/index.tsx index 6fbe9ba77..6a52b9495 100644 --- a/src/equicordplugins/urlHighlighter/index.tsx +++ b/src/equicordplugins/urlHighlighter/index.tsx @@ -121,6 +121,7 @@ function getMatchingPattern(url: string): PatternEntry | null { export default definePlugin({ name: "UrlHighlighter", description: "Highlights URLs in messages that match your patterns.", + tags: ["Appearance", "Customisation"], authors: [Devs.prism], settings, diff --git a/src/equicordplugins/userpfp/index.tsx b/src/equicordplugins/userpfp/index.tsx index 777fb40c5..d884dd59d 100644 --- a/src/equicordplugins/userpfp/index.tsx +++ b/src/equicordplugins/userpfp/index.tsx @@ -65,6 +65,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "UserPFP", description: "Allows you to use an animated avatar without Nitro", + tags: ["Appearance", "Customisation", "Servers"], authors: [EquicordDevs.nexpid, Devs.thororen, EquicordDevs.soapphia], settings, data, diff --git a/src/equicordplugins/vcNarratorCustom/index.tsx b/src/equicordplugins/vcNarratorCustom/index.tsx index c9d80123c..fac57eced 100644 --- a/src/equicordplugins/vcNarratorCustom/index.tsx +++ b/src/equicordplugins/vcNarratorCustom/index.tsx @@ -895,6 +895,7 @@ const UserContextMenuPatch: NavContextMenuPatchCallback = (children, { user }: U export default definePlugin({ name: "VcNarratorCustom", description: "Announces when users join, leave, or move voice channels via narrator using TikTok TTS. Revamped and back from the dead.", + tags: ["Accessibility", "Voice"], authors: [Devs.Ven, Devs.Nyako, EquicordDevs.Loukios, EquicordDevs.examplegit], settings, contextMenus: { diff --git a/src/equicordplugins/vcPanelSettings/index.tsx b/src/equicordplugins/vcPanelSettings/index.tsx index bfc60e08f..24893ae04 100644 --- a/src/equicordplugins/vcPanelSettings/index.tsx +++ b/src/equicordplugins/vcPanelSettings/index.tsx @@ -238,6 +238,7 @@ function VoiceSettings() { export default definePlugin({ name: "VCPanelSettings", description: "Control voice settings right from the voice panel", + tags: ["Utility", "Voice"], authors: [Devs.nin0dev], settings, renderVoiceSettings() { return ; }, diff --git a/src/equicordplugins/viewRawVariant/index.tsx b/src/equicordplugins/viewRawVariant/index.tsx index 41597a401..97730526b 100644 --- a/src/equicordplugins/viewRawVariant/index.tsx +++ b/src/equicordplugins/viewRawVariant/index.tsx @@ -129,6 +129,7 @@ function makeContextCallback( export default definePlugin({ name: "ViewRawVariant", description: "Copy/View raw content of any message, channel, or guild, but show in the right click menu.", + tags: ["Appearance", "Customisation", "Chat", "Organisation", "Servers"], authors: [Devs.KingFish, Devs.Ven, Devs.rad, Devs.ImLvna, Devs.Kyuuhachi], contextMenus: { "guild-context": makeContextCallback("guild", val => diff --git a/src/equicordplugins/voiceButtons/index.tsx b/src/equicordplugins/voiceButtons/index.tsx index af960f502..4654572ff 100644 --- a/src/equicordplugins/voiceButtons/index.tsx +++ b/src/equicordplugins/voiceButtons/index.tsx @@ -16,6 +16,7 @@ import { UserChatButton, UserDeafenButton, UserMuteButton } from "./utils"; export default definePlugin({ name: "VoiceButtons", description: "Quickly DM, mute, or deafen any user right from the voice-call panel.", + tags: ["Servers", "Utility", "Voice"], authors: [EquicordDevs.nicola02nb, EquicordDevs.omaw], settings, patches: [ diff --git a/src/equicordplugins/voiceChannelLog/index.tsx b/src/equicordplugins/voiceChannelLog/index.tsx index a0e4d1d9c..4ef728a57 100644 --- a/src/equicordplugins/voiceChannelLog/index.tsx +++ b/src/equicordplugins/voiceChannelLog/index.tsx @@ -54,6 +54,7 @@ const patchChannelContextMenu: NavContextMenuPatchCallback = (children, { channe export default definePlugin({ name: "VoiceChannelLog", description: "Logs voice channel activity including joins, leaves, soundboard, mute, camera, screenshare, and more.", + tags: ["Servers", "Utility", "Voice"], authors: [Devs.Sqaaakoi, Devs.thororen, EquicordDevs.nyx, Devs.Moxxie, EquicordDevs.Fres, Devs.amy], dependencies: ["AudioPlayerAPI"], settings, diff --git a/src/equicordplugins/voiceChatUtils/index.tsx b/src/equicordplugins/voiceChatUtils/index.tsx index 421000cf7..a9ebea15f 100644 --- a/src/equicordplugins/voiceChatUtils/index.tsx +++ b/src/equicordplugins/voiceChatUtils/index.tsx @@ -174,6 +174,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "VoiceChatUtilities", description: "This plugin allows you to perform multiple actions on an entire channel (move, mute, disconnect, etc.) (originally by dutake)", + tags: ["Chat", "Servers", "Voice"], authors: [Devs.D3SOX, EquicordDevs.nickwoah], settings, diff --git a/src/equicordplugins/voiceJoinMessages/index.ts b/src/equicordplugins/voiceJoinMessages/index.ts index 12824ab91..3fdc3499b 100644 --- a/src/equicordplugins/voiceJoinMessages/index.ts +++ b/src/equicordplugins/voiceJoinMessages/index.ts @@ -111,6 +111,7 @@ let clientOldChannelId: string | undefined; export default definePlugin({ name: "VoiceJoinMessages", description: "Recieve client-side ephemeral messages when your friends join voice channels", + tags: ["Servers", "Utility", "Voice"], authors: [Devs.Sqaaakoi, Devs.thororen], settings, flux: { diff --git a/src/equicordplugins/voiceMessageTranscriber.desktop/index.tsx b/src/equicordplugins/voiceMessageTranscriber.desktop/index.tsx index f60724321..db2d8def3 100644 --- a/src/equicordplugins/voiceMessageTranscriber.desktop/index.tsx +++ b/src/equicordplugins/voiceMessageTranscriber.desktop/index.tsx @@ -314,6 +314,7 @@ export default definePlugin({ name: "VoiceMessageTranscriber", authors: [Devs.TheSun], description: "On-device transcriptions for voice messages powered by Whisper v3", + tags: ["Chat", "Media", "Utility", "Voice"], patches: [ { find: ".VOICE_MESSAGE)),", diff --git a/src/equicordplugins/voiceRejoin/index.tsx b/src/equicordplugins/voiceRejoin/index.tsx index 12042df43..291bd7aee 100644 --- a/src/equicordplugins/voiceRejoin/index.tsx +++ b/src/equicordplugins/voiceRejoin/index.tsx @@ -51,6 +51,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "VoiceRejoin", description: "Rejoins DM/Server call automatically when restarting Discord.", + tags: ["Servers", "Utility", "Voice"], authors: [EquicordDevs.omaw, EquicordDevs.keircn], settings, diff --git a/src/equicordplugins/waitForSlot/index.tsx b/src/equicordplugins/waitForSlot/index.tsx index fbcfd636e..4df55ee89 100644 --- a/src/equicordplugins/waitForSlot/index.tsx +++ b/src/equicordplugins/waitForSlot/index.tsx @@ -64,6 +64,7 @@ function promptVoiceChannel(channel: Channel | null | undefined): boolean { export default definePlugin({ name: "WaitForSlot", description: "Automatically join a full voice channel when a slot opens.", + tags: ["Servers", "Utility", "Voice"], authors: [EquicordDevs.omaw, Devs.prism], settings, patches: [ diff --git a/src/equicordplugins/wallpaperFree/index.tsx b/src/equicordplugins/wallpaperFree/index.tsx index cfc8fe99e..6cd0364c4 100644 --- a/src/equicordplugins/wallpaperFree/index.tsx +++ b/src/equicordplugins/wallpaperFree/index.tsx @@ -33,6 +33,7 @@ export default definePlugin({ name: "WallpaperFree", authors: [Devs.Joona], description: "Recreation of the old DM wallpaper experiment; Set a background image for any channel, user or server.", + tags: ["Appearance", "Chat", "Customisation"], patches: [ { find: ".handleSendMessage,onResize", diff --git a/src/equicordplugins/webpackTarball/index.tsx b/src/equicordplugins/webpackTarball/index.tsx index 536e1212c..c96e9011c 100644 --- a/src/equicordplugins/webpackTarball/index.tsx +++ b/src/equicordplugins/webpackTarball/index.tsx @@ -31,6 +31,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "WebpackTarball", description: "Converts Discord's webpack sources into a tarball.", + tags: ["Developers", "Utility"], authors: [Devs.Kyuuhachi], settings, diff --git a/src/equicordplugins/whitelistedEmojis/index.tsx b/src/equicordplugins/whitelistedEmojis/index.tsx index 70d21eb37..7a72e531f 100644 --- a/src/equicordplugins/whitelistedEmojis/index.tsx +++ b/src/equicordplugins/whitelistedEmojis/index.tsx @@ -597,6 +597,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "WhitelistedEmojis", description: "Adds the ability to disable all message emojis except for a whitelisted set.", + tags: ["Chat", "Emotes"], authors: [EquicordDevs.creations], patches: [ { diff --git a/src/equicordplugins/whosWatching/index.tsx b/src/equicordplugins/whosWatching/index.tsx index 2412d1827..e7dfe0020 100644 --- a/src/equicordplugins/whosWatching/index.tsx +++ b/src/equicordplugins/whosWatching/index.tsx @@ -82,6 +82,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "WhosWatching", description: "Hover over the screenshare icon to view what users are watching your stream", + tags: ["Activity"], authors: [EquicordDevs.Fres, Devs.thororen], settings, patches: [ diff --git a/src/equicordplugins/wigglyText/index.tsx b/src/equicordplugins/wigglyText/index.tsx index 1f683e9e6..b3118029f 100644 --- a/src/equicordplugins/wigglyText/index.tsx +++ b/src/equicordplugins/wigglyText/index.tsx @@ -112,6 +112,7 @@ const updateStyles = () => { export default definePlugin({ name: "WigglyText", description: "Adds a new markdown formatting that makes text wiggly.", + tags: ["Appearance", "Customisation", "Fun"], authors: [EquicordDevs.nexpid], settings, settingsAboutComponent: () => ( diff --git a/src/equicordplugins/writeUpperCase/index.ts b/src/equicordplugins/writeUpperCase/index.ts index 263b1a231..81a9a329a 100644 --- a/src/equicordplugins/writeUpperCase/index.ts +++ b/src/equicordplugins/writeUpperCase/index.ts @@ -37,6 +37,7 @@ const presendObject: MessageSendListener = (_, msg) => { export default definePlugin({ name: "WriteUpperCase", description: "Changes the first Letter of each Sentence in Message Inputs to Uppercase", + tags: ["Appearance", "Customisation", "Chat"], authors: [Devs.Samwich, EquicordDevs.KrystalSkull], settings, From 913d5dfc98d9bd2653a29071a5ecda72363376ba Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:37:32 -0400 Subject: [PATCH 10/18] specify deps --- src/equicordplugins/baseDecoder/index.tsx | 1 + src/equicordplugins/betterCommands/index.ts | 1 + src/equicordplugins/collapsibleUi/index.tsx | 1 + src/equicordplugins/customSounds/index.tsx | 1 + src/equicordplugins/equicordHelper/index.tsx | 1 + src/equicordplugins/findReply/index.tsx | 1 + src/equicordplugins/githubRepos/index.tsx | 1 + src/equicordplugins/googleThat/index.tsx | 1 + src/equicordplugins/hideMessages/index.tsx | 1 + src/equicordplugins/holyNotes/index.tsx | 1 + src/equicordplugins/husk/index.tsx | 1 + src/equicordplugins/inRole/index.tsx | 2 +- src/equicordplugins/ingtoninator/index.tsx | 1 + src/equicordplugins/invisibleChat.desktop/index.tsx | 2 +- src/equicordplugins/messageBurst/index.ts | 1 + src/equicordplugins/messageFetchTimer/index.tsx | 1 + src/equicordplugins/messageLoggerEnhanced/index.tsx | 2 +- src/equicordplugins/messagePeek/index.tsx | 1 + src/equicordplugins/moreCommands/index.ts | 1 + src/equicordplugins/moreUserTags/index.tsx | 1 + src/equicordplugins/polishWording/index.ts | 1 + src/equicordplugins/randomVoice/index.tsx | 1 + src/equicordplugins/repeatMessages/index.tsx | 1 + src/equicordplugins/saveFavoriteGIFs/index.tsx | 1 + src/equicordplugins/scheduledMessages/index.tsx | 1 + src/equicordplugins/sekaiStickers/index.tsx | 1 + src/equicordplugins/showBadgesInChat/index.tsx | 1 + src/equicordplugins/signature/index.tsx | 1 + src/equicordplugins/soggy/index.tsx | 2 +- src/equicordplugins/songLink.desktop/index.tsx | 1 + src/equicordplugins/songSpotlight.desktop/index.tsx | 1 + src/equicordplugins/splitLargeMessages/index.ts | 1 + src/equicordplugins/spotifyActivityToggle/index.tsx | 1 + src/equicordplugins/talkInReverse/index.tsx | 2 +- src/equicordplugins/tidalEmbeds/index.tsx | 2 +- src/equicordplugins/translatePlus/index.tsx | 1 + src/equicordplugins/triviaAI/index.tsx | 1 + src/equicordplugins/unitConverter/index.tsx | 1 + src/equicordplugins/voiceChannelLog/index.tsx | 2 +- src/plugins/_core/supportHelper.tsx | 2 +- src/plugins/anonymiseFileNames/index.tsx | 1 + src/plugins/clearURLs/index.ts | 1 + src/plugins/customCommands/index.ts | 1 + src/plugins/favEmojiFirst/index.tsx | 1 + src/plugins/friendInvites/index.ts | 1 + src/plugins/gameActivityToggle/index.tsx | 2 +- src/plugins/hideAttachments/index.tsx | 2 +- src/plugins/petpet/index.ts | 1 + src/plugins/platformIndicators/index.tsx | 1 + src/plugins/previewMessage/index.tsx | 1 + src/plugins/quickMention/index.tsx | 1 + src/plugins/reviewDB/index.tsx | 1 + src/plugins/sendTimestamps/index.tsx | 1 + src/plugins/silentMessageToggle/index.tsx | 1 + src/plugins/silentTyping/index.tsx | 1 + src/plugins/spotifyShareCommands/index.ts | 1 + src/plugins/textReplace/index.tsx | 1 + src/plugins/translate/index.tsx | 1 + src/plugins/unindent/index.ts | 1 + src/plugins/userVoiceShow/index.tsx | 1 + src/plugins/viewRaw/index.tsx | 1 + 61 files changed, 61 insertions(+), 10 deletions(-) diff --git a/src/equicordplugins/baseDecoder/index.tsx b/src/equicordplugins/baseDecoder/index.tsx index 46253d954..9ecb51a9e 100644 --- a/src/equicordplugins/baseDecoder/index.tsx +++ b/src/equicordplugins/baseDecoder/index.tsx @@ -107,6 +107,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "DecodeBase64", description: "Decode base64 content of any message and copy the decoded content.", + dependencies: ["MessagePopoverAPI"], tags: ["Appearance", "Customisation", "Chat"], authors: [EquicordDevs.ThePirateStoner], settings, diff --git a/src/equicordplugins/betterCommands/index.ts b/src/equicordplugins/betterCommands/index.ts index e81f961e3..b405fdd52 100644 --- a/src/equicordplugins/betterCommands/index.ts +++ b/src/equicordplugins/betterCommands/index.ts @@ -33,6 +33,7 @@ function fetchIndex(target: object) { export default definePlugin({ name: "BetterCommands", description: "Enhances the command system with miscellaneous improvements.", + dependencies: ["CommandsAPI"], tags: ["Appearance", "Commands", "Shortcuts"], authors: [Devs.thororen], settings, diff --git a/src/equicordplugins/collapsibleUi/index.tsx b/src/equicordplugins/collapsibleUi/index.tsx index 7095cde41..d6c7d709c 100644 --- a/src/equicordplugins/collapsibleUi/index.tsx +++ b/src/equicordplugins/collapsibleUi/index.tsx @@ -109,6 +109,7 @@ export default definePlugin({ name: "CollapsibleUI", description: "Native collapsible channel, member, chat button, and user area surfaces.", tags: ["Appearance", "Customisation", "Chat", "Servers"], + dependencies: ["HeaderBarAPI"], authors: [EquicordDevs.benjii], searchTerms: ["ui", "sidebar", "layout"], managedStyle, diff --git a/src/equicordplugins/customSounds/index.tsx b/src/equicordplugins/customSounds/index.tsx index 9dbb11e90..5a99fe1c5 100644 --- a/src/equicordplugins/customSounds/index.tsx +++ b/src/equicordplugins/customSounds/index.tsx @@ -393,6 +393,7 @@ export function findOverride(id: string): SoundOverride | null { export default definePlugin({ name: "CustomSounds", description: "Customize Discord's sounds.", + dependencies: ["AudioPlayerAPI"], tags: ["Customisation", "Notifications", "Voice"], authors: [Devs.ScattrdBlade, Devs.TheKodeToad], settings, diff --git a/src/equicordplugins/equicordHelper/index.tsx b/src/equicordplugins/equicordHelper/index.tsx index 8bf3f9fc3..a73639e7f 100644 --- a/src/equicordplugins/equicordHelper/index.tsx +++ b/src/equicordplugins/equicordHelper/index.tsx @@ -134,6 +134,7 @@ export default definePlugin({ name: "EquicordHelper", description: "Used to provide support, fix discord caused crashes, and other misc features.", tags: ["Appearance", "Commands", "Utility"], + dependencies: ["CommandsAPI", "HeaderBarAPI", "MessageAccessoriesAPI"], authors: [ Devs.thororen, EquicordDevs.nyx, diff --git a/src/equicordplugins/findReply/index.tsx b/src/equicordplugins/findReply/index.tsx index 7c86c64e2..33c28ba8f 100644 --- a/src/equicordplugins/findReply/index.tsx +++ b/src/equicordplugins/findReply/index.tsx @@ -89,6 +89,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "FindReply", description: "Jumps to the earliest reply to a message in a channel (lets you follow past conversations more easily).", + dependencies: ["MessagePopoverAPI"], tags: ["Chat", "Shortcuts"], authors: [Devs.newwares], settings, diff --git a/src/equicordplugins/githubRepos/index.tsx b/src/equicordplugins/githubRepos/index.tsx index 0bfdd025b..cb2b3d58b 100644 --- a/src/equicordplugins/githubRepos/index.tsx +++ b/src/equicordplugins/githubRepos/index.tsx @@ -38,6 +38,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "GitHubRepos", description: "Displays a user's public GitHub repositories in their profile", + dependencies: ["ProfileCollectionsAPI"], tags: ["Appearance"], authors: [EquicordDevs.talhakf, EquicordDevs.Panniku, EquicordDevs.benjii], settings, diff --git a/src/equicordplugins/googleThat/index.tsx b/src/equicordplugins/googleThat/index.tsx index ef6005761..3f924d419 100644 --- a/src/equicordplugins/googleThat/index.tsx +++ b/src/equicordplugins/googleThat/index.tsx @@ -75,6 +75,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "GoogleThat", description: "Adds a command to send a internet search link", + dependencies: ["CommandsAPI"], tags: ["Commands", "Utility"], authors: [Devs.Samwich, EquicordDevs.KrystalSkull], searchTerms: ["search", "google", "query", "duckduckgo", "command"], diff --git a/src/equicordplugins/hideMessages/index.tsx b/src/equicordplugins/hideMessages/index.tsx index 4741a195f..dd7bf8538 100644 --- a/src/equicordplugins/hideMessages/index.tsx +++ b/src/equicordplugins/hideMessages/index.tsx @@ -49,6 +49,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "HideMessages", description: "A plugin to temporarily hide messages until you restart.", + dependencies: ["MessagePopoverAPI"], tags: ["Chat", "Utility"], authors: [EquicordDevs.yash], contextMenus: { diff --git a/src/equicordplugins/holyNotes/index.tsx b/src/equicordplugins/holyNotes/index.tsx index cab8fde2c..e4a57e819 100644 --- a/src/equicordplugins/holyNotes/index.tsx +++ b/src/equicordplugins/holyNotes/index.tsx @@ -72,6 +72,7 @@ function ToolBarHeader() { export default definePlugin({ name: "HolyNotes", description: "Save messages as notes to revisit later", + dependencies: ["MessagePopoverAPI", "HeaderBarAPI"], tags: ["Chat", "Organisation"], authors: [EquicordDevs.Wolfie], diff --git a/src/equicordplugins/husk/index.tsx b/src/equicordplugins/husk/index.tsx index 5f231db91..2596bb8a8 100644 --- a/src/equicordplugins/husk/index.tsx +++ b/src/equicordplugins/husk/index.tsx @@ -99,6 +99,7 @@ function getEmojiIdThatShouldBeUsed(guildId: string) { export default definePlugin({ name: "Husk", description: "Adds Husk button (check settings to change used emoji)", + dependencies: ["MessagePopoverAPI"], tags: ["Emotes", "Fun"], authors: [Devs.nin0dev], settings, diff --git a/src/equicordplugins/inRole/index.tsx b/src/equicordplugins/inRole/index.tsx index bba8ea205..847688f73 100644 --- a/src/equicordplugins/inRole/index.tsx +++ b/src/equicordplugins/inRole/index.tsx @@ -36,7 +36,7 @@ export default definePlugin({ description: "Know who is in a role with the role context menu or /inrole command (read plugin info!)", tags: ["Commands", "Roles"], authors: [Devs.nin0dev], - dependencies: ["UserSettingsAPI"], + dependencies: ["UserSettingsAPI", "CommandsAPI"], start() { // DeveloperMode needs to be enabled for the context menu to be shown DeveloperMode.updateSetting(true); diff --git a/src/equicordplugins/ingtoninator/index.tsx b/src/equicordplugins/ingtoninator/index.tsx index ad9ba2523..00a4909b0 100644 --- a/src/equicordplugins/ingtoninator/index.tsx +++ b/src/equicordplugins/ingtoninator/index.tsx @@ -146,6 +146,7 @@ function disabledIcon() { export default definePlugin({ name: "Ingtoninator", description: "Suffixes 'ington' to a random word in your message", + dependencies: ["ChatInputButtonAPI"], tags: ["Fun"], authors: [EquicordDevs.zyqunix, EquicordDevs.BioTomateDE], settings, diff --git a/src/equicordplugins/invisibleChat.desktop/index.tsx b/src/equicordplugins/invisibleChat.desktop/index.tsx index f45bb427c..c45149141 100644 --- a/src/equicordplugins/invisibleChat.desktop/index.tsx +++ b/src/equicordplugins/invisibleChat.desktop/index.tsx @@ -151,7 +151,7 @@ export default definePlugin({ description: "Encrypt your Messages in a non-suspicious way!", tags: ["Chat"], authors: [Devs.SammCheese], - dependencies: ["MessageUpdaterAPI"], + dependencies: ["MessageUpdaterAPI", "ChatInputButtonAPI", "MessagePopoverAPI"], reporterTestable: ReporterTestable.Patches, settings, diff --git a/src/equicordplugins/messageBurst/index.ts b/src/equicordplugins/messageBurst/index.ts index 9dd35b50a..18f8d6060 100644 --- a/src/equicordplugins/messageBurst/index.ts +++ b/src/equicordplugins/messageBurst/index.ts @@ -66,6 +66,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "MessageBurst", description: "Merges messages sent within a time period with your previous sent message if no one else sends a message before you.", + dependencies: ["MessagePopoverAPI"], tags: ["Chat"], authors: [EquicordDevs.port22exposed], settings, diff --git a/src/equicordplugins/messageFetchTimer/index.tsx b/src/equicordplugins/messageFetchTimer/index.tsx index a60462f1e..a0622668d 100644 --- a/src/equicordplugins/messageFetchTimer/index.tsx +++ b/src/equicordplugins/messageFetchTimer/index.tsx @@ -147,6 +147,7 @@ function handleMessageLoad(data: any) { export default definePlugin({ name: "MessageFetchTimer", description: "Shows how long it took to fetch messages for the current channel", + dependencies: ["ChatInputButtonAPI"], tags: ["Chat", "Utility"], authors: [EquicordDevs.GroupXyz], settings, diff --git a/src/equicordplugins/messageLoggerEnhanced/index.tsx b/src/equicordplugins/messageLoggerEnhanced/index.tsx index aad1f85f5..2abe5c7df 100644 --- a/src/equicordplugins/messageLoggerEnhanced/index.tsx +++ b/src/equicordplugins/messageLoggerEnhanced/index.tsx @@ -259,7 +259,7 @@ export default definePlugin({ authors: [Devs.Aria, EquicordDevs.keircn], description: "Improves MessageLogger with edited message history, ghost ping detection and more", tags: ["Chat", "Servers"], - dependencies: ["MessageLogger"], + dependencies: ["MessageLogger", "HeaderBarAPI"], patches: [ { diff --git a/src/equicordplugins/messagePeek/index.tsx b/src/equicordplugins/messagePeek/index.tsx index b22824096..564838146 100644 --- a/src/equicordplugins/messagePeek/index.tsx +++ b/src/equicordplugins/messagePeek/index.tsx @@ -239,6 +239,7 @@ function shouldShowActivity(lastMessage: Message | undefined, hasActivity: boole export default definePlugin({ name: "MessagePeek", description: "Shows the last message preview and timestamp in the Direct Messages list.", + dependencies: ["MemberListDecoratorsAPI"], tags: ["Appearance", "Chat"], authors: [Devs.prism, EquicordDevs.justjxke], settings, diff --git a/src/equicordplugins/moreCommands/index.ts b/src/equicordplugins/moreCommands/index.ts index 317d1ecd0..9f6cbbfd9 100644 --- a/src/equicordplugins/moreCommands/index.ts +++ b/src/equicordplugins/moreCommands/index.ts @@ -52,6 +52,7 @@ migratePluginSettings("MoreCommands", "FriendCloud", "GifRoulette", "ImgToGif", export default definePlugin({ name: "MoreCommands", description: "Adds various fun and useful commands", + dependencies: ["CommandsAPI"], tags: ["Commands", "Fun", "Shortcuts"], authors: [ Devs.Arjix, diff --git a/src/equicordplugins/moreUserTags/index.tsx b/src/equicordplugins/moreUserTags/index.tsx index 5f681e137..395144257 100644 --- a/src/equicordplugins/moreUserTags/index.tsx +++ b/src/equicordplugins/moreUserTags/index.tsx @@ -37,6 +37,7 @@ migratePluginToSettings(true, "MoreUserTags", "NoAppsAllowed", "noAppsAllowed"); export default definePlugin({ name: "MoreUserTags", description: "Adds tags for webhooks and moderative roles (owner, admin, etc.)", + dependencies: ["MemberListDecoratorsAPI", "MessageDecorationsAPI", "NicknameIconsAPI"], tags: ["Appearance", "Chat"], authors: [Devs.Cyn, Devs.TheSun, Devs.RyanCaoDev, Devs.LordElias, Devs.AutumnVN, EquicordDevs.Hen, EquicordDevs.meowabyte], settings, diff --git a/src/equicordplugins/polishWording/index.ts b/src/equicordplugins/polishWording/index.ts index 4f623c04a..2f8f6d33c 100644 --- a/src/equicordplugins/polishWording/index.ts +++ b/src/equicordplugins/polishWording/index.ts @@ -64,6 +64,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "PolishWording", description: "Tweaks your messages to make them look nicer and have better grammar. See settings", + dependencies: ["MessageEventsAPI"], tags: ["Chat"], authors: [Devs.Samwich, EquicordDevs.WKoA], onBeforeMessageSend: presendObject, diff --git a/src/equicordplugins/randomVoice/index.tsx b/src/equicordplugins/randomVoice/index.tsx index 05c4a25d5..9d78149d2 100644 --- a/src/equicordplugins/randomVoice/index.tsx +++ b/src/equicordplugins/randomVoice/index.tsx @@ -671,6 +671,7 @@ function renderOperationGroup({ export default definePlugin({ name: "RandomVoice", description: "Adds a button near mute to join a random voice channel.", + dependencies: ["UserAreaAPI"], tags: ["Fun", "Voice"], authors: [EquicordDevs.xijexo, EquicordDevs.omaw, Devs.thororen], settings, diff --git a/src/equicordplugins/repeatMessages/index.tsx b/src/equicordplugins/repeatMessages/index.tsx index ef45a1fc7..5bbcf3f2b 100644 --- a/src/equicordplugins/repeatMessages/index.tsx +++ b/src/equicordplugins/repeatMessages/index.tsx @@ -132,6 +132,7 @@ migratePluginSettings("RepeatMessages", "RepeatMessage"); export default definePlugin({ name: "RepeatMessages", description: "Allows you to repeat messages quickly. If you hold shift while clicking the Repeat option, it will reply to the message.", + dependencies: ["MessagePopoverAPI"], tags: ["Chat"], authors: [EquicordDevs.Tolgchu, Devs.thororen], contextMenus: { diff --git a/src/equicordplugins/saveFavoriteGIFs/index.tsx b/src/equicordplugins/saveFavoriteGIFs/index.tsx index 165a00705..268be6571 100644 --- a/src/equicordplugins/saveFavoriteGIFs/index.tsx +++ b/src/equicordplugins/saveFavoriteGIFs/index.tsx @@ -115,6 +115,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "SaveFavoriteGIFs", description: "Export favorited GIF urls", + dependencies: ["CommandsAPI"], tags: ["Emotes", "Utility"], authors: [Devs.thororen], settings, diff --git a/src/equicordplugins/scheduledMessages/index.tsx b/src/equicordplugins/scheduledMessages/index.tsx index 6d78464f8..d79402226 100644 --- a/src/equicordplugins/scheduledMessages/index.tsx +++ b/src/equicordplugins/scheduledMessages/index.tsx @@ -87,6 +87,7 @@ export default definePlugin({ name: "ScheduledMessages", description: "Schedule messages to be sent at a specific time or after a delay.", tags: ["Chat", "Utility"], + dependencies: ["ChatInputButtonAPI", "MessageAccessoriesAPI", "MessageEventsAPI"], authors: [EquicordDevs.mmeta, Devs.prism], settings, diff --git a/src/equicordplugins/sekaiStickers/index.tsx b/src/equicordplugins/sekaiStickers/index.tsx index 98e1ff8c5..aa6188e1a 100644 --- a/src/equicordplugins/sekaiStickers/index.tsx +++ b/src/equicordplugins/sekaiStickers/index.tsx @@ -33,6 +33,7 @@ let IS_FONTS_LOADED = false; export default definePlugin({ name: "SekaiStickers", description: "Sekai Stickers built in discord originally from github.com/TheOriginalAyaka", + dependencies: ["ChatInputButtonAPI"], tags: ["Chat", "Emotes"], authors: [Devs.MaiKokain], settings, diff --git a/src/equicordplugins/showBadgesInChat/index.tsx b/src/equicordplugins/showBadgesInChat/index.tsx index d5487236d..5e05ba431 100644 --- a/src/equicordplugins/showBadgesInChat/index.tsx +++ b/src/equicordplugins/showBadgesInChat/index.tsx @@ -142,6 +142,7 @@ export default definePlugin({ name: "ShowBadgesInChat", authors: [Devs.Inbestigator, EquicordDevs.KrystalSkull], description: "Shows the message author's badges beside their name in chat.", + dependencies: ["MessageDecorationsAPI"], tags: ["Appearance", "Chat"], settings, renderMessageDecoration(props) { diff --git a/src/equicordplugins/signature/index.tsx b/src/equicordplugins/signature/index.tsx index 9379d2e6e..e09edf3e5 100644 --- a/src/equicordplugins/signature/index.tsx +++ b/src/equicordplugins/signature/index.tsx @@ -100,6 +100,7 @@ const ChatBarContextCheckbox: NavContextMenuPatchCallback = children => { export default definePlugin({ name: "Signature", description: "Automated fingerprint/end text", + dependencies: ["CommandsAPI", "ChatInputButtonAPI", "MessagePopoverAPI"], tags: ["Appearance", "Chat"], authors: [Devs.Ven, Devs.Rini, Devs.ImBanana, EquicordDevs.KrystalSkull], onBeforeMessageSend(channelId, msg) { diff --git a/src/equicordplugins/soggy/index.tsx b/src/equicordplugins/soggy/index.tsx index 71d56a405..099e94792 100644 --- a/src/equicordplugins/soggy/index.tsx +++ b/src/equicordplugins/soggy/index.tsx @@ -140,7 +140,7 @@ export default definePlugin({ tags: ["Fun"], authors: [EquicordDevs.sliwka], settings, - dependencies: ["AudioPlayerAPI"], + dependencies: ["AudioPlayerAPI", "HeaderBarAPI"], headerBarButton: { icon: () => ( diff --git a/src/equicordplugins/songLink.desktop/index.tsx b/src/equicordplugins/songLink.desktop/index.tsx index 9131869b3..0834d639a 100644 --- a/src/equicordplugins/songLink.desktop/index.tsx +++ b/src/equicordplugins/songLink.desktop/index.tsx @@ -51,6 +51,7 @@ export const Native = VencordNative.pluginHelpers.SongLink as PluginNative export default definePlugin({ name: "Translate+", description: "Vencord's translate plugin but with support for artistic languages!", + dependencies: ["MessageAccessoriesAPI", "MessagePopoverAPI"], tags: ["Chat", "Utility"], authors: [Devs.Ven, EquicordDevs.Prince527], settings, diff --git a/src/equicordplugins/triviaAI/index.tsx b/src/equicordplugins/triviaAI/index.tsx index 29a2fa89f..afa941109 100644 --- a/src/equicordplugins/triviaAI/index.tsx +++ b/src/equicordplugins/triviaAI/index.tsx @@ -40,6 +40,7 @@ const messageCtxPatch: NavContextMenuPatchCallback = (children, { message }: { m export default definePlugin({ name: "TriviaAI", description: "A plugin that helps you answer trivia questions using AI.", + dependencies: ["MessagePopoverAPI"], tags: ["Appearance", "Customisation", "Fun"], authors: [EquicordDevs.yash], settings, diff --git a/src/equicordplugins/unitConverter/index.tsx b/src/equicordplugins/unitConverter/index.tsx index f8a3d11cb..c8c67aa1e 100644 --- a/src/equicordplugins/unitConverter/index.tsx +++ b/src/equicordplugins/unitConverter/index.tsx @@ -48,6 +48,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "UnitConverter", description: "Converts metric units to Imperal units and vice versa", + dependencies: ["MessagePopoverAPI"], tags: ["Utility"], authors: [Devs.sadan], messagePopoverButton: { diff --git a/src/equicordplugins/voiceChannelLog/index.tsx b/src/equicordplugins/voiceChannelLog/index.tsx index 4ef728a57..377ff7503 100644 --- a/src/equicordplugins/voiceChannelLog/index.tsx +++ b/src/equicordplugins/voiceChannelLog/index.tsx @@ -56,7 +56,7 @@ export default definePlugin({ description: "Logs voice channel activity including joins, leaves, soundboard, mute, camera, screenshare, and more.", tags: ["Servers", "Utility", "Voice"], authors: [Devs.Sqaaakoi, Devs.thororen, EquicordDevs.nyx, Devs.Moxxie, EquicordDevs.Fres, Devs.amy], - dependencies: ["AudioPlayerAPI"], + dependencies: ["AudioPlayerAPI", "HeaderBarAPI"], settings, contextMenus: { "channel-context": patchChannelContextMenu diff --git a/src/plugins/_core/supportHelper.tsx b/src/plugins/_core/supportHelper.tsx index a2e1d8172..385472477 100644 --- a/src/plugins/_core/supportHelper.tsx +++ b/src/plugins/_core/supportHelper.tsx @@ -289,7 +289,7 @@ export default definePlugin({ required: true, description: "Helps us provide support to you", authors: [Devs.Ven], - dependencies: ["UserSettingsAPI"], + dependencies: ["UserSettingsAPI", "CommandsAPI", "MessageAccessoriesAPI"], settings, diff --git a/src/plugins/anonymiseFileNames/index.tsx b/src/plugins/anonymiseFileNames/index.tsx index 192df3154..565ec1a39 100644 --- a/src/plugins/anonymiseFileNames/index.tsx +++ b/src/plugins/anonymiseFileNames/index.tsx @@ -75,6 +75,7 @@ export default definePlugin({ name: "AnonymiseFileNames", authors: [Devs.fawn], description: "Anonymise uploaded file names", + dependencies: ["CommandsAPI"], tags: ["Privacy", "Utility"], isModified: true, settings, diff --git a/src/plugins/clearURLs/index.ts b/src/plugins/clearURLs/index.ts index ed1d65962..6affa8f9b 100644 --- a/src/plugins/clearURLs/index.ts +++ b/src/plugins/clearURLs/index.ts @@ -50,6 +50,7 @@ interface RuleSet { export default definePlugin({ name: "ClearURLs", description: "Automatically removes tracking elements from URLs you send", + dependencies: ["MessageEventsAPI"], tags: ["Privacy", "Utility"], authors: [Devs.adryd, Devs.thororen], diff --git a/src/plugins/customCommands/index.ts b/src/plugins/customCommands/index.ts index c4490be26..bc77ab6f6 100644 --- a/src/plugins/customCommands/index.ts +++ b/src/plugins/customCommands/index.ts @@ -90,6 +90,7 @@ migratePluginSettings("CustomCommands", "MessageTags"); export default definePlugin({ name: "CustomCommands", description: "Allows you to create custom slash commands / tags", + dependencies: ["CommandsAPI"], searchTerms: ["MessageTags"], authors: [Devs.Ven, Devs.Luna,], tags: ["Commands", "Customisation", "Utility"], diff --git a/src/plugins/favEmojiFirst/index.tsx b/src/plugins/favEmojiFirst/index.tsx index 0d4d636a4..4c6261d78 100644 --- a/src/plugins/favEmojiFirst/index.tsx +++ b/src/plugins/favEmojiFirst/index.tsx @@ -1103,6 +1103,7 @@ export default definePlugin({ authors: [Devs.Aria, Devs.Ven, EquicordDevs.justjxke], tags: ["Emotes", "Customisation"], description: "Puts your favorite emoji first in the emoji autocomplete and also has emoji alias.", + dependencies: ["MessagePopoverAPI"], settings, contextMenus: { "expression-picker": expressionPickerPatch, diff --git a/src/plugins/friendInvites/index.ts b/src/plugins/friendInvites/index.ts index ec677e297..7cd486a7a 100644 --- a/src/plugins/friendInvites/index.ts +++ b/src/plugins/friendInvites/index.ts @@ -26,6 +26,7 @@ const FriendInvites = findByPropsLazy("createFriendInvite"); export default definePlugin({ name: "FriendInvites", description: "Create and manage friend invite links via slash commands (/create friend invite, /view friend invites, /revoke friend invites).", + dependencies: ["CommandsAPI"], tags: ["Friends", "Commands"], authors: [Devs.afn, Devs.Dziurwa], commands: [ diff --git a/src/plugins/gameActivityToggle/index.tsx b/src/plugins/gameActivityToggle/index.tsx index fc88b153a..c0ad504ae 100644 --- a/src/plugins/gameActivityToggle/index.tsx +++ b/src/plugins/gameActivityToggle/index.tsx @@ -100,7 +100,7 @@ export default definePlugin({ description: "Adds a button next to the mic and deafen button to toggle game activity.", tags: ["Activity", "Shortcuts"], authors: [Devs.Nuckyz, Devs.RuukuLada], - dependencies: ["UserSettingsAPI"], + dependencies: ["UserSettingsAPI", "UserAreaAPI"], settings, userAreaButton: { diff --git a/src/plugins/hideAttachments/index.tsx b/src/plugins/hideAttachments/index.tsx index 60e258dca..b47e053ac 100644 --- a/src/plugins/hideAttachments/index.tsx +++ b/src/plugins/hideAttachments/index.tsx @@ -58,7 +58,7 @@ export default definePlugin({ description: "Hide attachments and embeds for individual messages via hover button", tags: ["Chat", "Appearance"], authors: [Devs.Ven], - dependencies: ["MessageUpdaterAPI"], + dependencies: ["MessageUpdaterAPI", "MessageAccessoriesAPI", "MessagePopoverAPI"], patches: [{ find: "this.renderAttachments(", diff --git a/src/plugins/petpet/index.ts b/src/plugins/petpet/index.ts index 9a164ea4a..285fca355 100644 --- a/src/plugins/petpet/index.ts +++ b/src/plugins/petpet/index.ts @@ -110,6 +110,7 @@ migratePluginSettings("PetPet", "petpet"); export default definePlugin({ name: "PetPet", description: "Adds a /petpet slash command to create headpet gifs from any image", + dependencies: ["CommandsAPI"], tags: ["Fun", "Commands"], authors: [Devs.Ven, Devs.u32], commands: [ diff --git a/src/plugins/platformIndicators/index.tsx b/src/plugins/platformIndicators/index.tsx index f5b88c0bc..be877413d 100644 --- a/src/plugins/platformIndicators/index.tsx +++ b/src/plugins/platformIndicators/index.tsx @@ -219,6 +219,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "PlatformIndicators", description: "Adds platform indicators (Desktop, Mobile, Web...) to users", + dependencies: ["MemberListDecoratorsAPI", "MessageDecorationsAPI", "NicknameIconsAPI"], tags: ["Appearance"], authors: [Devs.kemo, Devs.TheSun, Devs.Nuckyz, Devs.Ven, EquicordDevs.neoarz], isModified: true, diff --git a/src/plugins/previewMessage/index.tsx b/src/plugins/previewMessage/index.tsx index 007bcf82b..d49a82d01 100644 --- a/src/plugins/previewMessage/index.tsx +++ b/src/plugins/previewMessage/index.tsx @@ -120,6 +120,7 @@ const PreviewButton: ChatBarButtonFactory = ({ isAnyChat, isEmpty, type: { attac export default definePlugin({ name: "PreviewMessage", description: "Lets you preview your message before sending it.", + dependencies: ["ChatInputButtonAPI"], tags: ["Chat", "Utility"], authors: [Devs.Aria], // start early to ensure we're the first plugin to add our button diff --git a/src/plugins/quickMention/index.tsx b/src/plugins/quickMention/index.tsx index dac0ae971..edad6b5f0 100644 --- a/src/plugins/quickMention/index.tsx +++ b/src/plugins/quickMention/index.tsx @@ -41,6 +41,7 @@ export default definePlugin({ name: "QuickMention", authors: [Devs.kemo], description: "Adds a quick mention button to the message actions bar", + dependencies: ["MessagePopoverAPI"], tags: ["Chat", "Shortcuts"], messagePopoverButton: { diff --git a/src/plugins/reviewDB/index.tsx b/src/plugins/reviewDB/index.tsx index a5f384286..dca4e7217 100644 --- a/src/plugins/reviewDB/index.tsx +++ b/src/plugins/reviewDB/index.tsx @@ -69,6 +69,7 @@ const userContextPatch: NavContextMenuPatchCallback = (children, { user }: { use export default definePlugin({ name: "ReviewDB", description: "Review other users (Adds a new settings to profiles)", + dependencies: ["ProfileCollectionsAPI"], tags: ["Friends", "Servers"], authors: [Devs.mantikafasi, Devs.Ven], isModified: true, diff --git a/src/plugins/sendTimestamps/index.tsx b/src/plugins/sendTimestamps/index.tsx index 87f223a1d..930bf498e 100644 --- a/src/plugins/sendTimestamps/index.tsx +++ b/src/plugins/sendTimestamps/index.tsx @@ -170,6 +170,7 @@ const SendTimestampButton: ChatBarButtonFactory = ({ isAnyChat }) => { export default definePlugin({ name: "SendTimestamps", description: "Send timestamps easily via chat box button & text shortcuts. Read the extended description!", + dependencies: ["ChatInputButtonAPI", "MessagePopoverAPI"], tags: ["Chat", "Commands"], authors: [Devs.Ven, Devs.Tyler, Devs.Grzesiek11], settings, diff --git a/src/plugins/silentMessageToggle/index.tsx b/src/plugins/silentMessageToggle/index.tsx index 929a1804d..9e6eb724c 100644 --- a/src/plugins/silentMessageToggle/index.tsx +++ b/src/plugins/silentMessageToggle/index.tsx @@ -110,6 +110,7 @@ export default definePlugin({ name: "SilentMessageToggle", authors: [Devs.Nuckyz, Devs.CatNoir, EquicordDevs.Z1xus], description: "Adds a button to the chat bar to toggle sending a silent message.", + dependencies: ["ChatInputButtonAPI"], tags: ["Chat", "Utility"], settings, diff --git a/src/plugins/silentTyping/index.tsx b/src/plugins/silentTyping/index.tsx index 20e21e53c..31cbd60ec 100644 --- a/src/plugins/silentTyping/index.tsx +++ b/src/plugins/silentTyping/index.tsx @@ -297,6 +297,7 @@ export default definePlugin({ name: "SilentTyping", authors: [Devs.Ven, Devs.Rini, Devs.ImBanana, EquicordDevs.Etorix], description: "Hide that you are typing", + dependencies: ["CommandsAPI", "ChatInputButtonAPI"], tags: ["Chat", "Privacy"], isModified: true, settings, diff --git a/src/plugins/spotifyShareCommands/index.ts b/src/plugins/spotifyShareCommands/index.ts index ec350a255..b0d5e0fd2 100644 --- a/src/plugins/spotifyShareCommands/index.ts +++ b/src/plugins/spotifyShareCommands/index.ts @@ -98,6 +98,7 @@ function makeCommand(name: string, formatUrl: (track: Track) => string): Command export default definePlugin({ name: "SpotifyShareCommands", description: "Share your current Spotify track, album or artist via slash command (/track, /album, /artist)", + dependencies: ["CommandsAPI"], tags: ["Media", "Commands"], authors: [Devs.katlyn], commands: [ diff --git a/src/plugins/textReplace/index.tsx b/src/plugins/textReplace/index.tsx index beb6f632d..3374bd8fb 100644 --- a/src/plugins/textReplace/index.tsx +++ b/src/plugins/textReplace/index.tsx @@ -304,6 +304,7 @@ const TEXT_REPLACE_RULES_EXEMPT_CHANNEL_IDS = [ export default definePlugin({ name: "TextReplace", description: "Replace text in your messages. You can find pre-made rules in the #textreplace-rules channel in Vencord's Server", + dependencies: ["MessagePopoverAPI"], tags: ["Chat", "Customisation", "Utility"], authors: [Devs.AutumnVN, Devs.TheKodeToad, EquicordDevs.Etorix], diff --git a/src/plugins/translate/index.tsx b/src/plugins/translate/index.tsx index fab0128d3..caeb5ac62 100644 --- a/src/plugins/translate/index.tsx +++ b/src/plugins/translate/index.tsx @@ -63,6 +63,7 @@ let tooltipTimeout: any; export default definePlugin({ name: "Translate", description: "Translate messages with Google Translate or DeepL", + dependencies: ["ChatInputButtonAPI", "MessageAccessoriesAPI", "MessagePopoverAPI"], tags: ["Chat", "Utility"], authors: [Devs.Ven, Devs.AshtonMemer], settings, diff --git a/src/plugins/unindent/index.ts b/src/plugins/unindent/index.ts index 007993cf0..9ebbf8deb 100644 --- a/src/plugins/unindent/index.ts +++ b/src/plugins/unindent/index.ts @@ -23,6 +23,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "Unindent", description: "Trims leading indentation from codeblocks", + dependencies: ["MessageEventsAPI"], tags: ["Chat", "Utility"], authors: [Devs.Ven], diff --git a/src/plugins/userVoiceShow/index.tsx b/src/plugins/userVoiceShow/index.tsx index 74848f8ef..fb6f0c8df 100644 --- a/src/plugins/userVoiceShow/index.tsx +++ b/src/plugins/userVoiceShow/index.tsx @@ -49,6 +49,7 @@ export default definePlugin({ name: "UserVoiceShow", description: "Shows an indicator when a user is in a Voice Channel", tags: ["Voice", "Appearance", "Friends"], + dependencies: ["MemberListDecoratorsAPI", "MessageDecorationsAPI", "NicknameIconsAPI"], authors: [Devs.Nuckyz, Devs.LordElias, EquicordDevs.omaw], settings, renderNicknameIcon({ userId }) { diff --git a/src/plugins/viewRaw/index.tsx b/src/plugins/viewRaw/index.tsx index 3068ea670..212ea4e49 100644 --- a/src/plugins/viewRaw/index.tsx +++ b/src/plugins/viewRaw/index.tsx @@ -176,6 +176,7 @@ const devContextCallback: NavContextMenuPatchCallback = (children, { id }: { id: export default definePlugin({ name: "ViewRaw", description: "Copy and view the raw content/data of any message, channel or guild", + dependencies: ["MessagePopoverAPI"], tags: ["Chat", "Developers"], authors: [Devs.KingFish, Devs.Ven, Devs.rad, Devs.ImLvna], settings, From 8e19aecd92f54acd4087103432995d43103a67cc Mon Sep 17 00:00:00 2001 From: Etorix <92535668+EtorixDev@users.noreply.github.com> Date: Thu, 16 Apr 2026 08:40:55 -0700 Subject: [PATCH 11/18] SMYN: Fix patch. (#976) --- src/plugins/showMeYourName/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/showMeYourName/index.tsx b/src/plugins/showMeYourName/index.tsx index 101a6afa7..bda540684 100644 --- a/src/plugins/showMeYourName/index.tsx +++ b/src/plugins/showMeYourName/index.tsx @@ -1139,7 +1139,7 @@ export default definePlugin({ // Attach the group ID to their messages to allow animating gradients within a group. find: "CUSTOM_GIFT?\"\":", replacement: { - match: /(isHovered:(\i).{0,1300}?\(\i,\i,\i\);)(let \i=\i.id===\i)/, + match: /(isHovered:(\i).{0,1300})(let \i=\i.id===\i,\i=)/, replace: "$1arguments[0].message.showMeYourNameGroupId=!!arguments[0].groupId?`g-${arguments[0].groupId}`:null;$self.handleHoveringMessage(arguments[0].message,$2);$3" }, }, From c0459e2adbf0e9703b67d976af06ff90baa53987 Mon Sep 17 00:00:00 2001 From: nin0 Date: Thu, 16 Apr 2026 11:44:14 -0400 Subject: [PATCH 12/18] feat(plugin): UserpluginInstaller (#974) Co-authored-by: thororen1234 <78185467+thororen1234@users.noreply.github.com> Co-authored-by: creations --- .../VariableWithCallbacks.ts | 40 + .../components/SettingsTab.tsx | 340 ++ .../components/UserpluginInstallButton.tsx | 55 + .../userpluginInstaller.dev/index.tsx | 138 + .../userpluginInstaller.dev/misc/constants.ts | 28 + .../misc/pluginValidate.txt | 158 + .../misc/setGitPath.txt | 118 + .../userpluginInstaller.dev/misc/style.css | 78 + .../misc/updateValidate.txt | 129 + .../userpluginInstaller.dev/native.ts | 473 ++ .../userpluginInstaller.dev/yaml.js | 5175 +++++++++++++++++ 11 files changed, 6732 insertions(+) create mode 100644 src/equicordplugins/userpluginInstaller.dev/VariableWithCallbacks.ts create mode 100644 src/equicordplugins/userpluginInstaller.dev/components/SettingsTab.tsx create mode 100644 src/equicordplugins/userpluginInstaller.dev/components/UserpluginInstallButton.tsx create mode 100644 src/equicordplugins/userpluginInstaller.dev/index.tsx create mode 100644 src/equicordplugins/userpluginInstaller.dev/misc/constants.ts create mode 100644 src/equicordplugins/userpluginInstaller.dev/misc/pluginValidate.txt create mode 100644 src/equicordplugins/userpluginInstaller.dev/misc/setGitPath.txt create mode 100644 src/equicordplugins/userpluginInstaller.dev/misc/style.css create mode 100644 src/equicordplugins/userpluginInstaller.dev/misc/updateValidate.txt create mode 100644 src/equicordplugins/userpluginInstaller.dev/native.ts create mode 100644 src/equicordplugins/userpluginInstaller.dev/yaml.js diff --git a/src/equicordplugins/userpluginInstaller.dev/VariableWithCallbacks.ts b/src/equicordplugins/userpluginInstaller.dev/VariableWithCallbacks.ts new file mode 100644 index 000000000..b87476fe2 --- /dev/null +++ b/src/equicordplugins/userpluginInstaller.dev/VariableWithCallbacks.ts @@ -0,0 +1,40 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2025 nin0 + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export class VariableWithCallbacks { + #value: T; + #callbacks: { + id: number; + callback: (value: T, id: number) => void; + }[] = []; + + constructor(value: T) { + this.#value = value; + } + + value(newValue?: T): T { + if (newValue !== undefined) { + this.#value = newValue; + this.#callbacks.forEach(c => c.callback(this.#value, c.id)); + } + return this.#value; + } + + registerCallback(callback: (value: T, id: number) => void): number { + const id = Date.now(); + this.#callbacks.push({ + id, + callback + }); + return id; + } + + deregisterCallback(id: number) { + const possibleFallback = this.#callbacks.find(cb => cb.id === id); + if (!possibleFallback) return; + this.#callbacks.splice(this.#callbacks.indexOf(possibleFallback), 1); + } +} diff --git a/src/equicordplugins/userpluginInstaller.dev/components/SettingsTab.tsx b/src/equicordplugins/userpluginInstaller.dev/components/SettingsTab.tsx new file mode 100644 index 000000000..3bdfc9859 --- /dev/null +++ b/src/equicordplugins/userpluginInstaller.dev/components/SettingsTab.tsx @@ -0,0 +1,340 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2025 nin0 + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { pluginRequiresRestart, startPlugin, stopPlugin } from "@api/PluginManager"; +import { useSettings } from "@api/Settings"; +import { BaseText } from "@components/BaseText"; +import { Button } from "@components/Button"; +import { Card } from "@components/Card"; +import { CheckedTextInput } from "@components/CheckedTextInput"; +import { HeadingTertiary } from "@components/Heading"; +import { DeleteIcon } from "@components/Icons"; +import { Paragraph } from "@components/Paragraph"; +import { AddonCard } from "@components/settings"; +import { + SettingsTab as STab, + wrapTab, +} from "@components/settings/tabs/BaseTab"; +import { classes, isObjectEmpty } from "@utils/misc"; +import { closeAllModals } from "@utils/modal"; +import { relaunch } from "@utils/native"; +import { Alerts, NavigationRouter, Toasts, useEffect, useState } from "@webpack/common"; + +import userpluginInstaller, { Native } from ".."; +import { + cl, + CLONE_LINK_REGEX, + showInstallFinishedAlert, +} from "../misc/constants"; + +function UserPluginsTab() { + const rs = useSettings(["plugins.*"]); + const [pluginsLoaded, loadPlugins] = useState(false); + const [plugins, setPlugins] = useState< + { + name: string; + description: string; + usesPreSend: boolean; + usesNative: boolean; + directory?: string; + remote: string; + supportChannelID?: string; + }[] + >([]); + const [url, setUrl] = useState(""); + const [valid, setValid] = useState(false); + const [pluginsWithUpdates, setPluginsWithUpdates] = useState< + Record + >({}); + const [updatesLoaded, loadUpdates] = useState(false); + + useEffect(() => { + const { plugins: plgobj, pluginsWithUpdates: pwug } = + userpluginInstaller; + setPlugins(plgobj.value()); + loadPlugins(true); + const cid2 = plgobj.registerCallback(value => setPlugins(value)); + + const setPWU = value => { + const pwu = value.plugins.map(pg => ({ + [pg]: plgobj.value().find(pfjh => pfjh.directory === pg) + ?.name, + })); + setPluginsWithUpdates(Object.assign({}, ...pwu)); + loadUpdates(value.finished); + }; + const cid = pwug.registerCallback(value => { + setPWU(value); + }); + setPWU(pwug.value()); + + return () => { + pwug.deregisterCallback(cid); + plgobj.deregisterCallback(cid2); + }; + }, []); + + return ( + Vencord.Settings.plugins[p.name].enabled).length} enabled)` : ""}`} + > +
+ {isObjectEmpty(pluginsWithUpdates) ? ( + !updatesLoaded && ( + Checking for updates... + ) + ) : ( + + + Plugin Updates Available + + + The following plugins are out-of-date: +
    + {Object.values(pluginsWithUpdates) + .toSorted() + .map(pl => ( +
  • {pl}
  • + ))} +
+ {!updatesLoaded && + "and possibly more, as update checking is not finished. "} + You can update plugins below. +
+
+ )} +
+ + + Install Plugin + + + You can install a plugin from GitHub, GitLab, Codeberg, + git.nin0.dev, or plugins.nin0.dev by pasting its clone URL + here. + +
+ setUrl(t)} + validate={t => { + const match = t.match(CLONE_LINK_REGEX); + if (match) { + const idpl = match.includes("plugins.nin0.dev") + ? 1 + : 0; + const installed = plugins + .map(p => p.directory) + .includes(match[[3, 6][idpl]]); + if (installed) { + setValid(false); + return "Plugin already installed, update below"; + } + setValid(true); + return true; + } else { + setValid(false); + return "Invalid URL, read the notice above"; + } + }} + value={url} + /> +
+
+ +
+
+
+ {pluginsLoaded ? ( +
+ {plugins + .toSorted((a, b) => + a.name.localeCompare(b.name, "en", { + sensitivity: "base", + }), + ) + .toSorted((a, b) => { + const updatePendingNames = + Object.keys(pluginsWithUpdates); + const [aa, bb] = [ + updatePendingNames.includes(a.directory!) + ? 1000 + : 0, + updatePendingNames.includes(b.directory!) + ? 1000 + : 0, + ]; + return bb - aa; + }) + .map(plugin => { + + const pl = Vencord.Plugins.plugins[ + plugin.name + ]; + return { + await Native.rmPlugin( + plugin.directory!, + ); + Alerts.show({ + title: "Done!", + body: `${plugin.name} has been uninstalled. A ${plugin.usesNative ? "restart" : "refresh"} is needed to fully remove the plugin.`, + confirmText: + plugin.usesNative + ? "Restart" + : "Refresh", + cancelText: "Later", + onConfirm() { + plugin.usesNative + ? relaunch() + : window.location.reload(); + }, + }); + }} + className={cl("delete-button")} + > + + } + setEnabled={t => { + Vencord.Settings.plugins[pl.name].enabled = t; + if (pluginRequiresRestart(pl)) { + Toasts.show({ + id: Toasts.genId(), + message: "Restart to apply changes!", + type: Toasts.Type.MESSAGE + }); + } else { + (t ? startPlugin : stopPlugin)(pl); + } + }} + footer={( +
+ {Object.keys( + pluginsWithUpdates, + ).includes(plugin.directory!) && ( + + )} + + {plugin.supportChannelID && } +
+ )} + />; + })} +
+ ) : ( + Loading plugins... + )} +
+
+ ); +} + +export default wrapTab(UserPluginsTab, "UserPlugins"); diff --git a/src/equicordplugins/userpluginInstaller.dev/components/UserpluginInstallButton.tsx b/src/equicordplugins/userpluginInstaller.dev/components/UserpluginInstallButton.tsx new file mode 100644 index 000000000..753a93961 --- /dev/null +++ b/src/equicordplugins/userpluginInstaller.dev/components/UserpluginInstallButton.tsx @@ -0,0 +1,55 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2025 nin0 + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { Button } from "@components/Button"; +import { Alerts, ChannelStore, useEffect, useState } from "@webpack/common"; + +import userpluginInstaller, { Native, OpenSettingsModule, settings } from ".."; +import { CLONE_LINK_REGEX, showInstallFinishedAlert, WHITELISTED_SHARE_CHANNELS } from "../misc/constants"; + +export default function UserpluginInstallButton({ props }: any) { + const [plugins, setPlugins] = useState<{ + directory?: string; + }[]>([]); + useEffect(() => { + const { plugins } = userpluginInstaller; + + setPlugins(plugins.value()); + const cid = plugins.registerCallback(value => setPlugins(plugins.value())); + return () => plugins.deregisterCallback(cid); + }); + const { message } = props; + if (![...WHITELISTED_SHARE_CHANNELS, ...(settings.store.allowlistedChannels || "").split(",")].includes(ChannelStore.getChannel(message.channel_id).parent_id) && !WHITELISTED_SHARE_CHANNELS.includes(message.channel_id)) + return; + const gitLink = (props.message.content as string).match(CLONE_LINK_REGEX); + if (!gitLink) return; + const idpl = gitLink.includes("plugins.nin0.dev") ? 1 : 0; + const installed = plugins.map(p => p.directory).includes(gitLink[[3, 6][idpl]]); + return <> +
+ +
+ ; +} diff --git a/src/equicordplugins/userpluginInstaller.dev/index.tsx b/src/equicordplugins/userpluginInstaller.dev/index.tsx new file mode 100644 index 000000000..1d30ce697 --- /dev/null +++ b/src/equicordplugins/userpluginInstaller.dev/index.tsx @@ -0,0 +1,138 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2025 nin0 + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import "./misc/style.css"; + +import { showNotification } from "@api/Notifications"; +import { definePluginSettings } from "@api/Settings"; +import { Button } from "@components/Button"; +import plSettings from "@plugins/_core/settings"; +import { Devs } from "@utils/constants"; +import { relaunch } from "@utils/native"; +import definePlugin, { OptionType, PluginNative } from "@utils/types"; +import { findByPropsLazy, findComponentByCodeLazy } from "@webpack"; +import { Alerts } from "@webpack/common"; + +import SettingsTab from "./components/SettingsTab"; +import UserpluginInstallButton from "./components/UserpluginInstallButton"; +import { VariableWithCallbacks } from "./VariableWithCallbacks"; + +// @ts-ignore +export const Native = VencordNative.pluginHelpers.UserpluginInstaller as PluginNative; +export const OpenSettingsModule = findByPropsLazy("openUserSettings"); +const AppsIcon = findComponentByCodeLazy("2.95H20a2 2 0"); + +export const settings = definePluginSettings({ + allowlistedChannels: { + type: OptionType.STRING, + description: "Comma separated list of channels where the Install Plugin button should be displayed. It is always displayed in the Vencord Userplugin channels" + }, + notifyIfUpdate: { + type: OptionType.BOOLEAN, + description: "Show a Vencord notification if UserPlugins need to be updated", + default: true + }, + neverNotifyForPlugins: { + type: OptionType.STRING, + description: "Never show update notifications for these plugins (you can still update them from the UserPlugins tab)", + default: "" + }, + setGitPath: { + type: OptionType.COMPONENT, + component: () => + } +}); + +export default definePlugin({ + name: "UserpluginInstaller", + description: "Install userplugins with a simple button click", + async checkPluginUpdates() { + for (const p of this.plugins.value()) { + if (await Native.isUpdateAvailableForPlugin(p.directory!)) { + const t = this.pluginsWithUpdates.value().plugins; + t.push(p.directory!); + this.pluginsWithUpdates.value({ + finished: false, + plugins: t + }); + } + } + const t = this.pluginsWithUpdates.value().plugins; + this.pluginsWithUpdates.value({ + finished: true, + plugins: t + }); + }, + section: { + key: "vencord_userplugins", + title: "UserPlugins", + panelTitle: "UserPlugins", + Component: SettingsTab, + Icon: AppsIcon + }, + async start() { + if (!VencordNative.pluginHelpers.UserpluginInstaller) return void Alerts.show({ + title: "UserpluginInstaller not fully loaded", + body: "This usually happens if you didn't fully restart your client after installing the plugin, which prevents the native helpers from loading. Restart your client to fix the issue.", + confirmText: "Restart now", + onConfirm() { + relaunch(); + }, + cancelText: "Later" + }); + + plSettings.customEntries.push(this.section); + + this.pluginsWithUpdates.registerCallback((value, id) => { + if (value.plugins.length === 0) return; + if (settings.store.neverNotifyForPlugins.split(",").map(t => t.trim().toLowerCase()).includes(value.plugins[value.plugins.length - 1].toLowerCase())) + return; + this.pluginsWithUpdates.deregisterCallback(id); + if (settings.store.notifyIfUpdate) + showNotification({ + title: "Some UserPlugins are out of date!", + body: "Click to open the UserPlugin Updater", + noPersist: true, + permanent: true, + onClick() { + OpenSettingsModule.openUserSettings("vencord_userplugins_panel"); + }, + }); + }); + const pls = await Native.getUserplugins(); + // @ts-ignore :trolley: + this.plugins.value(pls); + await this.checkPluginUpdates(); + }, + stop() { + // @ts-ignore + plSettings.customEntries.splice(plSettings.customEntries.indexOf(this.section), 1); + }, + plugins: new VariableWithCallbacks<{ + name: string; + description: string; + usesPreSend: boolean; + usesNative: boolean; + directory: string; + remote: string; + }[]>([]), + pluginsWithUpdates: new VariableWithCallbacks<{ + finished: boolean; + plugins: string[]; + }>({ + finished: false, + plugins: [] + }), + settings, + authors: [Devs.nin0dev], + renderMessageAccessory: props => { + return ; + } +}); diff --git a/src/equicordplugins/userpluginInstaller.dev/misc/constants.ts b/src/equicordplugins/userpluginInstaller.dev/misc/constants.ts new file mode 100644 index 000000000..b860a82c3 --- /dev/null +++ b/src/equicordplugins/userpluginInstaller.dev/misc/constants.ts @@ -0,0 +1,28 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2025 nin0 + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { classNameFactory } from "@api/Styles"; +import { relaunch } from "@utils/native"; +import { Alerts } from "@webpack/common"; + +// if edited, also edit in native.ts!!! +export const CLONE_LINK_REGEX = /https:\/\/(?:((?:git(?:hub|lab)\.com|git\.(?:[a-zA-Z0-9]|\.)+|codeberg\.org))\/(?!user-attachments)((?:[a-zA-Z0-9]|-)+)\/((?:[a-zA-Z0-9]|-|\.)+)(?:\.git)?|(plugins\.(nin0)\.dev)\/((?:[a-zA-Z0-9]|-|\.)+))(?:\/)?/; +export const WHITELISTED_SHARE_CHANNELS = ["1256395889354997771", "1032200195582197831", "1301947896601509900", "1322935137591365683"]; +export const cl = classNameFactory("vc-userplugininstaller-"); + +export function showInstallFinishedAlert(pluginToEnable: string, native: boolean) { + Alerts.show({ + title: "Done!", + body: `${pluginToEnable} has been successfully installed.${native ? " However, as it makes use of native functions, a client restart is required." : ""} What now?`, + confirmText: `Enable & ${native ? "restart" : "refresh"}`, + cancelText: native ? "Restart" : "Refresh", + onConfirm() { + !Vencord.Plugins.plugins[pluginToEnable] ? Vencord.Settings.plugins[pluginToEnable] = { enabled: true } : Vencord.Settings.plugins[pluginToEnable].enabled = true; + native ? relaunch() : window.location.reload(); + }, + onCancel: () => native ? relaunch() : window.location.reload() + }); +} diff --git a/src/equicordplugins/userpluginInstaller.dev/misc/pluginValidate.txt b/src/equicordplugins/userpluginInstaller.dev/misc/pluginValidate.txt new file mode 100644 index 000000000..9486605c9 --- /dev/null +++ b/src/equicordplugins/userpluginInstaller.dev/misc/pluginValidate.txt @@ -0,0 +1,158 @@ + + + + + + Review userplugin + + + + %WARNINGHIDER% %NATIVETSHIDER% %PRESENDHIDER% + + + +

Plugin info

+
+

%PLUGINNAME%

+

%PLUGINDESC%

+
+ +

Warnings

+
+

Uses a native.ts file

+

+ Use of this file allows the plugin to escape the browser sandbox + and potentially do anything to your system and data. + ONLY INSTALL THIS PLUGIN AFTER REVIEWING THE CODE AND BEING + 100% SURE THAT NOTHING BAD CAN BE DONE! +

+
+ Acknowledge warning (required to allow + install) +
+
+

Has pre-send listeners

+

+ This allows the plugin to edit your messages before they are + sent. +

+
+

+ Reminder: installing a userplugin can be a destructive action. Make + sure that you know and trust the developer before installing any. +

+
+ + +
+ + diff --git a/src/equicordplugins/userpluginInstaller.dev/misc/setGitPath.txt b/src/equicordplugins/userpluginInstaller.dev/misc/setGitPath.txt new file mode 100644 index 000000000..5e4e6938e --- /dev/null +++ b/src/equicordplugins/userpluginInstaller.dev/misc/setGitPath.txt @@ -0,0 +1,118 @@ + + + + + + + Git Path + + + + + +

Git path

+

+ If you're having issues downloading userplugins because Git isn't properly detected, you can manually set a Git + path + that'll be used instead of + simply looking in PATH. +
+ If you do not specify anything, Git will be called from the PATH variable. Do not set this setting unless you + have issues. +
+
+ On Linux, Flatpak still isn't supported. +

+ +
+ + + +
+ + + diff --git a/src/equicordplugins/userpluginInstaller.dev/misc/style.css b/src/equicordplugins/userpluginInstaller.dev/misc/style.css new file mode 100644 index 000000000..098e37ea6 --- /dev/null +++ b/src/equicordplugins/userpluginInstaller.dev/misc/style.css @@ -0,0 +1,78 @@ +.vc-userplugininstaller-info-card { + padding: 15px 20px; + margin-bottom: 20px; +} + +.vc-userplugininstaller-install-desc { + margin-top: 5px; +} + +.vc-userplugininstaller-install-field, +.vc-userplugininstaller-button-container { + margin-top: 10px; +} + +.vc-userplugininstaller-install-button { + margin-left: auto; +} + +.vc-userplugininstaller-update-check-container { + margin-top: 10px; +} + +.vc-userplugininstaller-plugins-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 10px; + align-items: start; +} + +.vc-userplugininstaller-info-button { + height: 24px; + width: 24px; + padding: 0; + background: transparent; + color: var(--icon-secondary); + transition: background-color 0.2s ease; + + &:hover { + color: var(--interactive-hover); + } +} + +.vc-userplugininstaller-settings-button:hover { + color: var(--interactive-hover); +} + +.vc-userplugininstaller-plugin-footer { + margin-top: 10px; + display: flex; + flex-wrap: wrap; + gap: 5px; + + div { + flex-basis: 100%; + margin-top: 5px; + font-size: 0.9rem; + } +} + +.vc-userplugininstaller-outdated-list { + padding-left: 30px; + margin: 3px 0; + list-style-type: disc; +} + +.vc-userplugininstaller-delete-button { + height: 24px; + width: 24px; + padding: 0; + background: transparent; + margin-right: 8px; + color: var(--icon-muted); + transition: background-color .2s ease; + + &:hover { + color: var(--red-new-46) + } +} diff --git a/src/equicordplugins/userpluginInstaller.dev/misc/updateValidate.txt b/src/equicordplugins/userpluginInstaller.dev/misc/updateValidate.txt new file mode 100644 index 000000000..573200223 --- /dev/null +++ b/src/equicordplugins/userpluginInstaller.dev/misc/updateValidate.txt @@ -0,0 +1,129 @@ + + + + + + Review userplugin + + + + +

Plugin info

+
+

%PLUGINNAME%

+

%PLUGINDESC%

+
+

Update info

+
+

%COMMITMESSAGE%

+
+

+ You may want to review the + source code that will be applied. +

+
+ +

+ Reminder: installing a userplugin can be a destructive action. Make + sure that you know and trust the developer before installing any. +

+
+ + +
+ + diff --git a/src/equicordplugins/userpluginInstaller.dev/native.ts b/src/equicordplugins/userpluginInstaller.dev/native.ts new file mode 100644 index 000000000..8ab7a1c6d --- /dev/null +++ b/src/equicordplugins/userpluginInstaller.dev/native.ts @@ -0,0 +1,473 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2025 nin0 + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { NativeSettings } from "@main/settings"; +import { exec, spawn } from "child_process"; +import { BrowserWindow, dialog, shell, WebContentsView } from "electron"; +import { existsSync, readdirSync, readFileSync } from "fs"; +import { readdir, readFile, rm } from "fs/promises"; +import { basename, join } from "path"; + +// @ts-ignore fuck off +import pluginValidateContent from "./misc/pluginValidate.txt"; // i would use HTML but esbuild is being whiny +// @ts-ignore fuck off +import setGitPathContent from "./misc/setGitPath.txt"; +// @ts-ignore fuck off +import updateValidateContent from "./misc/updateValidate.txt"; // see above +import YAML from "./yaml.js"; + +const PLUGIN_META_REGEX = /export default definePlugin\((?:\s|\/(?:\/|\*).*)*{\s*(?:\s|\/(?:\/|\*).*)*name:\s*(?:"|'|`)(.*)(?:"|'|`)(?:\s|\/(?:\/|\*).*)*,(?:\s|\/(?:\/|\*).*)*(?:\s|\/(?:\/|\*).*)*description:\s*(?:"|'|`)(.*)(?:"|'|`)(?:\s|\/(?:\/|\*).*)*/; +// if edited, also edit in misc/constants.ts!!! +const CLONE_LINK_REGEX = /https:\/\/(?:((?:git(?:hub|lab)\.com|git\.(?:[a-zA-Z0-9]|\.)+|codeberg\.org))\/(?!user-attachments)((?:[a-zA-Z0-9]|-)+)\/((?:[a-zA-Z0-9]|-|\.)+)(?:\.git)?|(plugins\.(nin0)\.dev)\/((?:[a-zA-Z0-9]|-|\.)+))(?:\/)?/; + +const vencordPath = ["desktop", "equibop"].includes(basename(__dirname)) ? join(__dirname, "../") : __dirname; + +export async function rmPlugin(_, name: string): Promise { + // eslint-disable-next-line + return new Promise(async (resolve, reject) => { + const ups = await getUserplugins(); + const pl = ups.find(p => p.directory! === name); + if (!pl) return; + + const deleteReqDialog = await dialog.showMessageBox({ + title: "Uninstall plugin", + message: `Uninstall ${pl.name}`, + type: "error", + detail: `The uninstall of the userplugin ${pl.name} has been requested. Would you like to do so?\n\nIf you did not initiate this, press No.`, + buttons: ["No", "Yes"] + }); + + if (deleteReqDialog.response !== 1) return reject("User rejected"); + await rm(join(vencordPath, "../src/userplugins", name), { recursive: true }); + + await build(); + resolve("Done"); + }); +} + +export async function isUpdateAvailableForPlugin(_, name: string): Promise { + return new Promise(resolve => { + const pluginDir = join(vencordPath, "../src/userplugins", name); + const otherProc = exec("git fetch", { + cwd: pluginDir + }); + otherProc.once("close", () => { + async function doStuff() { + try { + const head = (await readFile(join(pluginDir, ".git/HEAD"), "utf8")).match(/^ref: (.+)/)![1]; + const remoteHead = (await readFile(join(pluginDir, ".git/refs/remotes/origin/HEAD"), "utf8")).match(/^ref: (.+)/)![1]; + const localCommit = await readFile(join(pluginDir, ".git", head), "utf8"); + const remoteCommit = await readFile(join(pluginDir, ".git", remoteHead), "utf8"); + + resolve(localCommit !== remoteCommit); + } + catch (e) { + resolve(false); + } + } + doStuff(); + }); + }); +} + +export function initPluginInstall(_, link: string, source: string, owner: string, repo: string): Promise { + // eslint-disable-next-line + return new Promise(async (resolve, reject) => { + const verifiedRegex = link.match(CLONE_LINK_REGEX)!; + const idpl = source === "plugins.nin0.dev" ? 1 : 0; + if (![4, 7].includes(verifiedRegex.length) || verifiedRegex[0] !== link || verifiedRegex[[1, 4][idpl]] !== source || verifiedRegex[[2, 5][idpl]] !== owner || verifiedRegex[[3, 6][idpl]] !== repo) return reject("Invalid link"); + + // Ask for clone + const cloneDialog = await dialog.showMessageBox({ + title: "Clone userplugin", + message: `You are about to clone a userplugin from ${source}.`, + type: "question", + detail: `The repository name is "${repo}" and it is owned by "${owner}".\nThe repository URL is ${link}\n\n(If you did not request this intentionally, choose Cancel)`, + buttons: ["Cancel", "Clone repository and continue install", "Open repository in browser"] + }); + switch (cloneDialog.response) { + case 0: { + return reject("Rejected by user"); + } + case 1: { + await cloneRepo(link, repo); + break; + } + case 2: { + await shell.openExternal(link); + return reject("silentStop"); + } + } + + // Get plugin meta + const meta = await getPluginMeta(join(vencordPath, "..", "src", "userplugins", repo)); + + // Review plugin + const win = new BrowserWindow({ + maximizable: false, + minimizable: false, + width: 560, + height: meta.usesNative || meta.usesPreSend ? 650 : 360, + resizable: false, + webPreferences: { + devTools: true + }, + title: "Review userplugin", + modal: true, + parent: BrowserWindow.getAllWindows()[0], + show: false, + autoHideMenuBar: true + }); + const reView /* haha got it */ = new WebContentsView({ + webPreferences: { + devTools: true, + nodeIntegration: true + } + }); + win.contentView.addChildView(reView); + win.loadURL(generateReviewPluginContent(meta)); + win.on("page-title-updated", async e => { + switch (win.webContents.getTitle() as "abortInstall" | "reviewCode" | "install") { + case "abortInstall": { + win.close(); + await rm(join(vencordPath, "..", "src", "userplugins", repo), { + recursive: true + }); + return reject("Rejected by user"); + } + case "install": { + win.close(); + try { + await build(); + } + catch (e) { + reject((e as Error).toString()); + } + resolve(JSON.stringify({ + name: meta.name, + native: meta.usesNative + })); + break; + } + } + }); + win.show(); + }); +} + +async function build(): Promise { + return new Promise((resolve, reject) => { + const proc = exec("pnpm build --dev", { + cwd: join(vencordPath, ".."), + shell: process.env.SHELL || process.env.ComSpec || "/bin/sh" + }); + proc.once("close", () => { + if (proc.exitCode !== 0) { + reject("Failed to build Vencord, try building from console"); + } + resolve("Success"); + }); + }); +} + +async function getPluginMeta(path: string, extra: object = {}): Promise<{ + name: string; + description: string; + usesPreSend: boolean; + usesNative: boolean; + directory?: string; + remote: string; + supportChannelID?: string; +}> { + return new Promise((resolve, reject) => { + const files = readdirSync(path); + let fileToRead: "index.ts" | "index.tsx" | "index.js" | "index.jsx" | undefined; + files.forEach(f => { + if (f === "index.ts") fileToRead = "index.ts"; + if (f === "index.tsx") fileToRead = "index.tsx"; + if (f === "index.js") fileToRead = "index.js"; + if (f === "index.jsx") fileToRead = "index.jsx"; + }); + if (!fileToRead) reject("Invalid plugin"); + + const file = readFileSync(`${path}/${fileToRead}`, "utf8"); + let remoteURL; + try { + const remoteC = readFileSync(join(path, ".git/config"), "utf8"); + remoteURL = remoteC.match(/\[remote "origin"]\s+url = (https:\/\/(?:(?:git(?:hub|lab)\.com|git\.(?:[a-zA-Z0-9]|\.)+|codeberg\.org)\/(?!user-attachments)(?:[a-zA-Z0-9]|-)+\/(?:[a-zA-Z0-9]|-|\.)+(?:\.git)?|(plugins\.(nin0)\.dev)\/((?:[a-zA-Z0-9]|-|\.)+))(?:\/)?)\n/); + } catch { + remoteURL = null; + } + + let supportChannelID; + try { + const meta = readFileSync(join(path, "meta.yml"), "utf8"); + console.log(meta); + const parsed = YAML.load(meta); + if (parsed.thread && typeof parsed.thread === "string" && /^\d+$/.test(parsed.thread)) { + supportChannelID = parsed.thread; + } + } catch { + supportChannelID = null; + } + + const rawMeta = file.match(PLUGIN_META_REGEX); + resolve({ + name: rawMeta![1], + description: rawMeta![2], + usesPreSend: file.includes("PreSendListener") || file.includes("onBeforeMessage"), + usesNative: files.includes("native.ts") || files.includes("native.js"), + remote: remoteURL ? remoteURL[1] : "", + supportChannelID, + ...extra + }); + + }); +} + +async function cloneRepo(link: string, repo: string): Promise { + return new Promise((resolve, reject) => { + const proc = spawn("git", ["clone", link], { + cwd: join(vencordPath, "..", "src", "userplugins") + }); + proc.once("close", async () => { + if (proc.exitCode !== 0) { + if (!existsSync(join(vencordPath, "..", "src", "userplugins", repo))) + return reject("Failed to clone"); + const deleteReqDialog = await dialog.showMessageBox({ + title: "Error", + message: "Plugin already exists", + type: "error", + detail: `The plugin that you tried to clone already exists at ${join(vencordPath, "..", "src", "userplugins")}.\nWould you like to reclone it? Only do this if you want to reinstall or update the plugin.`, + buttons: ["No", "Yes"] + }); + if (deleteReqDialog.response !== 1) return reject("User rejected"); + await rm(join(vencordPath, "..", "src", "userplugins", repo), { + recursive: true + }); + await cloneRepo(link, repo); + } + resolve(); + }); + }); +} + +function generateReviewPluginContent(meta: { + name: string; + description: string; + usesPreSend: boolean; + usesNative: boolean; +}): string { + const template = pluginValidateContent.replace("%PLUGINNAME%", meta.name.replaceAll("<", "<")).replace("%PLUGINDESC%", meta.description.replaceAll("<", "<")).replace("%WARNINGHIDER%", !meta.usesNative && !meta.usesPreSend ? "[data-useless=\"warning\"] { display: none !important; }" : "").replace("%NATIVETSHIDER%", meta.usesNative ? "" : "#native-ts-warning { display: none !important; }").replace("%PRESENDHIDER%", meta.usesPreSend ? "" : "#pre-send-warning { display: none !important; }"); + const buf = Buffer.from(template).toString("base64"); + return `data:text/html;base64,${buf}`; +} + +function generateUpdatePluginContent(meta: { + name: string; + description: string; + remote: string; + commit: string; +}): string { + const template = updateValidateContent.replace("%PLUGINNAME%", meta.name.replaceAll("<", "<")).replace("%PLUGINDESC%", meta.description.replaceAll("<", "<")).replace("%REMOTE%", meta.remote).replace("%COMMITMESSAGE%", meta.commit.replaceAll("\n", "
")); + const buf = Buffer.from(template).toString("base64"); + return `data:text/html;base64,${buf}`; +} + +export async function getUserplugins() { + const folderContents = await readdir(join(vencordPath, "..", "src", "userplugins"), { + withFileTypes: true + }); + const plugins = await Promise.allSettled( + folderContents + .filter(item => item.isDirectory()) + .map(item => ({ + path: join(item.parentPath, item.name), + directory: item.name + })) + .map(({ path, directory }) => getPluginMeta(path, { directory })) + ); + + return plugins + .filter(p => p.status === "fulfilled") + .map(p => p.value); +} + +export async function updatePlugin(_, directory: string) { + return new Promise((resolve, reject) => { + const pluginDir = join(vencordPath, "../src/userplugins", directory); + + async function doStuff() { + const pluginMeta = await getPluginMeta(pluginDir); + + const win = new BrowserWindow({ + maximizable: false, + minimizable: false, + width: 560, + height: 600, + resizable: false, + webPreferences: { + devTools: true + }, + title: "Review userplugin", + modal: true, + parent: BrowserWindow.getAllWindows()[0], + show: false, + autoHideMenuBar: true + }); + const reView /* haha got it */ = new WebContentsView({ + webPreferences: { + devTools: true, + nodeIntegration: true + } + }); + win.contentView.addChildView(reView); + + const commitProc = exec("git log origin/HEAD...HEAD --oneline --pretty=format:%an////////%h////////%H////////%s", { + cwd: pluginDir + }); + let rawOutput = ""; + commitProc.stdout?.on("data", d => { + rawOutput += String(d); + }); + commitProc.once("close", () => { + win.loadURL(generateUpdatePluginContent({ + name: pluginMeta.name, + description: pluginMeta.description, + remote: pluginMeta.remote, + commit: rawOutput.split("\n").map(line => line.split("////////")).map(([user, shortCommit, longCommit, message]) => `${user} (${shortCommit}) ~ ${message}`).join("\n") + })); + win.on("page-title-updated", async e => { + if (win.webContents.getTitle().startsWith("openLink:")) { + await shell.openExternal(win.webContents.getTitle().replace("openLink:", "")); + } + switch (win.webContents.getTitle() as "abortInstall" | "install") { + case "abortInstall": { + win.close(); + return reject("Rejected by user"); + } + case "install": { + win.close(); + try { + const otherProc = exec("git rebase origin/HEAD", { + cwd: pluginDir + }); + let errored = ""; + otherProc.stderr?.on("data", d => { if (String(d).includes("Success")) return; errored += String(d); }); + otherProc.once("close", () => { + if (errored) if (!errored.includes("Success")) return reject(`Failed to apply the update, chances are you have local changes that conflict with your remote. Git errors:\n\n${errored}`); + build().then(() => resolve(JSON.stringify({ + name: pluginMeta.name, + native: pluginMeta.usesNative + }))); + }); + } + catch (e) { + reject((e as Error).toString()); + } + break; + } + } + }); + }); + win.show(); + } + doStuff(); + }); +} + +export async function openGitPathModal(_: any) { + const gitPathSet: string | undefined = NativeSettings.store.plugins.UserpluginInstaller?.gitPath; + const win = new BrowserWindow({ + maximizable: false, + minimizable: false, + width: 560, + height: 400, + resizable: false, + webPreferences: { + devTools: true + }, + title: "Set Git path", + modal: true, + parent: BrowserWindow.getAllWindows()[0], + show: false, + autoHideMenuBar: true + }); + const reView = new WebContentsView({ + webPreferences: { + devTools: true, + nodeIntegration: true + } + }); + win.contentView.addChildView(reView); + win.loadURL(`data:text/html;base64,${Buffer.from(setGitPathContent).toString("base64")}`); + win.on("page-title-updated", async _ => { + const t = win.webContents.getTitle(); + if (t === "abort") win.close(); + if (t.startsWith("ok")) { + if (!NativeSettings.store.plugins.UserpluginInstaller) { + NativeSettings.store.plugins.UserpluginInstaller = { + gitPath: undefined + }; + } + if (t === "ok-") { + NativeSettings.store.plugins.UserpluginInstaller.gitPath = undefined; + } else { + const gitPath2 = t.split("-").toSpliced(0, 1).join("-"); + NativeSettings.store.plugins.UserpluginInstaller.gitPath = gitPath2; + } + win.close(); + } + if (t.startsWith("check")) { + try { + const gitProc = spawn(t === "check-" ? "git" : t.split("-").toSpliced(0, 1).join("-"), ["--version"]); + let rawOutput = ""; + gitProc.stdout?.on("data", d => { + rawOutput += String(d); + }); + gitProc.on("error", e => { + dialog.showMessageBox({ + title: "Error", + message: "Git error", + type: "error", + detail: `${e}\n\nDouble-check the path you entered.`, + buttons: ["OK"] + }); + }); + gitProc.once("close", () => { + if (gitProc.exitCode === 0) { + dialog.showMessageBox({ + title: "Success", + message: "Git works!", + type: "info", + detail: `Successfully called ${rawOutput.trim()}`, + buttons: ["OK"] + }); + } + }); + } catch(e) { + dialog.showMessageBox({ + title: "Error", + message: "Git error", + type: "error", + detail: `${e}\n\nDouble-check the path you entered.`, + buttons: ["OK"] + }); + } + } + }); + win.show(); + if (gitPathSet) { + win.webContents.executeJavaScript(`document.querySelector("input").value = ${JSON.stringify(gitPathSet)};`); + } + + console.log(YAML.load(` + name: test + items: + - a + - b + `)); +} diff --git a/src/equicordplugins/userpluginInstaller.dev/yaml.js b/src/equicordplugins/userpluginInstaller.dev/yaml.js new file mode 100644 index 000000000..6baea2a59 --- /dev/null +++ b/src/equicordplugins/userpluginInstaller.dev/yaml.js @@ -0,0 +1,5175 @@ +/* eslint-disable */ +// This is from the https://github.com/connec/yaml-js library, licensed under the WTFPL License +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __require = /* @__PURE__ */ (x => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { + get: (a, b) => (typeof require !== "undefined" ? require : a)[b] +}) : x)(function(x) { + if (typeof require !== "undefined") return require.apply(this, arguments); + throw Error('Dynamic require of "' + x + '" is not supported'); +}); +var __commonJS = (cb, mod) => function __require2() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (const key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// node_modules/yaml-js/lib/events.js +var require_events = __commonJS({ + "node_modules/yaml-js/lib/events.js"(exports) { + (function() { + this.Event = class Event { + constructor(start_mark1, end_mark1) { + this.start_mark = start_mark1; + this.end_mark = end_mark1; + } + }; + this.NodeEvent = class NodeEvent extends this.Event { + constructor(anchor1, start_mark, end_mark) { + super(start_mark, end_mark); + this.anchor = anchor1; + } + }; + this.CollectionStartEvent = class CollectionStartEvent extends this.NodeEvent { + constructor(anchor, tag, implicit, start_mark, end_mark, flow_style) { + super(anchor, start_mark, end_mark); + this.tag = tag; + this.implicit = implicit; + this.flow_style = flow_style; + } + }; + this.CollectionEndEvent = class CollectionEndEvent extends this.Event { + }; + this.StreamStartEvent = class StreamStartEvent extends this.Event { + constructor(start_mark, end_mark, encoding) { + super(start_mark, end_mark); + this.encoding = encoding; + } + }; + this.StreamEndEvent = class StreamEndEvent extends this.Event { + }; + this.DocumentStartEvent = class DocumentStartEvent extends this.Event { + constructor(start_mark, end_mark, explicit, version, tags) { + super(start_mark, end_mark); + this.explicit = explicit; + this.version = version; + this.tags = tags; + } + }; + this.DocumentEndEvent = class DocumentEndEvent extends this.Event { + constructor(start_mark, end_mark, explicit) { + super(start_mark, end_mark); + this.explicit = explicit; + } + }; + this.AliasEvent = class AliasEvent extends this.NodeEvent { + }; + this.ScalarEvent = class ScalarEvent extends this.NodeEvent { + constructor(anchor, tag, implicit, value, start_mark, end_mark, style) { + super(anchor, start_mark, end_mark); + this.tag = tag; + this.implicit = implicit; + this.value = value; + this.style = style; + } + }; + this.SequenceStartEvent = class SequenceStartEvent extends this.CollectionStartEvent { + }; + this.SequenceEndEvent = class SequenceEndEvent extends this.CollectionEndEvent { + }; + this.MappingStartEvent = class MappingStartEvent extends this.CollectionStartEvent { + }; + this.MappingEndEvent = class MappingEndEvent extends this.CollectionEndEvent { + }; + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/errors.js +var require_errors = __commonJS({ + "node_modules/yaml-js/lib/errors.js"(exports) { + (function() { + var { indexOf } = []; + this.Mark = class Mark { + constructor(line, column, buffer, pointer) { + this.line = line; + this.column = column; + this.buffer = buffer; + this.pointer = pointer; + } + get_snippet(indent = 4, max_length = 75) { + var break_chars, end, head, ref, ref1, start, tail; + if (this.buffer == null) { + return null; + } + break_chars = "\0\r\n\x85\u2028\u2029"; + head = ""; + start = this.pointer; + while (start > 0 && (ref = this.buffer[start - 1], indexOf.call(break_chars, ref) < 0)) { + start--; + if (this.pointer - start > max_length / 2 - 1) { + head = " ... "; + start += 5; + break; + } + } + tail = ""; + end = this.pointer; + while (end < this.buffer.length && (ref1 = this.buffer[end], indexOf.call(break_chars, ref1) < 0)) { + end++; + if (end - this.pointer > max_length / 2 - 1) { + tail = " ... "; + end -= 5; + break; + } + } + return `${new Array(indent).join(" ")}${head}${this.buffer.slice(start, end)}${tail} +${new Array(indent + this.pointer - start + head.length).join(" ")}^`; + } + toString() { + var snippet, where; + snippet = this.get_snippet(); + where = ` on line ${this.line + 1}, column ${this.column + 1}`; + if (snippet) { + return where; + } else { + return `${where}: +${snippet}`; + } + } + }; + this.YAMLError = class YAMLError extends Error { + constructor(message) { + super(message); + Object.defineProperty(this, "stack", { + get: function() { + return this.toString() + "\n" + new Error().stack.split("\n").slice(1).join("\n"); + } + }); + } + toString() { + return this.message; + } + }; + this.MarkedYAMLError = class MarkedYAMLError extends this.YAMLError { + constructor(context, context_mark, problem, problem_mark, note) { + super(); + this.context = context; + this.context_mark = context_mark; + this.problem = problem; + this.problem_mark = problem_mark; + this.note = note; + } + toString() { + var lines; + lines = []; + if (this.context != null) { + lines.push(this.context); + } + if (this.context_mark != null && (this.problem == null || this.problem_mark == null || this.context_mark.line !== this.problem_mark.line || this.context_mark.column !== this.problem_mark.column)) { + lines.push(this.context_mark.toString()); + } + if (this.problem != null) { + lines.push(this.problem); + } + if (this.problem_mark != null) { + lines.push(this.problem_mark.toString()); + } + if (this.note != null) { + lines.push(this.note); + } + return lines.join("\n"); + } + }; + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/nodes.js +var require_nodes = __commonJS({ + "node_modules/yaml-js/lib/nodes.js"(exports) { + (function() { + var unique_id; + unique_id = 0; + this.Node = class Node { + constructor(tag1, value1, start_mark1, end_mark1) { + this.tag = tag1; + this.value = value1; + this.start_mark = start_mark1; + this.end_mark = end_mark1; + this.unique_id = `node_${unique_id++}`; + } + }; + this.ScalarNode = (function() { + class ScalarNode extends this.Node { + constructor(tag, value, start_mark, end_mark, style) { + super(tag, value, start_mark, end_mark); + this.style = style; + } + } + + ScalarNode.prototype.id = "scalar"; + return ScalarNode; + }).call(this); + this.CollectionNode = class CollectionNode extends this.Node { + constructor(tag, value, start_mark, end_mark, flow_style) { + super(tag, value, start_mark, end_mark); + this.flow_style = flow_style; + } + }; + this.SequenceNode = (function() { + class SequenceNode extends this.CollectionNode { + } + + SequenceNode.prototype.id = "sequence"; + return SequenceNode; + }).call(this); + this.MappingNode = (function() { + class MappingNode extends this.CollectionNode { + } + + MappingNode.prototype.id = "mapping"; + return MappingNode; + }).call(this); + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/composer.js +var require_composer = __commonJS({ + "node_modules/yaml-js/lib/composer.js"(exports) { + (function() { + var MarkedYAMLError, events, nodes; + events = require_events(); + ({ MarkedYAMLError } = require_errors()); + nodes = require_nodes(); + this.ComposerError = class ComposerError extends MarkedYAMLError { + }; + this.Composer = (function() { + var ctor; + class Composer { + constructor() { + return ctor.apply(this, arguments); + } + /* + Initialise a `Composer` instance. + */ + initialise() { + return this.anchors = {}; + } + /* + Checks if a document can be composed from the event stream. + + So long as the event stream hasn't ended (no [StreamEndEvent]), another document can be composed. + + @return {Boolean} True if a document can be composed, false otherwise. + */ + check_node() { + if (this.check_event(events.StreamStartEvent)) { + this.get_event(); + } + return !this.check_event(events.StreamEndEvent); + } + /* + Compose a document from the remaining event stream. + + {Composer#check_node} must be called before calling this method. + + @return {Node} The next document in the stream. Returns `undefined` if the event stream has ended. + */ + get_node() { + if (!this.check_event(events.StreamEndEvent)) { + return this.compose_document(); + } + } + /* + Compose a single document from the entire event stream. + + @throw {ComposerError} if there's more than one document is in the stream. + + @return {Node} The single document in the stream. + */ + get_single_node() { + var document, event; + this.get_event(); + document = null; + if (!this.check_event(events.StreamEndEvent)) { + document = this.compose_document(); + } + if (!this.check_event(events.StreamEndEvent)) { + event = this.get_event(); + throw new exports.ComposerError("expected a single document in the stream", document.start_mark, "but found another document", event.start_mark); + } + this.get_event(); + return document; + } + /* + Compose a document node from the event stream. + + A 'document' node is any single {Node} subclass. {DocumentStart} and {DocumentEnd} events delimit + the events used for composition. + + @private + + @return {Node} The document node. + */ + compose_document() { + var node; + this.get_event(); + node = this.compose_node(); + this.get_event(); + this.anchors = {}; + return node; + } + /* + Compose a node from the event stream. + + Composes a {ScalarNode}, {SequenceNode}, or {MappingNode} from the event stream, depending on the + first event encountered ({ScalarEvent}, {SequenceStartEvent}, or {MappingStartEvent} + respectively). + + @private + + @param parent {Node} The parent of the new node. + @param index {Number} The index of the new node within the parent's children. + @throw {ComposerError} if an alias is encountered for an undefined anchor. + @throw {ComposerError} if a duplicate anchor is envountered. + @return {Node} The composed node. + */ + compose_node(parent, index) { + var anchor, event, node; + if (this.check_event(events.AliasEvent)) { + event = this.get_event(); + anchor = event.anchor; + if (!(anchor in this.anchors)) { + throw new exports.ComposerError(null, null, `found undefined alias ${anchor}`, event.start_mark); + } + return this.anchors[anchor]; + } + event = this.peek_event(); + anchor = event.anchor; + if (anchor !== null && anchor in this.anchors) { + throw new exports.ComposerError(`found duplicate anchor ${anchor}; first occurence`, this.anchors[anchor].start_mark, "second occurrence", event.start_mark); + } + this.descend_resolver(parent, index); + if (this.check_event(events.ScalarEvent)) { + node = this.compose_scalar_node(anchor); + } else if (this.check_event(events.SequenceStartEvent)) { + node = this.compose_sequence_node(anchor); + } else if (this.check_event(events.MappingStartEvent)) { + node = this.compose_mapping_node(anchor); + } + this.ascend_resolver(); + return node; + } + /* + Compose a {ScalarNode} from the event stream. + + @private + + @param anchor {String} The anchor name for the node (if any). + @return {ScalarNode} The node composed from a {ScalarEvent}. + */ + compose_scalar_node(anchor) { + var event, node, tag; + event = this.get_event(); + tag = event.tag; + if (tag === null || tag === "!") { + tag = this.resolve(nodes.ScalarNode, event.value, event.implicit); + } + node = new nodes.ScalarNode(tag, event.value, event.start_mark, event.end_mark, event.style); + if (anchor !== null) { + this.anchors[anchor] = node; + } + return node; + } + /* + Compose a {SequenceNode} from the event stream. + + The contents of the node are composed from events between a {SequenceStartEvent} and a + {SequenceEndEvent}. + + @private + + @param anchor {String} The anchor name for the node (if any). + @return {SequenceNode} The composed node. + */ + compose_sequence_node(anchor) { + var end_event, index, node, start_event, tag; + start_event = this.get_event(); + tag = start_event.tag; + if (tag === null || tag === "!") { + tag = this.resolve(nodes.SequenceNode, null, start_event.implicit); + } + node = new nodes.SequenceNode(tag, [], start_event.start_mark, null, start_event.flow_style); + if (anchor !== null) { + this.anchors[anchor] = node; + } + index = 0; + while (!this.check_event(events.SequenceEndEvent)) { + node.value.push(this.compose_node(node, index)); + index++; + } + end_event = this.get_event(); + node.end_mark = end_event.end_mark; + return node; + } + /* + Compose a {MappingNode} from the event stream. + + The contents of the node are composed from events between a {MappingStartEvent} and a + {MappingEndEvent}. + + @private + + @param anchor {String} The anchor name for the node (if any). + @return {MappingNode} The composed node. + */ + compose_mapping_node(anchor) { + var end_event, item_key, item_value, node, start_event, tag; + start_event = this.get_event(); + tag = start_event.tag; + if (tag === null || tag === "!") { + tag = this.resolve(nodes.MappingNode, null, start_event.implicit); + } + node = new nodes.MappingNode(tag, [], start_event.start_mark, null, start_event.flow_style); + if (anchor !== null) { + this.anchors[anchor] = node; + } + while (!this.check_event(events.MappingEndEvent)) { + item_key = this.compose_node(node); + item_value = this.compose_node(node, item_key); + node.value.push([item_key, item_value]); + } + end_event = this.get_event(); + node.end_mark = end_event.end_mark; + return node; + } + } + + ctor = Composer.prototype.initialise; + return Composer; + }).call(this); + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/util.js +var require_util = __commonJS({ + "node_modules/yaml-js/lib/util.js"(exports) { + (function() { + var ref, ref1, ref2, hasProp = {}.hasOwnProperty; + this.StringStream = class StringStream { + constructor() { + this.string = ""; + } + write(chunk) { + return this.string += chunk; + } + }; + this.clone = obj => { + return Object.assign({}, obj); + }; + this.extend = function(destination, ...sources) { + var i, j, len, len1, name, ref3, source; + for (i = 0, len = sources.length; i < len; i++) { + source = sources[i]; + while (source !== Object.prototype) { + ref3 = Object.getOwnPropertyNames(source); + for (j = 0, len1 = ref3.length; j < len1; j++) { + name = ref3[j]; + if (destination[name] == null) { + destination[name] = source[name]; + } + } + source = Object.getPrototypeOf(source); + } + } + return destination; + }; + this.is_empty = function(obj) { + var key; + if (Array.isArray(obj) || typeof obj === "string") { + return obj.length === 0; + } + for (key in obj) { + if (!hasProp.call(obj, key)) continue; + return false; + } + return true; + }; + this.inspect = (ref = (ref1 = (ref2 = __require("util")) != null ? ref2.inspect : void 0) != null ? ref1 : global.inspect) != null ? ref : function(a) { + return `${a}`; + }; + this.pad_left = function(str, char, length) { + str = String(str); + if (str.length >= length) { + return str; + } else if (str.length + 1 === length) { + return `${char}${str}`; + } else { + return `${new Array(length - str.length + 1).join(char)}${str}`; + } + }; + this.to_hex = function(num) { + if (typeof num === "string") { + num = num.charCodeAt(0); + } + return num.toString(16); + }; + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/constructor.js +var require_constructor = __commonJS({ + "node_modules/yaml-js/lib/constructor.js"(exports) { + (function() { + var MarkedYAMLError, nodes, util, { indexOf } = []; + ({ MarkedYAMLError } = require_errors()); + nodes = require_nodes(); + util = require_util(); + this.ConstructorError = class ConstructorError extends MarkedYAMLError { + }; + this.BaseConstructor = (function() { + var ctor; + class BaseConstructor { + constructor() { + return ctor.apply(this, arguments); + } + /* + Add a constructor function for a specific tag. + + The constructor will be used to turn {Node Nodes} with the given tag into a Javascript object. + + @param tag {String} The tag for which the constructor should apply. + @param constructor {Function} A function that turns a {Node} with the given tag into a + Javascript object. + @return {Function} Returns the supplied `constructor`. + */ + static add_constructor(tag, constructor) { + if (!this.prototype.hasOwnProperty("yaml_constructors")) { + this.prototype.yaml_constructors = util.extend({}, this.prototype.yaml_constructors); + } + return this.prototype.yaml_constructors[tag] = constructor; + } + /* + Add a constructor function for a tag prefix. + + The constructor will be used to turn {Node Nodes} with the given tag prefix into a Javascript + object. + + @param tag_prefix {String} The tag prefix for which the constructor should apply. + @param multi_constructor {Function} A function that turns a {Node} with the given tag + prefix into a Javascript object. + @return {Function} Returns the supplied `multi_constructor`. + */ + static add_multi_constructor(tag_prefix, multi_constructor) { + if (!this.prototype.hasOwnProperty("yaml_multi_constructors")) { + this.prototype.yaml_multi_constructors = util.extend({}, this.prototype.yaml_multi_constructors); + } + return this.prototype.yaml_multi_constructors[tag_prefix] = multi_constructor; + } + /* + Initialise a new instance. + */ + initialise() { + this.constructed_objects = {}; + this.constructing_nodes = []; + return this.deferred_constructors = []; + } + /* + Checks if a document can be constructed from the representation stream. + + So long as the representation stream hasn't ended, another document can be constructed. + + @return {Boolean} True if a document can be constructed, false otherwise. + */ + check_data() { + return this.check_node(); + } + /* + Construct a document from the remaining representation stream. + + {Constructor#check_data} must be called before calling this method. + + @return {any} The next document in the stream. Returns `undefined` if the stream has ended. + */ + get_data() { + if (this.check_node()) { + return this.construct_document(this.get_node()); + } + } + /* + Construct a single document from the entire representation stream. + + @throw {ComposerError} if there's more than one document is in the stream. + + @return {Node} The single document in the stream. + */ + get_single_data() { + var node; + node = this.get_single_node(); + if (node != null) { + return this.construct_document(node); + } + return null; + } + /* + Construct a document node + + @private + */ + construct_document(node) { + var data; + data = this.construct_object(node); + while (!util.is_empty(this.deferred_constructors)) { + this.deferred_constructors.pop()(); + } + return data; + } + defer(f) { + return this.deferred_constructors.push(f); + } + construct_object(node) { + var constructor, object, ref, tag_prefix, tag_suffix; + if (node.unique_id in this.constructed_objects) { + return this.constructed_objects[node.unique_id]; + } + if (ref = node.unique_id, indexOf.call(this.constructing_nodes, ref) >= 0) { + throw new exports.ConstructorError(null, null, "found unconstructable recursive node", node.start_mark); + } + this.constructing_nodes.push(node.unique_id); + constructor = null; + tag_suffix = null; + if (node.tag in this.yaml_constructors) { + constructor = this.yaml_constructors[node.tag]; + } else { + for (tag_prefix in this.yaml_multi_constructors) { + if (node.tag.indexOf(tag_prefix === 0)) { + tag_suffix = node.tag.slice(tag_prefix.length); + constructor = this.yaml_multi_constructors[tag_prefix]; + break; + } + } + if (constructor == null) { + if (null in this.yaml_multi_constructors) { + tag_suffix = node.tag; + constructor = this.yaml_multi_constructors.null; + } else if (null in this.yaml_constructors) { + constructor = this.yaml_constructors.null; + } else if (node instanceof nodes.ScalarNode) { + constructor = this.construct_scalar; + } else if (node instanceof nodes.SequenceNode) { + constructor = this.construct_sequence; + } else if (node instanceof nodes.MappingNode) { + constructor = this.construct_mapping; + } + } + } + object = constructor.call(this, tag_suffix != null ? tag_suffix : node, node); + this.constructed_objects[node.unique_id] = object; + this.constructing_nodes.pop(); + return object; + } + construct_scalar(node) { + if (!(node instanceof nodes.ScalarNode)) { + throw new exports.ConstructorError(null, null, `expected a scalar node but found ${node.id}`, node.start_mark); + } + return node.value; + } + construct_sequence(node) { + var child, i, len, ref, results; + if (!(node instanceof nodes.SequenceNode)) { + throw new exports.ConstructorError(null, null, `expected a sequence node but found ${node.id}`, node.start_mark); + } + ref = node.value; + results = []; + for (i = 0, len = ref.length; i < len; i++) { + child = ref[i]; + results.push(this.construct_object(child)); + } + return results; + } + construct_mapping(node) { + var i, key, key_node, len, mapping, ref, value, value_node; + if (!(node instanceof nodes.MappingNode)) { + throw new ConstructorError(null, null, `expected a mapping node but found ${node.id}`, node.start_mark); + } + mapping = {}; + ref = node.value; + for (i = 0, len = ref.length; i < len; i++) { + [key_node, value_node] = ref[i]; + key = this.construct_object(key_node); + if (typeof key === "object") { + throw new exports.ConstructorError("while constructing a mapping", node.start_mark, "found unhashable key", key_node.start_mark); + } + value = this.construct_object(value_node); + mapping[key] = value; + } + return mapping; + } + construct_pairs(node) { + var i, key, key_node, len, pairs, ref, value, value_node; + if (!(node instanceof nodes.MappingNode)) { + throw new exports.ConstructorError(null, null, `expected a mapping node but found ${node.id}`, node.start_mark); + } + pairs = []; + ref = node.value; + for (i = 0, len = ref.length; i < len; i++) { + [key_node, value_node] = ref[i]; + key = this.construct_object(key_node); + value = this.construct_object(value_node); + pairs.push([key, value]); + } + return pairs; + } + } + + BaseConstructor.prototype.yaml_constructors = {}; + BaseConstructor.prototype.yaml_multi_constructors = {}; + ctor = BaseConstructor.prototype.initialise; + return BaseConstructor; + }).call(this); + this.Constructor = (function() { + var BOOL_VALUES, TIMESTAMP_PARTS, TIMESTAMP_REGEX; + class Constructor extends this.BaseConstructor { + construct_scalar(node) { + var i, key_node, len, ref, value_node; + if (node instanceof nodes.MappingNode) { + ref = node.value; + for (i = 0, len = ref.length; i < len; i++) { + [key_node, value_node] = ref[i]; + if (key_node.tag === "tag:yaml.org,2002:value") { + return this.construct_scalar(value_node); + } + } + } + return super.construct_scalar(node); + } + flatten_mapping(node) { + var i, index, j, key_node, len, len1, merge, ref, submerge, subnode, value, value_node; + merge = []; + index = 0; + while (index < node.value.length) { + [key_node, value_node] = node.value[index]; + if (key_node.tag === "tag:yaml.org,2002:merge") { + node.value.splice(index, 1); + if (value_node instanceof nodes.MappingNode) { + this.flatten_mapping(value_node); + merge = merge.concat(value_node.value); + } else if (value_node instanceof nodes.SequenceNode) { + submerge = []; + ref = value_node.value; + for (i = 0, len = ref.length; i < len; i++) { + subnode = ref[i]; + if (!(subnode instanceof nodes.MappingNode)) { + throw new exports.ConstructorError("while constructing a mapping", node.start_mark, `expected a mapping for merging, but found ${subnode.id}`, subnode.start_mark); + } + this.flatten_mapping(subnode); + submerge.push(subnode.value); + } + submerge.reverse(); + for (j = 0, len1 = submerge.length; j < len1; j++) { + value = submerge[j]; + merge = merge.concat(value); + } + } else { + throw new exports.ConstructorError("while constructing a mapping", node.start_mark, `expected a mapping or list of mappings for merging but found ${value_node.id}`, value_node.start_mark); + } + } else if (key_node.tag === "tag:yaml.org,2002:value") { + key_node.tag = "tag:yaml.org,2002:str"; + index++; + } else { + index++; + } + } + if (merge.length) { + return node.value = merge.concat(node.value); + } + } + construct_mapping(node) { + if (node instanceof nodes.MappingNode) { + this.flatten_mapping(node); + } + return super.construct_mapping(node); + } + construct_yaml_null(node) { + this.construct_scalar(node); + return null; + } + construct_yaml_bool(node) { + var value; + value = this.construct_scalar(node); + return BOOL_VALUES[value.toLowerCase()]; + } + construct_yaml_int(node) { + var base, digit, digits, i, len, part, ref, sign, value; + value = this.construct_scalar(node); + value = value.replace(/_/g, ""); + sign = value[0] === "-" ? -1 : 1; + if (ref = value[0], indexOf.call("+-", ref) >= 0) { + value = value.slice(1); + } + if (value === "0") { + return 0; + } else if (value.indexOf("0b") === 0) { + return sign * parseInt(value.slice(2), 2); + } else if (value.indexOf("0x") === 0) { + return sign * parseInt(value.slice(2), 16); + } else if (value.indexOf("0o") === 0) { + return sign * parseInt(value.slice(2), 8); + } else if (value[0] === "0") { + return sign * parseInt(value, 8); + } else if (indexOf.call(value, ":") >= 0) { + digits = (function() { + var i2, len2, ref1, results; + ref1 = value.split(/:/g); + results = []; + for (i2 = 0, len2 = ref1.length; i2 < len2; i2++) { + part = ref1[i2]; + results.push(parseInt(part)); + } + return results; + })(); + digits.reverse(); + base = 1; + value = 0; + for (i = 0, len = digits.length; i < len; i++) { + digit = digits[i]; + value += digit * base; + base *= 60; + } + return sign * value; + } else { + return sign * parseInt(value); + } + } + construct_yaml_float(node) { + var base, digit, digits, i, len, part, ref, sign, value; + value = this.construct_scalar(node); + value = value.replace(/_/g, "").toLowerCase(); + sign = value[0] === "-" ? -1 : 1; + if (ref = value[0], indexOf.call("+-", ref) >= 0) { + value = value.slice(1); + } + if (value === ".inf") { + return sign * Infinity; + } else if (value === ".nan") { + return 0 / 0; + } else if (indexOf.call(value, ":") >= 0) { + digits = (function() { + var i2, len2, ref1, results; + ref1 = value.split(/:/g); + results = []; + for (i2 = 0, len2 = ref1.length; i2 < len2; i2++) { + part = ref1[i2]; + results.push(parseFloat(part)); + } + return results; + })(); + digits.reverse(); + base = 1; + value = 0; + for (i = 0, len = digits.length; i < len; i++) { + digit = digits[i]; + value += digit * base; + base *= 60; + } + return sign * value; + } else { + return sign * parseFloat(value); + } + } + construct_yaml_binary(node) { + var error, value; + value = this.construct_scalar(node); + try { + if (typeof window !== "undefined" && window !== null) { + return atob(value); + } + return new Buffer(value, "base64").toString("ascii"); + } catch (error1) { + error = error1; + throw new exports.ConstructorError(null, null, `failed to decode base64 data: ${error}`, node.start_mark); + } + } + construct_yaml_timestamp(node) { + var date, day, fraction, hour, index, key, match, millisecond, minute, month, second, tz_hour, tz_minute, tz_sign, value, values, year; + value = this.construct_scalar(node); + match = node.value.match(TIMESTAMP_REGEX); + values = {}; + for (key in TIMESTAMP_PARTS) { + index = TIMESTAMP_PARTS[key]; + values[key] = match[index]; + } + year = parseInt(values.year); + month = parseInt(values.month) - 1; + day = parseInt(values.day); + if (!values.hour) { + return new Date(Date.UTC(year, month, day)); + } + hour = parseInt(values.hour); + minute = parseInt(values.minute); + second = parseInt(values.second); + millisecond = 0; + if (values.fraction) { + fraction = values.fraction.slice(0, 6); + while (fraction.length < 6) { + fraction += "0"; + } + fraction = parseInt(fraction); + millisecond = Math.round(fraction / 1e3); + } + if (values.tz_sign) { + tz_sign = values.tz_sign === "-" ? 1 : -1; + if (tz_hour = parseInt(values.tz_hour)) { + hour += tz_sign * tz_hour; + } + if (tz_minute = parseInt(values.tz_minute)) { + minute += tz_sign * tz_minute; + } + } + date = new Date(Date.UTC(year, month, day, hour, minute, second, millisecond)); + return date; + } + construct_yaml_pair_list(type, node) { + var list; + list = []; + if (!(node instanceof nodes.SequenceNode)) { + throw new exports.ConstructorError(`while constructing ${type}`, node.start_mark, `expected a sequence but found ${node.id}`, node.start_mark); + } + this.defer(() => { + var i, key, key_node, len, ref, results, subnode, value, value_node; + ref = node.value; + results = []; + for (i = 0, len = ref.length; i < len; i++) { + subnode = ref[i]; + if (!(subnode instanceof nodes.MappingNode)) { + throw new exports.ConstructorError(`while constructing ${type}`, node.start_mark, `expected a mapping of length 1 but found ${subnode.id}`, subnode.start_mark); + } + if (subnode.value.length !== 1) { + throw new exports.ConstructorError(`while constructing ${type}`, node.start_mark, `expected a mapping of length 1 but found ${subnode.id}`, subnode.start_mark); + } + [key_node, value_node] = subnode.value[0]; + key = this.construct_object(key_node); + value = this.construct_object(value_node); + results.push(list.push([key, value])); + } + return results; + }); + return list; + } + construct_yaml_omap(node) { + return this.construct_yaml_pair_list("an ordered map", node); + } + construct_yaml_pairs(node) { + return this.construct_yaml_pair_list("pairs", node); + } + construct_yaml_set(node) { + var data; + data = []; + this.defer(() => { + var item, results; + results = []; + for (item in this.construct_mapping(node)) { + results.push(data.push(item)); + } + return results; + }); + return data; + } + construct_yaml_str(node) { + return this.construct_scalar(node); + } + construct_yaml_seq(node) { + var data; + data = []; + this.defer(() => { + var i, item, len, ref, results; + ref = this.construct_sequence(node); + results = []; + for (i = 0, len = ref.length; i < len; i++) { + item = ref[i]; + results.push(data.push(item)); + } + return results; + }); + return data; + } + construct_yaml_map(node) { + var data; + data = {}; + this.defer(() => { + var key, ref, results, value; + ref = this.construct_mapping(node); + results = []; + for (key in ref) { + value = ref[key]; + results.push(data[key] = value); + } + return results; + }); + return data; + } + construct_yaml_object(node, klass) { + var data; + data = new klass(); + this.defer(() => { + var key, ref, results, value; + ref = this.construct_mapping(node, true); + results = []; + for (key in ref) { + value = ref[key]; + results.push(data[key] = value); + } + return results; + }); + return data; + } + construct_undefined(node) { + throw new exports.ConstructorError(null, null, `could not determine a constructor for the tag ${node.tag}`, node.start_mark); + } + } + + BOOL_VALUES = { + on: true, + off: false, + true: true, + false: false, + yes: true, + no: false + }; + TIMESTAMP_REGEX = /^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:(?:[Tt]|[\x20\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\.([0-9]*))?(?:[\x20\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?)?$/; + TIMESTAMP_PARTS = { + year: 1, + month: 2, + day: 3, + hour: 4, + minute: 5, + second: 6, + fraction: 7, + tz: 8, + tz_sign: 9, + tz_hour: 10, + tz_minute: 11 + }; + return Constructor; + }).call(this); + this.Constructor.add_constructor("tag:yaml.org,2002:null", this.Constructor.prototype.construct_yaml_null); + this.Constructor.add_constructor("tag:yaml.org,2002:bool", this.Constructor.prototype.construct_yaml_bool); + this.Constructor.add_constructor("tag:yaml.org,2002:int", this.Constructor.prototype.construct_yaml_int); + this.Constructor.add_constructor("tag:yaml.org,2002:float", this.Constructor.prototype.construct_yaml_float); + this.Constructor.add_constructor("tag:yaml.org,2002:binary", this.Constructor.prototype.construct_yaml_binary); + this.Constructor.add_constructor("tag:yaml.org,2002:timestamp", this.Constructor.prototype.construct_yaml_timestamp); + this.Constructor.add_constructor("tag:yaml.org,2002:omap", this.Constructor.prototype.construct_yaml_omap); + this.Constructor.add_constructor("tag:yaml.org,2002:pairs", this.Constructor.prototype.construct_yaml_pairs); + this.Constructor.add_constructor("tag:yaml.org,2002:set", this.Constructor.prototype.construct_yaml_set); + this.Constructor.add_constructor("tag:yaml.org,2002:str", this.Constructor.prototype.construct_yaml_str); + this.Constructor.add_constructor("tag:yaml.org,2002:seq", this.Constructor.prototype.construct_yaml_seq); + this.Constructor.add_constructor("tag:yaml.org,2002:map", this.Constructor.prototype.construct_yaml_map); + this.Constructor.add_constructor(null, this.Constructor.prototype.construct_undefined); + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/emitter.js +var require_emitter = __commonJS({ + "node_modules/yaml-js/lib/emitter.js"(exports) { + (function() { + var ScalarAnalysis, YAMLError, events, util, hasProp = {}.hasOwnProperty, { indexOf } = []; + events = require_events(); + util = require_util(); + ({ YAMLError } = require_errors()); + this.EmitterError = class EmitterError extends YAMLError { + }; + this.Emitter = (function() { + var C_WHITESPACE, DEFAULT_TAG_PREFIXES, ESCAPE_REPLACEMENTS, ctor; + class Emitter { + constructor() { + return ctor.apply(this, arguments); + } + initialise(stream, options) { + var ref; + this.stream = stream; + this.encoding = null; + this.states = []; + this.state = this.expect_stream_start; + this.events = []; + this.event = null; + this.indents = []; + this.indent = null; + this.flow_level = 0; + this.root_context = false; + this.sequence_context = false; + this.mapping_context = false; + this.simple_key_context = false; + this.line = 0; + this.column = 0; + this.whitespace = true; + this.indentation = true; + this.open_ended = false; + ({ canonical: this.canonical, allow_unicode: this.allow_unicode } = options); + if (this.canonical == null) { + this.canonical = false; + } + if (this.allow_unicode == null) { + this.allow_unicode = true; + } + this.best_indent = options.indent > 1 && options.indent < 10 ? options.indent : 2; + this.best_width = options.width > this.indent * 2 ? options.width : 80; + this.best_line_break = (ref = options.line_break) === "\r" || ref === "\n" || ref === "\r\n" ? options.line_break : "\n"; + this.tag_prefixes = null; + this.prepared_anchor = null; + this.prepared_tag = null; + this.analysis = null; + return this.style = null; + } + /* + Reset the state attributes (to clear self-references) + */ + dispose() { + this.states = []; + return this.state = null; + } + emit(event) { + var results; + this.events.push(event); + results = []; + while (!this.need_more_events()) { + this.event = this.events.shift(); + this.state(); + results.push(this.event = null); + } + return results; + } + /* + In some cases, we wait for a few next events before emitting. + */ + need_more_events() { + var event; + if (this.events.length === 0) { + return true; + } + event = this.events[0]; + if (event instanceof events.DocumentStartEvent) { + return this.need_events(1); + } else if (event instanceof events.SequenceStartEvent) { + return this.need_events(2); + } else if (event instanceof events.MappingStartEvent) { + return this.need_events(3); + } else { + return false; + } + } + need_events(count) { + var event, i, len, level, ref; + level = 0; + ref = this.events.slice(1); + for (i = 0, len = ref.length; i < len; i++) { + event = ref[i]; + if (event instanceof events.DocumentStartEvent || event instanceof events.CollectionStartEvent) { + level++; + } else if (event instanceof events.DocumentEndEvent || event instanceof events.CollectionEndEvent) { + level--; + } else if (event instanceof events.StreamEndEvent) { + level = -1; + } + if (level < 0) { + return false; + } + } + return this.events.length < count + 1; + } + increase_indent(options = {}) { + this.indents.push(this.indent); + if (this.indent == null) { + return this.indent = options.flow ? this.best_indent : 0; + } else if (!options.indentless) { + return this.indent += this.best_indent; + } + } + // Stream states + expect_stream_start() { + if (this.event instanceof events.StreamStartEvent) { + if (this.event.encoding && !("encoding" in this.stream)) { + this.encoding = this.event.encoding; + } + this.write_stream_start(); + return this.state = this.expect_first_document_start; + } else { + return this.error("expected StreamStartEvent, but got", this.event); + } + } + expect_nothing() { + return this.error("expected nothing, but got", this.event); + } + // Document states + expect_first_document_start() { + return this.expect_document_start(true); + } + expect_document_start(first = false) { + var explicit, handle, i, k, len, prefix, ref; + if (this.event instanceof events.DocumentStartEvent) { + if ((this.event.version || this.event.tags) && this.open_ended) { + this.write_indicator("...", true); + this.write_indent(); + } + if (this.event.version) { + this.write_version_directive(this.prepare_version(this.event.version)); + } + this.tag_prefixes = util.clone(DEFAULT_TAG_PREFIXES); + if (this.event.tags) { + ref = (function() { + var ref2, results; + ref2 = this.event.tags; + results = []; + for (k in ref2) { + if (!hasProp.call(ref2, k)) continue; + results.push(k); + } + return results; + }).call(this).sort(); + for (i = 0, len = ref.length; i < len; i++) { + handle = ref[i]; + prefix = this.event.tags[handle]; + this.tag_prefixes[prefix] = handle; + this.write_tag_directive(this.prepare_tag_handle(handle), this.prepare_tag_prefix(prefix)); + } + } + explicit = !first || this.event.explicit || this.canonical || this.event.version || this.event.tags || this.check_empty_document(); + if (explicit) { + this.write_indent(); + this.write_indicator("---", true); + if (this.canonical) { + this.write_indent(); + } + } + return this.state = this.expect_document_root; + } else if (this.event instanceof events.StreamEndEvent) { + if (this.open_ended) { + this.write_indicator("...", true); + this.write_indent(); + } + this.write_stream_end(); + return this.state = this.expect_nothing; + } else { + return this.error("expected DocumentStartEvent, but got", this.event); + } + } + expect_document_end() { + if (this.event instanceof events.DocumentEndEvent) { + this.write_indent(); + if (this.event.explicit) { + this.write_indicator("...", true); + this.write_indent(); + } + this.flush_stream(); + return this.state = this.expect_document_start; + } else { + return this.error("expected DocumentEndEvent, but got", this.event); + } + } + expect_document_root() { + this.states.push(this.expect_document_end); + return this.expect_node({ + root: true + }); + } + // Node states + expect_node(expect = {}) { + this.root_context = !!expect.root; + this.sequence_context = !!expect.sequence; + this.mapping_context = !!expect.mapping; + this.simple_key_context = !!expect.simple_key; + if (this.event instanceof events.AliasEvent) { + return this.expect_alias(); + } else if (this.event instanceof events.ScalarEvent || this.event instanceof events.CollectionStartEvent) { + this.process_anchor("&"); + this.process_tag(); + if (this.event instanceof events.ScalarEvent) { + return this.expect_scalar(); + } else if (this.event instanceof events.SequenceStartEvent) { + if (this.flow_level || this.canonical || this.event.flow_style || this.check_empty_sequence()) { + return this.expect_flow_sequence(); + } else { + return this.expect_block_sequence(); + } + } else if (this.event instanceof events.MappingStartEvent) { + if (this.flow_level || this.canonical || this.event.flow_style || this.check_empty_mapping()) { + return this.expect_flow_mapping(); + } else { + return this.expect_block_mapping(); + } + } + } else { + return this.error("expected NodeEvent, but got", this.event); + } + } + expect_alias() { + if (!this.event.anchor) { + this.error("anchor is not specified for alias"); + } + this.process_anchor("*"); + return this.state = this.states.pop(); + } + expect_scalar() { + this.increase_indent({ + flow: true + }); + this.process_scalar(); + this.indent = this.indents.pop(); + return this.state = this.states.pop(); + } + // Flow sequence states + expect_flow_sequence() { + this.write_indicator("[", true, { + whitespace: true + }); + this.flow_level++; + this.increase_indent({ + flow: true + }); + return this.state = this.expect_first_flow_sequence_item; + } + expect_first_flow_sequence_item() { + if (this.event instanceof events.SequenceEndEvent) { + this.indent = this.indents.pop(); + this.flow_level--; + this.write_indicator("]", false); + return this.state = this.states.pop(); + } else { + if (this.canonical || this.column > this.best_width) { + this.write_indent(); + } + this.states.push(this.expect_flow_sequence_item); + return this.expect_node({ + sequence: true + }); + } + } + expect_flow_sequence_item() { + if (this.event instanceof events.SequenceEndEvent) { + this.indent = this.indents.pop(); + this.flow_level--; + if (this.canonical) { + this.write_indicator(",", false); + this.write_indent(); + } + this.write_indicator("]", false); + return this.state = this.states.pop(); + } else { + this.write_indicator(",", false); + if (this.canonical || this.column > this.best_width) { + this.write_indent(); + } + this.states.push(this.expect_flow_sequence_item); + return this.expect_node({ + sequence: true + }); + } + } + // Flow mapping states + expect_flow_mapping() { + this.write_indicator("{", true, { + whitespace: true + }); + this.flow_level++; + this.increase_indent({ + flow: true + }); + return this.state = this.expect_first_flow_mapping_key; + } + expect_first_flow_mapping_key() { + if (this.event instanceof events.MappingEndEvent) { + this.indent = this.indents.pop(); + this.flow_level--; + this.write_indicator("}", false); + return this.state = this.states.pop(); + } else { + if (this.canonical || this.column > this.best_width) { + this.write_indent(); + } + if (!this.canonical && this.check_simple_key()) { + this.states.push(this.expect_flow_mapping_simple_value); + return this.expect_node({ + mapping: true, + simple_key: true + }); + } else { + this.write_indicator("?", true); + this.states.push(this.expect_flow_mapping_value); + return this.expect_node({ + mapping: true + }); + } + } + } + expect_flow_mapping_key() { + if (this.event instanceof events.MappingEndEvent) { + this.indent = this.indents.pop(); + this.flow_level--; + if (this.canonical) { + this.write_indicator(",", false); + this.write_indent(); + } + this.write_indicator("}", false); + return this.state = this.states.pop(); + } else { + this.write_indicator(",", false); + if (this.canonical || this.column > this.best_width) { + this.write_indent(); + } + if (!this.canonical && this.check_simple_key()) { + this.states.push(this.expect_flow_mapping_simple_value); + return this.expect_node({ + mapping: true, + simple_key: true + }); + } else { + this.write_indicator("?", true); + this.states.push(this.expect_flow_mapping_value); + return this.expect_node({ + mapping: true + }); + } + } + } + expect_flow_mapping_simple_value() { + this.write_indicator(":", false); + this.states.push(this.expect_flow_mapping_key); + return this.expect_node({ + mapping: true + }); + } + expect_flow_mapping_value() { + if (this.canonical || this.column > this.best_width) { + this.write_indent(); + } + this.write_indicator(":", true); + this.states.push(this.expect_flow_mapping_key); + return this.expect_node({ + mapping: true + }); + } + // Block sequence states + expect_block_sequence() { + var indentless; + indentless = this.mapping_context && !this.indentation; + this.increase_indent({ indentless }); + return this.state = this.expect_first_block_sequence_item; + } + expect_first_block_sequence_item() { + return this.expect_block_sequence_item(true); + } + expect_block_sequence_item(first = false) { + if (!first && this.event instanceof events.SequenceEndEvent) { + this.indent = this.indents.pop(); + return this.state = this.states.pop(); + } else { + this.write_indent(); + this.write_indicator("-", true, { + indentation: true + }); + this.states.push(this.expect_block_sequence_item); + return this.expect_node({ + sequence: true + }); + } + } + // Block mapping states + expect_block_mapping() { + this.increase_indent(); + return this.state = this.expect_first_block_mapping_key; + } + expect_first_block_mapping_key() { + return this.expect_block_mapping_key(true); + } + expect_block_mapping_key(first = false) { + if (!first && this.event instanceof events.MappingEndEvent) { + this.indent = this.indents.pop(); + return this.state = this.states.pop(); + } else { + this.write_indent(); + if (this.check_simple_key()) { + this.states.push(this.expect_block_mapping_simple_value); + return this.expect_node({ + mapping: true, + simple_key: true + }); + } else { + this.write_indicator("?", true, { + indentation: true + }); + this.states.push(this.expect_block_mapping_value); + return this.expect_node({ + mapping: true + }); + } + } + } + expect_block_mapping_simple_value() { + this.write_indicator(":", false); + this.states.push(this.expect_block_mapping_key); + return this.expect_node({ + mapping: true + }); + } + expect_block_mapping_value() { + this.write_indent(); + this.write_indicator(":", true, { + indentation: true + }); + this.states.push(this.expect_block_mapping_key); + return this.expect_node({ + mapping: true + }); + } + // Checkers + check_empty_document() { + var event; + if (!(this.event instanceof events.DocumentStartEvent) || this.events.length === 0) { + return false; + } + event = this.events[0]; + return event instanceof events.ScalarEvent && event.anchor == null && event.tag == null && event.implicit && event.value === ""; + } + check_empty_sequence() { + return this.event instanceof events.SequenceStartEvent && this.events[0] instanceof events.SequenceEndEvent; + } + check_empty_mapping() { + return this.event instanceof events.MappingStartEvent && this.events[0] instanceof events.MappingEndEvent; + } + check_simple_key() { + var length; + length = 0; + if (this.event instanceof events.NodeEvent && this.event.anchor != null) { + if (this.prepared_anchor == null) { + this.prepared_anchor = this.prepare_anchor(this.event.anchor); + } + length += this.prepared_anchor.length; + } + if (this.event.tag != null && (this.event instanceof events.ScalarEvent || this.event instanceof events.CollectionStartEvent)) { + if (this.prepared_tag == null) { + this.prepared_tag = this.prepare_tag(this.event.tag); + } + length += this.prepared_tag.length; + } + if (this.event instanceof events.ScalarEvent) { + if (this.analysis == null) { + this.analysis = this.analyze_scalar(this.event.value); + } + length += this.analysis.scalar.length; + } + return length < 128 && (this.event instanceof events.AliasEvent || this.event instanceof events.ScalarEvent && !this.analysis.empty && !this.analysis.multiline || this.check_empty_sequence() || this.check_empty_mapping()); + } + // Anchor, Tag and Scalar processors + process_anchor(indicator) { + if (this.event.anchor == null) { + this.prepared_anchor = null; + return; + } + if (this.prepared_anchor == null) { + this.prepared_anchor = this.prepare_anchor(this.event.anchor); + } + if (this.prepared_anchor) { + this.write_indicator(`${indicator}${this.prepared_anchor}`, true); + } + return this.prepared_anchor = null; + } + process_tag() { + var tag; + tag = this.event.tag; + if (this.event instanceof events.ScalarEvent) { + if (this.style == null) { + this.style = this.choose_scalar_style(); + } + if ((!this.canonical || tag == null) && (this.style === "" && this.event.implicit[0] || this.style !== "" && this.event.implicit[1])) { + this.prepared_tag = null; + return; + } + if (this.event.implicit[0] && tag == null) { + tag = "!"; + this.prepared_tag = null; + } + } else if ((!this.canonical || tag == null) && this.event.implicit) { + this.prepared_tag = null; + return; + } + if (tag == null) { + this.error("tag is not specified"); + } + if (this.prepared_tag == null) { + this.prepared_tag = this.prepare_tag(tag); + } + this.write_indicator(this.prepared_tag, true); + return this.prepared_tag = null; + } + process_scalar() { + var split; + if (this.analysis == null) { + this.analysis = this.analyze_scalar(this.event.value); + } + if (this.style == null) { + this.style = this.choose_scalar_style(); + } + split = !this.simple_key_context; + switch (this.style) { + case '"': + this.write_double_quoted(this.analysis.scalar, split); + break; + case "'": + this.write_single_quoted(this.analysis.scalar, split); + break; + case ">": + this.write_folded(this.analysis.scalar); + break; + case "|": + this.write_literal(this.analysis.scalar); + break; + default: + this.write_plain(this.analysis.scalar, split); + } + this.analysis = null; + return this.style = null; + } + choose_scalar_style() { + var ref; + if (this.analysis == null) { + this.analysis = this.analyze_scalar(this.event.value); + } + if (this.event.style === '"' || this.canonical) { + return '"'; + } + if (!this.event.style && this.event.implicit[0] && !(this.simple_key_context && (this.analysis.empty || this.analysis.multiline)) && (this.flow_level && this.analysis.allow_flow_plain || !this.flow_level && this.analysis.allow_block_plain)) { + return ""; + } + if (this.event.style && (ref = this.event.style, indexOf.call("|>", ref) >= 0) && !this.flow_level && !this.simple_key_context && this.analysis.allow_block) { + return this.event.style; + } + if ((!this.event.style || this.event.style === "'") && this.analysis.allow_single_quoted && !(this.simple_key_context && this.analysis.multiline)) { + return "'"; + } + return '"'; + } + // Analyzers + prepare_version([major, minor]) { + var version; + version = `${major}.${minor}`; + if (major === 1) { + return version; + } else { + return this.error("unsupported YAML version", version); + } + } + prepare_tag_handle(handle) { + var char, i, len, ref; + if (!handle) { + this.error("tag handle must not be empty"); + } + if (handle[0] !== "!" || handle.slice(-1) !== "!") { + this.error("tag handle must start and end with '!':", handle); + } + ref = handle.slice(1, -1); + for (i = 0, len = ref.length; i < len; i++) { + char = ref[i]; + if (!(char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-_", char) >= 0)) { + this.error(`invalid character '${char}' in the tag handle:`, handle); + } + } + return handle; + } + prepare_tag_prefix(prefix) { + var char, chunks, end, start; + if (!prefix) { + this.error("tag prefix must not be empty"); + } + chunks = []; + start = 0; + end = +(prefix[0] === "!"); + while (end < prefix.length) { + char = prefix[end]; + if (char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-;/?!:@&=+$,_.~*'()[]", char) >= 0) { + end++; + } else { + if (start < end) { + chunks.push(prefix.slice(start, end)); + } + start = end += 1; + chunks.push(char); + } + } + if (start < end) { + chunks.push(prefix.slice(start, end)); + } + return chunks.join(""); + } + prepare_tag(tag) { + var char, chunks, end, handle, i, k, len, prefix, ref, start, suffix, suffix_text; + if (!tag) { + this.error("tag must not be empty"); + } + if (tag === "!") { + return tag; + } + handle = null; + suffix = tag; + ref = (function() { + var ref2, results; + ref2 = this.tag_prefixes; + results = []; + for (k in ref2) { + if (!hasProp.call(ref2, k)) continue; + results.push(k); + } + return results; + }).call(this).sort(); + for (i = 0, len = ref.length; i < len; i++) { + prefix = ref[i]; + if (tag.indexOf(prefix) === 0 && (prefix === "!" || prefix.length < tag.length)) { + handle = this.tag_prefixes[prefix]; + suffix = tag.slice(prefix.length); + } + } + chunks = []; + start = end = 0; + while (end < suffix.length) { + char = suffix[end]; + if (char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-;/?!:@&=+$,_.~*'()[]", char) >= 0 || char === "!" && handle !== "!") { + end++; + } else { + if (start < end) { + chunks.push(suffix.slice(start, end)); + } + start = end += 1; + chunks.push(char); + } + } + if (start < end) { + chunks.push(suffix.slice(start, end)); + } + suffix_text = chunks.join(""); + if (handle) { + return `${handle}${suffix_text}`; + } else { + return `!<${suffix_text}>`; + } + } + prepare_anchor(anchor) { + var char, i, len; + if (!anchor) { + this.error("anchor must not be empty"); + } + for (i = 0, len = anchor.length; i < len; i++) { + char = anchor[i]; + if (!(char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-_", char) >= 0)) { + this.error(`invalid character '${char}' in the anchor:`, anchor); + } + } + return anchor; + } + analyze_scalar(scalar) { + var allow_block, allow_block_plain, allow_double_quoted, allow_flow_plain, allow_single_quoted, block_indicators, break_space, char, flow_indicators, followed_by_whitespace, i, index, leading_break, leading_space, len, line_breaks, preceded_by_whitespace, previous_break, previous_space, ref, ref1, space_break, special_characters, trailing_break, trailing_space, unicode_characters; + if (!scalar) { + new ScalarAnalysis(scalar, true, false, false, true, true, true, false); + } + block_indicators = false; + flow_indicators = false; + line_breaks = false; + special_characters = false; + unicode_characters = false; + leading_space = false; + leading_break = false; + trailing_space = false; + trailing_break = false; + break_space = false; + space_break = false; + if (scalar.indexOf("---") === 0 || scalar.indexOf("...") === 0) { + block_indicators = true; + flow_indicators = true; + } + preceded_by_whitespace = true; + followed_by_whitespace = scalar.length === 1 || (ref = scalar[1], indexOf.call("\0 \r\n\x85\u2028\u2029", ref) >= 0); + previous_space = false; + previous_break = false; + index = 0; + for (index = i = 0, len = scalar.length; i < len; index = ++i) { + char = scalar[index]; + if (index === 0) { + if (indexOf.call("#,[]{}&*!|>'\"%@`", char) >= 0 || char === "-" && followed_by_whitespace) { + flow_indicators = true; + block_indicators = true; + } else if (indexOf.call("?:", char) >= 0) { + flow_indicators = true; + if (followed_by_whitespace) { + block_indicators = true; + } + } + } else { + if (indexOf.call(",?[]{}", char) >= 0) { + flow_indicators = true; + } else if (char === ":") { + flow_indicators = true; + if (followed_by_whitespace) { + block_indicators = true; + } + } else if (char === "#" && preceded_by_whitespace) { + flow_indicators = true; + block_indicators = true; + } + } + if (indexOf.call("\n\x85\u2028\u2029", char) >= 0) { + line_breaks = true; + } + if (!(char === "\n" || char >= " " && char <= "~")) { + if (char !== "\uFEFF" && (char === "\x85" || char >= "\xA0" && char <= "\uD7FF" || char >= "\uE000" && char <= "\uFFFD")) { + unicode_characters = true; + if (!this.allow_unicode) { + special_characters = true; + } + } else { + special_characters = true; + } + } + if (char === " ") { + if (index === 0) { + leading_space = true; + } + if (index === scalar.length - 1) { + trailing_space = true; + } + if (previous_break) { + break_space = true; + } + previous_break = false; + previous_space = true; + } else if (indexOf.call("\n\x85\u2028\u2029", char) >= 0) { + if (index === 0) { + leading_break = true; + } + if (index === scalar.length - 1) { + trailing_break = true; + } + if (previous_space) { + space_break = true; + } + previous_break = true; + previous_space = false; + } else { + previous_break = false; + previous_space = false; + } + preceded_by_whitespace = indexOf.call(C_WHITESPACE, char) >= 0; + followed_by_whitespace = index + 2 >= scalar.length || (ref1 = scalar[index + 2], indexOf.call(C_WHITESPACE, ref1) >= 0); + } + allow_flow_plain = true; + allow_block_plain = true; + allow_single_quoted = true; + allow_double_quoted = true; + allow_block = true; + if (leading_space || leading_break || trailing_space || trailing_break) { + allow_flow_plain = allow_block_plain = false; + } + if (trailing_space) { + allow_block = false; + } + if (break_space) { + allow_flow_plain = allow_block_plain = allow_single_quoted = false; + } + if (space_break || special_characters) { + allow_flow_plain = allow_block_plain = allow_single_quoted = allow_block = false; + } + if (line_breaks) { + allow_flow_plain = allow_block_plain = false; + } + if (flow_indicators) { + allow_flow_plain = false; + } + if (block_indicators) { + allow_block_plain = false; + } + return new ScalarAnalysis(scalar, false, line_breaks, allow_flow_plain, allow_block_plain, allow_single_quoted, allow_double_quoted, allow_block); + } + // Writers + /* + Write BOM if needed. + */ + write_stream_start() { + if (this.encoding && this.encoding.indexOf("utf-16") === 0) { + return this.stream.write("\uFEFF", this.encoding); + } + } + write_stream_end() { + return this.flush_stream(); + } + write_indicator(indicator, need_whitespace, options = {}) { + var data; + data = this.whitespace || !need_whitespace ? indicator : " " + indicator; + this.whitespace = !!options.whitespace; + this.indentation && (this.indentation = !!options.indentation); + this.column += data.length; + this.open_ended = false; + return this.stream.write(data, this.encoding); + } + write_indent() { + var data, indent, ref; + indent = (ref = this.indent) != null ? ref : 0; + if (!this.indentation || this.column > indent || this.column === indent && !this.whitespace) { + this.write_line_break(); + } + if (this.column < indent) { + this.whitespace = true; + data = new Array(indent - this.column + 1).join(" "); + this.column = indent; + return this.stream.write(data, this.encoding); + } + } + write_line_break(data) { + this.whitespace = true; + this.indentation = true; + this.line += 1; + this.column = 0; + return this.stream.write(data != null ? data : this.best_line_break, this.encoding); + } + write_version_directive(version_text) { + this.stream.write(`%YAML ${version_text}`, this.encoding); + return this.write_line_break(); + } + write_tag_directive(handle_text, prefix_text) { + this.stream.write(`%TAG ${handle_text} ${prefix_text}`, this.encoding); + return this.write_line_break(); + } + write_single_quoted(text, split = true) { + var br, breaks, char, data, end, i, len, ref, spaces, start; + this.write_indicator("'", true); + spaces = false; + breaks = false; + start = end = 0; + while (end <= text.length) { + char = text[end]; + if (spaces) { + if (char == null || char !== " ") { + if (start + 1 === end && this.column > this.best_width && split && start !== 0 && end !== text.length) { + this.write_indent(); + } else { + data = text.slice(start, end); + this.column += data.length; + this.stream.write(data, this.encoding); + } + start = end; + } + } else if (breaks) { + if (char == null || indexOf.call("\n\x85\u2028\u2029", char) < 0) { + if (text[start] === "\n") { + this.write_line_break(); + } + ref = text.slice(start, end); + for (i = 0, len = ref.length; i < len; i++) { + br = ref[i]; + if (br === "\n") { + this.write_line_break(); + } else { + this.write_line_break(br); + } + } + this.write_indent(); + start = end; + } + } else if ((char == null || indexOf.call(" \n\x85\u2028\u2029", char) >= 0 || char === "'") && start < end) { + data = text.slice(start, end); + this.column += data.length; + this.stream.write(data, this.encoding); + start = end; + } + if (char === "'") { + this.column += 2; + this.stream.write("''", this.encoding); + start = end + 1; + } + if (char != null) { + spaces = char === " "; + breaks = indexOf.call("\n\x85\u2028\u2029", char) >= 0; + } + end++; + } + return this.write_indicator("'", false); + } + write_double_quoted(text, split = true) { + var char, data, end, start; + this.write_indicator('"', true); + start = end = 0; + while (end <= text.length) { + char = text[end]; + if (char == null || indexOf.call('"\\\x85\u2028\u2029\uFEFF', char) >= 0 || !(char >= " " && char <= "~" || this.allow_unicode && (char >= "\xA0" && char <= "\uD7FF" || char >= "\uE000" && char <= "\uFFFD"))) { + if (start < end) { + data = text.slice(start, end); + this.column += data.length; + this.stream.write(data, this.encoding); + start = end; + } + if (char != null) { + data = char in ESCAPE_REPLACEMENTS ? "\\" + ESCAPE_REPLACEMENTS[char] : char <= "\xFF" ? `\\x${util.pad_left(util.to_hex(char), "0", 2)}` : char <= "\uFFFF" ? `\\u${util.pad_left(util.to_hex(char), "0", 4)}` : `\\U${util.pad_left(util.to_hex(char), "0", 16)}`; + this.column += data.length; + this.stream.write(data, this.encoding); + start = end + 1; + } + } + if (split && (end > 0 && end < text.length - 1) && (char === " " || start >= end) && this.column + (end - start) > this.best_width) { + data = `${text.slice(start, end)}\\`; + if (start < end) { + start = end; + } + this.column += data.length; + this.stream.write(data, this.encoding); + this.write_indent(); + this.whitespace = false; + this.indentation = false; + if (text[start] === " ") { + data = "\\"; + this.column += data.length; + this.stream.write(data, this.encoding); + } + } + end++; + } + return this.write_indicator('"', false); + } + write_folded(text) { + var br, breaks, char, data, end, hints, i, leading_space, len, ref, results, spaces, start; + hints = this.determine_block_hints(text); + this.write_indicator(`>${hints}`, true); + if (hints.slice(-1) === "+") { + this.open_ended = true; + } + this.write_line_break(); + leading_space = true; + breaks = true; + spaces = false; + start = end = 0; + results = []; + while (end <= text.length) { + char = text[end]; + if (breaks) { + if (char == null || indexOf.call("\n\x85\u2028\u2029", char) < 0) { + if (!leading_space && char != null && char !== " " && text[start] === "\n") { + this.write_line_break(); + } + leading_space = char === " "; + ref = text.slice(start, end); + for (i = 0, len = ref.length; i < len; i++) { + br = ref[i]; + if (br === "\n") { + this.write_line_break(); + } else { + this.write_line_break(br); + } + } + if (char != null) { + this.write_indent(); + } + start = end; + } + } else if (spaces) { + if (char !== " ") { + if (start + 1 === end && this.column > this.best_width) { + this.write_indent(); + } else { + data = text.slice(start, end); + this.column += data.length; + this.stream.write(data, this.encoding); + } + start = end; + } + } else if (char == null || indexOf.call(" \n\x85\u2028\u2029", char) >= 0) { + data = text.slice(start, end); + this.column += data.length; + this.stream.write(data, this.encoding); + if (char == null) { + this.write_line_break(); + } + start = end; + } + if (char != null) { + breaks = indexOf.call("\n\x85\u2028\u2029", char) >= 0; + spaces = char === " "; + } + results.push(end++); + } + return results; + } + write_literal(text) { + var br, breaks, char, data, end, hints, i, len, ref, results, start; + hints = this.determine_block_hints(text); + this.write_indicator(`|${hints}`, true); + if (hints.slice(-1) === "+") { + this.open_ended = true; + } + this.write_line_break(); + breaks = true; + start = end = 0; + results = []; + while (end <= text.length) { + char = text[end]; + if (breaks) { + if (char == null || indexOf.call("\n\x85\u2028\u2029", char) < 0) { + ref = text.slice(start, end); + for (i = 0, len = ref.length; i < len; i++) { + br = ref[i]; + if (br === "\n") { + this.write_line_break(); + } else { + this.write_line_break(br); + } + } + if (char != null) { + this.write_indent(); + } + start = end; + } + } else { + if (char == null || indexOf.call("\n\x85\u2028\u2029", char) >= 0) { + data = text.slice(start, end); + this.stream.write(data, this.encoding); + if (char == null) { + this.write_line_break(); + } + start = end; + } + } + if (char != null) { + breaks = indexOf.call("\n\x85\u2028\u2029", char) >= 0; + } + results.push(end++); + } + return results; + } + write_plain(text, split = true) { + var br, breaks, char, data, end, i, len, ref, results, spaces, start; + if (!text) { + return; + } + if (this.root_context) { + this.open_ended = true; + } + if (!this.whitespace) { + data = " "; + this.column += data.length; + this.stream.write(data, this.encoding); + } + this.whitespace = false; + this.indentation = false; + spaces = false; + breaks = false; + start = end = 0; + results = []; + while (end <= text.length) { + char = text[end]; + if (spaces) { + if (char !== " ") { + if (start + 1 === end && this.column > this.best_width && split) { + this.write_indent(); + this.whitespace = false; + this.indentation = false; + } else { + data = text.slice(start, end); + this.column += data.length; + this.stream.write(data, this.encoding); + } + start = end; + } + } else if (breaks) { + if (indexOf.call("\n\x85\u2028\u2029", char) < 0) { + if (text[start] === "\n") { + this.write_line_break(); + } + ref = text.slice(start, end); + for (i = 0, len = ref.length; i < len; i++) { + br = ref[i]; + if (br === "\n") { + this.write_line_break(); + } else { + this.write_line_break(br); + } + } + this.write_indent(); + this.whitespace = false; + this.indentation = false; + start = end; + } + } else { + if (char == null || indexOf.call(" \n\x85\u2028\u2029", char) >= 0) { + data = text.slice(start, end); + this.column += data.length; + this.stream.write(data, this.encoding); + start = end; + } + } + if (char != null) { + spaces = char === " "; + breaks = indexOf.call("\n\x85\u2028\u2029", char) >= 0; + } + results.push(end++); + } + return results; + } + determine_block_hints(text) { + var first, hints, i, last, penultimate; + hints = ""; + first = text[0], i = text.length - 2, penultimate = text[i++], last = text[i++]; + if (indexOf.call(" \n\x85\u2028\u2029", first) >= 0) { + hints += this.best_indent; + } + if (indexOf.call("\n\x85\u2028\u2029", last) < 0) { + hints += "-"; + } else if (text.length === 1 || indexOf.call("\n\x85\u2028\u2029", penultimate) >= 0) { + hints += "+"; + } + return hints; + } + flush_stream() { + var base; + return typeof (base = this.stream).flush === "function" ? base.flush() : void 0; + } + /* + Helper for common error pattern. + */ + error(message, context) { + var ref, ref1; + if (context) { + context = (ref = context != null ? (ref1 = context.constructor) != null ? ref1.name : void 0 : void 0) != null ? ref : util.inspect(context); + } + throw new exports.EmitterError(`${message}${context ? ` ${context}` : ""}`); + } + } + + C_WHITESPACE = "\0 \r\n\x85\u2028\u2029"; + DEFAULT_TAG_PREFIXES = { + "!": "!", + "tag:yaml.org,2002:": "!!" + }; + ESCAPE_REPLACEMENTS = { + "\0": "0", + "\x07": "a", + "\b": "b", + " ": "t", + "\n": "n", + "\v": "v", + "\f": "f", + "\r": "r", + "\x1B": "e", + '"': '"', + "\\": "\\", + "\x85": "N", + "\xA0": "_", + "\u2028": "L", + "\u2029": "P" + }; + ctor = Emitter.prototype.initialise; + return Emitter; + }).call(this); + ScalarAnalysis = class ScalarAnalysis { + constructor(scalar1, empty, multiline, allow_flow_plain1, allow_block_plain1, allow_single_quoted1, allow_double_quoted1, allow_block1) { + this.scalar = scalar1; + this.empty = empty; + this.multiline = multiline; + this.allow_flow_plain = allow_flow_plain1; + this.allow_block_plain = allow_block_plain1; + this.allow_single_quoted = allow_single_quoted1; + this.allow_double_quoted = allow_double_quoted1; + this.allow_block = allow_block1; + } + }; + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/serializer.js +var require_serializer = __commonJS({ + "node_modules/yaml-js/lib/serializer.js"(exports) { + (function() { + var YAMLError, events, nodes, util; + events = require_events(); + nodes = require_nodes(); + util = require_util(); + ({ YAMLError } = require_errors()); + this.SerializerError = class SerializerError extends YAMLError { + }; + this.Serializer = (function() { + var ctor; + class Serializer { + constructor() { + return ctor.apply(this, arguments); + } + initialise({ + encoding, + explicit_start, + explicit_end, + version, + tags + } = {}) { + this.encoding = encoding; + this.explicit_start = explicit_start; + this.explicit_end = explicit_end; + this.version = version; + this.tags = tags; + this.serialized_nodes = {}; + this.anchors = {}; + this.last_anchor_id = 0; + return this.closed = null; + } + open() { + if (this.closed === null) { + this.emit(new events.StreamStartEvent(this.encoding)); + return this.closed = false; + } else if (this.closed) { + throw new SerializerError("serializer is closed"); + } else { + throw new SerializerError("serializer is already open"); + } + } + close() { + if (this.closed === null) { + throw new SerializerError("serializer is not opened"); + } else if (!this.closed) { + this.emit(new events.StreamEndEvent()); + return this.closed = true; + } + } + serialize(node) { + if (this.closed === null) { + throw new SerializerError("serializer is not opened"); + } else if (this.closed) { + throw new SerializerError("serializer is closed"); + } + if (node != null) { + this.emit(new events.DocumentStartEvent(void 0, void 0, this.explicit_start, this.version, this.tags)); + this.anchor_node(node); + this.serialize_node(node); + this.emit(new events.DocumentEndEvent(void 0, void 0, this.explicit_end)); + } + this.serialized_nodes = {}; + this.anchors = {}; + return this.last_anchor_id = 0; + } + anchor_node(node) { + var base, i, item, j, key, len, len1, name, ref, ref1, results, results1, value; + if (node.unique_id in this.anchors) { + return (base = this.anchors)[name = node.unique_id] != null ? base[name] : base[name] = this.generate_anchor(node); + } else { + this.anchors[node.unique_id] = null; + if (node instanceof nodes.SequenceNode) { + ref = node.value; + results = []; + for (i = 0, len = ref.length; i < len; i++) { + item = ref[i]; + results.push(this.anchor_node(item)); + } + return results; + } else if (node instanceof nodes.MappingNode) { + ref1 = node.value; + results1 = []; + for (j = 0, len1 = ref1.length; j < len1; j++) { + [key, value] = ref1[j]; + this.anchor_node(key); + results1.push(this.anchor_node(value)); + } + return results1; + } + } + } + generate_anchor(node) { + return `id${util.pad_left(++this.last_anchor_id, "0", 4)}`; + } + serialize_node(node, parent, index) { + var alias, default_tag, detected_tag, i, implicit, item, j, key, len, len1, ref, ref1, value; + alias = this.anchors[node.unique_id]; + if (node.unique_id in this.serialized_nodes) { + return this.emit(new events.AliasEvent(alias)); + } else { + this.serialized_nodes[node.unique_id] = true; + this.descend_resolver(parent, index); + if (node instanceof nodes.ScalarNode) { + detected_tag = this.resolve(nodes.ScalarNode, node.value, [true, false]); + default_tag = this.resolve(nodes.ScalarNode, node.value, [false, true]); + implicit = [node.tag === detected_tag, node.tag === default_tag]; + this.emit(new events.ScalarEvent(alias, node.tag, implicit, node.value, void 0, void 0, node.style)); + } else if (node instanceof nodes.SequenceNode) { + implicit = node.tag === this.resolve(nodes.SequenceNode, node.value, true); + this.emit(new events.SequenceStartEvent(alias, node.tag, implicit, void 0, void 0, node.flow_style)); + ref = node.value; + for (index = i = 0, len = ref.length; i < len; index = ++i) { + item = ref[index]; + this.serialize_node(item, node, index); + } + this.emit(new events.SequenceEndEvent()); + } else if (node instanceof nodes.MappingNode) { + implicit = node.tag === this.resolve(nodes.MappingNode, node.value, true); + this.emit(new events.MappingStartEvent(alias, node.tag, implicit, void 0, void 0, node.flow_style)); + ref1 = node.value; + for (j = 0, len1 = ref1.length; j < len1; j++) { + [key, value] = ref1[j]; + this.serialize_node(key, node, null); + this.serialize_node(value, node, key); + } + this.emit(new events.MappingEndEvent()); + } + return this.ascend_resolver(); + } + } + } + + ctor = Serializer.prototype.initialise; + return Serializer; + }).call(this); + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/representer.js +var require_representer = __commonJS({ + "node_modules/yaml-js/lib/representer.js"(exports) { + (function() { + var YAMLError, nodes, hasProp = {}.hasOwnProperty; + nodes = require_nodes(); + ({ YAMLError } = require_errors()); + this.RepresenterError = class RepresenterError extends YAMLError { + }; + this.BaseRepresenter = (function() { + var ctor; + class BaseRepresenter { + constructor() { + return ctor.apply(this, arguments); + } + static add_representer(data_type, handler) { + if (!this.prototype.hasOwnProperty("yaml_representers_types")) { + this.prototype.yaml_representers_types = [].concat(this.prototype.yaml_representers_types); + } + if (!this.prototype.hasOwnProperty("yaml_representers_handlers")) { + this.prototype.yaml_representers_handlers = [].concat(this.prototype.yaml_representers_handlers); + } + this.prototype.yaml_representers_types.push(data_type); + return this.prototype.yaml_representers_handlers.push(handler); + } + static add_multi_representer(data_type, handler) { + if (!this.prototype.hasOwnProperty("yaml_multi_representers_types")) { + this.prototype.yaml_multi_representers_types = [].concat(this.prototype.yaml_multi_representers_types); + } + if (!this.prototype.hasOwnProperty("yaml_multi_representers_handlers")) { + this.prototype.yaml_multi_representers_handlers = [].concat(this.prototype.yaml_multi_representers_handlers); + } + this.prototype.yaml_multi_representers_types.push(data_type); + return this.prototype.yaml_multi_representers_handlers.push(handler); + } + initialise({ + default_style, + default_flow_style + } = {}) { + this.default_style = default_style; + this.default_flow_style = default_flow_style; + this.represented_objects = {}; + this.object_keeper = []; + return this.alias_key = null; + } + represent(data) { + var node; + node = this.represent_data(data); + this.serialize(node); + this.represented_objects = {}; + this.object_keeper = []; + return this.alias_key = null; + } + represent_data(data) { + var data_type, i, j, len, ref, representer, type; + if (this.ignore_aliases(data)) { + this.alias_key = null; + } else if ((i = this.object_keeper.indexOf(data)) !== -1) { + this.alias_key = i; + if (this.alias_key in this.represented_objects) { + return this.represented_objects[this.alias_key]; + } + } else { + this.alias_key = this.object_keeper.length; + this.object_keeper.push(data); + } + representer = null; + data_type = data === null ? "null" : typeof data; + if (data_type === "object") { + data_type = data.constructor; + } + if ((i = this.yaml_representers_types.lastIndexOf(data_type)) !== -1) { + representer = this.yaml_representers_handlers[i]; + } + if (representer == null) { + ref = this.yaml_multi_representers_types; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + type = ref[i]; + if (!(data instanceof type)) { + continue; + } + representer = this.yaml_multi_representers_handlers[i]; + break; + } + } + if (representer == null) { + if ((i = this.yaml_multi_representers_types.lastIndexOf(void 0)) !== -1) { + representer = this.yaml_multi_representers_handlers[i]; + } else if ((i = this.yaml_representers_types.lastIndexOf(void 0)) !== -1) { + representer = this.yaml_representers_handlers[i]; + } + } + if (representer != null) { + return representer.call(this, data); + } else { + return new nodes.ScalarNode(null, `${data}`); + } + } + represent_scalar(tag, value, style = this.default_style) { + var node; + node = new nodes.ScalarNode(tag, value, null, null, style); + if (this.alias_key != null) { + this.represented_objects[this.alias_key] = node; + } + return node; + } + represent_sequence(tag, sequence, flow_style) { + var best_style, item, j, len, node, node_item, ref, value; + value = []; + node = new nodes.SequenceNode(tag, value, null, null, flow_style); + if (this.alias_key != null) { + this.represented_objects[this.alias_key] = node; + } + best_style = true; + for (j = 0, len = sequence.length; j < len; j++) { + item = sequence[j]; + node_item = this.represent_data(item); + if (!(node_item instanceof nodes.ScalarNode || node_item.style)) { + best_style = false; + } + value.push(node_item); + } + if (flow_style == null) { + node.flow_style = (ref = this.default_flow_style) != null ? ref : best_style; + } + return node; + } + represent_mapping(tag, mapping, flow_style) { + var best_style, item_key, item_value, node, node_key, node_value, ref, value; + value = []; + node = new nodes.MappingNode(tag, value, flow_style); + if (this.alias_key) { + this.represented_objects[this.alias_key] = node; + } + best_style = true; + for (item_key in mapping) { + if (!hasProp.call(mapping, item_key)) continue; + item_value = mapping[item_key]; + node_key = this.represent_data(item_key); + node_value = this.represent_data(item_value); + if (!(node_key instanceof nodes.ScalarNode || node_key.style)) { + best_style = false; + } + if (!(node_value instanceof nodes.ScalarNode || node_value.style)) { + best_style = false; + } + value.push([node_key, node_value]); + } + if (!flow_style) { + node.flow_style = (ref = this.default_flow_style) != null ? ref : best_style; + } + return node; + } + ignore_aliases(data) { + return false; + } + } + + BaseRepresenter.prototype.yaml_representers_types = []; + BaseRepresenter.prototype.yaml_representers_handlers = []; + BaseRepresenter.prototype.yaml_multi_representers_types = []; + BaseRepresenter.prototype.yaml_multi_representers_handlers = []; + ctor = BaseRepresenter.prototype.initialise; + return BaseRepresenter; + }).call(this); + this.Representer = class Representer extends this.BaseRepresenter { + represent_boolean(data) { + return this.represent_scalar("tag:yaml.org,2002:bool", data ? "true" : "false"); + } + represent_null(data) { + return this.represent_scalar("tag:yaml.org,2002:null", "null"); + } + represent_number(data) { + var tag, value; + tag = `tag:yaml.org,2002:${data % 1 === 0 ? "int" : "float"}`; + value = data !== data ? ".nan" : data === Infinity ? ".inf" : data === -Infinity ? "-.inf" : data.toString(); + return this.represent_scalar(tag, value); + } + represent_string(data) { + return this.represent_scalar("tag:yaml.org,2002:str", data); + } + represent_array(data) { + return this.represent_sequence("tag:yaml.org,2002:seq", data); + } + represent_date(data) { + return this.represent_scalar("tag:yaml.org,2002:timestamp", data.toISOString()); + } + represent_object(data) { + return this.represent_mapping("tag:yaml.org,2002:map", data); + } + represent_undefined(data) { + throw new exports.RepresenterError(`cannot represent an onbject: ${data}`); + } + ignore_aliases(data) { + var ref; + if (data == null) { + return true; + } + if ((ref = typeof data) === "boolean" || ref === "number" || ref === "string") { + return true; + } + return false; + } + }; + this.Representer.add_representer("boolean", this.Representer.prototype.represent_boolean); + this.Representer.add_representer("null", this.Representer.prototype.represent_null); + this.Representer.add_representer("number", this.Representer.prototype.represent_number); + this.Representer.add_representer("string", this.Representer.prototype.represent_string); + this.Representer.add_representer(Array, this.Representer.prototype.represent_array); + this.Representer.add_representer(Date, this.Representer.prototype.represent_date); + this.Representer.add_representer(Object, this.Representer.prototype.represent_object); + this.Representer.add_representer(null, this.Representer.prototype.represent_undefined); + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/resolver.js +var require_resolver = __commonJS({ + "node_modules/yaml-js/lib/resolver.js"(exports) { + (function() { + var YAMLError, nodes, util, { indexOf } = []; + nodes = require_nodes(); + util = require_util(); + ({ YAMLError } = require_errors()); + this.ResolverError = class ResolverError extends YAMLError { + }; + this.BaseResolver = (function() { + var DEFAULT_MAPPING_TAG, DEFAULT_SCALAR_TAG, DEFAULT_SEQUENCE_TAG, ctor; + class BaseResolver { + constructor() { + return ctor.apply(this, arguments); + } + static add_implicit_resolver(tag, regexp, first = [null]) { + var base, char, i, len, results; + if (!this.prototype.hasOwnProperty("yaml_implicit_resolvers")) { + this.prototype.yaml_implicit_resolvers = util.extend({}, this.prototype.yaml_implicit_resolvers); + } + results = []; + for (i = 0, len = first.length; i < len; i++) { + char = first[i]; + results.push(((base = this.prototype.yaml_implicit_resolvers)[char] != null ? base[char] : base[char] = []).push([tag, regexp])); + } + return results; + } + initialise() { + this.resolver_exact_paths = []; + return this.resolver_prefix_paths = []; + } + descend_resolver(current_node, current_index) { + var depth, exact_paths, i, j, kind, len, len1, path, prefix_paths, ref, ref1; + if (util.is_empty(this.yaml_path_resolvers)) { + return; + } + exact_paths = {}; + prefix_paths = []; + if (current_node) { + depth = this.resolver_prefix_paths.length; + ref = this.resolver_prefix_paths.slice(-1)[0]; + for (i = 0, len = ref.length; i < len; i++) { + [path, kind] = ref[i]; + if (this.check_resolver_prefix(depth, path, kind, current_node, current_index)) { + if (path.length > depth) { + prefix_paths.push([path, kind]); + } else { + exact_paths[kind] = this.yaml_path_resolvers[path][kind]; + } + } + } + } else { + ref1 = this.yaml_path_resolvers; + for (j = 0, len1 = ref1.length; j < len1; j++) { + [path, kind] = ref1[j]; + if (!path) { + exact_paths[kind] = this.yaml_path_resolvers[path][kind]; + } else { + prefix_paths.push([path, kind]); + } + } + } + this.resolver_exact_paths.push(exact_paths); + return this.resolver_prefix_paths.push(prefix_paths); + } + ascend_resolver() { + if (util.is_empty(this.yaml_path_resolvers)) { + return; + } + this.resolver_exact_paths.pop(); + return this.resolver_prefix_paths.pop(); + } + check_resolver_prefix(depth, path, kind, current_node, current_index) { + var index_check, node_check; + [node_check, index_check] = path[depth - 1]; + if (typeof node_check === "string") { + if (current_node.tag !== node_check) { + return; + } + } else if (node_check !== null) { + if (!(current_node instanceof node_check)) { + return; + } + } + if (index_check === true && current_index !== null) { + return; + } + if ((index_check === false || index_check === null) && current_index === null) { + return; + } + if (typeof index_check === "string") { + if (!(current_index instanceof nodes.ScalarNode) && index_check === current_index.value) { + return; + } + } else if (typeof index_check === "number") { + if (index_check !== current_index) { + return; + } + } + return true; + } + resolve(kind, value, implicit) { + var empty, exact_paths, i, k, len, ref, ref1, ref2, regexp, resolvers, tag; + if (kind === nodes.ScalarNode && implicit[0]) { + if (value === "") { + resolvers = (ref = this.yaml_implicit_resolvers[""]) != null ? ref : []; + } else { + resolvers = (ref1 = this.yaml_implicit_resolvers[value[0]]) != null ? ref1 : []; + } + resolvers = resolvers.concat((ref2 = this.yaml_implicit_resolvers.null) != null ? ref2 : []); + for (i = 0, len = resolvers.length; i < len; i++) { + [tag, regexp] = resolvers[i]; + if (value.match(regexp)) { + return tag; + } + } + implicit = implicit[1]; + } + empty = true; + for (k in this.yaml_path_resolvers) { + if ({}[k] == null) { + empty = false; + } + } + if (!empty) { + exact_paths = this.resolver_exact_paths.slice(-1)[0]; + if (indexOf.call(exact_paths, kind) >= 0) { + return exact_paths[kind]; + } + if (indexOf.call(exact_paths, null) >= 0) { + return exact_paths.null; + } + } + if (kind === nodes.ScalarNode) { + return DEFAULT_SCALAR_TAG; + } + if (kind === nodes.SequenceNode) { + return DEFAULT_SEQUENCE_TAG; + } + if (kind === nodes.MappingNode) { + return DEFAULT_MAPPING_TAG; + } + } + } + + DEFAULT_SCALAR_TAG = "tag:yaml.org,2002:str"; + DEFAULT_SEQUENCE_TAG = "tag:yaml.org,2002:seq"; + DEFAULT_MAPPING_TAG = "tag:yaml.org,2002:map"; + BaseResolver.prototype.yaml_implicit_resolvers = {}; + BaseResolver.prototype.yaml_path_resolvers = {}; + ctor = BaseResolver.prototype.initialise; + return BaseResolver; + }).call(this); + this.Resolver = class Resolver extends this.BaseResolver { + }; + this.Resolver.add_implicit_resolver("tag:yaml.org,2002:bool", /^(?:yes|Yes|YES|true|True|TRUE|on|On|ON|no|No|NO|false|False|FALSE|off|Off|OFF)$/, "yYnNtTfFoO"); + this.Resolver.add_implicit_resolver("tag:yaml.org,2002:float", /^(?:[-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+][0-9]+)?|\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/, "-+0123456789."); + this.Resolver.add_implicit_resolver("tag:yaml.org,2002:int", /^(?:[-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[0-9a-fA-F_]+|[-+]?0o[0-7_]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$/, "-+0123456789"); + this.Resolver.add_implicit_resolver("tag:yaml.org,2002:merge", /^(?:<<)$/, "<"); + this.Resolver.add_implicit_resolver("tag:yaml.org,2002:null", /^(?:~|null|Null|NULL|)$/, ["~", "n", "N", ""]); + this.Resolver.add_implicit_resolver("tag:yaml.org,2002:timestamp", /^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]|[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]?(?:[Tt]|[\x20\t]+)[0-9][0-9]?:[0-9][0-9]:[0-9][0-9](?:\.[0-9]*)?(?:[\x20\t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$/, "0123456789"); + this.Resolver.add_implicit_resolver("tag:yaml.org,2002:value", /^(?:=)$/, "="); + this.Resolver.add_implicit_resolver("tag:yaml.org,2002:yaml", /^(?:!|&|\*)$/, "!&*"); + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/dumper.js +var require_dumper = __commonJS({ + "node_modules/yaml-js/lib/dumper.js"(exports) { + (function() { + var emitter, representer, resolver, serializer, util; + util = require_util(); + emitter = require_emitter(); + serializer = require_serializer(); + representer = require_representer(); + resolver = require_resolver(); + this.make_dumper = function(Emitter = emitter.Emitter, Serializer = serializer.Serializer, Representer = representer.Representer, Resolver = resolver.Resolver) { + var Dumper, components; + components = [Emitter, Serializer, Representer, Resolver]; + return Dumper = (function() { + var component; + class Dumper2 { + constructor(stream, options = {}) { + var i, len, ref; + components[0].prototype.initialise.call(this, stream, options); + ref = components.slice(1); + for (i = 0, len = ref.length; i < len; i++) { + component = ref[i]; + component.prototype.initialise.call(this, options); + } + } + } + + util.extend(Dumper2.prototype, ...(function() { + var i, len, results; + results = []; + for (i = 0, len = components.length; i < len; i++) { + component = components[i]; + results.push(component.prototype); + } + return results; + })()); + return Dumper2; + }).call(this); + }; + this.Dumper = this.make_dumper(); + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/reader.js +var require_reader = __commonJS({ + "node_modules/yaml-js/lib/reader.js"(exports) { + (function() { + var Mark, YAMLError, { indexOf } = []; + ({ Mark, YAMLError } = require_errors()); + this.ReaderError = class ReaderError extends YAMLError { + constructor(position1, character1, reason) { + super(); + this.position = position1; + this.character = character1; + this.reason = reason; + } + toString() { + return `unacceptable character #${this.character.charCodeAt(0).toString(16)}: ${this.reason} + position ${this.position}`; + } + }; + this.Reader = (function() { + var NON_PRINTABLE, ctor; + class Reader { + constructor() { + return ctor.apply(this, arguments); + } + initialise(string) { + this.string = string; + this.line = 0; + this.column = 0; + this.index = 0; + this.check_printable(); + return this.string += "\0"; + } + peek(index = 0) { + return this.string[this.index + index]; + } + prefix(length = 1) { + return this.string.slice(this.index, this.index + length); + } + forward(length = 1) { + var char, results; + results = []; + while (length) { + char = this.string[this.index]; + this.index++; + if (indexOf.call("\n\x85\u2082\u2029", char) >= 0 || char === "\r" && this.string[this.index] !== "\n") { + this.line++; + this.column = 0; + } else { + this.column++; + } + results.push(length--); + } + return results; + } + get_mark() { + return new Mark(this.line, this.column, this.string, this.index); + } + check_printable() { + var character, match, position; + match = NON_PRINTABLE.exec(this.string); + if (match) { + character = match[0]; + position = this.string.length - this.index + match.index; + throw new exports.ReaderError(position, character, "special characters are not allowed"); + } + } + } + + NON_PRINTABLE = /[^\x09\x0A\x0D\x20-\x7E\x85\xA0-\uFFFD]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; + ctor = Reader.prototype.initialise; + return Reader; + }).call(this); + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/tokens.js +var require_tokens = __commonJS({ + "node_modules/yaml-js/lib/tokens.js"(exports) { + (function() { + this.Token = class Token { + constructor(start_mark1, end_mark1) { + this.start_mark = start_mark1; + this.end_mark = end_mark1; + } + }; + this.DirectiveToken = (function() { + class DirectiveToken extends this.Token { + constructor(name, value, start_mark, end_mark) { + super(start_mark, end_mark); + this.name = name; + this.value = value; + } + } + + DirectiveToken.prototype.id = ""; + return DirectiveToken; + }).call(this); + this.DocumentStartToken = (function() { + class DocumentStartToken extends this.Token { + } + + DocumentStartToken.prototype.id = ""; + return DocumentStartToken; + }).call(this); + this.DocumentEndToken = (function() { + class DocumentEndToken extends this.Token { + } + + DocumentEndToken.prototype.id = ""; + return DocumentEndToken; + }).call(this); + this.StreamStartToken = (function() { + class StreamStartToken extends this.Token { + constructor(start_mark, end_mark, encoding) { + super(start_mark, end_mark); + this.encoding = encoding; + } + } + + StreamStartToken.prototype.id = ""; + return StreamStartToken; + }).call(this); + this.StreamEndToken = (function() { + class StreamEndToken extends this.Token { + } + + StreamEndToken.prototype.id = ""; + return StreamEndToken; + }).call(this); + this.BlockSequenceStartToken = (function() { + class BlockSequenceStartToken extends this.Token { + } + + BlockSequenceStartToken.prototype.id = ""; + return BlockSequenceStartToken; + }).call(this); + this.BlockMappingStartToken = (function() { + class BlockMappingStartToken extends this.Token { + } + + BlockMappingStartToken.prototype.id = ""; + return BlockMappingStartToken; + }).call(this); + this.BlockEndToken = (function() { + class BlockEndToken extends this.Token { + } + + BlockEndToken.prototype.id = ""; + return BlockEndToken; + }).call(this); + this.FlowSequenceStartToken = (function() { + class FlowSequenceStartToken extends this.Token { + } + + FlowSequenceStartToken.prototype.id = "["; + return FlowSequenceStartToken; + }).call(this); + this.FlowMappingStartToken = (function() { + class FlowMappingStartToken extends this.Token { + } + + FlowMappingStartToken.prototype.id = "{"; + return FlowMappingStartToken; + }).call(this); + this.FlowSequenceEndToken = (function() { + class FlowSequenceEndToken extends this.Token { + } + + FlowSequenceEndToken.prototype.id = "]"; + return FlowSequenceEndToken; + }).call(this); + this.FlowMappingEndToken = (function() { + class FlowMappingEndToken extends this.Token { + } + + FlowMappingEndToken.prototype.id = "}"; + return FlowMappingEndToken; + }).call(this); + this.KeyToken = (function() { + class KeyToken extends this.Token { + } + + KeyToken.prototype.id = "?"; + return KeyToken; + }).call(this); + this.ValueToken = (function() { + class ValueToken extends this.Token { + } + + ValueToken.prototype.id = ":"; + return ValueToken; + }).call(this); + this.BlockEntryToken = (function() { + class BlockEntryToken extends this.Token { + } + + BlockEntryToken.prototype.id = "-"; + return BlockEntryToken; + }).call(this); + this.FlowEntryToken = (function() { + class FlowEntryToken extends this.Token { + } + + FlowEntryToken.prototype.id = ","; + return FlowEntryToken; + }).call(this); + this.AliasToken = (function() { + class AliasToken extends this.Token { + constructor(value, start_mark, end_mark) { + super(start_mark, end_mark); + this.value = value; + } + } + + AliasToken.prototype.id = ""; + return AliasToken; + }).call(this); + this.AnchorToken = (function() { + class AnchorToken extends this.Token { + constructor(value, start_mark, end_mark) { + super(start_mark, end_mark); + this.value = value; + } + } + + AnchorToken.prototype.id = ""; + return AnchorToken; + }).call(this); + this.TagToken = (function() { + class TagToken extends this.Token { + constructor(value, start_mark, end_mark) { + super(start_mark, end_mark); + this.value = value; + } + } + + TagToken.prototype.id = ""; + return TagToken; + }).call(this); + this.ScalarToken = (function() { + class ScalarToken extends this.Token { + constructor(value, plain, start_mark, end_mark, style) { + super(start_mark, end_mark); + this.value = value; + this.plain = plain; + this.style = style; + } + } + + ScalarToken.prototype.id = ""; + return ScalarToken; + }).call(this); + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/scanner.js +var require_scanner = __commonJS({ + "node_modules/yaml-js/lib/scanner.js"(exports) { + (function() { + var MarkedYAMLError, SimpleKey, tokens, util, hasProp = {}.hasOwnProperty, { indexOf } = []; + ({ MarkedYAMLError } = require_errors()); + tokens = require_tokens(); + util = require_util(); + this.ScannerError = class ScannerError extends MarkedYAMLError { + }; + SimpleKey = class SimpleKey { + constructor(token_number1, required1, index, line, column1, mark1) { + this.token_number = token_number1; + this.required = required1; + this.index = index; + this.line = line; + this.column = column1; + this.mark = mark1; + } + }; + this.Scanner = (function() { + var C_LB, C_NUMBERS, C_WS, ESCAPE_CODES, ESCAPE_REPLACEMENTS, ctor; + class Scanner { + constructor() { + return ctor.apply(this, arguments); + } + /* + Initialise the Scanner + */ + initialise() { + this.done = false; + this.flow_level = 0; + this.tokens = []; + this.fetch_stream_start(); + this.tokens_taken = 0; + this.indent = -1; + this.indents = []; + this.allow_simple_key = true; + return this.possible_simple_keys = {}; + } + // API methods. + /* + Check if the next token is one of the given types. + */ + check_token(...choices) { + var choice, i, len; + while (this.need_more_tokens()) { + this.fetch_more_tokens(); + } + if (this.tokens.length !== 0) { + if (choices.length === 0) { + return true; + } + for (i = 0, len = choices.length; i < len; i++) { + choice = choices[i]; + if (this.tokens[0] instanceof choice) { + return true; + } + } + } + return false; + } + /* + Return the next token, but do not delete it from the queue. + */ + peek_token() { + while (this.need_more_tokens()) { + this.fetch_more_tokens(); + } + if (this.tokens.length !== 0) { + return this.tokens[0]; + } + } + /* + Return the next token, and remove it from the queue. + */ + get_token() { + while (this.need_more_tokens()) { + this.fetch_more_tokens(); + } + if (this.tokens.length !== 0) { + this.tokens_taken++; + return this.tokens.shift(); + } + } + // Non-API methods. + need_more_tokens() { + if (this.done) { + return false; + } + if (this.tokens.length === 0) { + return true; + } + this.stale_possible_simple_keys(); + if (this.next_possible_simple_key() === this.tokens_taken) { + return true; + } + return false; + } + fetch_more_tokens() { + var char; + this.scan_to_next_token(); + this.stale_possible_simple_keys(); + this.unwind_indent(this.column); + char = this.peek(); + if (char === "\0") { + return this.fetch_stream_end(); + } + if (char === "%" && this.check_directive()) { + return this.fetch_directive(); + } + if (char === "-" && this.check_document_start()) { + return this.fetch_document_start(); + } + if (char === "." && this.check_document_end()) { + return this.fetch_document_end(); + } + if (char === "[") { + return this.fetch_flow_sequence_start(); + } + if (char === "{") { + return this.fetch_flow_mapping_start(); + } + if (char === "]") { + return this.fetch_flow_sequence_end(); + } + if (char === "}") { + return this.fetch_flow_mapping_end(); + } + if (char === ",") { + return this.fetch_flow_entry(); + } + if (char === "-" && this.check_block_entry()) { + return this.fetch_block_entry(); + } + if (char === "?" && this.check_key()) { + return this.fetch_key(); + } + if (char === ":" && this.check_value()) { + return this.fetch_value(); + } + if (char === "*") { + return this.fetch_alias(); + } + if (char === "&") { + return this.fetch_anchor(); + } + if (char === "!") { + return this.fetch_tag(); + } + if (char === "|" && this.flow_level === 0) { + return this.fetch_literal(); + } + if (char === ">" && this.flow_level === 0) { + return this.fetch_folded(); + } + if (char === "'") { + return this.fetch_single(); + } + if (char === '"') { + return this.fetch_double(); + } + if (this.check_plain()) { + return this.fetch_plain(); + } + throw new exports.ScannerError("while scanning for the next token", null, `found character ${char} that cannot start any token`, this.get_mark()); + } + // Simple keys treatment. + /* + Return the number of the nearest possible simple key. + */ + next_possible_simple_key() { + var key, level, min_token_number, ref; + min_token_number = null; + ref = this.possible_simple_keys; + for (level in ref) { + if (!hasProp.call(ref, level)) continue; + key = ref[level]; + if (min_token_number === null || key.token_number < min_token_number) { + min_token_number = key.token_number; + } + } + return min_token_number; + } + /* + Remove entries that are no longer possible simple keys. According to the + YAML spec, simple keys: + should be limited to a single line + should be no longer than 1024 characters + Disabling this procedure will allow simple keys of any length and height + (may cause problems if indentation is broken though). + */ + stale_possible_simple_keys() { + var key, level, ref, results; + ref = this.possible_simple_keys; + results = []; + for (level in ref) { + if (!hasProp.call(ref, level)) continue; + key = ref[level]; + if (key.line === this.line && this.index - key.index <= 1024) { + continue; + } + if (!key.required) { + results.push(delete this.possible_simple_keys[level]); + } else { + throw new exports.ScannerError("while scanning a simple key", key.mark, "could not find expected ':'", this.get_mark()); + } + } + return results; + } + /* + The next token may start a simple key. We check if it's possible and save + its position. This function is called for ALIAS, ANCHOR, TAG, + SCALAR (flow),'[' and '{'. + */ + save_possible_simple_key() { + var required, token_number; + required = this.flow_level === 0 && this.indent === this.column; + if (required && !this.allow_simple_key) { + throw new Error("logic failure"); + } + if (!this.allow_simple_key) { + return; + } + this.remove_possible_simple_key(); + token_number = this.tokens_taken + this.tokens.length; + return this.possible_simple_keys[this.flow_level] = new SimpleKey(token_number, required, this.index, this.line, this.column, this.get_mark()); + } + /* + Remove the saved possible simple key at the current flow level. + */ + remove_possible_simple_key() { + var key; + if (!(key = this.possible_simple_keys[this.flow_level])) { + return; + } + if (!key.required) { + return delete this.possible_simple_keys[this.flow_level]; + } else { + throw new exports.ScannerError("while scanning a simple key", key.mark, "could not find expected ':'", this.get_mark()); + } + } + // Indentation functions + /* + In flow context, tokens should respect indentation. + Actually the condition should be `self.indent >= column` according to + the spec. But this condition will prohibit intuitively correct + constructions such as + key : { + } + */ + unwind_indent(column) { + var mark, results; + if (this.flow_level !== 0) { + return; + } + results = []; + while (this.indent > column) { + mark = this.get_mark(); + this.indent = this.indents.pop(); + results.push(this.tokens.push(new tokens.BlockEndToken(mark, mark))); + } + return results; + } + /* + Check if we need to increase indentation. + */ + add_indent(column) { + if (!(column > this.indent)) { + return false; + } + this.indents.push(this.indent); + this.indent = column; + return true; + } + // Fetchers. + fetch_stream_start() { + var mark; + mark = this.get_mark(); + return this.tokens.push(new tokens.StreamStartToken(mark, mark, this.encoding)); + } + fetch_stream_end() { + var mark; + this.unwind_indent(-1); + this.remove_possible_simple_key(); + this.allow_possible_simple_key = false; + this.possible_simple_keys = {}; + mark = this.get_mark(); + this.tokens.push(new tokens.StreamEndToken(mark, mark)); + return this.done = true; + } + fetch_directive() { + this.unwind_indent(-1); + this.remove_possible_simple_key(); + this.allow_simple_key = false; + return this.tokens.push(this.scan_directive()); + } + fetch_document_start() { + return this.fetch_document_indicator(tokens.DocumentStartToken); + } + fetch_document_end() { + return this.fetch_document_indicator(tokens.DocumentEndToken); + } + fetch_document_indicator(TokenClass) { + var start_mark; + this.unwind_indent(-1); + this.remove_possible_simple_key(); + this.allow_simple_key = false; + start_mark = this.get_mark(); + this.forward(3); + return this.tokens.push(new TokenClass(start_mark, this.get_mark())); + } + fetch_flow_sequence_start() { + return this.fetch_flow_collection_start(tokens.FlowSequenceStartToken); + } + fetch_flow_mapping_start() { + return this.fetch_flow_collection_start(tokens.FlowMappingStartToken); + } + fetch_flow_collection_start(TokenClass) { + var start_mark; + this.save_possible_simple_key(); + this.flow_level++; + this.allow_simple_key = true; + start_mark = this.get_mark(); + this.forward(); + return this.tokens.push(new TokenClass(start_mark, this.get_mark())); + } + fetch_flow_sequence_end() { + return this.fetch_flow_collection_end(tokens.FlowSequenceEndToken); + } + fetch_flow_mapping_end() { + return this.fetch_flow_collection_end(tokens.FlowMappingEndToken); + } + fetch_flow_collection_end(TokenClass) { + var start_mark; + this.remove_possible_simple_key(); + this.flow_level--; + this.allow_simple_key = false; + start_mark = this.get_mark(); + this.forward(); + return this.tokens.push(new TokenClass(start_mark, this.get_mark())); + } + fetch_flow_entry() { + var start_mark; + this.allow_simple_key = true; + this.remove_possible_simple_key(); + start_mark = this.get_mark(); + this.forward(); + return this.tokens.push(new tokens.FlowEntryToken(start_mark, this.get_mark())); + } + fetch_block_entry() { + var mark, start_mark; + if (this.flow_level === 0) { + if (!this.allow_simple_key) { + throw new exports.ScannerError(null, null, "sequence entries are not allowed here", this.get_mark()); + } + if (this.add_indent(this.column)) { + mark = this.get_mark(); + this.tokens.push(new tokens.BlockSequenceStartToken(mark, mark)); + } + } + this.allow_simple_key = true; + this.remove_possible_simple_key(); + start_mark = this.get_mark(); + this.forward(); + return this.tokens.push(new tokens.BlockEntryToken(start_mark, this.get_mark())); + } + fetch_key() { + var mark, start_mark; + if (this.flow_level === 0) { + if (!this.allow_simple_key) { + throw new exports.ScannerError(null, null, "mapping keys are not allowed here", this.get_mark()); + } + if (this.add_indent(this.column)) { + mark = this.get_mark(); + this.tokens.push(new tokens.BlockMappingStartToken(mark, mark)); + } + } + this.allow_simple_key = !this.flow_level; + this.remove_possible_simple_key(); + start_mark = this.get_mark(); + this.forward(); + return this.tokens.push(new tokens.KeyToken(start_mark, this.get_mark())); + } + fetch_value() { + var key, mark, start_mark; + if (key = this.possible_simple_keys[this.flow_level]) { + delete this.possible_simple_keys[this.flow_level]; + this.tokens.splice(key.token_number - this.tokens_taken, 0, new tokens.KeyToken(key.mark, key.mark)); + if (this.flow_level === 0) { + if (this.add_indent(key.column)) { + this.tokens.splice(key.token_number - this.tokens_taken, 0, new tokens.BlockMappingStartToken(key.mark, key.mark)); + } + } + this.allow_simple_key = false; + } else { + if (this.flow_level === 0) { + if (!this.allow_simple_key) { + throw new exports.ScannerError(null, null, "mapping values are not allowed here", this.get_mark()); + } + if (this.add_indent(this.column)) { + mark = this.get_mark(); + this.tokens.push(new tokens.BlockMappingStartToken(mark, mark)); + } + } + this.allow_simple_key = !this.flow_level; + this.remove_possible_simple_key(); + } + start_mark = this.get_mark(); + this.forward(); + return this.tokens.push(new tokens.ValueToken(start_mark, this.get_mark())); + } + fetch_alias() { + this.save_possible_simple_key(); + this.allow_simple_key = false; + return this.tokens.push(this.scan_anchor(tokens.AliasToken)); + } + fetch_anchor() { + this.save_possible_simple_key(); + this.allow_simple_key = false; + return this.tokens.push(this.scan_anchor(tokens.AnchorToken)); + } + fetch_tag() { + this.save_possible_simple_key(); + this.allow_simple_key = false; + return this.tokens.push(this.scan_tag()); + } + fetch_literal() { + return this.fetch_block_scalar("|"); + } + fetch_folded() { + return this.fetch_block_scalar(">"); + } + fetch_block_scalar(style) { + this.allow_simple_key = true; + this.remove_possible_simple_key(); + return this.tokens.push(this.scan_block_scalar(style)); + } + fetch_single() { + return this.fetch_flow_scalar("'"); + } + fetch_double() { + return this.fetch_flow_scalar('"'); + } + fetch_flow_scalar(style) { + this.save_possible_simple_key(); + this.allow_simple_key = false; + return this.tokens.push(this.scan_flow_scalar(style)); + } + fetch_plain() { + this.save_possible_simple_key(); + this.allow_simple_key = false; + return this.tokens.push(this.scan_plain()); + } + // Checkers. + /* + DIRECTIVE: ^ '%' + */ + check_directive() { + if (this.column === 0) { + return true; + } + return false; + } + /* + DOCUMENT-START: ^ '---' (' '|'\n') + */ + check_document_start() { + var ref; + if (this.column === 0 && this.prefix(3) === "---" && (ref = this.peek(3), indexOf.call(C_LB + C_WS + "\0", ref) >= 0)) { + return true; + } + return false; + } + /* + DOCUMENT-END: ^ '...' (' '|'\n') + */ + check_document_end() { + var ref; + if (this.column === 0 && this.prefix(3) === "..." && (ref = this.peek(3), indexOf.call(C_LB + C_WS + "\0", ref) >= 0)) { + return true; + } + return false; + } + /* + BLOCK-ENTRY: '-' (' '|'\n') + */ + check_block_entry() { + var ref; + return ref = this.peek(1), indexOf.call(C_LB + C_WS + "\0", ref) >= 0; + } + /* + KEY (flow context): '?' + KEY (block context): '?' (' '|'\n') + */ + check_key() { + var ref; + if (this.flow_level !== 0) { + return true; + } + return ref = this.peek(1), indexOf.call(C_LB + C_WS + "\0", ref) >= 0; + } + /* + VALUE (flow context): ':' + VALUE (block context): ':' (' '|'\n') + */ + check_value() { + var ref; + if (this.flow_level !== 0) { + return true; + } + return ref = this.peek(1), indexOf.call(C_LB + C_WS + "\0", ref) >= 0; + } + /* + A plain scalar may start with any non-space character except: + '-', '?', ':', ',', '[', ']', '{', '}', + '#', '&', '*', '!', '|', '>', '\'', '"', + '%', '@', '`'. + + It may also start with + '-', '?', ':' + if it is followed by a non-space character. + + Note that we limit the last rule to the block context (except the '-' + character) because we want the flow context to be space independent. + */ + check_plain() { + var char, ref; + char = this.peek(); + return indexOf.call(C_LB + C_WS + "\0-?:,[]{}#&*!|>'\"%@`", char) < 0 || (ref = this.peek(1), indexOf.call(C_LB + C_WS + "\0", ref) < 0) && (char === "-" || this.flow_level === 0 && indexOf.call("?:", char) >= 0); + } + // Scanners. + /* + We ignore spaces, line breaks and comments. + If we find a line break in the block context, we set the flag + `allow_simple_key` on. + The byte order mark is stripped if it's the first character in the stream. + We do not yet support BOM inside the stream as the specification requires. + Any such mark will be considered as a part of the document. + + TODO: We need to make tab handling rules more sane. A good rule is + Tabs cannot precede tokens BLOCK-SEQUENCE-START, BLOCK-MAPPING-START, + BLOCK-END, KEY (block context), VALUE (block context), BLOCK-ENTRY + So the tab checking code is + @allow_simple_key = off if + We also need to add the check for `allow_simple_key is on` to + `unwind_indent` before issuing BLOCK-END. Scanners for block, flow and + plain scalars need to be modified. + */ + scan_to_next_token() { + var found, ref, results; + if (this.index === 0 && this.peek() === "\uFEFF") { + this.forward(); + } + found = false; + results = []; + while (!found) { + while (this.peek() === " ") { + this.forward(); + } + if (this.peek() === "#") { + while (ref = this.peek(), indexOf.call(C_LB + "\0", ref) < 0) { + this.forward(); + } + } + if (this.scan_line_break()) { + if (this.flow_level === 0) { + results.push(this.allow_simple_key = true); + } else { + results.push(void 0); + } + } else { + results.push(found = true); + } + } + return results; + } + /* + See the specification for details. + */ + scan_directive() { + var end_mark, name, ref, start_mark, value; + start_mark = this.get_mark(); + this.forward(); + name = this.scan_directive_name(start_mark); + value = null; + if (name === "YAML") { + value = this.scan_yaml_directive_value(start_mark); + end_mark = this.get_mark(); + } else if (name === "TAG") { + value = this.scan_tag_directive_value(start_mark); + end_mark = this.get_mark(); + } else { + end_mark = this.get_mark(); + while (ref = this.peek(), indexOf.call(C_LB + "\0", ref) < 0) { + this.forward(); + } + } + this.scan_directive_ignored_line(start_mark); + return new tokens.DirectiveToken(name, value, start_mark, end_mark); + } + /* + See the specification for details. + */ + scan_directive_name(start_mark) { + var char, length, value; + length = 0; + char = this.peek(length); + while (char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-_", char) >= 0) { + length++; + char = this.peek(length); + } + if (length === 0) { + throw new exports.ScannerError("while scanning a directive", start_mark, `expected alphanumeric or numeric character but found ${char}`, this.get_mark()); + } + value = this.prefix(length); + this.forward(length); + char = this.peek(); + if (indexOf.call(C_LB + "\0 ", char) < 0) { + throw new exports.ScannerError("while scanning a directive", start_mark, `expected alphanumeric or numeric character but found ${char}`, this.get_mark()); + } + return value; + } + /* + See the specification for details. + */ + scan_yaml_directive_value(start_mark) { + var major, minor, ref; + while (this.peek() === " ") { + this.forward(); + } + major = this.scan_yaml_directive_number(start_mark); + if (this.peek() !== ".") { + throw new exports.ScannerError("while scanning a directive", start_mark, `expected a digit or '.' but found ${this.peek()}`, this.get_mark()); + } + this.forward(); + minor = this.scan_yaml_directive_number(start_mark); + if (ref = this.peek(), indexOf.call(C_LB + "\0 ", ref) < 0) { + throw new exports.ScannerError("while scanning a directive", start_mark, `expected a digit or ' ' but found ${this.peek()}`, this.get_mark()); + } + return [major, minor]; + } + /* + See the specification for details. + */ + scan_yaml_directive_number(start_mark) { + var char, length, ref, value; + char = this.peek(); + if (!(char >= "0" && char <= "9")) { + throw new exports.ScannerError("while scanning a directive", start_mark, `expected a digit but found ${char}`, this.get_mark()); + } + length = 0; + while ((ref = this.peek(length)) >= "0" && ref <= "9") { + length++; + } + value = parseInt(this.prefix(length)); + this.forward(length); + return value; + } + /* + See the specification for details. + */ + scan_tag_directive_value(start_mark) { + var handle, prefix; + while (this.peek() === " ") { + this.forward(); + } + handle = this.scan_tag_directive_handle(start_mark); + while (this.peek() === " ") { + this.forward(); + } + prefix = this.scan_tag_directive_prefix(start_mark); + return [handle, prefix]; + } + /* + See the specification for details. + */ + scan_tag_directive_handle(start_mark) { + var char, value; + value = this.scan_tag_handle("directive", start_mark); + char = this.peek(); + if (char !== " ") { + throw new exports.ScannerError("while scanning a directive", start_mark, `expected ' ' but found ${char}`, this.get_mark()); + } + return value; + } + /* + See the specification for details. + */ + scan_tag_directive_prefix(start_mark) { + var char, value; + value = this.scan_tag_uri("directive", start_mark); + char = this.peek(); + if (indexOf.call(C_LB + "\0 ", char) < 0) { + throw new exports.ScannerError("while scanning a directive", start_mark, `expected ' ' but found ${char}`, this.get_mark()); + } + return value; + } + /* + See the specification for details. + */ + scan_directive_ignored_line(start_mark) { + var char, ref; + while (this.peek() === " ") { + this.forward(); + } + if (this.peek() === "#") { + while (ref = this.peek(), indexOf.call(C_LB + "\0", ref) < 0) { + this.forward(); + } + } + char = this.peek(); + if (indexOf.call(C_LB + "\0", char) < 0) { + throw new exports.ScannerError("while scanning a directive", start_mark, `expected a comment or a line break but found ${char}`, this.get_mark()); + } + return this.scan_line_break(); + } + /* + The specification does not restrict characters for anchors and aliases. + This may lead to problems, for instance, the document: + [ *alias, value ] + can be interpteted in two ways, as + [ "value" ] + and + [ *alias , "value" ] + Therefore we restrict aliases to numbers and ASCII letters. + */ + scan_anchor(TokenClass) { + var char, indicator, length, name, start_mark, value; + start_mark = this.get_mark(); + indicator = this.peek(); + if (indicator === "*") { + name = "alias"; + } else { + name = "anchor"; + } + this.forward(); + length = 0; + char = this.peek(length); + while (char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-_", char) >= 0) { + length++; + char = this.peek(length); + } + if (length === 0) { + throw new exports.ScannerError(`while scanning an ${name}`, start_mark, `expected alphabetic or numeric character but found '${char}'`, this.get_mark()); + } + value = this.prefix(length); + this.forward(length); + char = this.peek(); + if (indexOf.call(C_LB + C_WS + "\0?:,]}%@`", char) < 0) { + throw new exports.ScannerError(`while scanning an ${name}`, start_mark, `expected alphabetic or numeric character but found '${char}'`, this.get_mark()); + } + return new TokenClass(value, start_mark, this.get_mark()); + } + /* + See the specification for details. + */ + scan_tag() { + var char, handle, length, start_mark, suffix, use_handle; + start_mark = this.get_mark(); + char = this.peek(1); + if (char === "<") { + handle = null; + this.forward(2); + suffix = this.scan_tag_uri("tag", start_mark); + if (this.peek() !== ">") { + throw new exports.ScannerError("while parsing a tag", start_mark, `expected '>' but found ${this.peek()}`, this.get_mark()); + } + this.forward(); + } else if (indexOf.call(C_LB + C_WS + "\0", char) >= 0) { + handle = null; + suffix = "!"; + this.forward(); + } else { + length = 1; + use_handle = false; + while (indexOf.call(C_LB + "\0 ", char) < 0) { + if (char === "!") { + use_handle = true; + break; + } + length++; + char = this.peek(length); + } + if (use_handle) { + handle = this.scan_tag_handle("tag", start_mark); + } else { + handle = "!"; + this.forward(); + } + suffix = this.scan_tag_uri("tag", start_mark); + } + char = this.peek(); + if (indexOf.call(C_LB + "\0 ", char) < 0) { + throw new exports.ScannerError("while scanning a tag", start_mark, `expected ' ' but found ${char}`, this.get_mark()); + } + return new tokens.TagToken([handle, suffix], start_mark, this.get_mark()); + } + /* + See the specification for details. + */ + scan_block_scalar(style) { + var breaks, chomping, chunks, end_mark, folded, increment, indent, leading_non_space, length, line_break, max_indent, min_indent, ref, ref1, ref2, start_mark; + folded = style === ">"; + chunks = []; + start_mark = this.get_mark(); + this.forward(); + [chomping, increment] = this.scan_block_scalar_indicators(start_mark); + this.scan_block_scalar_ignored_line(start_mark); + min_indent = this.indent + 1; + if (min_indent < 1) { + min_indent = 1; + } + if (increment == null) { + [breaks, max_indent, end_mark] = this.scan_block_scalar_indentation(); + indent = Math.max(min_indent, max_indent); + } else { + indent = min_indent + increment - 1; + [breaks, end_mark] = this.scan_block_scalar_breaks(indent); + } + line_break = ""; + while (this.column === indent && this.peek() !== "\0") { + chunks = chunks.concat(breaks); + leading_non_space = (ref = this.peek(), indexOf.call(" ", ref) < 0); + length = 0; + while (ref1 = this.peek(length), indexOf.call(C_LB + "\0", ref1) < 0) { + length++; + } + chunks.push(this.prefix(length)); + this.forward(length); + line_break = this.scan_line_break(); + [breaks, end_mark] = this.scan_block_scalar_breaks(indent); + if (this.column === indent && this.peek() !== "\0") { + if (folded && line_break === "\n" && leading_non_space && (ref2 = this.peek(), indexOf.call(" ", ref2) < 0)) { + if (util.is_empty(breaks)) { + chunks.push(" "); + } + } else { + chunks.push(line_break); + } + } else { + break; + } + } + if (chomping !== false) { + chunks.push(line_break); + } + if (chomping === true) { + chunks = chunks.concat(breaks); + } + return new tokens.ScalarToken(chunks.join(""), false, start_mark, end_mark, style); + } + /* + See the specification for details. + */ + scan_block_scalar_indicators(start_mark) { + var char, chomping, increment; + chomping = null; + increment = null; + char = this.peek(); + if (indexOf.call("+-", char) >= 0) { + chomping = char === "+"; + this.forward(); + char = this.peek(); + if (indexOf.call(C_NUMBERS, char) >= 0) { + increment = parseInt(char); + if (increment === 0) { + throw new exports.ScannerError("while scanning a block scalar", start_mark, "expected indentation indicator in the range 1-9 but found 0", this.get_mark()); + } + this.forward(); + } + } else if (indexOf.call(C_NUMBERS, char) >= 0) { + increment = parseInt(char); + if (increment === 0) { + throw new exports.ScannerError("while scanning a block scalar", start_mark, "expected indentation indicator in the range 1-9 but found 0", this.get_mark()); + } + this.forward(); + char = this.peek(); + if (indexOf.call("+-", char) >= 0) { + chomping = char === "+"; + this.forward(); + } + } + char = this.peek(); + if (indexOf.call(C_LB + "\0 ", char) < 0) { + throw new exports.ScannerError("while scanning a block scalar", start_mark, `expected chomping or indentation indicators, but found ${char}`, this.get_mark()); + } + return [chomping, increment]; + } + /* + See the specification for details. + */ + scan_block_scalar_ignored_line(start_mark) { + var char, ref; + while (this.peek() === " ") { + this.forward(); + } + if (this.peek() === "#") { + while (ref = this.peek(), indexOf.call(C_LB + "\0", ref) < 0) { + this.forward(); + } + } + char = this.peek(); + if (indexOf.call(C_LB + "\0", char) < 0) { + throw new exports.ScannerError("while scanning a block scalar", start_mark, `expected a comment or a line break but found ${char}`, this.get_mark()); + } + return this.scan_line_break(); + } + /* + See the specification for details. + */ + scan_block_scalar_indentation() { + var chunks, end_mark, max_indent, ref; + chunks = []; + max_indent = 0; + end_mark = this.get_mark(); + while (ref = this.peek(), indexOf.call(C_LB + " ", ref) >= 0) { + if (this.peek() !== " ") { + chunks.push(this.scan_line_break()); + end_mark = this.get_mark(); + } else { + this.forward(); + if (this.column > max_indent) { + max_indent = this.column; + } + } + } + return [chunks, max_indent, end_mark]; + } + /* + See the specification for details. + */ + scan_block_scalar_breaks(indent) { + var chunks, end_mark, ref; + chunks = []; + end_mark = this.get_mark(); + while (this.column < indent && this.peek() === " ") { + this.forward(); + } + while (ref = this.peek(), indexOf.call(C_LB, ref) >= 0) { + chunks.push(this.scan_line_break()); + end_mark = this.get_mark(); + while (this.column < indent && this.peek() === " ") { + this.forward(); + } + } + return [chunks, end_mark]; + } + /* + See the specification for details. + Note that we loose indentation rules for quoted scalars. Quoted scalars + don't need to adhere indentation because " and ' clearly mark the beginning + and the end of them. Therefore we are less restrictive than the + specification requires. We only need to check that document separators are + not included in scalars. + */ + scan_flow_scalar(style) { + var chunks, double, quote, start_mark; + double = style === '"'; + chunks = []; + start_mark = this.get_mark(); + quote = this.peek(); + this.forward(); + chunks = chunks.concat(this.scan_flow_scalar_non_spaces(double, start_mark)); + while (this.peek() !== quote) { + chunks = chunks.concat(this.scan_flow_scalar_spaces(double, start_mark)); + chunks = chunks.concat(this.scan_flow_scalar_non_spaces(double, start_mark)); + } + this.forward(); + return new tokens.ScalarToken(chunks.join(""), false, start_mark, this.get_mark(), style); + } + /* + See the specification for details. + */ + scan_flow_scalar_non_spaces(double, start_mark) { + var char, chunks, code, i, k, length, ref, ref1, ref2; + chunks = []; + while (true) { + length = 0; + while (ref = this.peek(length), indexOf.call(C_LB + C_WS + "'\"\\\0", ref) < 0) { + length++; + } + if (length !== 0) { + chunks.push(this.prefix(length)); + this.forward(length); + } + char = this.peek(); + if (!double && char === "'" && this.peek(1) === "'") { + chunks.push("'"); + this.forward(2); + } else if (double && char === "'" || !double && indexOf.call('"\\', char) >= 0) { + chunks.push(char); + this.forward(); + } else if (double && char === "\\") { + this.forward(); + char = this.peek(); + if (char in ESCAPE_REPLACEMENTS) { + chunks.push(ESCAPE_REPLACEMENTS[char]); + this.forward(); + } else if (char in ESCAPE_CODES) { + length = ESCAPE_CODES[char]; + this.forward(); + for (k = i = 0, ref1 = length; ref1 >= 0 ? i < ref1 : i > ref1; k = ref1 >= 0 ? ++i : --i) { + if (ref2 = this.peek(k), indexOf.call(`${C_NUMBERS}ABCDEFabcdef`, ref2) < 0) { + throw new exports.ScannerError("while scanning a double-quoted scalar", start_mark, `expected escape sequence of ${length} hexadecimal numbers, but found ${this.peek(k)}`, this.get_mark()); + } + } + code = parseInt(this.prefix(length), 16); + chunks.push(String.fromCharCode(code)); + this.forward(length); + } else if (indexOf.call(C_LB, char) >= 0) { + this.scan_line_break(); + chunks = chunks.concat(this.scan_flow_scalar_breaks(double, start_mark)); + } else { + throw new exports.ScannerError("while scanning a double-quoted scalar", start_mark, `found unknown escape character ${char}`, this.get_mark()); + } + } else { + return chunks; + } + } + } + /* + See the specification for details. + */ + scan_flow_scalar_spaces(double, start_mark) { + var breaks, char, chunks, length, line_break, ref, whitespaces; + chunks = []; + length = 0; + while (ref = this.peek(length), indexOf.call(C_WS, ref) >= 0) { + length++; + } + whitespaces = this.prefix(length); + this.forward(length); + char = this.peek(); + if (char === "\0") { + throw new exports.ScannerError("while scanning a quoted scalar", start_mark, "found unexpected end of stream", this.get_mark()); + } + if (indexOf.call(C_LB, char) >= 0) { + line_break = this.scan_line_break(); + breaks = this.scan_flow_scalar_breaks(double, start_mark); + if (line_break !== "\n") { + chunks.push(line_break); + } else if (breaks.length === 0) { + chunks.push(" "); + } + chunks = chunks.concat(breaks); + } else { + chunks.push(whitespaces); + } + return chunks; + } + /* + See the specification for details. + */ + scan_flow_scalar_breaks(double, start_mark) { + var chunks, prefix, ref, ref1, ref2; + chunks = []; + while (true) { + prefix = this.prefix(3); + if (prefix === "---" || prefix === "..." && (ref = this.peek(3), indexOf.call(C_LB + C_WS + "\0", ref) >= 0)) { + throw new exports.ScannerError("while scanning a quoted scalar", start_mark, "found unexpected document separator", this.get_mark()); + } + while (ref1 = this.peek(), indexOf.call(C_WS, ref1) >= 0) { + this.forward(); + } + if (ref2 = this.peek(), indexOf.call(C_LB, ref2) >= 0) { + chunks.push(this.scan_line_break()); + } else { + return chunks; + } + } + } + /* + See the specification for details. + We add an additional restriction for the flow context: + plain scalars in the flow context cannot contain ',', ':' and '?'. + We also keep track of the `allow_simple_key` flag here. + Indentation rules are loosed for the flow context. + */ + scan_plain() { + var char, chunks, end_mark, indent, length, ref, ref1, spaces, start_mark; + chunks = []; + start_mark = end_mark = this.get_mark(); + indent = this.indent + 1; + spaces = []; + while (true) { + length = 0; + if (this.peek() === "#") { + break; + } + while (true) { + char = this.peek(length); + if (indexOf.call(C_LB + C_WS + "\0", char) >= 0 || this.flow_level === 0 && char === ":" && (ref = this.peek(length + 1), indexOf.call(C_LB + C_WS + "\0", ref) >= 0) || this.flow_level !== 0 && indexOf.call(",:?[]{}", char) >= 0) { + break; + } + length++; + } + if (this.flow_level !== 0 && char === ":" && (ref1 = this.peek(length + 1), indexOf.call(C_LB + C_WS + "\0,[]{}", ref1) < 0)) { + this.forward(length); + throw new exports.ScannerError("while scanning a plain scalar", start_mark, "found unexpected ':'", this.get_mark(), "Please check http://pyyaml.org/wiki/YAMLColonInFlowContext"); + } + if (length === 0) { + break; + } + this.allow_simple_key = false; + chunks = chunks.concat(spaces); + chunks.push(this.prefix(length)); + this.forward(length); + end_mark = this.get_mark(); + spaces = this.scan_plain_spaces(indent, start_mark); + if (spaces == null || spaces.length === 0 || this.peek() === "#" || this.flow_level === 0 && this.column < indent) { + break; + } + } + return new tokens.ScalarToken(chunks.join(""), true, start_mark, end_mark); + } + /* + See the specification for details. + The specification is really confusing about tabs in plain scalars. + We just forbid them completely. Do not use tabs in YAML! + */ + scan_plain_spaces(indent, start_mark) { + var breaks, char, chunks, length, line_break, prefix, ref, ref1, ref2, ref3, whitespaces; + chunks = []; + length = 0; + while (ref = this.peek(length), indexOf.call(" ", ref) >= 0) { + length++; + } + whitespaces = this.prefix(length); + this.forward(length); + char = this.peek(); + if (indexOf.call(C_LB, char) >= 0) { + line_break = this.scan_line_break(); + this.allow_simple_key = true; + prefix = this.prefix(3); + if (prefix === "---" || prefix === "..." && (ref1 = this.peek(3), indexOf.call(C_LB + C_WS + "\0", ref1) >= 0)) { + return; + } + breaks = []; + while (ref3 = this.peek(), indexOf.call(C_LB + " ", ref3) >= 0) { + if (this.peek() === " ") { + this.forward(); + } else { + breaks.push(this.scan_line_break()); + prefix = this.prefix(3); + if (prefix === "---" || prefix === "..." && (ref2 = this.peek(3), indexOf.call(C_LB + C_WS + "\0", ref2) >= 0)) { + return; + } + } + } + if (line_break !== "\n") { + chunks.push(line_break); + } else if (breaks.length === 0) { + chunks.push(" "); + } + chunks = chunks.concat(breaks); + } else if (whitespaces) { + chunks.push(whitespaces); + } + return chunks; + } + /* + See the specification for details. + For some strange reasons, the specification does not allow '_' in tag + handles. I have allowed it anyway. + */ + scan_tag_handle(name, start_mark) { + var char, length, value; + char = this.peek(); + if (char !== "!") { + throw new exports.ScannerError(`while scanning a ${name}`, start_mark, `expected '!' but found ${char}`, this.get_mark()); + } + length = 1; + char = this.peek(length); + if (char !== " ") { + while (char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-_", char) >= 0) { + length++; + char = this.peek(length); + } + if (char !== "!") { + this.forward(length); + throw new exports.ScannerError(`while scanning a ${name}`, start_mark, `expected '!' but found ${char}`, this.get_mark()); + } + length++; + } + value = this.prefix(length); + this.forward(length); + return value; + } + /* + See the specification for details. + Note: we do not check if URI is well-formed. + */ + scan_tag_uri(name, start_mark) { + var char, chunks, length; + chunks = []; + length = 0; + char = this.peek(length); + while (char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-;/?:@&=+$,_.!~*'()[]%", char) >= 0) { + if (char === "%") { + chunks.push(this.prefix(length)); + this.forward(length); + length = 0; + chunks.push(this.scan_uri_escapes(name, start_mark)); + } else { + length++; + } + char = this.peek(length); + } + if (length !== 0) { + chunks.push(this.prefix(length)); + this.forward(length); + length = 0; + } + if (chunks.length === 0) { + throw new exports.ScannerError(`while parsing a ${name}`, start_mark, `expected URI but found ${char}`, this.get_mark()); + } + return chunks.join(""); + } + /* + See the specification for details. + */ + scan_uri_escapes(name, start_mark) { + var bytes, i, k, mark; + bytes = []; + mark = this.get_mark(); + while (this.peek() === "%") { + this.forward(); + for (k = i = 0; i <= 2; k = ++i) { + throw new exports.ScannerError(`while scanning a ${name}`, start_mark, `expected URI escape sequence of 2 hexadecimal numbers but found ${this.peek(k)}`, this.get_mark()); + } + bytes.push(String.fromCharCode(parseInt(this.prefix(2), 16))); + this.forward(2); + } + return bytes.join(""); + } + /* + Transforms: + '\r\n' : '\n' + '\r' : '\n' + '\n' : '\n' + '\x85' : '\n' + '\u2028' : '\u2028' + '\u2029 : '\u2029' + default : '' + */ + scan_line_break() { + var char; + char = this.peek(); + if (indexOf.call("\r\n\x85", char) >= 0) { + if (this.prefix(2) === "\r\n") { + this.forward(2); + } else { + this.forward(); + } + return "\n"; + } else if (indexOf.call("\u2028\u2029", char) >= 0) { + this.forward(); + return char; + } + return ""; + } + } + + C_LB = "\r\n\x85\u2028\u2029"; + C_WS = " "; + C_NUMBERS = "0123456789"; + ESCAPE_REPLACEMENTS = { + "0": "\0", + "a": "\x07", + "b": "\b", + "t": " ", + " ": " ", + "n": "\n", + "v": "\v", + "f": "\f", + "r": "\r", + "e": "\x1B", + " ": " ", + '"': '"', + "\\": "\\", + "N": "\x85", + "_": "\xA0", + "L": "\u2028", + "P": "\u2029" + }; + ESCAPE_CODES = { + "x": 2, + "u": 4, + "U": 8 + }; + ctor = Scanner.prototype.initialise; + return Scanner; + }).call(this); + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/parser.js +var require_parser = __commonJS({ + "node_modules/yaml-js/lib/parser.js"(exports) { + (function() { + var MarkedYAMLError, events, tokens, hasProp = {}.hasOwnProperty; + events = require_events(); + ({ MarkedYAMLError } = require_errors()); + tokens = require_tokens(); + this.ParserError = class ParserError extends MarkedYAMLError { + }; + this.Parser = (function() { + var DEFAULT_TAGS, ctor; + class Parser { + constructor() { + return ctor.apply(this, arguments); + } + initialise() { + this.current_event = null; + this.yaml_version = null; + this.tag_handles = {}; + this.states = []; + this.marks = []; + return this.state = "parse_stream_start"; + } + /* + Reset the state attributes. + */ + dispose() { + this.states = []; + return this.state = null; + } + /* + Check the type of the next event. + */ + check_event(...choices) { + var choice, i, len; + if (this.current_event === null) { + if (this.state != null) { + this.current_event = this[this.state](); + } + } + if (this.current_event !== null) { + if (choices.length === 0) { + return true; + } + for (i = 0, len = choices.length; i < len; i++) { + choice = choices[i]; + if (this.current_event instanceof choice) { + return true; + } + } + } + return false; + } + /* + Get the next event. + */ + peek_event() { + if (this.current_event === null && this.state != null) { + this.current_event = this[this.state](); + } + return this.current_event; + } + /* + Get the event and proceed further. + */ + get_event() { + var event; + if (this.current_event === null && this.state != null) { + this.current_event = this[this.state](); + } + event = this.current_event; + this.current_event = null; + return event; + } + // stream ::= STREAM-START implicit_document? explicit_document* STREAM-END + // implicit_document ::= block_node DOCUMENT-END* + // explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* + /* + Parse the stream start. + */ + parse_stream_start() { + var event, token; + token = this.get_token(); + event = new events.StreamStartEvent(token.start_mark, token.end_mark); + this.state = "parse_implicit_document_start"; + return event; + } + /* + Parse an implicit document. + */ + parse_implicit_document_start() { + var end_mark, event, start_mark, token; + if (!this.check_token(tokens.DirectiveToken, tokens.DocumentStartToken, tokens.StreamEndToken)) { + this.tag_handles = DEFAULT_TAGS; + token = this.peek_token(); + start_mark = end_mark = token.start_mark; + event = new events.DocumentStartEvent(start_mark, end_mark, false); + this.states.push("parse_document_end"); + this.state = "parse_block_node"; + return event; + } else { + return this.parse_document_start(); + } + } + /* + Parse an explicit document. + */ + parse_document_start() { + var end_mark, event, start_mark, tags, token, version; + while (this.check_token(tokens.DocumentEndToken)) { + this.get_token(); + } + if (!this.check_token(tokens.StreamEndToken)) { + start_mark = this.peek_token().start_mark; + [version, tags] = this.process_directives(); + if (!this.check_token(tokens.DocumentStartToken)) { + throw new exports.ParserError(`expected '', but found ${this.peek_token().id}`, this.peek_token().start_mark); + } + token = this.get_token(); + end_mark = token.end_mark; + event = new events.DocumentStartEvent(start_mark, end_mark, true, version, tags); + this.states.push("parse_document_end"); + this.state = "parse_document_content"; + } else { + token = this.get_token(); + event = new events.StreamEndEvent(token.start_mark, token.end_mark); + if (this.states.length !== 0) { + throw new Error("assertion error, states should be empty"); + } + if (this.marks.length !== 0) { + throw new Error("assertion error, marks should be empty"); + } + this.state = null; + } + return event; + } + /* + Parse the document end. + */ + parse_document_end() { + var end_mark, event, explicit, start_mark, token; + token = this.peek_token(); + start_mark = end_mark = token.start_mark; + explicit = false; + if (this.check_token(tokens.DocumentEndToken)) { + token = this.get_token(); + end_mark = token.end_mark; + explicit = true; + } + event = new events.DocumentEndEvent(start_mark, end_mark, explicit); + this.state = "parse_document_start"; + return event; + } + parse_document_content() { + var event; + if (this.check_token(tokens.DirectiveToken, tokens.DocumentStartToken, tokens.DocumentEndToken, tokens.StreamEndToken)) { + event = this.process_empty_scalar(this.peek_token().start_mark); + this.state = this.states.pop(); + return event; + } else { + return this.parse_block_node(); + } + } + process_directives() { + var handle, major, minor, prefix, ref, tag_handles_copy, token, value; + this.yaml_version = null; + this.tag_handles = {}; + while (this.check_token(tokens.DirectiveToken)) { + token = this.get_token(); + if (token.name === "YAML") { + if (this.yaml_version !== null) { + throw new exports.ParserError(null, null, "found duplicate YAML directive", token.start_mark); + } + [major, minor] = token.value; + if (major !== 1) { + throw new exports.ParserError(null, null, "found incompatible YAML document (version 1.* is required)", token.start_mark); + } + this.yaml_version = token.value; + } else if (token.name === "TAG") { + [handle, prefix] = token.value; + if (handle in this.tag_handles) { + throw new exports.ParserError(null, null, `duplicate tag handle ${handle}`, token.start_mark); + } + this.tag_handles[handle] = prefix; + } + } + tag_handles_copy = null; + ref = this.tag_handles; + for (handle in ref) { + if (!hasProp.call(ref, handle)) continue; + prefix = ref[handle]; + if (tag_handles_copy == null) { + tag_handles_copy = {}; + } + tag_handles_copy[handle] = prefix; + } + value = [this.yaml_version, tag_handles_copy]; + for (handle in DEFAULT_TAGS) { + if (!hasProp.call(DEFAULT_TAGS, handle)) continue; + prefix = DEFAULT_TAGS[handle]; + if (!(prefix in this.tag_handles)) { + this.tag_handles[handle] = prefix; + } + } + return value; + } + // block_node_or_indentless_sequence ::= ALIAS + // | properties (block_content | indentless_sequence)? + // | block_content + // | indentless_block_sequence + // block_node ::= ALIAS + // | properties block_content? + // | block_content + // flow_node ::= ALIAS + // | properties flow_content? + // | flow_content + // properties ::= TAG ANCHOR? | ANCHOR TAG? + // block_content ::= block_collection | flow_collection | SCALAR + // flow_content ::= flow_collection | SCALAR + // block_collection ::= block_sequence | block_mapping + // flow_collection ::= flow_sequence | flow_mapping + parse_block_node() { + return this.parse_node(true); + } + parse_flow_node() { + return this.parse_node(); + } + parse_block_node_or_indentless_sequence() { + return this.parse_node(true, true); + } + parse_node(block = false, indentless_sequence = false) { + var anchor, end_mark, event, handle, implicit, node, start_mark, suffix, tag, tag_mark, token; + if (this.check_token(tokens.AliasToken)) { + token = this.get_token(); + event = new events.AliasEvent(token.value, token.start_mark, token.end_mark); + this.state = this.states.pop(); + } else { + anchor = null; + tag = null; + start_mark = end_mark = tag_mark = null; + if (this.check_token(tokens.AnchorToken)) { + token = this.get_token(); + start_mark = token.start_mark; + end_mark = token.end_mark; + anchor = token.value; + if (this.check_token(tokens.TagToken)) { + token = this.get_token(); + tag_mark = token.start_mark; + end_mark = token.end_mark; + tag = token.value; + } + } else if (this.check_token(tokens.TagToken)) { + token = this.get_token(); + start_mark = tag_mark = token.start_mark; + end_mark = token.end_mark; + tag = token.value; + if (this.check_token(tokens.AnchorToken)) { + token = this.get_token(); + end_mark = token.end_mark; + anchor = token.value; + } + } + if (tag !== null) { + [handle, suffix] = tag; + if (handle !== null) { + if (!(handle in this.tag_handles)) { + throw new exports.ParserError("while parsing a node", start_mark, `found undefined tag handle ${handle}`, tag_mark); + } + tag = this.tag_handles[handle] + suffix; + } else { + tag = suffix; + } + } + if (start_mark === null) { + start_mark = end_mark = this.peek_token().start_mark; + } + event = null; + implicit = tag === null || tag === "!"; + if (indentless_sequence && this.check_token(tokens.BlockEntryToken)) { + end_mark = this.peek_token().end_mark; + event = new events.SequenceStartEvent(anchor, tag, implicit, start_mark, end_mark); + this.state = "parse_indentless_sequence_entry"; + } else { + if (this.check_token(tokens.ScalarToken)) { + token = this.get_token(); + end_mark = token.end_mark; + if (token.plain && tag === null || tag === "!") { + implicit = [true, false]; + } else if (tag === null) { + implicit = [false, true]; + } else { + implicit = [false, false]; + } + event = new events.ScalarEvent(anchor, tag, implicit, token.value, start_mark, end_mark, token.style); + this.state = this.states.pop(); + } else if (this.check_token(tokens.FlowSequenceStartToken)) { + end_mark = this.peek_token().end_mark; + event = new events.SequenceStartEvent(anchor, tag, implicit, start_mark, end_mark, true); + this.state = "parse_flow_sequence_first_entry"; + } else if (this.check_token(tokens.FlowMappingStartToken)) { + end_mark = this.peek_token().end_mark; + event = new events.MappingStartEvent(anchor, tag, implicit, start_mark, end_mark, true); + this.state = "parse_flow_mapping_first_key"; + } else if (block && this.check_token(tokens.BlockSequenceStartToken)) { + end_mark = this.peek_token().end_mark; + event = new events.SequenceStartEvent(anchor, tag, implicit, start_mark, end_mark, false); + this.state = "parse_block_sequence_first_entry"; + } else if (block && this.check_token(tokens.BlockMappingStartToken)) { + end_mark = this.peek_token().end_mark; + event = new events.MappingStartEvent(anchor, tag, implicit, start_mark, end_mark, false); + this.state = "parse_block_mapping_first_key"; + } else if (anchor !== null || tag !== null) { + event = new events.ScalarEvent(anchor, tag, [implicit, false], "", start_mark, end_mark); + this.state = this.states.pop(); + } else { + if (block) { + node = "block"; + } else { + node = "flow"; + } + token = this.peek_token(); + throw new exports.ParserError(`while parsing a ${node} node`, start_mark, `expected the node content, but found ${token.id}`, token.start_mark); + } + } + } + return event; + } + // block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* + // BLOCK-END + parse_block_sequence_first_entry() { + var token; + token = this.get_token(); + this.marks.push(token.start_mark); + return this.parse_block_sequence_entry(); + } + parse_block_sequence_entry() { + var event, token; + if (this.check_token(tokens.BlockEntryToken)) { + token = this.get_token(); + if (!this.check_token(tokens.BlockEntryToken, tokens.BlockEndToken)) { + this.states.push("parse_block_sequence_entry"); + return this.parse_block_node(); + } else { + this.state = "parse_block_sequence_entry"; + return this.process_empty_scalar(token.end_mark); + } + } + if (!this.check_token(tokens.BlockEndToken)) { + token = this.peek_token(); + throw new exports.ParserError("while parsing a block collection", this.marks.slice(-1)[0], `expected , but found ${token.id}`, token.start_mark); + } + token = this.get_token(); + event = new events.SequenceEndEvent(token.start_mark, token.end_mark); + this.state = this.states.pop(); + this.marks.pop(); + return event; + } + // indentless_sequence ::= (BLOCK-ENTRY block_node?)+ + parse_indentless_sequence_entry() { + var event, token; + if (this.check_token(tokens.BlockEntryToken)) { + token = this.get_token(); + if (!this.check_token(tokens.BlockEntryToken, tokens.KeyToken, tokens.ValueToken, tokens.BlockEndToken)) { + this.states.push("parse_indentless_sequence_entry"); + return this.parse_block_node(); + } else { + this.state = "parse_indentless_sequence_entry"; + return this.process_empty_scalar(token.end_mark); + } + } + token = this.peek_token(); + event = new events.SequenceEndEvent(token.start_mark, token.start_mark); + this.state = this.states.pop(); + return event; + } + // block_mapping ::= BLOCK-MAPPING-START + // ((KEY block_node_or_indentless_sequence?)? + // (VALUE block_node_or_indentless_sequence?)?)* BLOCK-END + parse_block_mapping_first_key() { + var token; + token = this.get_token(); + this.marks.push(token.start_mark); + return this.parse_block_mapping_key(); + } + parse_block_mapping_key() { + var event, token; + if (this.check_token(tokens.KeyToken)) { + token = this.get_token(); + if (!this.check_token(tokens.KeyToken, tokens.ValueToken, tokens.BlockEndToken)) { + this.states.push("parse_block_mapping_value"); + return this.parse_block_node_or_indentless_sequence(); + } else { + this.state = "parse_block_mapping_value"; + return this.process_empty_scalar(token.end_mark); + } + } + if (!this.check_token(tokens.BlockEndToken)) { + token = this.peek_token(); + throw new exports.ParserError("while parsing a block mapping", this.marks.slice(-1)[0], `expected , but found ${token.id}`, token.start_mark); + } + token = this.get_token(); + event = new events.MappingEndEvent(token.start_mark, token.end_mark); + this.state = this.states.pop(); + this.marks.pop(); + return event; + } + parse_block_mapping_value() { + var token; + if (this.check_token(tokens.ValueToken)) { + token = this.get_token(); + if (!this.check_token(tokens.KeyToken, tokens.ValueToken, tokens.BlockEndToken)) { + this.states.push("parse_block_mapping_key"); + return this.parse_block_node_or_indentless_sequence(); + } else { + this.state = "parse_block_mapping_key"; + return this.process_empty_scalar(token.end_mark); + } + } else { + this.state = "parse_block_mapping_key"; + token = this.peek_token(); + return this.process_empty_scalar(token.start_mark); + } + } + // flow_sequence ::= FLOW-SEQUENCE-START + // (flow_sequence_entry FLOW-ENTRY)* flow_sequence_entry? FLOW-SEQUENCE-END + // flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? + // Note that while production rules for both flow_sequence_entry and + // flow_mapping_entry are equal, their interpretations are different. For + // `flow_sequence_entry`, the part `KEY flow_node? (VALUE flow_node?)?` + // generate an inline mapping (set syntax). + parse_flow_sequence_first_entry() { + var token; + token = this.get_token(); + this.marks.push(token.start_mark); + return this.parse_flow_sequence_entry(true); + } + parse_flow_sequence_entry(first = false) { + var event, token; + if (!this.check_token(tokens.FlowSequenceEndToken)) { + if (!first) { + if (this.check_token(tokens.FlowEntryToken)) { + this.get_token(); + } else { + token = this.peek_token(); + throw new exports.ParserError("while parsing a flow sequence", this.marks.slice(-1)[0], `expected ',' or ']', but got ${token.id}`, token.start_mark); + } + } + if (this.check_token(tokens.KeyToken)) { + token = this.peek_token(); + event = new events.MappingStartEvent(null, null, true, token.start_mark, token.end_mark, true); + this.state = "parse_flow_sequence_entry_mapping_key"; + return event; + } else if (!this.check_token(tokens.FlowSequenceEndToken)) { + this.states.push("parse_flow_sequence_entry"); + return this.parse_flow_node(); + } + } + token = this.get_token(); + event = new events.SequenceEndEvent(token.start_mark, token.end_mark); + this.state = this.states.pop(); + this.marks.pop(); + return event; + } + parse_flow_sequence_entry_mapping_key() { + var token; + token = this.get_token(); + if (!this.check_token(tokens.ValueToken, tokens.FlowEntryToken, tokens.FlowSequenceEndToken)) { + this.states.push("parse_flow_sequence_entry_mapping_value"); + return this.parse_flow_node(); + } else { + this.state = "parse_flow_sequence_entry_mapping_value"; + return this.process_empty_scalar(token.end_mark); + } + } + parse_flow_sequence_entry_mapping_value() { + var token; + if (this.check_token(tokens.ValueToken)) { + token = this.get_token(); + if (!this.check_token(tokens.FlowEntryToken, tokens.FlowSequenceEndToken)) { + this.states.push("parse_flow_sequence_entry_mapping_end"); + return this.parse_flow_node(); + } else { + this.state = "parse_flow_sequence_entry_mapping_end"; + return this.process_empty_scalar(token.end_mark); + } + } else { + this.state = "parse_flow_sequence_entry_mapping_end"; + token = this.peek_token(); + return this.process_empty_scalar(token.start_mark); + } + } + parse_flow_sequence_entry_mapping_end() { + var token; + this.state = "parse_flow_sequence_entry"; + token = this.peek_token(); + return new events.MappingEndEvent(token.start_mark, token.start_mark); + } + // flow_mapping ::= FLOW-MAPPING-START (flow_mapping_entry FLOW-ENTRY)* + // flow_mapping_entry? FLOW-MAPPING-END + // flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? + parse_flow_mapping_first_key() { + var token; + token = this.get_token(); + this.marks.push(token.start_mark); + return this.parse_flow_mapping_key(true); + } + parse_flow_mapping_key(first = false) { + var event, token; + if (!this.check_token(tokens.FlowMappingEndToken)) { + if (!first) { + if (this.check_token(tokens.FlowEntryToken)) { + this.get_token(); + } else { + token = this.peek_token(); + throw new exports.ParserError("while parsing a flow mapping", this.marks.slice(-1)[0], `expected ',' or '}', but got ${token.id}`, token.start_mark); + } + } + if (this.check_token(tokens.KeyToken)) { + token = this.get_token(); + if (!this.check_token(tokens.ValueToken, tokens.FlowEntryToken, tokens.FlowMappingEndToken)) { + this.states.push("parse_flow_mapping_value"); + return this.parse_flow_node(); + } else { + this.state = "parse_flow_mapping_value"; + return this.process_empty_scalar(token.end_mark); + } + } else if (!this.check_token(tokens.FlowMappingEndToken)) { + this.states.push("parse_flow_mapping_empty_value"); + return this.parse_flow_node(); + } + } + token = this.get_token(); + event = new events.MappingEndEvent(token.start_mark, token.end_mark); + this.state = this.states.pop(); + this.marks.pop(); + return event; + } + parse_flow_mapping_value() { + var token; + if (this.check_token(tokens.ValueToken)) { + token = this.get_token(); + if (!this.check_token(tokens.FlowEntryToken, tokens.FlowMappingEndToken)) { + this.states.push("parse_flow_mapping_key"); + return this.parse_flow_node(); + } else { + this.state = "parse_flow_mapping_key"; + return this.process_empty_scalar(token.end_mark); + } + } else { + this.state = "parse_flow_mapping_key"; + token = this.peek_token(); + return this.process_empty_scalar(token.start_mark); + } + } + parse_flow_mapping_empty_value() { + this.state = "parse_flow_mapping_key"; + return this.process_empty_scalar(this.peek_token().start_mark); + } + process_empty_scalar(mark) { + return new events.ScalarEvent(null, null, [true, false], "", mark, mark); + } + } + + DEFAULT_TAGS = { + "!": "!", + "!!": "tag:yaml.org,2002:" + }; + ctor = Parser.prototype.initialise; + return Parser; + }).call(this); + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/loader.js +var require_loader = __commonJS({ + "node_modules/yaml-js/lib/loader.js"(exports) { + (function() { + var composer, constructor, parser, reader, resolver, scanner, util; + util = require_util(); + reader = require_reader(); + scanner = require_scanner(); + parser = require_parser(); + composer = require_composer(); + resolver = require_resolver(); + constructor = require_constructor(); + this.make_loader = function(Reader = reader.Reader, Scanner = scanner.Scanner, Parser = parser.Parser, Composer = composer.Composer, Resolver = resolver.Resolver, Constructor = constructor.Constructor) { + var Loader, components; + components = [Reader, Scanner, Parser, Composer, Resolver, Constructor]; + return Loader = (function() { + var component; + class Loader2 { + constructor(stream) { + var i, len, ref; + components[0].prototype.initialise.call(this, stream); + ref = components.slice(1); + for (i = 0, len = ref.length; i < len; i++) { + component = ref[i]; + component.prototype.initialise.call(this); + } + } + } + + util.extend(Loader2.prototype, ...(function() { + var i, len, results; + results = []; + for (i = 0, len = components.length; i < len; i++) { + component = components[i]; + results.push(component.prototype); + } + return results; + })()); + return Loader2; + }).call(this); + }; + this.Loader = this.make_loader(); + }).call(exports); + } +}); + +// node_modules/yaml-js/lib/yaml.js +var require_yaml = __commonJS({ + "node_modules/yaml-js/lib/yaml.js"(exports) { + (function() { + var composer, constructor, dumper, errors, events, loader, nodes, parser, reader, resolver, scanner, tokens, util; + composer = this.composer = require_composer(); + constructor = this.constructor = require_constructor(); + dumper = this.dumper = require_dumper(); + errors = this.errors = require_errors(); + events = this.events = require_events(); + loader = this.loader = require_loader(); + nodes = this.nodes = require_nodes(); + parser = this.parser = require_parser(); + reader = this.reader = require_reader(); + resolver = this.resolver = require_resolver(); + scanner = this.scanner = require_scanner(); + tokens = this.tokens = require_tokens(); + util = require_util(); + this.scan = function(stream, Loader = loader.Loader) { + var _loader, results; + _loader = new Loader(stream); + results = []; + while (_loader.check_token()) { + results.push(_loader.get_token()); + } + return results; + }; + this.parse = function(stream, Loader = loader.Loader) { + var _loader, results; + _loader = new Loader(stream); + results = []; + while (_loader.check_event()) { + results.push(_loader.get_event()); + } + return results; + }; + this.compose = function(stream, Loader = loader.Loader) { + var _loader; + _loader = new Loader(stream); + return _loader.get_single_node(); + }; + this.compose_all = function(stream, Loader = loader.Loader) { + var _loader, results; + _loader = new Loader(stream); + results = []; + while (_loader.check_node()) { + results.push(_loader.get_node()); + } + return results; + }; + this.load = function(stream, Loader = loader.Loader) { + var _loader; + _loader = new Loader(stream); + return _loader.get_single_data(); + }; + this.load_all = function(stream, Loader = loader.Loader) { + var _loader, results; + _loader = new Loader(stream); + results = []; + while (_loader.check_data()) { + results.push(_loader.get_data()); + } + return results; + }; + this.emit = function(events2, stream, Dumper = dumper.Dumper, options = {}) { + var _dumper, dest, event, i, len; + dest = stream || new util.StringStream(); + _dumper = new Dumper(dest, options); + try { + for (i = 0, len = events2.length; i < len; i++) { + event = events2[i]; + _dumper.emit(event); + } + } finally { + _dumper.dispose(); + } + return stream || dest.string; + }; + this.serialize = function(node, stream, Dumper = dumper.Dumper, options = {}) { + return exports.serialize_all([node], stream, Dumper, options); + }; + this.serialize_all = function(nodes2, stream, Dumper = dumper.Dumper, options = {}) { + var _dumper, dest, i, len, node; + dest = stream || new util.StringStream(); + _dumper = new Dumper(dest, options); + try { + _dumper.open(); + for (i = 0, len = nodes2.length; i < len; i++) { + node = nodes2[i]; + _dumper.serialize(node); + } + _dumper.close(); + } finally { + _dumper.dispose(); + } + return stream || dest.string; + }; + this.dump = function(data, stream, Dumper = dumper.Dumper, options = {}) { + return exports.dump_all([data], stream, Dumper, options); + }; + this.dump_all = function(documents, stream, Dumper = dumper.Dumper, options = {}) { + var _dumper, dest, document, i, len; + dest = stream || new util.StringStream(); + _dumper = new Dumper(dest, options); + try { + _dumper.open(); + for (i = 0, len = documents.length; i < len; i++) { + document = documents[i]; + _dumper.represent(document); + } + _dumper.close(); + } finally { + _dumper.dispose(); + } + return stream || dest.string; + }; + }).call(exports); + } +}); + +// entry.js +var import_yaml_js = __toESM(require_yaml()); +var entry_default = import_yaml_js.default; +export { + entry_default as default +}; From 14e4026d1bbb90946f8525afd78d042ef85d1a10 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:45:25 -0400 Subject: [PATCH 13/18] Move yaml-js to being dep --- package.json | 3 +- pnpm-lock.yaml | 9 + .../userpluginInstaller.dev/native.ts | 8 +- .../userpluginInstaller.dev/yaml.js | 5175 ----------------- 4 files changed, 15 insertions(+), 5180 deletions(-) delete mode 100644 src/equicordplugins/userpluginInstaller.dev/yaml.js diff --git a/package.json b/package.json index af90b1870..cd9f7f0cc 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,8 @@ "nanoid": "^5.1.6", "native-file-system-adapter": "^3.0.1", "usercss-meta": "^0.12.0", - "virtual-merge": "^1.0.1" + "virtual-merge": "^1.0.1", + "yaml-js": "^0.3.1" }, "devDependencies": { "@electron/asar": "^4.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 81bafc045..53ca76f94 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -73,6 +73,9 @@ importers: virtual-merge: specifier: ^1.0.1 version: 1.0.2 + yaml-js: + specifier: ^0.3.1 + version: 0.3.1 devDependencies: '@electron/asar': specifier: ^4.2.0 @@ -2886,6 +2889,10 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + yaml-js@0.3.1: + resolution: {integrity: sha512-LjoIFHCtSfkGzPsmYmfDsW+TShtQBcY7lwH1yLQ5brJHXRhjteUnVE2ThCbz1madq8JUZIAjFiavfnIFeTO8CQ==} + engines: {node: '>=8'} + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -5772,6 +5779,8 @@ snapshots: y18n@5.0.8: {} + yaml-js@0.3.1: {} + yargs-parser@21.1.1: {} yargs@17.7.2: diff --git a/src/equicordplugins/userpluginInstaller.dev/native.ts b/src/equicordplugins/userpluginInstaller.dev/native.ts index 8ab7a1c6d..1203b4a85 100644 --- a/src/equicordplugins/userpluginInstaller.dev/native.ts +++ b/src/equicordplugins/userpluginInstaller.dev/native.ts @@ -10,6 +10,7 @@ import { BrowserWindow, dialog, shell, WebContentsView } from "electron"; import { existsSync, readdirSync, readFileSync } from "fs"; import { readdir, readFile, rm } from "fs/promises"; import { basename, join } from "path"; +import yaml from "yaml-js"; // @ts-ignore fuck off import pluginValidateContent from "./misc/pluginValidate.txt"; // i would use HTML but esbuild is being whiny @@ -17,7 +18,6 @@ import pluginValidateContent from "./misc/pluginValidate.txt"; // i would use HT import setGitPathContent from "./misc/setGitPath.txt"; // @ts-ignore fuck off import updateValidateContent from "./misc/updateValidate.txt"; // see above -import YAML from "./yaml.js"; const PLUGIN_META_REGEX = /export default definePlugin\((?:\s|\/(?:\/|\*).*)*{\s*(?:\s|\/(?:\/|\*).*)*name:\s*(?:"|'|`)(.*)(?:"|'|`)(?:\s|\/(?:\/|\*).*)*,(?:\s|\/(?:\/|\*).*)*(?:\s|\/(?:\/|\*).*)*description:\s*(?:"|'|`)(.*)(?:"|'|`)(?:\s|\/(?:\/|\*).*)*/; // if edited, also edit in misc/constants.ts!!! @@ -206,7 +206,7 @@ async function getPluginMeta(path: string, extra: object = {}): Promise<{ try { const meta = readFileSync(join(path, "meta.yml"), "utf8"); console.log(meta); - const parsed = YAML.load(meta); + const parsed = yaml.load(meta); if (parsed.thread && typeof parsed.thread === "string" && /^\d+$/.test(parsed.thread)) { supportChannelID = parsed.thread; } @@ -448,7 +448,7 @@ export async function openGitPathModal(_: any) { }); } }); - } catch(e) { + } catch (e) { dialog.showMessageBox({ title: "Error", message: "Git error", @@ -464,7 +464,7 @@ export async function openGitPathModal(_: any) { win.webContents.executeJavaScript(`document.querySelector("input").value = ${JSON.stringify(gitPathSet)};`); } - console.log(YAML.load(` + console.log(yaml.load(` name: test items: - a diff --git a/src/equicordplugins/userpluginInstaller.dev/yaml.js b/src/equicordplugins/userpluginInstaller.dev/yaml.js deleted file mode 100644 index 6baea2a59..000000000 --- a/src/equicordplugins/userpluginInstaller.dev/yaml.js +++ /dev/null @@ -1,5175 +0,0 @@ -/* eslint-disable */ -// This is from the https://github.com/connec/yaml-js library, licensed under the WTFPL License -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __require = /* @__PURE__ */ (x => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { - get: (a, b) => (typeof require !== "undefined" ? require : a)[b] -}) : x)(function(x) { - if (typeof require !== "undefined") return require.apply(this, arguments); - throw Error('Dynamic require of "' + x + '" is not supported'); -}); -var __commonJS = (cb, mod) => function __require2() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (const key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); - -// node_modules/yaml-js/lib/events.js -var require_events = __commonJS({ - "node_modules/yaml-js/lib/events.js"(exports) { - (function() { - this.Event = class Event { - constructor(start_mark1, end_mark1) { - this.start_mark = start_mark1; - this.end_mark = end_mark1; - } - }; - this.NodeEvent = class NodeEvent extends this.Event { - constructor(anchor1, start_mark, end_mark) { - super(start_mark, end_mark); - this.anchor = anchor1; - } - }; - this.CollectionStartEvent = class CollectionStartEvent extends this.NodeEvent { - constructor(anchor, tag, implicit, start_mark, end_mark, flow_style) { - super(anchor, start_mark, end_mark); - this.tag = tag; - this.implicit = implicit; - this.flow_style = flow_style; - } - }; - this.CollectionEndEvent = class CollectionEndEvent extends this.Event { - }; - this.StreamStartEvent = class StreamStartEvent extends this.Event { - constructor(start_mark, end_mark, encoding) { - super(start_mark, end_mark); - this.encoding = encoding; - } - }; - this.StreamEndEvent = class StreamEndEvent extends this.Event { - }; - this.DocumentStartEvent = class DocumentStartEvent extends this.Event { - constructor(start_mark, end_mark, explicit, version, tags) { - super(start_mark, end_mark); - this.explicit = explicit; - this.version = version; - this.tags = tags; - } - }; - this.DocumentEndEvent = class DocumentEndEvent extends this.Event { - constructor(start_mark, end_mark, explicit) { - super(start_mark, end_mark); - this.explicit = explicit; - } - }; - this.AliasEvent = class AliasEvent extends this.NodeEvent { - }; - this.ScalarEvent = class ScalarEvent extends this.NodeEvent { - constructor(anchor, tag, implicit, value, start_mark, end_mark, style) { - super(anchor, start_mark, end_mark); - this.tag = tag; - this.implicit = implicit; - this.value = value; - this.style = style; - } - }; - this.SequenceStartEvent = class SequenceStartEvent extends this.CollectionStartEvent { - }; - this.SequenceEndEvent = class SequenceEndEvent extends this.CollectionEndEvent { - }; - this.MappingStartEvent = class MappingStartEvent extends this.CollectionStartEvent { - }; - this.MappingEndEvent = class MappingEndEvent extends this.CollectionEndEvent { - }; - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/errors.js -var require_errors = __commonJS({ - "node_modules/yaml-js/lib/errors.js"(exports) { - (function() { - var { indexOf } = []; - this.Mark = class Mark { - constructor(line, column, buffer, pointer) { - this.line = line; - this.column = column; - this.buffer = buffer; - this.pointer = pointer; - } - get_snippet(indent = 4, max_length = 75) { - var break_chars, end, head, ref, ref1, start, tail; - if (this.buffer == null) { - return null; - } - break_chars = "\0\r\n\x85\u2028\u2029"; - head = ""; - start = this.pointer; - while (start > 0 && (ref = this.buffer[start - 1], indexOf.call(break_chars, ref) < 0)) { - start--; - if (this.pointer - start > max_length / 2 - 1) { - head = " ... "; - start += 5; - break; - } - } - tail = ""; - end = this.pointer; - while (end < this.buffer.length && (ref1 = this.buffer[end], indexOf.call(break_chars, ref1) < 0)) { - end++; - if (end - this.pointer > max_length / 2 - 1) { - tail = " ... "; - end -= 5; - break; - } - } - return `${new Array(indent).join(" ")}${head}${this.buffer.slice(start, end)}${tail} -${new Array(indent + this.pointer - start + head.length).join(" ")}^`; - } - toString() { - var snippet, where; - snippet = this.get_snippet(); - where = ` on line ${this.line + 1}, column ${this.column + 1}`; - if (snippet) { - return where; - } else { - return `${where}: -${snippet}`; - } - } - }; - this.YAMLError = class YAMLError extends Error { - constructor(message) { - super(message); - Object.defineProperty(this, "stack", { - get: function() { - return this.toString() + "\n" + new Error().stack.split("\n").slice(1).join("\n"); - } - }); - } - toString() { - return this.message; - } - }; - this.MarkedYAMLError = class MarkedYAMLError extends this.YAMLError { - constructor(context, context_mark, problem, problem_mark, note) { - super(); - this.context = context; - this.context_mark = context_mark; - this.problem = problem; - this.problem_mark = problem_mark; - this.note = note; - } - toString() { - var lines; - lines = []; - if (this.context != null) { - lines.push(this.context); - } - if (this.context_mark != null && (this.problem == null || this.problem_mark == null || this.context_mark.line !== this.problem_mark.line || this.context_mark.column !== this.problem_mark.column)) { - lines.push(this.context_mark.toString()); - } - if (this.problem != null) { - lines.push(this.problem); - } - if (this.problem_mark != null) { - lines.push(this.problem_mark.toString()); - } - if (this.note != null) { - lines.push(this.note); - } - return lines.join("\n"); - } - }; - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/nodes.js -var require_nodes = __commonJS({ - "node_modules/yaml-js/lib/nodes.js"(exports) { - (function() { - var unique_id; - unique_id = 0; - this.Node = class Node { - constructor(tag1, value1, start_mark1, end_mark1) { - this.tag = tag1; - this.value = value1; - this.start_mark = start_mark1; - this.end_mark = end_mark1; - this.unique_id = `node_${unique_id++}`; - } - }; - this.ScalarNode = (function() { - class ScalarNode extends this.Node { - constructor(tag, value, start_mark, end_mark, style) { - super(tag, value, start_mark, end_mark); - this.style = style; - } - } - - ScalarNode.prototype.id = "scalar"; - return ScalarNode; - }).call(this); - this.CollectionNode = class CollectionNode extends this.Node { - constructor(tag, value, start_mark, end_mark, flow_style) { - super(tag, value, start_mark, end_mark); - this.flow_style = flow_style; - } - }; - this.SequenceNode = (function() { - class SequenceNode extends this.CollectionNode { - } - - SequenceNode.prototype.id = "sequence"; - return SequenceNode; - }).call(this); - this.MappingNode = (function() { - class MappingNode extends this.CollectionNode { - } - - MappingNode.prototype.id = "mapping"; - return MappingNode; - }).call(this); - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/composer.js -var require_composer = __commonJS({ - "node_modules/yaml-js/lib/composer.js"(exports) { - (function() { - var MarkedYAMLError, events, nodes; - events = require_events(); - ({ MarkedYAMLError } = require_errors()); - nodes = require_nodes(); - this.ComposerError = class ComposerError extends MarkedYAMLError { - }; - this.Composer = (function() { - var ctor; - class Composer { - constructor() { - return ctor.apply(this, arguments); - } - /* - Initialise a `Composer` instance. - */ - initialise() { - return this.anchors = {}; - } - /* - Checks if a document can be composed from the event stream. - - So long as the event stream hasn't ended (no [StreamEndEvent]), another document can be composed. - - @return {Boolean} True if a document can be composed, false otherwise. - */ - check_node() { - if (this.check_event(events.StreamStartEvent)) { - this.get_event(); - } - return !this.check_event(events.StreamEndEvent); - } - /* - Compose a document from the remaining event stream. - - {Composer#check_node} must be called before calling this method. - - @return {Node} The next document in the stream. Returns `undefined` if the event stream has ended. - */ - get_node() { - if (!this.check_event(events.StreamEndEvent)) { - return this.compose_document(); - } - } - /* - Compose a single document from the entire event stream. - - @throw {ComposerError} if there's more than one document is in the stream. - - @return {Node} The single document in the stream. - */ - get_single_node() { - var document, event; - this.get_event(); - document = null; - if (!this.check_event(events.StreamEndEvent)) { - document = this.compose_document(); - } - if (!this.check_event(events.StreamEndEvent)) { - event = this.get_event(); - throw new exports.ComposerError("expected a single document in the stream", document.start_mark, "but found another document", event.start_mark); - } - this.get_event(); - return document; - } - /* - Compose a document node from the event stream. - - A 'document' node is any single {Node} subclass. {DocumentStart} and {DocumentEnd} events delimit - the events used for composition. - - @private - - @return {Node} The document node. - */ - compose_document() { - var node; - this.get_event(); - node = this.compose_node(); - this.get_event(); - this.anchors = {}; - return node; - } - /* - Compose a node from the event stream. - - Composes a {ScalarNode}, {SequenceNode}, or {MappingNode} from the event stream, depending on the - first event encountered ({ScalarEvent}, {SequenceStartEvent}, or {MappingStartEvent} - respectively). - - @private - - @param parent {Node} The parent of the new node. - @param index {Number} The index of the new node within the parent's children. - @throw {ComposerError} if an alias is encountered for an undefined anchor. - @throw {ComposerError} if a duplicate anchor is envountered. - @return {Node} The composed node. - */ - compose_node(parent, index) { - var anchor, event, node; - if (this.check_event(events.AliasEvent)) { - event = this.get_event(); - anchor = event.anchor; - if (!(anchor in this.anchors)) { - throw new exports.ComposerError(null, null, `found undefined alias ${anchor}`, event.start_mark); - } - return this.anchors[anchor]; - } - event = this.peek_event(); - anchor = event.anchor; - if (anchor !== null && anchor in this.anchors) { - throw new exports.ComposerError(`found duplicate anchor ${anchor}; first occurence`, this.anchors[anchor].start_mark, "second occurrence", event.start_mark); - } - this.descend_resolver(parent, index); - if (this.check_event(events.ScalarEvent)) { - node = this.compose_scalar_node(anchor); - } else if (this.check_event(events.SequenceStartEvent)) { - node = this.compose_sequence_node(anchor); - } else if (this.check_event(events.MappingStartEvent)) { - node = this.compose_mapping_node(anchor); - } - this.ascend_resolver(); - return node; - } - /* - Compose a {ScalarNode} from the event stream. - - @private - - @param anchor {String} The anchor name for the node (if any). - @return {ScalarNode} The node composed from a {ScalarEvent}. - */ - compose_scalar_node(anchor) { - var event, node, tag; - event = this.get_event(); - tag = event.tag; - if (tag === null || tag === "!") { - tag = this.resolve(nodes.ScalarNode, event.value, event.implicit); - } - node = new nodes.ScalarNode(tag, event.value, event.start_mark, event.end_mark, event.style); - if (anchor !== null) { - this.anchors[anchor] = node; - } - return node; - } - /* - Compose a {SequenceNode} from the event stream. - - The contents of the node are composed from events between a {SequenceStartEvent} and a - {SequenceEndEvent}. - - @private - - @param anchor {String} The anchor name for the node (if any). - @return {SequenceNode} The composed node. - */ - compose_sequence_node(anchor) { - var end_event, index, node, start_event, tag; - start_event = this.get_event(); - tag = start_event.tag; - if (tag === null || tag === "!") { - tag = this.resolve(nodes.SequenceNode, null, start_event.implicit); - } - node = new nodes.SequenceNode(tag, [], start_event.start_mark, null, start_event.flow_style); - if (anchor !== null) { - this.anchors[anchor] = node; - } - index = 0; - while (!this.check_event(events.SequenceEndEvent)) { - node.value.push(this.compose_node(node, index)); - index++; - } - end_event = this.get_event(); - node.end_mark = end_event.end_mark; - return node; - } - /* - Compose a {MappingNode} from the event stream. - - The contents of the node are composed from events between a {MappingStartEvent} and a - {MappingEndEvent}. - - @private - - @param anchor {String} The anchor name for the node (if any). - @return {MappingNode} The composed node. - */ - compose_mapping_node(anchor) { - var end_event, item_key, item_value, node, start_event, tag; - start_event = this.get_event(); - tag = start_event.tag; - if (tag === null || tag === "!") { - tag = this.resolve(nodes.MappingNode, null, start_event.implicit); - } - node = new nodes.MappingNode(tag, [], start_event.start_mark, null, start_event.flow_style); - if (anchor !== null) { - this.anchors[anchor] = node; - } - while (!this.check_event(events.MappingEndEvent)) { - item_key = this.compose_node(node); - item_value = this.compose_node(node, item_key); - node.value.push([item_key, item_value]); - } - end_event = this.get_event(); - node.end_mark = end_event.end_mark; - return node; - } - } - - ctor = Composer.prototype.initialise; - return Composer; - }).call(this); - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/util.js -var require_util = __commonJS({ - "node_modules/yaml-js/lib/util.js"(exports) { - (function() { - var ref, ref1, ref2, hasProp = {}.hasOwnProperty; - this.StringStream = class StringStream { - constructor() { - this.string = ""; - } - write(chunk) { - return this.string += chunk; - } - }; - this.clone = obj => { - return Object.assign({}, obj); - }; - this.extend = function(destination, ...sources) { - var i, j, len, len1, name, ref3, source; - for (i = 0, len = sources.length; i < len; i++) { - source = sources[i]; - while (source !== Object.prototype) { - ref3 = Object.getOwnPropertyNames(source); - for (j = 0, len1 = ref3.length; j < len1; j++) { - name = ref3[j]; - if (destination[name] == null) { - destination[name] = source[name]; - } - } - source = Object.getPrototypeOf(source); - } - } - return destination; - }; - this.is_empty = function(obj) { - var key; - if (Array.isArray(obj) || typeof obj === "string") { - return obj.length === 0; - } - for (key in obj) { - if (!hasProp.call(obj, key)) continue; - return false; - } - return true; - }; - this.inspect = (ref = (ref1 = (ref2 = __require("util")) != null ? ref2.inspect : void 0) != null ? ref1 : global.inspect) != null ? ref : function(a) { - return `${a}`; - }; - this.pad_left = function(str, char, length) { - str = String(str); - if (str.length >= length) { - return str; - } else if (str.length + 1 === length) { - return `${char}${str}`; - } else { - return `${new Array(length - str.length + 1).join(char)}${str}`; - } - }; - this.to_hex = function(num) { - if (typeof num === "string") { - num = num.charCodeAt(0); - } - return num.toString(16); - }; - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/constructor.js -var require_constructor = __commonJS({ - "node_modules/yaml-js/lib/constructor.js"(exports) { - (function() { - var MarkedYAMLError, nodes, util, { indexOf } = []; - ({ MarkedYAMLError } = require_errors()); - nodes = require_nodes(); - util = require_util(); - this.ConstructorError = class ConstructorError extends MarkedYAMLError { - }; - this.BaseConstructor = (function() { - var ctor; - class BaseConstructor { - constructor() { - return ctor.apply(this, arguments); - } - /* - Add a constructor function for a specific tag. - - The constructor will be used to turn {Node Nodes} with the given tag into a Javascript object. - - @param tag {String} The tag for which the constructor should apply. - @param constructor {Function} A function that turns a {Node} with the given tag into a - Javascript object. - @return {Function} Returns the supplied `constructor`. - */ - static add_constructor(tag, constructor) { - if (!this.prototype.hasOwnProperty("yaml_constructors")) { - this.prototype.yaml_constructors = util.extend({}, this.prototype.yaml_constructors); - } - return this.prototype.yaml_constructors[tag] = constructor; - } - /* - Add a constructor function for a tag prefix. - - The constructor will be used to turn {Node Nodes} with the given tag prefix into a Javascript - object. - - @param tag_prefix {String} The tag prefix for which the constructor should apply. - @param multi_constructor {Function} A function that turns a {Node} with the given tag - prefix into a Javascript object. - @return {Function} Returns the supplied `multi_constructor`. - */ - static add_multi_constructor(tag_prefix, multi_constructor) { - if (!this.prototype.hasOwnProperty("yaml_multi_constructors")) { - this.prototype.yaml_multi_constructors = util.extend({}, this.prototype.yaml_multi_constructors); - } - return this.prototype.yaml_multi_constructors[tag_prefix] = multi_constructor; - } - /* - Initialise a new instance. - */ - initialise() { - this.constructed_objects = {}; - this.constructing_nodes = []; - return this.deferred_constructors = []; - } - /* - Checks if a document can be constructed from the representation stream. - - So long as the representation stream hasn't ended, another document can be constructed. - - @return {Boolean} True if a document can be constructed, false otherwise. - */ - check_data() { - return this.check_node(); - } - /* - Construct a document from the remaining representation stream. - - {Constructor#check_data} must be called before calling this method. - - @return {any} The next document in the stream. Returns `undefined` if the stream has ended. - */ - get_data() { - if (this.check_node()) { - return this.construct_document(this.get_node()); - } - } - /* - Construct a single document from the entire representation stream. - - @throw {ComposerError} if there's more than one document is in the stream. - - @return {Node} The single document in the stream. - */ - get_single_data() { - var node; - node = this.get_single_node(); - if (node != null) { - return this.construct_document(node); - } - return null; - } - /* - Construct a document node - - @private - */ - construct_document(node) { - var data; - data = this.construct_object(node); - while (!util.is_empty(this.deferred_constructors)) { - this.deferred_constructors.pop()(); - } - return data; - } - defer(f) { - return this.deferred_constructors.push(f); - } - construct_object(node) { - var constructor, object, ref, tag_prefix, tag_suffix; - if (node.unique_id in this.constructed_objects) { - return this.constructed_objects[node.unique_id]; - } - if (ref = node.unique_id, indexOf.call(this.constructing_nodes, ref) >= 0) { - throw new exports.ConstructorError(null, null, "found unconstructable recursive node", node.start_mark); - } - this.constructing_nodes.push(node.unique_id); - constructor = null; - tag_suffix = null; - if (node.tag in this.yaml_constructors) { - constructor = this.yaml_constructors[node.tag]; - } else { - for (tag_prefix in this.yaml_multi_constructors) { - if (node.tag.indexOf(tag_prefix === 0)) { - tag_suffix = node.tag.slice(tag_prefix.length); - constructor = this.yaml_multi_constructors[tag_prefix]; - break; - } - } - if (constructor == null) { - if (null in this.yaml_multi_constructors) { - tag_suffix = node.tag; - constructor = this.yaml_multi_constructors.null; - } else if (null in this.yaml_constructors) { - constructor = this.yaml_constructors.null; - } else if (node instanceof nodes.ScalarNode) { - constructor = this.construct_scalar; - } else if (node instanceof nodes.SequenceNode) { - constructor = this.construct_sequence; - } else if (node instanceof nodes.MappingNode) { - constructor = this.construct_mapping; - } - } - } - object = constructor.call(this, tag_suffix != null ? tag_suffix : node, node); - this.constructed_objects[node.unique_id] = object; - this.constructing_nodes.pop(); - return object; - } - construct_scalar(node) { - if (!(node instanceof nodes.ScalarNode)) { - throw new exports.ConstructorError(null, null, `expected a scalar node but found ${node.id}`, node.start_mark); - } - return node.value; - } - construct_sequence(node) { - var child, i, len, ref, results; - if (!(node instanceof nodes.SequenceNode)) { - throw new exports.ConstructorError(null, null, `expected a sequence node but found ${node.id}`, node.start_mark); - } - ref = node.value; - results = []; - for (i = 0, len = ref.length; i < len; i++) { - child = ref[i]; - results.push(this.construct_object(child)); - } - return results; - } - construct_mapping(node) { - var i, key, key_node, len, mapping, ref, value, value_node; - if (!(node instanceof nodes.MappingNode)) { - throw new ConstructorError(null, null, `expected a mapping node but found ${node.id}`, node.start_mark); - } - mapping = {}; - ref = node.value; - for (i = 0, len = ref.length; i < len; i++) { - [key_node, value_node] = ref[i]; - key = this.construct_object(key_node); - if (typeof key === "object") { - throw new exports.ConstructorError("while constructing a mapping", node.start_mark, "found unhashable key", key_node.start_mark); - } - value = this.construct_object(value_node); - mapping[key] = value; - } - return mapping; - } - construct_pairs(node) { - var i, key, key_node, len, pairs, ref, value, value_node; - if (!(node instanceof nodes.MappingNode)) { - throw new exports.ConstructorError(null, null, `expected a mapping node but found ${node.id}`, node.start_mark); - } - pairs = []; - ref = node.value; - for (i = 0, len = ref.length; i < len; i++) { - [key_node, value_node] = ref[i]; - key = this.construct_object(key_node); - value = this.construct_object(value_node); - pairs.push([key, value]); - } - return pairs; - } - } - - BaseConstructor.prototype.yaml_constructors = {}; - BaseConstructor.prototype.yaml_multi_constructors = {}; - ctor = BaseConstructor.prototype.initialise; - return BaseConstructor; - }).call(this); - this.Constructor = (function() { - var BOOL_VALUES, TIMESTAMP_PARTS, TIMESTAMP_REGEX; - class Constructor extends this.BaseConstructor { - construct_scalar(node) { - var i, key_node, len, ref, value_node; - if (node instanceof nodes.MappingNode) { - ref = node.value; - for (i = 0, len = ref.length; i < len; i++) { - [key_node, value_node] = ref[i]; - if (key_node.tag === "tag:yaml.org,2002:value") { - return this.construct_scalar(value_node); - } - } - } - return super.construct_scalar(node); - } - flatten_mapping(node) { - var i, index, j, key_node, len, len1, merge, ref, submerge, subnode, value, value_node; - merge = []; - index = 0; - while (index < node.value.length) { - [key_node, value_node] = node.value[index]; - if (key_node.tag === "tag:yaml.org,2002:merge") { - node.value.splice(index, 1); - if (value_node instanceof nodes.MappingNode) { - this.flatten_mapping(value_node); - merge = merge.concat(value_node.value); - } else if (value_node instanceof nodes.SequenceNode) { - submerge = []; - ref = value_node.value; - for (i = 0, len = ref.length; i < len; i++) { - subnode = ref[i]; - if (!(subnode instanceof nodes.MappingNode)) { - throw new exports.ConstructorError("while constructing a mapping", node.start_mark, `expected a mapping for merging, but found ${subnode.id}`, subnode.start_mark); - } - this.flatten_mapping(subnode); - submerge.push(subnode.value); - } - submerge.reverse(); - for (j = 0, len1 = submerge.length; j < len1; j++) { - value = submerge[j]; - merge = merge.concat(value); - } - } else { - throw new exports.ConstructorError("while constructing a mapping", node.start_mark, `expected a mapping or list of mappings for merging but found ${value_node.id}`, value_node.start_mark); - } - } else if (key_node.tag === "tag:yaml.org,2002:value") { - key_node.tag = "tag:yaml.org,2002:str"; - index++; - } else { - index++; - } - } - if (merge.length) { - return node.value = merge.concat(node.value); - } - } - construct_mapping(node) { - if (node instanceof nodes.MappingNode) { - this.flatten_mapping(node); - } - return super.construct_mapping(node); - } - construct_yaml_null(node) { - this.construct_scalar(node); - return null; - } - construct_yaml_bool(node) { - var value; - value = this.construct_scalar(node); - return BOOL_VALUES[value.toLowerCase()]; - } - construct_yaml_int(node) { - var base, digit, digits, i, len, part, ref, sign, value; - value = this.construct_scalar(node); - value = value.replace(/_/g, ""); - sign = value[0] === "-" ? -1 : 1; - if (ref = value[0], indexOf.call("+-", ref) >= 0) { - value = value.slice(1); - } - if (value === "0") { - return 0; - } else if (value.indexOf("0b") === 0) { - return sign * parseInt(value.slice(2), 2); - } else if (value.indexOf("0x") === 0) { - return sign * parseInt(value.slice(2), 16); - } else if (value.indexOf("0o") === 0) { - return sign * parseInt(value.slice(2), 8); - } else if (value[0] === "0") { - return sign * parseInt(value, 8); - } else if (indexOf.call(value, ":") >= 0) { - digits = (function() { - var i2, len2, ref1, results; - ref1 = value.split(/:/g); - results = []; - for (i2 = 0, len2 = ref1.length; i2 < len2; i2++) { - part = ref1[i2]; - results.push(parseInt(part)); - } - return results; - })(); - digits.reverse(); - base = 1; - value = 0; - for (i = 0, len = digits.length; i < len; i++) { - digit = digits[i]; - value += digit * base; - base *= 60; - } - return sign * value; - } else { - return sign * parseInt(value); - } - } - construct_yaml_float(node) { - var base, digit, digits, i, len, part, ref, sign, value; - value = this.construct_scalar(node); - value = value.replace(/_/g, "").toLowerCase(); - sign = value[0] === "-" ? -1 : 1; - if (ref = value[0], indexOf.call("+-", ref) >= 0) { - value = value.slice(1); - } - if (value === ".inf") { - return sign * Infinity; - } else if (value === ".nan") { - return 0 / 0; - } else if (indexOf.call(value, ":") >= 0) { - digits = (function() { - var i2, len2, ref1, results; - ref1 = value.split(/:/g); - results = []; - for (i2 = 0, len2 = ref1.length; i2 < len2; i2++) { - part = ref1[i2]; - results.push(parseFloat(part)); - } - return results; - })(); - digits.reverse(); - base = 1; - value = 0; - for (i = 0, len = digits.length; i < len; i++) { - digit = digits[i]; - value += digit * base; - base *= 60; - } - return sign * value; - } else { - return sign * parseFloat(value); - } - } - construct_yaml_binary(node) { - var error, value; - value = this.construct_scalar(node); - try { - if (typeof window !== "undefined" && window !== null) { - return atob(value); - } - return new Buffer(value, "base64").toString("ascii"); - } catch (error1) { - error = error1; - throw new exports.ConstructorError(null, null, `failed to decode base64 data: ${error}`, node.start_mark); - } - } - construct_yaml_timestamp(node) { - var date, day, fraction, hour, index, key, match, millisecond, minute, month, second, tz_hour, tz_minute, tz_sign, value, values, year; - value = this.construct_scalar(node); - match = node.value.match(TIMESTAMP_REGEX); - values = {}; - for (key in TIMESTAMP_PARTS) { - index = TIMESTAMP_PARTS[key]; - values[key] = match[index]; - } - year = parseInt(values.year); - month = parseInt(values.month) - 1; - day = parseInt(values.day); - if (!values.hour) { - return new Date(Date.UTC(year, month, day)); - } - hour = parseInt(values.hour); - minute = parseInt(values.minute); - second = parseInt(values.second); - millisecond = 0; - if (values.fraction) { - fraction = values.fraction.slice(0, 6); - while (fraction.length < 6) { - fraction += "0"; - } - fraction = parseInt(fraction); - millisecond = Math.round(fraction / 1e3); - } - if (values.tz_sign) { - tz_sign = values.tz_sign === "-" ? 1 : -1; - if (tz_hour = parseInt(values.tz_hour)) { - hour += tz_sign * tz_hour; - } - if (tz_minute = parseInt(values.tz_minute)) { - minute += tz_sign * tz_minute; - } - } - date = new Date(Date.UTC(year, month, day, hour, minute, second, millisecond)); - return date; - } - construct_yaml_pair_list(type, node) { - var list; - list = []; - if (!(node instanceof nodes.SequenceNode)) { - throw new exports.ConstructorError(`while constructing ${type}`, node.start_mark, `expected a sequence but found ${node.id}`, node.start_mark); - } - this.defer(() => { - var i, key, key_node, len, ref, results, subnode, value, value_node; - ref = node.value; - results = []; - for (i = 0, len = ref.length; i < len; i++) { - subnode = ref[i]; - if (!(subnode instanceof nodes.MappingNode)) { - throw new exports.ConstructorError(`while constructing ${type}`, node.start_mark, `expected a mapping of length 1 but found ${subnode.id}`, subnode.start_mark); - } - if (subnode.value.length !== 1) { - throw new exports.ConstructorError(`while constructing ${type}`, node.start_mark, `expected a mapping of length 1 but found ${subnode.id}`, subnode.start_mark); - } - [key_node, value_node] = subnode.value[0]; - key = this.construct_object(key_node); - value = this.construct_object(value_node); - results.push(list.push([key, value])); - } - return results; - }); - return list; - } - construct_yaml_omap(node) { - return this.construct_yaml_pair_list("an ordered map", node); - } - construct_yaml_pairs(node) { - return this.construct_yaml_pair_list("pairs", node); - } - construct_yaml_set(node) { - var data; - data = []; - this.defer(() => { - var item, results; - results = []; - for (item in this.construct_mapping(node)) { - results.push(data.push(item)); - } - return results; - }); - return data; - } - construct_yaml_str(node) { - return this.construct_scalar(node); - } - construct_yaml_seq(node) { - var data; - data = []; - this.defer(() => { - var i, item, len, ref, results; - ref = this.construct_sequence(node); - results = []; - for (i = 0, len = ref.length; i < len; i++) { - item = ref[i]; - results.push(data.push(item)); - } - return results; - }); - return data; - } - construct_yaml_map(node) { - var data; - data = {}; - this.defer(() => { - var key, ref, results, value; - ref = this.construct_mapping(node); - results = []; - for (key in ref) { - value = ref[key]; - results.push(data[key] = value); - } - return results; - }); - return data; - } - construct_yaml_object(node, klass) { - var data; - data = new klass(); - this.defer(() => { - var key, ref, results, value; - ref = this.construct_mapping(node, true); - results = []; - for (key in ref) { - value = ref[key]; - results.push(data[key] = value); - } - return results; - }); - return data; - } - construct_undefined(node) { - throw new exports.ConstructorError(null, null, `could not determine a constructor for the tag ${node.tag}`, node.start_mark); - } - } - - BOOL_VALUES = { - on: true, - off: false, - true: true, - false: false, - yes: true, - no: false - }; - TIMESTAMP_REGEX = /^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:(?:[Tt]|[\x20\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\.([0-9]*))?(?:[\x20\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?)?$/; - TIMESTAMP_PARTS = { - year: 1, - month: 2, - day: 3, - hour: 4, - minute: 5, - second: 6, - fraction: 7, - tz: 8, - tz_sign: 9, - tz_hour: 10, - tz_minute: 11 - }; - return Constructor; - }).call(this); - this.Constructor.add_constructor("tag:yaml.org,2002:null", this.Constructor.prototype.construct_yaml_null); - this.Constructor.add_constructor("tag:yaml.org,2002:bool", this.Constructor.prototype.construct_yaml_bool); - this.Constructor.add_constructor("tag:yaml.org,2002:int", this.Constructor.prototype.construct_yaml_int); - this.Constructor.add_constructor("tag:yaml.org,2002:float", this.Constructor.prototype.construct_yaml_float); - this.Constructor.add_constructor("tag:yaml.org,2002:binary", this.Constructor.prototype.construct_yaml_binary); - this.Constructor.add_constructor("tag:yaml.org,2002:timestamp", this.Constructor.prototype.construct_yaml_timestamp); - this.Constructor.add_constructor("tag:yaml.org,2002:omap", this.Constructor.prototype.construct_yaml_omap); - this.Constructor.add_constructor("tag:yaml.org,2002:pairs", this.Constructor.prototype.construct_yaml_pairs); - this.Constructor.add_constructor("tag:yaml.org,2002:set", this.Constructor.prototype.construct_yaml_set); - this.Constructor.add_constructor("tag:yaml.org,2002:str", this.Constructor.prototype.construct_yaml_str); - this.Constructor.add_constructor("tag:yaml.org,2002:seq", this.Constructor.prototype.construct_yaml_seq); - this.Constructor.add_constructor("tag:yaml.org,2002:map", this.Constructor.prototype.construct_yaml_map); - this.Constructor.add_constructor(null, this.Constructor.prototype.construct_undefined); - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/emitter.js -var require_emitter = __commonJS({ - "node_modules/yaml-js/lib/emitter.js"(exports) { - (function() { - var ScalarAnalysis, YAMLError, events, util, hasProp = {}.hasOwnProperty, { indexOf } = []; - events = require_events(); - util = require_util(); - ({ YAMLError } = require_errors()); - this.EmitterError = class EmitterError extends YAMLError { - }; - this.Emitter = (function() { - var C_WHITESPACE, DEFAULT_TAG_PREFIXES, ESCAPE_REPLACEMENTS, ctor; - class Emitter { - constructor() { - return ctor.apply(this, arguments); - } - initialise(stream, options) { - var ref; - this.stream = stream; - this.encoding = null; - this.states = []; - this.state = this.expect_stream_start; - this.events = []; - this.event = null; - this.indents = []; - this.indent = null; - this.flow_level = 0; - this.root_context = false; - this.sequence_context = false; - this.mapping_context = false; - this.simple_key_context = false; - this.line = 0; - this.column = 0; - this.whitespace = true; - this.indentation = true; - this.open_ended = false; - ({ canonical: this.canonical, allow_unicode: this.allow_unicode } = options); - if (this.canonical == null) { - this.canonical = false; - } - if (this.allow_unicode == null) { - this.allow_unicode = true; - } - this.best_indent = options.indent > 1 && options.indent < 10 ? options.indent : 2; - this.best_width = options.width > this.indent * 2 ? options.width : 80; - this.best_line_break = (ref = options.line_break) === "\r" || ref === "\n" || ref === "\r\n" ? options.line_break : "\n"; - this.tag_prefixes = null; - this.prepared_anchor = null; - this.prepared_tag = null; - this.analysis = null; - return this.style = null; - } - /* - Reset the state attributes (to clear self-references) - */ - dispose() { - this.states = []; - return this.state = null; - } - emit(event) { - var results; - this.events.push(event); - results = []; - while (!this.need_more_events()) { - this.event = this.events.shift(); - this.state(); - results.push(this.event = null); - } - return results; - } - /* - In some cases, we wait for a few next events before emitting. - */ - need_more_events() { - var event; - if (this.events.length === 0) { - return true; - } - event = this.events[0]; - if (event instanceof events.DocumentStartEvent) { - return this.need_events(1); - } else if (event instanceof events.SequenceStartEvent) { - return this.need_events(2); - } else if (event instanceof events.MappingStartEvent) { - return this.need_events(3); - } else { - return false; - } - } - need_events(count) { - var event, i, len, level, ref; - level = 0; - ref = this.events.slice(1); - for (i = 0, len = ref.length; i < len; i++) { - event = ref[i]; - if (event instanceof events.DocumentStartEvent || event instanceof events.CollectionStartEvent) { - level++; - } else if (event instanceof events.DocumentEndEvent || event instanceof events.CollectionEndEvent) { - level--; - } else if (event instanceof events.StreamEndEvent) { - level = -1; - } - if (level < 0) { - return false; - } - } - return this.events.length < count + 1; - } - increase_indent(options = {}) { - this.indents.push(this.indent); - if (this.indent == null) { - return this.indent = options.flow ? this.best_indent : 0; - } else if (!options.indentless) { - return this.indent += this.best_indent; - } - } - // Stream states - expect_stream_start() { - if (this.event instanceof events.StreamStartEvent) { - if (this.event.encoding && !("encoding" in this.stream)) { - this.encoding = this.event.encoding; - } - this.write_stream_start(); - return this.state = this.expect_first_document_start; - } else { - return this.error("expected StreamStartEvent, but got", this.event); - } - } - expect_nothing() { - return this.error("expected nothing, but got", this.event); - } - // Document states - expect_first_document_start() { - return this.expect_document_start(true); - } - expect_document_start(first = false) { - var explicit, handle, i, k, len, prefix, ref; - if (this.event instanceof events.DocumentStartEvent) { - if ((this.event.version || this.event.tags) && this.open_ended) { - this.write_indicator("...", true); - this.write_indent(); - } - if (this.event.version) { - this.write_version_directive(this.prepare_version(this.event.version)); - } - this.tag_prefixes = util.clone(DEFAULT_TAG_PREFIXES); - if (this.event.tags) { - ref = (function() { - var ref2, results; - ref2 = this.event.tags; - results = []; - for (k in ref2) { - if (!hasProp.call(ref2, k)) continue; - results.push(k); - } - return results; - }).call(this).sort(); - for (i = 0, len = ref.length; i < len; i++) { - handle = ref[i]; - prefix = this.event.tags[handle]; - this.tag_prefixes[prefix] = handle; - this.write_tag_directive(this.prepare_tag_handle(handle), this.prepare_tag_prefix(prefix)); - } - } - explicit = !first || this.event.explicit || this.canonical || this.event.version || this.event.tags || this.check_empty_document(); - if (explicit) { - this.write_indent(); - this.write_indicator("---", true); - if (this.canonical) { - this.write_indent(); - } - } - return this.state = this.expect_document_root; - } else if (this.event instanceof events.StreamEndEvent) { - if (this.open_ended) { - this.write_indicator("...", true); - this.write_indent(); - } - this.write_stream_end(); - return this.state = this.expect_nothing; - } else { - return this.error("expected DocumentStartEvent, but got", this.event); - } - } - expect_document_end() { - if (this.event instanceof events.DocumentEndEvent) { - this.write_indent(); - if (this.event.explicit) { - this.write_indicator("...", true); - this.write_indent(); - } - this.flush_stream(); - return this.state = this.expect_document_start; - } else { - return this.error("expected DocumentEndEvent, but got", this.event); - } - } - expect_document_root() { - this.states.push(this.expect_document_end); - return this.expect_node({ - root: true - }); - } - // Node states - expect_node(expect = {}) { - this.root_context = !!expect.root; - this.sequence_context = !!expect.sequence; - this.mapping_context = !!expect.mapping; - this.simple_key_context = !!expect.simple_key; - if (this.event instanceof events.AliasEvent) { - return this.expect_alias(); - } else if (this.event instanceof events.ScalarEvent || this.event instanceof events.CollectionStartEvent) { - this.process_anchor("&"); - this.process_tag(); - if (this.event instanceof events.ScalarEvent) { - return this.expect_scalar(); - } else if (this.event instanceof events.SequenceStartEvent) { - if (this.flow_level || this.canonical || this.event.flow_style || this.check_empty_sequence()) { - return this.expect_flow_sequence(); - } else { - return this.expect_block_sequence(); - } - } else if (this.event instanceof events.MappingStartEvent) { - if (this.flow_level || this.canonical || this.event.flow_style || this.check_empty_mapping()) { - return this.expect_flow_mapping(); - } else { - return this.expect_block_mapping(); - } - } - } else { - return this.error("expected NodeEvent, but got", this.event); - } - } - expect_alias() { - if (!this.event.anchor) { - this.error("anchor is not specified for alias"); - } - this.process_anchor("*"); - return this.state = this.states.pop(); - } - expect_scalar() { - this.increase_indent({ - flow: true - }); - this.process_scalar(); - this.indent = this.indents.pop(); - return this.state = this.states.pop(); - } - // Flow sequence states - expect_flow_sequence() { - this.write_indicator("[", true, { - whitespace: true - }); - this.flow_level++; - this.increase_indent({ - flow: true - }); - return this.state = this.expect_first_flow_sequence_item; - } - expect_first_flow_sequence_item() { - if (this.event instanceof events.SequenceEndEvent) { - this.indent = this.indents.pop(); - this.flow_level--; - this.write_indicator("]", false); - return this.state = this.states.pop(); - } else { - if (this.canonical || this.column > this.best_width) { - this.write_indent(); - } - this.states.push(this.expect_flow_sequence_item); - return this.expect_node({ - sequence: true - }); - } - } - expect_flow_sequence_item() { - if (this.event instanceof events.SequenceEndEvent) { - this.indent = this.indents.pop(); - this.flow_level--; - if (this.canonical) { - this.write_indicator(",", false); - this.write_indent(); - } - this.write_indicator("]", false); - return this.state = this.states.pop(); - } else { - this.write_indicator(",", false); - if (this.canonical || this.column > this.best_width) { - this.write_indent(); - } - this.states.push(this.expect_flow_sequence_item); - return this.expect_node({ - sequence: true - }); - } - } - // Flow mapping states - expect_flow_mapping() { - this.write_indicator("{", true, { - whitespace: true - }); - this.flow_level++; - this.increase_indent({ - flow: true - }); - return this.state = this.expect_first_flow_mapping_key; - } - expect_first_flow_mapping_key() { - if (this.event instanceof events.MappingEndEvent) { - this.indent = this.indents.pop(); - this.flow_level--; - this.write_indicator("}", false); - return this.state = this.states.pop(); - } else { - if (this.canonical || this.column > this.best_width) { - this.write_indent(); - } - if (!this.canonical && this.check_simple_key()) { - this.states.push(this.expect_flow_mapping_simple_value); - return this.expect_node({ - mapping: true, - simple_key: true - }); - } else { - this.write_indicator("?", true); - this.states.push(this.expect_flow_mapping_value); - return this.expect_node({ - mapping: true - }); - } - } - } - expect_flow_mapping_key() { - if (this.event instanceof events.MappingEndEvent) { - this.indent = this.indents.pop(); - this.flow_level--; - if (this.canonical) { - this.write_indicator(",", false); - this.write_indent(); - } - this.write_indicator("}", false); - return this.state = this.states.pop(); - } else { - this.write_indicator(",", false); - if (this.canonical || this.column > this.best_width) { - this.write_indent(); - } - if (!this.canonical && this.check_simple_key()) { - this.states.push(this.expect_flow_mapping_simple_value); - return this.expect_node({ - mapping: true, - simple_key: true - }); - } else { - this.write_indicator("?", true); - this.states.push(this.expect_flow_mapping_value); - return this.expect_node({ - mapping: true - }); - } - } - } - expect_flow_mapping_simple_value() { - this.write_indicator(":", false); - this.states.push(this.expect_flow_mapping_key); - return this.expect_node({ - mapping: true - }); - } - expect_flow_mapping_value() { - if (this.canonical || this.column > this.best_width) { - this.write_indent(); - } - this.write_indicator(":", true); - this.states.push(this.expect_flow_mapping_key); - return this.expect_node({ - mapping: true - }); - } - // Block sequence states - expect_block_sequence() { - var indentless; - indentless = this.mapping_context && !this.indentation; - this.increase_indent({ indentless }); - return this.state = this.expect_first_block_sequence_item; - } - expect_first_block_sequence_item() { - return this.expect_block_sequence_item(true); - } - expect_block_sequence_item(first = false) { - if (!first && this.event instanceof events.SequenceEndEvent) { - this.indent = this.indents.pop(); - return this.state = this.states.pop(); - } else { - this.write_indent(); - this.write_indicator("-", true, { - indentation: true - }); - this.states.push(this.expect_block_sequence_item); - return this.expect_node({ - sequence: true - }); - } - } - // Block mapping states - expect_block_mapping() { - this.increase_indent(); - return this.state = this.expect_first_block_mapping_key; - } - expect_first_block_mapping_key() { - return this.expect_block_mapping_key(true); - } - expect_block_mapping_key(first = false) { - if (!first && this.event instanceof events.MappingEndEvent) { - this.indent = this.indents.pop(); - return this.state = this.states.pop(); - } else { - this.write_indent(); - if (this.check_simple_key()) { - this.states.push(this.expect_block_mapping_simple_value); - return this.expect_node({ - mapping: true, - simple_key: true - }); - } else { - this.write_indicator("?", true, { - indentation: true - }); - this.states.push(this.expect_block_mapping_value); - return this.expect_node({ - mapping: true - }); - } - } - } - expect_block_mapping_simple_value() { - this.write_indicator(":", false); - this.states.push(this.expect_block_mapping_key); - return this.expect_node({ - mapping: true - }); - } - expect_block_mapping_value() { - this.write_indent(); - this.write_indicator(":", true, { - indentation: true - }); - this.states.push(this.expect_block_mapping_key); - return this.expect_node({ - mapping: true - }); - } - // Checkers - check_empty_document() { - var event; - if (!(this.event instanceof events.DocumentStartEvent) || this.events.length === 0) { - return false; - } - event = this.events[0]; - return event instanceof events.ScalarEvent && event.anchor == null && event.tag == null && event.implicit && event.value === ""; - } - check_empty_sequence() { - return this.event instanceof events.SequenceStartEvent && this.events[0] instanceof events.SequenceEndEvent; - } - check_empty_mapping() { - return this.event instanceof events.MappingStartEvent && this.events[0] instanceof events.MappingEndEvent; - } - check_simple_key() { - var length; - length = 0; - if (this.event instanceof events.NodeEvent && this.event.anchor != null) { - if (this.prepared_anchor == null) { - this.prepared_anchor = this.prepare_anchor(this.event.anchor); - } - length += this.prepared_anchor.length; - } - if (this.event.tag != null && (this.event instanceof events.ScalarEvent || this.event instanceof events.CollectionStartEvent)) { - if (this.prepared_tag == null) { - this.prepared_tag = this.prepare_tag(this.event.tag); - } - length += this.prepared_tag.length; - } - if (this.event instanceof events.ScalarEvent) { - if (this.analysis == null) { - this.analysis = this.analyze_scalar(this.event.value); - } - length += this.analysis.scalar.length; - } - return length < 128 && (this.event instanceof events.AliasEvent || this.event instanceof events.ScalarEvent && !this.analysis.empty && !this.analysis.multiline || this.check_empty_sequence() || this.check_empty_mapping()); - } - // Anchor, Tag and Scalar processors - process_anchor(indicator) { - if (this.event.anchor == null) { - this.prepared_anchor = null; - return; - } - if (this.prepared_anchor == null) { - this.prepared_anchor = this.prepare_anchor(this.event.anchor); - } - if (this.prepared_anchor) { - this.write_indicator(`${indicator}${this.prepared_anchor}`, true); - } - return this.prepared_anchor = null; - } - process_tag() { - var tag; - tag = this.event.tag; - if (this.event instanceof events.ScalarEvent) { - if (this.style == null) { - this.style = this.choose_scalar_style(); - } - if ((!this.canonical || tag == null) && (this.style === "" && this.event.implicit[0] || this.style !== "" && this.event.implicit[1])) { - this.prepared_tag = null; - return; - } - if (this.event.implicit[0] && tag == null) { - tag = "!"; - this.prepared_tag = null; - } - } else if ((!this.canonical || tag == null) && this.event.implicit) { - this.prepared_tag = null; - return; - } - if (tag == null) { - this.error("tag is not specified"); - } - if (this.prepared_tag == null) { - this.prepared_tag = this.prepare_tag(tag); - } - this.write_indicator(this.prepared_tag, true); - return this.prepared_tag = null; - } - process_scalar() { - var split; - if (this.analysis == null) { - this.analysis = this.analyze_scalar(this.event.value); - } - if (this.style == null) { - this.style = this.choose_scalar_style(); - } - split = !this.simple_key_context; - switch (this.style) { - case '"': - this.write_double_quoted(this.analysis.scalar, split); - break; - case "'": - this.write_single_quoted(this.analysis.scalar, split); - break; - case ">": - this.write_folded(this.analysis.scalar); - break; - case "|": - this.write_literal(this.analysis.scalar); - break; - default: - this.write_plain(this.analysis.scalar, split); - } - this.analysis = null; - return this.style = null; - } - choose_scalar_style() { - var ref; - if (this.analysis == null) { - this.analysis = this.analyze_scalar(this.event.value); - } - if (this.event.style === '"' || this.canonical) { - return '"'; - } - if (!this.event.style && this.event.implicit[0] && !(this.simple_key_context && (this.analysis.empty || this.analysis.multiline)) && (this.flow_level && this.analysis.allow_flow_plain || !this.flow_level && this.analysis.allow_block_plain)) { - return ""; - } - if (this.event.style && (ref = this.event.style, indexOf.call("|>", ref) >= 0) && !this.flow_level && !this.simple_key_context && this.analysis.allow_block) { - return this.event.style; - } - if ((!this.event.style || this.event.style === "'") && this.analysis.allow_single_quoted && !(this.simple_key_context && this.analysis.multiline)) { - return "'"; - } - return '"'; - } - // Analyzers - prepare_version([major, minor]) { - var version; - version = `${major}.${minor}`; - if (major === 1) { - return version; - } else { - return this.error("unsupported YAML version", version); - } - } - prepare_tag_handle(handle) { - var char, i, len, ref; - if (!handle) { - this.error("tag handle must not be empty"); - } - if (handle[0] !== "!" || handle.slice(-1) !== "!") { - this.error("tag handle must start and end with '!':", handle); - } - ref = handle.slice(1, -1); - for (i = 0, len = ref.length; i < len; i++) { - char = ref[i]; - if (!(char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-_", char) >= 0)) { - this.error(`invalid character '${char}' in the tag handle:`, handle); - } - } - return handle; - } - prepare_tag_prefix(prefix) { - var char, chunks, end, start; - if (!prefix) { - this.error("tag prefix must not be empty"); - } - chunks = []; - start = 0; - end = +(prefix[0] === "!"); - while (end < prefix.length) { - char = prefix[end]; - if (char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-;/?!:@&=+$,_.~*'()[]", char) >= 0) { - end++; - } else { - if (start < end) { - chunks.push(prefix.slice(start, end)); - } - start = end += 1; - chunks.push(char); - } - } - if (start < end) { - chunks.push(prefix.slice(start, end)); - } - return chunks.join(""); - } - prepare_tag(tag) { - var char, chunks, end, handle, i, k, len, prefix, ref, start, suffix, suffix_text; - if (!tag) { - this.error("tag must not be empty"); - } - if (tag === "!") { - return tag; - } - handle = null; - suffix = tag; - ref = (function() { - var ref2, results; - ref2 = this.tag_prefixes; - results = []; - for (k in ref2) { - if (!hasProp.call(ref2, k)) continue; - results.push(k); - } - return results; - }).call(this).sort(); - for (i = 0, len = ref.length; i < len; i++) { - prefix = ref[i]; - if (tag.indexOf(prefix) === 0 && (prefix === "!" || prefix.length < tag.length)) { - handle = this.tag_prefixes[prefix]; - suffix = tag.slice(prefix.length); - } - } - chunks = []; - start = end = 0; - while (end < suffix.length) { - char = suffix[end]; - if (char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-;/?!:@&=+$,_.~*'()[]", char) >= 0 || char === "!" && handle !== "!") { - end++; - } else { - if (start < end) { - chunks.push(suffix.slice(start, end)); - } - start = end += 1; - chunks.push(char); - } - } - if (start < end) { - chunks.push(suffix.slice(start, end)); - } - suffix_text = chunks.join(""); - if (handle) { - return `${handle}${suffix_text}`; - } else { - return `!<${suffix_text}>`; - } - } - prepare_anchor(anchor) { - var char, i, len; - if (!anchor) { - this.error("anchor must not be empty"); - } - for (i = 0, len = anchor.length; i < len; i++) { - char = anchor[i]; - if (!(char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-_", char) >= 0)) { - this.error(`invalid character '${char}' in the anchor:`, anchor); - } - } - return anchor; - } - analyze_scalar(scalar) { - var allow_block, allow_block_plain, allow_double_quoted, allow_flow_plain, allow_single_quoted, block_indicators, break_space, char, flow_indicators, followed_by_whitespace, i, index, leading_break, leading_space, len, line_breaks, preceded_by_whitespace, previous_break, previous_space, ref, ref1, space_break, special_characters, trailing_break, trailing_space, unicode_characters; - if (!scalar) { - new ScalarAnalysis(scalar, true, false, false, true, true, true, false); - } - block_indicators = false; - flow_indicators = false; - line_breaks = false; - special_characters = false; - unicode_characters = false; - leading_space = false; - leading_break = false; - trailing_space = false; - trailing_break = false; - break_space = false; - space_break = false; - if (scalar.indexOf("---") === 0 || scalar.indexOf("...") === 0) { - block_indicators = true; - flow_indicators = true; - } - preceded_by_whitespace = true; - followed_by_whitespace = scalar.length === 1 || (ref = scalar[1], indexOf.call("\0 \r\n\x85\u2028\u2029", ref) >= 0); - previous_space = false; - previous_break = false; - index = 0; - for (index = i = 0, len = scalar.length; i < len; index = ++i) { - char = scalar[index]; - if (index === 0) { - if (indexOf.call("#,[]{}&*!|>'\"%@`", char) >= 0 || char === "-" && followed_by_whitespace) { - flow_indicators = true; - block_indicators = true; - } else if (indexOf.call("?:", char) >= 0) { - flow_indicators = true; - if (followed_by_whitespace) { - block_indicators = true; - } - } - } else { - if (indexOf.call(",?[]{}", char) >= 0) { - flow_indicators = true; - } else if (char === ":") { - flow_indicators = true; - if (followed_by_whitespace) { - block_indicators = true; - } - } else if (char === "#" && preceded_by_whitespace) { - flow_indicators = true; - block_indicators = true; - } - } - if (indexOf.call("\n\x85\u2028\u2029", char) >= 0) { - line_breaks = true; - } - if (!(char === "\n" || char >= " " && char <= "~")) { - if (char !== "\uFEFF" && (char === "\x85" || char >= "\xA0" && char <= "\uD7FF" || char >= "\uE000" && char <= "\uFFFD")) { - unicode_characters = true; - if (!this.allow_unicode) { - special_characters = true; - } - } else { - special_characters = true; - } - } - if (char === " ") { - if (index === 0) { - leading_space = true; - } - if (index === scalar.length - 1) { - trailing_space = true; - } - if (previous_break) { - break_space = true; - } - previous_break = false; - previous_space = true; - } else if (indexOf.call("\n\x85\u2028\u2029", char) >= 0) { - if (index === 0) { - leading_break = true; - } - if (index === scalar.length - 1) { - trailing_break = true; - } - if (previous_space) { - space_break = true; - } - previous_break = true; - previous_space = false; - } else { - previous_break = false; - previous_space = false; - } - preceded_by_whitespace = indexOf.call(C_WHITESPACE, char) >= 0; - followed_by_whitespace = index + 2 >= scalar.length || (ref1 = scalar[index + 2], indexOf.call(C_WHITESPACE, ref1) >= 0); - } - allow_flow_plain = true; - allow_block_plain = true; - allow_single_quoted = true; - allow_double_quoted = true; - allow_block = true; - if (leading_space || leading_break || trailing_space || trailing_break) { - allow_flow_plain = allow_block_plain = false; - } - if (trailing_space) { - allow_block = false; - } - if (break_space) { - allow_flow_plain = allow_block_plain = allow_single_quoted = false; - } - if (space_break || special_characters) { - allow_flow_plain = allow_block_plain = allow_single_quoted = allow_block = false; - } - if (line_breaks) { - allow_flow_plain = allow_block_plain = false; - } - if (flow_indicators) { - allow_flow_plain = false; - } - if (block_indicators) { - allow_block_plain = false; - } - return new ScalarAnalysis(scalar, false, line_breaks, allow_flow_plain, allow_block_plain, allow_single_quoted, allow_double_quoted, allow_block); - } - // Writers - /* - Write BOM if needed. - */ - write_stream_start() { - if (this.encoding && this.encoding.indexOf("utf-16") === 0) { - return this.stream.write("\uFEFF", this.encoding); - } - } - write_stream_end() { - return this.flush_stream(); - } - write_indicator(indicator, need_whitespace, options = {}) { - var data; - data = this.whitespace || !need_whitespace ? indicator : " " + indicator; - this.whitespace = !!options.whitespace; - this.indentation && (this.indentation = !!options.indentation); - this.column += data.length; - this.open_ended = false; - return this.stream.write(data, this.encoding); - } - write_indent() { - var data, indent, ref; - indent = (ref = this.indent) != null ? ref : 0; - if (!this.indentation || this.column > indent || this.column === indent && !this.whitespace) { - this.write_line_break(); - } - if (this.column < indent) { - this.whitespace = true; - data = new Array(indent - this.column + 1).join(" "); - this.column = indent; - return this.stream.write(data, this.encoding); - } - } - write_line_break(data) { - this.whitespace = true; - this.indentation = true; - this.line += 1; - this.column = 0; - return this.stream.write(data != null ? data : this.best_line_break, this.encoding); - } - write_version_directive(version_text) { - this.stream.write(`%YAML ${version_text}`, this.encoding); - return this.write_line_break(); - } - write_tag_directive(handle_text, prefix_text) { - this.stream.write(`%TAG ${handle_text} ${prefix_text}`, this.encoding); - return this.write_line_break(); - } - write_single_quoted(text, split = true) { - var br, breaks, char, data, end, i, len, ref, spaces, start; - this.write_indicator("'", true); - spaces = false; - breaks = false; - start = end = 0; - while (end <= text.length) { - char = text[end]; - if (spaces) { - if (char == null || char !== " ") { - if (start + 1 === end && this.column > this.best_width && split && start !== 0 && end !== text.length) { - this.write_indent(); - } else { - data = text.slice(start, end); - this.column += data.length; - this.stream.write(data, this.encoding); - } - start = end; - } - } else if (breaks) { - if (char == null || indexOf.call("\n\x85\u2028\u2029", char) < 0) { - if (text[start] === "\n") { - this.write_line_break(); - } - ref = text.slice(start, end); - for (i = 0, len = ref.length; i < len; i++) { - br = ref[i]; - if (br === "\n") { - this.write_line_break(); - } else { - this.write_line_break(br); - } - } - this.write_indent(); - start = end; - } - } else if ((char == null || indexOf.call(" \n\x85\u2028\u2029", char) >= 0 || char === "'") && start < end) { - data = text.slice(start, end); - this.column += data.length; - this.stream.write(data, this.encoding); - start = end; - } - if (char === "'") { - this.column += 2; - this.stream.write("''", this.encoding); - start = end + 1; - } - if (char != null) { - spaces = char === " "; - breaks = indexOf.call("\n\x85\u2028\u2029", char) >= 0; - } - end++; - } - return this.write_indicator("'", false); - } - write_double_quoted(text, split = true) { - var char, data, end, start; - this.write_indicator('"', true); - start = end = 0; - while (end <= text.length) { - char = text[end]; - if (char == null || indexOf.call('"\\\x85\u2028\u2029\uFEFF', char) >= 0 || !(char >= " " && char <= "~" || this.allow_unicode && (char >= "\xA0" && char <= "\uD7FF" || char >= "\uE000" && char <= "\uFFFD"))) { - if (start < end) { - data = text.slice(start, end); - this.column += data.length; - this.stream.write(data, this.encoding); - start = end; - } - if (char != null) { - data = char in ESCAPE_REPLACEMENTS ? "\\" + ESCAPE_REPLACEMENTS[char] : char <= "\xFF" ? `\\x${util.pad_left(util.to_hex(char), "0", 2)}` : char <= "\uFFFF" ? `\\u${util.pad_left(util.to_hex(char), "0", 4)}` : `\\U${util.pad_left(util.to_hex(char), "0", 16)}`; - this.column += data.length; - this.stream.write(data, this.encoding); - start = end + 1; - } - } - if (split && (end > 0 && end < text.length - 1) && (char === " " || start >= end) && this.column + (end - start) > this.best_width) { - data = `${text.slice(start, end)}\\`; - if (start < end) { - start = end; - } - this.column += data.length; - this.stream.write(data, this.encoding); - this.write_indent(); - this.whitespace = false; - this.indentation = false; - if (text[start] === " ") { - data = "\\"; - this.column += data.length; - this.stream.write(data, this.encoding); - } - } - end++; - } - return this.write_indicator('"', false); - } - write_folded(text) { - var br, breaks, char, data, end, hints, i, leading_space, len, ref, results, spaces, start; - hints = this.determine_block_hints(text); - this.write_indicator(`>${hints}`, true); - if (hints.slice(-1) === "+") { - this.open_ended = true; - } - this.write_line_break(); - leading_space = true; - breaks = true; - spaces = false; - start = end = 0; - results = []; - while (end <= text.length) { - char = text[end]; - if (breaks) { - if (char == null || indexOf.call("\n\x85\u2028\u2029", char) < 0) { - if (!leading_space && char != null && char !== " " && text[start] === "\n") { - this.write_line_break(); - } - leading_space = char === " "; - ref = text.slice(start, end); - for (i = 0, len = ref.length; i < len; i++) { - br = ref[i]; - if (br === "\n") { - this.write_line_break(); - } else { - this.write_line_break(br); - } - } - if (char != null) { - this.write_indent(); - } - start = end; - } - } else if (spaces) { - if (char !== " ") { - if (start + 1 === end && this.column > this.best_width) { - this.write_indent(); - } else { - data = text.slice(start, end); - this.column += data.length; - this.stream.write(data, this.encoding); - } - start = end; - } - } else if (char == null || indexOf.call(" \n\x85\u2028\u2029", char) >= 0) { - data = text.slice(start, end); - this.column += data.length; - this.stream.write(data, this.encoding); - if (char == null) { - this.write_line_break(); - } - start = end; - } - if (char != null) { - breaks = indexOf.call("\n\x85\u2028\u2029", char) >= 0; - spaces = char === " "; - } - results.push(end++); - } - return results; - } - write_literal(text) { - var br, breaks, char, data, end, hints, i, len, ref, results, start; - hints = this.determine_block_hints(text); - this.write_indicator(`|${hints}`, true); - if (hints.slice(-1) === "+") { - this.open_ended = true; - } - this.write_line_break(); - breaks = true; - start = end = 0; - results = []; - while (end <= text.length) { - char = text[end]; - if (breaks) { - if (char == null || indexOf.call("\n\x85\u2028\u2029", char) < 0) { - ref = text.slice(start, end); - for (i = 0, len = ref.length; i < len; i++) { - br = ref[i]; - if (br === "\n") { - this.write_line_break(); - } else { - this.write_line_break(br); - } - } - if (char != null) { - this.write_indent(); - } - start = end; - } - } else { - if (char == null || indexOf.call("\n\x85\u2028\u2029", char) >= 0) { - data = text.slice(start, end); - this.stream.write(data, this.encoding); - if (char == null) { - this.write_line_break(); - } - start = end; - } - } - if (char != null) { - breaks = indexOf.call("\n\x85\u2028\u2029", char) >= 0; - } - results.push(end++); - } - return results; - } - write_plain(text, split = true) { - var br, breaks, char, data, end, i, len, ref, results, spaces, start; - if (!text) { - return; - } - if (this.root_context) { - this.open_ended = true; - } - if (!this.whitespace) { - data = " "; - this.column += data.length; - this.stream.write(data, this.encoding); - } - this.whitespace = false; - this.indentation = false; - spaces = false; - breaks = false; - start = end = 0; - results = []; - while (end <= text.length) { - char = text[end]; - if (spaces) { - if (char !== " ") { - if (start + 1 === end && this.column > this.best_width && split) { - this.write_indent(); - this.whitespace = false; - this.indentation = false; - } else { - data = text.slice(start, end); - this.column += data.length; - this.stream.write(data, this.encoding); - } - start = end; - } - } else if (breaks) { - if (indexOf.call("\n\x85\u2028\u2029", char) < 0) { - if (text[start] === "\n") { - this.write_line_break(); - } - ref = text.slice(start, end); - for (i = 0, len = ref.length; i < len; i++) { - br = ref[i]; - if (br === "\n") { - this.write_line_break(); - } else { - this.write_line_break(br); - } - } - this.write_indent(); - this.whitespace = false; - this.indentation = false; - start = end; - } - } else { - if (char == null || indexOf.call(" \n\x85\u2028\u2029", char) >= 0) { - data = text.slice(start, end); - this.column += data.length; - this.stream.write(data, this.encoding); - start = end; - } - } - if (char != null) { - spaces = char === " "; - breaks = indexOf.call("\n\x85\u2028\u2029", char) >= 0; - } - results.push(end++); - } - return results; - } - determine_block_hints(text) { - var first, hints, i, last, penultimate; - hints = ""; - first = text[0], i = text.length - 2, penultimate = text[i++], last = text[i++]; - if (indexOf.call(" \n\x85\u2028\u2029", first) >= 0) { - hints += this.best_indent; - } - if (indexOf.call("\n\x85\u2028\u2029", last) < 0) { - hints += "-"; - } else if (text.length === 1 || indexOf.call("\n\x85\u2028\u2029", penultimate) >= 0) { - hints += "+"; - } - return hints; - } - flush_stream() { - var base; - return typeof (base = this.stream).flush === "function" ? base.flush() : void 0; - } - /* - Helper for common error pattern. - */ - error(message, context) { - var ref, ref1; - if (context) { - context = (ref = context != null ? (ref1 = context.constructor) != null ? ref1.name : void 0 : void 0) != null ? ref : util.inspect(context); - } - throw new exports.EmitterError(`${message}${context ? ` ${context}` : ""}`); - } - } - - C_WHITESPACE = "\0 \r\n\x85\u2028\u2029"; - DEFAULT_TAG_PREFIXES = { - "!": "!", - "tag:yaml.org,2002:": "!!" - }; - ESCAPE_REPLACEMENTS = { - "\0": "0", - "\x07": "a", - "\b": "b", - " ": "t", - "\n": "n", - "\v": "v", - "\f": "f", - "\r": "r", - "\x1B": "e", - '"': '"', - "\\": "\\", - "\x85": "N", - "\xA0": "_", - "\u2028": "L", - "\u2029": "P" - }; - ctor = Emitter.prototype.initialise; - return Emitter; - }).call(this); - ScalarAnalysis = class ScalarAnalysis { - constructor(scalar1, empty, multiline, allow_flow_plain1, allow_block_plain1, allow_single_quoted1, allow_double_quoted1, allow_block1) { - this.scalar = scalar1; - this.empty = empty; - this.multiline = multiline; - this.allow_flow_plain = allow_flow_plain1; - this.allow_block_plain = allow_block_plain1; - this.allow_single_quoted = allow_single_quoted1; - this.allow_double_quoted = allow_double_quoted1; - this.allow_block = allow_block1; - } - }; - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/serializer.js -var require_serializer = __commonJS({ - "node_modules/yaml-js/lib/serializer.js"(exports) { - (function() { - var YAMLError, events, nodes, util; - events = require_events(); - nodes = require_nodes(); - util = require_util(); - ({ YAMLError } = require_errors()); - this.SerializerError = class SerializerError extends YAMLError { - }; - this.Serializer = (function() { - var ctor; - class Serializer { - constructor() { - return ctor.apply(this, arguments); - } - initialise({ - encoding, - explicit_start, - explicit_end, - version, - tags - } = {}) { - this.encoding = encoding; - this.explicit_start = explicit_start; - this.explicit_end = explicit_end; - this.version = version; - this.tags = tags; - this.serialized_nodes = {}; - this.anchors = {}; - this.last_anchor_id = 0; - return this.closed = null; - } - open() { - if (this.closed === null) { - this.emit(new events.StreamStartEvent(this.encoding)); - return this.closed = false; - } else if (this.closed) { - throw new SerializerError("serializer is closed"); - } else { - throw new SerializerError("serializer is already open"); - } - } - close() { - if (this.closed === null) { - throw new SerializerError("serializer is not opened"); - } else if (!this.closed) { - this.emit(new events.StreamEndEvent()); - return this.closed = true; - } - } - serialize(node) { - if (this.closed === null) { - throw new SerializerError("serializer is not opened"); - } else if (this.closed) { - throw new SerializerError("serializer is closed"); - } - if (node != null) { - this.emit(new events.DocumentStartEvent(void 0, void 0, this.explicit_start, this.version, this.tags)); - this.anchor_node(node); - this.serialize_node(node); - this.emit(new events.DocumentEndEvent(void 0, void 0, this.explicit_end)); - } - this.serialized_nodes = {}; - this.anchors = {}; - return this.last_anchor_id = 0; - } - anchor_node(node) { - var base, i, item, j, key, len, len1, name, ref, ref1, results, results1, value; - if (node.unique_id in this.anchors) { - return (base = this.anchors)[name = node.unique_id] != null ? base[name] : base[name] = this.generate_anchor(node); - } else { - this.anchors[node.unique_id] = null; - if (node instanceof nodes.SequenceNode) { - ref = node.value; - results = []; - for (i = 0, len = ref.length; i < len; i++) { - item = ref[i]; - results.push(this.anchor_node(item)); - } - return results; - } else if (node instanceof nodes.MappingNode) { - ref1 = node.value; - results1 = []; - for (j = 0, len1 = ref1.length; j < len1; j++) { - [key, value] = ref1[j]; - this.anchor_node(key); - results1.push(this.anchor_node(value)); - } - return results1; - } - } - } - generate_anchor(node) { - return `id${util.pad_left(++this.last_anchor_id, "0", 4)}`; - } - serialize_node(node, parent, index) { - var alias, default_tag, detected_tag, i, implicit, item, j, key, len, len1, ref, ref1, value; - alias = this.anchors[node.unique_id]; - if (node.unique_id in this.serialized_nodes) { - return this.emit(new events.AliasEvent(alias)); - } else { - this.serialized_nodes[node.unique_id] = true; - this.descend_resolver(parent, index); - if (node instanceof nodes.ScalarNode) { - detected_tag = this.resolve(nodes.ScalarNode, node.value, [true, false]); - default_tag = this.resolve(nodes.ScalarNode, node.value, [false, true]); - implicit = [node.tag === detected_tag, node.tag === default_tag]; - this.emit(new events.ScalarEvent(alias, node.tag, implicit, node.value, void 0, void 0, node.style)); - } else if (node instanceof nodes.SequenceNode) { - implicit = node.tag === this.resolve(nodes.SequenceNode, node.value, true); - this.emit(new events.SequenceStartEvent(alias, node.tag, implicit, void 0, void 0, node.flow_style)); - ref = node.value; - for (index = i = 0, len = ref.length; i < len; index = ++i) { - item = ref[index]; - this.serialize_node(item, node, index); - } - this.emit(new events.SequenceEndEvent()); - } else if (node instanceof nodes.MappingNode) { - implicit = node.tag === this.resolve(nodes.MappingNode, node.value, true); - this.emit(new events.MappingStartEvent(alias, node.tag, implicit, void 0, void 0, node.flow_style)); - ref1 = node.value; - for (j = 0, len1 = ref1.length; j < len1; j++) { - [key, value] = ref1[j]; - this.serialize_node(key, node, null); - this.serialize_node(value, node, key); - } - this.emit(new events.MappingEndEvent()); - } - return this.ascend_resolver(); - } - } - } - - ctor = Serializer.prototype.initialise; - return Serializer; - }).call(this); - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/representer.js -var require_representer = __commonJS({ - "node_modules/yaml-js/lib/representer.js"(exports) { - (function() { - var YAMLError, nodes, hasProp = {}.hasOwnProperty; - nodes = require_nodes(); - ({ YAMLError } = require_errors()); - this.RepresenterError = class RepresenterError extends YAMLError { - }; - this.BaseRepresenter = (function() { - var ctor; - class BaseRepresenter { - constructor() { - return ctor.apply(this, arguments); - } - static add_representer(data_type, handler) { - if (!this.prototype.hasOwnProperty("yaml_representers_types")) { - this.prototype.yaml_representers_types = [].concat(this.prototype.yaml_representers_types); - } - if (!this.prototype.hasOwnProperty("yaml_representers_handlers")) { - this.prototype.yaml_representers_handlers = [].concat(this.prototype.yaml_representers_handlers); - } - this.prototype.yaml_representers_types.push(data_type); - return this.prototype.yaml_representers_handlers.push(handler); - } - static add_multi_representer(data_type, handler) { - if (!this.prototype.hasOwnProperty("yaml_multi_representers_types")) { - this.prototype.yaml_multi_representers_types = [].concat(this.prototype.yaml_multi_representers_types); - } - if (!this.prototype.hasOwnProperty("yaml_multi_representers_handlers")) { - this.prototype.yaml_multi_representers_handlers = [].concat(this.prototype.yaml_multi_representers_handlers); - } - this.prototype.yaml_multi_representers_types.push(data_type); - return this.prototype.yaml_multi_representers_handlers.push(handler); - } - initialise({ - default_style, - default_flow_style - } = {}) { - this.default_style = default_style; - this.default_flow_style = default_flow_style; - this.represented_objects = {}; - this.object_keeper = []; - return this.alias_key = null; - } - represent(data) { - var node; - node = this.represent_data(data); - this.serialize(node); - this.represented_objects = {}; - this.object_keeper = []; - return this.alias_key = null; - } - represent_data(data) { - var data_type, i, j, len, ref, representer, type; - if (this.ignore_aliases(data)) { - this.alias_key = null; - } else if ((i = this.object_keeper.indexOf(data)) !== -1) { - this.alias_key = i; - if (this.alias_key in this.represented_objects) { - return this.represented_objects[this.alias_key]; - } - } else { - this.alias_key = this.object_keeper.length; - this.object_keeper.push(data); - } - representer = null; - data_type = data === null ? "null" : typeof data; - if (data_type === "object") { - data_type = data.constructor; - } - if ((i = this.yaml_representers_types.lastIndexOf(data_type)) !== -1) { - representer = this.yaml_representers_handlers[i]; - } - if (representer == null) { - ref = this.yaml_multi_representers_types; - for (i = j = 0, len = ref.length; j < len; i = ++j) { - type = ref[i]; - if (!(data instanceof type)) { - continue; - } - representer = this.yaml_multi_representers_handlers[i]; - break; - } - } - if (representer == null) { - if ((i = this.yaml_multi_representers_types.lastIndexOf(void 0)) !== -1) { - representer = this.yaml_multi_representers_handlers[i]; - } else if ((i = this.yaml_representers_types.lastIndexOf(void 0)) !== -1) { - representer = this.yaml_representers_handlers[i]; - } - } - if (representer != null) { - return representer.call(this, data); - } else { - return new nodes.ScalarNode(null, `${data}`); - } - } - represent_scalar(tag, value, style = this.default_style) { - var node; - node = new nodes.ScalarNode(tag, value, null, null, style); - if (this.alias_key != null) { - this.represented_objects[this.alias_key] = node; - } - return node; - } - represent_sequence(tag, sequence, flow_style) { - var best_style, item, j, len, node, node_item, ref, value; - value = []; - node = new nodes.SequenceNode(tag, value, null, null, flow_style); - if (this.alias_key != null) { - this.represented_objects[this.alias_key] = node; - } - best_style = true; - for (j = 0, len = sequence.length; j < len; j++) { - item = sequence[j]; - node_item = this.represent_data(item); - if (!(node_item instanceof nodes.ScalarNode || node_item.style)) { - best_style = false; - } - value.push(node_item); - } - if (flow_style == null) { - node.flow_style = (ref = this.default_flow_style) != null ? ref : best_style; - } - return node; - } - represent_mapping(tag, mapping, flow_style) { - var best_style, item_key, item_value, node, node_key, node_value, ref, value; - value = []; - node = new nodes.MappingNode(tag, value, flow_style); - if (this.alias_key) { - this.represented_objects[this.alias_key] = node; - } - best_style = true; - for (item_key in mapping) { - if (!hasProp.call(mapping, item_key)) continue; - item_value = mapping[item_key]; - node_key = this.represent_data(item_key); - node_value = this.represent_data(item_value); - if (!(node_key instanceof nodes.ScalarNode || node_key.style)) { - best_style = false; - } - if (!(node_value instanceof nodes.ScalarNode || node_value.style)) { - best_style = false; - } - value.push([node_key, node_value]); - } - if (!flow_style) { - node.flow_style = (ref = this.default_flow_style) != null ? ref : best_style; - } - return node; - } - ignore_aliases(data) { - return false; - } - } - - BaseRepresenter.prototype.yaml_representers_types = []; - BaseRepresenter.prototype.yaml_representers_handlers = []; - BaseRepresenter.prototype.yaml_multi_representers_types = []; - BaseRepresenter.prototype.yaml_multi_representers_handlers = []; - ctor = BaseRepresenter.prototype.initialise; - return BaseRepresenter; - }).call(this); - this.Representer = class Representer extends this.BaseRepresenter { - represent_boolean(data) { - return this.represent_scalar("tag:yaml.org,2002:bool", data ? "true" : "false"); - } - represent_null(data) { - return this.represent_scalar("tag:yaml.org,2002:null", "null"); - } - represent_number(data) { - var tag, value; - tag = `tag:yaml.org,2002:${data % 1 === 0 ? "int" : "float"}`; - value = data !== data ? ".nan" : data === Infinity ? ".inf" : data === -Infinity ? "-.inf" : data.toString(); - return this.represent_scalar(tag, value); - } - represent_string(data) { - return this.represent_scalar("tag:yaml.org,2002:str", data); - } - represent_array(data) { - return this.represent_sequence("tag:yaml.org,2002:seq", data); - } - represent_date(data) { - return this.represent_scalar("tag:yaml.org,2002:timestamp", data.toISOString()); - } - represent_object(data) { - return this.represent_mapping("tag:yaml.org,2002:map", data); - } - represent_undefined(data) { - throw new exports.RepresenterError(`cannot represent an onbject: ${data}`); - } - ignore_aliases(data) { - var ref; - if (data == null) { - return true; - } - if ((ref = typeof data) === "boolean" || ref === "number" || ref === "string") { - return true; - } - return false; - } - }; - this.Representer.add_representer("boolean", this.Representer.prototype.represent_boolean); - this.Representer.add_representer("null", this.Representer.prototype.represent_null); - this.Representer.add_representer("number", this.Representer.prototype.represent_number); - this.Representer.add_representer("string", this.Representer.prototype.represent_string); - this.Representer.add_representer(Array, this.Representer.prototype.represent_array); - this.Representer.add_representer(Date, this.Representer.prototype.represent_date); - this.Representer.add_representer(Object, this.Representer.prototype.represent_object); - this.Representer.add_representer(null, this.Representer.prototype.represent_undefined); - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/resolver.js -var require_resolver = __commonJS({ - "node_modules/yaml-js/lib/resolver.js"(exports) { - (function() { - var YAMLError, nodes, util, { indexOf } = []; - nodes = require_nodes(); - util = require_util(); - ({ YAMLError } = require_errors()); - this.ResolverError = class ResolverError extends YAMLError { - }; - this.BaseResolver = (function() { - var DEFAULT_MAPPING_TAG, DEFAULT_SCALAR_TAG, DEFAULT_SEQUENCE_TAG, ctor; - class BaseResolver { - constructor() { - return ctor.apply(this, arguments); - } - static add_implicit_resolver(tag, regexp, first = [null]) { - var base, char, i, len, results; - if (!this.prototype.hasOwnProperty("yaml_implicit_resolvers")) { - this.prototype.yaml_implicit_resolvers = util.extend({}, this.prototype.yaml_implicit_resolvers); - } - results = []; - for (i = 0, len = first.length; i < len; i++) { - char = first[i]; - results.push(((base = this.prototype.yaml_implicit_resolvers)[char] != null ? base[char] : base[char] = []).push([tag, regexp])); - } - return results; - } - initialise() { - this.resolver_exact_paths = []; - return this.resolver_prefix_paths = []; - } - descend_resolver(current_node, current_index) { - var depth, exact_paths, i, j, kind, len, len1, path, prefix_paths, ref, ref1; - if (util.is_empty(this.yaml_path_resolvers)) { - return; - } - exact_paths = {}; - prefix_paths = []; - if (current_node) { - depth = this.resolver_prefix_paths.length; - ref = this.resolver_prefix_paths.slice(-1)[0]; - for (i = 0, len = ref.length; i < len; i++) { - [path, kind] = ref[i]; - if (this.check_resolver_prefix(depth, path, kind, current_node, current_index)) { - if (path.length > depth) { - prefix_paths.push([path, kind]); - } else { - exact_paths[kind] = this.yaml_path_resolvers[path][kind]; - } - } - } - } else { - ref1 = this.yaml_path_resolvers; - for (j = 0, len1 = ref1.length; j < len1; j++) { - [path, kind] = ref1[j]; - if (!path) { - exact_paths[kind] = this.yaml_path_resolvers[path][kind]; - } else { - prefix_paths.push([path, kind]); - } - } - } - this.resolver_exact_paths.push(exact_paths); - return this.resolver_prefix_paths.push(prefix_paths); - } - ascend_resolver() { - if (util.is_empty(this.yaml_path_resolvers)) { - return; - } - this.resolver_exact_paths.pop(); - return this.resolver_prefix_paths.pop(); - } - check_resolver_prefix(depth, path, kind, current_node, current_index) { - var index_check, node_check; - [node_check, index_check] = path[depth - 1]; - if (typeof node_check === "string") { - if (current_node.tag !== node_check) { - return; - } - } else if (node_check !== null) { - if (!(current_node instanceof node_check)) { - return; - } - } - if (index_check === true && current_index !== null) { - return; - } - if ((index_check === false || index_check === null) && current_index === null) { - return; - } - if (typeof index_check === "string") { - if (!(current_index instanceof nodes.ScalarNode) && index_check === current_index.value) { - return; - } - } else if (typeof index_check === "number") { - if (index_check !== current_index) { - return; - } - } - return true; - } - resolve(kind, value, implicit) { - var empty, exact_paths, i, k, len, ref, ref1, ref2, regexp, resolvers, tag; - if (kind === nodes.ScalarNode && implicit[0]) { - if (value === "") { - resolvers = (ref = this.yaml_implicit_resolvers[""]) != null ? ref : []; - } else { - resolvers = (ref1 = this.yaml_implicit_resolvers[value[0]]) != null ? ref1 : []; - } - resolvers = resolvers.concat((ref2 = this.yaml_implicit_resolvers.null) != null ? ref2 : []); - for (i = 0, len = resolvers.length; i < len; i++) { - [tag, regexp] = resolvers[i]; - if (value.match(regexp)) { - return tag; - } - } - implicit = implicit[1]; - } - empty = true; - for (k in this.yaml_path_resolvers) { - if ({}[k] == null) { - empty = false; - } - } - if (!empty) { - exact_paths = this.resolver_exact_paths.slice(-1)[0]; - if (indexOf.call(exact_paths, kind) >= 0) { - return exact_paths[kind]; - } - if (indexOf.call(exact_paths, null) >= 0) { - return exact_paths.null; - } - } - if (kind === nodes.ScalarNode) { - return DEFAULT_SCALAR_TAG; - } - if (kind === nodes.SequenceNode) { - return DEFAULT_SEQUENCE_TAG; - } - if (kind === nodes.MappingNode) { - return DEFAULT_MAPPING_TAG; - } - } - } - - DEFAULT_SCALAR_TAG = "tag:yaml.org,2002:str"; - DEFAULT_SEQUENCE_TAG = "tag:yaml.org,2002:seq"; - DEFAULT_MAPPING_TAG = "tag:yaml.org,2002:map"; - BaseResolver.prototype.yaml_implicit_resolvers = {}; - BaseResolver.prototype.yaml_path_resolvers = {}; - ctor = BaseResolver.prototype.initialise; - return BaseResolver; - }).call(this); - this.Resolver = class Resolver extends this.BaseResolver { - }; - this.Resolver.add_implicit_resolver("tag:yaml.org,2002:bool", /^(?:yes|Yes|YES|true|True|TRUE|on|On|ON|no|No|NO|false|False|FALSE|off|Off|OFF)$/, "yYnNtTfFoO"); - this.Resolver.add_implicit_resolver("tag:yaml.org,2002:float", /^(?:[-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+][0-9]+)?|\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/, "-+0123456789."); - this.Resolver.add_implicit_resolver("tag:yaml.org,2002:int", /^(?:[-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[0-9a-fA-F_]+|[-+]?0o[0-7_]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$/, "-+0123456789"); - this.Resolver.add_implicit_resolver("tag:yaml.org,2002:merge", /^(?:<<)$/, "<"); - this.Resolver.add_implicit_resolver("tag:yaml.org,2002:null", /^(?:~|null|Null|NULL|)$/, ["~", "n", "N", ""]); - this.Resolver.add_implicit_resolver("tag:yaml.org,2002:timestamp", /^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]|[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]?(?:[Tt]|[\x20\t]+)[0-9][0-9]?:[0-9][0-9]:[0-9][0-9](?:\.[0-9]*)?(?:[\x20\t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$/, "0123456789"); - this.Resolver.add_implicit_resolver("tag:yaml.org,2002:value", /^(?:=)$/, "="); - this.Resolver.add_implicit_resolver("tag:yaml.org,2002:yaml", /^(?:!|&|\*)$/, "!&*"); - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/dumper.js -var require_dumper = __commonJS({ - "node_modules/yaml-js/lib/dumper.js"(exports) { - (function() { - var emitter, representer, resolver, serializer, util; - util = require_util(); - emitter = require_emitter(); - serializer = require_serializer(); - representer = require_representer(); - resolver = require_resolver(); - this.make_dumper = function(Emitter = emitter.Emitter, Serializer = serializer.Serializer, Representer = representer.Representer, Resolver = resolver.Resolver) { - var Dumper, components; - components = [Emitter, Serializer, Representer, Resolver]; - return Dumper = (function() { - var component; - class Dumper2 { - constructor(stream, options = {}) { - var i, len, ref; - components[0].prototype.initialise.call(this, stream, options); - ref = components.slice(1); - for (i = 0, len = ref.length; i < len; i++) { - component = ref[i]; - component.prototype.initialise.call(this, options); - } - } - } - - util.extend(Dumper2.prototype, ...(function() { - var i, len, results; - results = []; - for (i = 0, len = components.length; i < len; i++) { - component = components[i]; - results.push(component.prototype); - } - return results; - })()); - return Dumper2; - }).call(this); - }; - this.Dumper = this.make_dumper(); - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/reader.js -var require_reader = __commonJS({ - "node_modules/yaml-js/lib/reader.js"(exports) { - (function() { - var Mark, YAMLError, { indexOf } = []; - ({ Mark, YAMLError } = require_errors()); - this.ReaderError = class ReaderError extends YAMLError { - constructor(position1, character1, reason) { - super(); - this.position = position1; - this.character = character1; - this.reason = reason; - } - toString() { - return `unacceptable character #${this.character.charCodeAt(0).toString(16)}: ${this.reason} - position ${this.position}`; - } - }; - this.Reader = (function() { - var NON_PRINTABLE, ctor; - class Reader { - constructor() { - return ctor.apply(this, arguments); - } - initialise(string) { - this.string = string; - this.line = 0; - this.column = 0; - this.index = 0; - this.check_printable(); - return this.string += "\0"; - } - peek(index = 0) { - return this.string[this.index + index]; - } - prefix(length = 1) { - return this.string.slice(this.index, this.index + length); - } - forward(length = 1) { - var char, results; - results = []; - while (length) { - char = this.string[this.index]; - this.index++; - if (indexOf.call("\n\x85\u2082\u2029", char) >= 0 || char === "\r" && this.string[this.index] !== "\n") { - this.line++; - this.column = 0; - } else { - this.column++; - } - results.push(length--); - } - return results; - } - get_mark() { - return new Mark(this.line, this.column, this.string, this.index); - } - check_printable() { - var character, match, position; - match = NON_PRINTABLE.exec(this.string); - if (match) { - character = match[0]; - position = this.string.length - this.index + match.index; - throw new exports.ReaderError(position, character, "special characters are not allowed"); - } - } - } - - NON_PRINTABLE = /[^\x09\x0A\x0D\x20-\x7E\x85\xA0-\uFFFD]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; - ctor = Reader.prototype.initialise; - return Reader; - }).call(this); - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/tokens.js -var require_tokens = __commonJS({ - "node_modules/yaml-js/lib/tokens.js"(exports) { - (function() { - this.Token = class Token { - constructor(start_mark1, end_mark1) { - this.start_mark = start_mark1; - this.end_mark = end_mark1; - } - }; - this.DirectiveToken = (function() { - class DirectiveToken extends this.Token { - constructor(name, value, start_mark, end_mark) { - super(start_mark, end_mark); - this.name = name; - this.value = value; - } - } - - DirectiveToken.prototype.id = ""; - return DirectiveToken; - }).call(this); - this.DocumentStartToken = (function() { - class DocumentStartToken extends this.Token { - } - - DocumentStartToken.prototype.id = ""; - return DocumentStartToken; - }).call(this); - this.DocumentEndToken = (function() { - class DocumentEndToken extends this.Token { - } - - DocumentEndToken.prototype.id = ""; - return DocumentEndToken; - }).call(this); - this.StreamStartToken = (function() { - class StreamStartToken extends this.Token { - constructor(start_mark, end_mark, encoding) { - super(start_mark, end_mark); - this.encoding = encoding; - } - } - - StreamStartToken.prototype.id = ""; - return StreamStartToken; - }).call(this); - this.StreamEndToken = (function() { - class StreamEndToken extends this.Token { - } - - StreamEndToken.prototype.id = ""; - return StreamEndToken; - }).call(this); - this.BlockSequenceStartToken = (function() { - class BlockSequenceStartToken extends this.Token { - } - - BlockSequenceStartToken.prototype.id = ""; - return BlockSequenceStartToken; - }).call(this); - this.BlockMappingStartToken = (function() { - class BlockMappingStartToken extends this.Token { - } - - BlockMappingStartToken.prototype.id = ""; - return BlockMappingStartToken; - }).call(this); - this.BlockEndToken = (function() { - class BlockEndToken extends this.Token { - } - - BlockEndToken.prototype.id = ""; - return BlockEndToken; - }).call(this); - this.FlowSequenceStartToken = (function() { - class FlowSequenceStartToken extends this.Token { - } - - FlowSequenceStartToken.prototype.id = "["; - return FlowSequenceStartToken; - }).call(this); - this.FlowMappingStartToken = (function() { - class FlowMappingStartToken extends this.Token { - } - - FlowMappingStartToken.prototype.id = "{"; - return FlowMappingStartToken; - }).call(this); - this.FlowSequenceEndToken = (function() { - class FlowSequenceEndToken extends this.Token { - } - - FlowSequenceEndToken.prototype.id = "]"; - return FlowSequenceEndToken; - }).call(this); - this.FlowMappingEndToken = (function() { - class FlowMappingEndToken extends this.Token { - } - - FlowMappingEndToken.prototype.id = "}"; - return FlowMappingEndToken; - }).call(this); - this.KeyToken = (function() { - class KeyToken extends this.Token { - } - - KeyToken.prototype.id = "?"; - return KeyToken; - }).call(this); - this.ValueToken = (function() { - class ValueToken extends this.Token { - } - - ValueToken.prototype.id = ":"; - return ValueToken; - }).call(this); - this.BlockEntryToken = (function() { - class BlockEntryToken extends this.Token { - } - - BlockEntryToken.prototype.id = "-"; - return BlockEntryToken; - }).call(this); - this.FlowEntryToken = (function() { - class FlowEntryToken extends this.Token { - } - - FlowEntryToken.prototype.id = ","; - return FlowEntryToken; - }).call(this); - this.AliasToken = (function() { - class AliasToken extends this.Token { - constructor(value, start_mark, end_mark) { - super(start_mark, end_mark); - this.value = value; - } - } - - AliasToken.prototype.id = ""; - return AliasToken; - }).call(this); - this.AnchorToken = (function() { - class AnchorToken extends this.Token { - constructor(value, start_mark, end_mark) { - super(start_mark, end_mark); - this.value = value; - } - } - - AnchorToken.prototype.id = ""; - return AnchorToken; - }).call(this); - this.TagToken = (function() { - class TagToken extends this.Token { - constructor(value, start_mark, end_mark) { - super(start_mark, end_mark); - this.value = value; - } - } - - TagToken.prototype.id = ""; - return TagToken; - }).call(this); - this.ScalarToken = (function() { - class ScalarToken extends this.Token { - constructor(value, plain, start_mark, end_mark, style) { - super(start_mark, end_mark); - this.value = value; - this.plain = plain; - this.style = style; - } - } - - ScalarToken.prototype.id = ""; - return ScalarToken; - }).call(this); - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/scanner.js -var require_scanner = __commonJS({ - "node_modules/yaml-js/lib/scanner.js"(exports) { - (function() { - var MarkedYAMLError, SimpleKey, tokens, util, hasProp = {}.hasOwnProperty, { indexOf } = []; - ({ MarkedYAMLError } = require_errors()); - tokens = require_tokens(); - util = require_util(); - this.ScannerError = class ScannerError extends MarkedYAMLError { - }; - SimpleKey = class SimpleKey { - constructor(token_number1, required1, index, line, column1, mark1) { - this.token_number = token_number1; - this.required = required1; - this.index = index; - this.line = line; - this.column = column1; - this.mark = mark1; - } - }; - this.Scanner = (function() { - var C_LB, C_NUMBERS, C_WS, ESCAPE_CODES, ESCAPE_REPLACEMENTS, ctor; - class Scanner { - constructor() { - return ctor.apply(this, arguments); - } - /* - Initialise the Scanner - */ - initialise() { - this.done = false; - this.flow_level = 0; - this.tokens = []; - this.fetch_stream_start(); - this.tokens_taken = 0; - this.indent = -1; - this.indents = []; - this.allow_simple_key = true; - return this.possible_simple_keys = {}; - } - // API methods. - /* - Check if the next token is one of the given types. - */ - check_token(...choices) { - var choice, i, len; - while (this.need_more_tokens()) { - this.fetch_more_tokens(); - } - if (this.tokens.length !== 0) { - if (choices.length === 0) { - return true; - } - for (i = 0, len = choices.length; i < len; i++) { - choice = choices[i]; - if (this.tokens[0] instanceof choice) { - return true; - } - } - } - return false; - } - /* - Return the next token, but do not delete it from the queue. - */ - peek_token() { - while (this.need_more_tokens()) { - this.fetch_more_tokens(); - } - if (this.tokens.length !== 0) { - return this.tokens[0]; - } - } - /* - Return the next token, and remove it from the queue. - */ - get_token() { - while (this.need_more_tokens()) { - this.fetch_more_tokens(); - } - if (this.tokens.length !== 0) { - this.tokens_taken++; - return this.tokens.shift(); - } - } - // Non-API methods. - need_more_tokens() { - if (this.done) { - return false; - } - if (this.tokens.length === 0) { - return true; - } - this.stale_possible_simple_keys(); - if (this.next_possible_simple_key() === this.tokens_taken) { - return true; - } - return false; - } - fetch_more_tokens() { - var char; - this.scan_to_next_token(); - this.stale_possible_simple_keys(); - this.unwind_indent(this.column); - char = this.peek(); - if (char === "\0") { - return this.fetch_stream_end(); - } - if (char === "%" && this.check_directive()) { - return this.fetch_directive(); - } - if (char === "-" && this.check_document_start()) { - return this.fetch_document_start(); - } - if (char === "." && this.check_document_end()) { - return this.fetch_document_end(); - } - if (char === "[") { - return this.fetch_flow_sequence_start(); - } - if (char === "{") { - return this.fetch_flow_mapping_start(); - } - if (char === "]") { - return this.fetch_flow_sequence_end(); - } - if (char === "}") { - return this.fetch_flow_mapping_end(); - } - if (char === ",") { - return this.fetch_flow_entry(); - } - if (char === "-" && this.check_block_entry()) { - return this.fetch_block_entry(); - } - if (char === "?" && this.check_key()) { - return this.fetch_key(); - } - if (char === ":" && this.check_value()) { - return this.fetch_value(); - } - if (char === "*") { - return this.fetch_alias(); - } - if (char === "&") { - return this.fetch_anchor(); - } - if (char === "!") { - return this.fetch_tag(); - } - if (char === "|" && this.flow_level === 0) { - return this.fetch_literal(); - } - if (char === ">" && this.flow_level === 0) { - return this.fetch_folded(); - } - if (char === "'") { - return this.fetch_single(); - } - if (char === '"') { - return this.fetch_double(); - } - if (this.check_plain()) { - return this.fetch_plain(); - } - throw new exports.ScannerError("while scanning for the next token", null, `found character ${char} that cannot start any token`, this.get_mark()); - } - // Simple keys treatment. - /* - Return the number of the nearest possible simple key. - */ - next_possible_simple_key() { - var key, level, min_token_number, ref; - min_token_number = null; - ref = this.possible_simple_keys; - for (level in ref) { - if (!hasProp.call(ref, level)) continue; - key = ref[level]; - if (min_token_number === null || key.token_number < min_token_number) { - min_token_number = key.token_number; - } - } - return min_token_number; - } - /* - Remove entries that are no longer possible simple keys. According to the - YAML spec, simple keys: - should be limited to a single line - should be no longer than 1024 characters - Disabling this procedure will allow simple keys of any length and height - (may cause problems if indentation is broken though). - */ - stale_possible_simple_keys() { - var key, level, ref, results; - ref = this.possible_simple_keys; - results = []; - for (level in ref) { - if (!hasProp.call(ref, level)) continue; - key = ref[level]; - if (key.line === this.line && this.index - key.index <= 1024) { - continue; - } - if (!key.required) { - results.push(delete this.possible_simple_keys[level]); - } else { - throw new exports.ScannerError("while scanning a simple key", key.mark, "could not find expected ':'", this.get_mark()); - } - } - return results; - } - /* - The next token may start a simple key. We check if it's possible and save - its position. This function is called for ALIAS, ANCHOR, TAG, - SCALAR (flow),'[' and '{'. - */ - save_possible_simple_key() { - var required, token_number; - required = this.flow_level === 0 && this.indent === this.column; - if (required && !this.allow_simple_key) { - throw new Error("logic failure"); - } - if (!this.allow_simple_key) { - return; - } - this.remove_possible_simple_key(); - token_number = this.tokens_taken + this.tokens.length; - return this.possible_simple_keys[this.flow_level] = new SimpleKey(token_number, required, this.index, this.line, this.column, this.get_mark()); - } - /* - Remove the saved possible simple key at the current flow level. - */ - remove_possible_simple_key() { - var key; - if (!(key = this.possible_simple_keys[this.flow_level])) { - return; - } - if (!key.required) { - return delete this.possible_simple_keys[this.flow_level]; - } else { - throw new exports.ScannerError("while scanning a simple key", key.mark, "could not find expected ':'", this.get_mark()); - } - } - // Indentation functions - /* - In flow context, tokens should respect indentation. - Actually the condition should be `self.indent >= column` according to - the spec. But this condition will prohibit intuitively correct - constructions such as - key : { - } - */ - unwind_indent(column) { - var mark, results; - if (this.flow_level !== 0) { - return; - } - results = []; - while (this.indent > column) { - mark = this.get_mark(); - this.indent = this.indents.pop(); - results.push(this.tokens.push(new tokens.BlockEndToken(mark, mark))); - } - return results; - } - /* - Check if we need to increase indentation. - */ - add_indent(column) { - if (!(column > this.indent)) { - return false; - } - this.indents.push(this.indent); - this.indent = column; - return true; - } - // Fetchers. - fetch_stream_start() { - var mark; - mark = this.get_mark(); - return this.tokens.push(new tokens.StreamStartToken(mark, mark, this.encoding)); - } - fetch_stream_end() { - var mark; - this.unwind_indent(-1); - this.remove_possible_simple_key(); - this.allow_possible_simple_key = false; - this.possible_simple_keys = {}; - mark = this.get_mark(); - this.tokens.push(new tokens.StreamEndToken(mark, mark)); - return this.done = true; - } - fetch_directive() { - this.unwind_indent(-1); - this.remove_possible_simple_key(); - this.allow_simple_key = false; - return this.tokens.push(this.scan_directive()); - } - fetch_document_start() { - return this.fetch_document_indicator(tokens.DocumentStartToken); - } - fetch_document_end() { - return this.fetch_document_indicator(tokens.DocumentEndToken); - } - fetch_document_indicator(TokenClass) { - var start_mark; - this.unwind_indent(-1); - this.remove_possible_simple_key(); - this.allow_simple_key = false; - start_mark = this.get_mark(); - this.forward(3); - return this.tokens.push(new TokenClass(start_mark, this.get_mark())); - } - fetch_flow_sequence_start() { - return this.fetch_flow_collection_start(tokens.FlowSequenceStartToken); - } - fetch_flow_mapping_start() { - return this.fetch_flow_collection_start(tokens.FlowMappingStartToken); - } - fetch_flow_collection_start(TokenClass) { - var start_mark; - this.save_possible_simple_key(); - this.flow_level++; - this.allow_simple_key = true; - start_mark = this.get_mark(); - this.forward(); - return this.tokens.push(new TokenClass(start_mark, this.get_mark())); - } - fetch_flow_sequence_end() { - return this.fetch_flow_collection_end(tokens.FlowSequenceEndToken); - } - fetch_flow_mapping_end() { - return this.fetch_flow_collection_end(tokens.FlowMappingEndToken); - } - fetch_flow_collection_end(TokenClass) { - var start_mark; - this.remove_possible_simple_key(); - this.flow_level--; - this.allow_simple_key = false; - start_mark = this.get_mark(); - this.forward(); - return this.tokens.push(new TokenClass(start_mark, this.get_mark())); - } - fetch_flow_entry() { - var start_mark; - this.allow_simple_key = true; - this.remove_possible_simple_key(); - start_mark = this.get_mark(); - this.forward(); - return this.tokens.push(new tokens.FlowEntryToken(start_mark, this.get_mark())); - } - fetch_block_entry() { - var mark, start_mark; - if (this.flow_level === 0) { - if (!this.allow_simple_key) { - throw new exports.ScannerError(null, null, "sequence entries are not allowed here", this.get_mark()); - } - if (this.add_indent(this.column)) { - mark = this.get_mark(); - this.tokens.push(new tokens.BlockSequenceStartToken(mark, mark)); - } - } - this.allow_simple_key = true; - this.remove_possible_simple_key(); - start_mark = this.get_mark(); - this.forward(); - return this.tokens.push(new tokens.BlockEntryToken(start_mark, this.get_mark())); - } - fetch_key() { - var mark, start_mark; - if (this.flow_level === 0) { - if (!this.allow_simple_key) { - throw new exports.ScannerError(null, null, "mapping keys are not allowed here", this.get_mark()); - } - if (this.add_indent(this.column)) { - mark = this.get_mark(); - this.tokens.push(new tokens.BlockMappingStartToken(mark, mark)); - } - } - this.allow_simple_key = !this.flow_level; - this.remove_possible_simple_key(); - start_mark = this.get_mark(); - this.forward(); - return this.tokens.push(new tokens.KeyToken(start_mark, this.get_mark())); - } - fetch_value() { - var key, mark, start_mark; - if (key = this.possible_simple_keys[this.flow_level]) { - delete this.possible_simple_keys[this.flow_level]; - this.tokens.splice(key.token_number - this.tokens_taken, 0, new tokens.KeyToken(key.mark, key.mark)); - if (this.flow_level === 0) { - if (this.add_indent(key.column)) { - this.tokens.splice(key.token_number - this.tokens_taken, 0, new tokens.BlockMappingStartToken(key.mark, key.mark)); - } - } - this.allow_simple_key = false; - } else { - if (this.flow_level === 0) { - if (!this.allow_simple_key) { - throw new exports.ScannerError(null, null, "mapping values are not allowed here", this.get_mark()); - } - if (this.add_indent(this.column)) { - mark = this.get_mark(); - this.tokens.push(new tokens.BlockMappingStartToken(mark, mark)); - } - } - this.allow_simple_key = !this.flow_level; - this.remove_possible_simple_key(); - } - start_mark = this.get_mark(); - this.forward(); - return this.tokens.push(new tokens.ValueToken(start_mark, this.get_mark())); - } - fetch_alias() { - this.save_possible_simple_key(); - this.allow_simple_key = false; - return this.tokens.push(this.scan_anchor(tokens.AliasToken)); - } - fetch_anchor() { - this.save_possible_simple_key(); - this.allow_simple_key = false; - return this.tokens.push(this.scan_anchor(tokens.AnchorToken)); - } - fetch_tag() { - this.save_possible_simple_key(); - this.allow_simple_key = false; - return this.tokens.push(this.scan_tag()); - } - fetch_literal() { - return this.fetch_block_scalar("|"); - } - fetch_folded() { - return this.fetch_block_scalar(">"); - } - fetch_block_scalar(style) { - this.allow_simple_key = true; - this.remove_possible_simple_key(); - return this.tokens.push(this.scan_block_scalar(style)); - } - fetch_single() { - return this.fetch_flow_scalar("'"); - } - fetch_double() { - return this.fetch_flow_scalar('"'); - } - fetch_flow_scalar(style) { - this.save_possible_simple_key(); - this.allow_simple_key = false; - return this.tokens.push(this.scan_flow_scalar(style)); - } - fetch_plain() { - this.save_possible_simple_key(); - this.allow_simple_key = false; - return this.tokens.push(this.scan_plain()); - } - // Checkers. - /* - DIRECTIVE: ^ '%' - */ - check_directive() { - if (this.column === 0) { - return true; - } - return false; - } - /* - DOCUMENT-START: ^ '---' (' '|'\n') - */ - check_document_start() { - var ref; - if (this.column === 0 && this.prefix(3) === "---" && (ref = this.peek(3), indexOf.call(C_LB + C_WS + "\0", ref) >= 0)) { - return true; - } - return false; - } - /* - DOCUMENT-END: ^ '...' (' '|'\n') - */ - check_document_end() { - var ref; - if (this.column === 0 && this.prefix(3) === "..." && (ref = this.peek(3), indexOf.call(C_LB + C_WS + "\0", ref) >= 0)) { - return true; - } - return false; - } - /* - BLOCK-ENTRY: '-' (' '|'\n') - */ - check_block_entry() { - var ref; - return ref = this.peek(1), indexOf.call(C_LB + C_WS + "\0", ref) >= 0; - } - /* - KEY (flow context): '?' - KEY (block context): '?' (' '|'\n') - */ - check_key() { - var ref; - if (this.flow_level !== 0) { - return true; - } - return ref = this.peek(1), indexOf.call(C_LB + C_WS + "\0", ref) >= 0; - } - /* - VALUE (flow context): ':' - VALUE (block context): ':' (' '|'\n') - */ - check_value() { - var ref; - if (this.flow_level !== 0) { - return true; - } - return ref = this.peek(1), indexOf.call(C_LB + C_WS + "\0", ref) >= 0; - } - /* - A plain scalar may start with any non-space character except: - '-', '?', ':', ',', '[', ']', '{', '}', - '#', '&', '*', '!', '|', '>', '\'', '"', - '%', '@', '`'. - - It may also start with - '-', '?', ':' - if it is followed by a non-space character. - - Note that we limit the last rule to the block context (except the '-' - character) because we want the flow context to be space independent. - */ - check_plain() { - var char, ref; - char = this.peek(); - return indexOf.call(C_LB + C_WS + "\0-?:,[]{}#&*!|>'\"%@`", char) < 0 || (ref = this.peek(1), indexOf.call(C_LB + C_WS + "\0", ref) < 0) && (char === "-" || this.flow_level === 0 && indexOf.call("?:", char) >= 0); - } - // Scanners. - /* - We ignore spaces, line breaks and comments. - If we find a line break in the block context, we set the flag - `allow_simple_key` on. - The byte order mark is stripped if it's the first character in the stream. - We do not yet support BOM inside the stream as the specification requires. - Any such mark will be considered as a part of the document. - - TODO: We need to make tab handling rules more sane. A good rule is - Tabs cannot precede tokens BLOCK-SEQUENCE-START, BLOCK-MAPPING-START, - BLOCK-END, KEY (block context), VALUE (block context), BLOCK-ENTRY - So the tab checking code is - @allow_simple_key = off if - We also need to add the check for `allow_simple_key is on` to - `unwind_indent` before issuing BLOCK-END. Scanners for block, flow and - plain scalars need to be modified. - */ - scan_to_next_token() { - var found, ref, results; - if (this.index === 0 && this.peek() === "\uFEFF") { - this.forward(); - } - found = false; - results = []; - while (!found) { - while (this.peek() === " ") { - this.forward(); - } - if (this.peek() === "#") { - while (ref = this.peek(), indexOf.call(C_LB + "\0", ref) < 0) { - this.forward(); - } - } - if (this.scan_line_break()) { - if (this.flow_level === 0) { - results.push(this.allow_simple_key = true); - } else { - results.push(void 0); - } - } else { - results.push(found = true); - } - } - return results; - } - /* - See the specification for details. - */ - scan_directive() { - var end_mark, name, ref, start_mark, value; - start_mark = this.get_mark(); - this.forward(); - name = this.scan_directive_name(start_mark); - value = null; - if (name === "YAML") { - value = this.scan_yaml_directive_value(start_mark); - end_mark = this.get_mark(); - } else if (name === "TAG") { - value = this.scan_tag_directive_value(start_mark); - end_mark = this.get_mark(); - } else { - end_mark = this.get_mark(); - while (ref = this.peek(), indexOf.call(C_LB + "\0", ref) < 0) { - this.forward(); - } - } - this.scan_directive_ignored_line(start_mark); - return new tokens.DirectiveToken(name, value, start_mark, end_mark); - } - /* - See the specification for details. - */ - scan_directive_name(start_mark) { - var char, length, value; - length = 0; - char = this.peek(length); - while (char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-_", char) >= 0) { - length++; - char = this.peek(length); - } - if (length === 0) { - throw new exports.ScannerError("while scanning a directive", start_mark, `expected alphanumeric or numeric character but found ${char}`, this.get_mark()); - } - value = this.prefix(length); - this.forward(length); - char = this.peek(); - if (indexOf.call(C_LB + "\0 ", char) < 0) { - throw new exports.ScannerError("while scanning a directive", start_mark, `expected alphanumeric or numeric character but found ${char}`, this.get_mark()); - } - return value; - } - /* - See the specification for details. - */ - scan_yaml_directive_value(start_mark) { - var major, minor, ref; - while (this.peek() === " ") { - this.forward(); - } - major = this.scan_yaml_directive_number(start_mark); - if (this.peek() !== ".") { - throw new exports.ScannerError("while scanning a directive", start_mark, `expected a digit or '.' but found ${this.peek()}`, this.get_mark()); - } - this.forward(); - minor = this.scan_yaml_directive_number(start_mark); - if (ref = this.peek(), indexOf.call(C_LB + "\0 ", ref) < 0) { - throw new exports.ScannerError("while scanning a directive", start_mark, `expected a digit or ' ' but found ${this.peek()}`, this.get_mark()); - } - return [major, minor]; - } - /* - See the specification for details. - */ - scan_yaml_directive_number(start_mark) { - var char, length, ref, value; - char = this.peek(); - if (!(char >= "0" && char <= "9")) { - throw new exports.ScannerError("while scanning a directive", start_mark, `expected a digit but found ${char}`, this.get_mark()); - } - length = 0; - while ((ref = this.peek(length)) >= "0" && ref <= "9") { - length++; - } - value = parseInt(this.prefix(length)); - this.forward(length); - return value; - } - /* - See the specification for details. - */ - scan_tag_directive_value(start_mark) { - var handle, prefix; - while (this.peek() === " ") { - this.forward(); - } - handle = this.scan_tag_directive_handle(start_mark); - while (this.peek() === " ") { - this.forward(); - } - prefix = this.scan_tag_directive_prefix(start_mark); - return [handle, prefix]; - } - /* - See the specification for details. - */ - scan_tag_directive_handle(start_mark) { - var char, value; - value = this.scan_tag_handle("directive", start_mark); - char = this.peek(); - if (char !== " ") { - throw new exports.ScannerError("while scanning a directive", start_mark, `expected ' ' but found ${char}`, this.get_mark()); - } - return value; - } - /* - See the specification for details. - */ - scan_tag_directive_prefix(start_mark) { - var char, value; - value = this.scan_tag_uri("directive", start_mark); - char = this.peek(); - if (indexOf.call(C_LB + "\0 ", char) < 0) { - throw new exports.ScannerError("while scanning a directive", start_mark, `expected ' ' but found ${char}`, this.get_mark()); - } - return value; - } - /* - See the specification for details. - */ - scan_directive_ignored_line(start_mark) { - var char, ref; - while (this.peek() === " ") { - this.forward(); - } - if (this.peek() === "#") { - while (ref = this.peek(), indexOf.call(C_LB + "\0", ref) < 0) { - this.forward(); - } - } - char = this.peek(); - if (indexOf.call(C_LB + "\0", char) < 0) { - throw new exports.ScannerError("while scanning a directive", start_mark, `expected a comment or a line break but found ${char}`, this.get_mark()); - } - return this.scan_line_break(); - } - /* - The specification does not restrict characters for anchors and aliases. - This may lead to problems, for instance, the document: - [ *alias, value ] - can be interpteted in two ways, as - [ "value" ] - and - [ *alias , "value" ] - Therefore we restrict aliases to numbers and ASCII letters. - */ - scan_anchor(TokenClass) { - var char, indicator, length, name, start_mark, value; - start_mark = this.get_mark(); - indicator = this.peek(); - if (indicator === "*") { - name = "alias"; - } else { - name = "anchor"; - } - this.forward(); - length = 0; - char = this.peek(length); - while (char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-_", char) >= 0) { - length++; - char = this.peek(length); - } - if (length === 0) { - throw new exports.ScannerError(`while scanning an ${name}`, start_mark, `expected alphabetic or numeric character but found '${char}'`, this.get_mark()); - } - value = this.prefix(length); - this.forward(length); - char = this.peek(); - if (indexOf.call(C_LB + C_WS + "\0?:,]}%@`", char) < 0) { - throw new exports.ScannerError(`while scanning an ${name}`, start_mark, `expected alphabetic or numeric character but found '${char}'`, this.get_mark()); - } - return new TokenClass(value, start_mark, this.get_mark()); - } - /* - See the specification for details. - */ - scan_tag() { - var char, handle, length, start_mark, suffix, use_handle; - start_mark = this.get_mark(); - char = this.peek(1); - if (char === "<") { - handle = null; - this.forward(2); - suffix = this.scan_tag_uri("tag", start_mark); - if (this.peek() !== ">") { - throw new exports.ScannerError("while parsing a tag", start_mark, `expected '>' but found ${this.peek()}`, this.get_mark()); - } - this.forward(); - } else if (indexOf.call(C_LB + C_WS + "\0", char) >= 0) { - handle = null; - suffix = "!"; - this.forward(); - } else { - length = 1; - use_handle = false; - while (indexOf.call(C_LB + "\0 ", char) < 0) { - if (char === "!") { - use_handle = true; - break; - } - length++; - char = this.peek(length); - } - if (use_handle) { - handle = this.scan_tag_handle("tag", start_mark); - } else { - handle = "!"; - this.forward(); - } - suffix = this.scan_tag_uri("tag", start_mark); - } - char = this.peek(); - if (indexOf.call(C_LB + "\0 ", char) < 0) { - throw new exports.ScannerError("while scanning a tag", start_mark, `expected ' ' but found ${char}`, this.get_mark()); - } - return new tokens.TagToken([handle, suffix], start_mark, this.get_mark()); - } - /* - See the specification for details. - */ - scan_block_scalar(style) { - var breaks, chomping, chunks, end_mark, folded, increment, indent, leading_non_space, length, line_break, max_indent, min_indent, ref, ref1, ref2, start_mark; - folded = style === ">"; - chunks = []; - start_mark = this.get_mark(); - this.forward(); - [chomping, increment] = this.scan_block_scalar_indicators(start_mark); - this.scan_block_scalar_ignored_line(start_mark); - min_indent = this.indent + 1; - if (min_indent < 1) { - min_indent = 1; - } - if (increment == null) { - [breaks, max_indent, end_mark] = this.scan_block_scalar_indentation(); - indent = Math.max(min_indent, max_indent); - } else { - indent = min_indent + increment - 1; - [breaks, end_mark] = this.scan_block_scalar_breaks(indent); - } - line_break = ""; - while (this.column === indent && this.peek() !== "\0") { - chunks = chunks.concat(breaks); - leading_non_space = (ref = this.peek(), indexOf.call(" ", ref) < 0); - length = 0; - while (ref1 = this.peek(length), indexOf.call(C_LB + "\0", ref1) < 0) { - length++; - } - chunks.push(this.prefix(length)); - this.forward(length); - line_break = this.scan_line_break(); - [breaks, end_mark] = this.scan_block_scalar_breaks(indent); - if (this.column === indent && this.peek() !== "\0") { - if (folded && line_break === "\n" && leading_non_space && (ref2 = this.peek(), indexOf.call(" ", ref2) < 0)) { - if (util.is_empty(breaks)) { - chunks.push(" "); - } - } else { - chunks.push(line_break); - } - } else { - break; - } - } - if (chomping !== false) { - chunks.push(line_break); - } - if (chomping === true) { - chunks = chunks.concat(breaks); - } - return new tokens.ScalarToken(chunks.join(""), false, start_mark, end_mark, style); - } - /* - See the specification for details. - */ - scan_block_scalar_indicators(start_mark) { - var char, chomping, increment; - chomping = null; - increment = null; - char = this.peek(); - if (indexOf.call("+-", char) >= 0) { - chomping = char === "+"; - this.forward(); - char = this.peek(); - if (indexOf.call(C_NUMBERS, char) >= 0) { - increment = parseInt(char); - if (increment === 0) { - throw new exports.ScannerError("while scanning a block scalar", start_mark, "expected indentation indicator in the range 1-9 but found 0", this.get_mark()); - } - this.forward(); - } - } else if (indexOf.call(C_NUMBERS, char) >= 0) { - increment = parseInt(char); - if (increment === 0) { - throw new exports.ScannerError("while scanning a block scalar", start_mark, "expected indentation indicator in the range 1-9 but found 0", this.get_mark()); - } - this.forward(); - char = this.peek(); - if (indexOf.call("+-", char) >= 0) { - chomping = char === "+"; - this.forward(); - } - } - char = this.peek(); - if (indexOf.call(C_LB + "\0 ", char) < 0) { - throw new exports.ScannerError("while scanning a block scalar", start_mark, `expected chomping or indentation indicators, but found ${char}`, this.get_mark()); - } - return [chomping, increment]; - } - /* - See the specification for details. - */ - scan_block_scalar_ignored_line(start_mark) { - var char, ref; - while (this.peek() === " ") { - this.forward(); - } - if (this.peek() === "#") { - while (ref = this.peek(), indexOf.call(C_LB + "\0", ref) < 0) { - this.forward(); - } - } - char = this.peek(); - if (indexOf.call(C_LB + "\0", char) < 0) { - throw new exports.ScannerError("while scanning a block scalar", start_mark, `expected a comment or a line break but found ${char}`, this.get_mark()); - } - return this.scan_line_break(); - } - /* - See the specification for details. - */ - scan_block_scalar_indentation() { - var chunks, end_mark, max_indent, ref; - chunks = []; - max_indent = 0; - end_mark = this.get_mark(); - while (ref = this.peek(), indexOf.call(C_LB + " ", ref) >= 0) { - if (this.peek() !== " ") { - chunks.push(this.scan_line_break()); - end_mark = this.get_mark(); - } else { - this.forward(); - if (this.column > max_indent) { - max_indent = this.column; - } - } - } - return [chunks, max_indent, end_mark]; - } - /* - See the specification for details. - */ - scan_block_scalar_breaks(indent) { - var chunks, end_mark, ref; - chunks = []; - end_mark = this.get_mark(); - while (this.column < indent && this.peek() === " ") { - this.forward(); - } - while (ref = this.peek(), indexOf.call(C_LB, ref) >= 0) { - chunks.push(this.scan_line_break()); - end_mark = this.get_mark(); - while (this.column < indent && this.peek() === " ") { - this.forward(); - } - } - return [chunks, end_mark]; - } - /* - See the specification for details. - Note that we loose indentation rules for quoted scalars. Quoted scalars - don't need to adhere indentation because " and ' clearly mark the beginning - and the end of them. Therefore we are less restrictive than the - specification requires. We only need to check that document separators are - not included in scalars. - */ - scan_flow_scalar(style) { - var chunks, double, quote, start_mark; - double = style === '"'; - chunks = []; - start_mark = this.get_mark(); - quote = this.peek(); - this.forward(); - chunks = chunks.concat(this.scan_flow_scalar_non_spaces(double, start_mark)); - while (this.peek() !== quote) { - chunks = chunks.concat(this.scan_flow_scalar_spaces(double, start_mark)); - chunks = chunks.concat(this.scan_flow_scalar_non_spaces(double, start_mark)); - } - this.forward(); - return new tokens.ScalarToken(chunks.join(""), false, start_mark, this.get_mark(), style); - } - /* - See the specification for details. - */ - scan_flow_scalar_non_spaces(double, start_mark) { - var char, chunks, code, i, k, length, ref, ref1, ref2; - chunks = []; - while (true) { - length = 0; - while (ref = this.peek(length), indexOf.call(C_LB + C_WS + "'\"\\\0", ref) < 0) { - length++; - } - if (length !== 0) { - chunks.push(this.prefix(length)); - this.forward(length); - } - char = this.peek(); - if (!double && char === "'" && this.peek(1) === "'") { - chunks.push("'"); - this.forward(2); - } else if (double && char === "'" || !double && indexOf.call('"\\', char) >= 0) { - chunks.push(char); - this.forward(); - } else if (double && char === "\\") { - this.forward(); - char = this.peek(); - if (char in ESCAPE_REPLACEMENTS) { - chunks.push(ESCAPE_REPLACEMENTS[char]); - this.forward(); - } else if (char in ESCAPE_CODES) { - length = ESCAPE_CODES[char]; - this.forward(); - for (k = i = 0, ref1 = length; ref1 >= 0 ? i < ref1 : i > ref1; k = ref1 >= 0 ? ++i : --i) { - if (ref2 = this.peek(k), indexOf.call(`${C_NUMBERS}ABCDEFabcdef`, ref2) < 0) { - throw new exports.ScannerError("while scanning a double-quoted scalar", start_mark, `expected escape sequence of ${length} hexadecimal numbers, but found ${this.peek(k)}`, this.get_mark()); - } - } - code = parseInt(this.prefix(length), 16); - chunks.push(String.fromCharCode(code)); - this.forward(length); - } else if (indexOf.call(C_LB, char) >= 0) { - this.scan_line_break(); - chunks = chunks.concat(this.scan_flow_scalar_breaks(double, start_mark)); - } else { - throw new exports.ScannerError("while scanning a double-quoted scalar", start_mark, `found unknown escape character ${char}`, this.get_mark()); - } - } else { - return chunks; - } - } - } - /* - See the specification for details. - */ - scan_flow_scalar_spaces(double, start_mark) { - var breaks, char, chunks, length, line_break, ref, whitespaces; - chunks = []; - length = 0; - while (ref = this.peek(length), indexOf.call(C_WS, ref) >= 0) { - length++; - } - whitespaces = this.prefix(length); - this.forward(length); - char = this.peek(); - if (char === "\0") { - throw new exports.ScannerError("while scanning a quoted scalar", start_mark, "found unexpected end of stream", this.get_mark()); - } - if (indexOf.call(C_LB, char) >= 0) { - line_break = this.scan_line_break(); - breaks = this.scan_flow_scalar_breaks(double, start_mark); - if (line_break !== "\n") { - chunks.push(line_break); - } else if (breaks.length === 0) { - chunks.push(" "); - } - chunks = chunks.concat(breaks); - } else { - chunks.push(whitespaces); - } - return chunks; - } - /* - See the specification for details. - */ - scan_flow_scalar_breaks(double, start_mark) { - var chunks, prefix, ref, ref1, ref2; - chunks = []; - while (true) { - prefix = this.prefix(3); - if (prefix === "---" || prefix === "..." && (ref = this.peek(3), indexOf.call(C_LB + C_WS + "\0", ref) >= 0)) { - throw new exports.ScannerError("while scanning a quoted scalar", start_mark, "found unexpected document separator", this.get_mark()); - } - while (ref1 = this.peek(), indexOf.call(C_WS, ref1) >= 0) { - this.forward(); - } - if (ref2 = this.peek(), indexOf.call(C_LB, ref2) >= 0) { - chunks.push(this.scan_line_break()); - } else { - return chunks; - } - } - } - /* - See the specification for details. - We add an additional restriction for the flow context: - plain scalars in the flow context cannot contain ',', ':' and '?'. - We also keep track of the `allow_simple_key` flag here. - Indentation rules are loosed for the flow context. - */ - scan_plain() { - var char, chunks, end_mark, indent, length, ref, ref1, spaces, start_mark; - chunks = []; - start_mark = end_mark = this.get_mark(); - indent = this.indent + 1; - spaces = []; - while (true) { - length = 0; - if (this.peek() === "#") { - break; - } - while (true) { - char = this.peek(length); - if (indexOf.call(C_LB + C_WS + "\0", char) >= 0 || this.flow_level === 0 && char === ":" && (ref = this.peek(length + 1), indexOf.call(C_LB + C_WS + "\0", ref) >= 0) || this.flow_level !== 0 && indexOf.call(",:?[]{}", char) >= 0) { - break; - } - length++; - } - if (this.flow_level !== 0 && char === ":" && (ref1 = this.peek(length + 1), indexOf.call(C_LB + C_WS + "\0,[]{}", ref1) < 0)) { - this.forward(length); - throw new exports.ScannerError("while scanning a plain scalar", start_mark, "found unexpected ':'", this.get_mark(), "Please check http://pyyaml.org/wiki/YAMLColonInFlowContext"); - } - if (length === 0) { - break; - } - this.allow_simple_key = false; - chunks = chunks.concat(spaces); - chunks.push(this.prefix(length)); - this.forward(length); - end_mark = this.get_mark(); - spaces = this.scan_plain_spaces(indent, start_mark); - if (spaces == null || spaces.length === 0 || this.peek() === "#" || this.flow_level === 0 && this.column < indent) { - break; - } - } - return new tokens.ScalarToken(chunks.join(""), true, start_mark, end_mark); - } - /* - See the specification for details. - The specification is really confusing about tabs in plain scalars. - We just forbid them completely. Do not use tabs in YAML! - */ - scan_plain_spaces(indent, start_mark) { - var breaks, char, chunks, length, line_break, prefix, ref, ref1, ref2, ref3, whitespaces; - chunks = []; - length = 0; - while (ref = this.peek(length), indexOf.call(" ", ref) >= 0) { - length++; - } - whitespaces = this.prefix(length); - this.forward(length); - char = this.peek(); - if (indexOf.call(C_LB, char) >= 0) { - line_break = this.scan_line_break(); - this.allow_simple_key = true; - prefix = this.prefix(3); - if (prefix === "---" || prefix === "..." && (ref1 = this.peek(3), indexOf.call(C_LB + C_WS + "\0", ref1) >= 0)) { - return; - } - breaks = []; - while (ref3 = this.peek(), indexOf.call(C_LB + " ", ref3) >= 0) { - if (this.peek() === " ") { - this.forward(); - } else { - breaks.push(this.scan_line_break()); - prefix = this.prefix(3); - if (prefix === "---" || prefix === "..." && (ref2 = this.peek(3), indexOf.call(C_LB + C_WS + "\0", ref2) >= 0)) { - return; - } - } - } - if (line_break !== "\n") { - chunks.push(line_break); - } else if (breaks.length === 0) { - chunks.push(" "); - } - chunks = chunks.concat(breaks); - } else if (whitespaces) { - chunks.push(whitespaces); - } - return chunks; - } - /* - See the specification for details. - For some strange reasons, the specification does not allow '_' in tag - handles. I have allowed it anyway. - */ - scan_tag_handle(name, start_mark) { - var char, length, value; - char = this.peek(); - if (char !== "!") { - throw new exports.ScannerError(`while scanning a ${name}`, start_mark, `expected '!' but found ${char}`, this.get_mark()); - } - length = 1; - char = this.peek(length); - if (char !== " ") { - while (char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-_", char) >= 0) { - length++; - char = this.peek(length); - } - if (char !== "!") { - this.forward(length); - throw new exports.ScannerError(`while scanning a ${name}`, start_mark, `expected '!' but found ${char}`, this.get_mark()); - } - length++; - } - value = this.prefix(length); - this.forward(length); - return value; - } - /* - See the specification for details. - Note: we do not check if URI is well-formed. - */ - scan_tag_uri(name, start_mark) { - var char, chunks, length; - chunks = []; - length = 0; - char = this.peek(length); - while (char >= "0" && char <= "9" || char >= "A" && char <= "Z" || char >= "a" && char <= "z" || indexOf.call("-;/?:@&=+$,_.!~*'()[]%", char) >= 0) { - if (char === "%") { - chunks.push(this.prefix(length)); - this.forward(length); - length = 0; - chunks.push(this.scan_uri_escapes(name, start_mark)); - } else { - length++; - } - char = this.peek(length); - } - if (length !== 0) { - chunks.push(this.prefix(length)); - this.forward(length); - length = 0; - } - if (chunks.length === 0) { - throw new exports.ScannerError(`while parsing a ${name}`, start_mark, `expected URI but found ${char}`, this.get_mark()); - } - return chunks.join(""); - } - /* - See the specification for details. - */ - scan_uri_escapes(name, start_mark) { - var bytes, i, k, mark; - bytes = []; - mark = this.get_mark(); - while (this.peek() === "%") { - this.forward(); - for (k = i = 0; i <= 2; k = ++i) { - throw new exports.ScannerError(`while scanning a ${name}`, start_mark, `expected URI escape sequence of 2 hexadecimal numbers but found ${this.peek(k)}`, this.get_mark()); - } - bytes.push(String.fromCharCode(parseInt(this.prefix(2), 16))); - this.forward(2); - } - return bytes.join(""); - } - /* - Transforms: - '\r\n' : '\n' - '\r' : '\n' - '\n' : '\n' - '\x85' : '\n' - '\u2028' : '\u2028' - '\u2029 : '\u2029' - default : '' - */ - scan_line_break() { - var char; - char = this.peek(); - if (indexOf.call("\r\n\x85", char) >= 0) { - if (this.prefix(2) === "\r\n") { - this.forward(2); - } else { - this.forward(); - } - return "\n"; - } else if (indexOf.call("\u2028\u2029", char) >= 0) { - this.forward(); - return char; - } - return ""; - } - } - - C_LB = "\r\n\x85\u2028\u2029"; - C_WS = " "; - C_NUMBERS = "0123456789"; - ESCAPE_REPLACEMENTS = { - "0": "\0", - "a": "\x07", - "b": "\b", - "t": " ", - " ": " ", - "n": "\n", - "v": "\v", - "f": "\f", - "r": "\r", - "e": "\x1B", - " ": " ", - '"': '"', - "\\": "\\", - "N": "\x85", - "_": "\xA0", - "L": "\u2028", - "P": "\u2029" - }; - ESCAPE_CODES = { - "x": 2, - "u": 4, - "U": 8 - }; - ctor = Scanner.prototype.initialise; - return Scanner; - }).call(this); - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/parser.js -var require_parser = __commonJS({ - "node_modules/yaml-js/lib/parser.js"(exports) { - (function() { - var MarkedYAMLError, events, tokens, hasProp = {}.hasOwnProperty; - events = require_events(); - ({ MarkedYAMLError } = require_errors()); - tokens = require_tokens(); - this.ParserError = class ParserError extends MarkedYAMLError { - }; - this.Parser = (function() { - var DEFAULT_TAGS, ctor; - class Parser { - constructor() { - return ctor.apply(this, arguments); - } - initialise() { - this.current_event = null; - this.yaml_version = null; - this.tag_handles = {}; - this.states = []; - this.marks = []; - return this.state = "parse_stream_start"; - } - /* - Reset the state attributes. - */ - dispose() { - this.states = []; - return this.state = null; - } - /* - Check the type of the next event. - */ - check_event(...choices) { - var choice, i, len; - if (this.current_event === null) { - if (this.state != null) { - this.current_event = this[this.state](); - } - } - if (this.current_event !== null) { - if (choices.length === 0) { - return true; - } - for (i = 0, len = choices.length; i < len; i++) { - choice = choices[i]; - if (this.current_event instanceof choice) { - return true; - } - } - } - return false; - } - /* - Get the next event. - */ - peek_event() { - if (this.current_event === null && this.state != null) { - this.current_event = this[this.state](); - } - return this.current_event; - } - /* - Get the event and proceed further. - */ - get_event() { - var event; - if (this.current_event === null && this.state != null) { - this.current_event = this[this.state](); - } - event = this.current_event; - this.current_event = null; - return event; - } - // stream ::= STREAM-START implicit_document? explicit_document* STREAM-END - // implicit_document ::= block_node DOCUMENT-END* - // explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* - /* - Parse the stream start. - */ - parse_stream_start() { - var event, token; - token = this.get_token(); - event = new events.StreamStartEvent(token.start_mark, token.end_mark); - this.state = "parse_implicit_document_start"; - return event; - } - /* - Parse an implicit document. - */ - parse_implicit_document_start() { - var end_mark, event, start_mark, token; - if (!this.check_token(tokens.DirectiveToken, tokens.DocumentStartToken, tokens.StreamEndToken)) { - this.tag_handles = DEFAULT_TAGS; - token = this.peek_token(); - start_mark = end_mark = token.start_mark; - event = new events.DocumentStartEvent(start_mark, end_mark, false); - this.states.push("parse_document_end"); - this.state = "parse_block_node"; - return event; - } else { - return this.parse_document_start(); - } - } - /* - Parse an explicit document. - */ - parse_document_start() { - var end_mark, event, start_mark, tags, token, version; - while (this.check_token(tokens.DocumentEndToken)) { - this.get_token(); - } - if (!this.check_token(tokens.StreamEndToken)) { - start_mark = this.peek_token().start_mark; - [version, tags] = this.process_directives(); - if (!this.check_token(tokens.DocumentStartToken)) { - throw new exports.ParserError(`expected '', but found ${this.peek_token().id}`, this.peek_token().start_mark); - } - token = this.get_token(); - end_mark = token.end_mark; - event = new events.DocumentStartEvent(start_mark, end_mark, true, version, tags); - this.states.push("parse_document_end"); - this.state = "parse_document_content"; - } else { - token = this.get_token(); - event = new events.StreamEndEvent(token.start_mark, token.end_mark); - if (this.states.length !== 0) { - throw new Error("assertion error, states should be empty"); - } - if (this.marks.length !== 0) { - throw new Error("assertion error, marks should be empty"); - } - this.state = null; - } - return event; - } - /* - Parse the document end. - */ - parse_document_end() { - var end_mark, event, explicit, start_mark, token; - token = this.peek_token(); - start_mark = end_mark = token.start_mark; - explicit = false; - if (this.check_token(tokens.DocumentEndToken)) { - token = this.get_token(); - end_mark = token.end_mark; - explicit = true; - } - event = new events.DocumentEndEvent(start_mark, end_mark, explicit); - this.state = "parse_document_start"; - return event; - } - parse_document_content() { - var event; - if (this.check_token(tokens.DirectiveToken, tokens.DocumentStartToken, tokens.DocumentEndToken, tokens.StreamEndToken)) { - event = this.process_empty_scalar(this.peek_token().start_mark); - this.state = this.states.pop(); - return event; - } else { - return this.parse_block_node(); - } - } - process_directives() { - var handle, major, minor, prefix, ref, tag_handles_copy, token, value; - this.yaml_version = null; - this.tag_handles = {}; - while (this.check_token(tokens.DirectiveToken)) { - token = this.get_token(); - if (token.name === "YAML") { - if (this.yaml_version !== null) { - throw new exports.ParserError(null, null, "found duplicate YAML directive", token.start_mark); - } - [major, minor] = token.value; - if (major !== 1) { - throw new exports.ParserError(null, null, "found incompatible YAML document (version 1.* is required)", token.start_mark); - } - this.yaml_version = token.value; - } else if (token.name === "TAG") { - [handle, prefix] = token.value; - if (handle in this.tag_handles) { - throw new exports.ParserError(null, null, `duplicate tag handle ${handle}`, token.start_mark); - } - this.tag_handles[handle] = prefix; - } - } - tag_handles_copy = null; - ref = this.tag_handles; - for (handle in ref) { - if (!hasProp.call(ref, handle)) continue; - prefix = ref[handle]; - if (tag_handles_copy == null) { - tag_handles_copy = {}; - } - tag_handles_copy[handle] = prefix; - } - value = [this.yaml_version, tag_handles_copy]; - for (handle in DEFAULT_TAGS) { - if (!hasProp.call(DEFAULT_TAGS, handle)) continue; - prefix = DEFAULT_TAGS[handle]; - if (!(prefix in this.tag_handles)) { - this.tag_handles[handle] = prefix; - } - } - return value; - } - // block_node_or_indentless_sequence ::= ALIAS - // | properties (block_content | indentless_sequence)? - // | block_content - // | indentless_block_sequence - // block_node ::= ALIAS - // | properties block_content? - // | block_content - // flow_node ::= ALIAS - // | properties flow_content? - // | flow_content - // properties ::= TAG ANCHOR? | ANCHOR TAG? - // block_content ::= block_collection | flow_collection | SCALAR - // flow_content ::= flow_collection | SCALAR - // block_collection ::= block_sequence | block_mapping - // flow_collection ::= flow_sequence | flow_mapping - parse_block_node() { - return this.parse_node(true); - } - parse_flow_node() { - return this.parse_node(); - } - parse_block_node_or_indentless_sequence() { - return this.parse_node(true, true); - } - parse_node(block = false, indentless_sequence = false) { - var anchor, end_mark, event, handle, implicit, node, start_mark, suffix, tag, tag_mark, token; - if (this.check_token(tokens.AliasToken)) { - token = this.get_token(); - event = new events.AliasEvent(token.value, token.start_mark, token.end_mark); - this.state = this.states.pop(); - } else { - anchor = null; - tag = null; - start_mark = end_mark = tag_mark = null; - if (this.check_token(tokens.AnchorToken)) { - token = this.get_token(); - start_mark = token.start_mark; - end_mark = token.end_mark; - anchor = token.value; - if (this.check_token(tokens.TagToken)) { - token = this.get_token(); - tag_mark = token.start_mark; - end_mark = token.end_mark; - tag = token.value; - } - } else if (this.check_token(tokens.TagToken)) { - token = this.get_token(); - start_mark = tag_mark = token.start_mark; - end_mark = token.end_mark; - tag = token.value; - if (this.check_token(tokens.AnchorToken)) { - token = this.get_token(); - end_mark = token.end_mark; - anchor = token.value; - } - } - if (tag !== null) { - [handle, suffix] = tag; - if (handle !== null) { - if (!(handle in this.tag_handles)) { - throw new exports.ParserError("while parsing a node", start_mark, `found undefined tag handle ${handle}`, tag_mark); - } - tag = this.tag_handles[handle] + suffix; - } else { - tag = suffix; - } - } - if (start_mark === null) { - start_mark = end_mark = this.peek_token().start_mark; - } - event = null; - implicit = tag === null || tag === "!"; - if (indentless_sequence && this.check_token(tokens.BlockEntryToken)) { - end_mark = this.peek_token().end_mark; - event = new events.SequenceStartEvent(anchor, tag, implicit, start_mark, end_mark); - this.state = "parse_indentless_sequence_entry"; - } else { - if (this.check_token(tokens.ScalarToken)) { - token = this.get_token(); - end_mark = token.end_mark; - if (token.plain && tag === null || tag === "!") { - implicit = [true, false]; - } else if (tag === null) { - implicit = [false, true]; - } else { - implicit = [false, false]; - } - event = new events.ScalarEvent(anchor, tag, implicit, token.value, start_mark, end_mark, token.style); - this.state = this.states.pop(); - } else if (this.check_token(tokens.FlowSequenceStartToken)) { - end_mark = this.peek_token().end_mark; - event = new events.SequenceStartEvent(anchor, tag, implicit, start_mark, end_mark, true); - this.state = "parse_flow_sequence_first_entry"; - } else if (this.check_token(tokens.FlowMappingStartToken)) { - end_mark = this.peek_token().end_mark; - event = new events.MappingStartEvent(anchor, tag, implicit, start_mark, end_mark, true); - this.state = "parse_flow_mapping_first_key"; - } else if (block && this.check_token(tokens.BlockSequenceStartToken)) { - end_mark = this.peek_token().end_mark; - event = new events.SequenceStartEvent(anchor, tag, implicit, start_mark, end_mark, false); - this.state = "parse_block_sequence_first_entry"; - } else if (block && this.check_token(tokens.BlockMappingStartToken)) { - end_mark = this.peek_token().end_mark; - event = new events.MappingStartEvent(anchor, tag, implicit, start_mark, end_mark, false); - this.state = "parse_block_mapping_first_key"; - } else if (anchor !== null || tag !== null) { - event = new events.ScalarEvent(anchor, tag, [implicit, false], "", start_mark, end_mark); - this.state = this.states.pop(); - } else { - if (block) { - node = "block"; - } else { - node = "flow"; - } - token = this.peek_token(); - throw new exports.ParserError(`while parsing a ${node} node`, start_mark, `expected the node content, but found ${token.id}`, token.start_mark); - } - } - } - return event; - } - // block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* - // BLOCK-END - parse_block_sequence_first_entry() { - var token; - token = this.get_token(); - this.marks.push(token.start_mark); - return this.parse_block_sequence_entry(); - } - parse_block_sequence_entry() { - var event, token; - if (this.check_token(tokens.BlockEntryToken)) { - token = this.get_token(); - if (!this.check_token(tokens.BlockEntryToken, tokens.BlockEndToken)) { - this.states.push("parse_block_sequence_entry"); - return this.parse_block_node(); - } else { - this.state = "parse_block_sequence_entry"; - return this.process_empty_scalar(token.end_mark); - } - } - if (!this.check_token(tokens.BlockEndToken)) { - token = this.peek_token(); - throw new exports.ParserError("while parsing a block collection", this.marks.slice(-1)[0], `expected , but found ${token.id}`, token.start_mark); - } - token = this.get_token(); - event = new events.SequenceEndEvent(token.start_mark, token.end_mark); - this.state = this.states.pop(); - this.marks.pop(); - return event; - } - // indentless_sequence ::= (BLOCK-ENTRY block_node?)+ - parse_indentless_sequence_entry() { - var event, token; - if (this.check_token(tokens.BlockEntryToken)) { - token = this.get_token(); - if (!this.check_token(tokens.BlockEntryToken, tokens.KeyToken, tokens.ValueToken, tokens.BlockEndToken)) { - this.states.push("parse_indentless_sequence_entry"); - return this.parse_block_node(); - } else { - this.state = "parse_indentless_sequence_entry"; - return this.process_empty_scalar(token.end_mark); - } - } - token = this.peek_token(); - event = new events.SequenceEndEvent(token.start_mark, token.start_mark); - this.state = this.states.pop(); - return event; - } - // block_mapping ::= BLOCK-MAPPING-START - // ((KEY block_node_or_indentless_sequence?)? - // (VALUE block_node_or_indentless_sequence?)?)* BLOCK-END - parse_block_mapping_first_key() { - var token; - token = this.get_token(); - this.marks.push(token.start_mark); - return this.parse_block_mapping_key(); - } - parse_block_mapping_key() { - var event, token; - if (this.check_token(tokens.KeyToken)) { - token = this.get_token(); - if (!this.check_token(tokens.KeyToken, tokens.ValueToken, tokens.BlockEndToken)) { - this.states.push("parse_block_mapping_value"); - return this.parse_block_node_or_indentless_sequence(); - } else { - this.state = "parse_block_mapping_value"; - return this.process_empty_scalar(token.end_mark); - } - } - if (!this.check_token(tokens.BlockEndToken)) { - token = this.peek_token(); - throw new exports.ParserError("while parsing a block mapping", this.marks.slice(-1)[0], `expected , but found ${token.id}`, token.start_mark); - } - token = this.get_token(); - event = new events.MappingEndEvent(token.start_mark, token.end_mark); - this.state = this.states.pop(); - this.marks.pop(); - return event; - } - parse_block_mapping_value() { - var token; - if (this.check_token(tokens.ValueToken)) { - token = this.get_token(); - if (!this.check_token(tokens.KeyToken, tokens.ValueToken, tokens.BlockEndToken)) { - this.states.push("parse_block_mapping_key"); - return this.parse_block_node_or_indentless_sequence(); - } else { - this.state = "parse_block_mapping_key"; - return this.process_empty_scalar(token.end_mark); - } - } else { - this.state = "parse_block_mapping_key"; - token = this.peek_token(); - return this.process_empty_scalar(token.start_mark); - } - } - // flow_sequence ::= FLOW-SEQUENCE-START - // (flow_sequence_entry FLOW-ENTRY)* flow_sequence_entry? FLOW-SEQUENCE-END - // flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - // Note that while production rules for both flow_sequence_entry and - // flow_mapping_entry are equal, their interpretations are different. For - // `flow_sequence_entry`, the part `KEY flow_node? (VALUE flow_node?)?` - // generate an inline mapping (set syntax). - parse_flow_sequence_first_entry() { - var token; - token = this.get_token(); - this.marks.push(token.start_mark); - return this.parse_flow_sequence_entry(true); - } - parse_flow_sequence_entry(first = false) { - var event, token; - if (!this.check_token(tokens.FlowSequenceEndToken)) { - if (!first) { - if (this.check_token(tokens.FlowEntryToken)) { - this.get_token(); - } else { - token = this.peek_token(); - throw new exports.ParserError("while parsing a flow sequence", this.marks.slice(-1)[0], `expected ',' or ']', but got ${token.id}`, token.start_mark); - } - } - if (this.check_token(tokens.KeyToken)) { - token = this.peek_token(); - event = new events.MappingStartEvent(null, null, true, token.start_mark, token.end_mark, true); - this.state = "parse_flow_sequence_entry_mapping_key"; - return event; - } else if (!this.check_token(tokens.FlowSequenceEndToken)) { - this.states.push("parse_flow_sequence_entry"); - return this.parse_flow_node(); - } - } - token = this.get_token(); - event = new events.SequenceEndEvent(token.start_mark, token.end_mark); - this.state = this.states.pop(); - this.marks.pop(); - return event; - } - parse_flow_sequence_entry_mapping_key() { - var token; - token = this.get_token(); - if (!this.check_token(tokens.ValueToken, tokens.FlowEntryToken, tokens.FlowSequenceEndToken)) { - this.states.push("parse_flow_sequence_entry_mapping_value"); - return this.parse_flow_node(); - } else { - this.state = "parse_flow_sequence_entry_mapping_value"; - return this.process_empty_scalar(token.end_mark); - } - } - parse_flow_sequence_entry_mapping_value() { - var token; - if (this.check_token(tokens.ValueToken)) { - token = this.get_token(); - if (!this.check_token(tokens.FlowEntryToken, tokens.FlowSequenceEndToken)) { - this.states.push("parse_flow_sequence_entry_mapping_end"); - return this.parse_flow_node(); - } else { - this.state = "parse_flow_sequence_entry_mapping_end"; - return this.process_empty_scalar(token.end_mark); - } - } else { - this.state = "parse_flow_sequence_entry_mapping_end"; - token = this.peek_token(); - return this.process_empty_scalar(token.start_mark); - } - } - parse_flow_sequence_entry_mapping_end() { - var token; - this.state = "parse_flow_sequence_entry"; - token = this.peek_token(); - return new events.MappingEndEvent(token.start_mark, token.start_mark); - } - // flow_mapping ::= FLOW-MAPPING-START (flow_mapping_entry FLOW-ENTRY)* - // flow_mapping_entry? FLOW-MAPPING-END - // flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - parse_flow_mapping_first_key() { - var token; - token = this.get_token(); - this.marks.push(token.start_mark); - return this.parse_flow_mapping_key(true); - } - parse_flow_mapping_key(first = false) { - var event, token; - if (!this.check_token(tokens.FlowMappingEndToken)) { - if (!first) { - if (this.check_token(tokens.FlowEntryToken)) { - this.get_token(); - } else { - token = this.peek_token(); - throw new exports.ParserError("while parsing a flow mapping", this.marks.slice(-1)[0], `expected ',' or '}', but got ${token.id}`, token.start_mark); - } - } - if (this.check_token(tokens.KeyToken)) { - token = this.get_token(); - if (!this.check_token(tokens.ValueToken, tokens.FlowEntryToken, tokens.FlowMappingEndToken)) { - this.states.push("parse_flow_mapping_value"); - return this.parse_flow_node(); - } else { - this.state = "parse_flow_mapping_value"; - return this.process_empty_scalar(token.end_mark); - } - } else if (!this.check_token(tokens.FlowMappingEndToken)) { - this.states.push("parse_flow_mapping_empty_value"); - return this.parse_flow_node(); - } - } - token = this.get_token(); - event = new events.MappingEndEvent(token.start_mark, token.end_mark); - this.state = this.states.pop(); - this.marks.pop(); - return event; - } - parse_flow_mapping_value() { - var token; - if (this.check_token(tokens.ValueToken)) { - token = this.get_token(); - if (!this.check_token(tokens.FlowEntryToken, tokens.FlowMappingEndToken)) { - this.states.push("parse_flow_mapping_key"); - return this.parse_flow_node(); - } else { - this.state = "parse_flow_mapping_key"; - return this.process_empty_scalar(token.end_mark); - } - } else { - this.state = "parse_flow_mapping_key"; - token = this.peek_token(); - return this.process_empty_scalar(token.start_mark); - } - } - parse_flow_mapping_empty_value() { - this.state = "parse_flow_mapping_key"; - return this.process_empty_scalar(this.peek_token().start_mark); - } - process_empty_scalar(mark) { - return new events.ScalarEvent(null, null, [true, false], "", mark, mark); - } - } - - DEFAULT_TAGS = { - "!": "!", - "!!": "tag:yaml.org,2002:" - }; - ctor = Parser.prototype.initialise; - return Parser; - }).call(this); - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/loader.js -var require_loader = __commonJS({ - "node_modules/yaml-js/lib/loader.js"(exports) { - (function() { - var composer, constructor, parser, reader, resolver, scanner, util; - util = require_util(); - reader = require_reader(); - scanner = require_scanner(); - parser = require_parser(); - composer = require_composer(); - resolver = require_resolver(); - constructor = require_constructor(); - this.make_loader = function(Reader = reader.Reader, Scanner = scanner.Scanner, Parser = parser.Parser, Composer = composer.Composer, Resolver = resolver.Resolver, Constructor = constructor.Constructor) { - var Loader, components; - components = [Reader, Scanner, Parser, Composer, Resolver, Constructor]; - return Loader = (function() { - var component; - class Loader2 { - constructor(stream) { - var i, len, ref; - components[0].prototype.initialise.call(this, stream); - ref = components.slice(1); - for (i = 0, len = ref.length; i < len; i++) { - component = ref[i]; - component.prototype.initialise.call(this); - } - } - } - - util.extend(Loader2.prototype, ...(function() { - var i, len, results; - results = []; - for (i = 0, len = components.length; i < len; i++) { - component = components[i]; - results.push(component.prototype); - } - return results; - })()); - return Loader2; - }).call(this); - }; - this.Loader = this.make_loader(); - }).call(exports); - } -}); - -// node_modules/yaml-js/lib/yaml.js -var require_yaml = __commonJS({ - "node_modules/yaml-js/lib/yaml.js"(exports) { - (function() { - var composer, constructor, dumper, errors, events, loader, nodes, parser, reader, resolver, scanner, tokens, util; - composer = this.composer = require_composer(); - constructor = this.constructor = require_constructor(); - dumper = this.dumper = require_dumper(); - errors = this.errors = require_errors(); - events = this.events = require_events(); - loader = this.loader = require_loader(); - nodes = this.nodes = require_nodes(); - parser = this.parser = require_parser(); - reader = this.reader = require_reader(); - resolver = this.resolver = require_resolver(); - scanner = this.scanner = require_scanner(); - tokens = this.tokens = require_tokens(); - util = require_util(); - this.scan = function(stream, Loader = loader.Loader) { - var _loader, results; - _loader = new Loader(stream); - results = []; - while (_loader.check_token()) { - results.push(_loader.get_token()); - } - return results; - }; - this.parse = function(stream, Loader = loader.Loader) { - var _loader, results; - _loader = new Loader(stream); - results = []; - while (_loader.check_event()) { - results.push(_loader.get_event()); - } - return results; - }; - this.compose = function(stream, Loader = loader.Loader) { - var _loader; - _loader = new Loader(stream); - return _loader.get_single_node(); - }; - this.compose_all = function(stream, Loader = loader.Loader) { - var _loader, results; - _loader = new Loader(stream); - results = []; - while (_loader.check_node()) { - results.push(_loader.get_node()); - } - return results; - }; - this.load = function(stream, Loader = loader.Loader) { - var _loader; - _loader = new Loader(stream); - return _loader.get_single_data(); - }; - this.load_all = function(stream, Loader = loader.Loader) { - var _loader, results; - _loader = new Loader(stream); - results = []; - while (_loader.check_data()) { - results.push(_loader.get_data()); - } - return results; - }; - this.emit = function(events2, stream, Dumper = dumper.Dumper, options = {}) { - var _dumper, dest, event, i, len; - dest = stream || new util.StringStream(); - _dumper = new Dumper(dest, options); - try { - for (i = 0, len = events2.length; i < len; i++) { - event = events2[i]; - _dumper.emit(event); - } - } finally { - _dumper.dispose(); - } - return stream || dest.string; - }; - this.serialize = function(node, stream, Dumper = dumper.Dumper, options = {}) { - return exports.serialize_all([node], stream, Dumper, options); - }; - this.serialize_all = function(nodes2, stream, Dumper = dumper.Dumper, options = {}) { - var _dumper, dest, i, len, node; - dest = stream || new util.StringStream(); - _dumper = new Dumper(dest, options); - try { - _dumper.open(); - for (i = 0, len = nodes2.length; i < len; i++) { - node = nodes2[i]; - _dumper.serialize(node); - } - _dumper.close(); - } finally { - _dumper.dispose(); - } - return stream || dest.string; - }; - this.dump = function(data, stream, Dumper = dumper.Dumper, options = {}) { - return exports.dump_all([data], stream, Dumper, options); - }; - this.dump_all = function(documents, stream, Dumper = dumper.Dumper, options = {}) { - var _dumper, dest, document, i, len; - dest = stream || new util.StringStream(); - _dumper = new Dumper(dest, options); - try { - _dumper.open(); - for (i = 0, len = documents.length; i < len; i++) { - document = documents[i]; - _dumper.represent(document); - } - _dumper.close(); - } finally { - _dumper.dispose(); - } - return stream || dest.string; - }; - }).call(exports); - } -}); - -// entry.js -var import_yaml_js = __toESM(require_yaml()); -var entry_default = import_yaml_js.default; -export { - entry_default as default -}; From d060b861a705d0dde0d5ca7c6dfc8bd6a7747bde Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:51:46 -0400 Subject: [PATCH 14/18] Fix Plugin Searching --- src/components/settings/tabs/plugins/index.tsx | 11 +---------- src/equicordplugins/userpluginInstaller.dev/index.tsx | 2 +- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/src/components/settings/tabs/plugins/index.tsx b/src/components/settings/tabs/plugins/index.tsx index ed75e2849..022bb9322 100644 --- a/src/components/settings/tabs/plugins/index.tsx +++ b/src/components/settings/tabs/plugins/index.tsx @@ -197,18 +197,9 @@ export default function PluginSettings() { const hasUserPlugins = useMemo(() => !IS_STANDALONE && Object.values(PluginMeta).some(m => m.userPlugin), []); const [searchValue, setSearchValue] = useState({ value: "", tags: [] as PluginTag[], status: SearchStatus.ALL }); - const [searchInput, setSearchInput] = useState(""); - - const debouncedSetSearch = useMemo( - () => debounce((query: string) => setSearchValue(prev => ({ ...prev, value: query })), 150), - [] - ); const search = searchValue.value.toLowerCase(); - const onSearch = useCallback((query: string) => { - setSearchInput(query); - debouncedSetSearch(query); - }, [debouncedSetSearch]); + const onSearch = (query: string) => setSearchValue(prev => ({ ...prev, value: query })); const pluginFilter = useCallback((plugin: typeof Plugins[keyof typeof Plugins], newPluginsSet: Set | null) => { const { status, tags } = searchValue; diff --git a/src/equicordplugins/userpluginInstaller.dev/index.tsx b/src/equicordplugins/userpluginInstaller.dev/index.tsx index 1d30ce697..a06afa7b3 100644 --- a/src/equicordplugins/userpluginInstaller.dev/index.tsx +++ b/src/equicordplugins/userpluginInstaller.dev/index.tsx @@ -80,7 +80,7 @@ export default definePlugin({ async start() { if (!VencordNative.pluginHelpers.UserpluginInstaller) return void Alerts.show({ title: "UserpluginInstaller not fully loaded", - body: "This usually happens if you didn't fully restart your client after installing the plugin, which prevents the native helpers from loading. Restart your client to fix the issue.", + body: "You need to restart to allow the native to be loaded :)", confirmText: "Restart now", onConfirm() { relaunch(); From ed9688983dc0ac995cad9b29510c13e6f4339a6f Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:58:00 -0400 Subject: [PATCH 15/18] AccountPanelServerProfile: Fix Patch --- src/plugins/accountPanelServerProfile/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/accountPanelServerProfile/index.tsx b/src/plugins/accountPanelServerProfile/index.tsx index 1e2cf20c6..56c4b84b2 100644 --- a/src/plugins/accountPanelServerProfile/index.tsx +++ b/src/plugins/accountPanelServerProfile/index.tsx @@ -80,7 +80,7 @@ export default definePlugin({ group: true, replacement: [ { - match: /(\.AVATAR,children:.+?renderPopout:(\i)=>){(.+?)}(?=,position)(?<=currentUser:(\i).+?)/, + match: /(\.AVATAR,children:.+?renderPopout:\(?(\i)(?:,\i\)=>)?){(.+?)}(?=,position)(?<=currentUser:(\i).+?)/, replace: (_, rest, popoutProps, originalPopout, currentUser) => `${rest}$self.UserProfile({popoutProps:${popoutProps},currentUser:${currentUser},originalRenderPopout:()=>{${originalPopout}}})` }, { From b0068dafac6e17289f7ddf32c222135f636b949e Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:01:01 -0400 Subject: [PATCH 16/18] AccountPanelServerProfile: Fix Mistake --- src/plugins/accountPanelServerProfile/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/accountPanelServerProfile/index.tsx b/src/plugins/accountPanelServerProfile/index.tsx index 56c4b84b2..dad81c7bb 100644 --- a/src/plugins/accountPanelServerProfile/index.tsx +++ b/src/plugins/accountPanelServerProfile/index.tsx @@ -80,7 +80,7 @@ export default definePlugin({ group: true, replacement: [ { - match: /(\.AVATAR,children:.+?renderPopout:\(?(\i)(?:,\i\)=>)?){(.+?)}(?=,position)(?<=currentUser:(\i).+?)/, + match: /(\.AVATAR,children:.+?renderPopout:\(?(\i)(?:,\i\))?=>){(.+?)}(?=,position)(?<=currentUser:(\i).+?)/, replace: (_, rest, popoutProps, originalPopout, currentUser) => `${rest}$self.UserProfile({popoutProps:${popoutProps},currentUser:${currentUser},originalRenderPopout:()=>{${originalPopout}}})` }, { From 88b718f1e150a020e3f1cd603bca97e764a1d655 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:01:58 -0400 Subject: [PATCH 17/18] ViewIcons: Fix Find --- src/plugins/viewIcons/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/viewIcons/index.tsx b/src/plugins/viewIcons/index.tsx index d7a74223b..3ffb346dd 100644 --- a/src/plugins/viewIcons/index.tsx +++ b/src/plugins/viewIcons/index.tsx @@ -197,7 +197,7 @@ export default definePlugin({ patches: [ // Avatar component used in User DMs "User Profile" popup in the right and User Profile Modal pfp { - find: "return{avatarProps:{", + find: ".AVATAR),{trackUserProfileAction:", replacement: { match: /(?<=avatarProps:(\i),eventHandlers:(\i).{0,50}?)return null==/, replace: 'Object.assign($2,{style:{cursor:"pointer"},onClick:()=>$self.openAvatar($1.src)});$&', From c89b6058229b6c54582f2529f9b089ed3f4e64ba Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:04:34 -0400 Subject: [PATCH 18/18] Revert ViewIcons: Not Fixing On Stable --- src/plugins/viewIcons/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/viewIcons/index.tsx b/src/plugins/viewIcons/index.tsx index 3ffb346dd..d7a74223b 100644 --- a/src/plugins/viewIcons/index.tsx +++ b/src/plugins/viewIcons/index.tsx @@ -197,7 +197,7 @@ export default definePlugin({ patches: [ // Avatar component used in User DMs "User Profile" popup in the right and User Profile Modal pfp { - find: ".AVATAR),{trackUserProfileAction:", + find: "return{avatarProps:{", replacement: { match: /(?<=avatarProps:(\i),eventHandlers:(\i).{0,50}?)return null==/, replace: 'Object.assign($2,{style:{cursor:"pointer"},onClick:()=>$self.openAvatar($1.src)});$&',