dsh-client-url-shim
Browser
urlshim for DeepSeek Harness client bundles — a tsdown plugin that inlines anode:urlpolyfill so dependencies like@pixi/utilsbuild and run inside the DSH web module table.
DSH 客户端 bundle 的 url 浏览器垫片——把依赖里 node:url 的导入替换成浏览器安全实现,
解决 require("url") missed the module table 崩溃。
Problem / 问题
DSH client bundles are CJS artifacts executed by the harness's own module
loader. The loader only answers requires from a frozen module table (platform
seed modules). A dependency that imports Node builtins — e.g.
@pixi/utils does
import { parse } from 'url' — compiles to require("url"), which the table
cannot answer:
client-modules: require("url") missed the module table — not a platform seed
word, not a shell-own module, and no registered factory
DSH 客户端 bundle 由 DSH 自己的模块加载器执行,只认冻结的模块表。依赖里 import
node:url 会编译成 require("url"),模块表没有 url → 整个插件加载失败。
Solution / 方案
A small tsdown/Rolldown plugin intercepts url / node:url imports at build
time and replaces them with a virtual browser-safe module:
parse— Node-style URL decomposition (falls back tonew URL)resolve— Node-style path resolution (absolute → URL, relative → join with..handling)format— best-effort href/pathname serializationfileURLToPath/pathToFileURL— trivial browser equivalentsURL/URLSearchParams— the real browser globals
Usage / 用法
// tsdown.config.ts
import { defineConfig } from 'tsdown'
import { urlShim } from 'dsh-client-url-shim'
export default defineConfig({
entry: { client: 'src/client/index.ts' },
format: 'cjs',
platform: 'browser',
plugins: [urlShim()],
})
Or add the plugin object directly to an existing tsdown plugins array
(see example/tsdown.config.ts for a full DSH plugin client build).
Verified with / 实测验证
- DSH (DeepSeek Harness) web profile, tsdown 0.22.2 / rolldown 1.1.5
@pixi/utils6.5.10 (import { parse } from 'url') — the exact dependency that blew up before the shim- pixi.js 6.5.10 + pixi-live2d-display 0.4.0 fully inlined client bundle, ~1.5 MB, boots and renders in the harness
How the shim was born / 来历
Built in an isolated test profile after a live1d table crash — the first of nine mines cleared while integrating Live2D into DSH. Full war story in the companion blog post (TBD).
License
MIT
No comments yet. Be the first to write one.