🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@eggjs/supertest

Package Overview
Dependencies
Maintainers
8
Versions
65
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@eggjs/supertest - npm Package Compare versions

Comparing version
9.0.0-beta.35
to
9.0.0-beta.36
+31
-26
dist/agent.d.ts

@@ -1,28 +0,33 @@

import type { Server } from 'node:net';
import { agent as Agent } from 'superagent';
import { Test } from './test.ts';
import type { AgentOptions, App } from './types.ts';
import { Test } from "./test.js";
import { AgentOptions as AgentOptions$1, App } from "./types.js";
import { agent } from "superagent";
import { Server } from "node:net";
//#region src/agent.d.ts
/**
* Initialize a new `TestAgent`.
*
* @param {Function|Server} app
* @param {Object} options
*/
export declare class TestAgent extends Agent {
#private;
app: Server | string;
_host: string;
constructor(appOrListener: App, options?: AgentOptions);
host(host: string): this;
protected _testRequest(method: string, url: string): Test;
delete(url: string): Test;
del(url: string): Test;
get(url: string): Test;
head(url: string): Test;
put(url: string): Test;
post(url: string): Test;
patch(url: string): Test;
options(url: string): Test;
trace(url: string): Test;
* Initialize a new `TestAgent`.
*
* @param {Function|Server} app
* @param {Object} options
*/
declare class TestAgent extends agent {
#private;
app: Server | string;
_host: string;
constructor(appOrListener: App, options?: AgentOptions$1);
host(host: string): this;
protected _testRequest(method: string, url: string): Test;
delete(url: string): Test;
del(url: string): Test;
get(url: string): Test;
head(url: string): Test;
put(url: string): Test;
post(url: string): Test;
patch(url: string): Test;
options(url: string): Test;
trace(url: string): Test;
}
export declare const proxyAgent: typeof TestAgent & ((app: App, options?: AgentOptions) => TestAgent);
declare const proxyAgent: typeof TestAgent & ((app: App, options?: AgentOptions$1) => TestAgent);
//#endregion
export { TestAgent, proxyAgent };

@@ -1,87 +0,74 @@

import http from 'node:http';
import http2 from 'node:http2';
import { agent as Agent } from 'superagent';
import { Test } from "./test.js";
import http from "node:http";
import http2 from "node:http2";
import { agent } from "superagent";
//#region src/agent.ts
/**
* Initialize a new `TestAgent`.
*
* @param {Function|Server} app
* @param {Object} options
*/
export class TestAgent extends Agent {
app;
_host;
#http2 = false;
constructor(appOrListener, options = {}) {
super(options);
if (typeof appOrListener === 'function') {
if (options.http2) {
this.#http2 = true;
this.app = http2.createServer(appOrListener); // eslint-disable-line no-param-reassign
}
else {
this.app = http.createServer(appOrListener); // eslint-disable-line no-param-reassign
}
}
else {
this.app = appOrListener;
}
}
// set a host name
host(host) {
this._host = host;
return this;
}
// TestAgent.prototype.del = TestAgent.prototype.delete;
_testRequest(method, url) {
const req = new Test(this.app, method.toUpperCase(), url);
if (this.#http2) {
req.http2();
}
if (this._host) {
req.set('host', this._host);
}
const that = this;
// access not internal methods
req.on('response', that._saveCookies.bind(this));
req.on('redirect', that._saveCookies.bind(this));
req.on('redirect', that._attachCookies.bind(this, req));
that._setDefaults(req);
that._attachCookies(req);
return req;
}
delete(url) {
return this._testRequest('delete', url);
}
del(url) {
return this._testRequest('delete', url);
}
get(url) {
return this._testRequest('get', url);
}
head(url) {
return this._testRequest('head', url);
}
put(url) {
return this._testRequest('put', url);
}
post(url) {
return this._testRequest('post', url);
}
patch(url) {
return this._testRequest('patch', url);
}
options(url) {
return this._testRequest('options', url);
}
trace(url) {
return this._testRequest('trace', url);
}
}
// allow keep use by `agent()`
export const proxyAgent = new Proxy(TestAgent, {
apply(target, _, argumentsList) {
return new target(argumentsList[0], argumentsList[1]);
},
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUcvQixPQUFPLEVBQUUsS0FBSyxJQUFJLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU1QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR2pDOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLFNBQVUsU0FBUSxLQUFLO0lBQ2xDLEdBQUcsQ0FBa0I7SUFDckIsS0FBSyxDQUFTO0lBQ2QsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUVmLFlBQVksYUFBa0IsRUFBRSxVQUF3QixFQUFFO1FBQ3hELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksT0FBTyxhQUFhLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDeEMsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBa0MsQ0FBQyxDQUFDLENBQUMsd0NBQXdDO1lBQzdHLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBa0MsQ0FBQyxDQUFDLENBQUMsd0NBQXdDO1lBQzVHLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksQ0FBQyxJQUFZO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsd0RBQXdE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
* Initialize a new `TestAgent`.
*
* @param {Function|Server} app
* @param {Object} options
*/
var TestAgent = class extends agent {
app;
_host;
#http2 = false;
constructor(appOrListener, options = {}) {
super(options);
if (typeof appOrListener === "function") if (options.http2) {
this.#http2 = true;
this.app = http2.createServer(appOrListener);
} else this.app = http.createServer(appOrListener);
else this.app = appOrListener;
}
host(host) {
this._host = host;
return this;
}
_testRequest(method, url) {
const req = new Test(this.app, method.toUpperCase(), url);
if (this.#http2) req.http2();
if (this._host) req.set("host", this._host);
const that = this;
req.on("response", that._saveCookies.bind(this));
req.on("redirect", that._saveCookies.bind(this));
req.on("redirect", that._attachCookies.bind(this, req));
that._setDefaults(req);
that._attachCookies(req);
return req;
}
delete(url) {
return this._testRequest("delete", url);
}
del(url) {
return this._testRequest("delete", url);
}
get(url) {
return this._testRequest("get", url);
}
head(url) {
return this._testRequest("head", url);
}
put(url) {
return this._testRequest("put", url);
}
post(url) {
return this._testRequest("post", url);
}
patch(url) {
return this._testRequest("patch", url);
}
options(url) {
return this._testRequest("options", url);
}
trace(url) {
return this._testRequest("trace", url);
}
};
const proxyAgent = new Proxy(TestAgent, { apply(target, _, argumentsList) {
return new target(argumentsList[0], argumentsList[1]);
} });
//#endregion
export { TestAgent, proxyAgent };

@@ -1,5 +0,8 @@

export declare class AssertError extends Error {
expected: any;
actual: any;
constructor(message: string, expected: any, actual: any, options?: ErrorOptions);
//#region src/error/AssertError.d.ts
declare class AssertError extends Error {
expected: any;
actual: any;
constructor(message: string, expected: any, actual: any, options?: ErrorOptions);
}
//#endregion
export { AssertError };

@@ -1,12 +0,15 @@

export class AssertError extends Error {
expected;
actual;
constructor(message, expected, actual, options) {
super(message, options);
this.name = this.constructor.name;
this.expected = expected;
this.actual = actual;
Error.captureStackTrace(this, this.constructor);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNzZXJ0RXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXJyb3IvQXNzZXJ0RXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFdBQVksU0FBUSxLQUFLO0lBQ3BDLFFBQVEsQ0FBTTtJQUNkLE1BQU0sQ0FBTTtJQUVaLFlBQVksT0FBZSxFQUFFLFFBQWEsRUFBRSxNQUFXLEVBQUUsT0FBc0I7UUFDN0UsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDRiJ9
//#region src/error/AssertError.ts
var AssertError = class extends Error {
expected;
actual;
constructor(message, expected, actual, options) {
super(message, options);
this.name = this.constructor.name;
this.expected = expected;
this.actual = actual;
Error.captureStackTrace(this, this.constructor);
}
};
//#endregion
export { AssertError };

@@ -1,14 +0,17 @@

import { TestAgent, proxyAgent } from './agent.ts';
import { Request, type RequestOptions } from './request.ts';
import type { App, AgentOptions } from './types.ts';
import { AssertFunction, CallbackFunction, ExpectHeader, ResponseError, Test, TestApplication } from "./test.js";
import { AgentOptions, App } from "./types.js";
import { TestAgent, proxyAgent } from "./agent.js";
import { Request, RequestOptions } from "./request.js";
//#region src/index.d.ts
/**
* Test against the given `app`,
* returning a new `Test`.
*/
export declare function request(app: App, options?: RequestOptions): Request;
export { Request, type RequestOptions, TestAgent, proxyAgent as agent, };
export * from './test.ts';
* Test against the given `app`,
* returning a new `Test`.
*/
declare function request(app: App, options?: RequestOptions): Request;
declare const _default: ((app: App, options?: RequestOptions) => Request) & {
agent: (app: App, options?: AgentOptions) => TestAgent;
agent: (app: App, options?: AgentOptions) => TestAgent;
};
export default _default;
//#endregion
export { AssertFunction, CallbackFunction, ExpectHeader, Request, type RequestOptions, ResponseError, Test, TestAgent, TestApplication, proxyAgent as agent, _default as default, request };

@@ -0,30 +1,24 @@

import { Test } from "./test.js";
import { TestAgent, proxyAgent } from "./agent.js";
import { Request } from "./request.js";
//#region src/index.ts
/**
* Test against the given `app`,
* returning a new `Test`.
*/
export function request(app, options = {}) {
return new Request(app, options);
* Test against the given `app`,
* returning a new `Test`.
*/
function request(app, options = {}) {
return new Request(app, options);
}
export { Request, TestAgent,
// import { agent } from '@eggjs/supertest';
// agent()
proxyAgent as agent, };
export * from "./test.js";
// import request from '@eggjs/supertest';
// request()
export default new Proxy(request, {
apply(target, _, argumentsList) {
return target(argumentsList[0], argumentsList[1]);
},
get(target, property, receiver) {
// import request from '@eggjs/supertest';
// request.agent()
if (property === 'agent') {
return proxyAgent;
}
return Reflect.get(target, property, receiver);
},
var src_default = new Proxy(request, {
apply(target, _, argumentsList) {
return target(argumentsList[0], argumentsList[1]);
},
get(target, property, receiver) {
if (property === "agent") return proxyAgent;
return Reflect.get(target, property, receiver);
}
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBdUIsTUFBTSxjQUFjLENBQUM7QUFHNUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFRLEVBQUUsVUFBMEIsRUFBRTtJQUM1RCxPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQsT0FBTyxFQUNMLE9BQU8sRUFFUCxTQUFTO0FBQ1QsNENBQTRDO0FBQzVDLFVBQVU7QUFDVixVQUFVLElBQUksS0FBSyxHQUNwQixDQUFDO0FBRUYsY0FBYyxXQUFXLENBQUM7QUFFMUIsMENBQTBDO0FBQzFDLFlBQVk7QUFDWixlQUFlLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtJQUNoQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxhQUFhO1FBQzVCLE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUTtRQUM1QiwwQ0FBMEM7UUFDMUMsa0JBQWtCO1FBQ2xCLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0YsQ0FFQSxDQUFDIn0=
//#endregion
export { Request, Test, TestAgent, proxyAgent as agent, src_default as default, request };

@@ -1,21 +0,25 @@

import type { Server } from 'node:net';
import { Test } from './test.ts';
import type { App } from './types.ts';
export interface RequestOptions {
http2?: boolean;
import { Test } from "./test.js";
import { App } from "./types.js";
import { Server } from "node:net";
//#region src/request.d.ts
interface RequestOptions {
http2?: boolean;
}
export declare class Request {
#private;
app: string | Server;
constructor(appOrListener: App, options?: RequestOptions);
protected _testRequest(method: string, url: string): Test;
delete(url: string): Test;
del(url: string): Test;
get(url: string): Test;
head(url: string): Test;
put(url: string): Test;
post(url: string): Test;
patch(url: string): Test;
options(url: string): Test;
trace(url: string): Test;
declare class Request {
#private;
app: string | Server;
constructor(appOrListener: App, options?: RequestOptions);
protected _testRequest(method: string, url: string): Test;
delete(url: string): Test;
del(url: string): Test;
get(url: string): Test;
head(url: string): Test;
put(url: string): Test;
post(url: string): Test;
patch(url: string): Test;
options(url: string): Test;
trace(url: string): Test;
}
//#endregion
export { Request, RequestOptions };

@@ -1,56 +0,51 @@

import http from 'node:http';
import http2 from 'node:http2';
import { Test } from "./test.js";
export class Request {
app;
#http2 = false;
constructor(appOrListener, options = {}) {
if (typeof appOrListener === 'function') {
if (options.http2) {
this.#http2 = true;
this.app = http2.createServer(appOrListener); // eslint-disable-line no-param-reassign
}
else {
this.app = http.createServer(appOrListener); // eslint-disable-line no-param-reassign
}
}
else {
this.app = appOrListener;
}
}
_testRequest(method, url) {
const req = new Test(this.app, method.toUpperCase(), url);
if (this.#http2) {
req.http2();
}
return req;
}
delete(url) {
return this._testRequest('delete', url);
}
del(url) {
return this._testRequest('delete', url);
}
get(url) {
return this._testRequest('get', url);
}
head(url) {
return this._testRequest('head', url);
}
put(url) {
return this._testRequest('put', url);
}
post(url) {
return this._testRequest('post', url);
}
patch(url) {
return this._testRequest('patch', url);
}
options(url) {
return this._testRequest('options', url);
}
trace(url) {
return this._testRequest('trace', url);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFHL0IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU9qQyxNQUFNLE9BQU8sT0FBTztJQUNsQixHQUFHLENBQWtCO0lBQ3JCLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFFZixZQUFZLGFBQWtCLEVBQUUsVUFBMEIsRUFBRTtRQUMxRCxJQUFJLE9BQU8sYUFBYSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3hDLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWtDLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztZQUM3RyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWtDLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztZQUM1RyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVTLFlBQVksQ0FBQyxNQUFjLEVBQUUsR0FBVztRQUNoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsR0FBRyxDQUFDLEdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxHQUFHLENBQUMsR0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELElBQUksQ0FBQyxHQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsR0FBRyxDQUFDLEdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxJQUFJLENBQUMsR0FBVztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELEtBQUssQ0FBQyxHQUFXO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQVc7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsS0FBSyxDQUFDLEdBQVc7UUFDZixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FDRiJ9
import http from "node:http";
import http2 from "node:http2";
//#region src/request.ts
var Request = class {
app;
#http2 = false;
constructor(appOrListener, options = {}) {
if (typeof appOrListener === "function") if (options.http2) {
this.#http2 = true;
this.app = http2.createServer(appOrListener);
} else this.app = http.createServer(appOrListener);
else this.app = appOrListener;
}
_testRequest(method, url) {
const req = new Test(this.app, method.toUpperCase(), url);
if (this.#http2) req.http2();
return req;
}
delete(url) {
return this._testRequest("delete", url);
}
del(url) {
return this._testRequest("delete", url);
}
get(url) {
return this._testRequest("get", url);
}
head(url) {
return this._testRequest("head", url);
}
put(url) {
return this._testRequest("put", url);
}
post(url) {
return this._testRequest("post", url);
}
patch(url) {
return this._testRequest("patch", url);
}
options(url) {
return this._testRequest("options", url);
}
trace(url) {
return this._testRequest("trace", url);
}
};
//#endregion
export { Request };

@@ -1,96 +0,100 @@

import type { Server } from 'node:net';
import { Request, type Response } from 'superagent';
import { AssertError } from './error/AssertError.ts';
export type TestApplication = Server | string;
export type AssertFunction = (res: Response) => AssertError | void;
export type CallbackFunction = (err: AssertError | Error | null, res: Response) => void;
export type ResponseError = Error & {
syscall?: string;
code?: string;
status?: number;
import { AssertError } from "./error/AssertError.js";
import { Request, Response } from "superagent";
import { Server } from "node:net";
//#region src/test.d.ts
type TestApplication = Server | string;
type AssertFunction = (res: Response) => AssertError | void;
type CallbackFunction = (err: AssertError | Error | null, res: Response) => void;
type ResponseError = Error & {
syscall?: string;
code?: string;
status?: number;
};
export interface ExpectHeader {
name: string;
value: string | number | RegExp;
interface ExpectHeader {
name: string;
value: string | number | RegExp;
}
export declare class Test extends Request {
app: TestApplication;
_server: Server;
_asserts: AssertFunction[];
/**
* Initialize a new `Test` with the given `app`,
* request `method` and `path`.
*/
constructor(app: TestApplication, method: string, path: string);
/**
* Returns a URL, extracted from a server.
*
* @return {String} URL address
* @private
*/
protected serverAddress(app: Server, path: string): string;
/**
* Expectations:
*
* ```js
* .expect(200)
* .expect(200, fn)
* .expect(200, body)
* .expect('Some body')
* .expect('Some body', fn)
* .expect(['json array body', { key: 'val' }])
* .expect('Content-Type', 'application/json')
* .expect('Content-Type', 'application/json', fn)
* .expect(fn)
* .expect([200, 404])
* ```
*
* @return {Test} The current Test instance for chaining.
*/
expect(a: number | string | RegExp | object | AssertFunction, b?: string | number | RegExp | CallbackFunction, c?: CallbackFunction): Test;
/**
* UnExpectations:
*
* .unexpectHeader('Content-Type')
* .unexpectHeader('Content-Type', fn)
*/
unexpectHeader(name: string, fn?: CallbackFunction): this;
/**
* Expectations:
*
* .expectHeader('Content-Type')
* .expectHeader('Content-Type', fn)
*/
expectHeader(name: string, fn?: CallbackFunction): this;
_unexpectHeader(name: string, res: Response): AssertError | void;
_expectHeader(name: string, res: Response): AssertError | void;
/**
* Defer invoking superagent's `.end()` until
* the server is listening.
*/
end(fn: CallbackFunction): this;
/**
* Perform assertions and invoke `fn(err, res)`.
*/
assert(resError: ResponseError | null, res: Response, fn: CallbackFunction): void;
/**
* Perform assertions on a response body and return an Error upon failure.
*/
_assertBody(body: RegExp | string | number | object | null | undefined, res: Response): AssertError | void;
/**
* Perform assertions on a response header and return an Error upon failure.
*/
_assertHeader(header: ExpectHeader, res: Response): AssertError | void;
/**
* Perform assertions on the response status and return an Error upon failure.
*/
_assertStatus(status: number, res: Response): AssertError | void;
/**
* Perform assertions on the response status and return an Error upon failure.
*/
_assertStatusArray(statusArray: number[], res: Response): AssertError | void;
/**
* Performs an assertion by calling a function and return an Error upon failure.
*/
_assertFunction(fn: AssertFunction, res: Response): Error | undefined;
declare class Test extends Request {
app: TestApplication;
_server: Server;
_asserts: AssertFunction[];
/**
* Initialize a new `Test` with the given `app`,
* request `method` and `path`.
*/
constructor(app: TestApplication, method: string, path: string);
/**
* Returns a URL, extracted from a server.
*
* @return {String} URL address
* @private
*/
protected serverAddress(app: Server, path: string): string;
/**
* Expectations:
*
* ```js
* .expect(200)
* .expect(200, fn)
* .expect(200, body)
* .expect('Some body')
* .expect('Some body', fn)
* .expect(['json array body', { key: 'val' }])
* .expect('Content-Type', 'application/json')
* .expect('Content-Type', 'application/json', fn)
* .expect(fn)
* .expect([200, 404])
* ```
*
* @return {Test} The current Test instance for chaining.
*/
expect(a: number | string | RegExp | object | AssertFunction, b?: string | number | RegExp | CallbackFunction, c?: CallbackFunction): Test;
/**
* UnExpectations:
*
* .unexpectHeader('Content-Type')
* .unexpectHeader('Content-Type', fn)
*/
unexpectHeader(name: string, fn?: CallbackFunction): this;
/**
* Expectations:
*
* .expectHeader('Content-Type')
* .expectHeader('Content-Type', fn)
*/
expectHeader(name: string, fn?: CallbackFunction): this;
_unexpectHeader(name: string, res: Response): AssertError | void;
_expectHeader(name: string, res: Response): AssertError | void;
/**
* Defer invoking superagent's `.end()` until
* the server is listening.
*/
end(fn: CallbackFunction): this;
/**
* Perform assertions and invoke `fn(err, res)`.
*/
assert(resError: ResponseError | null, res: Response, fn: CallbackFunction): void;
/**
* Perform assertions on a response body and return an Error upon failure.
*/
_assertBody(body: RegExp | string | number | object | null | undefined, res: Response): AssertError | void;
/**
* Perform assertions on a response header and return an Error upon failure.
*/
_assertHeader(header: ExpectHeader, res: Response): AssertError | void;
/**
* Perform assertions on the response status and return an Error upon failure.
*/
_assertStatus(status: number, res: Response): AssertError | void;
/**
* Perform assertions on the response status and return an Error upon failure.
*/
_assertStatusArray(statusArray: number[], res: Response): AssertError | void;
/**
* Performs an assertion by calling a function and return an Error upon failure.
*/
_assertFunction(fn: AssertFunction, res: Response): Error | undefined;
}
//#endregion
export { AssertFunction, CallbackFunction, ExpectHeader, ResponseError, Test, TestApplication };
+232
-311

@@ -1,315 +0,236 @@

import { deepStrictEqual } from 'node:assert';
import { STATUS_CODES } from 'node:http';
import { Server as HttpsServer } from 'node:tls';
import { inspect } from 'node:util';
import { Request } from 'superagent';
import { AssertError } from "./error/AssertError.js";
export class Test extends Request {
app;
_server;
_asserts = [];
/**
* Initialize a new `Test` with the given `app`,
* request `method` and `path`.
*/
constructor(app, method, path) {
super(method.toUpperCase(), path);
this.redirects(0);
this.buffer();
this.app = app;
this.url = typeof app === 'string' ? app + path : this.serverAddress(app, path);
}
/**
* Returns a URL, extracted from a server.
*
* @return {String} URL address
* @private
*/
serverAddress(app, path) {
const addr = app.address();
if (!addr) {
this._server = app.listen(0);
}
const port = app.address().port;
const protocol = app instanceof HttpsServer || this._server instanceof HttpsServer ? 'https' : 'http';
return `${protocol}://127.0.0.1:${port}${path}`;
}
/**
* Expectations:
*
* ```js
* .expect(200)
* .expect(200, fn)
* .expect(200, body)
* .expect('Some body')
* .expect('Some body', fn)
* .expect(['json array body', { key: 'val' }])
* .expect('Content-Type', 'application/json')
* .expect('Content-Type', 'application/json', fn)
* .expect(fn)
* .expect([200, 404])
* ```
*
* @return {Test} The current Test instance for chaining.
*/
expect(a, b, c) {
// callback
if (typeof a === 'function') {
// .expect(fn)
this._asserts.push(wrapAssertFn(a));
return this;
}
if (typeof b === 'function') {
// .expect('Some body', fn)
this.end(b);
}
if (typeof c === 'function') {
// .expect('Content-Type', 'application/json', fn)
this.end(c);
}
// status
if (typeof a === 'number') {
this._asserts.push(wrapAssertFn(this._assertStatus.bind(this, a)));
// body
if (typeof b !== 'function' && arguments.length > 1) {
// .expect(200, 'body')
// .expect(200, null)
// .expect(200, 9999999)
this._asserts.push(wrapAssertFn(this._assertBody.bind(this, b)));
}
return this;
}
// multiple statuses
if (Array.isArray(a) && a.length > 0 && a.every((val) => typeof val === 'number')) {
// .expect([200, 300])
this._asserts.push(wrapAssertFn(this._assertStatusArray.bind(this, a)));
return this;
}
// header field
if (typeof b === 'string' || typeof b === 'number' || b instanceof RegExp) {
// .expect('Content-Type', 'application/json')
// .expect('Content-Type', /json/)
this._asserts.push(wrapAssertFn(this._assertHeader.bind(this, { name: String(a), value: b })));
return this;
}
// body
// .expect('body')
// .expect(['json array body', { key: 'val' }])
// .expect(/foo/)
this._asserts.push(wrapAssertFn(this._assertBody.bind(this, a)));
return this;
}
/**
* UnExpectations:
*
* .unexpectHeader('Content-Type')
* .unexpectHeader('Content-Type', fn)
*/
unexpectHeader(name, fn) {
if (typeof fn === 'function') {
this.end(fn);
}
// header
if (typeof name === 'string') {
this._asserts.push(this._unexpectHeader.bind(this, name));
}
return this;
}
/**
* Expectations:
*
* .expectHeader('Content-Type')
* .expectHeader('Content-Type', fn)
*/
expectHeader(name, fn) {
if (typeof fn === 'function') {
this.end(fn);
}
// header
if (typeof name === 'string') {
this._asserts.push(this._expectHeader.bind(this, name));
}
return this;
}
_unexpectHeader(name, res) {
const actual = res.headers[name.toLowerCase()];
if (actual) {
return new AssertError('unexpected "' + name + '" header field, got "' + actual + '"', name, actual);
}
}
_expectHeader(name, res) {
const actual = res.headers[name.toLowerCase()];
if (!actual) {
return new AssertError('expected "' + name + '" header field', name, actual);
}
}
/**
* Defer invoking superagent's `.end()` until
* the server is listening.
*/
end(fn) {
const server = this._server;
super.end((err, res) => {
const localAssert = () => {
this.assert(err, res, fn);
};
if (server && '_handle' in server && server._handle) {
return server.close(localAssert);
}
localAssert();
});
return this;
}
/**
* Perform assertions and invoke `fn(err, res)`.
*/
assert(resError, res, fn) {
let errorObj;
// check for unexpected network errors or server not running/reachable errors
// when there is no response and superagent sends back a System Error
// do not check further for other asserts, if any, in such case
// https://nodejs.org/api/errors.html#errors_common_system_errors
const sysErrors = {
ECONNREFUSED: 'Connection refused',
ECONNRESET: 'Connection reset by peer',
EPIPE: 'Broken pipe',
ETIMEDOUT: 'Operation timed out',
};
if (!res && resError) {
if (resError instanceof Error && resError.syscall === 'connect' && resError.code && sysErrors[resError.code]) {
errorObj = new Error(resError.code + ': ' + sysErrors[resError.code]);
}
else {
errorObj = resError;
}
}
// asserts
for (let i = 0; i < this._asserts.length && !errorObj; i += 1) {
errorObj = this._assertFunction(this._asserts[i], res);
}
// set unexpected superagent error if no other error has occurred.
if (!errorObj && resError instanceof Error && (!res || resError.status !== res.status)) {
errorObj = resError;
}
if (!fn) {
console.warn('[@eggjs/supertest] no callback function provided, fn: %s', typeof fn);
return;
}
fn.call(this, errorObj || null, res);
}
/**
* Perform assertions on a response body and return an Error upon failure.
*/
_assertBody(body, res) {
const isRegexp = body instanceof RegExp;
// parsed
if (typeof body === 'object' && !isRegexp) {
try {
deepStrictEqual(body, res.body);
}
catch (err) {
const a = inspect(body);
const b = inspect(res.body);
return new AssertError('expected ' + a + ' response body, got ' + b, body, res.body, { cause: err });
}
}
else if (body !== res.text) {
// string
const a = inspect(body);
const b = inspect(res.text);
// regexp
if (isRegexp) {
if (!body.test(res.text)) {
return new AssertError('expected body ' + b + ' to match ' + body, body, res.body);
}
}
else {
return new AssertError('expected ' + a + ' response body, got ' + b, body, res.body);
}
}
}
/**
* Perform assertions on a response header and return an Error upon failure.
*/
_assertHeader(header, res) {
const field = header.name;
const actual = res.header[field.toLowerCase()];
const fieldExpected = header.value;
if (typeof actual === 'undefined') {
return new AssertError('expected "' + field + '" header field', header, actual);
}
// This check handles header values that may be a String or single element Array
if ((Array.isArray(actual) && actual.toString() === fieldExpected) || fieldExpected === actual) {
return;
}
if (fieldExpected instanceof RegExp) {
if (!fieldExpected.test(actual)) {
return new AssertError('expected "' + field + '" matching ' + fieldExpected + ', got "' + actual + '"', header, actual);
}
}
else {
return new AssertError('expected "' + field + '" of "' + fieldExpected + '", got "' + actual + '"', header, actual);
}
}
/**
* Perform assertions on the response status and return an Error upon failure.
*/
_assertStatus(status, res) {
if (res.status !== status) {
const a = STATUS_CODES[status];
const b = STATUS_CODES[res.status];
return new AssertError('expected ' + status + ' "' + a + '", got ' + res.status + ' "' + b + '"', status, res.status);
}
}
/**
* Perform assertions on the response status and return an Error upon failure.
*/
_assertStatusArray(statusArray, res) {
if (!statusArray.includes(res.status)) {
const b = STATUS_CODES[res.status];
const expectedList = statusArray.join(', ');
return new AssertError('expected one of "' + expectedList + '", got ' + res.status + ' "' + b + '"', statusArray, res.status);
}
}
/**
* Performs an assertion by calling a function and return an Error upon failure.
*/
_assertFunction(fn, res) {
let err;
try {
err = fn(res);
}
catch (e) {
err = e;
}
if (err instanceof Error) {
return err;
}
}
}
import { STATUS_CODES } from "node:http";
import { Request } from "superagent";
import { deepStrictEqual } from "node:assert";
import { Server } from "node:tls";
import { inspect } from "node:util";
//#region src/test.ts
var Test = class extends Request {
app;
_server;
_asserts = [];
/**
* Initialize a new `Test` with the given `app`,
* request `method` and `path`.
*/
constructor(app, method, path) {
super(method.toUpperCase(), path);
this.redirects(0);
this.buffer();
this.app = app;
this.url = typeof app === "string" ? app + path : this.serverAddress(app, path);
}
/**
* Returns a URL, extracted from a server.
*
* @return {String} URL address
* @private
*/
serverAddress(app, path) {
if (!app.address()) this._server = app.listen(0);
const port = app.address().port;
return `${app instanceof Server || this._server instanceof Server ? "https" : "http"}://127.0.0.1:${port}${path}`;
}
/**
* Expectations:
*
* ```js
* .expect(200)
* .expect(200, fn)
* .expect(200, body)
* .expect('Some body')
* .expect('Some body', fn)
* .expect(['json array body', { key: 'val' }])
* .expect('Content-Type', 'application/json')
* .expect('Content-Type', 'application/json', fn)
* .expect(fn)
* .expect([200, 404])
* ```
*
* @return {Test} The current Test instance for chaining.
*/
expect(a, b, c) {
if (typeof a === "function") {
this._asserts.push(wrapAssertFn(a));
return this;
}
if (typeof b === "function") this.end(b);
if (typeof c === "function") this.end(c);
if (typeof a === "number") {
this._asserts.push(wrapAssertFn(this._assertStatus.bind(this, a)));
if (typeof b !== "function" && arguments.length > 1) this._asserts.push(wrapAssertFn(this._assertBody.bind(this, b)));
return this;
}
if (Array.isArray(a) && a.length > 0 && a.every((val) => typeof val === "number")) {
this._asserts.push(wrapAssertFn(this._assertStatusArray.bind(this, a)));
return this;
}
if (typeof b === "string" || typeof b === "number" || b instanceof RegExp) {
this._asserts.push(wrapAssertFn(this._assertHeader.bind(this, {
name: String(a),
value: b
})));
return this;
}
this._asserts.push(wrapAssertFn(this._assertBody.bind(this, a)));
return this;
}
/**
* UnExpectations:
*
* .unexpectHeader('Content-Type')
* .unexpectHeader('Content-Type', fn)
*/
unexpectHeader(name, fn) {
if (typeof fn === "function") this.end(fn);
if (typeof name === "string") this._asserts.push(this._unexpectHeader.bind(this, name));
return this;
}
/**
* Expectations:
*
* .expectHeader('Content-Type')
* .expectHeader('Content-Type', fn)
*/
expectHeader(name, fn) {
if (typeof fn === "function") this.end(fn);
if (typeof name === "string") this._asserts.push(this._expectHeader.bind(this, name));
return this;
}
_unexpectHeader(name, res) {
const actual = res.headers[name.toLowerCase()];
if (actual) return new AssertError("unexpected \"" + name + "\" header field, got \"" + actual + "\"", name, actual);
}
_expectHeader(name, res) {
const actual = res.headers[name.toLowerCase()];
if (!actual) return new AssertError("expected \"" + name + "\" header field", name, actual);
}
/**
* Defer invoking superagent's `.end()` until
* the server is listening.
*/
end(fn) {
const server = this._server;
super.end((err, res) => {
const localAssert = () => {
this.assert(err, res, fn);
};
if (server && "_handle" in server && server._handle) return server.close(localAssert);
localAssert();
});
return this;
}
/**
* Perform assertions and invoke `fn(err, res)`.
*/
assert(resError, res, fn) {
let errorObj;
const sysErrors = {
ECONNREFUSED: "Connection refused",
ECONNRESET: "Connection reset by peer",
EPIPE: "Broken pipe",
ETIMEDOUT: "Operation timed out"
};
if (!res && resError) if (resError instanceof Error && resError.syscall === "connect" && resError.code && sysErrors[resError.code]) errorObj = /* @__PURE__ */ new Error(resError.code + ": " + sysErrors[resError.code]);
else errorObj = resError;
for (let i = 0; i < this._asserts.length && !errorObj; i += 1) errorObj = this._assertFunction(this._asserts[i], res);
if (!errorObj && resError instanceof Error && (!res || resError.status !== res.status)) errorObj = resError;
if (!fn) {
console.warn("[@eggjs/supertest] no callback function provided, fn: %s", typeof fn);
return;
}
fn.call(this, errorObj || null, res);
}
/**
* Perform assertions on a response body and return an Error upon failure.
*/
_assertBody(body, res) {
const isRegexp = body instanceof RegExp;
if (typeof body === "object" && !isRegexp) try {
deepStrictEqual(body, res.body);
} catch (err) {
const a = inspect(body);
const b = inspect(res.body);
return new AssertError("expected " + a + " response body, got " + b, body, res.body, { cause: err });
}
else if (body !== res.text) {
const a = inspect(body);
const b = inspect(res.text);
if (isRegexp) {
if (!body.test(res.text)) return new AssertError("expected body " + b + " to match " + body, body, res.body);
} else return new AssertError("expected " + a + " response body, got " + b, body, res.body);
}
}
/**
* Perform assertions on a response header and return an Error upon failure.
*/
_assertHeader(header, res) {
const field = header.name;
const actual = res.header[field.toLowerCase()];
const fieldExpected = header.value;
if (typeof actual === "undefined") return new AssertError("expected \"" + field + "\" header field", header, actual);
if (Array.isArray(actual) && actual.toString() === fieldExpected || fieldExpected === actual) return;
if (fieldExpected instanceof RegExp) {
if (!fieldExpected.test(actual)) return new AssertError("expected \"" + field + "\" matching " + fieldExpected + ", got \"" + actual + "\"", header, actual);
} else return new AssertError("expected \"" + field + "\" of \"" + fieldExpected + "\", got \"" + actual + "\"", header, actual);
}
/**
* Perform assertions on the response status and return an Error upon failure.
*/
_assertStatus(status, res) {
if (res.status !== status) {
const a = STATUS_CODES[status];
const b = STATUS_CODES[res.status];
return new AssertError("expected " + status + " \"" + a + "\", got " + res.status + " \"" + b + "\"", status, res.status);
}
}
/**
* Perform assertions on the response status and return an Error upon failure.
*/
_assertStatusArray(statusArray, res) {
if (!statusArray.includes(res.status)) {
const b = STATUS_CODES[res.status];
return new AssertError("expected one of \"" + statusArray.join(", ") + "\", got " + res.status + " \"" + b + "\"", statusArray, res.status);
}
}
/**
* Performs an assertion by calling a function and return an Error upon failure.
*/
_assertFunction(fn, res) {
let err;
try {
err = fn(res);
} catch (e) {
err = e;
}
if (err instanceof Error) return err;
}
};
/**
* Wraps an assert function into another.
* The wrapper function edit the stack trace of any assertion error, prepending a more useful stack to it.
*
* @param {Function} assertFn
* @return {Function} wrapped assert function
*/
* Wraps an assert function into another.
* The wrapper function edit the stack trace of any assertion error, prepending a more useful stack to it.
*
* @param {Function} assertFn
* @return {Function} wrapped assert function
*/
function wrapAssertFn(assertFn) {
const savedStack = new Error().stack.split('\n').slice(3);
return (res) => {
let badStack;
let err;
try {
err = assertFn(res);
}
catch (e) {
err = e;
}
if (err instanceof Error && err.stack) {
badStack = err.stack.replace(err.message, '').split('\n').slice(1);
err.stack = [err.toString()].concat(savedStack).concat('----').concat(badStack).join('\n');
}
return err;
};
const savedStack = (/* @__PURE__ */ new Error()).stack.split("\n").slice(3);
return (res) => {
let badStack;
let err;
try {
err = assertFn(res);
} catch (e) {
err = e;
}
if (err instanceof Error && err.stack) {
badStack = err.stack.replace(err.message, "").split("\n").slice(1);
err.stack = [err.toString()].concat(savedStack).concat("----").concat(badStack).join("\n");
}
return err;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxPQUFPLEVBQUUsTUFBTSxJQUFJLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFBRSxPQUFPLEVBQWlCLE1BQU0sWUFBWSxDQUFDO0FBRXBELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQWdCckQsTUFBTSxPQUFPLElBQUssU0FBUSxPQUFPO0lBQy9CLEdBQUcsQ0FBa0I7SUFDckIsT0FBTyxDQUFTO0lBQ2hCLFFBQVEsR0FBcUIsRUFBRSxDQUFDO0lBRWhDOzs7T0FHRztJQUNILFlBQVksR0FBb0IsRUFBRSxNQUFjLEVBQUUsSUFBWTtRQUM1RCxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sYUFBYSxDQUFDLEdBQVcsRUFBRSxJQUFZO1FBQy9DLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMz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
//#endregion
export { Test };

@@ -1,10 +0,14 @@

import type { RequestListener } from 'node:http';
import type { Http2ServerRequest, Http2ServerResponse } from 'node:http2';
import type { Server } from 'node:net';
import type { AgentOptions as SAgentOptions } from 'superagent';
export type H2RequestListener = (request: Http2ServerRequest, response: Http2ServerResponse) => void;
export type H1RequestListener = RequestListener;
export type App = Server | H1RequestListener | H2RequestListener | string;
export interface AgentOptions extends SAgentOptions {
http2?: boolean;
import { RequestListener } from "node:http";
import { Http2ServerRequest, Http2ServerResponse } from "node:http2";
import { AgentOptions } from "superagent";
import { Server } from "node:net";
//#region src/types.d.ts
type H2RequestListener = (request: Http2ServerRequest, response: Http2ServerResponse) => void;
type H1RequestListener = RequestListener;
type App = Server | H1RequestListener | H2RequestListener | string;
interface AgentOptions$1 extends AgentOptions {
http2?: boolean;
}
//#endregion
export { AgentOptions$1 as AgentOptions, App };
{
"name": "@eggjs/supertest",
"version": "9.0.0-beta.36",
"description": "SuperAgent driven library for testing HTTP servers",
"version": "9.0.0-beta.35",
"publishConfig": {
"access": "public"
},
"type": "module",
"exports": {
".": "./dist/index.js",
"./package.json": "./package.json"
},
"files": [
"dist"
],
"main": "./dist/index.js",
"module": "./dist/index.js",
"types": "./dist/index.d.ts",
"author": "TJ Holowaychuk",
"keywords": [

@@ -29,3 +14,5 @@ "bdd",

],
"homepage": "https://github.com/eggjs/egg/tree/next/packages/supertest",
"license": "MIT",
"author": "TJ Holowaychuk",
"repository": {

@@ -36,6 +23,16 @@ "type": "git",

},
"homepage": "https://github.com/eggjs/egg/tree/next/packages/supertest",
"engines": {
"node": ">=22.18.0"
"files": [
"dist"
],
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": {
".": "./dist/index.js",
"./package.json": "./package.json"
},
"publishConfig": {
"access": "public"
},
"dependencies": {

@@ -52,11 +49,10 @@ "@types/superagent": "^8.1.9",

"express": "^4.21.2",
"tsdown": "^0.17.0",
"typescript": "^5.9.3"
},
"engines": {
"node": ">=22.18.0"
},
"scripts": {
"build": "tsdown && rimraf dist *.tsbuildinfo && tsc -p tsconfig.build.json",
"test": "vitest run",
"typecheck": "tsc --noEmit",
"lint": "oxlint --type-aware"
"typecheck": "tsgo --noEmit"
}
}
export {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9