import {expectAssignable, expectNotAssignable} from 'tsd'; import type {StructuredCloneable} from '..'; /* Source: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm # Supported types ## JavaScript types - Array - ArrayBuffer - Boolean - DataView - Date - Error types (but see Error types below). - Map - Number - Object: but only plain objects (e.g. from object literals). - Primitive types, except symbol. - RegExp: but note that lastIndex is not preserved. - Set - String - TypedArray ## Error types For Error types, the error name must be one of: Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError (or will be set to "Error"). ## Web/API types - Blob - File ## DOM exclusive types (not included) - AudioData - CropTarget - CryptoKey - DOMException: browsers must serialize the properties name and message. Other attributes may also be serialized/cloned. - DOMMatrix - DOMMatrixReadOnly - DOMPoint - DOMPointReadOnly - DOMQuad - DOMRect - DOMRectReadOnly - FileList - FileSystemDirectoryHandle - FileSystemFileHandle - FileSystemHandle - GPUCompilationInfo - GPUCompilationMessage - ImageBitmap - ImageData - RTCCertificate - VideoFrame */ // Date, Boolean, Number, String expectAssignable(new Date()); declare const booleanWrapperObject: Boolean; expectAssignable(booleanWrapperObject); declare const numberWrapperObject: Number; expectAssignable(numberWrapperObject); declare const stringWrapperObject: String; expectAssignable(stringWrapperObject); // Primitive types, except symbol. expectAssignable(undefined); expectAssignable(null); expectAssignable(true); expectAssignable(1); expectAssignable(1n); expectAssignable(''); declare const symbolValue: symbol; expectNotAssignable(symbolValue); // RegExp: but note that lastIndex is not preserved. expectAssignable(/foo/); // ArrayBuffer, DataView expectAssignable(new ArrayBuffer(10)); expectAssignable(new DataView(new ArrayBuffer(10))); // TypedArray expectAssignable(new Int8Array(10)); expectAssignable(new Uint8Array(10)); expectAssignable(new Uint8ClampedArray(10)); expectAssignable(new Int16Array(10)); expectAssignable(new Uint16Array(10)); expectAssignable(new Int32Array(10)); expectAssignable(new Uint32Array(10)); expectAssignable(new Float32Array(10)); expectAssignable(new Float64Array(10)); expectAssignable(new BigInt64Array(10)); expectAssignable(new BigUint64Array(10)); // Error types declare const error: Error; expectAssignable(error); declare const evalError: EvalError; expectAssignable(evalError); declare const rangeError: RangeError; expectAssignable(rangeError); declare const referenceError: ReferenceError; expectAssignable(referenceError); declare const syntaxError: SyntaxError; expectAssignable(syntaxError); declare const typeError: TypeError; expectAssignable(typeError); declare const uriError: URIError; expectAssignable(uriError); // Object: but only plain objects (e.g. from object literals). expectAssignable({}); expectAssignable({x: 10}); expectAssignable({x: {y: 10}}); expectAssignable({x: 10} as const); class CustomType {} expectNotAssignable(new CustomType()); class CustomTypeWithProperties { foo = 'wow'; bar = 1; } expectNotAssignable(new CustomTypeWithProperties()); // Array expectAssignable([]); expectAssignable([1, 2, 3]); expectAssignable([1, 2, 3] as const); expectAssignable([[1, 2], [3, 4]]); expectAssignable([{x: 1}, {x: 2}]); // Map expectAssignable(new Map()); expectAssignable(new Map()); expectAssignable(new Map>()); // Set expectAssignable(new Set()); expectAssignable(new Set()); expectAssignable(new Set>()); // Web/API types // @ts-ignore Requires dom or @types/node@>=20 declare const blob: Blob; expectAssignable(blob); // @ts-ignore Requires dom or @types/node@>=20 declare const file: File; // eslint-disable-line n/no-unsupported-features/node-builtins expectAssignable(file);