Files
Alex Hunt 89300acb9c Migrate Node.js builtin imports to node: scheme (#57611)
Summary:
Pull Request resolved: https://github.com/react/react-native/pull/57611

Directly follows D112733139 (Metro).

**Motivation**

- New Node builtins are *only* available under the prefix (e.g. `node:sqlite`), as this allows Node to introduce them without ecosystem-breaking changes, so this is the direction of travel and the only choice that'll allow consistency.
- Encouraging them and grouping them separately makes it easier to reason about a module's 3rd party dependencies.

Changelog: [Internal]

Reviewed By: robhogan

Differential Revision: D112803684

fbshipit-source-id: 40668d746a7151b3aa4800ff8af997902a18d198
2026-07-21 09:01:41 -07:00

42 lines
986 B
JavaScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @noflow
*/
const {spawnSync} = require('node:child_process');
async function retry(command, options, maxRetries, delay, args) {
for (let i = 1; i <= maxRetries; i++) {
console.log(`Attempt ${i}: ${command}`);
const result = spawnSync(command, args ? args : [], options);
if (result.status === 0) {
console.log(`Command succeeded on attempt ${i}`);
return true;
}
console.warn(`Command failed on attempt ${i}`);
if (i >= maxRetries) {
console.log('Maximum retries reached. Exiting.');
return false;
}
if (delay > 0) {
console.log(`Sleeping for ${delay} seconds...`);
await new Promise(resolve => setTimeout(resolve, delay));
}
console.log('Retrying...\n\n');
}
}
module.exports = {
retry,
};