mirror of
https://github.com/enso-org/enso.git
synced 2024-11-23 08:08:34 +03:00
68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
const fs = require("fs");
|
|
const path = require("path");
|
|
const process = require("child_process");
|
|
|
|
/// List of configs to clean.
|
|
const configPaths = [
|
|
"../../engine/launcher/src/main/resources/META-INF/native-image/org/enso/launcher",
|
|
"../../lib/scala/project-manager/src/main/resources/META-INF/native-image/org/enso/projectmanager",
|
|
];
|
|
|
|
/// Checks if the entry is ephemeral (contains a pointer in its name).
|
|
function isEntryEphemeralClass(entry) {
|
|
const name = entry["name"];
|
|
if (name === undefined) {
|
|
return false;
|
|
}
|
|
return name.indexOf("/0x00") >= 0;
|
|
}
|
|
|
|
/// Sorts the list of entries in a predictable order.
|
|
function sortEntries(entries) {
|
|
const copy = Array.from(entries);
|
|
copy.sort((first, second) => {
|
|
const firstName = first["name"];
|
|
const secondName = second["name"];
|
|
if (firstName !== undefined && secondName !== undefined) {
|
|
return firstName < secondName;
|
|
} else if (firstName === undefined && secondName === undefined) {
|
|
return JSON.stringify(first) < JSON.stringify(second);
|
|
} else {
|
|
return firstName === undefined;
|
|
}
|
|
});
|
|
return copy;
|
|
}
|
|
|
|
/// Removes ephemeral classes from the reflection config and ensures it has a
|
|
/// stable order of entries.
|
|
function cleanReflectionConfig(reflectConfigPath) {
|
|
const data = fs.readFileSync(reflectConfigPath, "utf-8");
|
|
const parsed = JSON.parse(data);
|
|
const withoutEphemeral = parsed.filter(
|
|
(entry) => !isEntryEphemeralClass(entry)
|
|
);
|
|
const sorted = sortEntries(withoutEphemeral);
|
|
const serialized = JSON.stringify(sorted);
|
|
const hasChanges = serialized !== JSON.stringify(parsed);
|
|
if (hasChanges) {
|
|
fs.writeFileSync(reflectConfigPath, serialized);
|
|
console.log("Rewritten " + reflectConfigPath);
|
|
} else {
|
|
console.log("No changes in " + reflectConfigPath);
|
|
}
|
|
}
|
|
|
|
/// Runs prettier on the provided path.
|
|
function runPrettier(configPath) {
|
|
console.log("Running prettier for " + configPath);
|
|
process.spawn("npx", ["prettier", "--write", configPath], {
|
|
stdio: "inherit",
|
|
});
|
|
}
|
|
|
|
configPaths.forEach(function (configPath) {
|
|
cleanReflectionConfig(path.join(configPath, "reflect-config.json"));
|
|
runPrettier(configPath);
|
|
});
|