UNPKG

grafast

Version:

Cutting edge GraphQL planning and execution engine

83 lines 2.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RemapKeysStep = void 0; exports.remapKeys = remapKeys; const tslib_1 = require("tslib"); const chalk_1 = tslib_1.__importDefault(require("chalk")); const step_ts_1 = require("../step.js"); const utils_ts_1 = require("../utils.js"); function makeMapper(actualKeyByDesiredKey, callback) { const entries = Object.entries(actualKeyByDesiredKey); // Fallback to slow conversion return callback((obj) => { if (obj == null) return obj; const result = Object.create(null); for (const [desiredKey, actualKey] of entries) { result[desiredKey] = obj[actualKey]; } return result; }); } /** * A plan that returns an object resulting from extracting the given * `actualKey` from the input and storing it as the `desiredKey` in the output. */ class RemapKeysStep extends step_ts_1.UnbatchedStep { static { this.$$export = { moduleName: "grafast", exportName: "RemapKeysStep", }; } constructor($plan, actualKeyByDesiredKey) { super(); this.isSyncAndSafe = true; this.allowMultipleOptimizations = true; this.actualKeyByDesiredKey = actualKeyByDesiredKey; this.addDependency($plan); this.peerKey = (0, utils_ts_1.digestKeys)([ ...Object.keys(this.actualKeyByDesiredKey), ...Object.values(this.actualKeyByDesiredKey), ]); } toStringMeta() { return (chalk_1.default.bold.yellow(String(this.dependencies[0].id)) + ":" + JSON.stringify(this.actualKeyByDesiredKey)); } optimize() { for (const [key, val] of Object.entries(this.actualKeyByDesiredKey)) { if (String(key) !== String(val)) { return this; } } // If we're not actually remapping, just return the parent return this.getDep(0); } finalize() { makeMapper(this.actualKeyByDesiredKey, (fn) => { this.mapper = fn; }); super.finalize(); } execute({ count, values: [values0], }) { return values0.isBatch ? values0.entries.map(this.mapper) : new Array(count).fill(this.mapper(values0.value)); } unbatchedExecute(_extra, value) { return this.mapper(value); } deduplicate(peers) { // Handled by peerKey return peers; } } exports.RemapKeysStep = RemapKeysStep; /** * A plan that returns an object resulting from extracting the given * `actualKey` from the input and storing it as the `desiredKey` in the output. */ function remapKeys($step, actualKeyByDesiredKey) { return new RemapKeysStep($step, actualKeyByDesiredKey); } //# sourceMappingURL=remapKeys.js.map