236 prompt user to update gui if new version is downloaded (#244)

* 236 prompt user to update gui if new version is downloaded

---------

Co-authored-by: neil <neil@neils-MacBook-Pro.local>
This commit is contained in:
Neil 2023-03-02 16:28:41 +08:00 committed by GitHub
parent a837f100b1
commit beb882eef5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 952 additions and 65 deletions

View file

@ -145,6 +145,8 @@ jobs:
- darwin+aarch64
steps:
- uses: teaxyz/setup@v0
with:
version: 0.24.6
- uses: actions/checkout@v3
- run: rm -rf ./*.{dmg,zip} || true

View file

@ -41,7 +41,7 @@ function createWindow() {
});
const mainWindow = new BrowserWindow({
backgroundColor: "whitesmoke",
backgroundColor: "black",
autoHideMenuBar: true,
trafficLightPosition: {
x: 17,
@ -77,9 +77,9 @@ function createWindow() {
return mainWindow;
}
function sendStatusToWindow(text) {
function sendStatusToWindow(text: string, params?: { [key: string]: any }) {
log.info(text);
mainWindow?.webContents.send("message", text);
mainWindow?.webContents.send("message", text, params || {});
}
autoUpdater.on("checking-for-update", () => {
sendStatusToWindow("Checking for update...");
@ -100,7 +100,9 @@ autoUpdater.on("download-progress", (progressObj) => {
sendStatusToWindow(log_message);
});
autoUpdater.on("update-downloaded", (info) => {
sendStatusToWindow("Update downloaded");
sendStatusToWindow(`A new tea gui(${info.version}) is available. Relaunch the app to update.`, {
action: "relaunch"
});
});
contextMenu({
@ -174,3 +176,7 @@ ipcMain.handle("open-terminal", async (_, data) => {
console.error("elast:", error);
}
});
ipcMain.handle("relaunch", async () => {
await autoUpdater.quitAndInstall();
});

View file

@ -1,6 +1,6 @@
{
"name": "@tea/desktop",
"version": "0.0.3",
"version": "0.0.0",
"private": true,
"description": "tea gui app",
"author": "tea.xyz",
@ -77,6 +77,7 @@
"@electron/asar": "^3.2.3",
"@sentry/electron": "^4.3.0",
"@sentry/svelte": "^7.38.0",
"@types/electron": "^1.6.10",
"@vitest/coverage-c8": "^0.27.1",
"axios": "^1.3.2",
"bcryptjs": "^2.4.3",
@ -94,6 +95,7 @@
"lorem-ipsum": "^2.0.8",
"mixpanel-browser": "^2.45.0",
"mkdirp": "^2.1.3",
"renderer": "link:@types/electron/renderer",
"semver": "^7.3.8",
"svelte-markdown": "^0.2.3",
"svelte-watch-resize": "^1.0.3",

View file

@ -127,3 +127,9 @@ export const updateSession = async (session: Partial<Session>) => {
export const openTerminal = (cmd: string) => ipcRenderer.invoke("open-terminal", { cmd });
export const shellOpenExternal = (link: string) => shell.openExternal(link);
export const listenToChannel = (channel: string, callback: (msg: string, ...args: any) => void) => {
ipcRenderer.on(channel, (_, message: string, ...args: any[]) => callback(message, ...args));
};
export const relaunch = () => ipcRenderer.invoke("relaunch");

View file

@ -374,3 +374,11 @@ export const openTerminal = (cmd: string) => console.log(cmd);
export const shellOpenExternal = (link: string) => {
window.open(link, "_blank");
};
export const listenToChannel = (channel: string, callback: (msg: string, ...args: any) => void) => {
console.log("listen to channel", callback);
};
export const relaunch = () => {
console.log("relaunch");
};

View file

@ -8,6 +8,7 @@ import { getFeaturedPackages, getPackageReviews, getAllPosts } from "@native";
import initAuthStore from "./stores/auth";
import initNavStore from "./stores/nav";
import initPackagesStore from "./stores/pkgs";
import initNotificationStore from "./stores/notifications";
export const featuredPackages = writable<Package[]>([]);
@ -142,3 +143,5 @@ export const searchStore = initSearchStore();
export const authStore = initAuthStore();
export const navStore = initNavStore();
export const notificationStore = initNotificationStore();

View file

@ -0,0 +1,40 @@
import { writable } from "svelte/store";
import { nanoid } from "nanoid";
import { NotificationType } from "@tea/ui/types";
import type { Notification } from "@tea/ui/types";
import { listenToChannel, relaunch } from "@native";
export default function initNotificationStore() {
const notifications: Notification[] = [];
const { update, subscribe } = writable<Notification[]>([]);
const remove = (id: string) => {
update((notifications) => notifications.filter((n) => n.id != id));
};
listenToChannel("message", (message: string, params: any) => {
update((value) => {
const newNotification: Notification = {
id: nanoid(4),
message,
type: NotificationType.ACTION_BANNER
};
if (params.action) {
newNotification.callback_label = params.action;
newNotification.callback = () => {
relaunch();
remove(newNotification.id); // not sure yet
};
}
return [...value, newNotification];
});
});
return {
notifications,
subscribe,
remove
};
}

View file

@ -1,7 +1,240 @@
{
"ar": {
"lang": {
"ar": "Arabic",
"zh-CN": "Chinese Simplified",
"nl": "Dutch",
"en": "English",
"fr": "French",
"de": "German",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"pt-PT": "Portuguese",
"ru": "Russian",
"es-ES": "Spanish"
},
"cli": {
"install": "tea ثَبَّتَ"
},
"store-search-placeholder": "search the tea store",
"search": "search",
"home": {
"discover-title": "DISCOVER",
"asset-title": "ASSET TYPE",
"tutorials-title": "TUTORIALS",
"os-news-title": "OPEN-SOURCE NEWS"
},
"package": {
"top-list-title": "Top packages this week",
"browse-cta": "Browse packages",
"what-title": "What are packages?",
"short-description": "Collections of files aggregated to form larger frameworks & functions. Think Python or Node.js.",
"foundation-essentials-title": "FOUNDATION ESSENTIALS",
"view-all-cta": "View all packages",
"install-label": "install",
"installed-label": "installed",
"installing-label": "installing",
"reinstall-label": "re-install",
"my-installs-title": "my installs",
"check-for-updates": "check for updates",
"details": "details"
},
"script": {
"top-list-title": "Top scripts this week",
"view-all-cta": "View all scripts",
"use-label": "use",
"browse-cta": "Browse scripts",
"what-title": "What are scripts?",
"short-description": "Invisible applications that chain packages together in order to perform cool actions on your computer."
},
"post": {
"workshops-title": "workshops to get started",
"article-more-cta": "Read more articles",
"read-more-cta": "read more"
},
"footer": {
"quick-links-title": "quick links",
"about-tea-store": "about the tea store",
"report-a-problem": "report a problem",
"visit-website": "visit tea.xyz",
"terms-services": "terms & services",
"privacy-policy": "privacy-policy"
},
"documentation": {
"title": "documentation",
"featured-courses-title": "featured courses",
"workshops": "workshops"
},
"view-all": "view all",
"sorting": {
"label": "sort order",
"popularity": "popularity",
"most-recent": "most recent"
}
},
"zh-CN": {
"lang": {
"ar": "Arabic",
"zh-CN": "Chinese Simplified",
"nl": "Dutch",
"en": "English",
"fr": "French",
"de": "German",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"pt-PT": "Portuguese",
"ru": "Russian",
"es-ES": "Spanish"
},
"cli": {
"install": "装 tea"
},
"store-search-placeholder": "search the tea store",
"search": "search",
"home": {
"discover-title": "DISCOVER",
"asset-title": "ASSET TYPE",
"tutorials-title": "TUTORIALS",
"os-news-title": "OPEN-SOURCE NEWS"
},
"package": {
"top-list-title": "Top packages this week",
"browse-cta": "Browse packages",
"what-title": "What are packages?",
"short-description": "Collections of files aggregated to form larger frameworks & functions. Think Python or Node.js.",
"foundation-essentials-title": "FOUNDATION ESSENTIALS",
"view-all-cta": "View all packages",
"install-label": "install",
"installed-label": "installed",
"installing-label": "installing",
"reinstall-label": "re-install",
"my-installs-title": "my installs",
"check-for-updates": "check for updates",
"details": "details"
},
"script": {
"top-list-title": "Top scripts this week",
"view-all-cta": "View all scripts",
"use-label": "use",
"browse-cta": "Browse scripts",
"what-title": "What are scripts?",
"short-description": "Invisible applications that chain packages together in order to perform cool actions on your computer."
},
"post": {
"workshops-title": "workshops to get started",
"article-more-cta": "Read more articles",
"read-more-cta": "read more"
},
"footer": {
"quick-links-title": "quick links",
"about-tea-store": "about the tea store",
"report-a-problem": "report a problem",
"visit-website": "visit tea.xyz",
"terms-services": "terms & services",
"privacy-policy": "privacy-policy"
},
"documentation": {
"title": "documentation",
"featured-courses-title": "featured courses",
"workshops": "workshops"
},
"view-all": "view all",
"sorting": {
"label": "sort order",
"popularity": "popularity",
"most-recent": "most recent"
}
},
"nl": {
"lang": {
"ar": "Arabic",
"zh-CN": "Chinese Simplified",
"nl": "Dutch",
"en": "English",
"fr": "French",
"de": "German",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"pt-PT": "Portuguese",
"ru": "Russian",
"es-ES": "Spanish"
},
"cli": {
"install": "installeer tea"
},
"store-search-placeholder": "search the tea store",
"search": "search",
"home": {
"discover-title": "DISCOVER",
"asset-title": "ASSET TYPE",
"tutorials-title": "TUTORIALS",
"os-news-title": "OPEN-SOURCE NEWS"
},
"package": {
"top-list-title": "Top packages this week",
"browse-cta": "Browse packages",
"what-title": "What are packages?",
"short-description": "Collections of files aggregated to form larger frameworks & functions. Think Python or Node.js.",
"foundation-essentials-title": "FOUNDATION ESSENTIALS",
"view-all-cta": "View all packages",
"install-label": "install",
"installed-label": "installed",
"installing-label": "installing",
"reinstall-label": "re-install",
"my-installs-title": "my installs",
"check-for-updates": "check for updates",
"details": "details"
},
"script": {
"top-list-title": "Top scripts this week",
"view-all-cta": "View all scripts",
"use-label": "use",
"browse-cta": "Browse scripts",
"what-title": "What are scripts?",
"short-description": "Invisible applications that chain packages together in order to perform cool actions on your computer."
},
"post": {
"workshops-title": "workshops to get started",
"article-more-cta": "Read more articles",
"read-more-cta": "read more"
},
"footer": {
"quick-links-title": "quick links",
"about-tea-store": "about the tea store",
"report-a-problem": "report a problem",
"visit-website": "visit tea.xyz",
"terms-services": "terms & services",
"privacy-policy": "privacy-policy"
},
"documentation": {
"title": "documentation",
"featured-courses-title": "featured courses",
"workshops": "workshops"
},
"view-all": "view all",
"sorting": {
"label": "sort order",
"popularity": "popularity",
"most-recent": "most recent"
}
},
"en": {
"lang": {
"en": "English"
"ar": "Arabic",
"zh-CN": "Chinese Simplified",
"nl": "Dutch",
"en": "English",
"fr": "French",
"de": "German",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"pt-PT": "Portuguese",
"ru": "Russian",
"es-ES": "Spanish"
},
"cli": {
"install": "install tea"
@ -61,5 +294,597 @@
"popularity": "popularity",
"most-recent": "most recent"
}
},
"fr": {
"lang": {
"ar": "Arabic",
"zh-CN": "Chinese Simplified",
"nl": "Dutch",
"en": "English",
"fr": "French",
"de": "German",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"pt-PT": "Portuguese",
"ru": "Russian",
"es-ES": "Spanish"
},
"cli": {
"install": "installer le tea"
},
"store-search-placeholder": "search the tea store",
"search": "search",
"home": {
"discover-title": "DISCOVER",
"asset-title": "ASSET TYPE",
"tutorials-title": "TUTORIALS",
"os-news-title": "OPEN-SOURCE NEWS"
},
"package": {
"top-list-title": "Top packages this week",
"browse-cta": "Browse packages",
"what-title": "What are packages?",
"short-description": "Collections of files aggregated to form larger frameworks & functions. Think Python or Node.js.",
"foundation-essentials-title": "FOUNDATION ESSENTIALS",
"view-all-cta": "View all packages",
"install-label": "install",
"installed-label": "installed",
"installing-label": "installing",
"reinstall-label": "re-install",
"my-installs-title": "my installs",
"check-for-updates": "check for updates",
"details": "details"
},
"script": {
"top-list-title": "Top scripts this week",
"view-all-cta": "View all scripts",
"use-label": "use",
"browse-cta": "Browse scripts",
"what-title": "What are scripts?",
"short-description": "Invisible applications that chain packages together in order to perform cool actions on your computer."
},
"post": {
"workshops-title": "workshops to get started",
"article-more-cta": "Read more articles",
"read-more-cta": "read more"
},
"footer": {
"quick-links-title": "quick links",
"about-tea-store": "about the tea store",
"report-a-problem": "report a problem",
"visit-website": "visit tea.xyz",
"terms-services": "terms & services",
"privacy-policy": "privacy-policy"
},
"documentation": {
"title": "documentation",
"featured-courses-title": "featured courses",
"workshops": "workshops"
},
"view-all": "view all",
"sorting": {
"label": "sort order",
"popularity": "popularity",
"most-recent": "most recent"
}
},
"de": {
"lang": {
"ar": "Arabic",
"zh-CN": "Chinese Simplified",
"nl": "Dutch",
"en": "English",
"fr": "French",
"de": "German",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"pt-PT": "Portuguese",
"ru": "Russian",
"es-ES": "Spanish"
},
"cli": {
"install": "tea installieren"
},
"store-search-placeholder": "Suche im Tea-laden",
"search": "suchen",
"home": {
"discover-title": "Entdecken",
"asset-title": "Asset-Typ",
"tutorials-title": "TUTORIALS",
"os-news-title": "Open-Source-Nachrichten"
},
"package": {
"top-list-title": "Top packages this week",
"browse-cta": "Browse packages",
"what-title": "What are packages?",
"short-description": "Collections of files aggregated to form larger frameworks & functions. Think Python or Node.js.",
"foundation-essentials-title": "FOUNDATION ESSENTIALS",
"view-all-cta": "View all packages",
"install-label": "Installieren",
"installed-label": "eingerichtet",
"installing-label": "installieren",
"reinstall-label": "neu installieren",
"my-installs-title": "my installs",
"check-for-updates": "check for updates",
"details": "details"
},
"script": {
"top-list-title": "Top scripts this week",
"view-all-cta": "View all scripts",
"use-label": "use",
"browse-cta": "Browse scripts",
"what-title": "What are scripts?",
"short-description": "Invisible applications that chain packages together in order to perform cool actions on your computer."
},
"post": {
"workshops-title": "workshops to get started",
"article-more-cta": "Read more articles",
"read-more-cta": "read more"
},
"footer": {
"quick-links-title": "quick links",
"about-tea-store": "about the tea store",
"report-a-problem": "report a problem",
"visit-website": "visit tea.xyz",
"terms-services": "terms & services",
"privacy-policy": "datenschutz-Bestimmungen"
},
"documentation": {
"title": "documentation",
"featured-courses-title": "featured courses",
"workshops": "workshops"
},
"view-all": "view all",
"sorting": {
"label": "sortierreihenfolge",
"popularity": "popularität",
"most-recent": "neueste"
}
},
"it": {
"lang": {
"ar": "Arabic",
"zh-CN": "Chinese Simplified",
"nl": "Dutch",
"en": "English",
"fr": "French",
"de": "German",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"pt-PT": "Portuguese",
"ru": "Russian",
"es-ES": "Spanish"
},
"cli": {
"install": "installare il tea"
},
"store-search-placeholder": "search the tea store",
"search": "search",
"home": {
"discover-title": "DISCOVER",
"asset-title": "ASSET TYPE",
"tutorials-title": "TUTORIALS",
"os-news-title": "OPEN-SOURCE NEWS"
},
"package": {
"top-list-title": "Top packages this week",
"browse-cta": "Browse packages",
"what-title": "What are packages?",
"short-description": "Collections of files aggregated to form larger frameworks & functions. Think Python or Node.js.",
"foundation-essentials-title": "FOUNDATION ESSENTIALS",
"view-all-cta": "View all packages",
"install-label": "install",
"installed-label": "installed",
"installing-label": "installing",
"reinstall-label": "re-install",
"my-installs-title": "my installs",
"check-for-updates": "check for updates",
"details": "details"
},
"script": {
"top-list-title": "Top scripts this week",
"view-all-cta": "View all scripts",
"use-label": "use",
"browse-cta": "Browse scripts",
"what-title": "What are scripts?",
"short-description": "Invisible applications that chain packages together in order to perform cool actions on your computer."
},
"post": {
"workshops-title": "workshops to get started",
"article-more-cta": "Read more articles",
"read-more-cta": "read more"
},
"footer": {
"quick-links-title": "quick links",
"about-tea-store": "about the tea store",
"report-a-problem": "report a problem",
"visit-website": "visit tea.xyz",
"terms-services": "terms & services",
"privacy-policy": "privacy-policy"
},
"documentation": {
"title": "documentation",
"featured-courses-title": "featured courses",
"workshops": "workshops"
},
"view-all": "view all",
"sorting": {
"label": "sort order",
"popularity": "popularity",
"most-recent": "most recent"
}
},
"ja": {
"lang": {
"ar": "Arabic",
"zh-CN": "Chinese Simplified",
"nl": "Dutch",
"en": "English",
"fr": "French",
"de": "German",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"pt-PT": "Portuguese",
"ru": "Russian",
"es-ES": "Spanish"
},
"cli": {
"install": "tea をインストール"
},
"store-search-placeholder": "search the tea store",
"search": "search",
"home": {
"discover-title": "DISCOVER",
"asset-title": "ASSET TYPE",
"tutorials-title": "TUTORIALS",
"os-news-title": "OPEN-SOURCE NEWS"
},
"package": {
"top-list-title": "Top packages this week",
"browse-cta": "Browse packages",
"what-title": "What are packages?",
"short-description": "Collections of files aggregated to form larger frameworks & functions. Think Python or Node.js.",
"foundation-essentials-title": "FOUNDATION ESSENTIALS",
"view-all-cta": "View all packages",
"install-label": "install",
"installed-label": "installed",
"installing-label": "installing",
"reinstall-label": "re-install",
"my-installs-title": "my installs",
"check-for-updates": "check for updates",
"details": "details"
},
"script": {
"top-list-title": "Top scripts this week",
"view-all-cta": "View all scripts",
"use-label": "use",
"browse-cta": "Browse scripts",
"what-title": "What are scripts?",
"short-description": "Invisible applications that chain packages together in order to perform cool actions on your computer."
},
"post": {
"workshops-title": "workshops to get started",
"article-more-cta": "Read more articles",
"read-more-cta": "read more"
},
"footer": {
"quick-links-title": "quick links",
"about-tea-store": "about the tea store",
"report-a-problem": "report a problem",
"visit-website": "visit tea.xyz",
"terms-services": "terms & services",
"privacy-policy": "privacy-policy"
},
"documentation": {
"title": "documentation",
"featured-courses-title": "featured courses",
"workshops": "workshops"
},
"view-all": "view all",
"sorting": {
"label": "sort order",
"popularity": "popularity",
"most-recent": "most recent"
}
},
"ko": {
"lang": {
"ar": "Arabic",
"zh-CN": "Chinese Simplified",
"nl": "Dutch",
"en": "English",
"fr": "French",
"de": "German",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"pt-PT": "Portuguese",
"ru": "Russian",
"es-ES": "Spanish"
},
"cli": {
"install": "tea 설치"
},
"store-search-placeholder": "search the tea store",
"search": "search",
"home": {
"discover-title": "DISCOVER",
"asset-title": "ASSET TYPE",
"tutorials-title": "TUTORIALS",
"os-news-title": "OPEN-SOURCE NEWS"
},
"package": {
"top-list-title": "Top packages this week",
"browse-cta": "Browse packages",
"what-title": "What are packages?",
"short-description": "Collections of files aggregated to form larger frameworks & functions. Think Python or Node.js.",
"foundation-essentials-title": "FOUNDATION ESSENTIALS",
"view-all-cta": "View all packages",
"install-label": "install",
"installed-label": "installed",
"installing-label": "installing",
"reinstall-label": "re-install",
"my-installs-title": "my installs",
"check-for-updates": "check for updates",
"details": "details"
},
"script": {
"top-list-title": "Top scripts this week",
"view-all-cta": "View all scripts",
"use-label": "use",
"browse-cta": "Browse scripts",
"what-title": "What are scripts?",
"short-description": "Invisible applications that chain packages together in order to perform cool actions on your computer."
},
"post": {
"workshops-title": "workshops to get started",
"article-more-cta": "Read more articles",
"read-more-cta": "read more"
},
"footer": {
"quick-links-title": "quick links",
"about-tea-store": "about the tea store",
"report-a-problem": "report a problem",
"visit-website": "visit tea.xyz",
"terms-services": "terms & services",
"privacy-policy": "privacy-policy"
},
"documentation": {
"title": "documentation",
"featured-courses-title": "featured courses",
"workshops": "workshops"
},
"view-all": "view all",
"sorting": {
"label": "sort order",
"popularity": "popularity",
"most-recent": "most recent"
}
},
"pt-PT": {
"lang": {
"ar": "Arabic",
"zh-CN": "Chinese Simplified",
"nl": "Dutch",
"en": "English",
"fr": "French",
"de": "German",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"pt-PT": "Portuguese",
"ru": "Russian",
"es-ES": "Spanish"
},
"cli": {
"install": "instalar tea"
},
"store-search-placeholder": "search the tea store",
"search": "search",
"home": {
"discover-title": "DISCOVER",
"asset-title": "ASSET TYPE",
"tutorials-title": "TUTORIALS",
"os-news-title": "OPEN-SOURCE NEWS"
},
"package": {
"top-list-title": "Top packages this week",
"browse-cta": "Browse packages",
"what-title": "What are packages?",
"short-description": "Collections of files aggregated to form larger frameworks & functions. Think Python or Node.js.",
"foundation-essentials-title": "FOUNDATION ESSENTIALS",
"view-all-cta": "View all packages",
"install-label": "install",
"installed-label": "installed",
"installing-label": "installing",
"reinstall-label": "re-install",
"my-installs-title": "my installs",
"check-for-updates": "check for updates",
"details": "details"
},
"script": {
"top-list-title": "Top scripts this week",
"view-all-cta": "View all scripts",
"use-label": "use",
"browse-cta": "Browse scripts",
"what-title": "What are scripts?",
"short-description": "Invisible applications that chain packages together in order to perform cool actions on your computer."
},
"post": {
"workshops-title": "workshops to get started",
"article-more-cta": "Read more articles",
"read-more-cta": "read more"
},
"footer": {
"quick-links-title": "quick links",
"about-tea-store": "about the tea store",
"report-a-problem": "report a problem",
"visit-website": "visit tea.xyz",
"terms-services": "terms & services",
"privacy-policy": "privacy-policy"
},
"documentation": {
"title": "documentation",
"featured-courses-title": "featured courses",
"workshops": "workshops"
},
"view-all": "view all",
"sorting": {
"label": "sort order",
"popularity": "popularity",
"most-recent": "most recent"
}
},
"ru": {
"lang": {
"ar": "Arabic",
"zh-CN": "Chinese Simplified",
"nl": "Dutch",
"en": "English",
"fr": "French",
"de": "German",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"pt-PT": "Portuguese",
"ru": "Russian",
"es-ES": "Spanish"
},
"cli": {
"install": "установить tea"
},
"store-search-placeholder": "search the tea store",
"search": "search",
"home": {
"discover-title": "DISCOVER",
"asset-title": "ASSET TYPE",
"tutorials-title": "TUTORIALS",
"os-news-title": "OPEN-SOURCE NEWS"
},
"package": {
"top-list-title": "Top packages this week",
"browse-cta": "Browse packages",
"what-title": "What are packages?",
"short-description": "Collections of files aggregated to form larger frameworks & functions. Think Python or Node.js.",
"foundation-essentials-title": "FOUNDATION ESSENTIALS",
"view-all-cta": "View all packages",
"install-label": "install",
"installed-label": "installed",
"installing-label": "installing",
"reinstall-label": "re-install",
"my-installs-title": "my installs",
"check-for-updates": "check for updates",
"details": "details"
},
"script": {
"top-list-title": "Top scripts this week",
"view-all-cta": "View all scripts",
"use-label": "use",
"browse-cta": "Browse scripts",
"what-title": "What are scripts?",
"short-description": "Invisible applications that chain packages together in order to perform cool actions on your computer."
},
"post": {
"workshops-title": "workshops to get started",
"article-more-cta": "Read more articles",
"read-more-cta": "read more"
},
"footer": {
"quick-links-title": "quick links",
"about-tea-store": "about the tea store",
"report-a-problem": "report a problem",
"visit-website": "visit tea.xyz",
"terms-services": "terms & services",
"privacy-policy": "privacy-policy"
},
"documentation": {
"title": "documentation",
"featured-courses-title": "featured courses",
"workshops": "workshops"
},
"view-all": "view all",
"sorting": {
"label": "sort order",
"popularity": "popularity",
"most-recent": "most recent"
}
},
"es-ES": {
"lang": {
"ar": "Arabic",
"zh-CN": "Chinese Simplified",
"nl": "Dutch",
"en": "English",
"fr": "French",
"de": "German",
"it": "Italian",
"ja": "Japanese",
"ko": "Korean",
"pt-PT": "Portuguese",
"ru": "Russian",
"es-ES": "Spanish"
},
"cli": {
"install": "instalar tea"
},
"store-search-placeholder": "search the tea store",
"search": "search",
"home": {
"discover-title": "DISCOVER",
"asset-title": "ASSET TYPE",
"tutorials-title": "TUTORIALS",
"os-news-title": "OPEN-SOURCE NEWS"
},
"package": {
"top-list-title": "Top packages this week",
"browse-cta": "Browse packages",
"what-title": "What are packages?",
"short-description": "Collections of files aggregated to form larger frameworks & functions. Think Python or Node.js.",
"foundation-essentials-title": "FOUNDATION ESSENTIALS",
"view-all-cta": "View all packages",
"install-label": "install",
"installed-label": "installed",
"installing-label": "installing",
"reinstall-label": "re-install",
"my-installs-title": "my installs",
"check-for-updates": "check for updates",
"details": "details"
},
"script": {
"top-list-title": "Top scripts this week",
"view-all-cta": "View all scripts",
"use-label": "use",
"browse-cta": "Browse scripts",
"what-title": "What are scripts?",
"short-description": "Invisible applications that chain packages together in order to perform cool actions on your computer."
},
"post": {
"workshops-title": "workshops to get started",
"article-more-cta": "Read more articles",
"read-more-cta": "read more"
},
"footer": {
"quick-links-title": "quick links",
"about-tea-store": "about the tea store",
"report-a-problem": "report a problem",
"visit-website": "visit tea.xyz",
"terms-services": "terms & services",
"privacy-policy": "privacy-policy"
},
"documentation": {
"title": "documentation",
"featured-courses-title": "featured courses",
"workshops": "workshops"
},
"view-all": "view all",
"sorting": {
"label": "sort order",
"popularity": "popularity",
"most-recent": "most recent"
}
}
}

View file

@ -4,7 +4,9 @@
import { afterNavigate } from '$app/navigation';
import TopBar from '$components/top-bar/top-bar.svelte';
import FooterLinks from '$components/footer-links/footer-links.svelte';
import { navStore } from '$libs/stores';
import { navStore, notificationStore } from '$libs/stores';
import Notification from "@tea/ui/notification/notification.svelte";
import SearchPopupResults from '$components/search-popup-results/search-popup-results.svelte';
@ -23,6 +25,9 @@
<div id="main-layout" class="w-full">
<TopBar />
{#each $notificationStore as notification}
<Notification {notification} />
{/each}
<section class="relative pt-24" bind:this={view}>
<figure />
<div class="content">
@ -38,6 +43,7 @@
<style>
#main-layout {
height: 100vh;
overflow: hidden;
}
section {
height: calc(100vh - 82px);

View file

@ -0,0 +1,22 @@
<script lang="ts">
import "../app.css";
// import { NotificationType } from "../types";
import type { Notification } from "../types";
export let notification: Notification;
</script>
<div class=" flex w-full items-center justify-between bg-accent px-4 py-2">
<div class="text-white">{notification.message}</div>
{#if notification.callback}
<button
class="h-10 w-32 bg-white text-accent"
on:click={() => {
if (notification.callback) {
notification.callback();
}
}}>{notification.callback_label}</button
>
{/if}
</div>

View file

@ -112,3 +112,15 @@ export interface ListActionItem {
action_label: string;
detail_url?: string;
}
export enum NotificationType {
MESSAGE,
ACTION_BANNER
}
export interface Notification {
id: string;
message: string;
type: NotificationType;
callback_label?: string;
callback?: () => void;
}

View file

@ -29,6 +29,7 @@ importers:
'@testing-library/jest-dom': ^5.16.5
'@testing-library/svelte': ^3.2.2
'@types/bcryptjs': ^2.4.2
'@types/electron': ^1.6.10
'@types/js-yaml': ^4.0.5
'@types/mixpanel-browser': ^2.38.1
'@types/testing-library__jest-dom': ^5.14.5
@ -65,6 +66,7 @@ importers:
prettier: ^2.7.1
prettier-plugin-svelte: ^2.7.0
prettier-plugin-tailwindcss: ^0.2.0
renderer: link:@types/electron/renderer
semver: ^7.3.8
svelte: ^3.55.1
svelte-check: ^2.8.0
@ -86,6 +88,7 @@ importers:
'@electron/asar': 3.2.3
'@sentry/electron': 4.3.0
'@sentry/svelte': 7.38.0_svelte@3.55.1
'@types/electron': 1.6.10
'@vitest/coverage-c8': 0.27.1_jsdom@21.0.0
axios: 1.3.2
bcryptjs: 2.4.3
@ -103,6 +106,7 @@ importers:
lorem-ipsum: 2.0.8
mixpanel-browser: 2.45.0
mkdirp: 2.1.3
renderer: link:@types/electron/renderer
semver: 7.3.8
svelte-markdown: 0.2.3_svelte@3.55.1
svelte-watch-resize: 1.0.3
@ -1798,7 +1802,6 @@ packages:
global-agent: 3.0.0
transitivePeerDependencies:
- supports-color
dev: true
/@electron/notarize/1.2.3:
resolution: {integrity: sha512-9oRzT56rKh5bspk3KpAVF8lPKHYQrBnRwcgiOeR0hdilVEQmszDaAu0IPCPrwwzJN0ugNs0rRboTreHMt/6mBQ==}
@ -2556,7 +2559,6 @@ packages:
/@sindresorhus/is/4.6.0:
resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
engines: {node: '>=10'}
dev: true
/@sindresorhus/is/5.3.0:
resolution: {integrity: sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==}
@ -4123,7 +4125,6 @@ packages:
engines: {node: '>=10'}
dependencies:
defer-to-connect: 2.0.1
dev: true
/@szmarczak/http-timer/5.0.1:
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
@ -4250,7 +4251,6 @@ packages:
'@types/keyv': 3.1.4
'@types/node': 18.11.9
'@types/responselike': 1.0.0
dev: true
/@types/chai-subset/1.3.3:
resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
@ -4280,6 +4280,15 @@ packages:
resolution: {integrity: sha512-RQul5wEfY7BjWm0sYY86cmUN/pcXWGyVxWX93DFFJvcrxax5zKlieLwA3T77xJGwNcZW0YW6CYG70p1m8xPFmA==}
dev: true
/@types/electron/1.6.10:
resolution: {integrity: sha512-MOCVyzIwkBEloreoCVrTV108vSf8fFIJPsGruLCoAoBZdxtnJUqKA4lNonf/2u1twSjAspPEfmEheC+TLm/cMw==}
deprecated: This is a stub types definition for electron (https://github.com/electron/electron). electron provides its own type definitions, so you don't need @types/electron installed!
dependencies:
electron: 22.1.0
transitivePeerDependencies:
- supports-color
dev: false
/@types/estree-jsx/1.0.0:
resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==}
dependencies:
@ -4334,7 +4343,6 @@ packages:
/@types/http-cache-semantics/4.0.1:
resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==}
dev: true
/@types/is-function/1.0.1:
resolution: {integrity: sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==}
@ -4374,7 +4382,6 @@ packages:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
dependencies:
'@types/node': 18.11.9
dev: true
/@types/lodash/4.14.189:
resolution: {integrity: sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==}
@ -4422,7 +4429,6 @@ packages:
/@types/node/16.18.11:
resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==}
dev: true
/@types/node/18.11.9:
resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==}
@ -4483,7 +4489,6 @@ packages:
resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
dependencies:
'@types/node': 18.11.9
dev: true
/@types/sass/1.43.1:
resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==}
@ -4549,7 +4554,6 @@ packages:
requiresBuild: true
dependencies:
'@types/node': 18.11.9
dev: true
optional: true
/@typescript-eslint/eslint-plugin/5.43.0_wze2rj5tow7zwqpgbdx2buoy3m:
@ -5267,7 +5271,6 @@ packages:
/boolean/3.2.0:
resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==}
dev: true
optional: true
/boxen/5.1.2:
@ -5374,7 +5377,6 @@ packages:
/buffer-crc32/0.2.13:
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
dev: true
/buffer-equal/1.0.0:
resolution: {integrity: sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==}
@ -5499,7 +5501,6 @@ packages:
/cacheable-lookup/5.0.4:
resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==}
engines: {node: '>=10.6.0'}
dev: true
/cacheable-lookup/7.0.0:
resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
@ -5530,7 +5531,6 @@ packages:
lowercase-keys: 2.0.0
normalize-url: 6.1.0
responselike: 2.0.1
dev: true
/call-bind/1.0.2:
resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
@ -5731,7 +5731,6 @@ packages:
resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
dependencies:
mimic-response: 1.0.1
dev: true
/clsx/1.1.0:
resolution: {integrity: sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==}
@ -6072,7 +6071,6 @@ packages:
engines: {node: '>=10'}
dependencies:
mimic-response: 3.1.0
dev: true
/dedent-js/1.0.1:
resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==}
@ -6133,7 +6131,6 @@ packages:
/defer-to-connect/2.0.1:
resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
engines: {node: '>=10'}
dev: true
/define-lazy-prop/2.0.0:
resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
@ -6146,7 +6143,6 @@ packages:
dependencies:
has-property-descriptors: 1.0.0
object-keys: 1.1.1
dev: true
/define-property/0.2.5:
resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==}
@ -6207,7 +6203,6 @@ packages:
/detect-node/2.1.0:
resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
dev: true
optional: true
/detect-package-manager/2.0.1:
@ -6551,7 +6546,6 @@ packages:
extract-zip: 2.0.1
transitivePeerDependencies:
- supports-color
dev: true
/element-resize-detector/1.2.4:
resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==}
@ -6575,7 +6569,6 @@ packages:
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
dependencies:
once: 1.4.0
dev: true
/enquirer/2.3.6:
resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==}
@ -6595,7 +6588,6 @@ packages:
/env-paths/2.2.1:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
dev: true
/envinfo/7.8.1:
resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==}
@ -6628,7 +6620,6 @@ packages:
/es6-error/4.1.1:
resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
dev: true
optional: true
/es6-promise/3.3.1:
@ -7128,7 +7119,6 @@ packages:
/escape-string-regexp/4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
dev: true
/escodegen/2.0.0:
resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==}
@ -7592,7 +7582,6 @@ packages:
'@types/yauzl': 2.10.0
transitivePeerDependencies:
- supports-color
dev: true
/extsprintf/1.4.1:
resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==}
@ -7636,7 +7625,6 @@ packages:
resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
dependencies:
pend: 1.2.0
dev: true
/fetch-retry/5.0.3:
resolution: {integrity: sha512-uJQyMrX5IJZkhoEUBQ3EjxkeiZkppBd5jS/fMTJmfZxLSiaQjv2zD0kTvuvkSH89uFvgSlB6ueGpjD3HWN7Bxw==}
@ -7844,7 +7832,6 @@ packages:
graceful-fs: 4.2.10
jsonfile: 4.0.0
universalify: 0.1.2
dev: true
/fs-extra/9.1.0:
resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
@ -7921,7 +7908,6 @@ packages:
function-bind: 1.1.1
has: 1.0.3
has-symbols: 1.0.3
dev: true
/get-package-type/0.1.0:
resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
@ -7938,7 +7924,6 @@ packages:
engines: {node: '>=8'}
dependencies:
pump: 3.0.0
dev: true
/get-stream/6.0.1:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
@ -8027,7 +8012,6 @@ packages:
roarr: 2.15.4
semver: 7.3.8
serialize-error: 7.0.1
dev: true
optional: true
/global-dirs/3.0.1:
@ -8060,7 +8044,6 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
define-properties: 1.1.4
dev: true
optional: true
/globalyzer/0.1.0:
@ -8104,7 +8087,6 @@ packages:
lowercase-keys: 2.0.0
p-cancelable: 2.1.1
responselike: 2.0.1
dev: true
/got/12.5.3:
resolution: {integrity: sha512-8wKnb9MGU8IPGRIo+/ukTy9XLJBwDiCpIf5TVzQ9Cpol50eMTpBq2GAuDsuDIz7hTYmZgMgC1e9ydr6kSDWs3w==}
@ -8163,12 +8145,10 @@ packages:
resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
dependencies:
get-intrinsic: 1.1.3
dev: true
/has-symbols/1.0.3:
resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
engines: {node: '>= 0.4'}
dev: true
/has-tostringtag/1.0.0:
resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
@ -8281,7 +8261,6 @@ packages:
/http-cache-semantics/4.1.0:
resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==}
dev: true
/http-errors/2.0.0:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
@ -8310,7 +8289,6 @@ packages:
dependencies:
quick-lru: 5.1.1
resolve-alpn: 1.2.1
dev: true
/http2-wrapper/2.2.0:
resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==}
@ -9079,7 +9057,6 @@ packages:
/json-buffer/3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
dev: true
/json-parse-even-better-errors/2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
@ -9095,7 +9072,6 @@ packages:
/json-stringify-safe/5.0.1:
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
dev: true
optional: true
/json5/2.2.1:
@ -9129,7 +9105,6 @@ packages:
resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==}
dependencies:
json-buffer: 3.0.1
dev: true
/kind-of/3.2.2:
resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==}
@ -9291,7 +9266,6 @@ packages:
/lowercase-keys/2.0.0:
resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
engines: {node: '>=8'}
dev: true
/lowercase-keys/3.0.0:
resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
@ -9397,7 +9371,6 @@ packages:
engines: {node: '>=10'}
dependencies:
escape-string-regexp: 4.0.0
dev: true
optional: true
/mdast-util-definitions/4.0.0:
@ -9867,12 +9840,10 @@ packages:
/mimic-response/1.0.1:
resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
engines: {node: '>=4'}
dev: true
/mimic-response/3.1.0:
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
engines: {node: '>=10'}
dev: true
/mimic-response/4.0.0:
resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
@ -10098,7 +10069,6 @@ packages:
/normalize-url/6.1.0:
resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
engines: {node: '>=10'}
dev: true
/normalize-url/7.2.0:
resolution: {integrity: sha512-uhXOdZry0L6M2UIo9BTt7FdpBDiAGN/7oItedQwPKh8jh31ZlvC8U9Xl/EJ3aijDHaywXTW3QbZ6LuCocur1YA==}
@ -10157,7 +10127,6 @@ packages:
/object-keys/1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
dev: true
/object-visit/1.0.1:
resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==}
@ -10250,7 +10219,6 @@ packages:
/p-cancelable/2.1.1:
resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
engines: {node: '>=8'}
dev: true
/p-cancelable/3.0.0:
resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
@ -10409,7 +10377,6 @@ packages:
/pend/1.2.0:
resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
dev: true
/periscopic/3.0.4:
resolution: {integrity: sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==}
@ -10652,7 +10619,6 @@ packages:
/progress/2.0.3:
resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
engines: {node: '>=0.4.0'}
dev: true
/prompts/2.4.2:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
@ -10697,7 +10663,6 @@ packages:
dependencies:
end-of-stream: 1.4.4
once: 1.4.0
dev: true
/punycode/2.1.1:
resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
@ -11093,7 +11058,6 @@ packages:
/resolve-alpn/1.2.1:
resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
dev: true
/resolve-from/4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
@ -11122,7 +11086,6 @@ packages:
resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
dependencies:
lowercase-keys: 2.0.0
dev: true
/responselike/3.0.0:
resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
@ -11170,7 +11133,6 @@ packages:
json-stringify-safe: 5.0.1
semver-compare: 1.0.0
sprintf-js: 1.1.2
dev: true
optional: true
/rollup/2.79.1:
@ -11267,7 +11229,6 @@ packages:
/semver-compare/1.0.0:
resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==}
dev: true
optional: true
/semver-diff/4.0.0:
@ -11324,7 +11285,6 @@ packages:
engines: {node: '>=10'}
dependencies:
type-fest: 0.13.1
dev: true
optional: true
/serve-favicon/2.5.0:
@ -11621,7 +11581,6 @@ packages:
/sprintf-js/1.1.2:
resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==}
dev: true
optional: true
/stack-utils/2.0.6:
@ -11770,7 +11729,6 @@ packages:
debug: 4.3.4
transitivePeerDependencies:
- supports-color
dev: true
/supports-color/5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
@ -12360,7 +12318,6 @@ packages:
/type-fest/0.13.1:
resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
engines: {node: '>=10'}
dev: true
optional: true
/type-fest/0.20.2:
@ -12568,7 +12525,6 @@ packages:
/universalify/0.1.2:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
dev: true
/universalify/0.2.0:
resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
@ -13338,7 +13294,6 @@ packages:
dependencies:
buffer-crc32: 0.2.13
fd-slicer: 1.1.0
dev: true
/yocto-queue/0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}