UNPKG

@kubb/core

Version:

Core functionality for Kubb's plugin-based code generation system, providing the foundation for transforming OpenAPI specifications.

235 lines (226 loc) • 7.49 kB
const require_chunk = require('./chunk-C1_xRkKa.cjs'); const require_getBarrelFiles = require('./getBarrelFiles-BI0KYIQA.cjs'); const require_transformers = require('./transformers-Bwrz5_qV.cjs'); let node_path = require("node:path"); node_path = require_chunk.__toESM(node_path); let natural_orderby = require("natural-orderby"); let node_url = require("node:url"); let node_fs = require("node:fs"); let jiti = require("jiti"); jiti = require_chunk.__toESM(jiti); //#region src/utils/buildJSDoc.ts /** * Builds a JSDoc comment block with custom indentation. * @param comments - Array of comment strings to include in the JSDoc block * @param options - Configuration options for formatting * @returns Formatted JSDoc string or fallback string if no comments */ function buildJSDoc(comments, options = {}) { const { indent = " * ", suffix = "\n ", fallback = " " } = options; if (comments.length === 0) return fallback; return `/**\n${comments.map((c) => `${indent}${c}`).join("\n")}\n */${suffix}`; } //#endregion //#region src/utils/Cache.ts var Cache = class { #buffer = /* @__PURE__ */ new Map(); async get(key) { return this.#buffer.get(key) ?? null; } async set(key, value) { this.#buffer.set(key, value); } async delete(key) { this.#buffer.delete(key); } async clear() { this.#buffer.clear(); } async keys() { return [...this.#buffer.keys()]; } async values() { return [...this.#buffer.values()]; } async flush() {} }; //#endregion //#region src/utils/FunctionParams.ts /** * @deprecated */ var FunctionParams = class FunctionParams { #items = []; constructor() { return this; } get items() { return this.#items.flat(); } add(item) { if (!item) return this; if (Array.isArray(item)) { item.filter(Boolean).forEach((it) => { this.#items.push(it); }); return this; } this.#items.push(item); return this; } static #orderItems(items) { return (0, natural_orderby.orderBy)(items.filter(Boolean), [(v) => { if (Array.isArray(v)) return; return !v.default; }, (v) => { if (Array.isArray(v)) return; return v.required ?? true; }], ["desc", "desc"]); } static #addParams(acc, item) { const { enabled = true, name, type, required = true, ...rest } = item; if (!enabled) return acc; if (!name) { acc.push(`${type}${rest.default ? ` = ${rest.default}` : ""}`); return acc; } const parameterName = name.startsWith("{") ? name : require_transformers.camelCase(name); if (type) if (required) acc.push(`${parameterName}: ${type}${rest.default ? ` = ${rest.default}` : ""}`); else acc.push(`${parameterName}?: ${type}`); else acc.push(`${parameterName}`); return acc; } static toObject(items) { let type = []; let name = []; const enabled = items.every((item) => item.enabled) ? items.at(0)?.enabled : true; const required = items.every((item) => item.required) ?? true; items.forEach((item) => { name = FunctionParams.#addParams(name, { ...item, type: void 0 }); if (items.some((item$1) => item$1.type)) type = FunctionParams.#addParams(type, item); }); return { name: `{ ${name.join(", ")} }`, type: type.length ? `{ ${type.join("; ")} }` : void 0, enabled, required }; } toObject() { const items = FunctionParams.#orderItems(this.#items).flat(); return FunctionParams.toObject(items); } static toString(items) { return FunctionParams.#orderItems(items).reduce((acc, item) => { if (Array.isArray(item)) { if (item.length <= 0) return acc; const subItems = FunctionParams.#orderItems(item); const objectItem = FunctionParams.toObject(subItems); return FunctionParams.#addParams(acc, objectItem); } return FunctionParams.#addParams(acc, item); }, []).join(", "); } toString() { const items = FunctionParams.#orderItems(this.#items); return FunctionParams.toString(items); } }; //#endregion //#region src/utils/getNestedAccessor.ts /** * Converts a param path (string with dot notation or array of strings) to a JavaScript accessor expression. * @param param - The param path, e.g., 'pagination.next.id' or ['pagination', 'next', 'id'] * @param accessor - The base accessor, e.g., 'lastPage' or 'firstPage' * @returns A JavaScript accessor expression, e.g., "lastPage?.['pagination']?.['next']?.['id']", or undefined if param is empty * * @example * ```ts * getNestedAccessor('pagination.next.id', 'lastPage') * // returns: "lastPage?.['pagination']?.['next']?.['id']" * * getNestedAccessor(['pagination', 'next', 'id'], 'lastPage') * // returns: "lastPage?.['pagination']?.['next']?.['id']" * * getNestedAccessor('', 'lastPage') * // returns: undefined * ``` */ function getNestedAccessor(param, accessor) { const parts = Array.isArray(param) ? param : param.split("."); if (parts.length === 0 || parts.length === 1 && parts[0] === "") return; return parts.reduce((acc, part) => `${acc}?.['${part}']`, accessor); } //#endregion //#region src/utils/promise.ts function isPromise(result) { return !!result && typeof result?.then === "function"; } function isPromiseFulfilledResult(result) { return result.status === "fulfilled"; } function isPromiseRejectedResult(result) { return result.status === "rejected"; } //#endregion //#region src/utils/renderTemplate.ts function renderTemplate(template, data = void 0) { if (!data || !Object.keys(data).length) return template.replace(/{{(.*?)}}/g, ""); return template.match(/{{(.*?)}}/g)?.reduce((prev, curr) => { const index = curr.split(/{{|}}/).filter(Boolean)[0]?.trim(); if (index === void 0) return prev; const value = data[index]; if (value === void 0) return prev; return prev.replace(curr, () => { if (typeof value === "boolean") return `${value.toString()}` || "false"; return value || ""; }).trim(); }, template) || ""; } //#endregion //#region src/utils/resolveModuleSource.ts function resolveModuleSource(pkgName) { const parentURL = require("url").pathToFileURL(__filename).href; const resolved = (0, jiti.default)(parentURL).esmResolve(pkgName, parentURL); const filePath = resolved.startsWith("file:") ? (0, node_url.fileURLToPath)(resolved) : resolved; return { path: filePath, source: (0, node_fs.readFileSync)(filePath, { encoding: "utf-8" }), ext: node_path.default.extname(filePath) }; } //#endregion //#region src/utils/timeout.ts async function timeout(ms) { return new Promise((resolve) => { const timeout$1 = setTimeout(() => { resolve(timeout$1); }, ms); }).then((timeout$1) => { clearTimeout(timeout$1); return true; }); } //#endregion exports.AsyncEventEmitter = require_getBarrelFiles.AsyncEventEmitter; exports.Cache = Cache; exports.FunctionParams = FunctionParams; exports.URLPath = require_getBarrelFiles.URLPath; exports.buildJSDoc = buildJSDoc; exports.formatHrtime = require_getBarrelFiles.formatHrtime; exports.formatMs = require_getBarrelFiles.formatMs; exports.getBarrelFiles = require_getBarrelFiles.getBarrelFiles; exports.getElapsedMs = require_getBarrelFiles.getElapsedMs; exports.getNestedAccessor = getNestedAccessor; exports.getUniqueName = require_getBarrelFiles.getUniqueName; exports.isPromise = isPromise; exports.isPromiseFulfilledResult = isPromiseFulfilledResult; exports.isPromiseRejectedResult = isPromiseRejectedResult; exports.renderTemplate = renderTemplate; exports.resolveModuleSource = resolveModuleSource; exports.setUniqueName = require_getBarrelFiles.setUniqueName; exports.timeout = timeout; //# sourceMappingURL=utils.cjs.map