t7m
Version:
Transformer for Elysia and Hono
44 lines (43 loc) • 1.94 kB
JavaScript
// 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
};