Skip to content

Commit 362497d

Browse files
Update from_module to use the base module if it is a dependency (#80)
1 parent 9c358cc commit 362497d

File tree

6 files changed

+260
-38
lines changed

6 files changed

+260
-38
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "minor",
3+
"comment": "Set all APIs from_module to the from_module's base module and all dependencies to the dependency's base module.",
4+
"packageName": "@minecraft/api-docs-generator",
5+
"email": "[email protected]",
6+
"dependentChangeType": "patch"
7+
}

tools/api-docs-generator-test-snapshots/test/only_generate_latest_versions/__snapshots__/onlyGenerateLatestVersions.spec.ts.snap

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -58,34 +58,19 @@ exports[`Only Generate Latest Script Module Versions > Generates correct output
5858
},
5959
{
6060
"version": "1.1.0",
61-
"dependencies": [],
62-
"peer_dependencies": [],
63-
"classes": [],
64-
"interfaces": [],
65-
"errors": [],
66-
"objects": [],
67-
"functions": [],
61+
"$added": true,
6862
"constants": [
6963
{
70-
"name": "GlobalConstantV110",
71-
"$added": true,
7264
"is_read_only": true,
7365
"is_static": true,
66+
"name": "GlobalConstantV110",
7467
"type": {
7568
"is_bind_type": false,
7669
"is_errorable": false,
7770
"name": "int32"
7871
},
7972
"value": 8
80-
}
81-
],
82-
"enums": [],
83-
"type_aliases": []
84-
},
85-
{
86-
"version": "1.0.0",
87-
"$added": true,
88-
"constants": [
73+
},
8974
{
9075
"is_read_only": true,
9176
"is_static": true,
@@ -186,15 +171,12 @@ description: Changelog of the \`test-module\` module
186171
- [2.1.0-beta](#210-beta)
187172
- [2.0.0](#200)
188173
- [1.1.0](#110)
189-
- [1.0.0](#100)
190174
191175
## 2.1.0-beta
192176
#### Added constant \`GlobalConstantV210Beta\`
193177
## 2.0.0
194178
#### Added constant \`GlobalConstantV200\`
195179
## 1.1.0
196-
#### Added constant \`GlobalConstantV110\`
197-
## 1.0.0
198180
#### Added \`test-module\` Module
199181
"
200182
`;
@@ -282,9 +264,6 @@ exports[`Only Generate Latest Script Module Versions > Generates correct output
282264
- Added constant \`GlobalConstantV200\`
283265
284266
=== 1.1.0 ===
285-
- Added constant \`GlobalConstantV110\`
286-
287-
=== 1.0.0 ===
288267
- Added \`test-module\` module
289268
290269
== /Change Log =="

tools/api-docs-generator/src/filters/CommonFilters.ts

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import {
5252
MinecraftError,
5353
MinecraftFunction,
5454
MinecraftInterface,
55+
MinecraftModuleDependency,
5556
MinecraftModuleDescription,
5657
MinecraftObject,
5758
MinecraftProperty,
@@ -3255,15 +3256,54 @@ function addRuntimeConditionsFlag(releases: MinecraftRelease[]) {
32553256
}
32563257
}
32573258

3259+
function upgradeFromModuleToBaseModule(releases: MinecraftRelease[]) {
3260+
for (const release of releases) {
3261+
const scriptModules = getLatestScriptModules(release.script_modules);
3262+
const uuidToLatestBase = Object.fromEntries(
3263+
scriptModules.map(m => {
3264+
if (!m.base_module) {
3265+
return [m.uuid, undefined];
3266+
}
3267+
return [m.uuid, scriptModules.find(m1 => m1.name === m.base_module.name)];
3268+
})
3269+
);
3270+
for (const scriptModule of release.script_modules) {
3271+
utils.scanObjectForMemberWithName(
3272+
scriptModule,
3273+
'from_module',
3274+
(jsonObject: Record<string, MinecraftModuleDescription>) => {
3275+
if (jsonObject.from_module.uuid === scriptModule.uuid) {
3276+
return;
3277+
}
3278+
if (uuidToLatestBase[jsonObject.from_module.uuid]) {
3279+
const base = uuidToLatestBase[jsonObject.from_module.uuid];
3280+
const dependencies: MinecraftModuleDependency[] = scriptModule.dependencies.concat(
3281+
scriptModule.peer_dependencies ?? []
3282+
);
3283+
3284+
if (dependencies.every(d => d.uuid !== base.uuid)) {
3285+
// Only change dependency if we rely on base module
3286+
return;
3287+
}
3288+
jsonObject.from_module.name = base.name;
3289+
jsonObject.from_module.uuid = base.uuid;
3290+
}
3291+
}
3292+
);
3293+
}
3294+
}
3295+
}
3296+
32583297
export const CommonFilters: FilterGroup = {
32593298
id: 'common',
32603299
filters: [
32613300
['mark_prerelease_modules', markModulesWithPrerelease], // No dependencies
32623301
['default_module_categories', defaultModuleCategories], // No dependencies
32633302
['link_derived_types', linkDerivedTypes], // No dependencies
3303+
['upgrade_from_module_to_base', upgradeFromModuleToBaseModule], // No dependencies
32643304
['add_from_module_to_root', addFromModuleToRoot], // No dependencies
32653305
['external_module_flag', fromExternalModule], // Depends on link_derived_types, add_from_module_to_root
3266-
['add_from_module_to_dependencies', addFromModuleToDependencies], // No dependencies
3306+
['add_from_module_to_dependencies', addFromModuleToDependencies], // Run after upgrade_from_module_to_base for perf
32673307
['set_from_module_to_dependent_modules', setFromModuleToDependentModules], // No dependencies
32683308
['markup_latest_modules', markupLatestModules], // Depends on add_from_module_to_root, add_from_module_to_dependencies, set_from_module_to_dependent_modules
32693309
['markup_names', markupNames], // Depends on add_from_module_to_dependencies, markup_latest_modules

tools/api-docs-generator/src/generator.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,10 @@ function mergeScriptModule(base: MinecraftScriptModule, parent: MinecraftScriptM
173173
/**
174174
* Merges each script module that specifies a 'parentModule' with it's parent, returning the list of all modules after merging.
175175
*
176-
* If 'includeParentModules' is true, parent modules will be generated on their own in addition to the merged modules.
176+
* If 'includeBaseModules' is true, base modules will be generated on their own in addition to the merged modules.
177177
*/
178-
function getMergedScriptModules(
179-
context: GeneratorContext,
178+
export function getMergedScriptModules(
179+
includeBaseModules: boolean,
180180
scriptModules: MinecraftScriptModule[]
181181
): MinecraftScriptModule[] {
182182
const standardModules = new Map<string, MinecraftScriptModule>();
@@ -221,8 +221,13 @@ function getMergedScriptModules(
221221
`Merging parent module '${parentName}@${parentVersion}' into '${moduleToParent.name}@${moduleToParent.version}'.`
222222
);
223223
const mergedModule = mergeScriptModule(moduleToParent, parent);
224+
mergedModule.parentModule = moduleToParent.parentModule;
225+
parent.base_module = {
226+
name: moduleToParent.name,
227+
version: moduleToParent.version,
228+
};
224229

225-
if (!context.includeBaseModules) {
230+
if (!includeBaseModules) {
226231
standardModules.delete(`${parentName}_${parentVersion}_${minecraftVersion}`);
227232
}
228233

@@ -352,7 +357,7 @@ function loadMinecraftReleases(context: GeneratorContext): MinecraftReleasesByVe
352357

353358
const scriptModulesToProcess = context.skipMerging
354359
? allScriptModules
355-
: getMergedScriptModules(context, allScriptModules);
360+
: getMergedScriptModules(context.includeBaseModules, allScriptModules);
356361

357362
for (const scriptModule of scriptModulesToProcess) {
358363
const moduleMinecraftVersion = scriptModule.minecraft_version;
@@ -607,13 +612,13 @@ export async function generate(options: GenerateOptions) {
607612
utils.reverseSemVerSortComparer('minecraft_version')
608613
);
609614

615+
filterIncludedModules(context, sortedMinecraftReleases);
616+
610617
if (context.changelogStrategy.shouldGenerateChangelogs(sortedMinecraftReleases)) {
611618
const changelogGenerator = new ChangelogGenerator(context.changelogStrategy);
612619
changelogGenerator.generateChangelogs(sortedMinecraftReleases);
613620
}
614621

615-
filterIncludedModules(context, sortedMinecraftReleases);
616-
617622
const filteredMinecraftReleases = markupFilters(context, sortedMinecraftReleases);
618623

619624
await generateMarkupFiles(context, filteredMinecraftReleases, sortedMinecraftReleases);

tools/api-docs-generator/src/modules/MinecraftScriptModule.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,7 @@ export const MinecraftScriptModuleRecord = Intersect(
552552
module_type: Literal('script'),
553553
uuid: String,
554554
parentModule: Optional(Union(String, MinecraftParentModuleRecord).Or(Null)),
555+
base_module: Optional(MinecraftParentModuleRecord),
555556
dependencies: Optional(Array(MinecraftModuleDependencyRecord).Or(Null)),
556557
peer_dependencies: Optional(Array(MinecraftModuleDependencyRecord).Or(Null)),
557558
}),

0 commit comments

Comments
 (0)