UNPKG

@serenity-js/web

Version:

Serenity/JS Screenplay Pattern library offering a flexible, web driver-agnostic approach for interacting with web-based user interfaces and components, suitable for various testing contexts

49 lines 2.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ArgumentDehydrator = void 0; const io_1 = require("@serenity-js/core/lib/io"); /** * @group Models */ class ArgumentDehydrator { shouldReference; transformation; constructor(shouldReference, transformation) { this.shouldReference = shouldReference; this.transformation = transformation; } async dehydrate(inputArgs) { const result = await this.dehydrateRecursively(inputArgs); return [ { argsCount: result.args.length, refsCount: result.refsCount }, ...result.args, ...result.refs ]; } async dehydrateRecursively(inputArgs, refsCount = 0) { return inputArgs.reduce(async (acc, arg) => { const { args, refs, refsCount } = await acc; if (Array.isArray(arg)) { const { args: nestedArgs, refs: nestedRefs, refsCount: currentRefsCount } = await this.dehydrateRecursively(arg, refsCount); return { args: [...args, nestedArgs,], refs: [...refs, ...nestedRefs], refsCount: currentRefsCount, }; } if (io_1.ValueInspector.isPlainObject(arg)) { const { args: nestedArgs, refs: nestedRefs, refsCount: currentRefsCount } = await this.dehydrateRecursively(Object.values(arg), refsCount); return { args: [...args, Object.fromEntries(Object.keys(arg).map((key, i) => [key, nestedArgs[i]]))], refs: [...refs, ...nestedRefs], refsCount: currentRefsCount, }; } return this.shouldReference(arg) ? { args: [...args, `$ref${refsCount}`], refs: [...refs, await this.transformation(arg)], refsCount: refsCount + 1 } : { args: [...args, arg], refs, refsCount }; }, Promise.resolve({ args: [], refs: [], refsCount })); } } exports.ArgumentDehydrator = ArgumentDehydrator; //# sourceMappingURL=ArgumentDehydrator.js.map