@alpaca-software/40kdc-data 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/abilities-resolver/resolver.d.ts +13 -4
- package/dist/abilities-resolver/resolver.d.ts.map +1 -1
- package/dist/abilities-resolver/resolver.js +22 -15
- package/dist/abilities-resolver/resolver.js.map +1 -1
- package/dist/audit-coverage.d.ts +78 -0
- package/dist/audit-coverage.d.ts.map +1 -0
- package/dist/audit-coverage.js +341 -0
- package/dist/audit-coverage.js.map +1 -0
- package/dist/author-batch.d.ts +147 -0
- package/dist/author-batch.d.ts.map +1 -0
- package/dist/author-batch.js +675 -0
- package/dist/author-batch.js.map +1 -0
- package/dist/author-input.d.ts +37 -0
- package/dist/author-input.d.ts.map +1 -0
- package/dist/author-input.js +162 -0
- package/dist/author-input.js.map +1 -0
- package/dist/cli.js +7 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/translate.d.ts.map +1 -1
- package/dist/commands/translate.js +9 -4
- package/dist/commands/translate.js.map +1 -1
- package/dist/cruncher/attribution.d.ts +66 -0
- package/dist/cruncher/attribution.d.ts.map +1 -0
- package/dist/cruncher/attribution.js +88 -0
- package/dist/cruncher/attribution.js.map +1 -0
- package/dist/cruncher/buffs.d.ts +23 -1
- package/dist/cruncher/buffs.d.ts.map +1 -1
- package/dist/cruncher/buffs.js +1 -1
- package/dist/cruncher/buffs.js.map +1 -1
- package/dist/cruncher/from-dsl.d.ts +32 -0
- package/dist/cruncher/from-dsl.d.ts.map +1 -1
- package/dist/cruncher/from-dsl.js +485 -40
- package/dist/cruncher/from-dsl.js.map +1 -1
- package/dist/cruncher/index.d.ts +1 -0
- package/dist/cruncher/index.d.ts.map +1 -1
- package/dist/cruncher/index.js +1 -0
- package/dist/cruncher/index.js.map +1 -1
- package/dist/data/bundle.generated.js +1 -1
- package/dist/data/bundle.generated.js.map +1 -1
- package/dist/data/collection.d.ts +9 -0
- package/dist/data/collection.d.ts.map +1 -1
- package/dist/data/collection.js +14 -0
- package/dist/data/collection.js.map +1 -1
- package/dist/data/dataset.d.ts +80 -2
- package/dist/data/dataset.d.ts.map +1 -1
- package/dist/data/dataset.js +143 -6
- package/dist/data/dataset.js.map +1 -1
- package/dist/data/entities.d.ts +2 -5
- package/dist/data/entities.d.ts.map +1 -1
- package/dist/data/entities.js.map +1 -1
- package/dist/data/index.d.ts +3 -2
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +1 -1
- package/dist/data/index.js.map +1 -1
- package/dist/data/roster-resolve.d.ts +26 -1
- package/dist/data/roster-resolve.d.ts.map +1 -1
- package/dist/data/roster-resolve.js +46 -0
- package/dist/data/roster-resolve.js.map +1 -1
- package/dist/export/index.d.ts +1 -0
- package/dist/export/index.d.ts.map +1 -1
- package/dist/export/index.js +3 -0
- package/dist/export/index.js.map +1 -1
- package/dist/export/rosterizer.d.ts +3 -0
- package/dist/export/rosterizer.d.ts.map +1 -0
- package/dist/export/rosterizer.js +144 -0
- package/dist/export/rosterizer.js.map +1 -0
- package/dist/export/serializer.d.ts +1 -1
- package/dist/export/serializer.d.ts.map +1 -1
- package/dist/export/serializer.js.map +1 -1
- package/dist/gen-conformance.js +212 -11
- package/dist/gen-conformance.js.map +1 -1
- package/dist/import/gw.d.ts +69 -0
- package/dist/import/gw.d.ts.map +1 -0
- package/dist/import/gw.js +245 -0
- package/dist/import/gw.js.map +1 -0
- package/dist/import/import-roster.d.ts +52 -3
- package/dist/import/import-roster.d.ts.map +1 -1
- package/dist/import/import-roster.js +114 -4
- package/dist/import/import-roster.js.map +1 -1
- package/dist/import/index.d.ts +2 -2
- package/dist/import/index.d.ts.map +1 -1
- package/dist/import/index.js +1 -1
- package/dist/import/index.js.map +1 -1
- package/dist/import/listforge.d.ts.map +1 -1
- package/dist/import/listforge.js +15 -1
- package/dist/import/listforge.js.map +1 -1
- package/dist/import/newrecruit-text.d.ts +3 -0
- package/dist/import/newrecruit-text.d.ts.map +1 -1
- package/dist/import/newrecruit-text.js +6 -0
- package/dist/import/newrecruit-text.js.map +1 -1
- package/dist/import/newrecruit-wtc.d.ts.map +1 -1
- package/dist/import/newrecruit-wtc.js +10 -7
- package/dist/import/newrecruit-wtc.js.map +1 -1
- package/dist/import/rosterizer.d.ts +70 -0
- package/dist/import/rosterizer.d.ts.map +1 -0
- package/dist/import/rosterizer.js +348 -0
- package/dist/import/rosterizer.js.map +1 -0
- package/dist/import/types.d.ts +1 -1
- package/dist/import/types.d.ts.map +1 -1
- package/dist/import/types.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/migrations/2026-weapon-keywords.js +4 -0
- package/dist/migrations/2026-weapon-keywords.js.map +1 -1
- package/dist/runner.d.ts +38 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +492 -0
- package/dist/runner.js.map +1 -0
- package/dist/scrub-ip.d.ts +14 -0
- package/dist/scrub-ip.d.ts.map +1 -0
- package/dist/scrub-ip.js +88 -0
- package/dist/scrub-ip.js.map +1 -0
- package/package.json +9 -2
- package/schemas/core/roster.schema.json +3 -1
package/dist/scrub-ip.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IP scrub: remove verbatim Games Workshop rules text from enrichment data.
|
|
3
|
+
*
|
|
4
|
+
* The original Haiku authoring pass, when it failed to translate a rule into
|
|
5
|
+
* the ability DSL, left a stub and dumped the source GW `description` into
|
|
6
|
+
* `community_notes` as `"… Original: <verbatim rules text>"`. CLAUDE.md forbids
|
|
7
|
+
* committing GW ability text. This codemod replaces any such note with a
|
|
8
|
+
* non-infringing citation, leaving genuinely-authored notes (analysis,
|
|
9
|
+
* `"skipped for damage calc"`, etc.) untouched.
|
|
10
|
+
*
|
|
11
|
+
* Idempotent — re-running after a scrub is a no-op. Markers: `"Original:"` (the
|
|
12
|
+
* dump prefix) and `"■"` (a GW bullet glyph that rides along with copied text).
|
|
13
|
+
*
|
|
14
|
+
* Usage: npx tsx tools/src/scrub-ip.ts (writes in place)
|
|
15
|
+
* npx tsx tools/src/scrub-ip.ts --check (report only, non-zero if leaks remain)
|
|
16
|
+
*/
|
|
17
|
+
import { readdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
18
|
+
import { resolve } from "node:path";
|
|
19
|
+
import { fileURLToPath } from "node:url";
|
|
20
|
+
const __dirname = fileURLToPath(new URL(".", import.meta.url));
|
|
21
|
+
const ENRICHMENT_ROOT = resolve(__dirname, "../../data/enrichment");
|
|
22
|
+
/** The note any GW-text-bearing entry is rewritten to. */
|
|
23
|
+
export const SCRUB_CITATION = "auto-generated stub — needs manual authoring (source: 10e Datasheets_abilities; rules text omitted for IP)";
|
|
24
|
+
/** Markers identifying a note that carries verbatim GW text. */
|
|
25
|
+
const LEAK_MARKER = /Original:|■/;
|
|
26
|
+
/** True when this note carries verbatim GW rules text and must be scrubbed. */
|
|
27
|
+
export function isLeak(note) {
|
|
28
|
+
return typeof note === "string" && LEAK_MARKER.test(note);
|
|
29
|
+
}
|
|
30
|
+
/** Replace a leaking note with the citation; pass authored notes through unchanged. */
|
|
31
|
+
export function scrubNote(note) {
|
|
32
|
+
return isLeak(note) ? SCRUB_CITATION : note;
|
|
33
|
+
}
|
|
34
|
+
/** Scrub one file's array in place; return how many entries changed. */
|
|
35
|
+
export function scrubAbilities(abilities) {
|
|
36
|
+
let changed = 0;
|
|
37
|
+
for (const a of abilities) {
|
|
38
|
+
if (isLeak(a.community_notes)) {
|
|
39
|
+
a.community_notes = SCRUB_CITATION;
|
|
40
|
+
changed++;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return changed;
|
|
44
|
+
}
|
|
45
|
+
function run(check) {
|
|
46
|
+
let totalLeaks = 0;
|
|
47
|
+
let filesTouched = 0;
|
|
48
|
+
for (const entry of readdirSync(ENRICHMENT_ROOT, { withFileTypes: true })) {
|
|
49
|
+
if (!entry.isDirectory() || entry.name === "_example")
|
|
50
|
+
continue;
|
|
51
|
+
const file = resolve(ENRICHMENT_ROOT, entry.name, "abilities.json");
|
|
52
|
+
let abilities;
|
|
53
|
+
try {
|
|
54
|
+
abilities = JSON.parse(readFileSync(file, "utf-8"));
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (!Array.isArray(abilities))
|
|
60
|
+
continue;
|
|
61
|
+
const leaks = abilities.filter((a) => isLeak(a.community_notes)).length;
|
|
62
|
+
if (leaks === 0)
|
|
63
|
+
continue;
|
|
64
|
+
totalLeaks += leaks;
|
|
65
|
+
filesTouched++;
|
|
66
|
+
if (check) {
|
|
67
|
+
console.log(` ${String(leaks).padStart(3)} ${entry.name}`);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
scrubAbilities(abilities);
|
|
71
|
+
writeFileSync(file, JSON.stringify(abilities, null, 2) + "\n");
|
|
72
|
+
console.log(` ✓ ${entry.name}: scrubbed ${leaks}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (check) {
|
|
76
|
+
console.log(totalLeaks === 0 ? "No GW-text leaks." : `\n${totalLeaks} leak(s) across ${filesTouched} file(s).`);
|
|
77
|
+
if (totalLeaks > 0)
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.log(`\nScrubbed ${totalLeaks} entr${totalLeaks === 1 ? "y" : "ies"} across ${filesTouched} file(s).`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const isMain = process.argv[1] &&
|
|
85
|
+
resolve(process.argv[1]).replace(/\.\w+$/, "") === fileURLToPath(import.meta.url).replace(/\.\w+$/, "");
|
|
86
|
+
if (isMain)
|
|
87
|
+
run(process.argv.includes("--check"));
|
|
88
|
+
//# sourceMappingURL=scrub-ip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrub-ip.js","sourceRoot":"","sources":["../src/scrub-ip.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * IP scrub: remove verbatim Games Workshop rules text from enrichment data.\n *\n * The original Haiku authoring pass, when it failed to translate a rule into\n * the ability DSL, left a stub and dumped the source GW `description` into\n * `community_notes` as `\"… Original: <verbatim rules text>\"`. CLAUDE.md forbids\n * committing GW ability text. This codemod replaces any such note with a\n * non-infringing citation, leaving genuinely-authored notes (analysis,\n * `\"skipped for damage calc\"`, etc.) untouched.\n *\n * Idempotent — re-running after a scrub is a no-op. Markers: `\"Original:\"` (the\n * dump prefix) and `\"■\"` (a GW bullet glyph that rides along with copied text).\n *\n * Usage: npx tsx tools/src/scrub-ip.ts (writes in place)\n * npx tsx tools/src/scrub-ip.ts --check (report only, non-zero if leaks remain)\n */\nimport { readdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = fileURLToPath(new URL(\".\", import.meta.url));\nconst ENRICHMENT_ROOT = resolve(__dirname, \"../../data/enrichment\");\n\n/** The note any GW-text-bearing entry is rewritten to. */\nexport const SCRUB_CITATION =\n \"auto-generated stub — needs manual authoring (source: 10e Datasheets_abilities; rules text omitted for IP)\";\n\n/** Markers identifying a note that carries verbatim GW text. */\nconst LEAK_MARKER = /Original:|■/;\n\n/** True when this note carries verbatim GW rules text and must be scrubbed. */\nexport function isLeak(note: string | undefined): boolean {\n return typeof note === \"string\" && LEAK_MARKER.test(note);\n}\n\n/** Replace a leaking note with the citation; pass authored notes through unchanged. */\nexport function scrubNote(note: string | undefined): string | undefined {\n return isLeak(note) ? SCRUB_CITATION : note;\n}\n\ninterface AbilityEntry {\n community_notes?: string;\n [k: string]: unknown;\n}\n\n/** Scrub one file's array in place; return how many entries changed. */\nexport function scrubAbilities(abilities: AbilityEntry[]): number {\n let changed = 0;\n for (const a of abilities) {\n if (isLeak(a.community_notes)) {\n a.community_notes = SCRUB_CITATION;\n changed++;\n }\n }\n return changed;\n}\n\nfunction run(check: boolean): void {\n let totalLeaks = 0;\n let filesTouched = 0;\n for (const entry of readdirSync(ENRICHMENT_ROOT, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.name === \"_example\") continue;\n const file = resolve(ENRICHMENT_ROOT, entry.name, \"abilities.json\");\n let abilities: AbilityEntry[];\n try {\n abilities = JSON.parse(readFileSync(file, \"utf-8\"));\n } catch {\n continue;\n }\n if (!Array.isArray(abilities)) continue;\n const leaks = abilities.filter((a) => isLeak(a.community_notes)).length;\n if (leaks === 0) continue;\n totalLeaks += leaks;\n filesTouched++;\n if (check) {\n console.log(` ${String(leaks).padStart(3)} ${entry.name}`);\n } else {\n scrubAbilities(abilities);\n writeFileSync(file, JSON.stringify(abilities, null, 2) + \"\\n\");\n console.log(` ✓ ${entry.name}: scrubbed ${leaks}`);\n }\n }\n if (check) {\n console.log(totalLeaks === 0 ? \"No GW-text leaks.\" : `\\n${totalLeaks} leak(s) across ${filesTouched} file(s).`);\n if (totalLeaks > 0) process.exit(1);\n } else {\n console.log(`\\nScrubbed ${totalLeaks} entr${totalLeaks === 1 ? \"y\" : \"ies\"} across ${filesTouched} file(s).`);\n }\n}\n\nconst isMain =\n process.argv[1] &&\n resolve(process.argv[1]).replace(/\\.\\w+$/, \"\") === fileURLToPath(import.meta.url).replace(/\\.\\w+$/, \"\");\nif (isMain) run(process.argv.includes(\"--check\"));\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alpaca-software/40kdc-data",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "The 40kdc Warhammer 40K dataset behind a linked, typed API — find units, follow them to their weapons, abilities, phases, and factions. Also validates data against the canonical JSON Schemas.",
|
|
6
6
|
"keywords": [
|
|
@@ -37,7 +37,8 @@
|
|
|
37
37
|
"README.md"
|
|
38
38
|
],
|
|
39
39
|
"bin": {
|
|
40
|
-
"40kdc-validate": "./dist/cli.js"
|
|
40
|
+
"40kdc-validate": "./dist/cli.js",
|
|
41
|
+
"40kdc-runner": "./dist/runner.js"
|
|
41
42
|
},
|
|
42
43
|
"publishConfig": {
|
|
43
44
|
"access": "public",
|
|
@@ -56,6 +57,12 @@
|
|
|
56
57
|
"validate:core": "tsx src/cli.ts validate-core",
|
|
57
58
|
"validate:enrichment": "tsx src/cli.ts validate-enrichment",
|
|
58
59
|
"translate": "tsx src/cli.ts translate",
|
|
60
|
+
"audit:coverage": "tsx src/cli.ts audit-coverage --write",
|
|
61
|
+
"author:input": "tsx src/author-input.ts",
|
|
62
|
+
"author:propose": "tsx src/author-batch.ts propose",
|
|
63
|
+
"author:repair": "tsx src/author-batch.ts repair",
|
|
64
|
+
"author:apply": "tsx src/author-batch.ts apply",
|
|
65
|
+
"author:review": "tsx src/author-batch.ts review",
|
|
59
66
|
"bundle:schemas": "tsx src/bundle-schemas.ts",
|
|
60
67
|
"codegen:types": "json2ts -i ../crates/wh40kdc/schemas/bundled.schema.json -o src/generated.ts --unreachableDefinitions --bannerComment \"/* Generated from crates/wh40kdc/schemas/bundled.schema.json by 'npm run codegen:types'. DO NOT EDIT BY HAND. */\"",
|
|
61
68
|
"copy:schemas": "rm -rf schemas && cp -R ../schemas schemas",
|