tldraw/packages/utils/api-report.md
Mitja Bezenšek 6e9fe0c8be
Add url validation (#2428)
Adds validation for urls we use for our shapes and assets. This PR
includes a migration so we should check that existing rooms still load
correctly. There might be some that won't, but that means that they had
invalid url set.

### Change Type

- [x] `patch` — Bug fix
- [ ] `minor` — New feature
- [ ] `major` — Breaking change
- [ ] `dependencies` — Changes to package dependencies[^1]
- [ ] `documentation` — Changes to the documentation only[^2]
- [ ] `tests` — Changes to any test code only[^2]
- [ ] `internal` — Any other changes that don't affect the published
package[^2]
- [ ] I don't know

[^1]: publishes a `patch` release, for devDependencies use `internal`
[^2]: will not publish a new version

### Test Plan
1. Existing rooms should still load correctly (there should be no
validation errors).
2. Adding new images and videos should also work (test both local and
multiplayer rooms as they handle assets differently).

- [x] Unit Tests
- [ ] End to end tests

### Release Notes

- Add validation to urls.

---------

Co-authored-by: alex <alex@dytry.ch>
2024-01-09 10:49:57 +00:00

7.1 KiB

API Report File for "@tldraw/utils"

Do not edit this file. It is a report generated by API Extractor.


// @internal
export function annotateError(error: unknown, annotations: Partial<ErrorAnnotations>): void;

// @internal (undocumented)
export function areArraysShallowEqual<T>(arr1: readonly T[], arr2: readonly T[]): boolean;

// @internal (undocumented)
export function areObjectsShallowEqual<T extends Record<string, unknown>>(obj1: T, obj2: T): boolean;

// @internal (undocumented)
export const assert: (value: unknown, message?: string) => asserts value;

// @internal (undocumented)
export const assertExists: <T>(value: T, message?: string | undefined) => NonNullable<T>;

// @internal (undocumented)
export function compact<T>(arr: T[]): NonNullable<T>[];

// @public
export function debounce<T extends unknown[], U>(callback: (...args: T) => PromiseLike<U> | U, wait: number): {
    (...args: T): Promise<U>;
    cancel(): void;
};

// @public
export function dedupe<T>(input: T[], equals?: (a: any, b: any) => boolean): T[];

// @public
export function deepCopy<T = unknown>(obj: T): T;

// @public (undocumented)
export type ErrorResult<E> = {
    readonly ok: false;
    readonly error: E;
};

// @internal (undocumented)
export function exhaustiveSwitchError(value: never, property?: string): never;

// @public (undocumented)
export type Expand<T> = T extends infer O ? {
    [K in keyof O]: O[K];
} : never;

// @public
export class FileHelpers {
    // @internal (undocumented)
    static base64ToFile(dataURL: string): Promise<ArrayBuffer>;
    static fileToBase64(file: Blob): Promise<string>;
}

// @internal
export function filterEntries<Key extends string, Value>(object: {
    [K in Key]: Value;
}, predicate: (key: Key, value: Value) => boolean): {
    [K in Key]: Value;
};

// @internal (undocumented)
export function getErrorAnnotations(error: Error): ErrorAnnotations;

// @public
export function getFirstFromIterable<T = unknown>(set: Map<any, T> | Set<T>): T;

// @public
export function getHashForObject(obj: any): string;

// @public
export function getHashForString(string: string): string;

// @internal (undocumented)
export function getOwnProperty<K extends string, V>(obj: Partial<Record<K, V>>, key: K): undefined | V;

// @internal (undocumented)
export function getOwnProperty(obj: object, key: string): unknown;

// @internal (undocumented)
export function hasOwnProperty(obj: object, key: string): boolean;

// @public
export function isDefined<T>(value: T): value is typeof value extends undefined ? never : T;

// @public
export function isNonNull<T>(value: T): value is typeof value extends null ? never : T;

// @public
export function isNonNullish<T>(value: T): value is typeof value extends undefined ? never : typeof value extends null ? never : T;

// @public (undocumented)
export type JsonArray = JsonValue[];

// @public (undocumented)
export type JsonObject = {
    [key: string]: JsonValue | undefined;
};

// @public (undocumented)
export type JsonPrimitive = boolean | null | number | string;

// @public (undocumented)
export type JsonValue = JsonArray | JsonObject | JsonPrimitive;

// @internal (undocumented)
export function last<T>(arr: readonly T[]): T | undefined;

// @public
export function lerp(a: number, b: number, t: number): number;

// @public (undocumented)
export function lns(str: string): string;

// @internal
export function mapObjectMapValues<Key extends string, ValueBefore, ValueAfter>(object: {
    readonly [K in Key]: ValueBefore;
}, mapper: (key: Key, value: ValueBefore) => ValueAfter): {
    [K in Key]: ValueAfter;
};

// @public
export class MediaHelpers {
    static getImageSizeFromSrc(dataURL: string): Promise<{
        w: number;
        h: number;
    }>;
    static getVideoSizeFromSrc(src: string): Promise<{
        w: number;
        h: number;
    }>;
}

// @internal (undocumented)
export function minBy<T>(arr: readonly T[], fn: (item: T) => number): T | undefined;

// @public
export function modulate(value: number, rangeA: number[], rangeB: number[], clamp?: boolean): number;

// @internal
export function noop(): void;

// @internal
export function objectMapEntries<Key extends string, Value>(object: {
    [K in Key]: Value;
}): Array<[Key, Value]>;

// @internal
export function objectMapFromEntries<Key extends string, Value>(entries: ReadonlyArray<readonly [Key, Value]>): {
    [K in Key]: Value;
};

// @internal
export function objectMapKeys<Key extends string>(object: {
    readonly [K in Key]: unknown;
}): Array<Key>;

// @internal
export function objectMapValues<Key extends string, Value>(object: {
    [K in Key]: Value;
}): Array<Value>;

// @public (undocumented)
export type OkResult<T> = {
    readonly ok: true;
    readonly value: T;
};

// @internal
export function omitFromStackTrace<Args extends Array<unknown>, Return>(fn: (...args: Args) => Return): (...args: Args) => Return;

// @internal
export function partition<T>(arr: T[], predicate: (item: T) => boolean): [T[], T[]];

// @public (undocumented)
export class PngHelpers {
    // (undocumented)
    static findChunk(view: DataView, type: string): {
        dataOffset: number;
        size: number;
        start: number;
    };
    // (undocumented)
    static getChunkType(view: DataView, offset: number): string;
    // (undocumented)
    static isPng(view: DataView, offset: number): boolean;
    // (undocumented)
    static parsePhys(view: DataView, offset: number): {
        ppux: number;
        ppuy: number;
        unit: number;
    };
    // (undocumented)
    static readChunks(view: DataView, offset?: number): Record<string, {
        dataOffset: number;
        size: number;
        start: number;
    }>;
    // (undocumented)
    static setPhysChunk(view: DataView, dpr?: number, options?: BlobPropertyBag): Blob;
}

// @internal (undocumented)
export function promiseWithResolve<T>(): Promise<T> & {
    resolve: (value: T) => void;
    reject: (reason?: any) => void;
};

// @internal
export function rafThrottle(fn: () => void): () => void;

// @public (undocumented)
export type RecursivePartial<T> = {
    [P in keyof T]?: RecursivePartial<T[P]>;
};

// @internal (undocumented)
type Required_2<T, K extends keyof T> = Expand<Omit<T, K> & _Required<Pick<T, K>>>;
export { Required_2 as Required }

// @public (undocumented)
export type Result<T, E> = ErrorResult<E> | OkResult<T>;

// @public (undocumented)
export const Result: {
    ok<T>(value: T): OkResult<T>;
    err<E>(error: E): ErrorResult<E>;
};

// @public
export function rng(seed?: string): () => number;

// @public
export function rotateArray<T>(arr: T[], offset: number): T[];

// @public (undocumented)
export function sortById<T extends {
    id: any;
}>(a: T, b: T): -1 | 1;

// @public (undocumented)
const structuredClone_2: <T>(i: T) => T;
export { structuredClone_2 as structuredClone }

// @public
export function throttle<T extends (...args: any) => any>(func: T, limit: number): (...args: Parameters<T>) => ReturnType<T>;

// @internal
export function throttledRaf(fn: () => void): void;

// @internal (undocumented)
export function warnDeprecatedGetter(name: string): void;

// (No @packageDocumentation comment for this package)