a815ba9f79
This PR adds support for [Middleware as per RFC ](https://github.com/vercel/next.js/discussions/29750). ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have helpful link attached, see `contributing.md` ## Documentation / Examples - [ ] Make sure the linting passes
80 lines
2.8 KiB
TypeScript
80 lines
2.8 KiB
TypeScript
/**
|
|
* The ArrayBuffer object is used to represent a generic, fixed-length raw
|
|
* binary data buffer. It is an array of bytes, often referred to in other
|
|
* languages as a "byte array". You cannot directly manipulate the contents of
|
|
* an ArrayBuffer; instead, you create one of the typed array objects or a
|
|
* DataView object which represents the buffer in a specific format, and use
|
|
* that to read and write the contents of the buffer.
|
|
*/
|
|
export function isArrayBuffer(value: any): value is ArrayBuffer {
|
|
return ArrayBuffer.prototype.isPrototypeOf(value)
|
|
}
|
|
|
|
/**
|
|
* ArrayBufferView is a helper type representing any of the following JS
|
|
* TypedArray types which correspond to the list below. It is checked by duck
|
|
* typing the provided object.
|
|
*/
|
|
export function isArrayBufferView(value: any): value is ArrayBufferView {
|
|
return ArrayBuffer.isView(value)
|
|
}
|
|
|
|
/**
|
|
* The DataView view provides a low-level interface for reading and writing
|
|
* multiple number types in a binary ArrayBuffer, without having to care about
|
|
* the platform's endianness.
|
|
*/
|
|
export function isDataView(value: any): value is DataView {
|
|
return DataView.prototype.isPrototypeOf(value)
|
|
}
|
|
|
|
/**
|
|
* The URLSearchParams interface defines utility methods to work with the
|
|
* query string of a URL.
|
|
*/
|
|
export function isURLSearchParams(value: any): value is URLSearchParams {
|
|
return URLSearchParams.prototype.isPrototypeOf(value)
|
|
}
|
|
|
|
/**
|
|
* The Blob object represents a blob, which is a file-like object of immutable,
|
|
* raw data; they can be read as text or binary data. Blobs can represent data
|
|
* that isn't necessarily in a JavaScript-native format.
|
|
*/
|
|
export function isBlob(value: any): value is Blob {
|
|
return Blob.prototype.isPrototypeOf(value)
|
|
}
|
|
|
|
/**
|
|
* The FormData interface provides a way to easily construct a set of key/value
|
|
* pairs representing form fields and their values, which can then be easily
|
|
* sent using the XMLHttpRequest.send() method. It uses the same format a
|
|
* form would use if the encoding type were set to "multipart/form-data".
|
|
*/
|
|
export function isFormData(value: any): value is FormData {
|
|
return FormData.prototype.isPrototypeOf(value)
|
|
}
|
|
|
|
/**
|
|
* The ReadableStream interface of the Streams API represents a readable stream
|
|
* of byte data. Because we want to allow alternative implementations we also
|
|
* duck type here.
|
|
*/
|
|
export function isReadableStream(value: any): value is ReadableStream {
|
|
return (
|
|
value &&
|
|
(ReadableStream.prototype.isPrototypeOf(value) ||
|
|
(value.constructor.name === 'ReadableStream' && 'getReader' in value))
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Checks in an object implements an Iterable interface
|
|
*/
|
|
export function isIterable(object: any): object is Iterable<unknown> {
|
|
return (
|
|
object &&
|
|
Symbol.iterator in object &&
|
|
typeof object[Symbol.iterator] === 'function'
|
|
)
|
|
}
|