Skip to content

Commit 5e38397

Browse files
committed
Add spawn infodump parser
1 parent 41ce32d commit 5e38397

File tree

4 files changed

+82
-3
lines changed

4 files changed

+82
-3
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
package-lock.json
22
node_modules/
33
build/
4+
scripts/spawnInfodump.json

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"prebuild": "rimraf build/",
99
"build": "tsc",
1010
"compile": "tsc --noEmit",
11-
"test": "jest"
11+
"test": "jest",
12+
"infodump": "ts-node scripts/parseSpawnInfodump.ts"
1213
},
1314
"author": "Marc Dingena",
1415
"repository": {
@@ -39,6 +40,7 @@
3940
"prettier": "^2.3.0",
4041
"rimraf": "^3.0.2",
4142
"ts-jest": "^27.0.4",
43+
"ts-node": "^10.9.1",
4244
"typescript": "^4.4.4"
4345
}
4446
}

scripts/parseSpawnInfodump.ts

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import fs from 'fs';
2+
import { Prefab } from '../src/Prefab';
3+
import infodump from './spawnInfodump.json';
4+
5+
const snakeCase = (name: string) => name.replace(/[\s]/g, '_');
6+
7+
const alphabetically = (a: [string, unknown], b: [string, unknown]) => (a[0] < b[0] ? -1 : 1);
8+
9+
const parsedPrefabs = Object.fromEntries(
10+
Object.entries(
11+
infodump.reduce(
12+
(prefabs, data) => ({
13+
...prefabs,
14+
[snakeCase(data.Name)]: {
15+
hash: data.Hash,
16+
name: data.Name,
17+
embedded: Object.fromEntries(
18+
Object.entries(
19+
data.Embedded.reduce(
20+
(entities, entity) => ({
21+
...entities,
22+
[`${snakeCase(entity.Name)}_${entity.Hash}`]: {
23+
hash: entity.Hash,
24+
name: entity.Name,
25+
savables: Object.fromEntries(
26+
Object.entries(
27+
entity.Savables.reduce(
28+
(savables, savable) => ({
29+
...savables,
30+
[snakeCase(savable.Name)]: {
31+
hash: savable.Hash,
32+
name: savable.Name
33+
}
34+
}),
35+
{}
36+
)
37+
).sort(alphabetically)
38+
)
39+
}
40+
}),
41+
{}
42+
)
43+
).sort(alphabetically)
44+
)
45+
}
46+
}),
47+
{}
48+
)
49+
).sort(alphabetically)
50+
);
51+
52+
const parsedPrefabKeys = Object.keys(parsedPrefabs);
53+
54+
const missingPrefabs = Object.entries(Prefab).reduce(
55+
(missing, [key, prefab]) => (parsedPrefabKeys.includes(key) ? missing : { ...missing, [key]: prefab }),
56+
{}
57+
);
58+
59+
const totalPrefabs = Object.entries({
60+
...missingPrefabs,
61+
...parsedPrefabs
62+
})
63+
.sort(alphabetically)
64+
.reduce(
65+
(prefabs, [key, prefab]) => ({
66+
...prefabs,
67+
[key]: prefab
68+
}),
69+
{}
70+
);
71+
72+
fs.writeFileSync(
73+
'./src/Prefab.ts',
74+
`export const Prefab = ${JSON.stringify(totalPrefabs, null, 2).replace(/"/g, "'")}\n`
75+
);

tsconfig.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"skipLibCheck": true,
1111
"strict": true,
1212
"lib": ["es2017"],
13-
"target": "es6"
13+
"target": "es6",
14+
"resolveJsonModule": true
1415
},
15-
"include": ["./src/**/*", "./decodeString.js"]
16+
"include": ["./src/**/*", "./scripts/**/*", "./decodeString.js"]
1617
}

0 commit comments

Comments
 (0)