feat: add shared TypeScript types for Game, Documentary, Chapter
Create @afterlife/shared package with type definitions for the core domain models (Game, Documentary, Chapter) and Strapi API interfaces (StrapiMedia, StrapiResponse, StrapiListResponse). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
23
package-lock.json
generated
23
package-lock.json
generated
@@ -13,6 +13,10 @@
|
|||||||
"turbo": "^2"
|
"turbo": "^2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@afterlife/shared": {
|
||||||
|
"resolved": "packages/shared",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
"node_modules/turbo": {
|
"node_modules/turbo": {
|
||||||
"version": "2.8.10",
|
"version": "2.8.10",
|
||||||
"resolved": "https://registry.npmjs.org/turbo/-/turbo-2.8.10.tgz",
|
"resolved": "https://registry.npmjs.org/turbo/-/turbo-2.8.10.tgz",
|
||||||
@@ -107,6 +111,25 @@
|
|||||||
"os": [
|
"os": [
|
||||||
"win32"
|
"win32"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"node_modules/typescript": {
|
||||||
|
"version": "5.9.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
||||||
|
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"tsc": "bin/tsc",
|
||||||
|
"tsserver": "bin/tsserver"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.17"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"packages/shared": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"devDependencies": {
|
||||||
|
"typescript": "^5"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
13
packages/shared/package.json
Normal file
13
packages/shared/package.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"name": "@afterlife/shared",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"private": true,
|
||||||
|
"main": "./src/index.ts",
|
||||||
|
"types": "./src/index.ts",
|
||||||
|
"scripts": {
|
||||||
|
"lint": "tsc --noEmit"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"typescript": "^5"
|
||||||
|
}
|
||||||
|
}
|
||||||
1
packages/shared/src/index.ts
Normal file
1
packages/shared/src/index.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export * from "./types";
|
||||||
33
packages/shared/src/types/api.ts
Normal file
33
packages/shared/src/types/api.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
export interface StrapiMedia {
|
||||||
|
id: number;
|
||||||
|
url: string;
|
||||||
|
alternativeText: string | null;
|
||||||
|
width: number | null;
|
||||||
|
height: number | null;
|
||||||
|
mime: string;
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface StrapiResponse<T> {
|
||||||
|
data: T;
|
||||||
|
meta: {
|
||||||
|
pagination?: {
|
||||||
|
page: number;
|
||||||
|
pageSize: number;
|
||||||
|
pageCount: number;
|
||||||
|
total: number;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface StrapiListResponse<T> {
|
||||||
|
data: T[];
|
||||||
|
meta: {
|
||||||
|
pagination: {
|
||||||
|
page: number;
|
||||||
|
pageSize: number;
|
||||||
|
pageCount: number;
|
||||||
|
total: number;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
12
packages/shared/src/types/chapter.ts
Normal file
12
packages/shared/src/types/chapter.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import type { StrapiMedia } from "./api";
|
||||||
|
|
||||||
|
export interface Chapter {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
content: string;
|
||||||
|
audioFile: StrapiMedia | null;
|
||||||
|
audioDuration: number | null;
|
||||||
|
order: number;
|
||||||
|
coverImage: StrapiMedia | null;
|
||||||
|
locale: string;
|
||||||
|
}
|
||||||
12
packages/shared/src/types/documentary.ts
Normal file
12
packages/shared/src/types/documentary.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import type { Chapter } from "./chapter";
|
||||||
|
|
||||||
|
export interface Documentary {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
chapters: Chapter[];
|
||||||
|
publishedAt: string | null;
|
||||||
|
createdAt: string;
|
||||||
|
updatedAt: string;
|
||||||
|
locale: string;
|
||||||
|
}
|
||||||
25
packages/shared/src/types/game.ts
Normal file
25
packages/shared/src/types/game.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import type { Documentary } from "./documentary";
|
||||||
|
import type { StrapiMedia } from "./api";
|
||||||
|
|
||||||
|
export type Genre = "MMORPG" | "FPS" | "Casual" | "Strategy" | "Sports" | "Other";
|
||||||
|
export type ServerStatus = "online" | "maintenance" | "coming_soon";
|
||||||
|
|
||||||
|
export interface Game {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
slug: string;
|
||||||
|
description: string;
|
||||||
|
genre: Genre;
|
||||||
|
releaseYear: number;
|
||||||
|
shutdownYear: number;
|
||||||
|
developer: string;
|
||||||
|
publisher: string;
|
||||||
|
screenshots: StrapiMedia[];
|
||||||
|
coverImage: StrapiMedia;
|
||||||
|
serverStatus: ServerStatus;
|
||||||
|
serverLink: string | null;
|
||||||
|
documentary: Documentary | null;
|
||||||
|
createdAt: string;
|
||||||
|
updatedAt: string;
|
||||||
|
locale: string;
|
||||||
|
}
|
||||||
4
packages/shared/src/types/index.ts
Normal file
4
packages/shared/src/types/index.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
export * from "./game";
|
||||||
|
export * from "./documentary";
|
||||||
|
export * from "./chapter";
|
||||||
|
export * from "./api";
|
||||||
14
packages/shared/tsconfig.json
Normal file
14
packages/shared/tsconfig.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ES2022",
|
||||||
|
"module": "ESNext",
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"declaration": true,
|
||||||
|
"strict": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"outDir": "dist",
|
||||||
|
"rootDir": "src"
|
||||||
|
},
|
||||||
|
"include": ["src"]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user