apiful
Version:
Extensible, typed API tooling
50 lines (47 loc) • 1.56 kB
JavaScript
export { O as OpenAPIBuilder, a as apiRouterBuilder, o as ofetchBuilder } from './shared/apiful.C9mCKm3O.mjs';
import 'ofetch';
import 'ufo';
import './shared/apiful.Ch57oCg6.mjs';
function createClient(defaultOptions = {}) {
const client = () => {
};
client.defaultOptions = defaultOptions;
client._extensions = /* @__PURE__ */ Object.create(null);
client.with = function(createExtension) {
const extension = createExtension(this);
if (typeof extension === "function") {
this._handler = extension;
} else {
for (const key in extension) {
if (Object.prototype.hasOwnProperty.call(extension, key)) {
this._extensions[key] = extension[key];
}
}
}
return new Proxy(this, {
get(target, prop, receiver) {
if (prop in target._extensions)
return target._extensions[prop];
if (prop in target)
return Reflect.get(target, prop, receiver);
return Reflect.get(extension, prop, receiver);
},
set(target, prop, value, receiver) {
if (prop in target._extensions) {
target._extensions[prop] = value;
return true;
}
if (prop in target)
return Reflect.set(target, prop, value, receiver);
return Reflect.set(extension, prop, value, receiver);
},
apply(target, thisArg, args) {
if (target._handler)
return target._handler(...args);
return Reflect.apply(target, thisArg, args);
}
});
};
return client;
}
export { createClient };