diff --git a/packages/utility-features/utilities/index.ts b/packages/utility-features/utilities/index.ts index dc8eacdfdd..b9e2b176b8 100644 --- a/packages/utility-features/utilities/index.ts +++ b/packages/utility-features/utilities/index.ts @@ -29,6 +29,7 @@ export * from "./src/noop"; export * from "./src/object"; export * from "./src/observable-crate"; export * from "./src/on-keyboard-shortcut"; +export * from "./src/platform-specific-version" export * from "./src/prevDefault"; export * from "./src/readableStream"; export * from "./src/readonly"; diff --git a/packages/utility-features/utilities/src/platform-specific-version.ts b/packages/utility-features/utilities/src/platform-specific-version.ts new file mode 100644 index 0000000000..adbc9971cc --- /dev/null +++ b/packages/utility-features/utilities/src/platform-specific-version.ts @@ -0,0 +1,20 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +export interface PlatformSpecific { + instantiate: () => T; + readonly platform: NodeJS.Platform | ""; +} + +export const getPlatformSpecificFor = (targetPlatform: NodeJS.Platform, id: string) => (specificImplementations: PlatformSpecific[]): T => { + const impl = specificImplementations.find(impl => impl.platform === targetPlatform) + ?? specificImplementations.find(impl => impl.platform === ""); + + if (!impl) { + throw new Error(`No platform specific implementation of "${id}" found`); + } + + return impl.instantiate(); +}