bsdata-parser 0.1.0 → 0.1.1
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/dist/index.d.ts +16 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -76,6 +76,17 @@ interface IrModifier {
|
|
|
76
76
|
conditionGroups: IrConditionGroup[];
|
|
77
77
|
repeats: IrRepeat[];
|
|
78
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* A BSData modifierGroup node: a block of modifiers that share a common set of conditions.
|
|
81
|
+
* Equivalent to a conditional modifier block - the conditions guard when ALL the inner modifiers apply.
|
|
82
|
+
*/
|
|
83
|
+
interface IrModifierGroup {
|
|
84
|
+
type: string;
|
|
85
|
+
modifiers: IrModifier[];
|
|
86
|
+
conditions: IrCondition[];
|
|
87
|
+
conditionGroups: IrConditionGroup[];
|
|
88
|
+
modifierGroups: IrModifierGroup[];
|
|
89
|
+
}
|
|
79
90
|
interface IrRepeat {
|
|
80
91
|
value: number;
|
|
81
92
|
repeats: number;
|
|
@@ -102,6 +113,7 @@ interface IrSelectionEntry {
|
|
|
102
113
|
categoryLinks: IrCategoryLink[];
|
|
103
114
|
costs: IrCost[];
|
|
104
115
|
modifiers: IrModifier[];
|
|
116
|
+
modifierGroups?: IrModifierGroup[];
|
|
105
117
|
selectionEntries: IrSelectionEntry[];
|
|
106
118
|
selectionEntryGroups: IrSelectionEntryGroup[];
|
|
107
119
|
entryLinks: IrEntryLink[];
|
|
@@ -115,6 +127,7 @@ interface IrSelectionEntryGroup {
|
|
|
115
127
|
defaultSelectionEntryId?: string;
|
|
116
128
|
constraints: IrConstraint[];
|
|
117
129
|
modifiers: IrModifier[];
|
|
130
|
+
modifierGroups?: IrModifierGroup[];
|
|
118
131
|
selectionEntries: IrSelectionEntry[];
|
|
119
132
|
selectionEntryGroups: IrSelectionEntryGroup[];
|
|
120
133
|
entryLinks: IrEntryLink[];
|
|
@@ -132,6 +145,7 @@ interface IrEntryLink {
|
|
|
132
145
|
constraints: IrConstraint[];
|
|
133
146
|
costs: IrCost[];
|
|
134
147
|
modifiers: IrModifier[];
|
|
148
|
+
modifierGroups?: IrModifierGroup[];
|
|
135
149
|
profiles: IrProfile[];
|
|
136
150
|
infoLinks: IrInfoLink[];
|
|
137
151
|
categoryLinks: IrCategoryLink[];
|
|
@@ -155,6 +169,7 @@ interface IrForceEntry {
|
|
|
155
169
|
id: string;
|
|
156
170
|
name: string;
|
|
157
171
|
hidden: boolean;
|
|
172
|
+
constraints: IrConstraint[];
|
|
158
173
|
categoryLinks: IrForceCategoryLink[];
|
|
159
174
|
rules: IrRule[];
|
|
160
175
|
modifiers: IrModifier[];
|
|
@@ -238,4 +253,4 @@ declare function projectCatalogue(_ir: Ir): Record<string, unknown>;
|
|
|
238
253
|
*/
|
|
239
254
|
declare function buildCatalogue(files: Record<string, string>): Record<string, unknown>;
|
|
240
255
|
|
|
241
|
-
export { type Ir, type IrCatalogueFile, buildCatalogue, parseToIr, projectCatalogue };
|
|
256
|
+
export { type Ir, type IrCatalogueFile, type IrModifierGroup, buildCatalogue, parseToIr, projectCatalogue };
|
package/dist/index.js
CHANGED
|
@@ -20,7 +20,8 @@ var ALWAYS_ARRAY = /* @__PURE__ */ new Set([
|
|
|
20
20
|
"conditionGroup",
|
|
21
21
|
"repeat",
|
|
22
22
|
"forceEntry",
|
|
23
|
-
"catalogueLink"
|
|
23
|
+
"catalogueLink",
|
|
24
|
+
"modifierGroup"
|
|
24
25
|
]);
|
|
25
26
|
var xmlParser = new XMLParser({
|
|
26
27
|
ignoreAttributes: false,
|
|
@@ -140,7 +141,17 @@ function parseModifier(n) {
|
|
|
140
141
|
repeats: arr(n.repeats?.repeat).map(parseRepeat)
|
|
141
142
|
};
|
|
142
143
|
}
|
|
144
|
+
function parseModifierGroup(n) {
|
|
145
|
+
return {
|
|
146
|
+
type: String(n["@_type"] ?? "and"),
|
|
147
|
+
modifiers: arr(n.modifiers?.modifier).map(parseModifier),
|
|
148
|
+
conditions: arr(n.conditions?.condition).map(parseCondition),
|
|
149
|
+
conditionGroups: arr(n.conditionGroups?.conditionGroup).map(parseConditionGroup),
|
|
150
|
+
modifierGroups: arr(n.modifierGroups?.modifierGroup).map(parseModifierGroup)
|
|
151
|
+
};
|
|
152
|
+
}
|
|
143
153
|
function parseSelectionEntry(n) {
|
|
154
|
+
const mg = arr(n.modifierGroups?.modifierGroup).map(parseModifierGroup);
|
|
144
155
|
return {
|
|
145
156
|
id: String(n["@_id"] ?? ""),
|
|
146
157
|
name: String(n["@_name"] ?? ""),
|
|
@@ -156,12 +167,14 @@ function parseSelectionEntry(n) {
|
|
|
156
167
|
categoryLinks: arr(n.categoryLinks?.categoryLink).map(parseCategoryLink),
|
|
157
168
|
costs: arr(n.costs?.cost).map(parseCost),
|
|
158
169
|
modifiers: arr(n.modifiers?.modifier).map(parseModifier),
|
|
170
|
+
...mg.length > 0 ? { modifierGroups: mg } : {},
|
|
159
171
|
selectionEntries: arr(n.selectionEntries?.selectionEntry).map(parseSelectionEntry),
|
|
160
172
|
selectionEntryGroups: arr(n.selectionEntryGroups?.selectionEntryGroup).map(parseSelectionEntryGroup),
|
|
161
173
|
entryLinks: arr(n.entryLinks?.entryLink).map(parseEntryLink)
|
|
162
174
|
};
|
|
163
175
|
}
|
|
164
176
|
function parseSelectionEntryGroup(n) {
|
|
177
|
+
const mg = arr(n.modifierGroups?.modifierGroup).map(parseModifierGroup);
|
|
165
178
|
return {
|
|
166
179
|
id: String(n["@_id"] ?? ""),
|
|
167
180
|
name: String(n["@_name"] ?? ""),
|
|
@@ -171,12 +184,14 @@ function parseSelectionEntryGroup(n) {
|
|
|
171
184
|
...n["@_defaultSelectionEntryId"] != null ? { defaultSelectionEntryId: String(n["@_defaultSelectionEntryId"]) } : {},
|
|
172
185
|
constraints: arr(n.constraints?.constraint).map(parseConstraint),
|
|
173
186
|
modifiers: arr(n.modifiers?.modifier).map(parseModifier),
|
|
187
|
+
...mg.length > 0 ? { modifierGroups: mg } : {},
|
|
174
188
|
selectionEntries: arr(n.selectionEntries?.selectionEntry).map(parseSelectionEntry),
|
|
175
189
|
selectionEntryGroups: arr(n.selectionEntryGroups?.selectionEntryGroup).map(parseSelectionEntryGroup),
|
|
176
190
|
entryLinks: arr(n.entryLinks?.entryLink).map(parseEntryLink)
|
|
177
191
|
};
|
|
178
192
|
}
|
|
179
193
|
function parseEntryLink(n) {
|
|
194
|
+
const mg = arr(n.modifierGroups?.modifierGroup).map(parseModifierGroup);
|
|
180
195
|
return {
|
|
181
196
|
id: String(n["@_id"] ?? ""),
|
|
182
197
|
name: String(n["@_name"] ?? ""),
|
|
@@ -190,6 +205,7 @@ function parseEntryLink(n) {
|
|
|
190
205
|
constraints: arr(n.constraints?.constraint).map(parseConstraint),
|
|
191
206
|
costs: arr(n.costs?.cost).map(parseCost),
|
|
192
207
|
modifiers: arr(n.modifiers?.modifier).map(parseModifier),
|
|
208
|
+
...mg.length > 0 ? { modifierGroups: mg } : {},
|
|
193
209
|
profiles: arr(n.profiles?.profile).map(parseProfile),
|
|
194
210
|
infoLinks: arr(n.infoLinks?.infoLink).map(parseInfoLink),
|
|
195
211
|
categoryLinks: arr(n.categoryLinks?.categoryLink).map(parseCategoryLink),
|
|
@@ -212,6 +228,7 @@ function parseForceEntry(n) {
|
|
|
212
228
|
id: String(n["@_id"] ?? ""),
|
|
213
229
|
name: String(n["@_name"] ?? ""),
|
|
214
230
|
hidden: bool(n["@_hidden"]),
|
|
231
|
+
constraints: arr(n.constraints?.constraint).map(parseConstraint),
|
|
215
232
|
categoryLinks: arr(n.categoryLinks?.categoryLink).map(parseForceCategoryLink),
|
|
216
233
|
rules: arr(n.rules?.rule).map(parseRule),
|
|
217
234
|
modifiers: arr(n.modifiers?.modifier).map(parseModifier),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/parse/xml.ts","../src/parse/index.ts","../src/project/catalogue.ts","../src/index.ts"],"sourcesContent":["import { XMLParser } from 'fast-xml-parser'\nimport type {\n IrCatalogueFile, IrCatalogueRoot,\n IrConstraint, IrCost, IrProfile, IrCharacteristic,\n IrRule, IrInfoLink, IrCategoryLink,\n IrModifier, IrCondition, IrConditionGroup, IrRepeat,\n IrSelectionEntry, IrSelectionEntryGroup, IrEntryLink,\n IrCostType, IrProfileType, IrCategoryEntry,\n IrEntryType,\n IrForceCategoryLink, IrForceEntry,\n IrCatalogueLink,\n} from '../ir/types.ts'\n\nconst ALWAYS_ARRAY = new Set([\n 'selectionEntry', 'selectionEntryGroup', 'entryLink',\n 'constraint', 'profile', 'characteristic', 'characteristicType',\n 'cost', 'costType', 'profileType',\n 'rule', 'categoryLink', 'categoryEntry',\n 'infoLink', 'modifier', 'condition', 'conditionGroup', 'repeat',\n 'forceEntry', 'catalogueLink',\n])\n\nconst xmlParser = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: '@_',\n textNodeName: '#text',\n isArray: (name) => ALWAYS_ARRAY.has(name),\n parseAttributeValue: true,\n})\n\n// ---- helpers ----\n\nfunction arr<T>(v: unknown): T[] {\n if (!v) return []\n if (Array.isArray(v)) return v as T[]\n return [v as T]\n}\n\nfunction bool(v: unknown): boolean {\n return v === true || v === 'true'\n}\n\n// ---- primitive node parsers ----\n\nfunction parseConstraint(n: any): IrConstraint {\n return {\n id: String(n['@_id'] ?? ''),\n type: n['@_type'] === 'min' ? 'min' : 'max',\n value: Number(n['@_value'] ?? 0),\n scope: String(n['@_scope'] ?? ''),\n field: String(n['@_field'] ?? 'selections'),\n shared: bool(n['@_shared']),\n includeChildSelections: bool(n['@_includeChildSelections']),\n }\n}\n\nfunction parseCost(n: any): IrCost {\n return {\n name: String(n['@_name'] ?? ''),\n typeId: String(n['@_typeId'] ?? ''),\n value: Number(n['@_value'] ?? 0),\n }\n}\n\nfunction parseCharacteristic(n: any): IrCharacteristic {\n const raw = n['#text']\n return {\n name: String(n['@_name'] ?? ''),\n typeId: String(n['@_typeId'] ?? ''),\n value: raw != null ? String(raw) : '',\n }\n}\n\nfunction parseProfile(n: any): IrProfile {\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n typeId: String(n['@_typeId'] ?? ''),\n typeName: String(n['@_typeName'] ?? ''),\n characteristics: arr<any>(n.characteristics?.characteristic).map(parseCharacteristic),\n }\n}\n\nfunction parseRule(n: any): IrRule {\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n description: n.description != null ? String(n.description) : '',\n }\n}\n\nfunction parseInfoLink(n: any): IrInfoLink {\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n targetId: String(n['@_targetId'] ?? ''),\n type: String(n['@_type'] ?? ''),\n }\n}\n\nfunction parseCategoryLink(n: any): IrCategoryLink {\n return {\n id: String(n['@_id'] ?? ''),\n targetId: String(n['@_targetId'] ?? ''),\n primary: bool(n['@_primary']),\n }\n}\n\nfunction parseCondition(n: any): IrCondition {\n const out: IrCondition = {\n type: String(n['@_type'] ?? ''),\n value: Number(n['@_value'] ?? 0),\n field: String(n['@_field'] ?? ''),\n scope: String(n['@_scope'] ?? ''),\n }\n if (n['@_childId'] != null) out.childId = String(n['@_childId'])\n if (n['@_shared'] != null) out.shared = bool(n['@_shared'])\n if (n['@_includeChildSelections'] != null) out.includeChildSelections = bool(n['@_includeChildSelections'])\n if (n['@_percentValue'] != null) out.percentValue = bool(n['@_percentValue'])\n return out\n}\n\nfunction parseConditionGroup(n: any): IrConditionGroup {\n return {\n type: String(n['@_type'] ?? ''),\n conditions: arr<any>(n.conditions?.condition).map(parseCondition),\n conditionGroups: arr<any>(n.conditionGroups?.conditionGroup).map(parseConditionGroup),\n }\n}\n\nfunction parseRepeat(n: any): IrRepeat {\n const out: IrRepeat = {\n value: Number(n['@_value'] ?? 0),\n repeats: Number(n['@_repeats'] ?? 0),\n field: String(n['@_field'] ?? ''),\n scope: String(n['@_scope'] ?? ''),\n }\n if (n['@_childId'] != null) out.childId = String(n['@_childId'])\n if (n['@_shared'] != null) out.shared = bool(n['@_shared'])\n if (n['@_includeChildSelections'] != null) out.includeChildSelections = bool(n['@_includeChildSelections'])\n if (n['@_roundUp'] != null) out.roundUp = bool(n['@_roundUp'])\n return out\n}\n\nfunction parseModifier(n: any): IrModifier {\n return {\n type: String(n['@_type'] ?? ''),\n field: String(n['@_field'] ?? ''),\n value: n['@_value'] ?? '',\n conditions: arr<any>(n.conditions?.condition).map(parseCondition),\n conditionGroups: arr<any>(n.conditionGroups?.conditionGroup).map(parseConditionGroup),\n repeats: arr<any>(n.repeats?.repeat).map(parseRepeat),\n }\n}\n\n// ---- structural node parsers (mutually recursive) ----\n\nfunction parseSelectionEntry(n: any): IrSelectionEntry {\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n collective: bool(n['@_collective']),\n import: bool(n['@_import']),\n type: (n['@_type'] ?? 'upgrade') as IrEntryType,\n ...(n['@_defaultAmount'] != null ? { defaultAmount: Number(n['@_defaultAmount']) } : {}),\n constraints: arr<any>(n.constraints?.constraint).map(parseConstraint),\n profiles: arr<any>(n.profiles?.profile).map(parseProfile),\n rules: arr<any>(n.rules?.rule).map(parseRule),\n infoLinks: arr<any>(n.infoLinks?.infoLink).map(parseInfoLink),\n categoryLinks: arr<any>(n.categoryLinks?.categoryLink).map(parseCategoryLink),\n costs: arr<any>(n.costs?.cost).map(parseCost),\n modifiers: arr<any>(n.modifiers?.modifier).map(parseModifier),\n selectionEntries: arr<any>(n.selectionEntries?.selectionEntry).map(parseSelectionEntry),\n selectionEntryGroups: arr<any>(n.selectionEntryGroups?.selectionEntryGroup).map(parseSelectionEntryGroup),\n entryLinks: arr<any>(n.entryLinks?.entryLink).map(parseEntryLink),\n }\n}\n\nfunction parseSelectionEntryGroup(n: any): IrSelectionEntryGroup {\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n collective: bool(n['@_collective']),\n import: bool(n['@_import']),\n ...(n['@_defaultSelectionEntryId'] != null\n ? { defaultSelectionEntryId: String(n['@_defaultSelectionEntryId']) }\n : {}),\n constraints: arr<any>(n.constraints?.constraint).map(parseConstraint),\n modifiers: arr<any>(n.modifiers?.modifier).map(parseModifier),\n selectionEntries: arr<any>(n.selectionEntries?.selectionEntry).map(parseSelectionEntry),\n selectionEntryGroups: arr<any>(n.selectionEntryGroups?.selectionEntryGroup).map(parseSelectionEntryGroup),\n entryLinks: arr<any>(n.entryLinks?.entryLink).map(parseEntryLink),\n }\n}\n\nfunction parseEntryLink(n: any): IrEntryLink {\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n collective: bool(n['@_collective']),\n import: bool(n['@_import']),\n targetId: String(n['@_targetId'] ?? ''),\n type: String(n['@_type'] ?? ''),\n ...(n['@_defaultAmount'] != null ? { defaultAmount: Number(n['@_defaultAmount']) } : {}),\n ...(n.comment != null ? { comment: String(n.comment).trim() } : {}),\n constraints: arr<any>(n.constraints?.constraint).map(parseConstraint),\n costs: arr<any>(n.costs?.cost).map(parseCost),\n modifiers: arr<any>(n.modifiers?.modifier).map(parseModifier),\n profiles: arr<any>(n.profiles?.profile).map(parseProfile),\n infoLinks: arr<any>(n.infoLinks?.infoLink).map(parseInfoLink),\n categoryLinks: arr<any>(n.categoryLinks?.categoryLink).map(parseCategoryLink),\n selectionEntries: arr<any>(n.selectionEntries?.selectionEntry).map(parseSelectionEntry),\n selectionEntryGroups: arr<any>(n.selectionEntryGroups?.selectionEntryGroup).map(parseSelectionEntryGroup),\n entryLinks: arr<any>(n.entryLinks?.entryLink).map(parseEntryLink),\n }\n}\n\n// ---- force entry parsers ----\n\nfunction parseForceCategoryLink(n: any): IrForceCategoryLink {\n return {\n id: String(n['@_id'] ?? ''),\n targetId: String(n['@_targetId'] ?? ''),\n primary: bool(n['@_primary']),\n hidden: bool(n['@_hidden']),\n constraints: arr<any>(n.constraints?.constraint).map(parseConstraint),\n }\n}\n\nfunction parseForceEntry(n: any): IrForceEntry {\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n categoryLinks: arr<any>(n.categoryLinks?.categoryLink).map(parseForceCategoryLink),\n rules: arr<any>(n.rules?.rule).map(parseRule),\n modifiers: arr<any>(n.modifiers?.modifier).map(parseModifier),\n forceEntries: arr<any>(n.forceEntries?.forceEntry).map(parseForceEntry),\n }\n}\n\n// ---- catalogue link parser ----\n\nfunction parseCatalogueLink(n: any): IrCatalogueLink {\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n targetId: String(n['@_targetId'] ?? ''),\n type: String(n['@_type'] ?? ''),\n importRootEntries: bool(n['@_importRootEntries']),\n }\n}\n\n// ---- catalogue root ----\n\nfunction parseCatalogueRoot(r: any): IrCatalogueRoot {\n return {\n costTypes: arr<any>(r.costTypes?.costType).map((n: any): IrCostType => ({\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n defaultCostLimit: Number(n['@_defaultCostLimit'] ?? -1),\n })),\n profileTypes: arr<any>(r.profileTypes?.profileType).map((n: any): IrProfileType => ({\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n characteristicTypes: arr<any>(n.characteristicTypes?.characteristicType).map((c: any) => ({\n id: String(c['@_id'] ?? ''),\n name: String(c['@_name'] ?? ''),\n })),\n })),\n categoryEntries: arr<any>(r.categoryEntries?.categoryEntry).map((n: any): IrCategoryEntry => ({\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n })),\n rules: arr<any>(r.rules?.rule).map(parseRule),\n sharedRules: arr<any>(r.sharedRules?.rule).map(parseRule),\n sharedProfiles: arr<any>(r.sharedProfiles?.profile).map(parseProfile),\n selectionEntries: arr<any>(r.selectionEntries?.selectionEntry).map(parseSelectionEntry),\n sharedSelectionEntries: arr<any>(r.sharedSelectionEntries?.selectionEntry).map(parseSelectionEntry),\n sharedSelectionEntryGroups: arr<any>(r.sharedSelectionEntryGroups?.selectionEntryGroup).map(parseSelectionEntryGroup),\n entryLinks: arr<any>(r.entryLinks?.entryLink).map(parseEntryLink),\n forceEntries: arr<any>(r.forceEntries?.forceEntry).map(parseForceEntry),\n }\n}\n\n// ---- public entry ----\n\nexport function parseFile(filename: string, xml: string): IrCatalogueFile {\n const doc = xmlParser.parse(xml)\n const isGst = 'gameSystem' in doc\n const root = isGst ? doc.gameSystem : doc.catalogue\n const kind: 'gameSystem' | 'catalogue' = isGst ? 'gameSystem' : 'catalogue'\n return {\n filename,\n kind,\n id: String(root['@_id'] ?? ''),\n name: String(root['@_name'] ?? ''),\n ...(root['@_gameSystemId'] != null ? { gameSystemId: String(root['@_gameSystemId']) } : {}),\n catalogueLinks: arr<any>(root.catalogueLinks?.catalogueLink).map(parseCatalogueLink),\n root: parseCatalogueRoot(root),\n }\n}\n","import type { Ir } from '../ir/types.ts'\nimport { parseFile } from './xml.ts'\n\nexport function parseToIr(files: Record<string, string>): Ir {\n const parsed = Object.entries(files).map(([filename, xml]) => parseFile(filename, xml))\n const gameSystem = parsed.find(f => f.kind === 'gameSystem')\n if (!gameSystem) throw new Error('parseToIr: no .gst file in source set')\n return {\n gameSystem,\n catalogues: parsed.filter(f => f.kind === 'catalogue'),\n }\n}\n","import type { Ir } from '../ir/types.ts'\n\n/**\n * IR -> downstream projection.\n *\n * Projects the faithful IR into the flattened, ready-to-consume shape the downstream application\n * needs. ALL domain interpretation lives here; the IR and parser stay domain-agnostic. The concrete\n * projector and its reference data are supplied locally and are never committed to this repo (see\n * README) -- this repo ships the framework, not any specific data model.\n *\n * \"Superset\" is the contract: the projection MUST reproduce every field the reference output carries\n * (so the existing consumer keeps working unchanged), and MAY add fields the current consumer lacks.\n * The golden-diff harness asserts the reproduction half; new fields are additive and ignored.\n *\n * STUB. Supply a local implementation that imports your projector modules. The local file is\n * gitignored so it never reaches this public repo. See CLAUDE.md for the hygiene rule.\n */\nexport function projectCatalogue(_ir: Ir): Record<string, unknown> {\n return {}\n}\n","import { parseToIr } from './parse/index.ts'\nimport { projectCatalogue } from './project/catalogue.ts'\n\n/**\n * Public entry point. `filename -> XML` map in, projected output object out. The signature matches\n * the downstream consumer's existing build step so this can be wired in incrementally (swap the\n * import, keep the golden diff green) without touching the consumer.\n */\nexport function buildCatalogue(files: Record<string, string>): Record<string, unknown> {\n const ir = parseToIr(files)\n return projectCatalogue(ir)\n}\n\nexport { parseToIr } from './parse/index.ts'\nexport { projectCatalogue } from './project/catalogue.ts'\nexport type { Ir, IrCatalogueFile } from './ir/types.ts'\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/parse/xml.ts","../src/parse/index.ts","../src/project/catalogue.ts","../src/index.ts"],"sourcesContent":["import { XMLParser } from 'fast-xml-parser'\nimport type {\n IrCatalogueFile, IrCatalogueRoot,\n IrConstraint, IrCost, IrProfile, IrCharacteristic,\n IrRule, IrInfoLink, IrCategoryLink,\n IrModifier, IrModifierGroup, IrCondition, IrConditionGroup, IrRepeat,\n IrSelectionEntry, IrSelectionEntryGroup, IrEntryLink,\n IrCostType, IrProfileType, IrCategoryEntry,\n IrEntryType,\n IrForceCategoryLink, IrForceEntry,\n IrCatalogueLink,\n} from '../ir/types.ts'\n\nconst ALWAYS_ARRAY = new Set([\n 'selectionEntry', 'selectionEntryGroup', 'entryLink',\n 'constraint', 'profile', 'characteristic', 'characteristicType',\n 'cost', 'costType', 'profileType',\n 'rule', 'categoryLink', 'categoryEntry',\n 'infoLink', 'modifier', 'condition', 'conditionGroup', 'repeat',\n 'forceEntry', 'catalogueLink', 'modifierGroup',\n])\n\nconst xmlParser = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: '@_',\n textNodeName: '#text',\n isArray: (name) => ALWAYS_ARRAY.has(name),\n parseAttributeValue: true,\n})\n\n// ---- helpers ----\n\nfunction arr<T>(v: unknown): T[] {\n if (!v) return []\n if (Array.isArray(v)) return v as T[]\n return [v as T]\n}\n\nfunction bool(v: unknown): boolean {\n return v === true || v === 'true'\n}\n\n// ---- primitive node parsers ----\n\nfunction parseConstraint(n: any): IrConstraint {\n return {\n id: String(n['@_id'] ?? ''),\n type: n['@_type'] === 'min' ? 'min' : 'max',\n value: Number(n['@_value'] ?? 0),\n scope: String(n['@_scope'] ?? ''),\n field: String(n['@_field'] ?? 'selections'),\n shared: bool(n['@_shared']),\n includeChildSelections: bool(n['@_includeChildSelections']),\n }\n}\n\nfunction parseCost(n: any): IrCost {\n return {\n name: String(n['@_name'] ?? ''),\n typeId: String(n['@_typeId'] ?? ''),\n value: Number(n['@_value'] ?? 0),\n }\n}\n\nfunction parseCharacteristic(n: any): IrCharacteristic {\n const raw = n['#text']\n return {\n name: String(n['@_name'] ?? ''),\n typeId: String(n['@_typeId'] ?? ''),\n value: raw != null ? String(raw) : '',\n }\n}\n\nfunction parseProfile(n: any): IrProfile {\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n typeId: String(n['@_typeId'] ?? ''),\n typeName: String(n['@_typeName'] ?? ''),\n characteristics: arr<any>(n.characteristics?.characteristic).map(parseCharacteristic),\n }\n}\n\nfunction parseRule(n: any): IrRule {\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n description: n.description != null ? String(n.description) : '',\n }\n}\n\nfunction parseInfoLink(n: any): IrInfoLink {\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n targetId: String(n['@_targetId'] ?? ''),\n type: String(n['@_type'] ?? ''),\n }\n}\n\nfunction parseCategoryLink(n: any): IrCategoryLink {\n return {\n id: String(n['@_id'] ?? ''),\n targetId: String(n['@_targetId'] ?? ''),\n primary: bool(n['@_primary']),\n }\n}\n\nfunction parseCondition(n: any): IrCondition {\n const out: IrCondition = {\n type: String(n['@_type'] ?? ''),\n value: Number(n['@_value'] ?? 0),\n field: String(n['@_field'] ?? ''),\n scope: String(n['@_scope'] ?? ''),\n }\n if (n['@_childId'] != null) out.childId = String(n['@_childId'])\n if (n['@_shared'] != null) out.shared = bool(n['@_shared'])\n if (n['@_includeChildSelections'] != null) out.includeChildSelections = bool(n['@_includeChildSelections'])\n if (n['@_percentValue'] != null) out.percentValue = bool(n['@_percentValue'])\n return out\n}\n\nfunction parseConditionGroup(n: any): IrConditionGroup {\n return {\n type: String(n['@_type'] ?? ''),\n conditions: arr<any>(n.conditions?.condition).map(parseCondition),\n conditionGroups: arr<any>(n.conditionGroups?.conditionGroup).map(parseConditionGroup),\n }\n}\n\nfunction parseRepeat(n: any): IrRepeat {\n const out: IrRepeat = {\n value: Number(n['@_value'] ?? 0),\n repeats: Number(n['@_repeats'] ?? 0),\n field: String(n['@_field'] ?? ''),\n scope: String(n['@_scope'] ?? ''),\n }\n if (n['@_childId'] != null) out.childId = String(n['@_childId'])\n if (n['@_shared'] != null) out.shared = bool(n['@_shared'])\n if (n['@_includeChildSelections'] != null) out.includeChildSelections = bool(n['@_includeChildSelections'])\n if (n['@_roundUp'] != null) out.roundUp = bool(n['@_roundUp'])\n return out\n}\n\nfunction parseModifier(n: any): IrModifier {\n return {\n type: String(n['@_type'] ?? ''),\n field: String(n['@_field'] ?? ''),\n value: n['@_value'] ?? '',\n conditions: arr<any>(n.conditions?.condition).map(parseCondition),\n conditionGroups: arr<any>(n.conditionGroups?.conditionGroup).map(parseConditionGroup),\n repeats: arr<any>(n.repeats?.repeat).map(parseRepeat),\n }\n}\n\nfunction parseModifierGroup(n: any): IrModifierGroup {\n return {\n type: String(n['@_type'] ?? 'and'),\n modifiers: arr<any>(n.modifiers?.modifier).map(parseModifier),\n conditions: arr<any>(n.conditions?.condition).map(parseCondition),\n conditionGroups: arr<any>(n.conditionGroups?.conditionGroup).map(parseConditionGroup),\n modifierGroups: arr<any>(n.modifierGroups?.modifierGroup).map(parseModifierGroup),\n }\n}\n\n// ---- structural node parsers (mutually recursive) ----\n\nfunction parseSelectionEntry(n: any): IrSelectionEntry {\n const mg = arr<any>(n.modifierGroups?.modifierGroup).map(parseModifierGroup)\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n collective: bool(n['@_collective']),\n import: bool(n['@_import']),\n type: (n['@_type'] ?? 'upgrade') as IrEntryType,\n ...(n['@_defaultAmount'] != null ? { defaultAmount: Number(n['@_defaultAmount']) } : {}),\n constraints: arr<any>(n.constraints?.constraint).map(parseConstraint),\n profiles: arr<any>(n.profiles?.profile).map(parseProfile),\n rules: arr<any>(n.rules?.rule).map(parseRule),\n infoLinks: arr<any>(n.infoLinks?.infoLink).map(parseInfoLink),\n categoryLinks: arr<any>(n.categoryLinks?.categoryLink).map(parseCategoryLink),\n costs: arr<any>(n.costs?.cost).map(parseCost),\n modifiers: arr<any>(n.modifiers?.modifier).map(parseModifier),\n ...(mg.length > 0 ? { modifierGroups: mg } : {}),\n selectionEntries: arr<any>(n.selectionEntries?.selectionEntry).map(parseSelectionEntry),\n selectionEntryGroups: arr<any>(n.selectionEntryGroups?.selectionEntryGroup).map(parseSelectionEntryGroup),\n entryLinks: arr<any>(n.entryLinks?.entryLink).map(parseEntryLink),\n }\n}\n\nfunction parseSelectionEntryGroup(n: any): IrSelectionEntryGroup {\n const mg = arr<any>(n.modifierGroups?.modifierGroup).map(parseModifierGroup)\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n collective: bool(n['@_collective']),\n import: bool(n['@_import']),\n ...(n['@_defaultSelectionEntryId'] != null\n ? { defaultSelectionEntryId: String(n['@_defaultSelectionEntryId']) }\n : {}),\n constraints: arr<any>(n.constraints?.constraint).map(parseConstraint),\n modifiers: arr<any>(n.modifiers?.modifier).map(parseModifier),\n ...(mg.length > 0 ? { modifierGroups: mg } : {}),\n selectionEntries: arr<any>(n.selectionEntries?.selectionEntry).map(parseSelectionEntry),\n selectionEntryGroups: arr<any>(n.selectionEntryGroups?.selectionEntryGroup).map(parseSelectionEntryGroup),\n entryLinks: arr<any>(n.entryLinks?.entryLink).map(parseEntryLink),\n }\n}\n\nfunction parseEntryLink(n: any): IrEntryLink {\n const mg = arr<any>(n.modifierGroups?.modifierGroup).map(parseModifierGroup)\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n collective: bool(n['@_collective']),\n import: bool(n['@_import']),\n targetId: String(n['@_targetId'] ?? ''),\n type: String(n['@_type'] ?? ''),\n ...(n['@_defaultAmount'] != null ? { defaultAmount: Number(n['@_defaultAmount']) } : {}),\n ...(n.comment != null ? { comment: String(n.comment).trim() } : {}),\n constraints: arr<any>(n.constraints?.constraint).map(parseConstraint),\n costs: arr<any>(n.costs?.cost).map(parseCost),\n modifiers: arr<any>(n.modifiers?.modifier).map(parseModifier),\n ...(mg.length > 0 ? { modifierGroups: mg } : {}),\n profiles: arr<any>(n.profiles?.profile).map(parseProfile),\n infoLinks: arr<any>(n.infoLinks?.infoLink).map(parseInfoLink),\n categoryLinks: arr<any>(n.categoryLinks?.categoryLink).map(parseCategoryLink),\n selectionEntries: arr<any>(n.selectionEntries?.selectionEntry).map(parseSelectionEntry),\n selectionEntryGroups: arr<any>(n.selectionEntryGroups?.selectionEntryGroup).map(parseSelectionEntryGroup),\n entryLinks: arr<any>(n.entryLinks?.entryLink).map(parseEntryLink),\n }\n}\n\n// ---- force entry parsers ----\n\nfunction parseForceCategoryLink(n: any): IrForceCategoryLink {\n return {\n id: String(n['@_id'] ?? ''),\n targetId: String(n['@_targetId'] ?? ''),\n primary: bool(n['@_primary']),\n hidden: bool(n['@_hidden']),\n constraints: arr<any>(n.constraints?.constraint).map(parseConstraint),\n }\n}\n\nfunction parseForceEntry(n: any): IrForceEntry {\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n constraints: arr<any>(n.constraints?.constraint).map(parseConstraint),\n categoryLinks: arr<any>(n.categoryLinks?.categoryLink).map(parseForceCategoryLink),\n rules: arr<any>(n.rules?.rule).map(parseRule),\n modifiers: arr<any>(n.modifiers?.modifier).map(parseModifier),\n forceEntries: arr<any>(n.forceEntries?.forceEntry).map(parseForceEntry),\n }\n}\n\n// ---- catalogue link parser ----\n\nfunction parseCatalogueLink(n: any): IrCatalogueLink {\n return {\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n targetId: String(n['@_targetId'] ?? ''),\n type: String(n['@_type'] ?? ''),\n importRootEntries: bool(n['@_importRootEntries']),\n }\n}\n\n// ---- catalogue root ----\n\nfunction parseCatalogueRoot(r: any): IrCatalogueRoot {\n return {\n costTypes: arr<any>(r.costTypes?.costType).map((n: any): IrCostType => ({\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n defaultCostLimit: Number(n['@_defaultCostLimit'] ?? -1),\n })),\n profileTypes: arr<any>(r.profileTypes?.profileType).map((n: any): IrProfileType => ({\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n characteristicTypes: arr<any>(n.characteristicTypes?.characteristicType).map((c: any) => ({\n id: String(c['@_id'] ?? ''),\n name: String(c['@_name'] ?? ''),\n })),\n })),\n categoryEntries: arr<any>(r.categoryEntries?.categoryEntry).map((n: any): IrCategoryEntry => ({\n id: String(n['@_id'] ?? ''),\n name: String(n['@_name'] ?? ''),\n hidden: bool(n['@_hidden']),\n })),\n rules: arr<any>(r.rules?.rule).map(parseRule),\n sharedRules: arr<any>(r.sharedRules?.rule).map(parseRule),\n sharedProfiles: arr<any>(r.sharedProfiles?.profile).map(parseProfile),\n selectionEntries: arr<any>(r.selectionEntries?.selectionEntry).map(parseSelectionEntry),\n sharedSelectionEntries: arr<any>(r.sharedSelectionEntries?.selectionEntry).map(parseSelectionEntry),\n sharedSelectionEntryGroups: arr<any>(r.sharedSelectionEntryGroups?.selectionEntryGroup).map(parseSelectionEntryGroup),\n entryLinks: arr<any>(r.entryLinks?.entryLink).map(parseEntryLink),\n forceEntries: arr<any>(r.forceEntries?.forceEntry).map(parseForceEntry),\n }\n}\n\n// ---- public entry ----\n\nexport function parseFile(filename: string, xml: string): IrCatalogueFile {\n const doc = xmlParser.parse(xml)\n const isGst = 'gameSystem' in doc\n const root = isGst ? doc.gameSystem : doc.catalogue\n const kind: 'gameSystem' | 'catalogue' = isGst ? 'gameSystem' : 'catalogue'\n return {\n filename,\n kind,\n id: String(root['@_id'] ?? ''),\n name: String(root['@_name'] ?? ''),\n ...(root['@_gameSystemId'] != null ? { gameSystemId: String(root['@_gameSystemId']) } : {}),\n catalogueLinks: arr<any>(root.catalogueLinks?.catalogueLink).map(parseCatalogueLink),\n root: parseCatalogueRoot(root),\n }\n}\n","import type { Ir } from '../ir/types.ts'\nimport { parseFile } from './xml.ts'\n\nexport function parseToIr(files: Record<string, string>): Ir {\n const parsed = Object.entries(files).map(([filename, xml]) => parseFile(filename, xml))\n const gameSystem = parsed.find(f => f.kind === 'gameSystem')\n if (!gameSystem) throw new Error('parseToIr: no .gst file in source set')\n return {\n gameSystem,\n catalogues: parsed.filter(f => f.kind === 'catalogue'),\n }\n}\n","import type { Ir } from '../ir/types.ts'\n\n/**\n * IR -> downstream projection.\n *\n * Projects the faithful IR into the flattened, ready-to-consume shape the downstream application\n * needs. ALL domain interpretation lives here; the IR and parser stay domain-agnostic. The concrete\n * projector and its reference data are supplied locally and are never committed to this repo (see\n * README) -- this repo ships the framework, not any specific data model.\n *\n * \"Superset\" is the contract: the projection MUST reproduce every field the reference output carries\n * (so the existing consumer keeps working unchanged), and MAY add fields the current consumer lacks.\n * The golden-diff harness asserts the reproduction half; new fields are additive and ignored.\n *\n * STUB. Supply a local implementation that imports your projector modules. The local file is\n * gitignored so it never reaches this public repo. See CLAUDE.md for the hygiene rule.\n */\nexport function projectCatalogue(_ir: Ir): Record<string, unknown> {\n return {}\n}\n","import { parseToIr } from './parse/index.ts'\nimport { projectCatalogue } from './project/catalogue.ts'\n\n/**\n * Public entry point. `filename -> XML` map in, projected output object out. The signature matches\n * the downstream consumer's existing build step so this can be wired in incrementally (swap the\n * import, keep the golden diff green) without touching the consumer.\n */\nexport function buildCatalogue(files: Record<string, string>): Record<string, unknown> {\n const ir = parseToIr(files)\n return projectCatalogue(ir)\n}\n\nexport { parseToIr } from './parse/index.ts'\nexport { projectCatalogue } from './project/catalogue.ts'\nexport type { Ir, IrCatalogueFile, IrModifierGroup } from './ir/types.ts'\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bsdata-parser",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Faithful BSData .gst/.cat XML parser: parses game-data source files into a typed IR and exposes a golden-diff harness for validating a downstream projection.",
|