96 lines · 4.0 KB · TypeScript
RawDownload
export const BRAND_ASSET_PATHS = {  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",   nightlyMacIconPng: "assets/nightly/blueprint-macos-1024.png",  nightlyLinuxIconPng: "assets/nightly/blueprint-universal-1024.png",  nightlyWindowsIconIco: "assets/nightly/blueprint-windows.ico",  nightlyWebFaviconIco: "assets/nightly/blueprint-web-favicon.ico",  nightlyWebFavicon16Png: "assets/nightly/blueprint-web-favicon-16x16.png",  nightlyWebFavicon32Png: "assets/nightly/blueprint-web-favicon-32x32.png",  nightlyWebAppleTouchIconPng: "assets/nightly/blueprint-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<WebAssetBrand, Record<keyof typeof WEB_ICON_TARGET_FILENAMES, string>>; export function resolveWebIconOverrides(  brand: WebAssetBrand,  targetDirectory: string,): ReadonlyArray<IconOverride> {  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 PUBLISH_ICON_OVERRIDES = resolveWebIconOverrides("production", "dist/client");