Files
zeekay 7b9c11df53 Update @luxfhe packages to latest versions
- @luxfhe/wasm: ^0.2.0
- @luxfhe/kms: ^0.2.0
- @luxfhe/relayer-sdk: ^0.6.0
- @luxfhe/mock-contracts: ^0.6.0
- Remove deprecated Zama dependencies
2026-01-02 10:49:22 -08:00

43 lines
1.4 KiB
TypeScript

export type Unsealable<T> = { data: T; unsealed: true } | { data: undefined; unsealed: false };
export type Unsealed<R> = R extends Unsealable<infer T> ? NonNullable<T> : NonNullable<R>;
export type UnsealedArray<T extends Array<Unsealable<any> | any>> = { [K in keyof T]: Unsealed<T[K]> };
export const NullUnsealed = { unsealed: false, data: undefined } as const;
export function processUnsealables<T extends any[], C>(
items: [...T],
callback: (...args: UnsealedArray<[...T]>) => C,
): { unsealed: true; data: C } | { unsealed: false; data: undefined } {
const defArr = [];
for (const item of items) {
if (item == null) return NullUnsealed;
if (isUnsealable(item)) {
if (!(item as Unsealable<any>).unsealed) return NullUnsealed;
defArr.push((item as Unsealable<any>).data);
continue;
}
defArr.push(item);
}
return unsealed(callback(...(defArr as UnsealedArray<[...T]>)));
}
export function unsealed<T>(data: T): { unsealed: true; data: T } {
return { unsealed: true, data };
}
// Type guard to check if an item is Unsealable
export function isUnsealable<T>(item: any): item is Unsealable<T> {
return typeof item === "object" && "unsealed" in item;
}
export function unsealableVal<T>(unsealable: Unsealable<T> | undefined, fallback: T): T {
if (unsealable == null || !unsealable.unsealed) return fallback;
return unsealable.data;
}