this repo has no description

Begin work on typing imports in Webpack modules

Changed files
+66 -47
packages
core-extensions
src
common
spacepack
webpackModules
types
+20 -2
build.mjs
··· 92 92 } 93 93 } 94 94 95 + const wpImportPlugin = { 96 + name: "webpackImports", 97 + setup(build) { 98 + build.onResolve({ filter: /^@moonlight-mod\/wp\// }, (args) => { 99 + const wpModule = args.path.replace(/^@moonlight-mod\/wp\//, ""); 100 + return { 101 + path: wpModule, 102 + external: true 103 + }; 104 + }); 105 + } 106 + }; 107 + 95 108 const esbuildConfig = { 96 109 entryPoints, 97 110 outdir, ··· 110 123 copyStaticFiles({ 111 124 src: `./packages/core-extensions/src/${ext}/manifest.json`, 112 125 dest: `./dist/core-extensions/${ext}/manifest.json` 113 - }) 126 + }), 127 + wpImportPlugin 114 128 ] 115 - : [] 129 + : [wpImportPlugin], 130 + 131 + logOverride: { 132 + "commonjs-variable-in-esm": "verbose" 133 + } 116 134 }; 117 135 118 136 if (watch) {
+1
env.d.ts
··· 1 + /// <reference types="./packages/types/src/index" />
-39
packages/core-extensions/src/common/components.ts
··· 1 - import { ExtensionWebpackModule } from "@moonlight-mod/types"; 2 - 3 - export const components: ExtensionWebpackModule = { 4 - dependencies: [ 5 - { ext: "spacepack", id: "spacepack" }, 6 - "MasonryList:", 7 - ".flexGutterSmall," 8 - //"ALWAYS_WHITE:", 9 - //".Messages.SWITCH_ACCOUNTS_TOAST_LOGIN_SUCCESS.format" 10 - ], 11 - run: function (module, exports, require) { 12 - const spacepack = require("spacepack_spacepack").spacepack; 13 - 14 - const Components = spacepack.findByCode("MasonryList:function")[0].exports; 15 - const MarkdownParser = spacepack.findByCode( 16 - "parseAutoModerationSystemMessage:" 17 - )[0].exports.default; 18 - const LegacyText = spacepack.findByCode(".selectable", ".colorStandard")[0] 19 - .exports.default; 20 - const Flex = spacepack.findByCode(".flex" + "GutterSmall,")[0].exports 21 - .default; 22 - const CardClasses = spacepack.findByCode("card", "cardHeader", "inModal")[0] 23 - .exports; 24 - const ControlClasses = spacepack.findByCode( 25 - "title", 26 - "titleDefault", 27 - "dividerDefault" 28 - )[0].exports; 29 - 30 - module.exports = { 31 - ...Components, 32 - MarkdownParser, 33 - LegacyText, 34 - Flex, 35 - CardClasses, 36 - ControlClasses 37 - }; 38 - } 39 - };
+8 -2
packages/core-extensions/src/common/index.ts
··· 4 4 import { flux } from "./flux"; 5 5 import { stores } from "./stores"; 6 6 import { http } from "./http"; 7 - import { components } from "./components"; 8 7 import { fluxDispatcher } from "./fluxDispatcher"; 9 8 10 9 export const webpackModules: ExtensionWebExports["webpackModules"] = { 10 + components: { 11 + dependencies: [ 12 + { ext: "spacepack", id: "spacepack" }, 13 + "MasonryList:", 14 + ".flexGutterSmall," 15 + ] 16 + }, 17 + 11 18 react, 12 19 flux, 13 20 stores, 14 21 http, 15 - components, 16 22 fluxDispatcher 17 23 };
+26
packages/core-extensions/src/common/webpackModules/components.ts
··· 1 + import spacepack from "@moonlight-mod/wp/spacepack_spacepack"; 2 + 3 + const Components = spacepack.findByCode("MasonryList:function")[0].exports; 4 + const MarkdownParser = spacepack.findByCode( 5 + "parseAutoModerationSystemMessage:" 6 + )[0].exports.default; 7 + const LegacyText = spacepack.findByCode(".selectable", ".colorStandard")[0] 8 + .exports.default; 9 + const Flex = spacepack.findByCode(".flex" + "GutterSmall,")[0].exports.default; 10 + const CardClasses = spacepack.findByCode("card", "cardHeader", "inModal")[0] 11 + .exports; 12 + const ControlClasses = spacepack.findByCode( 13 + "title", 14 + "titleDefault", 15 + "dividerDefault" 16 + )[0].exports; 17 + 18 + // We use CJS export here because merging the exports from Components is annoying as shit 19 + module.exports = { 20 + ...Components, 21 + MarkdownParser, 22 + LegacyText, 23 + Flex, 24 + CardClasses, 25 + ControlClasses 26 + };
+1 -1
packages/core-extensions/src/spacepack/webpackModules/spacepack.ts
··· 12 12 const logger = moonlight.getLogger("spacepack"); 13 13 14 14 export const spacepack: Spacepack = { 15 - require, 15 + require: webpackRequire, 16 16 modules, 17 17 cache, 18 18
+1
packages/types/package.json
··· 5 5 "types": "./src/index.ts", 6 6 "exports": { 7 7 ".": "./src/index.ts", 8 + "./import": "./src/import.d.ts", 8 9 "./*": "./src/*.ts" 9 10 }, 10 11 "dependencies": {
+2 -2
packages/types/src/coreExtensions.ts
··· 1 1 import { FluxDefault, Store } from "./discord/common/Flux"; 2 - import WebpackRequire from "./discord/require"; 3 - import { WebpackModuleFunc } from "./discord/webpack"; 4 2 import { CommonComponents as CommonComponents_ } from "./coreExtensions/components"; 5 3 import { Dispatcher } from "flux"; 6 4 import React from "react"; 5 + import { WebpackModuleFunc } from "./discord"; 6 + import WebpackRequire from "./discord/require"; 7 7 8 8 export type Spacepack = { 9 9 inspect: (module: number | string) => WebpackModuleFunc | null;
+5
packages/types/src/import.d.ts
··· 1 + declare module "@moonlight-mod/wp/spacepack_spacepack" { 2 + import { Spacepack } from "@moonlight-mod/types/coreExtensions"; 3 + export const spacepack: Spacepack; 4 + export default spacepack; 5 + }
+1
packages/types/src/index.ts
··· 2 2 /// <reference types="standalone-electron-types" /> 3 3 /// <reference types="react" /> 4 4 /// <reference types="flux" /> 5 + /// <reference types="./import" /> 5 6 /* eslint-disable no-var */ 6 7 7 8 import {
+1 -1
packages/types/tsconfig.json
··· 10 10 "jsx": "react", 11 11 "declaration": true 12 12 }, 13 - "include": ["./src/**/*", "src/index.ts"] 13 + "include": ["./src/**/*", "src/index.ts", "./src/import.d.ts"] 14 14 }