UNPKG

t7m

Version:

Transformer for Elysia and Hono

44 lines (43 loc) 1.94 kB
// src/abstractTransformer.ts class AbstractTransformer { includesMap = Object.create(null); async transform(params) { const { input, props, includes, unsafeIncludes } = params; const combinedIncludes = [...includes || [], ...unsafeIncludes || []]; return this.__transform(input, props, combinedIncludes); } async transformMany(params) { const { inputs, props, includes, unsafeIncludes } = params; const combinedIncludes = [...includes || [], ...unsafeIncludes || []]; return Promise.all(inputs.map((input) => this.__transform(input, props, combinedIncludes))); } async _transform(params) { const { input, props, includes, unsafeIncludes } = params; const combinedIncludes = [...includes || [], ...unsafeIncludes || []]; return this.__transform(input, props, combinedIncludes); } async _transformMany(params) { const { inputs, props, includes, unsafeIncludes } = params; const combinedIncludes = [...includes || [], ...unsafeIncludes || []]; return Promise.all(inputs.map((input) => this.__transform(input, props, combinedIncludes))); } async __transform(input, props, includes = []) { const data = await this.data(input, props); includes = Array.from(new Set(includes)); if (includes.length > 0 && typeof data === "object" && data !== null) { const otherIncludes = includes.filter((include) => !(include in this.includesMap)); const validIncludes = includes.filter((include) => (include in this.includesMap)).map((include) => include); await Promise.all(validIncludes.map(async (include) => { try { data[include] = await this.includesMap[include](input, props, otherIncludes); } catch (error) { throw new Error(`Error in include function '${String(include)}': ${error instanceof Error ? error.message : String(error)}`); } })); } return data; } } export { AbstractTransformer };