@zimic/http
Version:
Next-gen TypeScript-first HTTP utilities
415 lines (406 loc) • 14.5 kB
JavaScript
'use strict';
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
// ../zimic-utils/dist/chunk-2D3UJWOA.mjs
var __defProp2 = Object.defineProperty;
var __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, "name", { value, configurable: true }), "__name");
// ../zimic-utils/dist/chunk-GUOR4PHC.mjs
async function blobEquals(blob, otherBlob) {
if (blob.type !== otherBlob.type || blob.size !== otherBlob.size) {
return false;
}
const reader = blob.stream().getReader();
const otherReader = otherBlob.stream().getReader();
let buffer = new Uint8Array(0);
let otherBuffer = new Uint8Array(0);
try {
while (true) {
await Promise.all([
buffer.length === 0 && reader.read().then((result) => {
if (!result.done) {
buffer = result.value;
}
}),
otherBuffer.length === 0 && otherReader.read().then((result) => {
if (!result.done) {
otherBuffer = result.value;
}
})
]);
const streamsEndedTogether = buffer.length === 0 && otherBuffer.length === 0;
if (streamsEndedTogether) {
return true;
}
const oneStreamEndedBeforeTheOther = buffer.length === 0 && otherBuffer.length > 0 || buffer.length > 0 && otherBuffer.length === 0;
if (oneStreamEndedBeforeTheOther) {
return false;
}
const minimumByteLength = Math.min(buffer.length, otherBuffer.length);
for (let byteIndex = 0; byteIndex < minimumByteLength; byteIndex++) {
if (buffer[byteIndex] !== otherBuffer[byteIndex]) {
return false;
}
}
buffer = buffer.slice(minimumByteLength);
otherBuffer = otherBuffer.slice(minimumByteLength);
}
} finally {
reader.releaseLock();
otherReader.releaseLock();
}
}
__name(blobEquals, "blobEquals");
__name2(blobEquals, "blobEquals");
var blobEquals_default = blobEquals;
// ../zimic-utils/dist/data/fileEquals.mjs
async function fileEquals(file, otherFile) {
return file.name === otherFile.name && await blobEquals_default(file, otherFile);
}
__name(fileEquals, "fileEquals");
__name2(fileEquals, "fileEquals");
var fileEquals_default = fileEquals;
// src/formData/HttpFormData.ts
var HttpFormData = class extends FormData {
static {
__name(this, "HttpFormData");
}
_schema;
set(name, blobOrValue, fileName) {
if (fileName === void 0) {
super.set(name, blobOrValue);
} else {
super.set(name, blobOrValue, fileName);
}
}
append(name, blobOrValue, fileName) {
if (fileName === void 0) {
super.append(name, blobOrValue);
} else {
super.append(name, blobOrValue, fileName);
}
}
/** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdataget `formData.get()` API reference} */
get(name) {
return super.get(name);
}
/** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatagetall `formData.getAll()` API reference} */
getAll(name) {
return super.getAll(name);
}
/** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatahas `formData.has()` API reference} */
has(name) {
return super.has(name);
}
/** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatadelete `formData.delete()` API reference} */
delete(name) {
super.delete(name);
}
/** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdataforEach `formData.forEach()` API reference} */
forEach(callback, thisArg) {
super.forEach(callback, thisArg);
}
/** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatakeys `formData.keys()` API reference} */
keys() {
return super.keys();
}
/** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatavalues `formData.values()` API reference} */
values() {
return super.values();
}
/** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdataentries `formData.entries()` API reference} */
entries() {
return super.entries();
}
[Symbol.iterator]() {
return super[Symbol.iterator]();
}
/** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdataequals `formData.equals()` API reference} */
async equals(otherData) {
if (!await this.contains(otherData)) {
return false;
}
for (const key of this.keys()) {
const otherHasKey = super.has.call(otherData, key);
if (!otherHasKey) {
return false;
}
}
return true;
}
/** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatacontains `formData.contains()` API reference} */
async contains(otherData) {
for (const [otherKey, otherValue] of otherData.entries()) {
const values = super.getAll.call(this, otherKey);
const haveSameNumberOfValues = values.length === super.getAll.call(otherData, otherKey).length;
if (!haveSameNumberOfValues) {
return false;
}
let valueExists = false;
for (const value of values) {
if (value === otherValue || value instanceof Blob && otherValue instanceof Blob && await fileEquals_default(value, otherValue)) {
valueExists = true;
break;
}
}
if (!valueExists) {
return false;
}
}
return true;
}
/** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatatoobject `formData.toObject()` API reference} */
toObject() {
const object = {};
for (const [key, value] of this.entries()) {
if (key in object) {
const existingValue = object[key];
if (Array.isArray(existingValue)) {
existingValue.push(value);
} else {
object[key] = [existingValue, value];
}
} else {
object[key] = value;
}
}
return object;
}
};
var HttpFormData_default = HttpFormData;
// src/headers/HttpHeaders.ts
function pickPrimitiveProperties(schema) {
return Object.entries(schema).reduce((accumulated, [key, value]) => {
if (value !== void 0) {
accumulated[key] = String(value);
}
return accumulated;
}, {});
}
__name(pickPrimitiveProperties, "pickPrimitiveProperties");
var HttpHeaders = class extends Headers {
static {
__name(this, "HttpHeaders");
}
_schema;
constructor(init) {
if (init instanceof Headers || Array.isArray(init) || !init) {
super(init);
} else {
super(pickPrimitiveProperties(init));
}
}
/** @see {@link https://zimic.dev/docs/http/api/http-headers#headersset `headers.set()` API reference} */
set(name, value) {
super.set(name, value);
}
/** @see {@link https://zimic.dev/docs/http/api/http-headers#headersappend `headers.append()` API reference} */
append(name, value) {
super.append(name, value);
}
/** @see {@link https://zimic.dev/docs/http/api/http-headers#headersget `headers.get()` API reference} */
get(name) {
return super.get(name);
}
/** @see {@link https://zimic.dev/docs/http/api/http-headers#headersgetSetCookie `headers.getSetCookie()` API reference} */
getSetCookie() {
return super.getSetCookie();
}
/** @see {@link https://zimic.dev/docs/http/api/http-headers#headershas `headers.has()` API reference} */
has(name) {
return super.has(name);
}
/** @see {@link https://zimic.dev/docs/http/api/http-headers#headersdelete `headers.delete()` API reference} */
delete(name) {
super.delete(name);
}
/** @see {@link https://zimic.dev/docs/http/api/http-headers#headersforEach `headers.forEach()` API reference} */
forEach(callback, thisArg) {
super.forEach(callback, thisArg);
}
/** @see {@link https://zimic.dev/docs/http/api/http-headers#headerskeys `headers.keys()` API reference} */
keys() {
return super.keys();
}
/** @see {@link https://zimic.dev/docs/http/api/http-headers#headersvalues `headers.values()` API reference} */
values() {
return super.values();
}
/** @see {@link https://zimic.dev/docs/http/api/http-headers#headersentries `headers.entries()` API reference} */
entries() {
return super.entries();
}
[Symbol.iterator]() {
return super[Symbol.iterator]();
}
/** @see {@link https://zimic.dev/docs/http/api/http-headers#headersequals `headers.equals()` API reference} */
equals(otherHeaders) {
if (!this.contains(otherHeaders)) {
return false;
}
for (const key of this.keys()) {
const otherHasKey = super.has.call(otherHeaders, key);
if (!otherHasKey) {
return false;
}
}
return true;
}
/** @see {@link https://zimic.dev/docs/http/api/http-headers#headerscontains `headers.contains()` API reference} */
contains(otherHeaders) {
for (const [key, otherValue] of otherHeaders.entries()) {
const value = super.get.call(this, key);
if (value === null) {
return false;
}
const valueItems = this.splitHeaderValues(value);
const otherValueItems = this.splitHeaderValues(otherValue);
const haveSameNumberOfValues = valueItems.length === otherValueItems.length;
if (!haveSameNumberOfValues) {
return false;
}
for (const otherValueItem of otherValueItems) {
if (!valueItems.includes(otherValueItem)) {
return false;
}
}
}
return true;
}
/** @see {@link https://zimic.dev/docs/http/api/http-headers#headerstoobject `headers.toObject()` API reference} */
toObject() {
const object = {};
for (const [key, value] of this.entries()) {
object[key] = value;
}
return object;
}
splitHeaderValues(value) {
return value.split(",").map((item) => item.trim()).filter((item) => item.length > 0);
}
};
var HttpHeaders_default = HttpHeaders;
// src/searchParams/HttpSearchParams.ts
function pickPrimitiveProperties2(schema) {
const schemaWithPrimitiveProperties = Object.entries(schema).reduce(
(accumulated, [key, value]) => {
if (value !== void 0 && !Array.isArray(value)) {
accumulated[key] = String(value);
}
return accumulated;
},
{}
);
return schemaWithPrimitiveProperties;
}
__name(pickPrimitiveProperties2, "pickPrimitiveProperties");
var HttpSearchParams = class extends URLSearchParams {
static {
__name(this, "HttpSearchParams");
}
_schema;
constructor(init) {
if (init instanceof URLSearchParams || Array.isArray(init) || typeof init === "string" || !init) {
super(init);
} else {
super(pickPrimitiveProperties2(init));
this.populateInitArrayProperties(init);
}
}
populateInitArrayProperties(init) {
for (const [key, value] of Object.entries(init)) {
if (Array.isArray(value)) {
for (const item of value) {
super.append(key, String(item));
}
}
}
}
/** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsset `searchParams.set()` API reference} */
set(name, value) {
super.set(name, value);
}
/** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsappend `searchParams.append()` API reference} */
append(name, value) {
super.append(name, value);
}
/** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsget `searchParams.get()` API reference} */
get(name) {
return super.get(name);
}
/** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsgetall `searchParams.getAll()` API reference} */
getAll(name) {
return super.getAll(name);
}
/** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamshas `searchParams.has()` API reference} */
has(name, value) {
return super.has(name, value);
}
/** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsdelete `searchParams.delete()` API reference} */
delete(name, value) {
super.delete(name, value);
}
/** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsforEach `searchParams.forEach()` API reference} */
forEach(callback, thisArg) {
super.forEach(callback, thisArg);
}
/** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamskeys `searchParams.keys()` API reference} */
keys() {
return super.keys();
}
/** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsvalues `searchParams.values()` API reference} */
values() {
return super.values();
}
/** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsentries `searchParams.entries()` API reference} */
entries() {
return super.entries();
}
[Symbol.iterator]() {
return super[Symbol.iterator]();
}
/** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsequals `searchParams.equals()` API reference} */
equals(otherParams) {
return this.contains(otherParams) && this.size === otherParams.size;
}
/** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamscontains `searchParams.contains()` API reference} */
contains(otherParams) {
for (const [key, otherValue] of otherParams.entries()) {
const values = super.getAll.call(this, key);
const haveSameNumberOfValues = values.length === super.getAll.call(otherParams, key).length;
if (!haveSameNumberOfValues) {
return false;
}
const valueExists = values.includes(otherValue);
if (!valueExists) {
return false;
}
}
return true;
}
/** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamstoobject `searchParams.toObject()` API reference} */
toObject() {
const object = {};
for (const [key, value] of this.entries()) {
if (key in object) {
const existingValue = object[key];
if (Array.isArray(existingValue)) {
existingValue.push(value);
} else {
object[key] = [existingValue, value];
}
} else {
object[key] = value;
}
}
return object;
}
};
var HttpSearchParams_default = HttpSearchParams;
// src/types/schema.ts
var HTTP_METHODS = Object.freeze(["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]);
exports.HTTP_METHODS = HTTP_METHODS;
exports.HttpFormData = HttpFormData_default;
exports.HttpHeaders = HttpHeaders_default;
exports.HttpSearchParams = HttpSearchParams_default;
//# sourceMappingURL=index.js.map
//# sourceMappingURL=index.js.map