grain.social is a photo sharing platform built on atproto. grain.social
atproto photography appview
50
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 643445cfbfca683b3f17f8990f444405cff2165a 82 lines 2.2 kB view raw
1/** 2 * GENERATED CODE - DO NOT MODIFY 3 */ 4 5import { type ValidationResult } from "npm:@atproto/lexicon" 6 7export type OmitKey<T, K extends keyof T> = { 8 [K2 in keyof T as K2 extends K ? never : K2]: T[K2] 9} 10 11export type $Typed<V, T extends string = string> = V & { $type: T } 12export type Un$Typed<V extends { $type?: string }> = OmitKey<V, '$type'> 13 14export type $Type<Id extends string, Hash extends string> = Hash extends 'main' 15 ? Id 16 : `${Id}#${Hash}` 17 18function isObject<V>(v: V): v is V & object { 19 return v != null && typeof v === 'object' 20} 21 22function is$type<Id extends string, Hash extends string>( 23 $type: unknown, 24 id: Id, 25 hash: Hash, 26): $type is $Type<Id, Hash> { 27 return hash === 'main' 28 ? $type === id 29 : // $type === `${id}#${hash}` 30 typeof $type === 'string' && 31 $type.length === id.length + 1 + hash.length && 32 $type.charCodeAt(id.length) === 35 /* '#' */ && 33 $type.startsWith(id) && 34 $type.endsWith(hash) 35} 36 37export type $TypedObject< 38 V, 39 Id extends string, 40 Hash extends string, 41> = V extends { 42 $type: $Type<Id, Hash> 43} 44 ? V 45 : V extends { $type?: string } 46 ? V extends { $type?: infer T extends $Type<Id, Hash> } 47 ? V & { $type: T } 48 : never 49 : V & { $type: $Type<Id, Hash> } 50 51export function is$typed<V, Id extends string, Hash extends string>( 52 v: V, 53 id: Id, 54 hash: Hash, 55): v is $TypedObject<V, Id, Hash> { 56 return isObject(v) && '$type' in v && is$type(v.$type, id, hash) 57} 58 59export function maybe$typed<V, Id extends string, Hash extends string>( 60 v: V, 61 id: Id, 62 hash: Hash, 63): v is V & object & { $type?: $Type<Id, Hash> } { 64 return ( 65 isObject(v) && 66 ('$type' in v ? v.$type === undefined || is$type(v.$type, id, hash) : true) 67 ) 68} 69 70export type Validator<R = unknown> = (v: unknown) => ValidationResult<R> 71export type ValidatorParam<V extends Validator> = 72 V extends Validator<infer R> ? R : never 73 74/** 75 * Utility function that allows to convert a "validate*" utility function into a 76 * type predicate. 77 */ 78export function asPredicate<V extends Validator>(validate: V) { 79 return function <T>(v: T): v is T & ValidatorParam<V> { 80 return validate(v).success 81 } 82}