Skip to content

Commit 44a0bb2

Browse files
authored
Merge pull request #15 from frouriojs/chore/merge_upstream
merge upstream (2023-03-24)
2 parents 8bb8c38 + 70ed137 commit 44a0bb2

File tree

14 files changed

+463
-161
lines changed

14 files changed

+463
-161
lines changed

docs/guide/index.mdx

Lines changed: 77 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,82 @@ title: ガイド
44
---
55

66
import DocCardList from '@theme/DocCardList';
7+
import DocPageCard from '@site/src/components/DocPageCard';
8+
import DocPageCardWrapper from '@site/src/components/DocPageCardWrapper';
79

8-
Frourio 自体の機能ではないものも含む、Frourio を使用した実用的なアプリケーションのための事例集です。
10+
Frourio 自体の機能ではないものも含む、frourio を使用した実用的なアプリケーションのための事例集です。
911

10-
<DocCardList />
12+
## マイグレーション {#migration}
13+
14+
<DocPageCardWrapper>
15+
<DocPageCard
16+
title="マイグレーションガイド"
17+
href="/docs/guide/migration"
18+
description="特別な注意を要する frourio のアップデート"
19+
/>
20+
</DocPageCardWrapper>
21+
22+
## {#examples}
23+
24+
<DocPageCardWrapper>
25+
<DocPageCard
26+
title="カスタムエントリーポイント"
27+
href="/docs/guide/entrypoint"
28+
description="デフォルトのサーバーエントリーポイントを変更する"
29+
/>
30+
<DocPageCard
31+
title="認証"
32+
href="/docs/guide/authentication"
33+
description="外部モジュールを用いた認証の例"
34+
/>
35+
<DocPageCard
36+
title="CORS / Helmet"
37+
href="/docs/guide/cors-helmet"
38+
description="CORS と helmet の外部モジュールを用いた例"
39+
/>
40+
<DocPageCard
41+
title="500 エラーハンドリング"
42+
href="/docs/guide/error-handling"
43+
description="fastify や express に備わった機能を用いて 500 エラーをハンドリングする"
44+
/>
45+
<DocPageCard
46+
title="依存性の注入"
47+
href="/docs/guide/dependency-injection"
48+
description="frourio で velona を利用する"
49+
/>
50+
</DocPageCardWrapper>
51+
52+
## 内部リンクへの型付与 {#typed-pages-path}
53+
54+
<DocPageCardWrapper>
55+
<DocPageCard
56+
title="Pathpida with Next.js"
57+
href="/docs/guide/pathpida/with-nextjs"
58+
description="Pathpida を導入しパスの参照を型安全にする"
59+
/>
60+
<DocPageCard
61+
title="Pathpida with Nuxt.js"
62+
href="/docs/guide/pathpida/with-nuxtjs"
63+
description="Pathpida を導入しパスの参照を型安全にする"
64+
/>
65+
</DocPageCardWrapper>
66+
67+
## デプロイ (CI/CD) {#deployments}
68+
69+
<DocPageCardWrapper>
70+
<DocPageCard
71+
title="継続的インテグレーション (CI)"
72+
href="/docs/guide/deployments/ci"
73+
description="frourio プロジェクトをテストするためのコマンドと GitHub Actions workflow の例"
74+
/>
75+
<DocPageCard
76+
title="クライアント静的ホスティング"
77+
href="/docs/guide/deployments/client"
78+
description="クライアントをデプロイするいくつかの例"
79+
/>
80+
<DocPageCard
81+
title="API サーバーホスティング"
82+
href="/docs/guide/deployments/server"
83+
description="サーバーをデプロイするいくつかの例"
84+
/>
85+
</DocPageCardWrapper>

docs/reference/index.mdx

Lines changed: 86 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,92 @@ id: index
33
title: リファレンス
44
---
55

6-
import DocCardList from '@theme/DocCardList';
6+
import DocPageCard from '@site/src/components/DocPageCard';
7+
import DocPageCardWrapper from '@site/src/components/DocPageCardWrapper';
78

89
Frourio における基本的な仕組みや仕様について説明します。
910

10-
<DocCardList />
11+
## create-frourio-app {#create-frourio-app}
12+
13+
<DocPageCardWrapper>
14+
<DocPageCard
15+
title="GUI によるセットアップ"
16+
href="/docs/reference/cfa/gui"
17+
description="create-frourio-app を GUI で用いて frourio プロジェクトをセットアップする手順"
18+
/>
19+
<DocPageCard
20+
title="CUI によるセットアップ"
21+
href="/docs/reference/cfa/cui"
22+
description="CUI での create-frourio-app の使い方と引数に渡す JSON のジェネレーター"
23+
/>
24+
</DocPageCardWrapper>
25+
26+
## Aspida {#aspida}
27+
28+
<DocPageCardWrapper>
29+
<DocPageCard
30+
title="Aspida"
31+
href="/docs/reference/aspida"
32+
description="frourio エコシステムにおける aspida の立ち位置"
33+
/>
34+
</DocPageCardWrapper>
35+
36+
## frourio でのコントローラー {#controller-in-frourio}
37+
38+
<DocPageCardWrapper>
39+
<DocPageCard
40+
title="ルーティング"
41+
href="/docs/reference/routing"
42+
description="frourio のルーティングシステム"
43+
/>
44+
<DocPageCard
45+
title="ハンドラー"
46+
href="/docs/reference/handler"
47+
description="HTTP リクエストを受け取り実際に処理する関数"
48+
/>
49+
<DocPageCard
50+
title="ライフサイクルとフック"
51+
href="/docs/reference/hooks"
52+
description="ライフサイクルと frourio が提供する fastify に似たフックについて"
53+
/>
54+
<DocPageCard
55+
title="AdditionalRequest"
56+
href="/docs/reference/additionalRequest"
57+
description="FastifyRequest や Request 型を拡張しフックとハンドラーの間で情報を保持する"
58+
/>
59+
<DocPageCard
60+
title="レスポンススキーマ"
61+
href="/docs/reference/responseSchema"
62+
description="レスポンスの JSON スキーマを定義することでサーバーを高速化するメソッド"
63+
/>
64+
</DocPageCardWrapper>
65+
66+
## バリデーション {#validation}
67+
68+
<DocPageCardWrapper>
69+
<DocPageCard
70+
title="自動バリデーション"
71+
href="/docs/reference/validation/automatic"
72+
description="frourio がすべての HTTP リクエストに対して自動的に行うバリデーション"
73+
/>
74+
<DocPageCard
75+
title="Zod"
76+
href="/docs/reference/validation/zod"
77+
description="Zod によるユーザー定義のバリデーションを使用する"
78+
/>
79+
<DocPageCard
80+
title="class-validator"
81+
href="/docs/reference/validation/class-validator"
82+
description="[非推奨] class-validator によるユーザー定義のバリデーションを使用する"
83+
/>
84+
</DocPageCardWrapper>
85+
86+
## CLI {#cli}
87+
88+
<DocPageCardWrapper>
89+
<DocPageCard
90+
title="コマンドラインインターフェース"
91+
href="/docs/reference/cli"
92+
description="frourio エコシステムの CLI ヘルプ"
93+
/>
94+
</DocPageCardWrapper>

docs/reference/routing.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ Frourio では、Next.js のようなファイルシステムに基づいた API
1616
| -------------------------------------------------- | :------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------: |
1717
| [**ハンドラー**](/docs/reference/handler) | <span class="badge badge--success">有効</span> | :x: |
1818
| [**フック**](/docs/reference/hooks) | <span class="badge badge--success">有効</span> | <span class="badge badge--success">有効</span> |
19-
| [**バリデーター**](/docs/reference/validation/zod) | <span class="badge badge--warning">制限つき</span> &ndash; `body``headers``query` のみ | <span class="badge badge--warning">制限つき</span> &ndash; `params` のみ |
2019
| [**スキーマ**](/docs/reference/responseSchema) | <span class="badge badge--success">有効</span> | :x: |
20+
| [**バリデーター**](/docs/reference/validation/zod) | <span class="badge badge--warning">制限つき</span> &ndash; `body``headers``query` のみ | <span class="badge badge--warning">制限つき</span> &ndash; `params` のみ |
2121

2222
## コントローラーレベル {#controller-level}
2323

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,13 @@
2323
"apexcharts": "^3.35.4",
2424
"clsx": "^1.2.1",
2525
"create-frourio-app": "^0.36.0",
26+
"dayjs": "^1.11.7",
2627
"markdown-it": "^13.0.1",
27-
"moment": "^2.29.4",
2828
"react": "^17.0.2",
2929
"react-apexcharts": "^1.4.0",
3030
"react-dom": "^17.0.2",
3131
"react-github-btn": "^1.3.0",
32+
"react-paginate": "^8.1.4",
3233
"twemoji": "^14.0.2"
3334
},
3435
"browserslist": {

sidebars.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ module.exports = {
1515
'reference/handler',
1616
'reference/hooks',
1717
'reference/additionalRequest',
18+
'reference/responseSchema',
1819
{
1920
バリデーション: [
2021
'reference/validation/automatic',
2122
'reference/validation/zod',
2223
'reference/validation/class-validator',
2324
],
2425
},
25-
'reference/responseSchema',
2626
'reference/cli',
2727
],
2828
},
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import React from 'react';
2+
import styles from './styles.module.css';
3+
import clsx from 'clsx';
4+
5+
export type Props = {
6+
title: string;
7+
description?: string;
8+
href: string;
9+
};
10+
11+
const DocPageCard: React.FC<Props> = ({ title, description, href }) => (
12+
<article className={clsx('card', styles.cardRoot)}>
13+
<a href={href} className={clsx('padding--md', styles.cardLink)}>
14+
<div className="card__header">
15+
<h3>{title}</h3>
16+
</div>
17+
{description && (
18+
<div className="card__body">
19+
<p>{description}</p>
20+
</div>
21+
)}
22+
</a>
23+
</article>
24+
);
25+
26+
export default DocPageCard;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
.cardLink {
2+
color: var(--ifm-color-emphasis-800);
3+
}
4+
5+
.cardLink:hover {
6+
color: var(--ifm-color-emphasis-700);
7+
text-decoration: none;
8+
}
9+
10+
.cardRoot {
11+
border: 1px solid var(--ifm-color-emphasis-200);
12+
}
13+
14+
.cardRoot:hover {
15+
border-color: var(--ifm-color-primary);
16+
}
17+
18+
.cardRoot p {
19+
font-size: 0.9rem;
20+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import React from 'react';
2+
import styles from './styles.module.css';
3+
4+
const DocPageCardWrapper: React.FC<{ children: React.ReactNode }> = ({ children }) => (
5+
<div className={styles.wrapper}>{children}</div>
6+
);
7+
8+
export default DocPageCardWrapper;
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.wrapper {
2+
display: grid;
3+
gap: 1rem;
4+
grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));
5+
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import React, { useState, useEffect } from 'react';
2+
import ReactPaginate from 'react-paginate';
3+
import Link from '@docusaurus/Link';
4+
import styles from './styles.module.css';
5+
import axios from 'axios';
6+
import dayjs from 'dayjs';
7+
import Markdown from '../../libs/markdown';
8+
import clsx from 'clsx';
9+
10+
type RepoKey =
11+
| 'frouriojs/frourio'
12+
| 'frouriojs/frourio-express'
13+
| 'frouriojs/create-frourio-app'
14+
| 'aspida/aspida';
15+
16+
export type Props = {
17+
repo: RepoKey;
18+
};
19+
20+
const ITEMS_PER_PAGE = 5;
21+
22+
const PagenatedReleases: React.FC<Props> = ({ repo }) => {
23+
const [releases, setReleases] = useState<Release[]>([]);
24+
const [currentPage, setCurrentPage] = useState(0);
25+
26+
useEffect(() => {
27+
const _f = async () => {
28+
const res = await axios.get<Release[]>(
29+
`https://api.github.com/repos/${repo}/releases?per_page=50`
30+
);
31+
setReleases(res.data);
32+
};
33+
_f();
34+
}, [setReleases]);
35+
36+
return (
37+
<div id="pagenatedReleases">
38+
{releases
39+
.slice(currentPage * ITEMS_PER_PAGE, (currentPage + 1) * ITEMS_PER_PAGE)
40+
.map((release, i) => (
41+
<Release release={release} key={i} />
42+
))}
43+
<ReactPaginate
44+
forcePage={currentPage}
45+
pageCount={Math.ceil(releases.length / ITEMS_PER_PAGE)}
46+
pageRangeDisplayed={window.innerWidth >= 600 ? 4 : 2}
47+
marginPagesDisplayed={window.innerWidth >= 600 ? 2 : 1}
48+
onPageChange={({ selected }) => {
49+
setCurrentPage(selected);
50+
window.scroll({ top: 250, behavior: 'smooth' });
51+
}}
52+
containerClassName={clsx('pagination', styles.pagenation)}
53+
pageClassName="pagination__item"
54+
activeClassName="pagination__item--active"
55+
previousClassName="pagination__item"
56+
nextClassName="pagination__item"
57+
breakClassName="pagination__item"
58+
pageLinkClassName="pagination__link"
59+
previousLinkClassName="pagination__link"
60+
nextLinkClassName="pagination__link"
61+
breakLinkClassName={styles.breakLink}
62+
disabledClassName="disabled"
63+
previousLabel="<"
64+
nextLabel=">"
65+
breakLabel="..."
66+
/>
67+
</div>
68+
);
69+
};
70+
71+
export default PagenatedReleases;
72+
73+
interface Release {
74+
url: string;
75+
html_url: string;
76+
id: string;
77+
node_id: string;
78+
tag_name: string;
79+
target_commitish: string;
80+
name: string;
81+
body: string;
82+
draft: boolean;
83+
prerelease: boolean;
84+
created_at: string;
85+
published_at: string;
86+
}
87+
88+
const Release: React.FC<{ release: Release }> = ({ release }) => {
89+
return (
90+
<article className={styles.release}>
91+
<div className={styles.leftBox}>
92+
<h2 className={styles.version}>
93+
<Link href={release.html_url}>{release.name}</Link>
94+
</h2>
95+
<span className={styles.date}>{dayjs(release.created_at).format('YYYY.MM.DD')}</span>
96+
</div>
97+
<div
98+
dangerouslySetInnerHTML={{
99+
__html: Markdown.render(release.body),
100+
}}
101+
/>
102+
</article>
103+
);
104+
};

0 commit comments

Comments
 (0)