UNPKG

@radixdlt/atom-transaction-mapping

Version:
49 lines 2.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeSimpleTransitioner = exports.makeTransitioner = void 0; const atom_1 = require("@radixdlt/atom"); const primitives_1 = require("@radixdlt/primitives"); const neverthrow_1 = require("neverthrow"); /* eslint-disable functional/immutable-data, functional/no-let, functional/no-loop-statement, prefer-const, max-lines-per-function */ const makeTransitioner = (input) => { const inputAmountMapper = input.inputAmountMapper; const inputCreator = input.inputCreator; const outputCreator = input.outputCreator; return { // eslint-disable-next-line complexity transition: (input) => { let spunParticles = []; let amountLeftToTransfer = input.totalAmountToTransfer; for (const currentParticle of input.currentParticles) { spunParticles.push(atom_1.spunDownParticle(currentParticle)); const particleAmount = inputAmountMapper(currentParticle); if (particleAmount.greaterThan(amountLeftToTransfer)) { const sendBackToSelf = particleAmount .subtracting(amountLeftToTransfer) .unwrapOr(primitives_1.zero); const migratedResult = inputCreator(sendBackToSelf, currentParticle); if (migratedResult.isErr()) return neverthrow_1.err(new Error('Failed to migrate particle')); spunParticles.push(atom_1.spunUpParticle(migratedResult.value)); } if (particleAmount.greaterThanOrEquals(amountLeftToTransfer)) { const outputResult = outputCreator(input.totalAmountToTransfer, currentParticle); if (outputResult.isErr()) return neverthrow_1.err(new Error('Failed to create output particle')); spunParticles.push(atom_1.spunUpParticle(outputResult.value)); return neverthrow_1.ok(spunParticles); } amountLeftToTransfer = amountLeftToTransfer .subtracting(particleAmount) .unwrapOr(primitives_1.zero); } return neverthrow_1.err(new Error('Insufficient balance.')); }, }; }; exports.makeTransitioner = makeTransitioner; const makeSimpleTransitioner = (input) => { return exports.makeTransitioner(Object.assign(Object.assign({}, input), { inputCreator: (amount, _) => neverthrow_1.ok(input.inputCreator(amount)), outputCreator: (amount, _) => neverthrow_1.ok(input.outputCreator(amount)) })); }; exports.makeSimpleTransitioner = makeSimpleTransitioner; //# sourceMappingURL=fungibleParticleTransitioner.js.map