mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-02 11:45:20 +02:00
d7c732b282
* fix: Windows support — Node.js server fallback for Playwright Setup hangs on Windows 11 because Bun's child_process can't handle Playwright's --remote-debugging-pipe (fd 3/4 pipe handles). Fall back to Node.js on Windows for both the setup verification and server runtime. macOS/Linux completely unaffected — all Windows code behind IS_WINDOWS / process.platform === 'win32' guards. Based on community PR #194 by @sozairali. Fixed sed -i portability (perl -pi -e) in build-node-server.sh for macOS compatibility. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: cross-platform path handling for Windows compatibility Replace hardcoded '/tmp' and 'dir + "/"' path checks with platform-aware constants from new platform.ts module. On macOS/Linux this evaluates identically ('/tmp', '/'); on Windows it uses os.tmpdir() and path.sep. Zero behavior change on Unix. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * test: add tests for Windows polyfill, platform constants, and Node server resolution Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: Windows support in README + CHANGELOG (v0.9.1.1) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: bump version and changelog (v0.9.3.0) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
49 lines
1.9 KiB
Bash
Executable File
49 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Build a Node.js-compatible server bundle for Windows.
|
|
#
|
|
# On Windows, Bun can't launch or connect to Playwright's Chromium
|
|
# (oven-sh/bun#4253, #9911). This script produces a server bundle
|
|
# that runs under Node.js with Bun API polyfills.
|
|
|
|
set -e
|
|
|
|
GSTACK_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
SRC_DIR="$GSTACK_DIR/browse/src"
|
|
DIST_DIR="$GSTACK_DIR/browse/dist"
|
|
|
|
echo "Building Node-compatible server bundle..."
|
|
|
|
# Step 1: Transpile server.ts to a single .mjs bundle (externalize runtime deps)
|
|
bun build "$SRC_DIR/server.ts" \
|
|
--target=node \
|
|
--outfile "$DIST_DIR/server-node.mjs" \
|
|
--external playwright \
|
|
--external playwright-core \
|
|
--external diff \
|
|
--external "bun:sqlite"
|
|
|
|
# Step 2: Post-process
|
|
# Replace import.meta.dir with a resolvable reference
|
|
perl -pi -e 's/import\.meta\.dir/__browseNodeSrcDir/g' "$DIST_DIR/server-node.mjs"
|
|
# Stub out bun:sqlite (macOS-only cookie import, not needed on Windows)
|
|
perl -pi -e 's|import { Database } from "bun:sqlite";|const Database = null; // bun:sqlite stubbed on Node|g' "$DIST_DIR/server-node.mjs"
|
|
|
|
# Step 3: Create the final file with polyfill header injected after the first line
|
|
{
|
|
head -1 "$DIST_DIR/server-node.mjs"
|
|
echo '// ── Windows Node.js compatibility (auto-generated) ──'
|
|
echo 'import { fileURLToPath as _ftp } from "node:url";'
|
|
echo 'import { dirname as _dn } from "node:path";'
|
|
echo 'const __browseNodeSrcDir = _dn(_dn(_ftp(import.meta.url))) + "/src";'
|
|
echo '{ const _r = createRequire(import.meta.url); _r("./bun-polyfill.cjs"); }'
|
|
echo '// ── end compatibility ──'
|
|
tail -n +2 "$DIST_DIR/server-node.mjs"
|
|
} > "$DIST_DIR/server-node.tmp.mjs"
|
|
|
|
mv "$DIST_DIR/server-node.tmp.mjs" "$DIST_DIR/server-node.mjs"
|
|
|
|
# Step 4: Copy polyfill to dist/
|
|
cp "$SRC_DIR/bun-polyfill.cjs" "$DIST_DIR/bun-polyfill.cjs"
|
|
|
|
echo "Node server bundle ready: $DIST_DIR/server-node.mjs"
|