diff --git a/.changeset/mighty-views-kneel.md b/.changeset/mighty-views-kneel.md new file mode 100644 index 0000000000..042e93cc81 --- /dev/null +++ b/.changeset/mighty-views-kneel.md @@ -0,0 +1,5 @@ +--- +"create-email": patch +--- + +caching of versions to use when fetch of latest fails diff --git a/packages/create-email/.gitignore b/packages/create-email/.gitignore index 960dd8addf..3bf3c07c9c 100644 --- a/packages/create-email/.gitignore +++ b/packages/create-email/.gitignore @@ -1 +1,2 @@ .test +./.cache diff --git a/packages/create-email/src/index.js b/packages/create-email/src/index.js index bfb739ed45..88595130e5 100755 --- a/packages/create-email/src/index.js +++ b/packages/create-email/src/index.js @@ -16,10 +16,38 @@ const packageJson = JSON.parse( ); const getLatestVersionOfTag = async (packageName, tag) => { - const response = await fetch( - `https://registry.npmjs.org/${packageName}/${tag}`, + const cacheFilename = `${packageName.replaceAll('/', '-')}-${tag}.json`; + + const cacheDir = path.join( + path.dirname(fileURLToPath(import.meta.url)), + '..', + '.cache', ); - const data = await response.json(); + + if (!fse.existsSync(cacheDir)) { + fse.mkdirSync(cacheDir, { recursive: true, mode: 0o700 }); + } + + const cachePath = path.join(cacheDir, cacheFilename); + + let data; + try { + const response = await fetch( + `https://registry.npmjs.org/${packageName}/${tag}`, + ); + data = await response.json(); + + fse.writeFileSync(cachePath, JSON.stringify(data), { mode: 0o600 }); + } catch (exception) { + if (fse.existsSync(cachePath)) { + console.warn( + `${logSymbols.warning} Failed to fetch the latest version from npm, using a cache`, + ); + data = fse.readJSONSync(cachePath); + } else { + throw exception; + } + } if (typeof data === 'string' && data.startsWith('version not found')) { console.error(`Tag ${tag} does not exist for ${packageName}.`);