mirror of
https://github.com/status-im/sourcecred.git
synced 2025-01-10 20:56:29 +00:00
7702bb2e1d
Summary: The actual constraints for bound parameters are too complicated to express within Flow. This commit changes the type definitions from one approximation to another, simpler one. Neither approximation is likely to cause many problems in practice, either in terms of spurious errors or spurious lacks of error. (The failure mode for the new formulation is having multiple dictionaries of binding values, which would pass Flow but quickly raise a `TypeError` at runtime.) The reason for the change is that it makes the method definitions considerably simpler, in a way that is likely to avoid other problems with Flow. In particular, this removes method overloads and the need for parameter disambiguation. I fix a typo while in the area. Test Plan: Note that the following file typechecks: ```js // @flow import Database from "better-sqlite3"; const db = new Database(":memory:"); const stmt = db.prepare("BEGIN"); // SQL text doesn't matter stmt.run(); stmt.run(null, 2, "three", new Buffer(Array(4))); stmt.run(+false); stmt.run(1, {dos: 2}, 3); // the binding dictionary can go anywhere stmt.run({a: 1}, {b: 2}); // this will fail at runtime (TypeError) // $ExpectFlowError stmt.run(false); // booleans cannot be bound // $ExpectFlowError stmt.run({x: {y: "z"}}); // named parameters are not recursive ``` All but the last two success cases (lines 9 and 10) would also have passed before this change. wchargin-branch: flow-better-sqlite3-bound-parameters-simplify