mina-attestations
Version:
Private Attestations on Mina
63 lines (62 loc) • 2.88 kB
TypeScript
import { type Bool, type From, type InferProvable, type InferValue, type ProvableHashable, UInt64 } from 'o1js';
import { type ProvableHashableType, type ProvableHashableWide } from '../o1js-missing.ts';
import { NestedProvable } from '../nested.ts';
import type { DynamicString } from './dynamic-string.ts';
import type { DynamicArrayClass } from './dynamic-array.ts';
import type { DynamicRecordClass } from './dynamic-record.ts';
export { Schema };
type SchemaType = ProvableHashableType | SchemaString | SchemaNumber | SchemaBoolean | {
type: 'array';
inner: SchemaType;
} | {
[key in string]: SchemaType;
};
type SchemaString = {
type: 'string';
};
type SchemaNumber = {
type: 'number';
};
type SchemaBoolean = {
type: 'boolean';
};
type SchemaArray<T extends SchemaType = SchemaType> = {
type: 'array';
inner: T;
};
declare function Schema<T extends Record<string, SchemaType>>(schema: T): {
schema: T;
from(value: SchemaInput<T>): SchemaOutput<T>;
nestedType(value: SchemaOutput<T>): { [key in keyof T]: ProvableTypeOf<T[key]>; };
type(value: SchemaOutput<T>): ProvableHashableWide<{ [key in keyof T]: InferProvable<ProvableTypeOf<T[key]>>; }, { [key in keyof T]: InferValue<ProvableTypeOf<T[key]>>; }, { [key in keyof T]: From<ProvableTypeOf<T[key]>>; }>;
};
declare namespace Schema {
var String: {
type: "string";
};
var Number: {
type: "number";
};
var Boolean: {
type: "boolean";
};
var Array: <T extends SchemaType>(inner: T) => SchemaArray<T>;
var nestedType: <S>(value: S) => unknown extends S ? NestedProvable : { [key in keyof S]: ProvableHashableType<S[key], S[key]>; };
var type: <S>(value: S) => ProvableHashable<S, S>;
}
type SchemaInput<T = SchemaType> = T extends ProvableHashableType ? From<T> : T extends SchemaString ? string : T extends SchemaNumber ? number : T extends SchemaBoolean ? boolean : T extends SchemaArray<infer U> ? SchemaInput<U>[] : T extends {
[key in string]: SchemaType;
} ? {
[key in keyof T]: SchemaInput<T[key]>;
} : never;
type SchemaOutput<T = SchemaType> = T extends ProvableHashableType ? InferProvable<T> : T extends SchemaString ? string : T extends SchemaNumber ? UInt64 : T extends SchemaBoolean ? boolean : T extends SchemaArray<infer U> ? SchemaOutput<U>[] : {
[key in keyof T]: SchemaOutput<T[key]>;
};
/**
* Type version of `provableTypeOf()`.
*/
type ProvableTypeOf<T> = T extends ProvableHashableType ? T : T extends SchemaString ? ReturnType<typeof DynamicString> : T extends SchemaNumber ? typeof UInt64 : T extends SchemaBoolean ? typeof Bool : T extends SchemaArray<infer U> ? DynamicArrayClass<InferProvable<ProvableTypeOf<U>>, InferValue<ProvableTypeOf<U>>> : T extends {
[key in string]: SchemaType;
} ? DynamicRecordClass<{
[key in keyof T]: ProvableTypeOf<T[key]>;
}> : never;