diff --git a/.cspell.json b/.cspell.json index 3157fbb5e..a15c231d6 100644 --- a/.cspell.json +++ b/.cspell.json @@ -368,7 +368,14 @@ "posthog", "pageviews", "pageleave", - "pageview" + "pageview", + "serverweb", + "intefaces", + "Environtment", + "asar", + "icns", + "nsis", + "WARNING️" ], "useGitignore": true, "ignorePaths": [ @@ -415,6 +422,7 @@ "apps/mobile/android/**", "apps/mobile/ios/**", "apps/desktop/i18n/**", - "apps/**/*.{svg,css,scss}" + "apps/**/*.{svg,css,scss}", + ".scripts/icon-utils/icons/**", ] } diff --git a/.scripts/electron-desktop-environment/concrete-environment-content/common-environment-content.ts b/.scripts/electron-desktop-environment/concrete-environment-content/common-environment-content.ts new file mode 100644 index 000000000..0cb2aaf28 --- /dev/null +++ b/.scripts/electron-desktop-environment/concrete-environment-content/common-environment-content.ts @@ -0,0 +1,13 @@ +import { IContentGenerator } from '../intefaces/i-content-generator'; +import { Env } from '../../env'; + + +export class CommonEnvironmentContent implements IContentGenerator { + public generate(variable: Partial): string { + return ` + I18N_FILES_URL: '${variable.I18N_FILES_URL}', + COMPANY_SITE_LINK: '${variable.COMPANY_SITE_LINK}', + COMPANY_GITHUB_LINK: '${variable.COMPANY_GITHUB_LINK}', + ` + } +} diff --git a/.scripts/electron-desktop-environment/concrete-environment-content/desktop-server-web-environment-content.ts b/.scripts/electron-desktop-environment/concrete-environment-content/desktop-server-web-environment-content.ts new file mode 100644 index 000000000..8d31126c9 --- /dev/null +++ b/.scripts/electron-desktop-environment/concrete-environment-content/desktop-server-web-environment-content.ts @@ -0,0 +1,18 @@ +import { IContentGenerator } from '../intefaces/i-content-generator'; +import { IDesktopEnvironment } from '../intefaces/i-desktop-environment'; + +export class DesktopServerWebEnvironmentContent implements IContentGenerator { + public generate(variable: Partial): string { + return ` + NAME: '${variable.DESKTOP_SERVER_WEB_APP_NAME || variable.NAME}', + DESCRIPTION: '${variable.DESKTOP_SERVER_WEB_APP_DESCRIPTION || variable.DESCRIPTION}', + APP_ID: '${variable.DESKTOP_SERVER_WEB_APP_ID || variable.APP_ID}', + REPO_NAME: '${variable.DESKTOP_SERVER_WEB_APP_REPO_NAME || variable.REPO_NAME}', + REPO_OWNER: '${variable.DESKTOP_SERVER_WEB_APP_REPO_OWNER || variable.REPO_OWNER}', + WELCOME_TITLE: '${variable.DESKTOP_SERVER_WEB_APP_WELCOME_TITLE || variable.WELCOME_TITLE}', + WELCOME_CONTENT: '${variable.DESKTOP_SERVER_WEB_APP_WELCOME_CONTENT || variable.WELCOME_CONTENT}', + PLATFORM_LOGO: '${variable.PLATFORM_LOGO}', + DESKTOP_SERVER_WEB_APP_DESKTOP_APP_LOGO_512X512: '${variable.DESKTOP_SERVER_WEB_APP_DESKTOP_APP_LOGO_512X512}', + `; + } +} diff --git a/.scripts/electron-desktop-environment/desktop-environment-manager.ts b/.scripts/electron-desktop-environment/desktop-environment-manager.ts new file mode 100644 index 000000000..7605df4e2 --- /dev/null +++ b/.scripts/electron-desktop-environment/desktop-environment-manager.ts @@ -0,0 +1,108 @@ +import { DesktopEnvirontmentContentFactory } from './desktop-environtment-content-factory'; +import yargs from 'yargs'; +import { hideBin } from 'yargs/helpers'; +import * as path from 'path'; +import * as fs from 'fs'; +import { env } from '../env'; +import { IDesktopEnvironment } from './intefaces/i-desktop-environment'; + +const argv: any = yargs(hideBin(process.argv)).argv; + + +export class DesktopEnvironmentManager { + private static _instance: DesktopEnvironmentManager; + private readonly desktop: string; + private readonly fileDir: string; + private readonly fileName: string; + private readonly isProd: boolean; + + private constructor() { + console.log(argv); + this.desktop = String(argv.desktop); + this.isProd = argv.environment === 'prod'; + this.fileName = 'config'; + this.fileDir = path.join('apps', this.desktop, 'src', 'configs'); + } + + + private static get instance(): DesktopEnvironmentManager { + if (!this._instance) { + this._instance = new DesktopEnvironmentManager(); + } + return this._instance; + } + + public static get environment(): any { + if ( + fs.existsSync( + path.join( + this.instance.fileDir, + this.instance.fileName.concat(`.ts`) + ) + ) + ) { + return require(path.join( + '..', + '..', + this.instance.fileDir, + this.instance.fileName + )).config; + } + return null; + } + + public static update(): void { + const environment: IDesktopEnvironment = Object.assign( + {}, + this.environment + ); + const filePath = path.join( + this.instance.fileDir, + this.instance.fileName.concat('.ts') + ); + + if (fs.existsSync(filePath)) { + fs.unlinkSync(filePath); + fs.writeFileSync( + filePath, + this.instance.content(environment, this.instance.isProd) + ); + return; + } + console.log(`WARNING: File ${filePath} does not exist`); + } + + public static generate(): void { + const files = ['config.ts']; + const environment: Partial = Object.assign({}, env); + + for (const file of files) { + const isProd = file === 'config.ts'; + const filePath = path.join(this.instance.fileDir, file); + if (fs.existsSync(filePath)) { + fs.unlinkSync(filePath); + } + fs.writeFileSync( + filePath, + this.instance.content(environment, isProd) + ); + + console.log(`✔ Generated desktop ${isProd} environment file: ${filePath}`) + } + } + + + private content(variable: Partial, isProd: boolean): string { + return ` + export const config = { + production: ${isProd}, + ${DesktopEnvirontmentContentFactory.generate( + this.desktop, + variable + )} + }; + `; + } +} + +DesktopEnvironmentManager.update(); diff --git a/.scripts/electron-desktop-environment/desktop-environtment-content-factory.ts b/.scripts/electron-desktop-environment/desktop-environtment-content-factory.ts new file mode 100644 index 000000000..5fc55a0b0 --- /dev/null +++ b/.scripts/electron-desktop-environment/desktop-environtment-content-factory.ts @@ -0,0 +1,25 @@ + +import { IDesktopEnvironment } from './intefaces/i-desktop-environment'; +import { CommonEnvironmentContent } from './concrete-environment-content/common-environment-content'; +import { DesktopServerWebEnvironmentContent } from './concrete-environment-content/desktop-server-web-environment-content'; + +export class DesktopEnvirontmentContentFactory { + public static generate( + desktop: string, + environtment: Partial + ) { + const common = new CommonEnvironmentContent(); + switch (desktop) { + case 'server-web': + const desktopServerWeb = new DesktopServerWebEnvironmentContent(); + return ` + ${common.generate(environtment)} + ${desktopServerWeb.generate(environtment)} + `; + default: + return ` + ${common.generate(environtment)} + `; + } + } +} diff --git a/.scripts/electron-desktop-environment/intefaces/i-content-generator.ts b/.scripts/electron-desktop-environment/intefaces/i-content-generator.ts new file mode 100644 index 000000000..e84cbf2b0 --- /dev/null +++ b/.scripts/electron-desktop-environment/intefaces/i-content-generator.ts @@ -0,0 +1,5 @@ +import { IDesktopEnvironment } from './i-desktop-environment' + +export interface IContentGenerator { + generate(variable: Partial): string; +} diff --git a/.scripts/electron-desktop-environment/intefaces/i-desktop-environment.ts b/.scripts/electron-desktop-environment/intefaces/i-desktop-environment.ts new file mode 100644 index 000000000..33ccb9ac9 --- /dev/null +++ b/.scripts/electron-desktop-environment/intefaces/i-desktop-environment.ts @@ -0,0 +1,13 @@ +import { Env } from '../../env'; + +export interface IDesktopEnvironment extends Env { + NAME: string; + DESCRIPTION: string; + APP_ID: string; + REPO_NAME: string; + REPO_OWNER: string; + WELCOME_TITLE: string; + WELCOME_CONTENT: string; + PLATFORM_LOGO: string; + DESKTOP_SERVER_WEB_APP_DESKTOP_APP_LOGO_512X512: string; +} diff --git a/.scripts/electron-package-utils/concrete-packager/desktop-packager.ts b/.scripts/electron-package-utils/concrete-packager/desktop-packager.ts new file mode 100644 index 000000000..aae238e56 --- /dev/null +++ b/.scripts/electron-package-utils/concrete-packager/desktop-packager.ts @@ -0,0 +1,25 @@ +import { IPackage } from '../interfaces/i-package'; +import { IPackager } from '../interfaces/i-packager'; +import { IPackageBuild } from '../interfaces/i-package-build'; +import { env } from '../../env'; + +export class DesktopPackager implements IPackager { + public prepare(pkg: IPackage): IPackage { + pkg.name = env.DESKTOP_SERVER_WEB_APP_NAME || pkg.name; + pkg.productName = env.DESKTOP_SERVER_WEB_APP_DESCRIPTION || pkg.productName; + pkg.description = env.DESKTOP_SERVER_WEB_APP_DESCRIPTION || pkg.description; + pkg.homepage = env.COMPANY_SITE_LINK || pkg.homepage; + pkg.build.appId = env.DESKTOP_SERVER_WEB_APP_ID || pkg.build.appId; + pkg.build.productName = + env.DESKTOP_SERVER_WEB_APP_DESCRIPTION || pkg.build.productName; + pkg.build.linux.executableName = + env.DESKTOP_SERVER_WEB_APP_NAME || pkg.build.linux.executableName; + return pkg; + } + + public prepareBuild(pkg: IPackageBuild): IPackageBuild { + pkg.description = env.DESKTOP_SERVER_WEB_APP_DESCRIPTION || pkg.description; + pkg.name = env.DESKTOP_SERVER_WEB_APP_NAME || pkg.name; + return pkg; + } +} diff --git a/.scripts/electron-package-utils/interfaces/i-package-build.ts b/.scripts/electron-package-utils/interfaces/i-package-build.ts new file mode 100644 index 000000000..6e54741ca --- /dev/null +++ b/.scripts/electron-package-utils/interfaces/i-package-build.ts @@ -0,0 +1,10 @@ +export interface IPackageBuild { + name: string; + version: string; + description: string; + author: { + name: string; + email: string; + url: string; + } +} diff --git a/.scripts/electron-package-utils/interfaces/i-package.ts b/.scripts/electron-package-utils/interfaces/i-package.ts new file mode 100644 index 000000000..54b90d694 --- /dev/null +++ b/.scripts/electron-package-utils/interfaces/i-package.ts @@ -0,0 +1,68 @@ +export interface IPackage { + name: string; + productName: string; + version: string; + description: string; + license: string; + homepage: string; + repository: { type: string; url: string }; + bugs: { url: string }; + private: boolean; + author: { name: string; email: string; url: string }; + main: string; + workspaces: { packages: string[] }; + build: { + appId: string; + artifactName: string; + productName: string; + copyright: string; + afterSign: string; + dmg: { sign: boolean }; + asar: boolean; + npmRebuild: boolean; + asarUnpack: string[]; + directories: { buildResources: string; output: string }; + publish: {}[]; + mac: { + category: string; + icon: string; + target: any[]; + asarUnpack: string; + artifactName: string; + hardenedRuntime: boolean; + gatekeeperAssess: boolean; + entitlements: string; + entitlementsInherit: string; + extendInfo: {}; + }; + win: { + publisherName: string; + target: any[]; + icon: string; + verifyUpdateCodeSignature: boolean; + }; + linux: { + icon: string; + target: any[]; + executableName: string; + artifactName: string; + synopsis: string; + category: string; + }; + nsis: { + oneClick: boolean; + perMachine: boolean; + createDesktopShortcut: boolean; + createStartMenuShortcut: boolean; + allowToChangeInstallationDirectory: boolean; + allowElevation: boolean; + installerIcon: string; + artifactName: string; + deleteAppDataOnUninstall: boolean; + menuCategory: boolean; + }; + extraResources: (string | object[])[]; + extraFiles: string[]; + }; + dependencies: { [key: string]: string }; +} diff --git a/.scripts/electron-package-utils/interfaces/i-packager.ts b/.scripts/electron-package-utils/interfaces/i-packager.ts new file mode 100644 index 000000000..8c4b11d6a --- /dev/null +++ b/.scripts/electron-package-utils/interfaces/i-packager.ts @@ -0,0 +1,6 @@ +import { IPackage } from './i-package'; +import { IPackageBuild } from './i-package-build'; +export interface IPackager { + prepare(pkg: IPackage): IPackage; + prepareBuild(pkg: IPackageBuild): IPackageBuild; +} diff --git a/.scripts/electron-package-utils/package-util.ts b/.scripts/electron-package-utils/package-util.ts new file mode 100644 index 000000000..c7165dd79 --- /dev/null +++ b/.scripts/electron-package-utils/package-util.ts @@ -0,0 +1,79 @@ +import * as fs from 'fs'; +import yargs from 'yargs'; +import { hideBin } from 'yargs/helpers'; +import * as path from 'path'; +import { IPackage } from './interfaces/i-package'; +import { PackagerFactory } from './packager-factory'; +import { IPackageBuild } from './interfaces/i-package-build'; + +const argv: any = yargs(hideBin(process.argv)).argv; + +export class PackageUtil { + private static _instance: PackageUtil; + private readonly filePath: string; + private readonly desktop: string; + private readonly buildFilePath: string; + + constructor() { + this.desktop = String(argv.desktop); + this.filePath = path.join('apps', this.desktop, 'package.json'); + this.buildFilePath = path.join('apps', this.desktop, 'release', 'app', 'package.json'); + } + + private static get instance(): PackageUtil { + if (!this._instance) { + this._instance = new PackageUtil(); + } + return this._instance; + } + + public static get package(): IPackage | null { + if (fs.existsSync(this.instance.filePath)) { + return JSON.parse( + fs.readFileSync(this.instance.filePath, { encoding: 'utf8' }) + ); + } + console.warn(`WARNING: File ${this.instance.filePath} doesn't exists.`); + return null; + } + + public static get packageBuild(): IPackageBuild | null { + if (fs.existsSync(this.instance.buildFilePath)) { + return JSON.parse( + fs.readFileSync(this.instance.buildFilePath, { encoding: 'utf8' }) + ) + } + return null; + } + + public static update(): void { + const pkg = this.package; + const pkgBuild = this.packageBuild; + if (pkg) { + const packager = PackagerFactory.packager(this.instance.desktop); + const packed = packager?.prepare(pkg); + + fs.writeFileSync( + this.instance.filePath, + JSON.stringify(packed, null, 4) + ); + console.warn('✔ package updated.'); + } + if (pkgBuild) { + const packager = PackagerFactory.packager(this.instance.desktop); + const packed = packager?.prepareBuild(pkgBuild); + fs.writeFileSync( + this.instance.buildFilePath, + JSON.stringify(packed, null, 4) + ) + console.warn('✔ package build updated.'); + return; + } + + + console.warn('WARNING: Package not updated.'); + } +} + +// Update package.json +PackageUtil.update(); diff --git a/.scripts/electron-package-utils/packager-factory.ts b/.scripts/electron-package-utils/packager-factory.ts new file mode 100644 index 000000000..81067f48b --- /dev/null +++ b/.scripts/electron-package-utils/packager-factory.ts @@ -0,0 +1,14 @@ +import { IPackager } from './interfaces/i-packager'; +import { DesktopPackager } from './concrete-packager/desktop-packager'; + +export class PackagerFactory { + public static packager(desktop: string): IPackager | undefined { + switch (desktop) { + case 'server-web': + return new DesktopPackager(); + default: + console.warn('WARNING: Unknown application.'); + break; + } + } +} diff --git a/.scripts/electron.env.ts b/.scripts/electron.env.ts index 028974eb4..01eee12e9 100644 --- a/.scripts/electron.env.ts +++ b/.scripts/electron.env.ts @@ -1,6 +1,2 @@ -import { argv } from 'yargs'; - -const environment = argv.environment; -const isProd = environment === 'prod'; - -console.log('Is Production: ' + isProd); +import { DesktopEnvironmentManager } from './electron-desktop-environment/desktop-environment-manager'; +DesktopEnvironmentManager.generate(); diff --git a/.scripts/env.ts b/.scripts/env.ts new file mode 100644 index 000000000..2db1013ba --- /dev/null +++ b/.scripts/env.ts @@ -0,0 +1,65 @@ +import { + cleanEnv, str, num +} from 'envalid'; + + +export type Env = Readonly<{ + PLATFORM_LOGO: string; + DESKTOP_SERVER_WEB_APP_NAME: string; + DESKTOP_SERVER_WEB_APP_DESCRIPTION: string; + DESKTOP_SERVER_WEB_APP_ID: string; + DESKTOP_SERVER_WEB_APP_REPO_NAME: string; + DESKTOP_SERVER_WEB_APP_REPO_OWNER: string; + DESKTOP_SERVER_WEB_APP_WELCOME_TITLE: string; + DESKTOP_SERVER_WEB_APP_WELCOME_CONTENT: string; + DESKTOP_SERVER_WEB_APP_DESKTOP_APP_LOGO_512X512: string; + DESKTOP_SERVER_WEB_APP_DEFAULT_PORT: number; + DESKTOP_SERVER_WEB_APP_DEFAULT_API_URL: string; + I18N_FILES_URL: string; + COMPANY_SITE_LINK: string; + COMPANY_GITHUB_LINK: string; +}> + + +export const env = cleanEnv(process.env, { + COMPANY_SITE_LINK: str({ + default: 'https://ever.team/' + }), + COMPANY_GITHUB_LINK: str({ + default: 'https://github.com/ever-co/ever-teams' + }), + PLATFORM_LOGO: str({ + default: 'src/resources/icons/platform-logo.png' + }), + DESKTOP_SERVER_WEB_APP_NAME: str({ + default: 'ever-teams-server-web' + }), + DESKTOP_SERVER_WEB_APP_DESCRIPTION: str({ + default: 'Ever Teams Server Web' + }), + DESKTOP_SERVER_WEB_APP_ID: str({ + default: 'com.ever.teams.serverweb' + }), + DESKTOP_SERVER_WEB_APP_REPO_NAME: str({ + default: 'ever-teams-web-server' + }), + DESKTOP_SERVER_WEB_APP_REPO_OWNER: str({ + default: 'ever-co' + }), + DESKTOP_SERVER_WEB_APP_WELCOME_TITLE: str({ + default: 'Welcome to Ever Teams Web Server' + }), + DESKTOP_SERVER_WEB_APP_WELCOME_CONTENT: str({ + default: 'Ever Teams Web Server is a web application that allows you to manage your teams and projects.' + }), + DESKTOP_SERVER_WEB_APP_DESKTOP_APP_LOGO_512X512: str({ + default: 'assets/icons/desktop_logo_512x512.png' + }), + DESKTOP_SERVER_WEB_APP_DEFAULT_PORT: num({ + default: 3333 + }), + DESKTOP_SERVER_WEB_APP_DEFAULT_API_URL: str({ + default: 'http://localhost:3000' + }), + I18N_FILES_URL: str({ default: '' }), +}); diff --git a/.scripts/icon-utils/concrete-download-strategy/download-asset-strategy.ts b/.scripts/icon-utils/concrete-download-strategy/download-asset-strategy.ts new file mode 100644 index 000000000..b521913b0 --- /dev/null +++ b/.scripts/icon-utils/concrete-download-strategy/download-asset-strategy.ts @@ -0,0 +1,29 @@ +import { IDownloadStrategy } from '../interfaces/i-download-strategy'; +import * as fs from 'fs'; +import yargs from 'yargs'; +import { hideBin } from 'yargs/helpers'; +import * as path from 'path'; + +const argv: any = yargs(hideBin(process.argv)).argv; + +export class DownloadAssetStrategy implements IDownloadStrategy { + private readonly desktop = String(argv.desktop); + + private checkImageExistence(imagePath: string): boolean { + try { + fs.accessSync(imagePath); + return true; + } catch (error) { + return false; + } + } + + public download(assetPath: string): Promise | string | undefined | null { + const filePath = path.join('apps', this.desktop, 'src', assetPath); + if (this.checkImageExistence(filePath)) { + return filePath; + } + console.warn(`WARNING️: This asset ${filePath} do not exist.`); + return null; + } +} diff --git a/.scripts/icon-utils/concrete-download-strategy/download-https-strategy.ts b/.scripts/icon-utils/concrete-download-strategy/download-https-strategy.ts new file mode 100644 index 000000000..56654c3d9 --- /dev/null +++ b/.scripts/icon-utils/concrete-download-strategy/download-https-strategy.ts @@ -0,0 +1,23 @@ +import { IDownloadStrategy } from '../interfaces/i-download-strategy'; +import fetch from 'node-fetch'; +import * as path from 'path'; +import * as fs from 'fs'; + +export class DownloadHttpsStrategy implements IDownloadStrategy { + public async download( + imageUrl: string, + destination: string + ): Promise { + if (!fs.existsSync(destination)) { + fs.mkdirSync(destination); + console.log('✔ directory created!'); + } + const response = await fetch(imageUrl); + const buffer = await response.buffer(); + const fileName = path.basename(imageUrl); + const filePath = path.join(destination, fileName); + fs.writeFileSync(filePath, buffer); + console.log(`✔ image ${fileName} downloaded successfully.`); + return filePath; + } +} diff --git a/.scripts/icon-utils/concrete-generators/desktop-default-icon-generator.ts b/.scripts/icon-utils/concrete-generators/desktop-default-icon-generator.ts new file mode 100644 index 000000000..c4cab42f5 --- /dev/null +++ b/.scripts/icon-utils/concrete-generators/desktop-default-icon-generator.ts @@ -0,0 +1,46 @@ +import { IIconGeneratorBase } from '../interfaces/i-icon-generator-base'; +import * as fs from 'fs'; +import yargs from 'yargs'; +import { hideBin } from 'yargs/helpers'; +import { env } from '../../env'; +import * as path from 'path'; +import { DesktopEnvironmentManager } from '../../electron-desktop-environment/desktop-environment-manager'; + +const argv: any = yargs(hideBin(process.argv)).argv; +export class DesktopDefaultIconGenerator implements IIconGeneratorBase { + private readonly desktop: string; + private readonly destination: string; + private readonly source: string; + + constructor() { + this.desktop = String(argv.desktop); + this.destination = path.join('apps', this.desktop, 'assets'); + this.source = path.join('.scripts', 'icon-utils', 'icons'); + } + + public async generate(): Promise { + await new Promise((resolve, reject) => + fs.cp( + this.source, + this.destination, + { recursive: true }, + (error) => { + if (error) { + console.error( + 'ERROR: An error occurred while generating the files:', + error + ); + reject(error); + return; + } + DesktopEnvironmentManager.environment.DESKTOP_SERVER_WEB_APP_DESKTOP_APP_LOGO_512X512 = + env.DESKTOP_SERVER_WEB_APP_DESKTOP_APP_LOGO_512X512; + DesktopEnvironmentManager.environment.PLATFORM_LOGO = + env.PLATFORM_LOGO; + console.log('✔ default icons generated successfully!'); + resolve(true); + } + ) + ); + } +} diff --git a/.scripts/icon-utils/concrete-generators/desktop-icon-generator.ts b/.scripts/icon-utils/concrete-generators/desktop-icon-generator.ts new file mode 100644 index 000000000..373a155bd --- /dev/null +++ b/.scripts/icon-utils/concrete-generators/desktop-icon-generator.ts @@ -0,0 +1,191 @@ +import * as Jimp from 'jimp'; +import * as fs from 'fs'; +import * as path from 'path'; +import { IconGenerator } from '../interfaces/icon-generator'; +import { IDesktopIconGenerator } from '../interfaces/i-desktop-icon-generator'; +import { IconFactory } from '../icon-factory'; +import { env } from '../../env'; +import * as PngIco from 'png-to-ico'; +import { DesktopEnvironmentManager } from '../../electron-desktop-environment/desktop-environment-manager'; + +export class DesktopIconGenerator + extends IconGenerator + implements IDesktopIconGenerator { + constructor() { + super(); + this.imageUrl = env.DESKTOP_SERVER_WEB_APP_DESKTOP_APP_LOGO_512X512; + this.destination = path.join('apps', this.desktop, 'assets'); + } + generateMenuIcon(originalImage: Jimp): Promise { + throw new Error('Method not implemented.'); + } + + private async updateLogoPath(): Promise { + const source = path.join(this.destination, 'icon.png'); + const destination = path.join( + 'apps', + this.desktop, + 'assets', + 'icons', + 'desktop_logo_512x512.png' + ); + await new Promise((resolve, reject) => + fs.copyFile(source, destination, (error) => { + if (error) { + console.error( + 'ERROR: An error occurred while generating the files:', + error + ); + reject(error); + } else { + DesktopEnvironmentManager.environment.DESKTOP_SERVER_WEB_APP_DESKTOP_APP_LOGO_512X512 = + './assets/icons/desktop_logo_512x512.png'; + console.log( + '✔ desktop logo 512x512 icons generated successfully.' + ); + resolve(true); + } + }) + ); + } + + public async generateLinuxIcons(originalImage: Jimp): Promise { + const linuxIconSizes = [512, 256, 128, 64, 32, 16]; + const linuxDestination = path.join(this.destination, 'linux'); + if (!fs.existsSync(linuxDestination)) { + fs.mkdirSync(linuxDestination); + console.log('✔ linux icons directory created.'); + } + for (const iconSize of linuxIconSizes) { + const linuxIconFilePath = path.join( + linuxDestination, + `${iconSize}x${iconSize}.png` + ); + await new Promise((resolve) => + originalImage + .clone() + .resize(iconSize, iconSize) + .write(linuxIconFilePath, () => { + console.log( + `✔ linux ${iconSize}x${iconSize}.png icon generated.` + ); + resolve(true); + }) + ); + } + } + + public async generateMacIcon(originalImage: Jimp): Promise { + const macIconFilePath = path.join(this.destination, 'icon.icns'); + await new Promise((resolve) => + originalImage.clone().write(macIconFilePath, () => { + console.log('✔ macOS icon.icns generated.'); + resolve(true); + }) + ); + } + + public async generateWindowsIcon(originalImage: Jimp): Promise { + const ICON_SIZE = 256; + const png = `icon_${ICON_SIZE}x${ICON_SIZE}.png`; + const ico = 'icon.ico'; + const windowsTempIconFilePath = path.join(this.destination, png); + const windowsIconFilePath = path.join(this.destination, ico); + await originalImage + .clone() + .resize(ICON_SIZE, Jimp.AUTO, Jimp.RESIZE_NEAREST_NEIGHBOR) + .writeAsync(windowsTempIconFilePath); + const buffer = await PngIco([windowsTempIconFilePath]); + fs.writeFileSync(windowsIconFilePath, buffer); + await this.remove(windowsTempIconFilePath, true); + console.log(`✔ window ${ico} generated.`); + } + + public async generateTrayIcon(originalImage: Jimp): Promise { + const REF_SIZE = 16; + const scales = [1, 1.25, 1.33, 1.4, 1.5, 1.8, 2, 2.5, 3, 4, 5]; + const pngFilePath = path.join( + 'apps', + this.desktop, + 'assets', + 'icons' + ); + for (const scale of scales) { + const size = REF_SIZE * scale; + const icon = + scale === scales[0] ? 'icon.png' : `icon@${scale}x.png`; + await new Promise((resolve) => + originalImage + .clone() + .resize(size, size) + .write(path.join(pngFilePath, icon), () => { + console.log( + `✔ tray icon ${icon} generated successfully.` + ); + resolve(true); + }) + ); + } + } + + public async resizeAndConvert(filePath: string): Promise { + const image = await Jimp.read(filePath); + const pngFilePath = path.join(this.destination, 'icon.png'); + await new Promise((resolve) => + image + .clone() + .resize(512, 512) + .write(pngFilePath, () => { + console.log( + '✔ image converted to PNG format successfully.' + ); + resolve(true); + }) + ); + + try { + await this.generateLinuxIcons(image); + } catch (error) { + console.error('linux', error); + throw error; + } + + try { + await this.generateWindowsIcon(image); + } catch (error) { + console.error('mac', error); + throw error; + + } + try { + await this.generateMacIcon(image); + } catch (error) { + console.error('mac', error); + throw error; + } + + try { + await this.generateTrayIcon(image); + } catch (error) { + console.error('tray', error); + throw error; + } + + } + + public async generate(): Promise { + try { + const filePath = await this.downloadImage(); + console.log('file path', filePath); + if (filePath) { + await this.resizeAndConvert(filePath); + await this.remove(filePath); + } else { + await IconFactory.generateDefaultIcons(); + } + await this.updateLogoPath(); + } catch (error) { + console.error('error generate', error); + } + } +} diff --git a/.scripts/icon-utils/concrete-generators/no-internet-logo-generator.ts b/.scripts/icon-utils/concrete-generators/no-internet-logo-generator.ts new file mode 100644 index 000000000..a1d042f5c --- /dev/null +++ b/.scripts/icon-utils/concrete-generators/no-internet-logo-generator.ts @@ -0,0 +1,51 @@ +import { IconGenerator } from '../interfaces/icon-generator'; +import { IIconGenerator } from '../interfaces/i-icon-generator'; +import * as path from 'path'; +import * as fs from 'fs'; +import { env } from '../../env'; +import { DesktopEnvironmentManager } from '../../electron-desktop-environment/desktop-environment-manager'; + +export class NoInternetLogoGenerator + extends IconGenerator + implements IIconGenerator +{ + constructor() { + super(); + this.imageUrl = env.NO_INTERNET_LOGO; + this.destination = path.join( + 'apps', + this.desktop, + 'src', + 'assets', + 'images', + 'logos' + ); + } + + public async resizeAndConvert(filePath: string): Promise { + const extName = path.extname(this.imageUrl); + const noInternetLogoFilePath = path.join( + this.destination, + `no_internet_logo${extName}` + ); + await new Promise((resolve, reject) => { + fs.copyFile(filePath, noInternetLogoFilePath, async (err) => { + if (err) { + console.error( + 'ERROR: An error occurred while generating the files:', + err + ); + reject(err); + return; + } + // load image from assets + DesktopEnvironmentManager.environment.NO_INTERNET_LOGO = `./assets/images/logos/no_internet_logo${extName}`; + + // remove downloaded file + await this.remove(filePath); + console.log(`✔ ${extName} copied successfully.`); + resolve(true); + }); + }); + } +} diff --git a/.scripts/icon-utils/concrete-generators/platform-logo-generator.ts b/.scripts/icon-utils/concrete-generators/platform-logo-generator.ts new file mode 100644 index 000000000..82737b000 --- /dev/null +++ b/.scripts/icon-utils/concrete-generators/platform-logo-generator.ts @@ -0,0 +1,49 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import { IconGenerator } from '../interfaces/icon-generator'; +import { IIconGenerator } from '../interfaces/i-icon-generator'; +import { env } from '../../env'; +import { DesktopEnvironmentManager } from '../../electron-desktop-environment/desktop-environment-manager'; + +export class PlatformLogoGenerator + extends IconGenerator + implements IIconGenerator { + constructor() { + super(); + this.imageUrl = env.PLATFORM_LOGO; + this.destination = path.join( + 'apps', + this.desktop, + 'src', + 'resources', + 'icons' + ); + } + + public async resizeAndConvert(filePath: string): Promise { + const extName = path.extname(this.imageUrl); + console.log('✔ Resizing and converting platform logo...', extName); + const platformLogoFilePath = path.join( + this.destination, + `platform-logo${extName}` + ); + await new Promise((resolve, reject) => + fs.copyFile(filePath, platformLogoFilePath, async (err) => { + if (err) { + console.error( + 'An error occurred while generating the files:', + err + ); + reject(err); + return; + } + // load image from assets + DesktopEnvironmentManager.environment.PLATFORM_LOGO = `../../../resources/icons/platform-logo${extName}`; + // remove downloaded file + await this.remove(filePath); + console.log(`✔ ${extName} copied successfully.`); + resolve(true); + }) + ); + } +} diff --git a/.scripts/icon-utils/context/download-context.ts b/.scripts/icon-utils/context/download-context.ts new file mode 100644 index 000000000..e39412a46 --- /dev/null +++ b/.scripts/icon-utils/context/download-context.ts @@ -0,0 +1,16 @@ +import { IDownloadStrategy } from '../interfaces/i-download-strategy'; + +export class DownloadContext { + private _strategy: IDownloadStrategy; + constructor(strategy?: IDownloadStrategy) { + this.strategy = strategy; + } + + public get strategy(): IDownloadStrategy { + return this._strategy; + } + + public set strategy(value: IDownloadStrategy) { + this._strategy = value; + } +} diff --git a/.scripts/icon-utils/icon-factory.ts b/.scripts/icon-utils/icon-factory.ts new file mode 100644 index 000000000..cf49786fa --- /dev/null +++ b/.scripts/icon-utils/icon-factory.ts @@ -0,0 +1,41 @@ +import * as dotenv from 'dotenv'; +import { PlatformLogoGenerator } from './concrete-generators/platform-logo-generator'; +import { DesktopIconGenerator } from './concrete-generators/desktop-icon-generator'; +import { DesktopDefaultIconGenerator } from './concrete-generators/desktop-default-icon-generator'; +import { NoInternetLogoGenerator } from './concrete-generators/no-internet-logo-generator'; +import { DesktopEnvironmentManager } from '../electron-desktop-environment/desktop-environment-manager'; + +dotenv.config(); + +export class IconFactory { + public static async generateDefaultIcons(): Promise { + const defaultIcon = new DesktopDefaultIconGenerator(); + await defaultIcon.generate(); + } + + public static async generatePlatformLogo(): Promise { + const platformLogo = new PlatformLogoGenerator(); + await platformLogo.generate(); + } + + public static async generateDesktopIcons(): Promise { + const desktopIcon = new DesktopIconGenerator(); + await desktopIcon.generate(); + } + + public static async generateNoInternetLogo(): Promise { + const noInternetLogo = new NoInternetLogoGenerator(); + await noInternetLogo.generate(); + } +} + +(async () => { + //Generate platform logo from URL + await IconFactory.generatePlatformLogo(); + //Generate platform logo from URL + await IconFactory.generateNoInternetLogo(); + //Generate desktop icons from URL + await IconFactory.generateDesktopIcons(); + // Update environment file + DesktopEnvironmentManager.update(); +})(); diff --git a/.scripts/icon-utils/icons/icon.icns b/.scripts/icon-utils/icons/icon.icns new file mode 100644 index 000000000..d7bd9522e Binary files /dev/null and b/.scripts/icon-utils/icons/icon.icns differ diff --git a/.scripts/icon-utils/icons/icon.ico b/.scripts/icon-utils/icons/icon.ico new file mode 100644 index 000000000..948320fcc Binary files /dev/null and b/.scripts/icon-utils/icons/icon.ico differ diff --git a/.scripts/icon-utils/icons/icon.png b/.scripts/icon-utils/icons/icon.png new file mode 100644 index 000000000..5796ce0ae Binary files /dev/null and b/.scripts/icon-utils/icons/icon.png differ diff --git a/.scripts/icon-utils/icons/linux/128x128.png b/.scripts/icon-utils/icons/linux/128x128.png new file mode 100644 index 000000000..4fdfea08f Binary files /dev/null and b/.scripts/icon-utils/icons/linux/128x128.png differ diff --git a/.scripts/icon-utils/icons/linux/16x16.png b/.scripts/icon-utils/icons/linux/16x16.png new file mode 100644 index 000000000..94a604a2f Binary files /dev/null and b/.scripts/icon-utils/icons/linux/16x16.png differ diff --git a/.scripts/icon-utils/icons/linux/256x256.png b/.scripts/icon-utils/icons/linux/256x256.png new file mode 100644 index 000000000..8109b808e Binary files /dev/null and b/.scripts/icon-utils/icons/linux/256x256.png differ diff --git a/.scripts/icon-utils/icons/linux/32x32.png b/.scripts/icon-utils/icons/linux/32x32.png new file mode 100644 index 000000000..d55d53b02 Binary files /dev/null and b/.scripts/icon-utils/icons/linux/32x32.png differ diff --git a/.scripts/icon-utils/icons/linux/512x512.png b/.scripts/icon-utils/icons/linux/512x512.png new file mode 100644 index 000000000..5796ce0ae Binary files /dev/null and b/.scripts/icon-utils/icons/linux/512x512.png differ diff --git a/.scripts/icon-utils/icons/linux/64x64.png b/.scripts/icon-utils/icons/linux/64x64.png new file mode 100644 index 000000000..37bf8972c Binary files /dev/null and b/.scripts/icon-utils/icons/linux/64x64.png differ diff --git a/.scripts/icon-utils/interfaces/i-desktop-icon-generator.ts b/.scripts/icon-utils/interfaces/i-desktop-icon-generator.ts new file mode 100644 index 000000000..43c5476d1 --- /dev/null +++ b/.scripts/icon-utils/interfaces/i-desktop-icon-generator.ts @@ -0,0 +1,14 @@ +import * as Jimp from 'jimp'; +import { IIconGenerator } from './i-icon-generator'; + +export interface IDesktopIconGenerator extends IIconGenerator { + generateLinuxIcons(originalImage: Jimp): Promise; + + generateWindowsIcon(originalImage: Jimp): Promise; + + generateMacIcon(originalImage: Jimp): Promise; + + generateTrayIcon(originalImage: Jimp): Promise; + + generateMenuIcon(originalImage: Jimp): Promise; +} diff --git a/.scripts/icon-utils/interfaces/i-download-strategy.ts b/.scripts/icon-utils/interfaces/i-download-strategy.ts new file mode 100644 index 000000000..b0597c957 --- /dev/null +++ b/.scripts/icon-utils/interfaces/i-download-strategy.ts @@ -0,0 +1,3 @@ +export interface IDownloadStrategy { + download(imageUrl: string, destination?: string): Promise | string | undefined | null; +} diff --git a/.scripts/icon-utils/interfaces/i-icon-generator-base.ts b/.scripts/icon-utils/interfaces/i-icon-generator-base.ts new file mode 100644 index 000000000..578fa9151 --- /dev/null +++ b/.scripts/icon-utils/interfaces/i-icon-generator-base.ts @@ -0,0 +1,3 @@ +export interface IIconGeneratorBase { + generate(): Promise; +} diff --git a/.scripts/icon-utils/interfaces/i-icon-generator.ts b/.scripts/icon-utils/interfaces/i-icon-generator.ts new file mode 100644 index 000000000..c26ab90c4 --- /dev/null +++ b/.scripts/icon-utils/interfaces/i-icon-generator.ts @@ -0,0 +1,9 @@ +import { IIconGeneratorBase } from './i-icon-generator-base'; + +export interface IIconGenerator extends IIconGeneratorBase { + checkUrlValidity(urlString: string): boolean; + + downloadImage(): Promise; + + resizeAndConvert(filePath: string): Promise; +} diff --git a/.scripts/icon-utils/interfaces/icon-generator.ts b/.scripts/icon-utils/interfaces/icon-generator.ts new file mode 100644 index 000000000..6e00a5234 --- /dev/null +++ b/.scripts/icon-utils/interfaces/icon-generator.ts @@ -0,0 +1,92 @@ +import yargs from 'yargs'; +import { hideBin } from 'yargs/helpers'; +import * as fs from 'fs'; +import { DownloadContext } from '../context/download-context'; +import { DownloadAssetStrategy } from '../concrete-download-strategy/download-asset-strategy'; +import { DownloadHttpsStrategy } from '../concrete-download-strategy/download-https-strategy'; + +const argv: any = yargs(hideBin(process.argv)).argv; + +export abstract class IconGenerator { + private downloadContext: DownloadContext; + protected destination: string; + protected imageUrl: string; + protected desktop: string | null; + + protected constructor() { + this.desktop = String(argv.desktop); + this.downloadContext = new DownloadContext(); + } + + protected async remove(filePath: string, force = false): Promise { + if (this.downloadContext.strategy instanceof DownloadAssetStrategy) { + if (!force) { + return; + } + } + await new Promise((resolve, reject) => + fs.rm(filePath, (error) => { + if (error) { + console.error('ERROR: An error occurred while removing the file:', error); + reject(error); + } + resolve(true); + }) + ); + } + + public checkUrlValidity(urlString: string): boolean { + try { + if (!urlString) { + console.warn('WARNING: Path is invalid, its cannot be null.'); + return false; + } + + const securedProtocol = urlString.indexOf('https://'); + const localProtocol = urlString.indexOf('assets'); + + if (localProtocol > -1 && localProtocol === Number(0)) { + console.log('✔ url is valid!'); + this.downloadContext.strategy = new DownloadAssetStrategy(); + return true; + } + + if (securedProtocol > -1 && securedProtocol === Number(0)) { + const url = new URL(urlString); + console.log('✔ url is valid!'); + this.downloadContext.strategy = new DownloadHttpsStrategy(); + return !!url; + } + console.warn('WARNING: Only secured https url is allowed'); + return false; + } catch (error) { + console.error(error); + return false; + } + } + + public async downloadImage(): Promise { + if (!this.desktop) { + console.warn('WARNING: A desktop application variant must be selected, process exit.'); + process.exit(0); + } + if (!this.checkUrlValidity(this.imageUrl)) { + return null; + } + + return this.downloadContext.strategy.download(this.imageUrl, this.destination); + } + + public async generate(): Promise { + try { + const filePath = await this.downloadImage(); + if (filePath) { + await this.resizeAndConvert(filePath); + } + } catch (error) { + console.warn(error); + } + } + + public abstract resizeAndConvert(filePath: string): Promise; +} diff --git a/apps/server-web/assets/icon.ico b/apps/server-web/assets/icon.ico index 346ae4440..948320fcc 100644 Binary files a/apps/server-web/assets/icon.ico and b/apps/server-web/assets/icon.ico differ diff --git a/apps/server-web/assets/icons/1024x1024.png b/apps/server-web/assets/icons/1024x1024.png deleted file mode 100755 index 5940b65a3..000000000 Binary files a/apps/server-web/assets/icons/1024x1024.png and /dev/null differ diff --git a/apps/server-web/assets/icons/128x128.png b/apps/server-web/assets/icons/128x128.png deleted file mode 100755 index 14e578d24..000000000 Binary files a/apps/server-web/assets/icons/128x128.png and /dev/null differ diff --git a/apps/server-web/assets/icons/16x16.png b/apps/server-web/assets/icons/16x16.png deleted file mode 100755 index 260a46cb0..000000000 Binary files a/apps/server-web/assets/icons/16x16.png and /dev/null differ diff --git a/apps/server-web/assets/icons/24x24.png b/apps/server-web/assets/icons/24x24.png deleted file mode 100755 index 56172416c..000000000 Binary files a/apps/server-web/assets/icons/24x24.png and /dev/null differ diff --git a/apps/server-web/assets/icons/256x256.png b/apps/server-web/assets/icons/256x256.png deleted file mode 100755 index 755a6e51d..000000000 Binary files a/apps/server-web/assets/icons/256x256.png and /dev/null differ diff --git a/apps/server-web/assets/icons/32x32.png b/apps/server-web/assets/icons/32x32.png deleted file mode 100755 index 63423dfec..000000000 Binary files a/apps/server-web/assets/icons/32x32.png and /dev/null differ diff --git a/apps/server-web/assets/icons/48x48.png b/apps/server-web/assets/icons/48x48.png deleted file mode 100755 index 74d87a0cf..000000000 Binary files a/apps/server-web/assets/icons/48x48.png and /dev/null differ diff --git a/apps/server-web/assets/icons/512x512.png b/apps/server-web/assets/icons/512x512.png deleted file mode 100755 index 313cd499d..000000000 Binary files a/apps/server-web/assets/icons/512x512.png and /dev/null differ diff --git a/apps/server-web/assets/icons/64x64.png b/apps/server-web/assets/icons/64x64.png deleted file mode 100755 index 6de0ec0e0..000000000 Binary files a/apps/server-web/assets/icons/64x64.png and /dev/null differ diff --git a/apps/server-web/assets/icons/96x96.png b/apps/server-web/assets/icons/96x96.png deleted file mode 100755 index 8255ab58c..000000000 Binary files a/apps/server-web/assets/icons/96x96.png and /dev/null differ diff --git a/apps/server-web/assets/icons/desktop_logo_512x512.png b/apps/server-web/assets/icons/desktop_logo_512x512.png new file mode 100644 index 000000000..5796ce0ae Binary files /dev/null and b/apps/server-web/assets/icons/desktop_logo_512x512.png differ diff --git a/apps/server-web/assets/icons/gauzy/icon@1.25x.png b/apps/server-web/assets/icons/gauzy/icon@1.25x.png deleted file mode 100644 index 46ea6d876..000000000 Binary files a/apps/server-web/assets/icons/gauzy/icon@1.25x.png and /dev/null differ diff --git a/apps/server-web/assets/icons/gauzy/icon@1.33x.png b/apps/server-web/assets/icons/gauzy/icon@1.33x.png deleted file mode 100644 index bc73df996..000000000 Binary files a/apps/server-web/assets/icons/gauzy/icon@1.33x.png and /dev/null differ diff --git a/apps/server-web/assets/icons/gauzy/icon@1.4x.png b/apps/server-web/assets/icons/gauzy/icon@1.4x.png deleted file mode 100644 index 19ee320f0..000000000 Binary files a/apps/server-web/assets/icons/gauzy/icon@1.4x.png and /dev/null differ diff --git a/apps/server-web/assets/icons/gauzy/icon@1.5x.png b/apps/server-web/assets/icons/gauzy/icon@1.5x.png deleted file mode 100644 index 5faa32626..000000000 Binary files a/apps/server-web/assets/icons/gauzy/icon@1.5x.png and /dev/null differ diff --git a/apps/server-web/assets/icons/gauzy/icon@1.8x.png b/apps/server-web/assets/icons/gauzy/icon@1.8x.png deleted file mode 100644 index 0f97c50d5..000000000 Binary files a/apps/server-web/assets/icons/gauzy/icon@1.8x.png and /dev/null differ diff --git a/apps/server-web/assets/icons/gauzy/icon@2.5x.png b/apps/server-web/assets/icons/gauzy/icon@2.5x.png deleted file mode 100644 index aeb2dadc3..000000000 Binary files a/apps/server-web/assets/icons/gauzy/icon@2.5x.png and /dev/null differ diff --git a/apps/server-web/assets/icons/gauzy/icon@2x.png b/apps/server-web/assets/icons/gauzy/icon@2x.png deleted file mode 100644 index 9d27eebae..000000000 Binary files a/apps/server-web/assets/icons/gauzy/icon@2x.png and /dev/null differ diff --git a/apps/server-web/assets/icons/gauzy/icon@3x.png b/apps/server-web/assets/icons/gauzy/icon@3x.png deleted file mode 100644 index 999c00be1..000000000 Binary files a/apps/server-web/assets/icons/gauzy/icon@3x.png and /dev/null differ diff --git a/apps/server-web/assets/icons/gauzy/icon@4x.png b/apps/server-web/assets/icons/gauzy/icon@4x.png deleted file mode 100644 index ff6c4fdec..000000000 Binary files a/apps/server-web/assets/icons/gauzy/icon@4x.png and /dev/null differ diff --git a/apps/server-web/assets/icons/gauzy/icon@5x.png b/apps/server-web/assets/icons/gauzy/icon@5x.png deleted file mode 100644 index da278ab3f..000000000 Binary files a/apps/server-web/assets/icons/gauzy/icon@5x.png and /dev/null differ diff --git a/apps/server-web/assets/icons/gauzy/icon.png b/apps/server-web/assets/icons/icon.png similarity index 100% rename from apps/server-web/assets/icons/gauzy/icon.png rename to apps/server-web/assets/icons/icon.png diff --git a/apps/server-web/assets/linux/128x128.png b/apps/server-web/assets/linux/128x128.png index 55a3fc4da..4fdfea08f 100644 Binary files a/apps/server-web/assets/linux/128x128.png and b/apps/server-web/assets/linux/128x128.png differ diff --git a/apps/server-web/assets/linux/16x16.png b/apps/server-web/assets/linux/16x16.png index faa960171..94a604a2f 100644 Binary files a/apps/server-web/assets/linux/16x16.png and b/apps/server-web/assets/linux/16x16.png differ diff --git a/apps/server-web/assets/linux/256x256.png b/apps/server-web/assets/linux/256x256.png index d449f44a8..8109b808e 100644 Binary files a/apps/server-web/assets/linux/256x256.png and b/apps/server-web/assets/linux/256x256.png differ diff --git a/apps/server-web/assets/linux/32x32.png b/apps/server-web/assets/linux/32x32.png index 9d27eebae..d55d53b02 100644 Binary files a/apps/server-web/assets/linux/32x32.png and b/apps/server-web/assets/linux/32x32.png differ diff --git a/apps/server-web/assets/linux/512x512.png b/apps/server-web/assets/linux/512x512.png index d7bd9522e..5796ce0ae 100644 Binary files a/apps/server-web/assets/linux/512x512.png and b/apps/server-web/assets/linux/512x512.png differ diff --git a/apps/server-web/assets/linux/64x64.png b/apps/server-web/assets/linux/64x64.png index ff6c4fdec..37bf8972c 100644 Binary files a/apps/server-web/assets/linux/64x64.png and b/apps/server-web/assets/linux/64x64.png differ diff --git a/apps/server-web/src/main/main.ts b/apps/server-web/src/main/main.ts index c0249ea0a..636b57d51 100644 --- a/apps/server-web/src/main/main.ts +++ b/apps/server-web/src/main/main.ts @@ -14,12 +14,16 @@ import { WebServer } from './helpers/interfaces'; import { replaceConfig } from './helpers'; import Log from 'electron-log'; import MenuBuilder from './menu'; +import { config } from '../configs/config'; console.log = Log.log; Object.assign(console, Log.functions); +app.name = config.DESCRIPTION; + + const eventEmitter = new EventEmitter(); @@ -90,8 +94,8 @@ i18nextMainBackend.on('initialized', () => { let trayMenuItems: any = []; const RESOURCES_PATH = app.isPackaged - ? path.join(process.resourcesPath, 'assets/icons/gauzy') - : path.join(__dirname, '../../assets/icons/gauzy'); + ? path.join(process.resourcesPath, 'assets') + : path.join(__dirname, '../../assets'); const getAssetPath = (...paths: string[]): string => { return path.join(RESOURCES_PATH, ...paths); @@ -111,7 +115,7 @@ const resourceDir = { }; const resourcesFiles = { webServer: 'standalone/apps/web/server.js', - iconTray: 'icons/tray/icon.png' + iconTray: 'icons/icon.png' } const devServerPath = path.join(__dirname, resourceDir.webServer, resourcesFiles.webServer); @@ -151,10 +155,11 @@ const createWindow = async (type: 'SETTING_WINDOW' | 'LOG_WINDOW') => { } const defaultOptionWindow = { + title: app.name, show: false, width: 1024, height: 728, - icon: getAssetPath('icon.png'), + icon: getAssetPath('icons/icon.png'), maximizable: false, resizable: false, webPreferences: { @@ -249,7 +254,7 @@ const onInitApplication = () => { LocalStore.setDefaultServerConfig(); // check and set default config createIntervalAutoUpdate() trayMenuItems = trayMenuItems.length ? trayMenuItems : defaultTrayMenuItem(eventEmitter); - tray = _initTray(trayMenuItems, getAssetPath('icon.png')); + tray = _initTray(trayMenuItems, getAssetPath('icons/icon.png')); i18nextMainBackend.on('languageChanged', (lng) => { if (i18nextMainBackend.isInitialized) { trayMenuItems = trayMenuItems.length ? trayMenuItems : defaultTrayMenuItem(eventEmitter); diff --git a/apps/server-web/src/main/menu.ts b/apps/server-web/src/main/menu.ts index 7e788eef2..be4348ceb 100644 --- a/apps/server-web/src/main/menu.ts +++ b/apps/server-web/src/main/menu.ts @@ -5,6 +5,7 @@ import { BrowserWindow, MenuItemConstructorOptions, } from 'electron'; +import { config } from '../configs/config'; interface DarwinMenuItemConstructorOptions extends MenuItemConstructorOptions { selector?: string; @@ -54,10 +55,10 @@ export default class MenuBuilder { buildDarwinTemplate(): MenuItemConstructorOptions[] { const subMenuAbout: DarwinMenuItemConstructorOptions = { - label: app.getName(), + label: config.DESCRIPTION || app.getName(), submenu: [ { - label: `About ${app.getName()}`, + label: `About ${config.DESCRIPTION || app.getName()}`, selector: 'orderFrontStandardAboutPanel:', }, { type: 'separator' }, @@ -148,7 +149,7 @@ export default class MenuBuilder { const subMenuView = process.env.NODE_ENV === 'development' || - process.env.DEBUG_PROD === 'true' + process.env.DEBUG_PROD === 'true' ? subMenuViewDev : subMenuViewProd; @@ -173,23 +174,23 @@ export default class MenuBuilder { label: '&View', submenu: process.env.NODE_ENV === 'development' || - process.env.DEBUG_PROD === 'true' + process.env.DEBUG_PROD === 'true' ? [ - { - label: '&Reload', - accelerator: 'Ctrl+R', - click: () => { - this.mainWindow.webContents.reload(); - }, + { + label: '&Reload', + accelerator: 'Ctrl+R', + click: () => { + this.mainWindow.webContents.reload(); }, - { - label: 'Toggle &Developer Tools', - accelerator: 'Alt+Ctrl+I', - click: () => { - this.mainWindow.webContents.toggleDevTools(); - }, + }, + { + label: 'Toggle &Developer Tools', + accelerator: 'Alt+Ctrl+I', + click: () => { + this.mainWindow.webContents.toggleDevTools(); }, - ] + }, + ] : [ { label: 'Toggle &Developer Tools', @@ -198,7 +199,7 @@ export default class MenuBuilder { this.mainWindow.webContents.toggleDevTools(); }, }, - ], + ], }, { label: 'Help', @@ -206,23 +207,17 @@ export default class MenuBuilder { { label: 'Learn More', click() { - shell.openExternal('https://ever.team/'); + shell.openExternal(config.COMPANY_SITE_LINK); }, }, { label: 'Documentation', click() { shell.openExternal( - 'https://github.com/ever-co/ever-teams/blob/develop/README.md', + config.COMPANY_GITHUB_LINK ); }, }, - { - label: 'Search Issues', - click() { - shell.openExternal('https://github.com/ever-co/ever-teams/issues'); - }, - }, ], }, ]; diff --git a/apps/server-web/src/renderer/components/svgs/EverTeamsLogo.tsx b/apps/server-web/src/renderer/components/svgs/EverTeamsLogo.tsx index d25ff9e8a..239325f44 100644 --- a/apps/server-web/src/renderer/components/svgs/EverTeamsLogo.tsx +++ b/apps/server-web/src/renderer/components/svgs/EverTeamsLogo.tsx @@ -1,53 +1,6 @@ +import Logo from '../../../resources/icons/platform-logo.png'; export const EverTeamsLogo = () => { return ( - + EverTeams Logo ); }; diff --git a/apps/server-web/src/renderer/index.ejs b/apps/server-web/src/renderer/index.ejs index b2a5d5b40..b52ffacd9 100644 --- a/apps/server-web/src/renderer/index.ejs +++ b/apps/server-web/src/renderer/index.ejs @@ -1,14 +1,14 @@ - - - - Ever Teams - - -
- + + + + + + + + +
+ + diff --git a/apps/server-web/src/resources/icons/platform-logo.png b/apps/server-web/src/resources/icons/platform-logo.png new file mode 100644 index 000000000..de6094fcb Binary files /dev/null and b/apps/server-web/src/resources/icons/platform-logo.png differ diff --git a/apps/server-web/src/resources/icons/tray/icon.png b/apps/server-web/src/resources/icons/tray/icon.png deleted file mode 100644 index faa960171..000000000 Binary files a/apps/server-web/src/resources/icons/tray/icon.png and /dev/null differ diff --git a/apps/server-web/src/resources/icons/tray/icon@1.25x.png b/apps/server-web/src/resources/icons/tray/icon@1.25x.png deleted file mode 100644 index 46ea6d876..000000000 Binary files a/apps/server-web/src/resources/icons/tray/icon@1.25x.png and /dev/null differ diff --git a/apps/server-web/src/resources/icons/tray/icon@1.33x.png b/apps/server-web/src/resources/icons/tray/icon@1.33x.png deleted file mode 100644 index bc73df996..000000000 Binary files a/apps/server-web/src/resources/icons/tray/icon@1.33x.png and /dev/null differ diff --git a/apps/server-web/src/resources/icons/tray/icon@1.4x.png b/apps/server-web/src/resources/icons/tray/icon@1.4x.png deleted file mode 100644 index 19ee320f0..000000000 Binary files a/apps/server-web/src/resources/icons/tray/icon@1.4x.png and /dev/null differ diff --git a/apps/server-web/src/resources/icons/tray/icon@1.5x.png b/apps/server-web/src/resources/icons/tray/icon@1.5x.png deleted file mode 100644 index 5faa32626..000000000 Binary files a/apps/server-web/src/resources/icons/tray/icon@1.5x.png and /dev/null differ diff --git a/apps/server-web/src/resources/icons/tray/icon@1.8x.png b/apps/server-web/src/resources/icons/tray/icon@1.8x.png deleted file mode 100644 index 0f97c50d5..000000000 Binary files a/apps/server-web/src/resources/icons/tray/icon@1.8x.png and /dev/null differ diff --git a/apps/server-web/src/resources/icons/tray/icon@2.5x.png b/apps/server-web/src/resources/icons/tray/icon@2.5x.png deleted file mode 100644 index aeb2dadc3..000000000 Binary files a/apps/server-web/src/resources/icons/tray/icon@2.5x.png and /dev/null differ diff --git a/apps/server-web/src/resources/icons/tray/icon@2x.png b/apps/server-web/src/resources/icons/tray/icon@2x.png deleted file mode 100644 index 9d27eebae..000000000 Binary files a/apps/server-web/src/resources/icons/tray/icon@2x.png and /dev/null differ diff --git a/apps/server-web/src/resources/icons/tray/icon@3x.png b/apps/server-web/src/resources/icons/tray/icon@3x.png deleted file mode 100644 index 999c00be1..000000000 Binary files a/apps/server-web/src/resources/icons/tray/icon@3x.png and /dev/null differ diff --git a/apps/server-web/src/resources/icons/tray/icon@4x.png b/apps/server-web/src/resources/icons/tray/icon@4x.png deleted file mode 100644 index ff6c4fdec..000000000 Binary files a/apps/server-web/src/resources/icons/tray/icon@4x.png and /dev/null differ diff --git a/apps/server-web/src/resources/icons/tray/icon@5x.png b/apps/server-web/src/resources/icons/tray/icon@5x.png deleted file mode 100644 index da278ab3f..000000000 Binary files a/apps/server-web/src/resources/icons/tray/icon@5x.png and /dev/null differ diff --git a/package.json b/package.json index 6f6c449ae..c865b38ab 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,11 @@ "postinstall.web": "yarn node tools/web/postinstall", "spell": "cspell . --config .cspell.json", "spellcheck": "cspell .", - "dev:server-web": "yarn build:web:desktop && yarn run prepare:server-web && yarn copy:build:web && yarn run start:server-web", + "config:electron": "yarn ts-node ./.scripts/electron.env.ts", + "pack": "yarn ts-node .scripts/electron-package-utils/package-util.ts", + "pack:server-web": "yarn run pack --desktop=server-web", + "config:server-web": "yarn run config:electron -- --environment=prod --desktop=server-web", + "dev:server-web": "cross-env NODE_ENV=production yarn prepare:config:server-web && yarn build:web:desktop && yarn run prepare:server-web && yarn copy:build:web && yarn run start:server-web", "build:web:desktop": "cross-env NEXT_BUILD_OUTPUT_TYPE=standalone NEXT_SHARP_PATH=/temp/node_modules/sharp yarn build:web", "copy:build:web": "pwd && cp -r apps/web/.next/standalone apps/server-web/release/app/dist && cp -r apps/web/.next/static apps/server-web/release/app/dist/standalone/apps/web/.next && cp -r apps/web/public apps/server-web/release/app/dist/standalone/apps/web/", "start:server-web": "cd apps/server-web && yarn run start", @@ -92,11 +96,14 @@ "package:server-web:mac": "yarn build:server-web && yarn pack:server-web:mac", "package:server-web:win": "yarn build:server-web && yarn pack:server-web:win", "package:server-web:linux": "yarn build:server-web && yarn pack:server-web:linux", - "build:web-server:linux:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn build:server-web && yarn pack:server-web:linux", - "build:web-server:linux:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn build:server-web && yarn pack:server-web:linux", - "build:web-server:mac:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn build:server-web && yarn pack:server-web:mac", - "build:web-server:windows:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn build:server-web && yarn pack:server-web:win", - "build:web-server:windows:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn build:server-web && yarn pack:server-web:win" + "generate:icons": "yarn ts-node .scripts/icon-utils/icon-factory.ts", + "generate:icons:server-web": "yarn run generate:icons --desktop=server-web", + "prepare:config:server-web": "cross-env NODE_ENV=production yarn config:server-web && yarn pack:server-web && yarn generate:icons:server-web", + "build:web-server:linux:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn prepare:config:server-web && yarn build:server-web && yarn pack:server-web:linux", + "build:web-server:linux:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn prepare:config:server-web && yarn build:server-web && yarn pack:server-web:linux", + "build:web-server:mac:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn prepare:config:server-web && yarn build:server-web && yarn pack:server-web:mac", + "build:web-server:windows:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn prepare:config:server-web && yarn build:server-web && yarn pack:server-web:win", + "build:web-server:windows:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn prepare:config:server-web && yarn build:server-web && yarn pack:server-web:win" }, "config": { "commitizen": { @@ -217,7 +224,9 @@ "semantic-release": "^22.0.12", "simple-git": "^3.20.0", "ts-node": "^10.9.2", - "@types/electron": "^1.6.10" + "@types/electron": "^1.6.10", + "jimp": "^0.22.7", + "png-to-ico": "^2.1.8" }, "overrides": { "prebuild": { diff --git a/yarn.lock b/yarn.lock index c14315c86..3688f1ba7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3278,6 +3278,263 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" +"@jimp/bmp@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.22.12.tgz#0316044dc7b1a90274aef266d50349347fb864d4" + integrity sha512-aeI64HD0npropd+AR76MCcvvRaa+Qck6loCOS03CkkxGHN5/r336qTM5HPUdHKMDOGzqknuVPA8+kK1t03z12g== + dependencies: + "@jimp/utils" "^0.22.12" + bmp-js "^0.1.0" + +"@jimp/core@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.22.12.tgz#70785ea7d10b138fb65bcfe9f712826f00a10e1d" + integrity sha512-l0RR0dOPyzMKfjUW1uebzueFEDtCOj9fN6pyTYWWOM/VS4BciXQ1VVrJs8pO3kycGYZxncRKhCoygbNr8eEZQA== + dependencies: + "@jimp/utils" "^0.22.12" + any-base "^1.1.0" + buffer "^5.2.0" + exif-parser "^0.1.12" + file-type "^16.5.4" + isomorphic-fetch "^3.0.0" + pixelmatch "^4.0.2" + tinycolor2 "^1.6.0" + +"@jimp/custom@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.22.12.tgz#236f2a3f016b533c50869ff22ad1ac00dd0c36be" + integrity sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q== + dependencies: + "@jimp/core" "^0.22.12" + +"@jimp/gif@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.22.12.tgz#6caccb45df497fb971b7a88690345596e22163c0" + integrity sha512-y6BFTJgch9mbor2H234VSjd9iwAhaNf/t3US5qpYIs0TSbAvM02Fbc28IaDETj9+4YB4676sz4RcN/zwhfu1pg== + dependencies: + "@jimp/utils" "^0.22.12" + gifwrap "^0.10.1" + omggif "^1.0.9" + +"@jimp/jpeg@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.22.12.tgz#b5c74a5aac9826245311370dda8c71a1fcca05ed" + integrity sha512-Rq26XC/uQWaQKyb/5lksCTCxXhtY01NJeBN+dQv5yNYedN0i7iYu+fXEoRsfaJ8xZzjoANH8sns7rVP4GE7d/Q== + dependencies: + "@jimp/utils" "^0.22.12" + jpeg-js "^0.4.4" + +"@jimp/plugin-blit@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.22.12.tgz#0fa8320767fda77434b4408798655ff7c7e415d4" + integrity sha512-xslz2ZoFZOPLY8EZ4dC29m168BtDx95D6K80TzgUi8gqT7LY6CsajWO0FAxDwHz6h0eomHMfyGX0stspBrTKnQ== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-blur@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.22.12.tgz#0c37b2ff4e588b45f4307b4f13d3d0eef813920d" + integrity sha512-S0vJADTuh1Q9F+cXAwFPlrKWzDj2F9t/9JAbUvaaDuivpyWuImEKXVz5PUZw2NbpuSHjwssbTpOZ8F13iJX4uw== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-circle@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.22.12.tgz#9fffda83d3fc5bad8c1e1492b15b1433cb42e16e" + integrity sha512-SWVXx1yiuj5jZtMijqUfvVOJBwOifFn0918ou4ftoHgegc5aHWW5dZbYPjvC9fLpvz7oSlptNl2Sxr1zwofjTg== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-color@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.22.12.tgz#1e49f2e7387186507e917b0686599767c15be336" + integrity sha512-xImhTE5BpS8xa+mAN6j4sMRWaUgUDLoaGHhJhpC+r7SKKErYDR0WQV4yCE4gP+N0gozD0F3Ka1LUSaMXrn7ZIA== + dependencies: + "@jimp/utils" "^0.22.12" + tinycolor2 "^1.6.0" + +"@jimp/plugin-contain@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.22.12.tgz#ed5ed9af3d4afd02a7568ff8d60603cff340e3f3" + integrity sha512-Eo3DmfixJw3N79lWk8q/0SDYbqmKt1xSTJ69yy8XLYQj9svoBbyRpSnHR+n9hOw5pKXytHwUW6nU4u1wegHNoQ== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-cover@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.22.12.tgz#4abbfabe4c78c71d8d46e707c35a65dc55f08afd" + integrity sha512-z0w/1xH/v/knZkpTNx+E8a7fnasQ2wHG5ze6y5oL2dhH1UufNua8gLQXlv8/W56+4nJ1brhSd233HBJCo01BXA== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-crop@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.22.12.tgz#e28329a9f285071442998560b040048d2ef5c32e" + integrity sha512-FNuUN0OVzRCozx8XSgP9MyLGMxNHHJMFt+LJuFjn1mu3k0VQxrzqbN06yIl46TVejhyAhcq5gLzqmSCHvlcBVw== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-displace@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.22.12.tgz#2e4b2b989a23da6687c49f2f628e1e6d686ec9b6" + integrity sha512-qpRM8JRicxfK6aPPqKZA6+GzBwUIitiHaZw0QrJ64Ygd3+AsTc7BXr+37k2x7QcyCvmKXY4haUrSIsBug4S3CA== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-dither@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.22.12.tgz#3cc5f3a58dbf85653c4e532d31a756a4fc8cabf7" + integrity sha512-jYgGdSdSKl1UUEanX8A85v4+QUm+PE8vHFwlamaKk89s+PXQe7eVE3eNeSZX4inCq63EHL7cX580dMqkoC3ZLw== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-fisheye@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.22.12.tgz#77aef2f3ec59c0bafbd2dbc94b89eab60ce05a3e" + integrity sha512-LGuUTsFg+fOp6KBKrmLkX4LfyCy8IIsROwoUvsUPKzutSqMJnsm3JGDW2eOmWIS/jJpPaeaishjlxvczjgII+Q== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-flip@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.22.12.tgz#7e2154592da01afcf165a3f9d1d25032aa8d8c57" + integrity sha512-m251Rop7GN8W0Yo/rF9LWk6kNclngyjIJs/VXHToGQ6EGveOSTSQaX2Isi9f9lCDLxt+inBIb7nlaLLxnvHX8Q== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-gaussian@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.22.12.tgz#49a40950cedbbea6c84b3a6bccc45365fe78d6b7" + integrity sha512-sBfbzoOmJ6FczfG2PquiK84NtVGeScw97JsCC3rpQv1PHVWyW+uqWFF53+n3c8Y0P2HWlUjflEla2h/vWShvhg== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-invert@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.22.12.tgz#c569e85c1f59911a9a33ef36a51c9cf26065078e" + integrity sha512-N+6rwxdB+7OCR6PYijaA/iizXXodpxOGvT/smd/lxeXsZ/empHmFFFJ/FaXcYh19Tm04dGDaXcNF/dN5nm6+xQ== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-mask@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.22.12.tgz#0ac0d9c282f403255b126556521f90fb8e2997f0" + integrity sha512-4AWZg+DomtpUA099jRV8IEZUfn1wLv6+nem4NRJC7L/82vxzLCgXKTxvNvBcNmJjT9yS1LAAmiJGdWKXG63/NA== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-normalize@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.22.12.tgz#6c44d216f2489cf9b0e0f1e03aa5dfb97f198c53" + integrity sha512-0So0rexQivnWgnhacX4cfkM2223YdExnJTTy6d06WbkfZk5alHUx8MM3yEzwoCN0ErO7oyqEWRnEkGC+As1FtA== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-print@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.22.12.tgz#6a49020947a9bf21a5a28324425670a25587ca65" + integrity sha512-c7TnhHlxm87DJeSnwr/XOLjJU/whoiKYY7r21SbuJ5nuH+7a78EW1teOaj5gEr2wYEd7QtkFqGlmyGXY/YclyQ== + dependencies: + "@jimp/utils" "^0.22.12" + load-bmfont "^1.4.1" + +"@jimp/plugin-resize@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.22.12.tgz#f92acbf73beb97dd1fe93b166ef367a323b81e81" + integrity sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-rotate@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.22.12.tgz#2235d45aeb4914ff70d99e95750a6d9de45a0d9f" + integrity sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-scale@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.22.12.tgz#91f1ec3d114ff44092b946a16e66b14d918e32ed" + integrity sha512-dghs92qM6MhHj0HrV2qAwKPMklQtjNpoYgAB94ysYpsXslhRTiPisueSIELRwZGEr0J0VUxpUY7HgJwlSIgGZw== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-shadow@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.22.12.tgz#52e3a1d55f61ddfcfb3265544f8d23b887a667b8" + integrity sha512-FX8mTJuCt7/3zXVoeD/qHlm4YH2bVqBuWQHXSuBK054e7wFRnRnbSLPUqAwSeYP3lWqpuQzJtgiiBxV3+WWwTg== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugin-threshold@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.22.12.tgz#1efe20e154bf3a1fc4a5cc016092dbacaa60c958" + integrity sha512-4x5GrQr1a/9L0paBC/MZZJjjgjxLYrqSmWd+e+QfAEPvmRxdRoQ5uKEuNgXnm9/weHQBTnQBQsOY2iFja+XGAw== + dependencies: + "@jimp/utils" "^0.22.12" + +"@jimp/plugins@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.22.12.tgz#45a3b96d2d24cec21d4f8b79d1cfcec6fcb2f1d4" + integrity sha512-yBJ8vQrDkBbTgQZLty9k4+KtUQdRjsIDJSPjuI21YdVeqZxYywifHl4/XWILoTZsjTUASQcGoH0TuC0N7xm3ww== + dependencies: + "@jimp/plugin-blit" "^0.22.12" + "@jimp/plugin-blur" "^0.22.12" + "@jimp/plugin-circle" "^0.22.12" + "@jimp/plugin-color" "^0.22.12" + "@jimp/plugin-contain" "^0.22.12" + "@jimp/plugin-cover" "^0.22.12" + "@jimp/plugin-crop" "^0.22.12" + "@jimp/plugin-displace" "^0.22.12" + "@jimp/plugin-dither" "^0.22.12" + "@jimp/plugin-fisheye" "^0.22.12" + "@jimp/plugin-flip" "^0.22.12" + "@jimp/plugin-gaussian" "^0.22.12" + "@jimp/plugin-invert" "^0.22.12" + "@jimp/plugin-mask" "^0.22.12" + "@jimp/plugin-normalize" "^0.22.12" + "@jimp/plugin-print" "^0.22.12" + "@jimp/plugin-resize" "^0.22.12" + "@jimp/plugin-rotate" "^0.22.12" + "@jimp/plugin-scale" "^0.22.12" + "@jimp/plugin-shadow" "^0.22.12" + "@jimp/plugin-threshold" "^0.22.12" + timm "^1.6.1" + +"@jimp/png@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.22.12.tgz#e033586caf38d9c9d33808e92eb87c4d7f0aa1eb" + integrity sha512-Mrp6dr3UTn+aLK8ty/dSKELz+Otdz1v4aAXzV5q53UDD2rbB5joKVJ/ChY310B+eRzNxIovbUF1KVrUsYdE8Hg== + dependencies: + "@jimp/utils" "^0.22.12" + pngjs "^6.0.0" + +"@jimp/tiff@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.22.12.tgz#67cac3f2ded6fde3ef631fbf74bea0fa53800123" + integrity sha512-E1LtMh4RyJsoCAfAkBRVSYyZDTtLq9p9LUiiYP0vPtXyxX4BiYBUYihTLSBlCQg5nF2e4OpQg7SPrLdJ66u7jg== + dependencies: + utif2 "^4.0.1" + +"@jimp/types@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.22.12.tgz#6f83761ba171cb8cd5998fa66a5cbfb0b22d3d8c" + integrity sha512-wwKYzRdElE1MBXFREvCto5s699izFHNVvALUv79GXNbsOVqlwlOxlWJ8DuyOGIXoLP4JW/m30YyuTtfUJgMRMA== + dependencies: + "@jimp/bmp" "^0.22.12" + "@jimp/gif" "^0.22.12" + "@jimp/jpeg" "^0.22.12" + "@jimp/png" "^0.22.12" + "@jimp/tiff" "^0.22.12" + timm "^1.6.1" + +"@jimp/utils@^0.22.12": + version "0.22.12" + resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.22.12.tgz#8ffaed8f2dc2962539ccaf14727ac60793c7a537" + integrity sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q== + dependencies: + regenerator-runtime "^0.13.3" + "@jitsi/react-sdk@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@jitsi/react-sdk/-/react-sdk-1.3.0.tgz#9013921896c2830806ffdd449d7487e05d9c99ad" @@ -7191,6 +7448,11 @@ "@testing-library/dom" "^9.0.0" "@types/react-dom" "^18.0.0" +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -7787,6 +8049,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.9.tgz#a70ec9d8fa0180a314c3ede0e20ea56ff71aed9a" integrity sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ== +"@types/node@16.9.1": + version "16.9.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.1.tgz#0611b37db4246c937feef529ddcc018cf8e35708" + integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== + "@types/node@20.4.7": version "20.4.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.7.tgz#74d323a93f1391a63477b27b9aec56669c98b2ab" @@ -7807,6 +8074,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.48.tgz#3bc872236cdb31cb51024d8875d655e25db489a4" integrity sha512-mlaecDKQ7rIZrYD7iiKNdzFb6e/qD5I9U1rAhq+Fd+DWvYVs+G2kv74UFHmSOlg5+i/vF3XxuR522V4u8BqO+Q== +"@types/node@^17.0.36": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + "@types/node@^18.11.18": version "18.19.33" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.33.tgz#98cd286a1b8a5e11aa06623210240bcc28e95c48" @@ -8977,6 +9249,11 @@ ansi-styles@^6.1.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== +any-base@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" + integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg== + any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -9713,6 +9990,11 @@ bluebird@^3.5.4, bluebird@^3.5.5, bluebird@^3.7.2: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +bmp-js@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" + integrity sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw== + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" @@ -10083,7 +10365,7 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== -buffer@^5.1.0, buffer@^5.5.0, buffer@^5.6.0: +buffer@^5.1.0, buffer@^5.2.0, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -10448,6 +10730,13 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== +centra@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/centra/-/centra-2.7.0.tgz#4c8312a58436e8a718302011561db7e6a2b0ec18" + integrity sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg== + dependencies: + follow-redirects "^1.15.6" + chalk-template@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-1.1.0.tgz#ffc55db6dd745e9394b85327c8ac8466edb7a7b1" @@ -12862,6 +13151,11 @@ dom-storage@2.1.0: resolved "https://registry.yarnpkg.com/dom-storage/-/dom-storage-2.1.0.tgz#00fb868bc9201357ea243c7bcfd3304c1e34ea39" integrity sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q== +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + domain-browser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -14335,6 +14629,11 @@ executable@^4.1.1: dependencies: pify "^2.2.0" +exif-parser@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" + integrity sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw== + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -14616,6 +14915,15 @@ file-loader@^6.2.0: loader-utils "^2.0.0" schema-utils "^3.0.0" +file-type@^16.5.4: + version "16.5.4" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd" + integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw== + dependencies: + readable-web-to-node-stream "^3.0.0" + strtok3 "^6.2.4" + token-types "^4.1.1" + file-url@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/file-url/-/file-url-3.0.0.tgz#247a586a746ce9f7a8ed05560290968afc262a77" @@ -15177,6 +15485,14 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +gifwrap@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/gifwrap/-/gifwrap-0.10.1.tgz#9ed46a5d51913b482d4221ce9c727080260b681e" + integrity sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw== + dependencies: + image-q "^4.0.0" + omggif "^1.0.10" + git-log-parser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/git-log-parser/-/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" @@ -15433,6 +15749,14 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -16180,6 +16504,13 @@ ignore@^5.3.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== +image-q@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/image-q/-/image-q-4.0.0.tgz#31e075be7bae3c1f42a85c469b4732c358981776" + integrity sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw== + dependencies: + "@types/node" "16.9.1" + image-size@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" @@ -16665,6 +16996,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -16981,6 +17317,14 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +isomorphic-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" + integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== + dependencies: + node-fetch "^2.6.1" + whatwg-fetch "^3.4.1" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -17784,6 +18128,16 @@ jest@^29.7.0: import-local "^3.0.2" jest-cli "^29.7.0" +jimp@^0.22.7: + version "0.22.12" + resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.22.12.tgz#f99d1f3ec0d9d930cb7bd8f5b479859ee3a15694" + integrity sha512-R5jZaYDnfkxKJy1dwLpj/7cvyjxiclxU3F4TrI/J4j2rS0niq6YDUMoPn5hs8GDpO+OZGo7Ky057CRtWesyhfg== + dependencies: + "@jimp/custom" "^0.22.12" + "@jimp/plugins" "^0.22.12" + "@jimp/types" "^0.22.12" + regenerator-runtime "^0.13.3" + jiti@^1.18.2: version "1.19.3" resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.19.3.tgz#ef554f76465b3c2b222dc077834a71f0d4a37569" @@ -17815,6 +18169,11 @@ jose@^5.1.3: resolved "https://registry.yarnpkg.com/jose/-/jose-5.3.0.tgz#61dadf6399e0141d621ad18c1b36a0d6ab17a972" integrity sha512-IChe9AtAE79ru084ow8jzkN2lNrG3Ntfiv65Cvj9uOCE2m5LNsdHG+9EbxWxAoWRF9TgDOqLN5jm08++owDVRg== +jpeg-js@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.4.tgz#a9f1c6f1f9f0fa80cdb3484ed9635054d28936aa" + integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg== + js-cookie@^3.0.1: version "3.0.5" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" @@ -18578,6 +18937,20 @@ livekit-server-sdk@^2.6.0: camelcase-keys "^9.0.0" jose "^5.1.2" +load-bmfont@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.2.tgz#e0f4516064fa5be8439f9c3696c01423a64e8717" + integrity sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog== + dependencies: + buffer-equal "0.0.1" + mime "^1.3.4" + parse-bmfont-ascii "^1.0.3" + parse-bmfont-binary "^1.0.5" + parse-bmfont-xml "^1.1.4" + phin "^3.7.1" + xhr "^2.0.1" + xtend "^4.0.0" + load-json-file@6.2.0, load-json-file@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" @@ -19293,7 +19666,7 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, dependencies: mime-db "1.52.0" -mime@1.6.0, mime@^1.4.1, mime@^1.6.0: +mime@1.6.0, mime@^1.3.4, mime@^1.4.1, mime@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -19333,6 +19706,13 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -19893,7 +20273,7 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.11, node-fetch@^2.6.7, node-fetch@^2.6.9: +node-fetch@^2.6.1, node-fetch@^2.6.11, node-fetch@^2.6.7, node-fetch@^2.6.9: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -20549,6 +20929,11 @@ obuf@^1.0.0, obuf@^1.1.2, obuf@~1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== +omggif@^1.0.10, omggif@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19" + integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== + on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -20905,16 +21290,16 @@ pako@^0.2.5: resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== +pako@^1.0.11, pako@~1.0.2, pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + pako@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== -pako@~1.0.2, pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -20955,6 +21340,24 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.6: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-bmfont-ascii@^1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" + integrity sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA== + +parse-bmfont-binary@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006" + integrity sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA== + +parse-bmfont-xml@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz#016b655da7aebe6da38c906aca16bf0415773767" + integrity sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA== + dependencies: + xml-parse-from-string "^1.0.0" + xml2js "^0.5.0" + parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" @@ -20964,6 +21367,11 @@ parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1: just-diff "^6.0.0" just-diff-apply "^5.2.0" +parse-headers@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -21186,6 +21594,11 @@ pdfmake@^0.2.7: iconv-lite "^0.6.3" xmldoc "^1.1.2" +peek-readable@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72" + integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== + pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -21235,6 +21648,13 @@ pg-types@^4.0.1: postgres-interval "^3.0.0" postgres-range "^1.1.1" +phin@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/phin/-/phin-3.7.1.tgz#bf841da75ee91286691b10e41522a662aa628fd6" + integrity sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ== + dependencies: + centra "^2.7.0" + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -21275,6 +21695,13 @@ pirates@^4.0.1, pirates@^4.0.4: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== +pixelmatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" + integrity sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA== + dependencies: + pngjs "^3.0.0" + pkg-conf@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" @@ -21330,6 +21757,25 @@ png-js@^1.0.0: resolved "https://registry.yarnpkg.com/png-js/-/png-js-1.0.0.tgz#e5484f1e8156996e383aceebb3789fd75df1874d" integrity sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g== +png-to-ico@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/png-to-ico/-/png-to-ico-2.1.8.tgz#fdc2eda6f197df1d6c33400707e36c3b802ac6dd" + integrity sha512-Nf+IIn/cZ/DIZVdGveJp86NG5uNib1ZXMiDd/8x32HCTeKSvgpyg6D/6tUBn1QO/zybzoMK0/mc3QRgAyXdv9w== + dependencies: + "@types/node" "^17.0.36" + minimist "^1.2.6" + pngjs "^6.0.0" + +pngjs@^3.0.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + +pngjs@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-6.0.0.tgz#ca9e5d2aa48db0228a52c419c3308e87720da821" + integrity sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg== + polished@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/polished/-/polished-4.2.2.tgz#2529bb7c3198945373c52e34618c8fe7b1aa84d1" @@ -22651,6 +23097,13 @@ readable-stream@^4.1.0: process "^0.11.10" string_decoder "^1.3.0" +readable-web-to-node-stream@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" + integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== + dependencies: + readable-stream "^3.6.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -22716,6 +23169,11 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +regenerator-runtime@^0.13.3: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + regenerator-runtime@^0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" @@ -23177,6 +23635,11 @@ sass@^1.67.0: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" +sax@>=0.6.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== + sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -24221,16 +24684,7 @@ string-to-color@^2.2.2: lodash.words "^4.2.0" rgb-hex "^3.0.0" -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -24340,14 +24794,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -24414,6 +24861,14 @@ strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: minimist "^1.2.0" through "^2.3.4" +strtok3@^6.2.4: + version "6.3.0" + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.3.0.tgz#358b80ffe6d5d5620e19a073aa78ce947a90f9a0" + integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^4.1.0" + style-loader@^3.3.0: version "3.3.3" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff" @@ -24845,6 +25300,11 @@ timers-browserify@^1.0.1: dependencies: process "~0.11.0" +timm@^1.6.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f" + integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw== + tiny-inflate@^1.0.0, tiny-inflate@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" @@ -24875,6 +25335,11 @@ tiny-warning@^1.0.3: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tinycolor2@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" + integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== + tmp-promise@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" @@ -24923,6 +25388,14 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +token-types@^4.1.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/token-types/-/token-types-4.2.1.tgz#0f897f03665846982806e138977dbe72d44df753" + integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + toposort@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" @@ -25724,6 +26197,13 @@ utf8-byte-length@^1.0.1: resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== +utif2@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/utif2/-/utif2-4.1.0.tgz#e768d37bd619b995d56d9780b5d2b4611a3d932b" + integrity sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w== + dependencies: + pako "^1.0.11" + util-arity@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/util-arity/-/util-arity-1.1.0.tgz#59d01af1fdb3fede0ac4e632b0ab5f6ce97c9330" @@ -26227,6 +26707,11 @@ whatwg-fetch@2.0.4: resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== +whatwg-fetch@^3.4.1: + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== + whatwg-mimetype@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" @@ -26359,7 +26844,7 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -26377,15 +26862,6 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -26488,16 +26964,44 @@ xdg-basedir@^5.0.1: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== +xhr@^2.0.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + xml-name-validator@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== +xml-parse-from-string@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" + integrity sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g== + +xml2js@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" + integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1: version "15.1.1" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"