Skip to content

Commit 7a057c2

Browse files
fix(unspents): defer static initializations for ESM compatibility
Fix circular reference issues in Dimensions class by moving static property initializations outside the class definition. This ensures compatibility with tsx and Node.js 22, which enforce stricter ESM module loading rules than ts-node with older Node versions. TICKET: WP-5599 TICKET: WP-5599
1 parent 2eb61af commit 7a057c2

File tree

2 files changed

+55
-26
lines changed

2 files changed

+55
-26
lines changed

modules/unspents/src/dimensions.ts

Lines changed: 54 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { compactSize } from './scriptSizes';
77
import { PositiveInteger } from './types';
88

99
import { VirtualSizes } from './virtualSizes';
10-
export { VirtualSizes };
1110

1211
/**
1312
* Apply `f` to all properties of `d`
@@ -144,15 +143,14 @@ export class Dimensions {
144143
return Dimensions.sum({ outputs: { count: 1, size } });
145144
}
146145

147-
static readonly SingleOutput = Object.freeze({
148-
p2sh: Dimensions.singleOutput(VirtualSizes.txP2shOutputSize),
149-
p2shP2wsh: Dimensions.singleOutput(VirtualSizes.txP2shP2wshOutputSize),
150-
p2wsh: Dimensions.singleOutput(VirtualSizes.txP2wshOutputSize),
151-
p2tr: Dimensions.singleOutput(VirtualSizes.txP2trOutputSize),
152-
153-
p2pkh: Dimensions.singleOutput(VirtualSizes.txP2pkhOutputSize),
154-
p2wpkh: Dimensions.singleOutput(VirtualSizes.txP2wpkhOutputSize),
155-
});
146+
static SingleOutput: {
147+
p2sh: Dimensions;
148+
p2shP2wsh: Dimensions;
149+
p2wsh: Dimensions;
150+
p2tr: Dimensions;
151+
p2pkh: Dimensions;
152+
p2wpkh: Dimensions;
153+
};
156154

157155
/**
158156
* @return Number of total inputs (p2sh + p2shP2wsh + p2wsh + p2tr)
@@ -218,15 +216,15 @@ export class Dimensions {
218216
return scriptLength + compactSize(scriptLength) + VirtualSizes.txOutputAmountSize;
219217
}
220218

221-
static readonly SingleInput = Object.freeze({
222-
p2sh: Dimensions.sum({ nP2shInputs: 1 }),
223-
p2shP2wsh: Dimensions.sum({ nP2shP2wshInputs: 1 }),
224-
p2wsh: Dimensions.sum({ nP2wshInputs: 1 }),
225-
p2trKeypath: Dimensions.sum({ nP2trKeypathInputs: 1 }),
226-
p2trScriptPathLevel1: Dimensions.sum({ nP2trScriptPathLevel1Inputs: 1 }),
227-
p2trScriptPathLevel2: Dimensions.sum({ nP2trScriptPathLevel2Inputs: 1 }),
228-
p2shP2pk: Dimensions.sum({ nP2shP2pkInputs: 1 }),
229-
});
219+
static SingleInput: {
220+
p2sh: Dimensions;
221+
p2shP2wsh: Dimensions;
222+
p2wsh: Dimensions;
223+
p2trKeypath: Dimensions;
224+
p2trScriptPathLevel1: Dimensions;
225+
p2trScriptPathLevel2: Dimensions;
226+
p2shP2pk: Dimensions;
227+
};
230228

231229
/**
232230
* @return
@@ -269,13 +267,13 @@ export class Dimensions {
269267
}
270268
}
271269

272-
static readonly ASSUME_P2SH = Dimensions.SingleInput.p2sh;
273-
static readonly ASSUME_P2SH_P2WSH = Dimensions.SingleInput.p2shP2wsh;
274-
static readonly ASSUME_P2WSH = Dimensions.SingleInput.p2wsh;
275-
static readonly ASSUME_P2TR_KEYPATH = Dimensions.SingleInput.p2trKeypath;
276-
static readonly ASSUME_P2TR_SCRIPTPATH_LEVEL1 = Dimensions.SingleInput.p2trScriptPathLevel1;
277-
static readonly ASSUME_P2TR_SCRIPTPATH_LEVEL2 = Dimensions.SingleInput.p2trScriptPathLevel2;
278-
static readonly ASSUME_P2SH_P2PK_INPUT = Dimensions.SingleInput.p2shP2pk;
270+
static ASSUME_P2SH: Dimensions;
271+
static ASSUME_P2SH_P2WSH: Dimensions;
272+
static ASSUME_P2WSH: Dimensions;
273+
static ASSUME_P2TR_KEYPATH: Dimensions;
274+
static ASSUME_P2TR_SCRIPTPATH_LEVEL1: Dimensions;
275+
static ASSUME_P2TR_SCRIPTPATH_LEVEL2: Dimensions;
276+
static ASSUME_P2SH_P2PK_INPUT: Dimensions;
279277

280278
private static getAssumedDimension(params: FromInputParams = {}, index: number) {
281279
const { assumeUnsigned } = params;
@@ -588,3 +586,33 @@ export class Dimensions {
588586
return this.getOverheadVSize() + this.getInputsVSize() + this.getOutputsVSize();
589587
}
590588
}
589+
590+
// Initialize static properties that require the class to be fully defined first
591+
Dimensions.SingleOutput = Object.freeze({
592+
p2sh: Dimensions.singleOutput(VirtualSizes.txP2shOutputSize),
593+
p2shP2wsh: Dimensions.singleOutput(VirtualSizes.txP2shP2wshOutputSize),
594+
p2wsh: Dimensions.singleOutput(VirtualSizes.txP2wshOutputSize),
595+
p2tr: Dimensions.singleOutput(VirtualSizes.txP2trOutputSize),
596+
p2pkh: Dimensions.singleOutput(VirtualSizes.txP2pkhOutputSize),
597+
p2wpkh: Dimensions.singleOutput(VirtualSizes.txP2wpkhOutputSize),
598+
});
599+
600+
// Initialize SingleInput after the class is fully defined
601+
Dimensions.SingleInput = Object.freeze({
602+
p2sh: Dimensions.sum({ nP2shInputs: 1 }),
603+
p2shP2wsh: Dimensions.sum({ nP2shP2wshInputs: 1 }),
604+
p2wsh: Dimensions.sum({ nP2wshInputs: 1 }),
605+
p2trKeypath: Dimensions.sum({ nP2trKeypathInputs: 1 }),
606+
p2trScriptPathLevel1: Dimensions.sum({ nP2trScriptPathLevel1Inputs: 1 }),
607+
p2trScriptPathLevel2: Dimensions.sum({ nP2trScriptPathLevel2Inputs: 1 }),
608+
p2shP2pk: Dimensions.sum({ nP2shP2pkInputs: 1 }),
609+
});
610+
611+
// Initialize the ASSUME_ constants
612+
Dimensions.ASSUME_P2SH = Dimensions.SingleInput.p2sh;
613+
Dimensions.ASSUME_P2SH_P2WSH = Dimensions.SingleInput.p2shP2wsh;
614+
Dimensions.ASSUME_P2WSH = Dimensions.SingleInput.p2wsh;
615+
Dimensions.ASSUME_P2TR_KEYPATH = Dimensions.SingleInput.p2trKeypath;
616+
Dimensions.ASSUME_P2TR_SCRIPTPATH_LEVEL1 = Dimensions.SingleInput.p2trScriptPathLevel1;
617+
Dimensions.ASSUME_P2TR_SCRIPTPATH_LEVEL2 = Dimensions.SingleInput.p2trScriptPathLevel2;
618+
Dimensions.ASSUME_P2SH_P2PK_INPUT = Dimensions.SingleInput.p2shP2pk;

modules/unspents/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ export {
77
};
88

99
export * from './dimensions';
10+
export { VirtualSizes } from './virtualSizes';

0 commit comments

Comments
 (0)