phecda-server
Version:
server framework that provide IOC/type-reuse/http&rpc-adaptor
73 lines (71 loc) • 2.37 kB
JavaScript
import {
Factory
} from "./chunk-ZHNYWZRL.mjs";
import {
__name
} from "./chunk-URKOYTBU.mjs";
// src/test.ts
import { getTag } from "phecda-core";
async function TestFactory(...Modules) {
const { moduleMap, modelMap } = await Factory(Modules);
return {
get(Model) {
const tag = getTag(Model);
const module = moduleMap.get(tag);
if (!module) throw new Error(`module "${String(tag)}" doesn't exist`);
if (modelMap.get(module) !== Model) throw new Error(`module "${Model.name}" and "${String(tag)}" in modulemap are different modules`);
return module;
}
};
}
__name(TestFactory, "TestFactory");
async function TestHttp(app, { moduleMap, meta }, isAgent = true) {
const { default: request, agent } = await import("supertest");
const Agent = agent(app);
function module(Module) {
const tag = getTag(Module);
const module2 = moduleMap.get(tag);
if (!module2) throw new Error(`module "${String(tag)}" doesn't exist`);
return new Proxy({}, {
get(_target, p) {
const { data } = meta.find(({ data: data2 }) => data2.name === Module.name && data2.method === p && data2.tag === tag);
return (...args) => {
const ret = {
body: {},
headers: {},
query: {},
method: data.http.method,
url: data.http.prefix + data.http.route
};
data.params.forEach((item) => {
if (item.type === "params") {
ret.url = ret.url.replace(`:${item.key}`, args[item.index]);
return;
}
if (item.type === "query") {
ret.query[item.key] = args[item.index];
return;
}
if (item.key) ret[item.type][item.key] = args[item.index];
else ret[item.type] = args[item.index];
});
let agent2 = (isAgent ? Agent : request(app))[ret.method](ret.url);
if (Object.keys(ret.query).length > 0) agent2 = agent2.query(ret.query);
if (Object.keys(ret.headers).length > 0) agent2 = agent2.set(ret.headers);
if (Object.keys(ret.body).length > 0) agent2 = agent2.send(ret.body);
return agent2;
};
}
});
}
__name(module, "module");
return {
module,
agent
};
}
__name(TestHttp, "TestHttp");
export {
TestFactory,
TestHttp
};