grafast
Version:
Cutting edge GraphQL planning and execution engine
83 lines • 2.82 kB
JavaScript
;
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