cloudflare
Version:
The official TypeScript library for the Cloudflare API
62 lines • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createClient = createClient;
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
const client_1 = require("./client.js");
const resource_1 = require("./core/resource.js");
const values_1 = require("./internal/utils/values.js");
/**
* Creates a client with a subset of the available resources to reduce
* bundle size.
* Import the resource classes you need from `cloudflare/resources/*`.
* Use the BaseResource variants if you do not need to use subresources.
*
* @example
* ```ts
* import { Accounts } from `cloudflare/resources/accounts`;
* import { createClient } from `cloudflare/tree-shakable`;
*
* const client = createClient({
* resources: [Accounts],
* });
* ```
*/
function createClient(options) {
const client = new client_1.BaseCloudflare(options);
for (const ResourceClass of options.resources) {
const resourceInstance = new ResourceClass(client);
let object = client;
for (const part of ResourceClass._key.slice(0, -1)) {
if ((0, values_1.hasOwn)(object, part)) {
object = object[part];
}
else {
Object.defineProperty(object, part, {
value: (object = {}),
configurable: true,
enumerable: true,
writable: true,
});
}
}
const name = ResourceClass._key.at(-1);
if (!(0, values_1.hasOwn)(object, name)) {
Object.defineProperty(object, name, {
value: resourceInstance,
configurable: true,
enumerable: true,
writable: true,
});
}
else {
if (object[name] instanceof resource_1.APIResource) {
throw new TypeError(`Resource at ${ResourceClass._key.join('.')} already exists!`);
}
else {
object[name] = Object.assign(resourceInstance, object[name]);
}
}
}
return client;
}
//# sourceMappingURL=tree-shakable.js.map