tim-kos/node-retry

Typescript 4.4 breaking change affect retry

chengB12 opened this issue · 1 comments

This is doc about typescript 4.4 breaking change:
https://devblogs.microsoft.com/typescript/announcing-typescript-4-4/#more-compliant-indirect-calls-for-imported-functions

for this code

import { timeouts} from 'retry'

console.log(timeouts({
    retries: 5,
}))

typescript will compile it to

"use strict";
exports.__esModule = true;
var retry_1 = require("retry");
console.log((0, retry_1.timeouts)({
    retries: 5
}));

note it is (0, retry_1.timeouts)(...)
and it will have different "this" context

and it will throw error:

**\node_modules\retry\lib\retry.js:34
    timeouts.push(this.createTimeout(i, opts));
                       ^

TypeError: this.createTimeout is not a function
    at exports.timeouts (**\node_modules\retry\lib\retry.js:34:24)
    at Object.<anonymous> (**\test-fail.js:7:34)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47

workaround is use import * as retry from 'retry' instead

The umpteenth error blocking us from upgrading/migrating things... Guess p-retry is the next tool we're replacing, since it depends on this and it doesn't seem this lib is actively maintained, this issue being open for a year and change.