Files
GMW/docs/superpowers/specs/2026-05-19-deprecated-dependency-removal-design.md
T
MythEclipse 7f5db953fa chore: update dependencies and improve code formatting
- Added `vendor/discord-video-stream` to pnpm workspace.
- Refactored `llmModerationClient.ts` for better readability and consistency.
- Adjusted imports in `recordingsRoutes.ts` for clarity.
- Updated `webserver.ts` to correctly import `createRecordingsRoutes`.
- Enhanced test cases in `llmModerationClient.test.ts` for improved readability.
- Updated submodule references for `better-sqlite3`, `discord-video-stream`, `discord.js-selfbot-v13`, `drizzle-orm`, and `node-datachannel`.
- Created documentation for deprecated dependency removal plan and design.
2026-05-19 02:49:55 +07:00

92 lines
4.3 KiB
Markdown

# Deprecated Dependency Removal Design
## Goal
Remove deprecated packages from the pnpm lockfile where practical. Prefer maintained replacements or upgrades. If no maintained replacement exists, vendor upstream code as a submodule/workspace and patch dependency metadata there.
## Scope
Current deprecated sources:
- `drizzle-kit` pulls `@esbuild-kit/esm-loader` and `@esbuild-kit/core-utils`.
- `discord.js-selfbot-v13` pulls `otplib@12` plugins.
- `@discordjs/opus` pulls `@discordjs/node-pre-gyp`, which pulls `npmlog`, `are-we-there-yet`, `gauge`, `rimraf@3`, `glob@7`, and `inflight`.
- `@lng2004/node-datachannel` and `better-sqlite3` pull `prebuild-install`.
Existing workspace packages:
- `vendor/discord.js-selfbot-v13`
- `vendor/discord-video-stream`
## Approach
1. Upgrade direct dependencies first and re-check `pnpm why` plus npm deprecation metadata.
2. Patch vendored workspace dependencies when project already owns package source.
3. Replace direct packages only when runtime compatibility is clear.
4. Add submodules only for packages that cannot be replaced or upgraded without keeping deprecated transitive packages.
## Package Plan
### `drizzle-kit`
Try latest compatible `drizzle-kit`. If latest still depends on `@esbuild-kit/*`, keep current version unless project commands fail, because vendoring `drizzle-kit` only to remove dev-only install warnings has high maintenance cost.
### `discord.js-selfbot-v13`
Patch `vendor/discord.js-selfbot-v13` dependency graph to remove `otplib@12` if code is compatible with `otplib@13`. Verify by installing and running typecheck/tests. Keep peer/package name unchanged.
### `@discordjs/opus`
Find maintained Opus alternative compatible with current recorder and `@discordjs/voice`. Prefer removing direct `@discordjs/opus` only if code and tests still pass. If native Opus remains needed and every maintained option drags deprecated install tooling, vendor the smallest dependency owner.
### `prebuild-install` sources
Do not patch native package install chains blindly. For `better-sqlite3`, keep upstream unless latest removes `prebuild-install`. For `@lng2004/node-datachannel`, try latest first through `discord-video-stream`; vendor only if strict lockfile cleanup remains blocked and build still works.
### `discord-video-stream`
Keep as workspace submodule. Patch devDependency `discord.js-selfbot-v13` to use workspace reference so installs do not fetch deprecated registry selfbot.
## Verification
After each dependency change:
1. Run `pnpm install`.
2. Run `pnpm why` for known deprecated package names.
3. Check npm deprecation metadata for remaining lockfile packages.
4. Run `pnpm run typecheck`.
5. Run `pnpm run test`.
## Success Criteria
- Root `package.json` uses workspace paths for vendored packages.
- `pnpm-lock.yaml` has no deprecated packages where maintained replacements exist.
- Any remaining deprecated packages are documented as no-maintained-replacement and owned by a vendored submodule or unavoidable native upstream.
- Typecheck and tests pass.
## Final Audit Result
Deprecated packages removed from active dependency graph:
- `@otplib/plugin-crypto`, `@otplib/plugin-thirty-two`, `@otplib/preset-default` — removed by patching `vendor/discord.js-selfbot-v13` to `otplib@13`.
- `@discordjs/opus` direct dependency — removed from root dependencies.
- `@discordjs/node-pre-gyp`, `npmlog`, `are-we-there-yet`, `gauge`, `rimraf@3`, `glob@7`, `inflight` — removed by eliminating `@discordjs/opus` auto-installed peer path.
Remaining unavoidable deprecated packages:
- `@esbuild-kit/core-utils@3.3.2` via `drizzle-kit@0.31.10`.
- `@esbuild-kit/esm-loader@2.6.5` via `drizzle-kit@0.31.10`.
- `prebuild-install@7.1.3` via `better-sqlite3@12.10.0` and `@lng2004/node-datachannel@0.32.0-20260202`.
Reason these remain:
- `drizzle-kit@0.31.10` is latest stable and still depends on `@esbuild-kit/*`.
- `better-sqlite3@12.10.0` is latest stable and still uses `prebuild-install` for native binary install.
- `@lng2004/node-datachannel@0.32.0-20260202` is latest available and still uses `prebuild-install` for native binary install.
The upstream repositories are vendored as submodules for future patching if strict zero-deprecated lockfile becomes worth maintaining as forks:
- `vendor/drizzle-orm`
- `vendor/better-sqlite3`
- `vendor/node-datachannel`