44 lines
1.5 KiB
JavaScript
44 lines
1.5 KiB
JavaScript
/**
|
|
* Behebt "Right-hand side of 'instanceof' is not callable" bei json-bigint.
|
|
* Beim Vite-Build liefert require('bignumber.js') bei ESM-Alias das Modul-Objekt
|
|
* { default: BigNumber }; json-bigint nutzt aber "value instanceof BigNumber".
|
|
* Wir setzen BigNumber auf den echten Konstruktor (default-Export), falls vorhanden.
|
|
*/
|
|
const DEFAULT_EXTRACT =
|
|
"\nif (typeof BigNumber === 'object' && BigNumber && typeof BigNumber.default === 'function') BigNumber = BigNumber.default;";
|
|
|
|
export function jsonBigintBigNumberFix() {
|
|
return {
|
|
name: "json-bigint-bignumber-fix",
|
|
enforce: "pre",
|
|
transform(src, id) {
|
|
const idNorm = id.replace(/\\/g, "/");
|
|
if (!idNorm.includes("json-bigint")) return null;
|
|
const isStringify = idNorm.includes("stringify.js");
|
|
const isParse = idNorm.includes("parse.js");
|
|
if (!isStringify && !isParse) return null;
|
|
|
|
if (isStringify) {
|
|
const firstLine = "var BigNumber = require('bignumber.js');";
|
|
if (!src.includes(firstLine)) return null;
|
|
return {
|
|
code: src.replace(firstLine, firstLine + DEFAULT_EXTRACT),
|
|
map: null,
|
|
};
|
|
}
|
|
|
|
if (isParse) {
|
|
const requireLine =
|
|
"if (BigNumber == null) BigNumber = require('bignumber.js');";
|
|
if (!src.includes(requireLine)) return null;
|
|
return {
|
|
code: src.replace(requireLine, requireLine + DEFAULT_EXTRACT),
|
|
map: null,
|
|
};
|
|
}
|
|
|
|
return null;
|
|
},
|
|
};
|
|
}
|