fix(ci): gitignore was excluding src/frontend/src/data/defaults.ts
The .gitignore had 'data/' which matches any 'data' directory at any depth. That excluded src/frontend/src/data/ from git, so the file defaults.ts (with DEFAULT_INSUMOS, DEFAULT_FORMULAS, etc.) was never committed. CI was failing with TS2307 because the file was in the local working tree but not in the git checkout. Tighten the rule to '/data/' so only the root runtime H2 database folder is ignored, not the source data directory.
This commit is contained in:
+1
-1
@@ -6,7 +6,7 @@ src/frontend/node_modules/
|
||||
src/frontend/dist/
|
||||
src/frontend/tsconfig.app.tsbuildinfo
|
||||
src/frontend/tsconfig.node.tsbuildinfo
|
||||
data/
|
||||
/data/
|
||||
.idea/
|
||||
.vscode/
|
||||
*.iml
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
import type { AppState as ApiAppState } from '../api/client'
|
||||
import type { CristalesDisponibles, Formula, Insumos } from '../types'
|
||||
|
||||
export const DEFAULT_INSUMOS: Insumos = {
|
||||
cristales: {
|
||||
D: 1500,
|
||||
C: 4500,
|
||||
B: 18000,
|
||||
A: 60000,
|
||||
S: 200000,
|
||||
},
|
||||
soulOre: 320,
|
||||
spiritOre: 450,
|
||||
venta: {
|
||||
Soulshot: { D: 7, C: 18, B: 70, A: 220, S: 800 },
|
||||
Spiritshot: { D: 22, C: 60, B: 180, A: 400, S: 950 },
|
||||
'Blessed Spiritshot': { D: 60, C: 180, B: 700, A: 1800, S: 4500 },
|
||||
},
|
||||
}
|
||||
|
||||
export const DEFAULT_FORMULAS: Formula[] = [
|
||||
{ id: 'Soulshot-D', tipo: 'Soulshot', grado: 'D', cristalesReq: 1, soulOreReq: 3, spiritOreReq: null, shotsObtenidos: 200 },
|
||||
{ id: 'Soulshot-C', tipo: 'Soulshot', grado: 'C', cristalesReq: 1, soulOreReq: 15, spiritOreReq: null, shotsObtenidos: 600 },
|
||||
{ id: 'Soulshot-B', tipo: 'Soulshot', grado: 'B', cristalesReq: 1, soulOreReq: 54, spiritOreReq: null, shotsObtenidos: 540 },
|
||||
{ id: 'Soulshot-A', tipo: 'Soulshot', grado: 'A', cristalesReq: 1, soulOreReq: 60, spiritOreReq: null, shotsObtenidos: 500 },
|
||||
{ id: 'Soulshot-S', tipo: 'Soulshot', grado: 'S', cristalesReq: 1, soulOreReq: 40, spiritOreReq: null, shotsObtenidos: 350 },
|
||||
|
||||
{ id: 'Spiritshot-D', tipo: 'Spiritshot', grado: 'D', cristalesReq: 1, soulOreReq: null, spiritOreReq: 3, shotsObtenidos: 140 },
|
||||
{ id: 'Spiritshot-C', tipo: 'Spiritshot', grado: 'C', cristalesReq: 1, soulOreReq: null, spiritOreReq: 10, shotsObtenidos: 270 },
|
||||
{ id: 'Spiritshot-B', tipo: 'Spiritshot', grado: 'B', cristalesReq: 1, soulOreReq: null, spiritOreReq: 15, shotsObtenidos: 200 },
|
||||
{ id: 'Spiritshot-A', tipo: 'Spiritshot', grado: 'A', cristalesReq: 1, soulOreReq: null, spiritOreReq: 30, shotsObtenidos: 350 },
|
||||
{ id: 'Spiritshot-S', tipo: 'Spiritshot', grado: 'S', cristalesReq: 1, soulOreReq: null, spiritOreReq: 15, shotsObtenidos: 200 },
|
||||
|
||||
{ id: 'Blessed Spiritshot-D', tipo: 'Blessed Spiritshot', grado: 'D', cristalesReq: 2, soulOreReq: null, spiritOreReq: 8, shotsObtenidos: 120 },
|
||||
{ id: 'Blessed Spiritshot-C', tipo: 'Blessed Spiritshot', grado: 'C', cristalesReq: 2, soulOreReq: null, spiritOreReq: 30, shotsObtenidos: 240 },
|
||||
{ id: 'Blessed Spiritshot-B', tipo: 'Blessed Spiritshot', grado: 'B', cristalesReq: 2, soulOreReq: null, spiritOreReq: 16, shotsObtenidos: 120 },
|
||||
{ id: 'Blessed Spiritshot-A', tipo: 'Blessed Spiritshot', grado: 'A', cristalesReq: 2, soulOreReq: null, spiritOreReq: 84, shotsObtenidos: 300 },
|
||||
{ id: 'Blessed Spiritshot-S', tipo: 'Blessed Spiritshot', grado: 'S', cristalesReq: 2, soulOreReq: null, spiritOreReq: 50, shotsObtenidos: 200 },
|
||||
]
|
||||
|
||||
export const DEFAULT_CRISTALES_DISP: CristalesDisponibles = {
|
||||
Soulshot: { D: 0, C: 0, B: 0, A: 0, S: 0 },
|
||||
Spiritshot: { D: 0, C: 0, B: 0, A: 0, S: 0 },
|
||||
'Blessed Spiritshot': { D: 0, C: 0, B: 0, A: 0, S: 0 },
|
||||
}
|
||||
|
||||
export const EMPTY_INSUMOS: Insumos = {
|
||||
cristales: { D: 0, C: 0, B: 0, A: 0, S: 0 },
|
||||
soulOre: 0,
|
||||
spiritOre: 0,
|
||||
venta: {
|
||||
Soulshot: { D: 0, C: 0, B: 0, A: 0, S: 0 },
|
||||
Spiritshot: { D: 0, C: 0, B: 0, A: 0, S: 0 },
|
||||
'Blessed Spiritshot': { D: 0, C: 0, B: 0, A: 0, S: 0 },
|
||||
},
|
||||
}
|
||||
|
||||
export const EMPTY_FORMULAS: Formula[] = DEFAULT_FORMULAS.map((f) => ({
|
||||
...f,
|
||||
cristalesReq: 0,
|
||||
soulOreReq: null,
|
||||
spiritOreReq: null,
|
||||
shotsObtenidos: 0,
|
||||
}))
|
||||
|
||||
export const EMPTY_CRISTALES_DISP: CristalesDisponibles = {
|
||||
Soulshot: { D: 0, C: 0, B: 0, A: 0, S: 0 },
|
||||
Spiritshot: { D: 0, C: 0, B: 0, A: 0, S: 0 },
|
||||
'Blessed Spiritshot': { D: 0, C: 0, B: 0, A: 0, S: 0 },
|
||||
}
|
||||
|
||||
export function makeDefaultAppState(): ApiAppState {
|
||||
return {
|
||||
insumos: structuredCopy(DEFAULT_INSUMOS),
|
||||
formulas: structuredCopy(DEFAULT_FORMULAS),
|
||||
disponibles: structuredCopy(DEFAULT_CRISTALES_DISP),
|
||||
}
|
||||
}
|
||||
|
||||
export function makeEmptyAppState(): ApiAppState {
|
||||
return {
|
||||
insumos: structuredCopy(EMPTY_INSUMOS),
|
||||
formulas: structuredCopy(EMPTY_FORMULAS),
|
||||
disponibles: structuredCopy(EMPTY_CRISTALES_DISP),
|
||||
}
|
||||
}
|
||||
|
||||
function structuredCopy<T>(value: T): T {
|
||||
return JSON.parse(JSON.stringify(value))
|
||||
}
|
||||
Reference in New Issue
Block a user