Skip to content

Commit

Permalink
1.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Cynosphere authored Jan 17, 2025
1 parent a79b635 commit b808105
Show file tree
Hide file tree
Showing 128 changed files with 3,454 additions and 430 deletions.
2 changes: 1 addition & 1 deletion .prettierrc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"printWidth": 80,
"printWidth": 120,
"trailingComma": "none",
"tabWidth": 2,
"singleQuote": false
Expand Down
9 changes: 9 additions & 0 deletions build.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
node .\generate.js types --write
node .\generate.js imports --write
prettier --write ./src

node .\generate.js declares "@moonlight-mod/wp/" > ..\moonlight\packages\types\src\mappings.d.ts
prettier --write ..\moonlight\packages\types\src\mappings.d.ts

pnpm run clean
pnpm run build
124 changes: 88 additions & 36 deletions generate.js
Original file line number Diff line number Diff line change
@@ -1,49 +1,74 @@
const fs = require("fs");

/*const typeNames = {
"chroma-js": "chroma",
"discord/Dispatcher": "_Dispatcher", // "Dispatcher" may be reserved in some scenarios
"discord/components/common/index": "Components",
"discord/packages/flux": "Flux",
"highlight.js": "HighlightJS",
"highlight.js/lib/core": "HighlightJSCore",
"platform.js": "platformjs",
react: "React",
"simple-markdown": "SimpleMarkdown",
"uuid/v4": "UUIDv4"
};*/
const fs = require("node:fs");
const path = require("node:path");
const ts = require("typescript");

const mappedTypes = {
"discord/actions/ContextMenuActionCreators": "ContextMenuActionCreators",
"discord/Dispatcher": "_Dispatcher", // "Dispatcher" may be reserved in some scenarios
"discord/actions/UserSettingsModalActionCreators": "UserSettingsModalActionCreators",
"discord/components/common/Alerts": "Alerts",
"discord/components/common/BaseHeaderBar": "BaseHeaderBar",
"discord/components/common/FileUpload": "FileUpload",
"discord/components/common/FormSwitch.css": "FormSwitchCSS",
"discord/components/common/HeaderBar.css": "HeaderBarCSS",
"discord/components/common/HelpMessage.css": "HelpMessageCSS",
"discord/components/common/index": "Components",
"discord/modules/guild_settings/IntegrationCard.css": "IntegrationCardCSS",
"discord/components/common/PanelButton": "PanelButton",
"discord/components/common/Scroller.css": "ScrollerCSS",
"discord/components/modals/ConfirmModal": "ConfirmModal",
"discord/Constants": "Constants",
"discord/Dispatcher": "_Dispatcher", // "Dispatcher" may be reserved in some scenarios
"discord/lib/BaseRecord": "BaseRecord",
"discord/lib/web/Storage": "Storage",
"discord/modules/build_overrides/web/BuildOverride.css": "BuildOverrideCSS",
"discord/modules/discovery/web/Discovery.css": "DiscoveryCSS",
"discord/modules/forums/web/Forums.css": "ForumsCSS",
"discord/modules/forums/web/Header.css": "ForumHeaderCSS",
"discord/modules/forums/web/SortMenu.css": "ForumSortMenuCSS",
"discord/modules/forums/web/Tag": "ForumTag",
"discord/modules/guild_settings/roles/web/GuildSettingsRoleEdit.css": "GuildSettingsRoleEditCSS",
"discord/modules/guild_settings/web/AppCard.css": "AppCardCSS",
"discord/modules/guild_settings/web/AppCardItem.css": "AppCardItemCSS",
"discord/modules/guild_settings/web/SearchSection.css": "GuildSettingsSearchSectionCSS",
"discord/modules/markup/MarkupUtils": "MarkupUtils",
"discord/modules/user_settings/web/openUserSettings": "OpenUserSettings",
"discord/modules/menus/web/Menu": "Menu",
"discord/modules/oauth2/index": "Oauth2",
"discord/modules/messages/web/Markup.css": "MarkupCSS",
"discord/modules/messages/web/Message.css": "MessageCSS",
"discord/modules/people/web/PeoplePage.css": "PeoplePageCSS",
"discord/modules/user_profile/web/BiteSizeActivity.css": "ByteSizeActivityCSS",
"discord/packages/flux": "Flux",
"discord/utils/ClipboardUtils": "ClipboardUtils",
"discord/utils/HTTPUtils": "HTTPUtils",
"discord/utils/NativeUtils": "NativeUtils",
"discord/styles/shared/Margins.css": "MarginsCSS",
"discord/uikit/Flex": "Flex",
react: "React"
"chroma-js": "ChromaJS",
"dependency-graph": "DependencyGraph",
"highlight.js": "HighlightJS",
"highlight.js/lib/core": "HighlightJSCore",
lodash: "lodash",
murmurhash: "murmurhash",
"platform.js": "PlatformJS",
react: "React",
"uuid/v4": "UUID"
};

const write = process.argv.includes("--write");

/*function getPaths() {
function getPaths() {
const paths = fs.readdirSync("src/mappings", { recursive: true });
const out = [];

for (const path of paths) {
if (!path.endsWith(".ts")) continue;
out.push(path.replace(".ts", "").replaceAll("\\", "/"));
for (const filePath of paths) {
if (!filePath.endsWith(".ts")) continue;
if (path.basename(filePath).startsWith("_")) continue;
out.push(filePath.replace(".ts", "").replaceAll("\\", "/"));
}

return out.sort();
}*/
}

/*function generateImports() {
function generateImports() {
let str = "// auto-generated\n";

for (const path of getPaths()) {
Expand All @@ -55,7 +80,7 @@ const write = process.argv.includes("--write");
} else {
console.log(str);
}
}*/
}

function generateTypes() {
const paths = Object.keys(mappedTypes).sort();
Expand All @@ -77,8 +102,7 @@ function generateTypes() {
}
str += "};\n\n";

str +=
"export declare function WebpackRequire<T extends keyof MappedModules>(\n module: T\n): MappedModules[T];\n";
str += "export declare function WebpackRequire<T extends keyof MappedModules>(\n module: T\n): MappedModules[T];\n";

if (write) {
fs.writeFileSync("src/types.ts", str);
Expand All @@ -92,9 +116,39 @@ function generateDeclares(prefix) {

for (const path of Object.keys(mappedTypes).sort()) {
str += `declare module "${prefix}${path}" {\n`;
str += ` import { MappedModules } from "@moonlight-mod/mappings";\n`;
str += ` const _: MappedModules["${path}"];\n`;
str += ` export = _;\n`;

let sourcePath = "./src/mappings/" + path + ".ts";
if (!fs.existsSync(sourcePath)) sourcePath = "./src/mappings/" + path + "/index.ts";
const program = ts.createProgram([sourcePath], {
target: ts.ScriptTarget.ES2022,
module: ts.ScriptTarget.ES2022,
noEmit: true
});
const source = program.getSourceFile(sourcePath);
const typeChecker = program.getTypeChecker();
const alias = source.statements.find((s) => ts.isTypeAliasDeclaration(s) && s.name.getText(source) === "Exports");
const type = typeChecker.getTypeAtLocation(alias);
const properties = type.getProperties().map((p) => p.getName());

if (properties.some((s) => s === "__mappings_exportEquals")) {
str += ` import { MappedModules } from "@moonlight-mod/mappings";\n`;
str += ` const _: Omit<MappedModules["${path}"], "__mappings_exportEquals">;\n`;
str += ` export = _;\n`;
} else if (properties.length > 0) {
str += ` import { MappedModules } from "@moonlight-mod/mappings";\n`;
for (const name of properties) {
if (name === "default") {
str += ` const _default: MappedModules["${path}"]["default"];\n`;
str += ` export default _default;\n`;
} else {
// :(
if (name.includes("-")) continue;

str += ` export const ${name}: MappedModules["${path}"]["${name}"];\n`;
}
}
}

str += `}\n\n`;
}

Expand All @@ -104,11 +158,9 @@ function generateDeclares(prefix) {
const command = process.argv.length > 2 ? process.argv[2] : null;

switch (command) {
// "do not use the imports argument that's for when we finish every type (imports file loads every single module to register them, right now it'd only register the ones with types and break 90% of it)"
// "it should probably just be removed tbh, since we aren't gonna type every module"
/*case "imports":
case "imports":
generateImports();
break;*/
break;

case "types":
generateTypes();
Expand All @@ -119,6 +171,6 @@ switch (command) {
break;

default:
console.error(`Usage: node generate.js <types|declares>`);
console.error(`Usage: node generate.js <imports|types|declares>`);
break;
}
6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@moonlight-mod/mappings",
"version": "1.0.11",
"version": "1.1.0",
"license": "MIT",
"repository": {
"type": "git",
Expand All @@ -22,7 +22,11 @@
"prepare": "npm run build"
},
"dependencies": {
"@types/chroma-js": "^3.1.0",
"@types/flux": "^3.1.14",
"@types/highlightjs": "^9.12.6",
"@types/lodash": "^4.17.14",
"@types/platform": "^1.3.6",
"@types/react": "^18.3.10",
"csstype": "^3.1.3"
},
Expand Down
32 changes: 32 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions snippets/duplicates.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
() => {
const ids = Object.values(moonlight.moonmap.modules);
const duplicates = ids.filter(
(id) => ids.filter((id2) => id2 === id).length > 1
);
const dedupedDuplicates = duplicates.filter(
(id, i) => duplicates.indexOf(id) === i
);
for (const id of dedupedDuplicates) {
const using = Object.entries(moonlight.moonmap.modules)
.filter(([_, v]) => v === id)
.map(([k, _]) => k);
console.log(id, using);
}
};
4 changes: 3 additions & 1 deletion src/mappings/chroma-js.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { ModuleExportType } from "@moonlight-mod/moonmap";
import register from "../registry";

type Exports = typeof import("chroma-js");
export default Exports;

register((moonmap) => {
const name = "chroma-js";
moonmap.register({
Expand Down
16 changes: 15 additions & 1 deletion src/mappings/classnames.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,20 @@
import { ModuleExportType } from "@moonlight-mod/moonmap";
import register from "../registry";

// copypasted types: https://github.com/JedWatson/classnames/blob/main/index.d.ts
export type Value = string | boolean | undefined | null;
export type Mapping = Record<string, any>;
export interface ArgumentArray extends Array<Argument> {}
export interface ReadonlyArgumentArray extends ReadonlyArray<Argument> {}
export type Argument = Value | Mapping | ArgumentArray | ReadonlyArgumentArray;

/**
* A simple JavaScript utility for conditionally joining classNames together.
*/
type classNames = (...args: ArgumentArray) => string;

type Exports = classNames & { default: classNames };
export default Exports;

register((moonmap) => {
const name = "classnames";
moonmap.register({
Expand Down
Loading

0 comments on commit b808105

Please sign in to comment.