mirror of
https://github.com/tiennm99/loto.git
synced 2026-05-29 22:23:39 +00:00
574c22ddc1
Full stack swap to enable future extension (more pages / load functions /
backend) while keeping JSDoc-only code style.
Stack:
- SvelteKit 2 + adapter-static
- Svelte 5 runes ($state, $derived, $effect, $props)
- Vite 7 + @sveltejs/vite-plugin-svelte 6
- Tailwind 4 (Vite plugin)
- ESLint 9 (flat) + eslint-plugin-svelte
- Pure JS + JSDoc, no TypeScript
Source moves:
- app/page.jsx → src/routes/+page.svelte
- app/master/page.jsx → src/routes/master/+page.svelte
- app/layout.jsx → src/routes/+layout.svelte (+ +layout.js)
- components/player-board.jsx → src/lib/PlayerBoard.svelte
- lib/game-logic.js → src/lib/game-logic.js (verbatim)
- next.config.mjs → svelte.config.js + vite.config.js
- app/globals.css → src/app.css
- (new) → src/app.html
Behavior preserved: PlayerBoard with bingo "Kinh!" popup + waiting "Chờ X"
toast, master 9x10 tracking board with shuffled draw, host's own player
card via storagePrefix="loto_master_card", localStorage prefix model
(loto_*, loto_master, loto_master_card_*), basePath dual mode (CF default
empty, BUILD_PROFILE=gh → /loto, codeserver dev → /absproxy/{port}).
A11y kept from prior hardening: role-correct buttons, aria-pressed on
cells, role=dialog modal with Escape, role=status toast.
Plans: ts-to-jsdoc plan marked completed; sveltekit-refactor plan tracks
the work above. Docs under ./docs/ rewritten by docs-manager subagent to
match the SvelteKit terminology.
35 lines
997 B
JavaScript
35 lines
997 B
JavaScript
import adapter from "@sveltejs/adapter-static";
|
|
import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
|
|
|
|
const profile = process.env.BUILD_PROFILE;
|
|
const isCodeserver = process.env.VITE_DEV_PROFILE === "codeserver";
|
|
|
|
// basePath resolution:
|
|
// 1. NEXT_BASE_PATH (kept name for consistency with prior config; treated as opaque override)
|
|
// 2. codeserver dev → /absproxy/{port}
|
|
// 3. BUILD_PROFILE=gh → /loto
|
|
// 4. default (CF Pages root, local dev) → ""
|
|
function resolveBase() {
|
|
if (process.env.NEXT_BASE_PATH != null) return process.env.NEXT_BASE_PATH;
|
|
if (isCodeserver) {
|
|
const port = process.env.CODESERVER_PORT ?? "3000";
|
|
return `/absproxy/${port}`;
|
|
}
|
|
if (profile === "gh") return "/loto";
|
|
return "";
|
|
}
|
|
|
|
export default {
|
|
preprocess: vitePreprocess(),
|
|
kit: {
|
|
adapter: adapter({
|
|
pages: "build",
|
|
assets: "build",
|
|
fallback: undefined,
|
|
precompress: false,
|
|
strict: true,
|
|
}),
|
|
paths: { base: resolveBase() },
|
|
},
|
|
};
|