diff --git a/.changeset/good-houses-float.md b/.changeset/good-houses-float.md new file mode 100644 index 0000000..820f0d1 --- /dev/null +++ b/.changeset/good-houses-float.md @@ -0,0 +1,11 @@ +--- +"create-arweave-app": patch +--- + +Changeset config, CLI dependency and template issue fixes + +- Fixed changeset configuration. +- Added credits comment to CLI code. +- Improved dependency handling and logging. +- Resolved `hasStamped` fetching issue in template. +- Enhanced asset fetching without dependencies in template. diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 42bee41..ce4e036 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -4,9 +4,8 @@ on: workflows: ["CI"] types: - completed - push: branches: - - "main" + - main concurrency: ${{ github.workflow }}-${{ github.ref }} diff --git a/.gitignore b/.gitignore index 9b6c38c..3272e7b 100644 --- a/.gitignore +++ b/.gitignore @@ -63,4 +63,7 @@ yarn-error.log* Thumbs.db # Typescript -*.tsbuildinfo \ No newline at end of file +*.tsbuildinfo + +# cli changesets +apps/cli/.changeset/*.md \ No newline at end of file diff --git a/apps/cli/.changeset/config.json b/apps/cli/.changeset/config.json new file mode 100644 index 0000000..4cb05c9 --- /dev/null +++ b/apps/cli/.changeset/config.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", + "changelog": [ + "@changesets/changelog-github", + { "repo": "labscommunity/starterkit" } + ], + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": ["web"], + "changedFilePatterns": ["src/**", "template/**"] +} diff --git a/apps/cli/package.json b/apps/cli/package.json index 21cc44a..9328df7 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -64,9 +64,7 @@ "validate-npm-package-name": "^5.0.0" }, "devDependencies": { - "@types/figlet": "^1.5.7", "@types/fs-extra": "^11.0.1", - "@types/inquirer": "^9.0.3", "@types/node": "^18.16.0", "@types/validate-npm-package-name": "^4.0.1", "@typescript-eslint/eslint-plugin": "^6.8.0", diff --git a/apps/cli/src/helpers/installDependencies.ts b/apps/cli/src/helpers/installDependencies.ts index 744a7cd..ac1b9ce 100644 --- a/apps/cli/src/helpers/installDependencies.ts +++ b/apps/cli/src/helpers/installDependencies.ts @@ -1,6 +1,8 @@ import chalk from "chalk"; import { execa, type StdioOption } from "execa"; import ora, { type Ora } from "ora"; +import path from "path"; +import fs from "fs-extra"; import { getUserPkgManager, type PackageManager } from "@/utils/getUserPkgManager.js"; import { logger } from "@/utils/logger.js"; @@ -70,7 +72,19 @@ export const installDependencies = async ({ projectDir }: { projectDir: string } const installSpinner = await runInstallCommand(pkgManager, projectDir); - // If the spinner was used to show the progress, use succeed method on it - // If not, use the succeed on a new spinner - (installSpinner ?? ora()).succeed(chalk.green("Successfully installed dependencies!\n")); + const isDependenciesInstalled = fs.existsSync(path.join(projectDir, "node_modules")); + if (isDependenciesInstalled) { + // If the spinner was used to show the progress, use succeed method on it + // If not, use the succeed on a new spinner + (installSpinner ?? ora()).succeed(chalk.green("Successfully installed dependencies!\n")); + return false; + } else { + (installSpinner ?? ora()).fail( + chalk.red( + "Failed to install dependencies! Please refer to https://github.com/labscommunity/starterkit#getting-started for troubleshooting steps to resolve this issue.\n" + ) + ); + + return true; + } }; diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index a90d162..f1a0443 100644 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -1,4 +1,10 @@ #!/usr/bin/env node + +/** + * This CLI integrates contributions and portions of code sourced from various repositories. + * For a complete list of contributions and credits, please see https://github.com/labscommunity/starterkit/blob/main/CREDITS.md. + */ + import path from "path"; import { execa } from "execa"; import fs from "fs-extra"; @@ -79,8 +85,9 @@ const main = async () => { setImportAlias(projectDir, importAlias); } + let showInstallCommand = noInstall; if (!noInstall) { - await installDependencies({ projectDir }); + showInstallCommand = await installDependencies({ projectDir }); } // Rename _eslintrc.json to .eslintrc.json - we use _eslintrc.json to avoid conflicts with the monorepos linter @@ -92,7 +99,7 @@ const main = async () => { await logNextSteps({ projectName: appDir, - noInstall, + noInstall: showInstallCommand, projectDir, }); diff --git a/apps/cli/template/next/javascript/src/app/layout.jsx b/apps/cli/template/next/javascript/src/app/layout.jsx index fe7bcab..9918e5e 100644 --- a/apps/cli/template/next/javascript/src/app/layout.jsx +++ b/apps/cli/template/next/javascript/src/app/layout.jsx @@ -37,7 +37,7 @@ export default function RootLayout({ children }) { { @@ -15,7 +13,7 @@ export function Assets() { setAssets(data); } fetchData(); - }, [connected, address]); + }, []); return (
diff --git a/apps/cli/template/next/javascript/src/components/stamp-like.jsx b/apps/cli/template/next/javascript/src/components/stamp-like.jsx index da3f003..9522609 100644 --- a/apps/cli/template/next/javascript/src/components/stamp-like.jsx +++ b/apps/cli/template/next/javascript/src/components/stamp-like.jsx @@ -23,7 +23,7 @@ async function getStamps() { } export function Stamp(props) { - const { connected } = useUser(); + const { connected, address } = useUser(); const [stampCount, setStampCount] = React.useState(0); const [hasStamped, setHasStamped] = React.useState(false); @@ -41,14 +41,16 @@ export function Stamp(props) { async function fetchStampData() { const stamps = await getStamps(); const { total } = await stamps.count(props.txId); - const stampedStatus = await stamps.hasStamped(props.txId); - setStampCount(total); - setHasStamped(stampedStatus); + + if (address) { + const stampedStatus = await stamps.hasStamped(props.txId); + setHasStamped(stampedStatus); + } } fetchStampData(); - }, [props.txId]); + }, [props.txId, address]); return ( @@ -59,7 +61,7 @@ export function Stamp(props) { disabled={!connected || hasStamped} className={` transition - ${hasStamped ? "text-red-500" : ""} + ${hasStamped && connected ? "text-red-500" : ""} ${!hasStamped && connected ? "hover:text-red-500" : ""} `} > diff --git a/apps/cli/template/next/javascript/src/pages/_app.jsx b/apps/cli/template/next/javascript/src/pages/_app.jsx index bfa2706..aa5c5f3 100644 --- a/apps/cli/template/next/javascript/src/pages/_app.jsx +++ b/apps/cli/template/next/javascript/src/pages/_app.jsx @@ -12,7 +12,7 @@ export default function App({ Component, pageProps }) { ([]); React.useEffect(() => { @@ -16,7 +15,7 @@ export function Assets() { setAssets(data); } fetchData(); - }, [connected, address]); + }, []); return (
diff --git a/apps/cli/template/next/typescript/src/components/stamp-like.tsx b/apps/cli/template/next/typescript/src/components/stamp-like.tsx index 19d50cb..e05ff0d 100644 --- a/apps/cli/template/next/typescript/src/components/stamp-like.tsx +++ b/apps/cli/template/next/typescript/src/components/stamp-like.tsx @@ -31,7 +31,7 @@ interface StampProps { } export function Stamp(props: StampProps) { - const { connected } = useUser(); + const { connected, address } = useUser(); const [stampCount, setStampCount] = React.useState(0); const [hasStamped, setHasStamped] = React.useState(false); @@ -49,14 +49,16 @@ export function Stamp(props: StampProps) { async function fetchStampData() { const stamps = await getStamps(); const { total } = await stamps.count(props.txId); - const stampedStatus = await stamps.hasStamped(props.txId); - setStampCount(total); - setHasStamped(stampedStatus); + + if (address) { + const stampedStatus = await stamps.hasStamped(props.txId); + setHasStamped(stampedStatus); + } } fetchStampData(); - }, [props.txId]); + }, [props.txId, address]); return ( @@ -67,7 +69,7 @@ export function Stamp(props: StampProps) { disabled={!connected || hasStamped} className={` transition - ${hasStamped ? "text-red-500" : ""} + ${hasStamped && connected ? "text-red-500" : ""} ${!hasStamped && connected ? "hover:text-red-500" : ""} `} > diff --git a/apps/cli/template/next/typescript/src/pages/_app.tsx b/apps/cli/template/next/typescript/src/pages/_app.tsx index 21b811a..f36adc7 100644 --- a/apps/cli/template/next/typescript/src/pages/_app.tsx +++ b/apps/cli/template/next/typescript/src/pages/_app.tsx @@ -13,13 +13,7 @@ export default function App({ Component, pageProps }: AppProps) { ([]); React.useEffect(() => { @@ -16,7 +15,7 @@ export function Assets() { setAssets(data); } fetchData(); - }, [connected, address]); + }, []); return (
diff --git a/apps/web/src/components/stamp-like.tsx b/apps/web/src/components/stamp-like.tsx index 19d50cb..e05ff0d 100644 --- a/apps/web/src/components/stamp-like.tsx +++ b/apps/web/src/components/stamp-like.tsx @@ -31,7 +31,7 @@ interface StampProps { } export function Stamp(props: StampProps) { - const { connected } = useUser(); + const { connected, address } = useUser(); const [stampCount, setStampCount] = React.useState(0); const [hasStamped, setHasStamped] = React.useState(false); @@ -49,14 +49,16 @@ export function Stamp(props: StampProps) { async function fetchStampData() { const stamps = await getStamps(); const { total } = await stamps.count(props.txId); - const stampedStatus = await stamps.hasStamped(props.txId); - setStampCount(total); - setHasStamped(stampedStatus); + + if (address) { + const stampedStatus = await stamps.hasStamped(props.txId); + setHasStamped(stampedStatus); + } } fetchStampData(); - }, [props.txId]); + }, [props.txId, address]); return ( @@ -67,7 +69,7 @@ export function Stamp(props: StampProps) { disabled={!connected || hasStamped} className={` transition - ${hasStamped ? "text-red-500" : ""} + ${hasStamped && connected ? "text-red-500" : ""} ${!hasStamped && connected ? "hover:text-red-500" : ""} `} > diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 501edd0..2352c05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,15 +54,9 @@ importers: specifier: ^5.0.0 version: 5.0.0 devDependencies: - '@types/figlet': - specifier: ^1.5.7 - version: 1.5.7 '@types/fs-extra': specifier: ^11.0.1 version: 11.0.3 - '@types/inquirer': - specifier: ^9.0.3 - version: 9.0.6 '@types/node': specifier: ^18.16.0 version: 18.18.6 @@ -4108,10 +4102,6 @@ packages: '@types/qs': 6.9.9 '@types/serve-static': 1.15.4 - /@types/figlet@1.5.7: - resolution: {integrity: sha512-0+XwDLeH346mAl3fmw/AaEctBrhkcJl0wZezoNUQ5Tg6J5YW7xL2v9hH3Yg5L4dk/sogEdQexTrNncqjGKwoVw==} - dev: true - /@types/formidable@1.2.7: resolution: {integrity: sha512-5fGOft5NbzNYBnnhaNsjEpUpU+Fn/ifRLfPYZMUXq6G7dxt0kU8wLa8oeWN8rcbng77Lb8Wfwa+VwvGc/Ox61A==} dependencies: @@ -4139,13 +4129,6 @@ packages: '@types/through': 0.0.32 rxjs: 7.8.1 - /@types/inquirer@9.0.6: - resolution: {integrity: sha512-1Go1AAP/yOy3Pth5Xf1DC3nfZ03cJLCPx6E2YnSN/5I3w1jHBVH4170DkZ+JxfmA7c9kL9+bf9z3FRGa4kNAqg==} - dependencies: - '@types/through': 0.0.32 - rxjs: 7.8.1 - dev: true - /@types/is-ci@3.0.3: resolution: {integrity: sha512-FdHbjLiN2e8fk9QYQyVYZrK8svUDJpxSaSWLUga8EZS1RGAvvrqM9zbVARBtQuYPeLgnJxM2xloOswPwj1o2cQ==} dependencies: @@ -4535,6 +4518,7 @@ packages: /algo-msgpack-with-bigint@2.1.1: resolution: {integrity: sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==} engines: {node: '>= 10'} + requiresBuild: true /algosdk@1.24.1: resolution: {integrity: sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==} @@ -6052,6 +6036,7 @@ packages: /cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + requiresBuild: true dependencies: node-fetch: 2.7.0 transitivePeerDependencies: @@ -7625,6 +7610,7 @@ packages: /hi-base32@0.5.1: resolution: {integrity: sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==} + requiresBuild: true /hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} @@ -8196,6 +8182,7 @@ packages: /js-sha512@0.8.0: resolution: {integrity: sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==} + requiresBuild: true /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -8231,6 +8218,7 @@ packages: /json-bigint@1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + requiresBuild: true dependencies: bignumber.js: 9.1.2 @@ -11618,6 +11606,7 @@ packages: /vlq@2.0.4: resolution: {integrity: sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==} + requiresBuild: true /vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==}