From 938bc56cab3d7af0d3a26229e83b449b30b87630 Mon Sep 17 00:00:00 2001 From: Paschal okwuosa Date: Fri, 22 Nov 2024 19:08:30 +0100 Subject: [PATCH 1/9] feat: added Helia Remix example --- examples/helia-remix/.eslintrc.cjs | 84 ++++++++++ examples/helia-remix/.gitignore | 5 + examples/helia-remix/README.md | 114 ++++++++++++++ examples/helia-remix/app/entry.client.tsx | 18 +++ examples/helia-remix/app/entry.server.tsx | 140 +++++++++++++++++ examples/helia-remix/app/root.tsx | 45 ++++++ examples/helia-remix/app/routes/_index.tsx | 169 +++++++++++++++++++++ examples/helia-remix/app/tailwind.css | 12 ++ examples/helia-remix/components/ipfs.tsx | 48 ++++++ examples/helia-remix/package.json | 44 ++++++ examples/helia-remix/postcss.config.js | 6 + examples/helia-remix/public/favicon.ico | Bin 0 -> 16958 bytes examples/helia-remix/public/logo-dark.png | Bin 0 -> 80332 bytes examples/helia-remix/public/logo-light.png | Bin 0 -> 5906 bytes examples/helia-remix/tailwind.config.ts | 22 +++ examples/helia-remix/tsconfig.json | 32 ++++ examples/helia-remix/vite.config.ts | 24 +++ 17 files changed, 763 insertions(+) create mode 100644 examples/helia-remix/.eslintrc.cjs create mode 100644 examples/helia-remix/.gitignore create mode 100644 examples/helia-remix/README.md create mode 100644 examples/helia-remix/app/entry.client.tsx create mode 100644 examples/helia-remix/app/entry.server.tsx create mode 100644 examples/helia-remix/app/root.tsx create mode 100644 examples/helia-remix/app/routes/_index.tsx create mode 100644 examples/helia-remix/app/tailwind.css create mode 100644 examples/helia-remix/components/ipfs.tsx create mode 100644 examples/helia-remix/package.json create mode 100644 examples/helia-remix/postcss.config.js create mode 100644 examples/helia-remix/public/favicon.ico create mode 100644 examples/helia-remix/public/logo-dark.png create mode 100644 examples/helia-remix/public/logo-light.png create mode 100644 examples/helia-remix/tailwind.config.ts create mode 100644 examples/helia-remix/tsconfig.json create mode 100644 examples/helia-remix/vite.config.ts diff --git a/examples/helia-remix/.eslintrc.cjs b/examples/helia-remix/.eslintrc.cjs new file mode 100644 index 00000000..4f6f59ee --- /dev/null +++ b/examples/helia-remix/.eslintrc.cjs @@ -0,0 +1,84 @@ +/** + * This is intended to be a basic starting point for linting in your app. + * It relies on recommended configs out of the box for simplicity, but you can + * and should modify this configuration to best suit your team's needs. + */ + +/** @type {import('eslint').Linter.Config} */ +module.exports = { + root: true, + parserOptions: { + ecmaVersion: "latest", + sourceType: "module", + ecmaFeatures: { + jsx: true, + }, + }, + env: { + browser: true, + commonjs: true, + es6: true, + }, + ignorePatterns: ["!**/.server", "!**/.client"], + + // Base config + extends: ["eslint:recommended"], + + overrides: [ + // React + { + files: ["**/*.{js,jsx,ts,tsx}"], + plugins: ["react", "jsx-a11y"], + extends: [ + "plugin:react/recommended", + "plugin:react/jsx-runtime", + "plugin:react-hooks/recommended", + "plugin:jsx-a11y/recommended", + ], + settings: { + react: { + version: "detect", + }, + formComponents: ["Form"], + linkComponents: [ + { name: "Link", linkAttribute: "to" }, + { name: "NavLink", linkAttribute: "to" }, + ], + "import/resolver": { + typescript: {}, + }, + }, + }, + + // Typescript + { + files: ["**/*.{ts,tsx}"], + plugins: ["@typescript-eslint", "import"], + parser: "@typescript-eslint/parser", + settings: { + "import/internal-regex": "^~/", + "import/resolver": { + node: { + extensions: [".ts", ".tsx"], + }, + typescript: { + alwaysTryTypes: true, + }, + }, + }, + extends: [ + "plugin:@typescript-eslint/recommended", + "plugin:import/recommended", + "plugin:import/typescript", + ], + }, + + // Node + { + files: [".eslintrc.cjs"], + env: { + node: true, + }, + }, + ], +}; diff --git a/examples/helia-remix/.gitignore b/examples/helia-remix/.gitignore new file mode 100644 index 00000000..80ec311f --- /dev/null +++ b/examples/helia-remix/.gitignore @@ -0,0 +1,5 @@ +node_modules + +/.cache +/build +.env diff --git a/examples/helia-remix/README.md b/examples/helia-remix/README.md new file mode 100644 index 00000000..f0252fac --- /dev/null +++ b/examples/helia-remix/README.md @@ -0,0 +1,114 @@ +

+ + Helia logo + +

+ +

Using Helia inside a Remix app

+ +

+ +
+ Explore the docs + · + View Demo + · + Report Bug + · + Request Feature/Example +

+ +## Table of Contents + +See https://github.com/ipfs-examples/helia-examples#table-of-contents for more information about Helia examples. + +## Getting Started + +### Prerequisites + +https://github.com/ipfs-examples/helia-examples#prerequisites + +### Installation and Running example + +```console +> npm install +> npm run dev +``` + +Now open your browser at `http://localhost:5173/` + +### Available Scripts + +In the project directory, you can run: + +#### `npm run dev` + +Runs the app in the development mode.
+Open [http://localhost:5173/](http://localhost:5173/) to view it in the browser. + +The page will reload if you make edits.
+You will also see any lint errors in the console. + +#### `npm run build` + +Builds the app for production to the `dist` folder.
+It correctly bundles in production mode and optimizes the build for the best performance. + +## Usage + +This is a [Remix.js](https://remix.run/) project bootstrapped with [`create-remix@latest`](https://github.com/remix-run/remix/blob/main/packages/create-remix) integrated with `helia`. + +You can start editing the page by modifying `app/routes/_index.tsx`. The page auto-updates as you edit the file. + +### Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Remix Documentation](https://remix.run/docs/en/main) - learn about Remix features and API. +- [Learn Remix](https://remix.run/docs/en/main/start/tutorial) - an interactive Remix tutorial. + +You can check out [the Remix GitHub repository](https://github.com/remix-run/remix) - your feedback and contributions are welcome! + +### Deploy on Vercel + +The easiest way to deploy your Remix app is to use the [Vercel Platform](https://vercel.com/guides/deploying-remix-with-vercel). + +Check out our [Remix deployment documentation](https://vercel.com/docs/frameworks/remix) for more details. + +_For more examples, please refer to the [Documentation](https://github.com/ipfs-examples/helia-examples#documentation)_ + +## Documentation + +- [IPFS Primer](https://dweb-primer.ipfs.io/) +- [IPFS Docs](https://docs.ipfs.io/) +- [Tutorials](https://proto.school) +- [More examples](https://github.com/ipfs-examples/helia-examples) +- [API - Helia](https://ipfs.github.io/helia/modules/helia.html) +- [API - @helia/unixfs](https://ipfs.github.io/helia-unixfs/modules/helia.html) + +## Contributing + +Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**. + +1. Fork the IPFS Project +2. Create your Feature Branch (`git checkout -b feature/amazing-feature`) +3. Commit your Changes (`git commit -a -m 'feat: add some amazing feature'`) +4. Push to the Branch (`git push origin feature/amazing-feature`) +5. Open a Pull Request + +## Want to hack on IPFS? + +[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md) + +The IPFS implementation in JavaScript needs your help! There are a few things you can do right now to help out: + +Read the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md). + +- **Check out existing issues** The [issue list](https://github.com/ipfs/helia/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/helia/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/helia/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge +- **Look at the [Helia Roadmap](https://github.com/ipfs/helia/blob/main/ROADMAP.md)** This are the high priority items being worked on right now +- **Perform code reviews** More eyes will help + a. speed the project along + b. ensure quality, and + c. reduce possible future bugs +- **Add tests**. There can never be enough tests + diff --git a/examples/helia-remix/app/entry.client.tsx b/examples/helia-remix/app/entry.client.tsx new file mode 100644 index 00000000..94d5dc0d --- /dev/null +++ b/examples/helia-remix/app/entry.client.tsx @@ -0,0 +1,18 @@ +/** + * By default, Remix will handle hydrating your app on the client for you. + * You are free to delete this file if you'd like to, but if you ever want it revealed again, you can run `npx remix reveal` ✨ + * For more information, see https://remix.run/file-conventions/entry.client + */ + +import { RemixBrowser } from "@remix-run/react"; +import { startTransition, StrictMode } from "react"; +import { hydrateRoot } from "react-dom/client"; + +startTransition(() => { + hydrateRoot( + document, + + + + ); +}); diff --git a/examples/helia-remix/app/entry.server.tsx b/examples/helia-remix/app/entry.server.tsx new file mode 100644 index 00000000..45db3229 --- /dev/null +++ b/examples/helia-remix/app/entry.server.tsx @@ -0,0 +1,140 @@ +/** + * By default, Remix will handle generating the HTTP Response for you. + * You are free to delete this file if you'd like to, but if you ever want it revealed again, you can run `npx remix reveal` ✨ + * For more information, see https://remix.run/file-conventions/entry.server + */ + +import { PassThrough } from "node:stream"; + +import type { AppLoadContext, EntryContext } from "@remix-run/node"; +import { createReadableStreamFromReadable } from "@remix-run/node"; +import { RemixServer } from "@remix-run/react"; +import { isbot } from "isbot"; +import { renderToPipeableStream } from "react-dom/server"; + +const ABORT_DELAY = 5_000; + +export default function handleRequest( + request: Request, + responseStatusCode: number, + responseHeaders: Headers, + remixContext: EntryContext, + // This is ignored so we can keep it in the template for visibility. Feel + // free to delete this parameter in your app if you're not using it! + // eslint-disable-next-line @typescript-eslint/no-unused-vars + loadContext: AppLoadContext +) { + return isbot(request.headers.get("user-agent") || "") + ? handleBotRequest( + request, + responseStatusCode, + responseHeaders, + remixContext + ) + : handleBrowserRequest( + request, + responseStatusCode, + responseHeaders, + remixContext + ); +} + +function handleBotRequest( + request: Request, + responseStatusCode: number, + responseHeaders: Headers, + remixContext: EntryContext +) { + return new Promise((resolve, reject) => { + let shellRendered = false; + const { pipe, abort } = renderToPipeableStream( + , + { + onAllReady() { + shellRendered = true; + const body = new PassThrough(); + const stream = createReadableStreamFromReadable(body); + + responseHeaders.set("Content-Type", "text/html"); + + resolve( + new Response(stream, { + headers: responseHeaders, + status: responseStatusCode, + }) + ); + + pipe(body); + }, + onShellError(error: unknown) { + reject(error); + }, + onError(error: unknown) { + responseStatusCode = 500; + // Log streaming rendering errors from inside the shell. Don't log + // errors encountered during initial shell rendering since they'll + // reject and get logged in handleDocumentRequest. + if (shellRendered) { + console.error(error); + } + }, + } + ); + + setTimeout(abort, ABORT_DELAY); + }); +} + +function handleBrowserRequest( + request: Request, + responseStatusCode: number, + responseHeaders: Headers, + remixContext: EntryContext +) { + return new Promise((resolve, reject) => { + let shellRendered = false; + const { pipe, abort } = renderToPipeableStream( + , + { + onShellReady() { + shellRendered = true; + const body = new PassThrough(); + const stream = createReadableStreamFromReadable(body); + + responseHeaders.set("Content-Type", "text/html"); + + resolve( + new Response(stream, { + headers: responseHeaders, + status: responseStatusCode, + }) + ); + + pipe(body); + }, + onShellError(error: unknown) { + reject(error); + }, + onError(error: unknown) { + responseStatusCode = 500; + // Log streaming rendering errors from inside the shell. Don't log + // errors encountered during initial shell rendering since they'll + // reject and get logged in handleDocumentRequest. + if (shellRendered) { + console.error(error); + } + }, + } + ); + + setTimeout(abort, ABORT_DELAY); + }); +} diff --git a/examples/helia-remix/app/root.tsx b/examples/helia-remix/app/root.tsx new file mode 100644 index 00000000..61c8b983 --- /dev/null +++ b/examples/helia-remix/app/root.tsx @@ -0,0 +1,45 @@ +import { + Links, + Meta, + Outlet, + Scripts, + ScrollRestoration, +} from "@remix-run/react"; +import type { LinksFunction } from "@remix-run/node"; + +import "./tailwind.css"; + +export const links: LinksFunction = () => [ + { rel: "preconnect", href: "https://fonts.googleapis.com" }, + { + rel: "preconnect", + href: "https://fonts.gstatic.com", + crossOrigin: "anonymous", + }, + { + rel: "stylesheet", + href: "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap", + }, +]; + +export function Layout({ children }: { children: React.ReactNode }) { + return ( + + + + + + + + + {children} + + + + + ); +} + +export default function App() { + return ; +} diff --git a/examples/helia-remix/app/routes/_index.tsx b/examples/helia-remix/app/routes/_index.tsx new file mode 100644 index 00000000..6bfee4f5 --- /dev/null +++ b/examples/helia-remix/app/routes/_index.tsx @@ -0,0 +1,169 @@ +import type { MetaFunction } from "@remix-run/node"; +import IpfsComponent from "../../components/ipfs"; + +export const meta: MetaFunction = () => { + return [ + { title: "New Remix App" }, + { name: "description", content: "Welcome to Remix!" }, + ]; +}; + +export default function Index() { + return ( +
+
+
+

+ Welcome to Remix +

+
+ Remix + Remix +
+
+ + + + +
+
+ ); +} + +const resources = [ + { + href: "https://remix.run/start/quickstart", + text: "Quick Start (5 min)", + icon: ( + + + + ), + }, + { + href: "https://remix.run/start/tutorial", + text: "Tutorial (30 min)", + icon: ( + + + + ), + }, + { + href: "https://remix.run/docs", + text: "Remix Docs", + icon: ( + + + + ), + }, + { + href: "https://rmx.as/discord", + text: "Join Discord", + icon: ( + + + + ), + }, +]; diff --git a/examples/helia-remix/app/tailwind.css b/examples/helia-remix/app/tailwind.css new file mode 100644 index 00000000..303fe158 --- /dev/null +++ b/examples/helia-remix/app/tailwind.css @@ -0,0 +1,12 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +html, +body { + @apply bg-white dark:bg-gray-950; + + @media (prefers-color-scheme: dark) { + color-scheme: dark; + } +} diff --git a/examples/helia-remix/components/ipfs.tsx b/examples/helia-remix/components/ipfs.tsx new file mode 100644 index 00000000..c0c552f7 --- /dev/null +++ b/examples/helia-remix/components/ipfs.tsx @@ -0,0 +1,48 @@ +import { createHelia } from 'helia' +import React, { useState, useEffect } from 'react' + +// Define the types for the state variables +interface HeliaNode { + libp2p: { + peerId: { + toString: () => string + } + status: string + } +} + +const IpfsComponent: React.FC = () => { + const [id, setId] = useState(null) + const [helia, setHelia] = useState(null) + const [isOnline, setIsOnline] = useState(false) + + useEffect(() => { + const init = async () => { + if (helia) return + + const heliaNode = (await createHelia()) as HeliaNode + + const nodeId = heliaNode.libp2p.peerId.toString() + const nodeIsOnline = heliaNode.libp2p.status === 'started' + + setHelia(heliaNode) + setId(nodeId) + setIsOnline(nodeIsOnline) + } + + init() + }, [helia]) + + if (!helia || !id) { + return

Starting Helia...

+ } + + return ( +
+

ID: {id}

+

Status: {isOnline ? 'Online' : 'Offline'}

+
+ ) +} + +export default IpfsComponent diff --git a/examples/helia-remix/package.json b/examples/helia-remix/package.json new file mode 100644 index 00000000..b797b895 --- /dev/null +++ b/examples/helia-remix/package.json @@ -0,0 +1,44 @@ +{ + "name": "my-remix-project", + "private": true, + "sideEffects": false, + "type": "module", + "scripts": { + "build": "remix vite:build", + "dev": "remix vite:dev", + "lint": "eslint --ignore-path .gitignore --cache --cache-location ./node_modules/.cache/eslint .", + "start": "remix-serve ./build/server/index.js", + "typecheck": "tsc" + }, + "dependencies": { + "@remix-run/node": "^2.14.0", + "@remix-run/react": "^2.14.0", + "@remix-run/serve": "^2.14.0", + "helia": "^5.1.1", + "isbot": "^4.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@remix-run/dev": "^2.14.0", + "@types/react": "^18.2.20", + "@types/react-dom": "^18.2.7", + "@typescript-eslint/eslint-plugin": "^6.7.4", + "@typescript-eslint/parser": "^6.7.4", + "autoprefixer": "^10.4.19", + "eslint": "^8.38.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "postcss": "^8.4.38", + "tailwindcss": "^3.4.4", + "typescript": "^5.1.6", + "vite": "^5.1.0", + "vite-tsconfig-paths": "^4.2.1" + }, + "engines": { + "node": ">=20.0.0" + } +} diff --git a/examples/helia-remix/postcss.config.js b/examples/helia-remix/postcss.config.js new file mode 100644 index 00000000..2aa7205d --- /dev/null +++ b/examples/helia-remix/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/examples/helia-remix/public/favicon.ico b/examples/helia-remix/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8830cf6821b354114848e6354889b8ecf6d2bc61 GIT binary patch literal 16958 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 EKbET!0{{R3 literal 0 HcmV?d00001 diff --git a/examples/helia-remix/public/logo-dark.png b/examples/helia-remix/public/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b24c7aee3a86dad7eb334ba6fba94e5b18b84215 GIT binary patch literal 80332 zcmV)dK&QWnP)eW5>+;h*}=bXLQx7N4TUQ4OHw%7LBUfXMXZLjUMy|&l(+FsjhUzn!V zYuvo|IH&e?I)xI4dBA1mM8@f{v3TRgSqfqrWL z_&2A|Ir)C*?4;xM#poTsSs%}{glpWsR&L90gl~AY*Y?_8dre!Ir%EOxHZa}pod0*q zk01lK=eS4)uk_vXU(Q#{3|-G(`Mw;aCIUd~y}A8*Y_BPhO#@1JfA0_zT+*5kQ8=^ZjXj=gd8}r`s~W$It3hFYoNm=WRUS>1B@NyZe8y9e1BtW`tH# zgWlJmtM=Mn+iNe|rss>lLt(wIHU^)uY`9}Szx>y0ARM1Z%f205R4>urz4q|iD+aP) zeQaAHUIhz@pPi`zirdp*HT~JCv&x*f7>>DcTktp0d{D?1F1!W3X;}gMP2=wR<%&itf-3?*%M( z0@Il@XSV0p^3K20<71}YbNl$IGHH)a&?jexI)=zdoXB)q7)ZZOl3;i0O`B4{WyJk=M-fp#z4RA z+q=^Tx7YUCZ~G=%9JORWo&*G~dcK^|XY^?g3u(L$uV*jRfK^Ypb1UbxI?0Xj^^;To zKZk!O@$X#yVYk^Ig#!n8bzlT?U?&LWEI-ZlS;e&0st3l46Sw_E3*OnXYL_fvO zs6AiW!)`ANWYZMlU0)mnSWOk)`CVE(ibB7(g2v!*3}A8zK*HA=Z`5N8N_P$_{}BMv zQ%_>Yb4m?Ym2NKV1b|@|=X_qNqmL_f8LwCH`4Q~9(o_B^eEw7eh-=9A}rLsbUeFo<|hs`mdjp6Ln*OS)!5B2ZhQ0hp|;NpWOqgbP6t&i-|;uLz{cR!I~3lJEgG?eYRhQ?Hf%M}WNo~^ z!VmC=*Tqe|KZNaTN?pZk(pP>F$6Up(!_%GQ=XdmbAC60L{Nz}C{}$fo*nhbGj+|SC z{d|>kV}CLOU_>9Tpbz6$_9^Xe15vhy^Uo_!0DNH#bTuL$KOSBQaJ+U}ce3LSs`PB_ zlUok#h|sXhY8%*8xbd~$F<5DP6JxLaHfq}-#^FxcvOMK)s$CV+)|XgbbsJk&Y|T+~ zha5{DOLn}E4n(@VQTk{Y$^OgucNG8F%4X@Q{a!h8MGu=p|M&}!dwxHEA@`J51jGPp z&-imwCf~^mH9bjCs~N@MCx@k0``E@-+upq0{dONfreQ63!zjKpe%seI9jL)q>MADz zVzj!}YD+~ZJ{7=gI0anUjM4-N93%S*fYw2798fCn?d((02=8y*0`_#2m-n~AXERNu zSMeGR(U(QM?}uYIhxf3s@cF)a^Y*RneenqA+^T;Q@7M8u37aeUvt8vE>i#6yRyXk7 zneB5Y05bt!v@gLnEkv;(Yio{;7TuU86<~waHl|m{=OL&q*Y}c^+j0$Tw9wQfgjgPz z-wyHLYkTdBw@pInCp%Qlx96*NM z^va{M`$m34A4m>(zQ#qY)xq#n*RNm4=0Uaec;TyC;qwDY?r$t6dS7p!<1u4^8`C!g zwqau!+!3TDm!{_L*ix%$#~s(RBbHzf&~~f6q)2=@YwXmN4~$k=4**81ixvrulQDQ5 z#daUo&Iq8DZEk-jZz)Ys8Usn$-2SW_DBVqQ&P;i}a^Lj!xUJ)_gMAS`Q*-r>xv3BD zICgGsdw)6p-qfL%@8|0`Yf8=6+r4aiI7V%369{V%#DG@GD1aOrfsO!o4Hn!{?sz`z zC%_TZ?nOo3X{jx%?d1d0zR0_MX?tz2eG#@0E~Y0|j1ntm`*VWWsZ&8aUV%HJcU}v4 zJPlXGuLf!`*#d}tnzCm_TpCH9=y+eO57ei)ov+riV!v7|)QBZqSp{|JCey$CkuQ8n5c3Ap7QSZNS$I{@t@`>TR=CO~$kzQ$#LXJ}U) zEw?vsccFbA-G012csrz?uNUgbLq;0PVX!U;V#jLhYpVkQyAigR?f|gJU#D1YlYP@1@YQkJA6xnC&B)v!Gd zI_ZLfoQ|Lr%PjcPM5SP8|76Xb-t(dDwJ**#QIN+AkeBa}K~p|3GI<0sQhUv{rWWw3 zTVuUpZY;vmdj2*nt%EAcBg|c^?Tp1Sw-xypb8|yeG2JY!p6SiVT-oey$~icFT|^M0 zwz{TPdZpjDuuoN+m0tk3k&!8r(l4b;u-YnLrlowJmfDzhq|fc#`Evqh08}r*Cno|= zsz@(R&(3l5^4^@?m3B`cn=Cw}0QKU#5vprC5^)^r-uq^N*rgi8YAcLBB>JOB87|QB zsx7VwaMgfS0YuWaGF1iu0bpQwm`*30e`^c0BHp*LJxt(_it(L3fTF3)Y6;N6evAE8 zzTKx0-Z!S-1C$!^-Pg$P^>MB?tSP%upMyVyeHLJ|h1U+=^VOypep~gc+6FcPCP8li zfV1_!s0k3n_Sn)p0C3wJg>8acOlz(7wWXW5raF*i+EN=wMV`bwo2;ihy}h7Y=0o`3 zp5JV*ebKcYl%j+@Pt8w&*trwuG@}e@<($8C-bld4#o+g%kLz~#wxLs8tgq|PCA&Ri z%LCeUjovIb^&B9|ls(<6ws77VWn1=c8Q0rXm2G=|Rt>5!e`YY@`fI)$b-e3U-tC|D zwAKi0`;vX$rOsCk0NM%x?J@xEh#y;M$Cr+~vHwf}?Zm0=Iax0kP!gTIH&=J7y`)99 zybQnC=^!%&#HcCN;pGIeaWKdJELd4%0P8L)a~(9>QCMH}MbVEntdvOsN+ql;g4YjTiDmhx+$DH}`5OnSQv1@nb%4kY3$3Oc zeH{q0(<<8w*WYVjJZ)Q1J_C9YmJ43bo;t3@qG3SCIFMu1)XzQkyikaZx4l{9%<9If ziDqGaWmYV(p&8m)H4E*wr?&u1{i?6c#z5Pq)!pWd?n4{x>^q=!HPmjsa`{YQtMydo zY-_2ds`X7bYz}piCyw9QS0$APxUE?L*J9;6S;yU8y{)>eZaMMg`R*1^~cBb~VNz5rm^g3?Q6*zN+b z`c4^wR{^Ul#e33*w_E@+T0Th&`>;*$NNqS@ImCNxCj<%=0A^T*_xwD@X9WNT6s794 z!ggGSSBKXQKHsX~gTiZu;|px_I|i>Acck*)q_yz-u&f-vFXsceIJ_&tNqM)iAw zohidmYysTzss>H$BfuGengPJk(&K)D+7K2T!7c;!XlpBtphkZiX~^{#m4D=z^0$Y< zr^cX>xi>1;*$U^Ng+}X4*4$kbYuHN&|CxHB^_>rLk8a#+UkuIHISj`Ue&f*ku{Cz? zBrK-$`r_!4P9A%kzB0U`yWOr~wDC$7>$H&?d&BCe8JT`|&CCJ3BD>F$!HK$&9l4QK zgMqTK6`3@0nQlTA)rk>>mkMnj<;HC#E{RIV{r%jbSD1*V;gdLV%?uKdK$aJ-nKWGi zQ_S^lPpq`;a^{vEUlI$A{xhK(Rq&lX^DWPKSr!1xOwlr%L?Ej@YH=4^bg!Kv(NEW| zSc2Gv5IQgG!9aVhtSG~v4*J6$eNoxVpav!4u%UEw4Mq_F49v5=3d^P2R8hkP@Ul%9 zG61Poq$~jlR*E&F z3+}e8!GCH?6DYbk%R0&6(KR%`M0dYs@X9Td^^D zyKP3pT-$bOs-edetl%80APUfO{K3^$fR-s^qvKKJta09LwOrcr-i=1iLG3QH3g%eL zuWbUxk~PzuYrD!Mt{kj5`$(zRdTVZYb?6Qp%Z++$Nx;OQO! zZ;eXj63~X+7OM@QRn>poM_|LbTve&61%N8C4Y2ejfR12?YpH0ZC9?p#KF(WPX~QVc zjtucnp%^v*W-GN1ZJe#7I~BISBM+sTT2NhQ3E86=_uA{R?MV82W;@J&yhd!2bwen{ zM7N{1C5SPQ<51MFy-^=b%FvYER%CN)iX1c{{y|5Kn8`FUku9py7;BC8iFRfL^)sPJ zP-O-cGb(jUw|r3m&EiDmW#*$a_EF^=@ePpZyv}?zvQ-q}#LAYvEdbe~_p!ERQDs#t zZGciNT$yDqA9me*citW9K}`nDc(L}G-CVjU)aA|q5H(3$ya!~jeY+=+ja3M!P5M;r z8@qao-NH3$*31f=k*@TJlF<#~KTLymwqz7BlPO~(z5 zQLwf_36P)(F>C=qIG@IOs@iJPHP8{o#-Im3Um4e*5x59q7_9~EhZCUvjvwTIor8mj{z`2OsB&Ke1ffQ&gmf8H>20v9*8mTsEcpc7+K ziT%{X%@|C@5b`6pkxeb8S5%nTmN3KO+(npYapizty0SzuOiHVrhAg6lfqRS~#~+M~ zFe~uJWfq1PthX$84Fi)*eDzfYZ4*9oQ^D6!HIoL2nxY)ofpfQ#ESV`?(u}L38dam) zgQ|1rh+{Cw%)(Zc^?I(nGW6=Hr_{#H4cF`TJb{cq%WITOC8xKO5$}Q7Yuk2Ei(`#R zf{Df&(+LrpJJyM{VR_vKh$&iPpr4zSSXg#6P^Q&Z5qx8DNxxaHFcPs{Kq-P{W*4 z<$i0Yu8qfH`~sXLnLt9Tj=)ug&+)r*yntU-cV&j_;^(& zPzgbK^4F_TcrEi7vkkxIQ|0=7xY=-iFdCrPRTa&s2>UAPi*vaCihu_ztmJjBE4KaEukE$hY4cP6r;>d36xUzrCD3r) zOI`KMv1jyiThHmJlj?Y*2C)%9%nfbTt)e_nO)GJ6HiAkFxPc!mfqogmEfL3f1MG@& zc);NOGC(9#fi=WuI*JGz_^&jSEEH=RaY}@M8$3APUilh`7V&4I!$n{}8fYo}gqJ0a>uH001v7_QqAK=)9 zC042gz>wqsF-U)ibw$?|Nj_R-F)S8nOHKSxaTs(y7C zt+hqwX^mL`mJffpn6M3)Z(u(Fx&kN`pejpPoS-bkDk~iTErErW0_-+1FD!j$*jKf2 z45-c_08PLQGi66~;}q4%exDqN>DL)SBz{rtEu7wKud_D22>Oo1zhhc)cK@tlh<*BW zYBn!ivbKzLHrI(#150d}!p-2~D)zA-`51E*NLQwjk77p|WAO(D&{sY(+F0kn^n+)? zf3||wsb!}LbHS2qf%dH_74R*%$TXY<)NM^{prq=;X{g@-FazZBRg@K}DjE^UmZYq7 z)y$)QR2Jp!D#6U1X>?q%FjHk8&)m^BLAC7w)GjH1{+aWtcev+Is*@t7l(+!)(pK$8 z+W}+~{}=`uq#_UvT2mdZxC8;e1xoQiH&|n^7R>NTW#Ua``=yFHpb=qNBw&jpSRDx@ zeuD9m0;FJ|sT81+KzOH&o4~KemVjnd6@f|$^jD#wwQ?`w-ptU!Vl z=0jxVJQ&@I`W^wS!o`#T<`Um2VM-RGkt!l=^KX!=0sv1+vGh6My#W|D)DELue)FSbTyxlp)hYoW-Sxf}L|ZeKTqjPxEpcKn1 z5>6j=<}qO48&g{VF#s5b5%e0>;OZ@i(I$pU17=Bz0R)jP!9$`!VN6A&86BBy273^v z04-A0!EhA9I&u=(NB}WrQr}!Y4?Zvsi5kdA4{960sm@Y36)rTsM)AoB$O#Qu1*?tc z^)6Uo0&4ZJ1DFO{k=B>nrWTcW&}3gp@Y3P6Ah_Y$N?2G0K@5E=z(0_!F9C=-?i(fx zh8SYwNcHjPNfw*g{@yYcAu$fU!} z6sfj4Hc1ZP(nXTEhHqg8rkKnPP&ti+%pYV>Wx3KuM|6wnva;6F0fxVlbKGgk#0~q) zGkVNMU?6jnLZBDR(s~Qsk&0$i!0gH`eh~+b3>^I>_9V3NBzuBaeLwK6s0l1|eyh1< znnm9qR>wfMT-MA;e(~5v4WFOKt{wb8EHa9hz4`bWw|j;Ia4|Gr8FtT9RAX9ET~YQ@ zov~wo@bg&RgjGdgQetJLkoZlEkp$wi<++v^?;-440F5SmQYnD0K>)*kj98%?!B(pX zpk!5mBrW@VpcvT?FBN0A%Pz~l+S(#8xnQ{0b(jU9LUT%ZOFzX*k1aEKW5O}@LW6Bu zE`V4aG7&(GpPLX6!axrY?TX$ydf9MUiVFZr9Y{}^4A>?}RRFA9wh3w_BlT5={^sB@ za@@26$XC!hgHJJ!WAYuUB;DAL0E{4HxdyGVsoW6YIhundH$^kDe>Xp&+_!vtSZ~If zZ_6j9YM&NI?feDXtn|d|EMsqK#>}s%&D6Hvm)#=$1re3&0GTF0e^kI>D&8Rvyg1 z2n5DXo7z=?-JUyS{xY^X=L#}_+X(vsVrq~VZU7QxXl*)j1*T#%%d@Q{Z+3j%P1<=j zh+(Vc)efud3J90C<^K4}ad-CISx*JZ>?8SKMF!eR4MTqi-NmN?kwIG-Q$Z&!VERrTH6DFP#P_xX{;Q?l(7U?^~ zt7ivl9q#}R;oC@@xp&liCW?%=o%1z~#R$2{aK)ej+$#7hb zlV!L!c^rw=mM65(0B#^k3j8aFIA1prk7C*G;QY7YOB;e_#BaAjXA;a-o>z{>81T!T zR3Z8BoiyX=z0^2+?e)?;*E}v820qY7CP5wqvQbkfS)$u-+OTWACV0G|ZQx%Es$6fY z52~;Y3K6b~*fmXIn?5Pq@Mbk_q&hD5O?buHn1W3JRtipsNq-W67~S2JF|eaRz_{9J z!C4z5jL?c>AXChU2OtCBF_0OAz8>N80pwI4Um9q>Rxrc>Xi;QGI*Kz=k0w)j+K$R$ zFDi;h3YU#CS4ifMo*S&}cU&aR2u3cDK6B!tKV9cw+?$iHZM$PZwBG@2lT=jKLJF#V ztIAx*{$^jY)@uNifp9i4EG&lDD@G?47(}ViitzTR=HLHTb?U1hQ~#;@B5tb#H6Wpm|14Uif|7b_*>Ut5_ty!VzNLQUPbuHRC7+jQJ{P>fRA!bIr=R>0-xE5 zRaxUFYgjJS$hLf9jL&LEIeE3$_SzSq`8qG?ILrOGx--`hKlkEuy3uKvm5qT;i#1G< zHe6F9lLNxKHnEwBEL>PgY;>BLDupj1g;R5ykdU5$N9~p>iNe$slRFXO_Mx~r$f@zJ^$D) zw7W8U&{|pcT*IgQIap>4C0$dYKG)$xO7*}s_j*cqx{4kz1F5YGMj*l}gC!QFCIoqi zU(5@gn5ZxEw$M_{QLN^hl3Mt#25>8`Zm6}3H`MhHUs2b7@mcjbMXSpPFrzi5nF9wF z7p$)#04s&{HG+0H1c-r$$2PbO+{0qP04v<%O#s{s=0p>}_~NE24n)c@%~p?a*;1|# zFjF(Zc4V5cMm;&Ge4IQH@;~00Eq|}=wJ$`QEbGx;GI|`pQ0G;A`aJwd&#;1ux-q(; zk6e#c?~zC^uE%C&)YIK0F-6?6E_N}zS5ZzFfjJ?%@y? zTpYtki0v3YvUtd#4_Ip!Tt^Df%ABOlV%jcN4e*<|@7S&u@x+)71>jo2O4CbyWtgM! zg}OK>!}7|hY@R7C&_U<6h@&J*OaTVyE&^DTZ>A4Zbn5}r5U}*v{mPp BAPKNXC&B9%2=3YBbo!Y+L4D-GS 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�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 F{{et{IHv#r literal 0 HcmV?d00001 diff --git a/examples/helia-remix/tailwind.config.ts b/examples/helia-remix/tailwind.config.ts new file mode 100644 index 00000000..5f06ad4b --- /dev/null +++ b/examples/helia-remix/tailwind.config.ts @@ -0,0 +1,22 @@ +import type { Config } from "tailwindcss"; + +export default { + content: ["./app/**/{**,.client,.server}/**/*.{js,jsx,ts,tsx}"], + theme: { + extend: { + fontFamily: { + sans: [ + "Inter", + "ui-sans-serif", + "system-ui", + "sans-serif", + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol", + "Noto Color Emoji", + ], + }, + }, + }, + plugins: [], +} satisfies Config; diff --git a/examples/helia-remix/tsconfig.json b/examples/helia-remix/tsconfig.json new file mode 100644 index 00000000..9d87dd37 --- /dev/null +++ b/examples/helia-remix/tsconfig.json @@ -0,0 +1,32 @@ +{ + "include": [ + "**/*.ts", + "**/*.tsx", + "**/.server/**/*.ts", + "**/.server/**/*.tsx", + "**/.client/**/*.ts", + "**/.client/**/*.tsx" + ], + "compilerOptions": { + "lib": ["DOM", "DOM.Iterable", "ES2022"], + "types": ["@remix-run/node", "vite/client"], + "isolatedModules": true, + "esModuleInterop": true, + "jsx": "react-jsx", + "module": "ESNext", + "moduleResolution": "Bundler", + "resolveJsonModule": true, + "target": "ES2022", + "strict": true, + "allowJs": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "baseUrl": ".", + "paths": { + "~/*": ["./app/*"] + }, + + // Vite takes care of building everything, not tsc. + "noEmit": true + } +} diff --git a/examples/helia-remix/vite.config.ts b/examples/helia-remix/vite.config.ts new file mode 100644 index 00000000..e4e8cefc --- /dev/null +++ b/examples/helia-remix/vite.config.ts @@ -0,0 +1,24 @@ +import { vitePlugin as remix } from "@remix-run/dev"; +import { defineConfig } from "vite"; +import tsconfigPaths from "vite-tsconfig-paths"; + +declare module "@remix-run/node" { + interface Future { + v3_singleFetch: true; + } +} + +export default defineConfig({ + plugins: [ + remix({ + future: { + v3_fetcherPersist: true, + v3_relativeSplatPath: true, + v3_throwAbortReason: true, + v3_singleFetch: true, + v3_lazyRouteDiscovery: true, + }, + }), + tsconfigPaths(), + ], +}); From 285ab33f77312d440564c5a2133121ee825b0da7 Mon Sep 17 00:00:00 2001 From: Paschal <58183764+paschal533@users.noreply.github.com> Date: Thu, 5 Dec 2024 17:28:31 +0100 Subject: [PATCH 2/9] Updated ci.yml --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c3000c36..7cb39ae3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,6 +30,7 @@ jobs: - helia-nestjs - helia-nextjs - helia-parcel + - helia-remix - helia-script-tag - helia-ts-node - helia-typescript @@ -94,6 +95,7 @@ jobs: - helia-jest-typescript - helia-nestjs - helia-parcel + - helia-remix - helia-nextjs - helia-script-tag - helia-ts-node From 8cf013a71b6a8ba00dacc8c540bee67879fb5b0f Mon Sep 17 00:00:00 2001 From: Paschal <58183764+paschal533@users.noreply.github.com> Date: Sun, 2 Feb 2025 21:00:54 +0100 Subject: [PATCH 3/9] Update examples/helia-remix/components/ipfs.tsx Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> --- examples/helia-remix/components/ipfs.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/helia-remix/components/ipfs.tsx b/examples/helia-remix/components/ipfs.tsx index c0c552f7..185dddef 100644 --- a/examples/helia-remix/components/ipfs.tsx +++ b/examples/helia-remix/components/ipfs.tsx @@ -20,7 +20,7 @@ const IpfsComponent: React.FC = () => { const init = async () => { if (helia) return - const heliaNode = (await createHelia()) as HeliaNode + const heliaNode = await createHelia() const nodeId = heliaNode.libp2p.peerId.toString() const nodeIsOnline = heliaNode.libp2p.status === 'started' From d34d62592ea68fa9dd404e6405f4e56671496b18 Mon Sep 17 00:00:00 2001 From: Paschal <58183764+paschal533@users.noreply.github.com> Date: Sun, 2 Feb 2025 21:01:11 +0100 Subject: [PATCH 4/9] Update examples/helia-remix/components/ipfs.tsx Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> --- examples/helia-remix/components/ipfs.tsx | 9 --------- 1 file changed, 9 deletions(-) diff --git a/examples/helia-remix/components/ipfs.tsx b/examples/helia-remix/components/ipfs.tsx index 185dddef..f08cd166 100644 --- a/examples/helia-remix/components/ipfs.tsx +++ b/examples/helia-remix/components/ipfs.tsx @@ -1,15 +1,6 @@ import { createHelia } from 'helia' import React, { useState, useEffect } from 'react' -// Define the types for the state variables -interface HeliaNode { - libp2p: { - peerId: { - toString: () => string - } - status: string - } -} const IpfsComponent: React.FC = () => { const [id, setId] = useState(null) From 99b87b148a7a6bf7bd305cdb951682846c367313 Mon Sep 17 00:00:00 2001 From: paschal533 Date: Wed, 5 Feb 2025 00:08:59 +0100 Subject: [PATCH 5/9] feat: add test and eslint --- examples/helia-remix/.eslintrc.cjs | 3 +- examples/helia-remix/__mocks__/helia.ts | 6 +++ .../__tests__/HeliaComponents.test.tsx | 24 ++++++++++ examples/helia-remix/app/entry.server.tsx | 2 +- examples/helia-remix/app/routes/_index.tsx | 6 +-- examples/helia-remix/components/helia.tsx | 45 ++++++++++++++++++ examples/helia-remix/components/ipfs.tsx | 39 --------------- examples/helia-remix/jest.setup.ts | 1 + examples/helia-remix/package.json | 35 +++++++++++++- examples/helia-remix/public/favicon.ico | Bin 16958 -> 194291 bytes examples/helia-remix/tsconfig.json | 5 +- 11 files changed, 118 insertions(+), 48 deletions(-) create mode 100644 examples/helia-remix/__mocks__/helia.ts create mode 100644 examples/helia-remix/__tests__/HeliaComponents.test.tsx create mode 100644 examples/helia-remix/components/helia.tsx delete mode 100644 examples/helia-remix/components/ipfs.tsx create mode 100644 examples/helia-remix/jest.setup.ts diff --git a/examples/helia-remix/.eslintrc.cjs b/examples/helia-remix/.eslintrc.cjs index 4f6f59ee..d438a591 100644 --- a/examples/helia-remix/.eslintrc.cjs +++ b/examples/helia-remix/.eslintrc.cjs @@ -22,7 +22,7 @@ module.exports = { ignorePatterns: ["!**/.server", "!**/.client"], // Base config - extends: ["eslint:recommended"], + extends: ["eslint:recommended", "ipfs"], overrides: [ // React @@ -70,6 +70,7 @@ module.exports = { "plugin:@typescript-eslint/recommended", "plugin:import/recommended", "plugin:import/typescript", + "ipfs" ], }, diff --git a/examples/helia-remix/__mocks__/helia.ts b/examples/helia-remix/__mocks__/helia.ts new file mode 100644 index 00000000..689743d6 --- /dev/null +++ b/examples/helia-remix/__mocks__/helia.ts @@ -0,0 +1,6 @@ +export const createHelia = jest.fn().mockResolvedValue({ + libp2p: { + peerId: { toString: () => 'mock-peer-id' }, + status: 'started' + } + }); \ No newline at end of file diff --git a/examples/helia-remix/__tests__/HeliaComponents.test.tsx b/examples/helia-remix/__tests__/HeliaComponents.test.tsx new file mode 100644 index 00000000..df339123 --- /dev/null +++ b/examples/helia-remix/__tests__/HeliaComponents.test.tsx @@ -0,0 +1,24 @@ +import { initHelia } from "../components/helia"; + +describe('initialize Helia', () => { + it('checks if HeliaNode has started', async () => { + + const { heliaNode } = await initHelia(); + + expect(heliaNode.libp2p.status).toEqual('started'); + }) + + it('checks if there is a nodeId', async () => { + + const { nodeId } = await initHelia(); + + expect(nodeId).toEqual('mock-peer-id'); + }) + + it('checks if nodeId is online', async () => { + + const { nodeIsOnline } = await initHelia(); + + expect(nodeIsOnline).toBe(true); + }) +}) \ No newline at end of file diff --git a/examples/helia-remix/app/entry.server.tsx b/examples/helia-remix/app/entry.server.tsx index 45db3229..2dc2e5a4 100644 --- a/examples/helia-remix/app/entry.server.tsx +++ b/examples/helia-remix/app/entry.server.tsx @@ -137,4 +137,4 @@ function handleBrowserRequest( setTimeout(abort, ABORT_DELAY); }); -} +} \ No newline at end of file diff --git a/examples/helia-remix/app/routes/_index.tsx b/examples/helia-remix/app/routes/_index.tsx index 6bfee4f5..09cf071e 100644 --- a/examples/helia-remix/app/routes/_index.tsx +++ b/examples/helia-remix/app/routes/_index.tsx @@ -1,5 +1,5 @@ import type { MetaFunction } from "@remix-run/node"; -import IpfsComponent from "../../components/ipfs"; +import HeliaComponent from "../../components/helia"; export const meta: MetaFunction = () => { return [ @@ -14,7 +14,7 @@ export default function Index() {

    - Welcome to Remix + Welcome to Helia Remix

    - +
    diff --git a/examples/helia-remix/components/helia.tsx b/examples/helia-remix/components/helia.tsx new file mode 100644 index 00000000..7cd6b84e --- /dev/null +++ b/examples/helia-remix/components/helia.tsx @@ -0,0 +1,45 @@ +import React, { useState, useEffect } from 'react' +import { createHelia } from 'helia' + +export const initHelia = async () => { + + const heliaNode = await createHelia() + + const nodeId = heliaNode.libp2p.peerId.toString() + const nodeIsOnline = heliaNode.libp2p.status === 'started' + + return { heliaNode, nodeId, nodeIsOnline } +} + +const HeliaComponent: React.FC = () => { + const [id, setId] = useState(null) + //@ts-expect-error : Type 'null' is not assignable to type 'HeliaNode'. + const [helia, setHelia] = useState(null) + const [isOnline, setIsOnline] = useState(false) + + useEffect(() => { + if (helia) return + + const initHeliaNode = async () => { + const { heliaNode, nodeId, nodeIsOnline } = await initHelia() + setId(nodeId); + setHelia(heliaNode); + setIsOnline(nodeIsOnline); + } + + initHeliaNode() + }, [helia]) + + if (!helia || !id) { + return

    Starting Helia...

    + } + + return ( +
    +

    ID: {id}

    +

    Status: {isOnline ? 'Online' : 'Offline'}

    +
    + ) +} + +export default HeliaComponent diff --git a/examples/helia-remix/components/ipfs.tsx b/examples/helia-remix/components/ipfs.tsx deleted file mode 100644 index f08cd166..00000000 --- a/examples/helia-remix/components/ipfs.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { createHelia } from 'helia' -import React, { useState, useEffect } from 'react' - - -const IpfsComponent: React.FC = () => { - const [id, setId] = useState(null) - const [helia, setHelia] = useState(null) - const [isOnline, setIsOnline] = useState(false) - - useEffect(() => { - const init = async () => { - if (helia) return - - const heliaNode = await createHelia() - - const nodeId = heliaNode.libp2p.peerId.toString() - const nodeIsOnline = heliaNode.libp2p.status === 'started' - - setHelia(heliaNode) - setId(nodeId) - setIsOnline(nodeIsOnline) - } - - init() - }, [helia]) - - if (!helia || !id) { - return

    Starting Helia...

    - } - - return ( -
    -

    ID: {id}

    -

    Status: {isOnline ? 'Online' : 'Offline'}

    -
    - ) -} - -export default IpfsComponent diff --git a/examples/helia-remix/jest.setup.ts b/examples/helia-remix/jest.setup.ts new file mode 100644 index 00000000..331666ce --- /dev/null +++ b/examples/helia-remix/jest.setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; \ No newline at end of file diff --git a/examples/helia-remix/package.json b/examples/helia-remix/package.json index b797b895..ed8e0ab1 100644 --- a/examples/helia-remix/package.json +++ b/examples/helia-remix/package.json @@ -8,19 +8,26 @@ "dev": "remix vite:dev", "lint": "eslint --ignore-path .gitignore --cache --cache-location ./node_modules/.cache/eslint .", "start": "remix-serve ./build/server/index.js", - "typecheck": "tsc" + "typecheck": "tsc", + "test": "jest", + "test:watch": "jest --watch" }, "dependencies": { "@remix-run/node": "^2.14.0", "@remix-run/react": "^2.14.0", "@remix-run/serve": "^2.14.0", + "eslint-config-ipfs": "^7.0.6", "helia": "^5.1.1", "isbot": "^4.1.0", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "vitest": "^3.0.5" }, "devDependencies": { "@remix-run/dev": "^2.14.0", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.2.0", + "@types/jest": "^29.5.14", "@types/react": "^18.2.20", "@types/react-dom": "^18.2.7", "@typescript-eslint/eslint-plugin": "^6.7.4", @@ -32,13 +39,37 @@ "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", "postcss": "^8.4.38", "tailwindcss": "^3.4.4", + "ts-jest": "^29.2.5", "typescript": "^5.1.6", "vite": "^5.1.0", "vite-tsconfig-paths": "^4.2.1" }, "engines": { "node": ">=20.0.0" + }, + "jest": { + "testEnvironment": "jsdom", + "transform": { + "^.+\\.(ts|tsx)$": "ts-jest" + }, + "moduleNameMapper": { + "\\.(css|less|scss|sass)$": "identity-obj-proxy", + "^helia$": "/node_modules/helia" + }, + "setupFilesAfterEnv": [ + "/jest.setup.ts" + ], + "moduleDirectories": [ + "node_modules" + ], + "testMatch": [ + "**/__tests__/**/*.[jt]s?(x)", + "**/?(*.)+(spec|test).[jt]s?(x)" + ] } } diff --git a/examples/helia-remix/public/favicon.ico b/examples/helia-remix/public/favicon.ico index 8830cf6821b354114848e6354889b8ecf6d2bc61..3580aaf4edb72b7d94efc403eb2ed2df059bccd9 100644 GIT binary patch literal 194291 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

    mWSq8OY_kV&K%2tiNX2&r-$Rl-45+-l` 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 literal 16958 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 EKbET!0{{R3 diff --git a/examples/helia-remix/tsconfig.json b/examples/helia-remix/tsconfig.json index 9d87dd37..759deabf 100644 --- a/examples/helia-remix/tsconfig.json +++ b/examples/helia-remix/tsconfig.json @@ -5,11 +5,12 @@ "**/.server/**/*.ts", "**/.server/**/*.tsx", "**/.client/**/*.ts", - "**/.client/**/*.tsx" + "**/.client/**/*.tsx", + "**/__tests__/**/*" ], "compilerOptions": { "lib": ["DOM", "DOM.Iterable", "ES2022"], - "types": ["@remix-run/node", "vite/client"], + "types": ["@remix-run/node", "vite/client", "jest", "@testing-library/jest-dom", "node"], "isolatedModules": true, "esModuleInterop": true, "jsx": "react-jsx", From bbfcea3b5bc3d4cfe4a18b2c4401f08db1144013 Mon Sep 17 00:00:00 2001 From: paschal533 Date: Thu, 6 Feb 2025 14:46:48 +0100 Subject: [PATCH 6/9] refactor: remove entry.server.tsx and entry.client.tsx files --- examples/helia-remix/app/entry.client.tsx | 18 --- examples/helia-remix/app/entry.server.tsx | 140 --------------------- examples/helia-remix/app/routes/_index.tsx | 4 +- examples/helia-remix/package.json | 4 +- 4 files changed, 5 insertions(+), 161 deletions(-) delete mode 100644 examples/helia-remix/app/entry.client.tsx delete mode 100644 examples/helia-remix/app/entry.server.tsx diff --git a/examples/helia-remix/app/entry.client.tsx b/examples/helia-remix/app/entry.client.tsx deleted file mode 100644 index 94d5dc0d..00000000 --- a/examples/helia-remix/app/entry.client.tsx +++ /dev/null @@ -1,18 +0,0 @@ -/** - * By default, Remix will handle hydrating your app on the client for you. - * You are free to delete this file if you'd like to, but if you ever want it revealed again, you can run `npx remix reveal` ✨ - * For more information, see https://remix.run/file-conventions/entry.client - */ - -import { RemixBrowser } from "@remix-run/react"; -import { startTransition, StrictMode } from "react"; -import { hydrateRoot } from "react-dom/client"; - -startTransition(() => { - hydrateRoot( - document, - - - - ); -}); diff --git a/examples/helia-remix/app/entry.server.tsx b/examples/helia-remix/app/entry.server.tsx deleted file mode 100644 index 2dc2e5a4..00000000 --- a/examples/helia-remix/app/entry.server.tsx +++ /dev/null @@ -1,140 +0,0 @@ -/** - * By default, Remix will handle generating the HTTP Response for you. - * You are free to delete this file if you'd like to, but if you ever want it revealed again, you can run `npx remix reveal` ✨ - * For more information, see https://remix.run/file-conventions/entry.server - */ - -import { PassThrough } from "node:stream"; - -import type { AppLoadContext, EntryContext } from "@remix-run/node"; -import { createReadableStreamFromReadable } from "@remix-run/node"; -import { RemixServer } from "@remix-run/react"; -import { isbot } from "isbot"; -import { renderToPipeableStream } from "react-dom/server"; - -const ABORT_DELAY = 5_000; - -export default function handleRequest( - request: Request, - responseStatusCode: number, - responseHeaders: Headers, - remixContext: EntryContext, - // This is ignored so we can keep it in the template for visibility. Feel - // free to delete this parameter in your app if you're not using it! - // eslint-disable-next-line @typescript-eslint/no-unused-vars - loadContext: AppLoadContext -) { - return isbot(request.headers.get("user-agent") || "") - ? handleBotRequest( - request, - responseStatusCode, - responseHeaders, - remixContext - ) - : handleBrowserRequest( - request, - responseStatusCode, - responseHeaders, - remixContext - ); -} - -function handleBotRequest( - request: Request, - responseStatusCode: number, - responseHeaders: Headers, - remixContext: EntryContext -) { - return new Promise((resolve, reject) => { - let shellRendered = false; - const { pipe, abort } = renderToPipeableStream( - , - { - onAllReady() { - shellRendered = true; - const body = new PassThrough(); - const stream = createReadableStreamFromReadable(body); - - responseHeaders.set("Content-Type", "text/html"); - - resolve( - new Response(stream, { - headers: responseHeaders, - status: responseStatusCode, - }) - ); - - pipe(body); - }, - onShellError(error: unknown) { - reject(error); - }, - onError(error: unknown) { - responseStatusCode = 500; - // Log streaming rendering errors from inside the shell. Don't log - // errors encountered during initial shell rendering since they'll - // reject and get logged in handleDocumentRequest. - if (shellRendered) { - console.error(error); - } - }, - } - ); - - setTimeout(abort, ABORT_DELAY); - }); -} - -function handleBrowserRequest( - request: Request, - responseStatusCode: number, - responseHeaders: Headers, - remixContext: EntryContext -) { - return new Promise((resolve, reject) => { - let shellRendered = false; - const { pipe, abort } = renderToPipeableStream( - , - { - onShellReady() { - shellRendered = true; - const body = new PassThrough(); - const stream = createReadableStreamFromReadable(body); - - responseHeaders.set("Content-Type", "text/html"); - - resolve( - new Response(stream, { - headers: responseHeaders, - status: responseStatusCode, - }) - ); - - pipe(body); - }, - onShellError(error: unknown) { - reject(error); - }, - onError(error: unknown) { - responseStatusCode = 500; - // Log streaming rendering errors from inside the shell. Don't log - // errors encountered during initial shell rendering since they'll - // reject and get logged in handleDocumentRequest. - if (shellRendered) { - console.error(error); - } - }, - } - ); - - setTimeout(abort, ABORT_DELAY); - }); -} \ No newline at end of file diff --git a/examples/helia-remix/app/routes/_index.tsx b/examples/helia-remix/app/routes/_index.tsx index 09cf071e..47f6dae9 100644 --- a/examples/helia-remix/app/routes/_index.tsx +++ b/examples/helia-remix/app/routes/_index.tsx @@ -3,8 +3,8 @@ import HeliaComponent from "../../components/helia"; export const meta: MetaFunction = () => { return [ - { title: "New Remix App" }, - { name: "description", content: "Welcome to Remix!" }, + { title: "New Helia Remix App" }, + { name: "description", content: "Welcome to Helia Remix!" }, ]; }; diff --git a/examples/helia-remix/package.json b/examples/helia-remix/package.json index ed8e0ab1..74bedc33 100644 --- a/examples/helia-remix/package.json +++ b/examples/helia-remix/package.json @@ -12,11 +12,13 @@ "test": "jest", "test:watch": "jest --watch" }, + "eslintConfig": { + "extends": "ipfs" + }, "dependencies": { "@remix-run/node": "^2.14.0", "@remix-run/react": "^2.14.0", "@remix-run/serve": "^2.14.0", - "eslint-config-ipfs": "^7.0.6", "helia": "^5.1.1", "isbot": "^4.1.0", "react": "^18.2.0", From 4a3ecff6dbe9f205c150f6b505d553792e6d23fe Mon Sep 17 00:00:00 2001 From: Paschal <58183764+paschal533@users.noreply.github.com> Date: Wed, 12 Feb 2025 00:03:23 +0100 Subject: [PATCH 7/9] Update examples/helia-remix/components/helia.tsx Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> --- examples/helia-remix/components/helia.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/helia-remix/components/helia.tsx b/examples/helia-remix/components/helia.tsx index 7cd6b84e..9de1f109 100644 --- a/examples/helia-remix/components/helia.tsx +++ b/examples/helia-remix/components/helia.tsx @@ -18,7 +18,7 @@ const HeliaComponent: React.FC = () => { const [isOnline, setIsOnline] = useState(false) useEffect(() => { - if (helia) return + if (helia != null) return const initHeliaNode = async () => { const { heliaNode, nodeId, nodeIsOnline } = await initHelia() From ca81e1747802b93cb4f0cbc72f8d5171fa6986bf Mon Sep 17 00:00:00 2001 From: Paschal <58183764+paschal533@users.noreply.github.com> Date: Wed, 12 Feb 2025 00:03:38 +0100 Subject: [PATCH 8/9] Update examples/helia-remix/components/helia.tsx Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> --- examples/helia-remix/components/helia.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/helia-remix/components/helia.tsx b/examples/helia-remix/components/helia.tsx index 9de1f109..20e952ea 100644 --- a/examples/helia-remix/components/helia.tsx +++ b/examples/helia-remix/components/helia.tsx @@ -30,7 +30,7 @@ const HeliaComponent: React.FC = () => { initHeliaNode() }, [helia]) - if (!helia || !id) { + if (helia == null || id == null) { return

    Starting Helia...

    } From 853d993a0127e0f2ffcbf9215df839f3e4cec30e Mon Sep 17 00:00:00 2001 From: Paschal <58183764+paschal533@users.noreply.github.com> Date: Wed, 12 Feb 2025 00:17:50 +0100 Subject: [PATCH 9/9] Update ci.yml --- .github/workflows/ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c3000c36..ea0266b6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,6 +30,8 @@ jobs: - helia-nestjs - helia-nextjs - helia-parcel + - helia-remix + - helia-remote-pinning - helia-script-tag - helia-ts-node - helia-typescript @@ -93,8 +95,10 @@ jobs: - helia-jest - helia-jest-typescript - helia-nestjs - - helia-parcel - helia-nextjs + - helia-parcel + - helia-remix + - helia-remote-pinning - helia-script-tag - helia-ts-node - helia-typescript