From 2faeabe79c384bbc578dbb2455517ca09315e79d Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Wed, 1 Oct 2025 15:55:45 -0400 Subject: [PATCH] rework misskey-js build to preserve original package structure --- packages/misskey-js/api-extractor.json | 6 ++--- packages/misskey-js/eslint.config.js | 6 ++++- packages/misskey-js/package.json | 10 ++++---- packages/misskey-js/scripts/_common.mjs | 27 +++++++++++++++++++--- packages/misskey-js/scripts/clean.mjs | 7 ++++-- packages/misskey-js/scripts/post-build.mjs | 12 ++++++++++ packages/misskey-js/tsconfig.json | 2 +- 7 files changed, 55 insertions(+), 15 deletions(-) create mode 100644 packages/misskey-js/scripts/post-build.mjs diff --git a/packages/misskey-js/api-extractor.json b/packages/misskey-js/api-extractor.json index 2e98ae663e..35c2b09a9c 100644 --- a/packages/misskey-js/api-extractor.json +++ b/packages/misskey-js/api-extractor.json @@ -45,7 +45,7 @@ * * SUPPORTED TOKENS: , , */ - "mainEntryPointFilePath": "/built/src/index.d.ts", + "mainEntryPointFilePath": "/built/index.d.ts", /** * A list of NPM package names whose exports should be treated as part of this package. @@ -111,7 +111,7 @@ /** * (REQUIRED) Whether to generate an API report. */ - "enabled": true + "enabled": true, /** * The filename for the API report files. It will be combined with "reportFolder" or "reportTempFolder" to produce @@ -152,7 +152,7 @@ * SUPPORTED TOKENS: , , * DEFAULT VALUE: "/temp/" */ - // "reportTempFolder": "/temp/" + "reportTempFolder": "/temp/api-extractor/" }, /** diff --git a/packages/misskey-js/eslint.config.js b/packages/misskey-js/eslint.config.js index 07bfe32dda..f355ed4afe 100644 --- a/packages/misskey-js/eslint.config.js +++ b/packages/misskey-js/eslint.config.js @@ -19,10 +19,11 @@ export default [ '**/coverage/', '**/node_modules/', 'scripts', + '*.*', ], }, { - files: ['src/**/*.ts', 'src/**/*.tsx'], + files: ['src/**/*.ts', 'test/**/*.ts'], languageOptions: { parserOptions: { parser: tsParser, @@ -32,6 +33,9 @@ export default [ }, }, }, + { + files: ['scripts/**/*.mjs'], + }, { files: ['src/autogen/**/*.ts', 'src/autogen/**/*.tsx'], rules: { diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json index 4bf24280b9..9a29f79b1f 100644 --- a/packages/misskey-js/package.json +++ b/packages/misskey-js/package.json @@ -4,13 +4,13 @@ "version": "2025.5.2-dev", "description": "Misskey SDK for JavaScript", "license": "MIT", - "main": "./built/src/index.js", - "types": "./built/src/index.d.ts", + "main": "./built/index.js", + "types": "./built/index.d.ts", "scripts": { "clean": "node scripts/clean.mjs", - "build": "tsc -b && ncp test-d ./built/test-d", + "build": "tsc -b && node scripts/post-build.mjs", "rebuild": "pnpm clean && pnpm build", - "tsd": "tsd --files \"./built/test-d/**/*.ts\"", + "tsd": "tsd --types \"./temp/built/src/index.d.ts\" --files \"./temp/built/test-d/**/*.ts\"", "api": "pnpm api-extractor run --local --verbose", "api-prod": "pnpm api-extractor run --verbose", "eslint": "eslint --quiet \"{src,test,test-d,scripts}/**/*.{js,jsx,ts,tsx,vue}\" --cache", @@ -41,7 +41,7 @@ "typescript": "5.8.3" }, "files": [ - "built/src" + "built" ], "dependencies": { "eventemitter3": "5.0.1", diff --git a/packages/misskey-js/scripts/_common.mjs b/packages/misskey-js/scripts/_common.mjs index 3c824ff1ee..73fa58c9f6 100644 --- a/packages/misskey-js/scripts/_common.mjs +++ b/packages/misskey-js/scripts/_common.mjs @@ -1,5 +1,26 @@ import * as nodepath from 'path'; -export const scriptsDir = import.meta.dirname; -export const rootDir = nodepath.join(scriptsDir, '../'); -export const outDir = nodepath.join(rootDir, './built'); +const dirname = import.meta.dirname; + +/** Root directory of the misskey-js project */ +export const rootDir = nodepath.join(dirname, '../'); +/** Output directory for fully-built library. */ +export const outDir = nodepath.join(rootDir, 'built'); +/** Working directory for builds. */ +export const buildDir = nodepath.join(rootDir, 'temp/built'); + +/** Source directory for "scripts" subpackage, containing pure-JS scripts. */ +export const scriptsSource = dirname; +/** Source directory for "lib" subpackage, containing the actual library source. */ +export const libSource = nodepath.join(rootDir, 'src'); +/** Source directory for "test" subpackage, containing unit tests. */ +export const testSource = nodepath.join(rootDir, 'test'); +/** Source directory for "test-d" subpackage, containing non-built type tests. */ +export const testDSource = nodepath.join(rootDir, 'test-d'); + +/** Working directory for "lib" subpackage builds */ +export const libBuild = nodepath.join(buildDir, 'src'); +/** Working directory for "test" subpackage builds */ +export const testBuild = nodepath.join(buildDir, 'test'); +/** Working directory for "test-d" subpackage builds */ +export const testDBuild = nodepath.join(buildDir, 'test-d'); diff --git a/packages/misskey-js/scripts/clean.mjs b/packages/misskey-js/scripts/clean.mjs index 4060d6e036..2628ec137c 100644 --- a/packages/misskey-js/scripts/clean.mjs +++ b/packages/misskey-js/scripts/clean.mjs @@ -1,5 +1,8 @@ import { rm } from 'fs/promises'; -import { outDir } from './_common.mjs'; +import {buildDir, outDir} from './_common.mjs'; -console.log(`Cleaning ${outDir}...`); +console.log(`Cleaning working directory ${buildDir}...`); +await rm(buildDir, { recursive: true, force: true }); + +console.log(`Cleaning output directory ${outDir}...`); await rm(outDir, { recursive: true, force: true }); diff --git a/packages/misskey-js/scripts/post-build.mjs b/packages/misskey-js/scripts/post-build.mjs new file mode 100644 index 0000000000..fa10dbe969 --- /dev/null +++ b/packages/misskey-js/scripts/post-build.mjs @@ -0,0 +1,12 @@ +import {libBuild, outDir, testDBuild, testDSource} from './_common.mjs'; +import {rm, cp} from 'fs/promises'; + +// Always clean the output, because artifacts are cached in the build directory instead. +console.log(`Cleaning output directory ${outDir}...`); +await rm(outDir, { recursive: true, force: true }); + +// Copy built lib to output directory. +await cp(libBuild, outDir, { recursive: true }); + +// Stage test-d sources in the build directory so tsd will work. +await cp(testDSource, testDBuild, { recursive: true }); diff --git a/packages/misskey-js/tsconfig.json b/packages/misskey-js/tsconfig.json index 5775a68dae..6fb6804fae 100644 --- a/packages/misskey-js/tsconfig.json +++ b/packages/misskey-js/tsconfig.json @@ -10,7 +10,7 @@ "inlineSources": true, "allowJs": true, "checkJs": true, - "outDir": "./built/", + "outDir": "./temp/built/", "strict": true, "strictFunctionTypes": true, "strictNullChecks": true,