From 039ce2b69db11756a81c516c9efed1766f65e8d3 Mon Sep 17 00:00:00 2001 From: DJKnaeckebrot <46864390+DJKnaeckebrot@users.noreply.github.com> Date: Thu, 2 Nov 2023 20:35:25 +0100 Subject: [PATCH 1/3] Added possibility to change the background Config value is themeconfig.icons.backgroundImage --- views/settings.ejs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/views/settings.ejs b/views/settings.ejs index cd15507a..3e9c32e8 100644 --- a/views/settings.ejs +++ b/views/settings.ejs @@ -204,11 +204,11 @@ <% const images=["curved-1", "curved-2" , "curved-3" , "curved-4" , "curved-5" , "curved-6" , "curved-7" , "curved-8" , "curved-9" , "curved-10" , "curved-11" , "curved-12" , "curved-13" , "curved-14" - , "curved-15" , "curved-16" , "curved-17" , "curved-18" ]; const image=images[Math.floor(Math.random() * - images.length)]; %> + , "curved-15" , "curved-16" , "curved-17" , "curved-18" ]; let image; if (themeConfig?.icons.backgroundImage) {image=themeConfig?.icons.backgroundImage} else {image="/img/curved-images/"+images[Math.floor(Math.random() * + images.length)]+".webp";} %>
From be150f37c1d5e08c778f5b45cac38aacbc6fafa8 Mon Sep 17 00:00:00 2001 From: DJKnaeckebrot <46864390+DJKnaeckebrot@users.noreply.github.com> Date: Thu, 2 Nov 2023 20:36:22 +0100 Subject: [PATCH 2/3] Add Type for Background Image --- dbd-soft-ui.d.ts | 1107 ++++++++++++++++++++++++---------------------- 1 file changed, 573 insertions(+), 534 deletions(-) diff --git a/dbd-soft-ui.d.ts b/dbd-soft-ui.d.ts index 9ed315e1..359063d6 100644 --- a/dbd-soft-ui.d.ts +++ b/dbd-soft-ui.d.ts @@ -1,546 +1,585 @@ declare module "dbd-soft-ui" { - import { Express, Request, Response } from "express"; + import { Express, Request, Response } from "express"; - /** - * All posible values that can be set in the theme config - */ - type themeConfig = { - storage: any, - customThemeOptions: { - index: ({ req, res, config }: { - req: Request, - res: Response, - config: any - }) => Promise<{ - cards: Array<{ - title: string, - icon: string, - getValue: any, - progressBar: { - enabled: boolean, - getProgress: number - } - }> | [] - graph?: { - values?: number[], - labels?: string[] - } - values?: any[] + /** + * All posible values that can be set in the theme config + */ + type themeConfig = { + storage: any; + customThemeOptions: { + index: ({ + req, + res, + config, + }: { + req: Request; + res: Response; + config: any; + }) => Promise<{ + cards: + | Array<{ + title: string; + icon: string; + getValue: any; + progressBar: { + enabled: boolean; + getProgress: number; + }; }> - }, - addons?: string[], - websiteName: string, - colorScheme: "dark" | "pink" | "blue" | "red" | "green" | "yellow" | "custom", - locales?: Record, - themeColors?: { - primaryColor: string, - secondaryColor: string - } - supporteMail: string, - icons: { - favicon: string, - noGuildIcon: string, - sidebar: { - darkUrl: string, - lightUrl: string, - hideName: boolean, - borderRadius: boolean, - alignCenter: boolean - } - }, - index: { - graph: { - enabled: boolean, - lineGraph: boolean, - title?: string, - tag: string, - max: number - } - }, - sweetalert: { - errors: { - requirePremium?: string - }, - success: { - login: string - } - }, - footer?: { - replaceDefault: boolean, - text: string, - } - admin: { - pterodactyl: { - enabled: boolean, - apiKey: string, - panelLink: string, - serverUUIDs: string[] - }, - logs?: { - enabled?: boolean, - key?: string, - } - }, - premium?: { - enabled: boolean, - card: { - title: string, - description: string, - bgImage: string, - button: { - text: string, - url: string - } - } - }, - preloader: { - image: string, - spinner: boolean, - text: string - }, - sidebar?: { - gestures: { - disabled: boolean, - gestureTimer: number, - gestureSensitivity: number - } - }, - shardspage?: { - enabled: boolean, - key: string, - }, - meta?: { - author: string, - owner: string, - description: string, - ogLocale: string, - ogTitle: string, - ogImage: string, - ogType: string, - ogUrl: string, - ogSiteName: string, - ogDescription: string, - twitterTitle: string, - twitterDescription: string, - twitterDomain: string, - twitterUrl: string, - twitterCard: string, - twitterSite: string, - twitterSiteId: string, - twitterCreator: string, - twitterCreatorId: string, - twitterImage: string - }, - error?: { - error404: { - title: string, - subtitle: string, - description: string - }, - dbdError: { - disableSecretMenu: boolean, - secretMenuCombination: string[] - } - }, - blacklisted?: { - title: string, - subtitle: string, - description: string, - button: { - enabled: boolean, - text: string, - link: string - } - }, - dbdriver?: string | undefined, - commands: Array<{ - category: string, - subTitle: string, - categoryId: string, - image: string, - hideAlias: boolean, - hideDescription: boolean, - hideSidebarItem: boolean, - list: Array<{ - commandName: string, - commandUsage: string, - commandDescription: string, - commandAlias: string - }> - }> - - } - - export default function (options: themeConfig): { - themeCodename: string, - viewsPath: string, - staticPath: string, - embedBuilderComponent: string, - themeConfig: themeConfig, - init: (app: Express, config: Record) => void; + | []; + graph?: { + values?: number[]; + labels?: string[]; + }; + values?: any[]; + }>; + }; + addons?: string[]; + websiteName: string; + colorScheme: + | "dark" + | "pink" + | "blue" + | "red" + | "green" + | "yellow" + | "custom"; + locales?: Record; + themeColors?: { + primaryColor: string; + secondaryColor: string; + }; + supporteMail: string; + icons: { + backgroundImage: string; + favicon: string; + noGuildIcon: string; + sidebar: { + darkUrl: string; + lightUrl: string; + hideName: boolean; + borderRadius: boolean; + alignCenter: boolean; + }; + }; + index: { + graph: { + enabled: boolean; + lineGraph: boolean; + title?: string; + tag: string; + max: number; + }; + }; + sweetalert: { + errors: { + requirePremium?: string; + }; + success: { + login: string; + }; + }; + footer?: { + replaceDefault: boolean; + text: string; + }; + admin: { + pterodactyl: { + enabled: boolean; + apiKey: string; + panelLink: string; + serverUUIDs: string[]; + }; + logs?: { + enabled?: boolean; + key?: string; + }; + }; + premium?: { + enabled: boolean; + card: { + title: string; + description: string; + bgImage: string; + button: { + text: string; + url: string; + }; + }; + }; + preloader: { + image: string; + spinner: boolean; + text: string; + }; + sidebar?: { + gestures: { + disabled: boolean; + gestureTimer: number; + gestureSensitivity: number; + }; + }; + shardspage?: { + enabled: boolean; + key: string; }; + meta?: { + author: string; + owner: string; + description: string; + ogLocale: string; + ogTitle: string; + ogImage: string; + ogType: string; + ogUrl: string; + ogSiteName: string; + ogDescription: string; + twitterTitle: string; + twitterDescription: string; + twitterDomain: string; + twitterUrl: string; + twitterCard: string; + twitterSite: string; + twitterSiteId: string; + twitterCreator: string; + twitterCreatorId: string; + twitterImage: string; + }; + error?: { + error404: { + title: string; + subtitle: string; + description: string; + }; + dbdError: { + disableSecretMenu: boolean; + secretMenuCombination: string[]; + }; + }; + blacklisted?: { + title: string; + subtitle: string; + description: string; + button: { + enabled: boolean; + text: string; + link: string; + }; + }; + dbdriver?: string | undefined; + commands: Array<{ + category: string; + subTitle: string; + categoryId: string; + image: string; + hideAlias: boolean; + hideDescription: boolean; + hideSidebarItem: boolean; + list: Array<{ + commandName: string; + commandUsage: string; + commandDescription: string; + commandAlias: string; + }>; + }>; + }; - export const partials: any; - export const formTypes: FormTypes; - export const cmdHandler: (commands: Record[], prefix: string) => Record[]; + export default function (options: themeConfig): { + themeCodename: string; + viewsPath: string; + staticPath: string; + embedBuilderComponent: string; + themeConfig: themeConfig; + init: (app: Express, config: Record) => void; + }; - /** - * @see [utils/feedHandler](./utils/feedHandler.js). - */ - export class Feed { - color: FeedColor; - description: string; - icon: FeedIcon; - id: string | number; + export const partials: any; + export const formTypes: FormTypes; + export const cmdHandler: ( + commands: Record[], + prefix: string + ) => Record[]; + + /** + * @see [utils/feedHandler](./utils/feedHandler.js). + */ + export class Feed { + color: FeedColor; + description: string; + icon: FeedIcon; + id: string | number; - setColor: (color: FeedColor) => Feed; - setDescription: (description: string) => Feed; - setIcon: (icon: FeedIcon) => Feed; - getFeed: (id: string | number) => Feed; - delete: () => Feed; - send: () => Promise; - constructor(); - } + setColor: (color: FeedColor) => Feed; + setDescription: (description: string) => Feed; + setIcon: (icon: FeedIcon) => Feed; + getFeed: (id: string | number) => Feed; + delete: () => Feed; + send: () => Promise; + constructor(); + } - /** - * All possible colors that can be used against the - * `Feed#setColor()` method. They can be accessed with - * dot notation, eg `FeedColor.Red`. - */ - export enum FeedColor { - Red = "red", - Orange = "orange", - Pink = "pink", - Gray = "gray", - Green = "green", - Blue = "blue", - Dark = "dark" - } + /** + * All possible colors that can be used against the + * `Feed#setColor()` method. They can be accessed with + * dot notation, eg `FeedColor.Red`. + */ + export enum FeedColor { + Red = "red", + Orange = "orange", + Pink = "pink", + Gray = "gray", + Green = "green", + Blue = "blue", + Dark = "dark", + } - /** - * All possible icons that can be used against the - * `Feed#setIcon()` method. They can be accessed with - * bracket notation, eg `FeedIcon["address-book"]`. - */ - export enum FeedIcon { - "address-book", - "address-card", - "adjust", - "air-freshener", - "align-center", - "align-left", - "align-right", - "ambulance", - "angle-double-down", - "angle-double-left", - "angle-double-right", - "angle-double-up", - "angle-down", - "angle-left", - "angle-right", - "angle-up", - "archive", - "arrow-alt-circle-down", - "arrow-alt-circle-left", - "arrow-alt-circle-right", - "arrow-alt-circle-up", - "arrow-down", - "arrow-left", - "arrow-right", - "arrow-up", - "arrows-alt", - "arrows-alt-h", - "arrows-alt-v", - "assistive-listening-systems", - "asterisk", - "at", - "atlas", - "award", - "backspace", - "backward", - "bahai", - "ban", - "band-aid", - "bars", - "battery-empty", - "battery-full", - "battery-half", - "battery-quarter", - "battery-three-quarters", - "bed", - "beer", - "bell", - "bell-slash", - "birthday-cake", - "bolt", - "bomb", - "bone", - "book", - "book-dead", - "book-medical", - "book-open", - "bookmark", - "border-all", - "border-none", - "border-style", - "bowling-ball", - "box", - "box-open", - "briefcase", - "broadcast-tower", - "bug", - "building", - "bullhorn", - "calculator", - "calendar", - "calendar-alt", - "calendar-check", - "calendar-day", - "calendar-minus", - "calendar-plus", - "calendar-times", - "calendar-week", - "camera", - "caret-down", - "caret-left", - "caret-right", - "caret-up", - "certificate", - "chair", - "chalkboard", - "charging-station", - "chart-bar", - "chart-line", - "chart-pie", - "check", - "check-circle", - "check-square", - "circle", - "circle-notch", - "clipboard", - "clock", - "clone", - "cloud", - "cloud-download-alt", - "cloud-meatball", - "cloud-moon", - "cloud-moon-rain", - "cloud-rain", - "cloud-showers-heavy", - "cloud-sun", - "cloud-sun-rain", - "cloud-upload-alt", - "code", - "code-branch", - "cog", - "cogs", - "columns", - "comment", - "comment-alt", - "comment-dollar", - "comment-dots", - "comment-medical", - "comment-slash", - "comments", - "comments-dollar", - "compact-disc", - "compass", - "compress-alt", - "cookie", - "cookie-bite", - "copy", - "credit-card", - "crop", - "crop-alt", - "cut", - "database", - "desktop", - "edit", - "envelope", - "envelope-open", - "eraser", - "ethernet", - "exchange-alt", - "exclamation", - "exclamation-circle", - "exclamation-triangle", - "expand", - "expand-alt", - "external-link-alt", - "eye", - "eye-dropper", - "eye-slash", - "fan", - "file", - "file-alt", - "file-archive", - "file-audio", - "file-code", - "file-download", - "fill", - "fill-drip", - "filter", - "fingerprint", - "fire", - "fire-alt", - "folder", - "folder-open", - "forward", - "gamepad", - "ghost", - "gift", - "gifts", - "globe", - "globe-africa", - "globe-asia", - "globe-europe", - "headphones", - "headphones-alt", - "headset", - "heart", - "heart-broken", - "heartbeat", - "history", - "home", - "info", - "keyboard", - "layer-group", - "list", - "lock", - "lock-open", - "map-marker", - "map-marker-alt", - "microphone", - "microphone-alt", - "microphone-alt-slash", - "minus", - "mobile", - "mobile-alt", - "moon", - "mouse", - "mouse-pointer", - "music", - "network-wired", - "neuter", - "paperclip", - "paste", - "pause", - "paw", - "pen", - "pencil-alt", - "percent", - "percentage", - "phone", - "phone-alt", - "phone-slash", - "phone-volume", - "photo-video", - "power-off", - "question", - "question-circle", - "redo", - "redo-alt", - "reply", - "robot", - "rocket", - "rss", - "satellite-dish", - "save", - "search", - "server", - "shapes", - "share", - "share-alt", - "shield-alt", - "signal", - "skull", - "skull-crossbones", - "sliders-h", - "sort", - "spinner", - "times", - "times-circle", - "toggle-off", - "toggle-on", - "toolbox", - "tools", - "trash", - "trash-alt", - "tv", - "undo", - "undo-alt", - "unlink", - "unlock", - "unlock-alt", - "upload", - "user", - "user-alt", - "volume-down", - "volume-mute", - "volume-off", - "volume-up", - "wifi", - "wrench", + /** + * All possible icons that can be used against the + * `Feed#setIcon()` method. They can be accessed with + * bracket notation, eg `FeedIcon["address-book"]`. + */ + export enum FeedIcon { + "address-book", + "address-card", + "adjust", + "air-freshener", + "align-center", + "align-left", + "align-right", + "ambulance", + "angle-double-down", + "angle-double-left", + "angle-double-right", + "angle-double-up", + "angle-down", + "angle-left", + "angle-right", + "angle-up", + "archive", + "arrow-alt-circle-down", + "arrow-alt-circle-left", + "arrow-alt-circle-right", + "arrow-alt-circle-up", + "arrow-down", + "arrow-left", + "arrow-right", + "arrow-up", + "arrows-alt", + "arrows-alt-h", + "arrows-alt-v", + "assistive-listening-systems", + "asterisk", + "at", + "atlas", + "award", + "backspace", + "backward", + "bahai", + "ban", + "band-aid", + "bars", + "battery-empty", + "battery-full", + "battery-half", + "battery-quarter", + "battery-three-quarters", + "bed", + "beer", + "bell", + "bell-slash", + "birthday-cake", + "bolt", + "bomb", + "bone", + "book", + "book-dead", + "book-medical", + "book-open", + "bookmark", + "border-all", + "border-none", + "border-style", + "bowling-ball", + "box", + "box-open", + "briefcase", + "broadcast-tower", + "bug", + "building", + "bullhorn", + "calculator", + "calendar", + "calendar-alt", + "calendar-check", + "calendar-day", + "calendar-minus", + "calendar-plus", + "calendar-times", + "calendar-week", + "camera", + "caret-down", + "caret-left", + "caret-right", + "caret-up", + "certificate", + "chair", + "chalkboard", + "charging-station", + "chart-bar", + "chart-line", + "chart-pie", + "check", + "check-circle", + "check-square", + "circle", + "circle-notch", + "clipboard", + "clock", + "clone", + "cloud", + "cloud-download-alt", + "cloud-meatball", + "cloud-moon", + "cloud-moon-rain", + "cloud-rain", + "cloud-showers-heavy", + "cloud-sun", + "cloud-sun-rain", + "cloud-upload-alt", + "code", + "code-branch", + "cog", + "cogs", + "columns", + "comment", + "comment-alt", + "comment-dollar", + "comment-dots", + "comment-medical", + "comment-slash", + "comments", + "comments-dollar", + "compact-disc", + "compass", + "compress-alt", + "cookie", + "cookie-bite", + "copy", + "credit-card", + "crop", + "crop-alt", + "cut", + "database", + "desktop", + "edit", + "envelope", + "envelope-open", + "eraser", + "ethernet", + "exchange-alt", + "exclamation", + "exclamation-circle", + "exclamation-triangle", + "expand", + "expand-alt", + "external-link-alt", + "eye", + "eye-dropper", + "eye-slash", + "fan", + "file", + "file-alt", + "file-archive", + "file-audio", + "file-code", + "file-download", + "fill", + "fill-drip", + "filter", + "fingerprint", + "fire", + "fire-alt", + "folder", + "folder-open", + "forward", + "gamepad", + "ghost", + "gift", + "gifts", + "globe", + "globe-africa", + "globe-asia", + "globe-europe", + "headphones", + "headphones-alt", + "headset", + "heart", + "heart-broken", + "heartbeat", + "history", + "home", + "info", + "keyboard", + "layer-group", + "list", + "lock", + "lock-open", + "map-marker", + "map-marker-alt", + "microphone", + "microphone-alt", + "microphone-alt-slash", + "minus", + "mobile", + "mobile-alt", + "moon", + "mouse", + "mouse-pointer", + "music", + "network-wired", + "neuter", + "paperclip", + "paste", + "pause", + "paw", + "pen", + "pencil-alt", + "percent", + "percentage", + "phone", + "phone-alt", + "phone-slash", + "phone-volume", + "photo-video", + "power-off", + "question", + "question-circle", + "redo", + "redo-alt", + "reply", + "robot", + "rocket", + "rss", + "satellite-dish", + "save", + "search", + "server", + "shapes", + "share", + "share-alt", + "shield-alt", + "signal", + "skull", + "skull-crossbones", + "sliders-h", + "sort", + "spinner", + "times", + "times-circle", + "toggle-off", + "toggle-on", + "toolbox", + "tools", + "trash", + "trash-alt", + "tv", + "undo", + "undo-alt", + "unlink", + "unlock", + "unlock-alt", + "upload", + "user", + "user-alt", + "volume-down", + "volume-mute", + "volume-off", + "volume-up", + "wifi", + "wrench", - "youtube", - "discord", - "node", - "apple", - "sellsy", - "app-store", - "cloudflare", - "dev", - "github-alt", - "gitlab", - "google", - "itunes-note", - "node-js", - "npm", - "spotify", - "usb", - "windows" - } + "youtube", + "discord", + "node", + "apple", + "sellsy", + "app-store", + "cloudflare", + "dev", + "github-alt", + "gitlab", + "google", + "itunes-note", + "node-js", + "npm", + "spotify", + "usb", + "windows", + } - /** - * @see [utils/formtypes](./utils/formtypes.js). - */ - export interface FormTypes { - spacer: (themeOptions?: Record) => { - type: string, - themeOptions: Record - } - emojiPicker: (disabled: boolean, themeOptions?: Record) => { - type: string, - disabled: boolean, - themeOptions?: Record - } - slider: (min: number, max: number, step: number, disabled: boolean, themeOptions?: Record) => { - type: string, - min: number, - max: number, - step: number, - disabled: boolean, - themeOptions: Record - }, - date: (disabled: boolean, themeOptions?: Record) => { - type: string, - disabled: boolean, - themeOptions: Record - }, - numberPicker: (min: number, max: number, disabled: boolean, themeOptions?: Record) => { - type: string, - disabled: boolean, - themeOptions: Record - }, - tagInput: (disabled: boolean, themeOptions?: Record) => { - type: string, - disabled: boolean, - themeOptions: Record - }, - multiRow: (options: any[], themeOptions?: Record) => { - type: string, - options: any[], - themeOptions: Record - }, - } + /** + * @see [utils/formtypes](./utils/formtypes.js). + */ + export interface FormTypes { + spacer: (themeOptions?: Record) => { + type: string; + themeOptions: Record; + }; + emojiPicker: ( + disabled: boolean, + themeOptions?: Record + ) => { + type: string; + disabled: boolean; + themeOptions?: Record; + }; + slider: ( + min: number, + max: number, + step: number, + disabled: boolean, + themeOptions?: Record + ) => { + type: string; + min: number; + max: number; + step: number; + disabled: boolean; + themeOptions: Record; + }; + date: ( + disabled: boolean, + themeOptions?: Record + ) => { + type: string; + disabled: boolean; + themeOptions: Record; + }; + numberPicker: ( + min: number, + max: number, + disabled: boolean, + themeOptions?: Record + ) => { + type: string; + disabled: boolean; + themeOptions: Record; + }; + tagInput: ( + disabled: boolean, + themeOptions?: Record + ) => { + type: string; + disabled: boolean; + themeOptions: Record; + }; + multiRow: ( + options: any[], + themeOptions?: Record + ) => { + type: string; + options: any[]; + themeOptions: Record; + }; + } } From 192ffc17823b8390cc95f289466ce70d86cbc44c Mon Sep 17 00:00:00 2001 From: DJKnaeckebrot <46864390+DJKnaeckebrot@users.noreply.github.com> Date: Thu, 2 Nov 2023 20:36:28 +0100 Subject: [PATCH 3/3] bump version --- package.json | 94 ++++++++++++++++++++++++++-------------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/package.json b/package.json index f505584a..18061400 100644 --- a/package.json +++ b/package.json @@ -1,49 +1,49 @@ { - "name": "dbd-soft-ui", - "version": "1.7.17-beta.1", - "typings": "dbd-soft-ui.d.ts", - "author": { - "name": "iMidnight" - }, - "contributors": [ - "PlainDevelopment", - "Breftejk", - "DJKnaeckebrot" - ], - "bugs": { - "url": "https://github.com/Assistants-Center/dbd-soft-ui/issues" - }, - "bundleDependencies": [], - "dependencies": { - "@keyv/sqlite": "^3.6.5", - "colors": "1.4.0", - "keyv": "^4.5.0", - "node-fetch": "2.6.7", - "nodeactyl": "^3.2.2" - }, - "deprecated": false, - "description": "Soft UI DBD Theme: An awesome - feature packed theme to use with discord-dashboard!", - "homepage": "https://softui.assistantscenter.com/", - "keywords": [ - "discord", - "discord.js", - "discordjs", - "discord dashboard", - "discord web dashboard", - "web dashboard", - "dashboard" - ], - "license": "MIT", - "main": "index.js", - "repository": { - "type": "git", - "url": "git+https://github.com/Assistants-Center/DBD-Soft-UI.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\"" - }, - "devDependencies": { - "express": "^4.18.2", - "prettier": "2.7.1" - } + "name": "dbd-soft-ui", + "version": "1.7.18-beta.1", + "typings": "dbd-soft-ui.d.ts", + "author": { + "name": "iMidnight" + }, + "contributors": [ + "PlainDevelopment", + "Breftejk", + "DJKnaeckebrot" + ], + "bugs": { + "url": "https://github.com/Assistants-Center/dbd-soft-ui/issues" + }, + "bundleDependencies": [], + "dependencies": { + "@keyv/sqlite": "^3.6.5", + "colors": "1.4.0", + "keyv": "^4.5.0", + "node-fetch": "2.6.7", + "nodeactyl": "^3.2.2" + }, + "deprecated": false, + "description": "Soft UI DBD Theme: An awesome - feature packed theme to use with discord-dashboard!", + "homepage": "https://softui.assistantscenter.com/", + "keywords": [ + "discord", + "discord.js", + "discordjs", + "discord dashboard", + "discord web dashboard", + "web dashboard", + "dashboard" + ], + "license": "MIT", + "main": "index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/Assistants-Center/DBD-Soft-UI.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\"" + }, + "devDependencies": { + "express": "^4.18.2", + "prettier": "2.7.1" + } }