Aktueller Stand
This commit is contained in:
174
backend/node_modules/hono/dist/client/client.js
generated
vendored
Normal file
174
backend/node_modules/hono/dist/client/client.js
generated
vendored
Normal file
@@ -0,0 +1,174 @@
|
||||
// src/client/client.ts
|
||||
import { serialize } from "../utils/cookie.js";
|
||||
import {
|
||||
buildSearchParams,
|
||||
deepMerge,
|
||||
mergePath,
|
||||
removeIndexString,
|
||||
replaceUrlParam,
|
||||
replaceUrlProtocol
|
||||
} from "./utils.js";
|
||||
var createProxy = (callback, path) => {
|
||||
const proxy = new Proxy(() => {
|
||||
}, {
|
||||
get(_obj, key) {
|
||||
if (typeof key !== "string" || key === "then") {
|
||||
return void 0;
|
||||
}
|
||||
return createProxy(callback, [...path, key]);
|
||||
},
|
||||
apply(_1, _2, args) {
|
||||
return callback({
|
||||
path,
|
||||
args
|
||||
});
|
||||
}
|
||||
});
|
||||
return proxy;
|
||||
};
|
||||
var ClientRequestImpl = class {
|
||||
url;
|
||||
method;
|
||||
buildSearchParams;
|
||||
queryParams = void 0;
|
||||
pathParams = {};
|
||||
rBody;
|
||||
cType = void 0;
|
||||
constructor(url, method, options) {
|
||||
this.url = url;
|
||||
this.method = method;
|
||||
this.buildSearchParams = options.buildSearchParams;
|
||||
}
|
||||
fetch = async (args, opt) => {
|
||||
if (args) {
|
||||
if (args.query) {
|
||||
this.queryParams = this.buildSearchParams(args.query);
|
||||
}
|
||||
if (args.form) {
|
||||
const form = new FormData();
|
||||
for (const [k, v] of Object.entries(args.form)) {
|
||||
if (Array.isArray(v)) {
|
||||
for (const v2 of v) {
|
||||
form.append(k, v2);
|
||||
}
|
||||
} else {
|
||||
form.append(k, v);
|
||||
}
|
||||
}
|
||||
this.rBody = form;
|
||||
}
|
||||
if (args.json) {
|
||||
this.rBody = JSON.stringify(args.json);
|
||||
this.cType = "application/json";
|
||||
}
|
||||
if (args.param) {
|
||||
this.pathParams = args.param;
|
||||
}
|
||||
}
|
||||
let methodUpperCase = this.method.toUpperCase();
|
||||
const headerValues = {
|
||||
...args?.header,
|
||||
...typeof opt?.headers === "function" ? await opt.headers() : opt?.headers
|
||||
};
|
||||
if (args?.cookie) {
|
||||
const cookies = [];
|
||||
for (const [key, value] of Object.entries(args.cookie)) {
|
||||
cookies.push(serialize(key, value, { path: "/" }));
|
||||
}
|
||||
headerValues["Cookie"] = cookies.join(",");
|
||||
}
|
||||
if (this.cType) {
|
||||
headerValues["Content-Type"] = this.cType;
|
||||
}
|
||||
const headers = new Headers(headerValues ?? void 0);
|
||||
let url = this.url;
|
||||
url = removeIndexString(url);
|
||||
url = replaceUrlParam(url, this.pathParams);
|
||||
if (this.queryParams) {
|
||||
url = url + "?" + this.queryParams.toString();
|
||||
}
|
||||
methodUpperCase = this.method.toUpperCase();
|
||||
const setBody = !(methodUpperCase === "GET" || methodUpperCase === "HEAD");
|
||||
return (opt?.fetch || fetch)(url, {
|
||||
body: setBody ? this.rBody : void 0,
|
||||
method: methodUpperCase,
|
||||
headers,
|
||||
...opt?.init
|
||||
});
|
||||
};
|
||||
};
|
||||
var hc = (baseUrl, options) => createProxy(function proxyCallback(opts) {
|
||||
const buildSearchParamsOption = options?.buildSearchParams ?? buildSearchParams;
|
||||
const parts = [...opts.path];
|
||||
const lastParts = parts.slice(-3).reverse();
|
||||
if (lastParts[0] === "toString") {
|
||||
if (lastParts[1] === "name") {
|
||||
return lastParts[2] || "";
|
||||
}
|
||||
return proxyCallback.toString();
|
||||
}
|
||||
if (lastParts[0] === "valueOf") {
|
||||
if (lastParts[1] === "name") {
|
||||
return lastParts[2] || "";
|
||||
}
|
||||
return proxyCallback;
|
||||
}
|
||||
let method = "";
|
||||
if (/^\$/.test(lastParts[0])) {
|
||||
const last = parts.pop();
|
||||
if (last) {
|
||||
method = last.replace(/^\$/, "");
|
||||
}
|
||||
}
|
||||
const path = parts.join("/");
|
||||
const url = mergePath(baseUrl, path);
|
||||
if (method === "url") {
|
||||
let result = url;
|
||||
if (opts.args[0]) {
|
||||
if (opts.args[0].param) {
|
||||
result = replaceUrlParam(url, opts.args[0].param);
|
||||
}
|
||||
if (opts.args[0].query) {
|
||||
result = result + "?" + buildSearchParamsOption(opts.args[0].query).toString();
|
||||
}
|
||||
}
|
||||
result = removeIndexString(result);
|
||||
return new URL(result);
|
||||
}
|
||||
if (method === "ws") {
|
||||
const webSocketUrl = replaceUrlProtocol(
|
||||
opts.args[0] && opts.args[0].param ? replaceUrlParam(url, opts.args[0].param) : url,
|
||||
"ws"
|
||||
);
|
||||
const targetUrl = new URL(webSocketUrl);
|
||||
const queryParams = opts.args[0]?.query;
|
||||
if (queryParams) {
|
||||
Object.entries(queryParams).forEach(([key, value]) => {
|
||||
if (Array.isArray(value)) {
|
||||
value.forEach((item) => targetUrl.searchParams.append(key, item));
|
||||
} else {
|
||||
targetUrl.searchParams.set(key, value);
|
||||
}
|
||||
});
|
||||
}
|
||||
const establishWebSocket = (...args) => {
|
||||
if (options?.webSocket !== void 0 && typeof options.webSocket === "function") {
|
||||
return options.webSocket(...args);
|
||||
}
|
||||
return new WebSocket(...args);
|
||||
};
|
||||
return establishWebSocket(targetUrl.toString());
|
||||
}
|
||||
const req = new ClientRequestImpl(url, method, {
|
||||
buildSearchParams: buildSearchParamsOption
|
||||
});
|
||||
if (method) {
|
||||
options ??= {};
|
||||
const args = deepMerge(options, { ...opts.args[1] });
|
||||
return req.fetch(opts.args[0], args);
|
||||
}
|
||||
return req;
|
||||
}, []);
|
||||
export {
|
||||
hc
|
||||
};
|
||||
62
backend/node_modules/hono/dist/client/fetch-result-please.js
generated
vendored
Normal file
62
backend/node_modules/hono/dist/client/fetch-result-please.js
generated
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
// src/client/fetch-result-please.ts
|
||||
var nullBodyResponses = /* @__PURE__ */ new Set([101, 204, 205, 304]);
|
||||
async function fetchRP(fetchRes) {
|
||||
const _fetchRes = await fetchRes;
|
||||
const hasBody = (_fetchRes.body || _fetchRes._bodyInit) && !nullBodyResponses.has(_fetchRes.status);
|
||||
if (hasBody) {
|
||||
const responseType = detectResponseType(_fetchRes);
|
||||
_fetchRes._data = await _fetchRes[responseType]();
|
||||
}
|
||||
if (!_fetchRes.ok) {
|
||||
throw new DetailedError(`${_fetchRes.status} ${_fetchRes.statusText}`, {
|
||||
statusCode: _fetchRes?.status,
|
||||
detail: {
|
||||
data: _fetchRes?._data,
|
||||
statusText: _fetchRes?.statusText
|
||||
}
|
||||
});
|
||||
}
|
||||
return _fetchRes._data;
|
||||
}
|
||||
var DetailedError = class extends Error {
|
||||
/**
|
||||
* Additional `message` that will be logged AND returned to client
|
||||
*/
|
||||
detail;
|
||||
/**
|
||||
* Additional `code` that will be logged AND returned to client
|
||||
*/
|
||||
code;
|
||||
/**
|
||||
* Additional value that will be logged AND NOT returned to client
|
||||
*/
|
||||
log;
|
||||
/**
|
||||
* Optionally set the status code to return, in a web server context
|
||||
*/
|
||||
statusCode;
|
||||
constructor(message, options = {}) {
|
||||
super(message);
|
||||
this.name = "DetailedError";
|
||||
this.log = options.log;
|
||||
this.detail = options.detail;
|
||||
this.code = options.code;
|
||||
this.statusCode = options.statusCode;
|
||||
}
|
||||
};
|
||||
var jsonRegex = /^application\/(?:[\w!#$%&*.^`~-]*\+)?json(?:;.+)?$/i;
|
||||
function detectResponseType(response) {
|
||||
const _contentType = response.headers.get("content-type");
|
||||
if (!_contentType) {
|
||||
return "text";
|
||||
}
|
||||
const contentType = _contentType.split(";").shift();
|
||||
if (jsonRegex.test(contentType)) {
|
||||
return "json";
|
||||
}
|
||||
return "text";
|
||||
}
|
||||
export {
|
||||
DetailedError,
|
||||
fetchRP
|
||||
};
|
||||
8
backend/node_modules/hono/dist/client/index.js
generated
vendored
Normal file
8
backend/node_modules/hono/dist/client/index.js
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
// src/client/index.ts
|
||||
import { hc } from "./client.js";
|
||||
import { parseResponse, DetailedError } from "./utils.js";
|
||||
export {
|
||||
DetailedError,
|
||||
hc,
|
||||
parseResponse
|
||||
};
|
||||
0
backend/node_modules/hono/dist/client/types.js
generated
vendored
Normal file
0
backend/node_modules/hono/dist/client/types.js
generated
vendored
Normal file
76
backend/node_modules/hono/dist/client/utils.js
generated
vendored
Normal file
76
backend/node_modules/hono/dist/client/utils.js
generated
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
// src/client/utils.ts
|
||||
import { fetchRP, DetailedError } from "./fetch-result-please.js";
|
||||
var mergePath = (base, path) => {
|
||||
base = base.replace(/\/+$/, "");
|
||||
base = base + "/";
|
||||
path = path.replace(/^\/+/, "");
|
||||
return base + path;
|
||||
};
|
||||
var replaceUrlParam = (urlString, params) => {
|
||||
for (const [k, v] of Object.entries(params)) {
|
||||
const reg = new RegExp("/:" + k + "(?:{[^/]+})?\\??");
|
||||
urlString = urlString.replace(reg, v ? `/${v}` : "");
|
||||
}
|
||||
return urlString;
|
||||
};
|
||||
var buildSearchParams = (query) => {
|
||||
const searchParams = new URLSearchParams();
|
||||
for (const [k, v] of Object.entries(query)) {
|
||||
if (v === void 0) {
|
||||
continue;
|
||||
}
|
||||
if (Array.isArray(v)) {
|
||||
for (const v2 of v) {
|
||||
searchParams.append(k, v2);
|
||||
}
|
||||
} else {
|
||||
searchParams.set(k, v);
|
||||
}
|
||||
}
|
||||
return searchParams;
|
||||
};
|
||||
var replaceUrlProtocol = (urlString, protocol) => {
|
||||
switch (protocol) {
|
||||
case "ws":
|
||||
return urlString.replace(/^http/, "ws");
|
||||
case "http":
|
||||
return urlString.replace(/^ws/, "http");
|
||||
}
|
||||
};
|
||||
var removeIndexString = (urlString) => {
|
||||
if (/^https?:\/\/[^\/]+?\/index(?=\?|$)/.test(urlString)) {
|
||||
return urlString.replace(/\/index(?=\?|$)/, "/");
|
||||
}
|
||||
return urlString.replace(/\/index(?=\?|$)/, "");
|
||||
};
|
||||
function isObject(item) {
|
||||
return typeof item === "object" && item !== null && !Array.isArray(item);
|
||||
}
|
||||
function deepMerge(target, source) {
|
||||
if (!isObject(target) && !isObject(source)) {
|
||||
return source;
|
||||
}
|
||||
const merged = { ...target };
|
||||
for (const key in source) {
|
||||
const value = source[key];
|
||||
if (isObject(merged[key]) && isObject(value)) {
|
||||
merged[key] = deepMerge(merged[key], value);
|
||||
} else {
|
||||
merged[key] = value;
|
||||
}
|
||||
}
|
||||
return merged;
|
||||
}
|
||||
async function parseResponse(fetchRes) {
|
||||
return fetchRP(fetchRes);
|
||||
}
|
||||
export {
|
||||
DetailedError,
|
||||
buildSearchParams,
|
||||
deepMerge,
|
||||
mergePath,
|
||||
parseResponse,
|
||||
removeIndexString,
|
||||
replaceUrlParam,
|
||||
replaceUrlProtocol
|
||||
};
|
||||
Reference in New Issue
Block a user