From 4ccee1438e3c341075fdcf1d62e6900eb29d1908 Mon Sep 17 00:00:00 2001
From: Fushihara <1039534+fushihara@users.noreply.github.com>
Date: Wed, 25 Sep 2024 09:19:13 +0900
Subject: =?UTF-8?q?=E3=83=87=E3=83=BC=E3=82=BF=E8=AA=AD=E3=81=BF=E8=BE=BC?=
=?UTF-8?q?=E3=81=BF=E3=81=AE=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92=E3=82=B7?=
=?UTF-8?q?=E3=83=B3=E3=82=B0=E3=83=AB=E3=83=88=E3=83=B3=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/anime/[animeId]/page.tsx | 8 ++++----
src/app/anime/all/page.tsx | 4 ++--
src/app/article/all/[pageId]/page.tsx | 6 ++----
src/app/article/tag/[tagName]/page.tsx | 5 ++---
src/app/article/tag/page.tsx | 2 +-
src/util/animeLoader.ts | 10 +++++-----
src/util/articleLoader.ts | 14 ++++++++++++--
7 files changed, 28 insertions(+), 21 deletions(-)
diff --git a/src/app/anime/[animeId]/page.tsx b/src/app/anime/[animeId]/page.tsx
index 0f96f30..a92cda8 100644
--- a/src/app/anime/[animeId]/page.tsx
+++ b/src/app/anime/[animeId]/page.tsx
@@ -1,7 +1,7 @@
import "./style.css";
import style from "./style.module.css";
import dateformat from "dateformat";
-import { animeLoader, AnimeLoaderData } from "../../../util/animeLoader";
+import { AnimeLoader, AnimeLoaderData } from "../../../util/animeLoader";
import Link from "next/link";
dateformat.i18n.dayNames = [
'日', '月', '火', '水', '木', '金', '土',
@@ -12,7 +12,7 @@ type PageType = {
params: { animeId: string, }
}
export async function generateMetadata(context: PageType) {
- const loadedData = await animeLoader.loadData().then(d => {
+ const loadedData = await AnimeLoader.instance.loadData().then(d => {
const r = d.find(a => a.animeId == Number(context.params.animeId))!;
return r;
});
@@ -21,7 +21,7 @@ export async function generateMetadata(context: PageType) {
}
}
export default async function Page(context: PageType) {
- const loadedData = await animeLoader.loadData().then(d => {
+ const loadedData = await AnimeLoader.instance.loadData().then(d => {
const r = d.find(a => a.animeId == Number(context.params.animeId))!;
return r;
});;
@@ -224,7 +224,7 @@ function episodeHitokotoList(list: AnimeLoaderData["episodeHitokotoList"]) {
>);
}
export async function generateStaticParams() {
- const loadedData = await animeLoader.loadData();
+ const loadedData = await AnimeLoader.instance.loadData();
return loadedData.map(c => {
return { animeId: String(c.animeId) };
}) satisfies PageType["params"][];
diff --git a/src/app/anime/all/page.tsx b/src/app/anime/all/page.tsx
index 9c4f4e6..288171a 100644
--- a/src/app/anime/all/page.tsx
+++ b/src/app/anime/all/page.tsx
@@ -1,4 +1,4 @@
-import { animeLoader } from "../../../util/animeLoader";
+import { AnimeLoader } from "../../../util/animeLoader";
import style from "./style.module.css";
import Link from "next/link";
type PageType = {
@@ -11,7 +11,7 @@ export async function generateMetadata(context: PageType) {
}
}
export default async function Page(context: PageType) {
- const loadedData = await animeLoader.loadData();
+ const loadedData = await AnimeLoader.instance.loadData();
return (
全:{loadedData.length}件
diff --git a/src/app/article/all/[pageId]/page.tsx b/src/app/article/all/[pageId]/page.tsx
index 0374401..fda6fbb 100644
--- a/src/app/article/all/[pageId]/page.tsx
+++ b/src/app/article/all/[pageId]/page.tsx
@@ -21,8 +21,7 @@ export async function generateMetadata(context: PageType) {
}
export default async function Page(context: PageType) {
const pageId = getPageIdNumber(context.params.pageId);
- const al = new ArticleLoader()
- const loadedData = await al.loadData();
+ const loadedData = await ArticleLoader.instance.loadData();
const chunkdData = chunk(loadedData, PPV);
const displayData = chunkdData[pageId - 1];
return (
@@ -142,8 +141,7 @@ if (!Number.isInteger(PPV)) {
}
//export const dynamicParams = true;
export async function generateStaticParams() {
- const al = new ArticleLoader()
- const loadedData = await al.loadData();
+ const loadedData = await ArticleLoader.instance.loadData();
const chunkdData = chunk(loadedData, PPV);
return chunkdData.map((data, index) => {
return { pageId: `page-${index + 1}`, data: data };
diff --git a/src/app/article/tag/[tagName]/page.tsx b/src/app/article/tag/[tagName]/page.tsx
index d41befb..84c1677 100644
--- a/src/app/article/tag/[tagName]/page.tsx
+++ b/src/app/article/tag/[tagName]/page.tsx
@@ -12,9 +12,8 @@ export async function generateMetadata(context: PageType) {
}
}
export default async function Page(context: PageType) {
- const al = new ArticleLoader()
const nowPageTagName = decodeURIComponent(context.params.tagName);
- const loadedData = await al.loadData().then(articles => {
+ const loadedData = await ArticleLoader.instance.loadData().then(articles => {
const filterd = articles.filter(article => {
if (article.tags.includes(nowPageTagName)) {
return true;
@@ -35,7 +34,7 @@ export default async function Page(context: PageType) {
);
}
export async function generateStaticParams() {
- const tagList = await new ArticleLoader().getTagList();
+ const tagList = await ArticleLoader.instance.getTagList();
return tagList.map((data, index) => {
return { tagName: data.tag };
});
diff --git a/src/app/article/tag/page.tsx b/src/app/article/tag/page.tsx
index f1d161b..4f6ae0b 100644
--- a/src/app/article/tag/page.tsx
+++ b/src/app/article/tag/page.tsx
@@ -13,7 +13,7 @@ export async function generateMetadata(context: PageType) {
}
}
export default async function Page(context: PageType) {
- const tagList = await new ArticleLoader().getTagList();
+ const tagList = await ArticleLoader.instance.getTagList();
type TAG = { tag: string, count: number, primary?: boolean };
const elementListPcPart: TAG[] = [];
const elementListAkiba: TAG[] = [];
diff --git a/src/util/animeLoader.ts b/src/util/animeLoader.ts
index 120123b..92dbd5f 100644
--- a/src/util/animeLoader.ts
+++ b/src/util/animeLoader.ts
@@ -58,18 +58,19 @@ const zodType = z.array(
);
const MAX_ITEM_LIMIT = process.env["AKIBA_SOUKEN_MAX_ITEM_LIMIT"];
export type AnimeLoaderData = z.infer
[number]
-class AnimeLoader {
+export class AnimeLoader {
+ static instance = new AnimeLoader();
constructor() { }
- private dataCache: Awaited> | null = null;
+ private dataCache: Awaited> | null = null;
async loadData() {
if (this.dataCache != null) {
return this.dataCache;
}
- const loadedData = await this.loadData_();
+ const loadedData = await this._loadData();
this.dataCache = loadedData;
return loadedData;
}
- private async loadData_() {
+ private async _loadData() {
const articleJsonPath = process.env["AKIBA_SOUKEN_ANIME_JSON"]!;
//console.log(`[${articleJsonPath}]`);
const jsonStr = await readFile(articleJsonPath, { encoding: "utf-8" }).then(text => {
@@ -90,4 +91,3 @@ class AnimeLoader {
return parsedObj;
}
}
-export const animeLoader = new AnimeLoader();
\ No newline at end of file
diff --git a/src/util/articleLoader.ts b/src/util/articleLoader.ts
index f63b28c..860593d 100644
--- a/src/util/articleLoader.ts
+++ b/src/util/articleLoader.ts
@@ -12,8 +12,18 @@ const zodType = z.array(
);
const MAX_ITEM_LIMIT = process.env["AKIBA_SOUKEN_MAX_ITEM_LIMIT"];
export class ArticleLoader {
- constructor() { }
+ static instance = new ArticleLoader();
+ private constructor() { }
+ private dataCache: Awaited> | null = null;
async loadData() {
+ if (this.dataCache != null) {
+ return this.dataCache;
+ }
+ const loadedData = await this._loadData();
+ this.dataCache = loadedData;
+ return loadedData;
+ }
+ private async _loadData() {
const articleJsonPath = process.env["AKIBA_SOUKEN_ARTICLE_JSON"]!;
const jsonStr = await readFile(articleJsonPath, { encoding: "utf-8" }).then(text => {
const jsonObj = JSON.parse(text);
@@ -28,7 +38,6 @@ export class ArticleLoader {
}
return parsedObj;
}
-
async getCategoryList() {
const loadedData = await this.loadData();
// key:カテゴリ名 , val:回数
@@ -95,6 +104,7 @@ export class ArticleLoader {
}
}
+
type BreadcrumbInternal = { name: string, count: number, child: BreadcrumbInternal[] };
/**
* パンくずリストを管理
--
cgit v1.2.3