mirror of
				https://github.com/uetchy/namae.git
				synced 2025-10-31 22:00:42 +09:00 
			
		
		
		
	
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Contribution Guide
 | |
| 
 | |
| ## Setup environment
 | |
| 
 | |
| Install `vercel` for development server:
 | |
| 
 | |
| ```
 | |
| npm i -g vercel
 | |
| ```
 | |
| 
 | |
| then install deps and fire up dev server.
 | |
| 
 | |
| ```
 | |
| yarn install
 | |
| vc dev
 | |
| ```
 | |
| 
 | |
| ## Add new provider
 | |
| 
 | |
| Create `src/components/cards/providers/<NewCard>.tsx`. Here is the example card that checks if specified repository on GitHub is available.
 | |
| 
 | |
| ```jsx
 | |
| import React from 'react';
 | |
| import { useTranslation } from 'react-i18next';
 | |
| import { FaGithub } from 'react-icons/fa';
 | |
| 
 | |
| import { Card, Repeater, DedicatedAvailability } from '../core';
 | |
| 
 | |
| const GithubCard: React.FC<{ query: string }> = ({ name }) => {
 | |
|   const { t } = useTranslation();
 | |
|   const lowerCase = name.toLowerCase();
 | |
| 
 | |
|   const names = [name];
 | |
|   const moreNames = [
 | |
|     `${lowerCase}hq`,
 | |
|     `${lowerCase}-team`,
 | |
|     `${lowerCase}-org`,
 | |
|     `${lowerCase}-js`,
 | |
|   ];
 | |
| 
 | |
|   return (
 | |
|     <Card title={t('providers.github')}>
 | |
|       <Repeater items={names} moreItems={moreNames}>
 | |
|         {(name) => (
 | |
|           <DedicatedAvailability
 | |
|             name={name}
 | |
|             service="github" // route to http://namae.dev/api/services/github/<query> which is /api/services/github/[query].ts in the source
 | |
|             link={`https://github.com/${name}`}
 | |
|             prefix="github.com/"
 | |
|             icon={<FaGithub />}
 | |
|           />
 | |
|         )}
 | |
|       </Repeater>
 | |
|     </Card>
 | |
|   );
 | |
| };
 | |
| ```
 | |
| 
 | |
| and add the card to `src/components/cards/index.tsx`:
 | |
| 
 | |
| ```jsx
 | |
| import NewCard from './providers/NewCard';
 | |
| ```
 | |
| 
 | |
| ```patch
 | |
| <>
 | |
|   <Cards>
 | |
|     <GithubCard name={query} />
 | |
|     <DomainCard name={query} />
 | |
|     <TwitterCard name={query} />
 | |
|     <HomebrewCard name={query} />
 | |
|     <NpmCard name={query} />
 | |
|     <PypiCard name={query} />
 | |
|     <CratesioCard name={query} />
 | |
|     <JsOrgCard name={query} />
 | |
|     <SlackCard name={query} />
 | |
|     <S3Card name={query} />
 | |
| +   <NewCard name={query} />
 | |
|   </Cards>
 | |
| </>
 | |
| ```
 | |
| 
 | |
| ### ExistentialAvailability
 | |
| 
 | |
| `ExistentialAvailability` check if the response from passed URL returns `404` or not.
 | |
| For example, `<ExistentialAvailability target="https://formulae.brew.sh/api/formula/git.json" />` will send a request to `target` and see if it returns with 404. For security reasons, `target` must send back `Access-Control-Allow-Origin: *` header for bridging across cross-site requests. If they don't support `Access-Control-Allow-Origin`, you might want to use `DedicatedAvailability` for dedicated response handling.
 | |
| 
 | |
| ### DedicatedAvailability
 | |
| 
 | |
| `DedicatedAvailability` is for interacting with defined API endpoint to check availability.
 | |
| For example, `<DedicatedAvailability service="<service>" />` will send a request to `https://namae.dev/availability/<service>/<query>` which is routed to `/api/services/<service>.js` in the repo.
 |