export const BRAND_ASSET_PATHS = { developmentIconComposerProject: "assets/dev/app-icon.icon", developmentIosIconPng: "assets/dev/blueprint-ios-1024.png", developmentUniversalIconPng: "assets/dev/blueprint-universal-1024.png", productionIconComposerProject: "assets/prod/app-icon.icon", productionIosIconPng: "assets/prod/black-ios-1024.png", productionMacIconPng: "assets/prod/black-macos-1024.png", productionLinuxIconPng: "assets/prod/black-universal-1024.png", productionWindowsIconIco: "assets/prod/t3-black-windows.ico", productionWebFaviconIco: "assets/prod/t3-black-web-favicon.ico", productionWebFavicon16Png: "assets/prod/t3-black-web-favicon-16x16.png", productionWebFavicon32Png: "assets/prod/t3-black-web-favicon-32x32.png", productionWebAppleTouchIconPng: "assets/prod/t3-black-web-apple-touch-180.png", nightlyIconComposerProject: "assets/nightly/app-icon.icon", nightlyIosIconPng: "assets/nightly/nightly-ios-1024.png", nightlyMacIconPng: "assets/nightly/nightly-macos-1024.png", nightlyLinuxIconPng: "assets/nightly/nightly-universal-1024.png", nightlyWindowsIconIco: "assets/nightly/nightly-windows.ico", nightlyWebFaviconIco: "assets/nightly/nightly-web-favicon.ico", nightlyWebFavicon16Png: "assets/nightly/nightly-web-favicon-16x16.png", nightlyWebFavicon32Png: "assets/nightly/nightly-web-favicon-32x32.png", nightlyWebAppleTouchIconPng: "assets/nightly/nightly-web-apple-touch-180.png", developmentDesktopIconPng: "assets/dev/blueprint-macos-1024.png", developmentWindowsIconIco: "assets/dev/blueprint-windows.ico", developmentWebFaviconIco: "assets/dev/blueprint-web-favicon.ico", developmentWebFavicon16Png: "assets/dev/blueprint-web-favicon-16x16.png", developmentWebFavicon32Png: "assets/dev/blueprint-web-favicon-32x32.png", developmentWebAppleTouchIconPng: "assets/dev/blueprint-web-apple-touch-180.png", } as const; export type WebAssetBrand = "development" | "nightly" | "production"; export const WEB_ASSET_CHANNELS = ["latest", "nightly"] as const; export type WebAssetChannel = (typeof WEB_ASSET_CHANNELS)[number]; export function resolveWebAssetBrandForChannel(channel: WebAssetChannel): WebAssetBrand { return channel === "nightly" ? "nightly" : "production"; } export interface IconOverride { readonly sourceRelativePath: string; readonly targetRelativePath: string; } const WEB_ICON_TARGET_FILENAMES = { faviconIco: "favicon.ico", favicon16Png: "favicon-16x16.png", favicon32Png: "favicon-32x32.png", appleTouchIconPng: "apple-touch-icon.png", } as const; const WEB_ICON_SOURCE_PATHS_BY_BRAND = { development: { faviconIco: BRAND_ASSET_PATHS.developmentWebFaviconIco, favicon16Png: BRAND_ASSET_PATHS.developmentWebFavicon16Png, favicon32Png: BRAND_ASSET_PATHS.developmentWebFavicon32Png, appleTouchIconPng: BRAND_ASSET_PATHS.developmentWebAppleTouchIconPng, }, nightly: { faviconIco: BRAND_ASSET_PATHS.nightlyWebFaviconIco, favicon16Png: BRAND_ASSET_PATHS.nightlyWebFavicon16Png, favicon32Png: BRAND_ASSET_PATHS.nightlyWebFavicon32Png, appleTouchIconPng: BRAND_ASSET_PATHS.nightlyWebAppleTouchIconPng, }, production: { faviconIco: BRAND_ASSET_PATHS.productionWebFaviconIco, favicon16Png: BRAND_ASSET_PATHS.productionWebFavicon16Png, favicon32Png: BRAND_ASSET_PATHS.productionWebFavicon32Png, appleTouchIconPng: BRAND_ASSET_PATHS.productionWebAppleTouchIconPng, }, } as const satisfies Record>; export function resolveWebIconOverrides( brand: WebAssetBrand, targetDirectory: string, ): ReadonlyArray { const sourcePaths = WEB_ICON_SOURCE_PATHS_BY_BRAND[brand]; return [ { sourceRelativePath: sourcePaths.faviconIco, targetRelativePath: `${targetDirectory}/${WEB_ICON_TARGET_FILENAMES.faviconIco}`, }, { sourceRelativePath: sourcePaths.favicon16Png, targetRelativePath: `${targetDirectory}/${WEB_ICON_TARGET_FILENAMES.favicon16Png}`, }, { sourceRelativePath: sourcePaths.favicon32Png, targetRelativePath: `${targetDirectory}/${WEB_ICON_TARGET_FILENAMES.favicon32Png}`, }, { sourceRelativePath: sourcePaths.appleTouchIconPng, targetRelativePath: `${targetDirectory}/${WEB_ICON_TARGET_FILENAMES.appleTouchIconPng}`, }, ]; } export const DEVELOPMENT_ICON_OVERRIDES = resolveWebIconOverrides("development", "dist/client"); export const DEVELOPMENT_PUBLIC_ICON_OVERRIDES = resolveWebIconOverrides( "development", "apps/web/public", ); export const PUBLISH_ICON_OVERRIDES = resolveWebIconOverrides("production", "dist/client");