From 0cefa1f16a2479f51eb1642ea9709a3c567b80fe Mon Sep 17 00:00:00 2001 From: Lindsay Evans Date: Thu, 4 Jul 2024 20:38:27 +1000 Subject: [PATCH 1/4] feat(cli): proxy registry requests via API --- DEVELOPING.md | 1 + src/cli/loadTemplate.ts | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/DEVELOPING.md b/DEVELOPING.md index b43e4a2..a04a575 100644 --- a/DEVELOPING.md +++ b/DEVELOPING.md @@ -14,6 +14,7 @@ pnpm start https://raw.githubusercontent.com/scffld-dev/cli/develop/examples/sim pnpm start github:scffld-dev/cli/examples/simple --name="My Github Component" pnpm start github:scffld-dev/cli/examples/simple@main --name="My Github Component" pnpm start reg:parcel-web-app --overwrite --outputDirectory=./demo-src/reg-app/ +pnpm start reg:react-hook --name=foo --overwrite --outputDirectory=./demo-src/reg-app/ pnpm start show github:scffld-dev/cli/examples/simple ``` diff --git a/src/cli/loadTemplate.ts b/src/cli/loadTemplate.ts index 562426b..ef20658 100644 --- a/src/cli/loadTemplate.ts +++ b/src/cli/loadTemplate.ts @@ -48,6 +48,30 @@ export const loadTemplate = async ( const parts = templateName.replace('reg:', '').split('/'); + // Try via TemplateProxy API with very short timeout + try { + const proxyUrl = `https://scffld-api.azurewebsites.net/TemplateProxy/${parts.join( + '/' + )}${revision !== 'HEAD' ? `/${revision}` : ''}`; + console.info(`\nFetching from proxy: ${proxyUrl}`); + const response = await fetch(proxyUrl, { + signal: AbortSignal.timeout(3000), + }); + if (response.ok && response.body) { + templateContent = await response.text(); + if (templateContent && templateContent.indexOf('---') !== -1) { + if (fetchSpinner !== undefined && !quiet) { + fetchSpinner.succeed(); + } + console.info(`\nGot template content from '${proxyUrl}'`); + return templateContent; + } + } + } catch (e) { + // Catch errors & fallback to direct GitHub access + console.warn('\nError from proxy:', e); + } + console.warn('\nSomething broke in the proxy, fallback to GH'); url = `https://raw.githubusercontent.com/scffld-dev/website/${revision}/templates/${parts.join( '/' )}${templateName.endsWith('.md') ? '' : '.md'}`; From 5702dbf9f7d9235137022de046ba855272118427 Mon Sep 17 00:00:00 2001 From: Lindsay Evans Date: Thu, 4 Jul 2024 20:38:32 +1000 Subject: [PATCH 2/4] 1.6.2-next.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7d20a08..666efdf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@scffld/cli", - "version": "1.6.1", + "version": "1.6.2-next.0", "description": "Simple code scaffolding tool using a Markdown file to define templates & properties", "main": "dist/index.js", "bin": { From c7d823bf4ab0e6bc653241362617315c68f01867 Mon Sep 17 00:00:00 2001 From: Lindsay Evans Date: Thu, 4 Jul 2024 20:52:06 +1000 Subject: [PATCH 3/4] chore(cli): add TODOs for error handling --- src/cli/loadTemplate.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cli/loadTemplate.ts b/src/cli/loadTemplate.ts index ef20658..efaa49f 100644 --- a/src/cli/loadTemplate.ts +++ b/src/cli/loadTemplate.ts @@ -77,6 +77,7 @@ export const loadTemplate = async ( )}${templateName.endsWith('.md') ? '' : '.md'}`; } + // TODO: Handle errors const response = await fetch(url); templateContent = await response.text(); if (fetchSpinner !== undefined && !quiet) { @@ -84,6 +85,7 @@ export const loadTemplate = async ( } } else { // Local template + // TODO: Handle errors templateContent = fs .readFileSync( path.resolve(templateName + (templateName.endsWith('.md') ? '' : '.md')) From 11367ceffb0705f33e7fa944ca422d45d93fb915 Mon Sep 17 00:00:00 2001 From: Lindsay Evans Date: Thu, 11 Jul 2024 10:44:41 +1000 Subject: [PATCH 4/4] feat(cli): lower registry timeout, comment out console.log --- src/cli/loadTemplate.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/cli/loadTemplate.ts b/src/cli/loadTemplate.ts index efaa49f..b8b8f20 100644 --- a/src/cli/loadTemplate.ts +++ b/src/cli/loadTemplate.ts @@ -2,6 +2,8 @@ import fs from 'node:fs'; import path from 'node:path'; import ora, { Ora } from 'ora'; +const REG_PROXY_TIMEOUT = 600; + export const loadTemplate = async ( templateName: string, options: { quiet?: boolean } = {} @@ -53,9 +55,9 @@ export const loadTemplate = async ( const proxyUrl = `https://scffld-api.azurewebsites.net/TemplateProxy/${parts.join( '/' )}${revision !== 'HEAD' ? `/${revision}` : ''}`; - console.info(`\nFetching from proxy: ${proxyUrl}`); + // console.info(`\nFetching from proxy: ${proxyUrl}`); const response = await fetch(proxyUrl, { - signal: AbortSignal.timeout(3000), + signal: AbortSignal.timeout(REG_PROXY_TIMEOUT), }); if (response.ok && response.body) { templateContent = await response.text(); @@ -63,15 +65,15 @@ export const loadTemplate = async ( if (fetchSpinner !== undefined && !quiet) { fetchSpinner.succeed(); } - console.info(`\nGot template content from '${proxyUrl}'`); + // console.info(`\nGot template content from '${proxyUrl}'`); return templateContent; } } } catch (e) { // Catch errors & fallback to direct GitHub access - console.warn('\nError from proxy:', e); + // console.warn('\nError from proxy:', e); } - console.warn('\nSomething broke in the proxy, fallback to GH'); + // console.warn('\nSomething broke in the proxy, fallback to GH'); url = `https://raw.githubusercontent.com/scffld-dev/website/${revision}/templates/${parts.join( '/' )}${templateName.endsWith('.md') ? '' : '.md'}`;