rnxsim 0.0.0 → 0.1.312
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +512 -0
- package/detox/colors.ts +54 -0
- package/detox/config-loader.ts +135 -0
- package/detox/element-types.ts +39 -0
- package/detox/expectations.ts +537 -0
- package/detox/gestures.ts +480 -0
- package/detox/index.ts +2118 -0
- package/detox/jest-preset.cjs +51 -0
- package/detox/jest-setup-after-env.cjs +18 -0
- package/detox/matchers.ts +30 -0
- package/detox/motion-change.cjs +109 -0
- package/detox/motion-change.d.cts +35 -0
- package/detox/navigation.ts +43 -0
- package/detox/screenshots/animated-color-test-rest-norngh.png +0 -0
- package/detox/screenshots/color-test-after-drag-norngh.png +0 -0
- package/detox/screenshots/color-test-rest-norngh.png +0 -0
- package/detox/screenshots/theme-blue-toggle.png +0 -0
- package/detox/screenshots/theme-blue.png +0 -0
- package/detox/screenshots/theme-red-toggle.png +0 -0
- package/detox/screenshots/theme-red.png +0 -0
- package/dist-cli/bin.js +15 -0
- package/dist-cli/chunks/agent-NXVDDCFG.js +48 -0
- package/dist-cli/chunks/agent-wrapper-DXJCFKL3.js +17 -0
- package/dist-cli/chunks/app-fonts-W5AJZQJF.js +4 -0
- package/dist-cli/chunks/assert-3LOJEUDT.js +49 -0
- package/dist-cli/chunks/auth-MFTYYPNX.js +12 -0
- package/dist-cli/chunks/beta-GT3NN67B.js +4 -0
- package/dist-cli/chunks/camera-6EAK7CUL.js +22 -0
- package/dist-cli/chunks/chunk-274UD5FD.js +4 -0
- package/dist-cli/chunks/chunk-2SA2VTGP.js +5 -0
- package/dist-cli/chunks/chunk-33FKQH54.js +5 -0
- package/dist-cli/chunks/chunk-37I5AIS7.js +3 -0
- package/dist-cli/chunks/chunk-3D57IBPC.js +4 -0
- package/dist-cli/chunks/chunk-4BXCZHAU.js +4 -0
- package/dist-cli/chunks/chunk-5OX7ANRA.js +5 -0
- package/dist-cli/chunks/chunk-66NF2KNG.js +9 -0
- package/dist-cli/chunks/chunk-6UKJB2VC.js +125 -0
- package/dist-cli/chunks/chunk-7INBNA3U.js +26 -0
- package/dist-cli/chunks/chunk-7VWOSTD5.js +5 -0
- package/dist-cli/chunks/chunk-AY47WKS5.js +23 -0
- package/dist-cli/chunks/chunk-B7KMNHX7.js +4 -0
- package/dist-cli/chunks/chunk-BKNOLP3J.js +4 -0
- package/dist-cli/chunks/chunk-BRIZOR4K.js +28 -0
- package/dist-cli/chunks/chunk-DM6KUAOZ.js +4 -0
- package/dist-cli/chunks/chunk-EUAVBTKU.js +4 -0
- package/dist-cli/chunks/chunk-FTC4M26Q.js +4 -0
- package/dist-cli/chunks/chunk-FWYYCUAZ.js +4 -0
- package/dist-cli/chunks/chunk-G74YIEVS.js +7 -0
- package/dist-cli/chunks/chunk-GZDHEONW.js +507 -0
- package/dist-cli/chunks/chunk-HG7ORJMT.js +5 -0
- package/dist-cli/chunks/chunk-HMDOLCKG.js +15 -0
- package/dist-cli/chunks/chunk-JG6S4RSH.js +4 -0
- package/dist-cli/chunks/chunk-KR5BGMBZ.js +4 -0
- package/dist-cli/chunks/chunk-KZW5WBGU.js +983 -0
- package/dist-cli/chunks/chunk-L24Z3CRS.js +30 -0
- package/dist-cli/chunks/chunk-LDQ7HVCW.js +4 -0
- package/dist-cli/chunks/chunk-MENV7VLD.js +4 -0
- package/dist-cli/chunks/chunk-MNGQ42QE.js +568 -0
- package/dist-cli/chunks/chunk-N6A3SXMR.js +4 -0
- package/dist-cli/chunks/chunk-NLEMQ4PY.js +6 -0
- package/dist-cli/chunks/chunk-NPVGMH2N.js +101 -0
- package/dist-cli/chunks/chunk-OR3XTXEB.js +107 -0
- package/dist-cli/chunks/chunk-PEPUGJVI.js +4 -0
- package/dist-cli/chunks/chunk-Q3RGLERJ.js +142 -0
- package/dist-cli/chunks/chunk-SI3BUTQR.js +4 -0
- package/dist-cli/chunks/chunk-T4FT6CM7.js +4 -0
- package/dist-cli/chunks/chunk-TBMVBI26.js +7 -0
- package/dist-cli/chunks/chunk-TCWQJILS.js +5 -0
- package/dist-cli/chunks/chunk-TGQNQ6XT.js +766 -0
- package/dist-cli/chunks/chunk-TYE3WBSR.js +5 -0
- package/dist-cli/chunks/chunk-U4PN6JOT.js +6 -0
- package/dist-cli/chunks/chunk-VUFRB347.js +4 -0
- package/dist-cli/chunks/chunk-VZBLFMYC.js +10 -0
- package/dist-cli/chunks/chunk-WBT32R6N.js +25 -0
- package/dist-cli/chunks/chunk-XRGEEPJ5.js +38 -0
- package/dist-cli/chunks/chunk-Y2FSZSO7.js +71 -0
- package/dist-cli/chunks/chunk-YRV7HR3P.js +74 -0
- package/dist-cli/chunks/chunk-YZRFF4YA.js +14 -0
- package/dist-cli/chunks/chunk-ZMZTHU7V.js +4 -0
- package/dist-cli/chunks/cleanup-H3GWQB63.js +25 -0
- package/dist-cli/chunks/cli-version-3QPAJ3LC.js +4 -0
- package/dist-cli/chunks/compat-5WG2XJV7.js +20 -0
- package/dist-cli/chunks/config-ANMBVVLL.js +13 -0
- package/dist-cli/chunks/control-NSGNQFJG.js +4 -0
- package/dist-cli/chunks/daemon-JHF4BJ3U.js +4 -0
- package/dist-cli/chunks/debug-CHV2O2KF.js +200 -0
- package/dist-cli/chunks/desktop-FIPIK4CH.js +31 -0
- package/dist-cli/chunks/detox-CVUJP7K6.js +52 -0
- package/dist-cli/chunks/device-6WCUM4W6.js +18 -0
- package/dist-cli/chunks/diagnose-I6EMWEII.js +43 -0
- package/dist-cli/chunks/disk-cleanup-P27CYFTN.js +4 -0
- package/dist-cli/chunks/drivers-HQ6AKZT6.js +4 -0
- package/dist-cli/chunks/film-UOQFFYNF.js +74 -0
- package/dist-cli/chunks/flow-N27MRRNL.js +4 -0
- package/dist-cli/chunks/help-SF6FEGEE.js +4 -0
- package/dist-cli/chunks/hidden-runtime-alias-NJYFSJKZ.js +4 -0
- package/dist-cli/chunks/home-paths-XOV44JEF.js +4 -0
- package/dist-cli/chunks/inspect-CWFRFQTY.js +4 -0
- package/dist-cli/chunks/install-desktop-KLQDNXZQ.js +4 -0
- package/dist-cli/chunks/login-BPFQENCX.js +28 -0
- package/dist-cli/chunks/logout-5A45ZGY7.js +4 -0
- package/dist-cli/chunks/maestro-E4CSDMLM.js +104 -0
- package/dist-cli/chunks/maestro-generate-CKMOJQX2.js +36 -0
- package/dist-cli/chunks/mode-SZYNMIQF.js +26 -0
- package/dist-cli/chunks/optional-demo-registry-FRH4SFVG.js +4 -0
- package/dist-cli/chunks/perf-VXU2XJAX.js +48 -0
- package/dist-cli/chunks/permissions-IRIAOVND.js +13 -0
- package/dist-cli/chunks/record-RY7FPLLH.js +72 -0
- package/dist-cli/chunks/report-issue-KNWXOE53.js +29 -0
- package/dist-cli/chunks/runtime-AR3GJTGK.js +4 -0
- package/dist-cli/chunks/screenshot-command-QLALR6GY.js +159 -0
- package/dist-cli/chunks/screenshot-layers-OQFMFVRL.js +20 -0
- package/dist-cli/chunks/screenshots-capture-6TSRJFGB.js +42 -0
- package/dist-cli/chunks/serve-F54J2NQO.js +44 -0
- package/dist-cli/chunks/setup-7V6UKX4U.js +32 -0
- package/dist-cli/chunks/skills-QQBOSETH.js +50 -0
- package/dist-cli/chunks/storage-TAPMKK5O.js +37 -0
- package/dist-cli/chunks/store-7NX3S43H.js +4 -0
- package/dist-cli/chunks/telemetry-E7BUK6RA.js +4 -0
- package/dist-cli/chunks/timeline-IAM564NA.js +24 -0
- package/dist-cli/chunks/upgrade-CD55QXIX.js +7 -0
- package/dist-cli/chunks/upload-GZ6LIMYM.js +4 -0
- package/dist-cli/chunks/version-3DYJ5AS3.js +6 -0
- package/dist-cli/chunks/web-6NW6YLPI.js +4 -0
- package/dist-cli/chunks/what-happened-CZZDOOVG.js +25 -0
- package/dist-lib/agent-daemon-client.cjs +468 -0
- package/dist-lib/agent-events.cjs +48 -0
- package/dist-lib/agent-identity.cjs +53 -0
- package/dist-lib/agent-sessions.cjs +725 -0
- package/dist-lib/attached-projects.cjs +526 -0
- package/dist-lib/auth/shared-session.cjs +195 -0
- package/dist-lib/backend-origin.cjs +70 -0
- package/dist-lib/beta.cjs +41 -0
- package/dist-lib/beta.mjs +13 -0
- package/dist-lib/bridge-constants.cjs +161 -0
- package/dist-lib/cli-constants.cjs +32 -0
- package/dist-lib/config.cjs +96 -0
- package/dist-lib/detox/index.cjs +2863 -0
- package/dist-lib/detox/jest-preset.cjs +51 -0
- package/dist-lib/dev-bundle-resolution.cjs +223 -0
- package/dist-lib/home-paths.cjs +421 -0
- package/dist-lib/host/bridge-host.cjs +5600 -0
- package/dist-lib/host/fetch-proxy-handler.cjs +373 -0
- package/dist-lib/host/fetch-proxy-overrides.cjs +63 -0
- package/dist-lib/host/fetch-proxy-overrides.mjs +37 -0
- package/dist-lib/host/websocket-proxy.cjs +214 -0
- package/dist-lib/index.cjs +513 -0
- package/dist-lib/jump-to-source-babel.cjs +93 -0
- package/dist-lib/menu.cjs +620 -0
- package/dist-lib/menu.mjs +581 -0
- package/dist-lib/metro.cjs +297 -0
- package/dist-lib/profiles.cjs +246 -0
- package/dist-lib/public-brand.cjs +39 -0
- package/dist-lib/render-mode.cjs +54 -0
- package/dist-lib/scripts/dev-server-scanner.cjs +1034 -0
- package/dist-lib/sdk.cjs +2333 -0
- package/dist-lib/sdk.mjs +2240 -0
- package/dist-lib/skills.cjs +23911 -0
- package/dist-lib/vite.cjs +358 -0
- package/package.json +189 -18
- package/scripts/dev-server-scanner.ts +941 -0
- package/scripts/optional-demo-registry.ts +113 -0
- package/scripts/postinstall.cjs +3 -0
- package/scripts/preuninstall.cjs +118 -0
- package/skills/contrast/SKILL.md +171 -0
- package/skills/rnx-debug/SKILL.md +425 -0
- package/skills/rnx-perf/SKILL.md +295 -0
- package/skills/rnx-setup/SKILL.md +160 -0
- package/skills/rnx-test/SKILL.md +292 -0
- package/skills/rnx-visual/SKILL.md +122 -0
- package/src/agent-daemon-client.ts +410 -0
- package/src/agent-events.ts +71 -0
- package/src/agent-identity.ts +23 -0
- package/src/agent-prompt.ts +71 -0
- package/src/agent-sessions.ts +573 -0
- package/src/attached-projects.ts +539 -0
- package/src/auth/shared-session.ts +204 -0
- package/src/backend-origin.ts +49 -0
- package/src/beta.ts +19 -0
- package/src/bridge-constants.ts +171 -0
- package/src/browser-cache.ts +16 -0
- package/src/cli-constants.ts +1 -0
- package/src/cli-version.ts +32 -0
- package/src/codex-client.ts +215 -0
- package/src/config.ts +134 -0
- package/src/dev-bundle-resolution.ts +236 -0
- package/src/disk-cleanup.ts +466 -0
- package/src/home-paths.ts +552 -0
- package/src/host/agent-host.ts +666 -0
- package/src/host/bridge-host.ts +2626 -0
- package/src/host/fetch-proxy-handler.ts +397 -0
- package/src/host/fetch-proxy-overrides.ts +51 -0
- package/src/host/open-url.ts +89 -0
- package/src/host/websocket-proxy.ts +210 -0
- package/src/index.ts +12 -705
- package/src/jump-to-source-babel.ts +135 -0
- package/src/menu.ts +734 -0
- package/src/metro-plugin.ts +139 -0
- package/src/native-dev-bundle-url.ts +96 -0
- package/src/native-seam-manifest.ts +341 -0
- package/src/plist.ts +27 -0
- package/src/poll-until.ts +92 -0
- package/src/profiles.ts +179 -0
- package/src/public-brand.ts +9 -0
- package/src/render-mode.ts +27 -0
- package/src/runtime-assets.ts +228 -0
- package/src/runtime-delivery.ts +54 -0
- package/src/screenshots/compose.ts +422 -0
- package/src/screenshots/frame-compose.ts +454 -0
- package/src/screenshots/orchestrate.ts +256 -0
- package/src/screenshots/org-deck.ts +91 -0
- package/src/screenshots/registry.ts +58 -0
- package/src/screenshots/schema.ts +364 -0
- package/src/sdk.ts +7 -0
- package/src/settings-bundle.ts +418 -0
- package/src/skills/builtin/a11y-review.ts +132 -0
- package/src/skills/builtin/compat-check.ts +71 -0
- package/src/skills/builtin/maestro-test.ts +121 -0
- package/src/skills/builtin/perf-profile.ts +90 -0
- package/src/skills/builtin/screenshot-all.ts +52 -0
- package/src/skills/builtin/visual-diff.ts +100 -0
- package/src/skills/registry.ts +107 -0
- package/src/skills/types.ts +41 -0
- package/src/team-machine-prompt.ts +73 -0
- package/src/vite-plugin-one.ts +190 -0
- package/src/vite-plugin.ts +1750 -0
- package/src/worklets-babel.ts +134 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
// sootsim plugin for One/Vite — serves the installed sootsim runtime at /__soot/
|
|
2
|
+
// from ~/.sootsim/runtimes/<version>. version-owned localhost origins remain
|
|
3
|
+
// bound to that directory across an active-runtime update.
|
|
4
|
+
//
|
|
5
|
+
// usage in vite.config.ts:
|
|
6
|
+
// import { sootsimPlugin } from 'sootsim/vite'
|
|
7
|
+
// export default { plugins: [one(), sootsimPlugin()] }
|
|
8
|
+
|
|
9
|
+
import fs from 'fs'
|
|
10
|
+
import path from 'path'
|
|
11
|
+
import { DEFAULT_SOOTSIM_BRIDGE_PORT } from './bridge-constants'
|
|
12
|
+
import { isDaemonLockfileFresh, readDaemonLockfile } from './home-paths'
|
|
13
|
+
import {
|
|
14
|
+
isRootRuntimeAssetPath,
|
|
15
|
+
resolveRuntimeFilePath,
|
|
16
|
+
resolveRuntimeRootForRequestHost,
|
|
17
|
+
serveRuntimeFile,
|
|
18
|
+
SOOTSIM_RUNTIME_MISSING_MESSAGE,
|
|
19
|
+
} from './runtime-assets'
|
|
20
|
+
import type { Plugin } from 'vite'
|
|
21
|
+
|
|
22
|
+
export interface SootSimPluginOptions {
|
|
23
|
+
// custom bundle URL (default: auto-detect from One's metro)
|
|
24
|
+
bundleUrl?: string
|
|
25
|
+
// path prefix (default: '/__soot')
|
|
26
|
+
prefix?: string
|
|
27
|
+
// disable sootsim
|
|
28
|
+
enabled?: boolean
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function sootsimPlugin(options: SootSimPluginOptions = {}): Plugin[] {
|
|
32
|
+
if (options.enabled === false) return []
|
|
33
|
+
|
|
34
|
+
const prefix = options.prefix || '/__soot'
|
|
35
|
+
|
|
36
|
+
return [
|
|
37
|
+
{
|
|
38
|
+
name: 'sootsim-one',
|
|
39
|
+
|
|
40
|
+
configureServer(server) {
|
|
41
|
+
const bundleUrl =
|
|
42
|
+
options.bundleUrl ||
|
|
43
|
+
'/node_modules/one/metro-entry.bundle?platform=ios&dev=true&minify=false'
|
|
44
|
+
|
|
45
|
+
// build the shell HTML, injecting the bundle URL (so main.tsx loads this
|
|
46
|
+
// app's bundle) AND window.__sootsimBridgePort. the bridge-port injection
|
|
47
|
+
// mirrors the dev-stack bridge-host: without it the engine's
|
|
48
|
+
// resolveBridgePort() falls back to a location-derived guess that mis-maps
|
|
49
|
+
// a non-Contrast app port (the mobile template's :4400 -> 9068) and the sim
|
|
50
|
+
// can't reach the bridge. resolved per-request from the daemon lockfile
|
|
51
|
+
// (the CLI's `open` writes/uses it before the shell loads) so the engine
|
|
52
|
+
// targets the SAME bridge the CLI does; default port otherwise.
|
|
53
|
+
const buildShellHtml = (runtimeRoot: string): string => {
|
|
54
|
+
const html = fs.readFileSync(path.join(runtimeRoot, 'index.html'), 'utf8')
|
|
55
|
+
const lock = readDaemonLockfile()
|
|
56
|
+
const bridgePort =
|
|
57
|
+
lock && isDaemonLockfileFresh(lock) && lock.bridgePort > 0
|
|
58
|
+
? lock.bridgePort
|
|
59
|
+
: DEFAULT_SOOTSIM_BRIDGE_PORT
|
|
60
|
+
// inject the bridge port + a default bundle (only when the URL has none,
|
|
61
|
+
// so the CLI's resolved bundle wins), and PRESERVE the existing query.
|
|
62
|
+
// preserving the query is essential: `sootsim open` stamps the open URL
|
|
63
|
+
// with `inspectOpen=<token>` and matches the registered sim by that
|
|
64
|
+
// token (waitForSimMatch). the old code forced `?bundle=` only and
|
|
65
|
+
// stripped inspectOpen, so the sim registered but never matched and
|
|
66
|
+
// `open` timed out after 60s.
|
|
67
|
+
const inject =
|
|
68
|
+
`<script>(function(){var u=new URL(location.href);` +
|
|
69
|
+
`if(!u.searchParams.has('bundle'))u.searchParams.set('bundle',${JSON.stringify(bundleUrl)});` +
|
|
70
|
+
`window.__sootsimBridgePort=${bridgePort};` +
|
|
71
|
+
`history.replaceState(null,'','${prefix}/'+u.search)})()</script>`
|
|
72
|
+
return html.replace('</head>', inject + '</head>')
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// mirror Set-Cookie into a readable header for sootsim's fetch wrapper
|
|
76
|
+
server.middlewares.use((req, res, next) => {
|
|
77
|
+
const origWriteHead = res.writeHead.bind(res)
|
|
78
|
+
res.writeHead = function (statusCode: number, ...args: unknown[]) {
|
|
79
|
+
const setCookie = res.getHeader('set-cookie')
|
|
80
|
+
if (setCookie) {
|
|
81
|
+
const value = Array.isArray(setCookie)
|
|
82
|
+
? setCookie.join(', ')
|
|
83
|
+
: String(setCookie)
|
|
84
|
+
res.setHeader('x-sootsim-set-cookie', value)
|
|
85
|
+
res.setHeader('access-control-expose-headers', 'x-sootsim-set-cookie')
|
|
86
|
+
}
|
|
87
|
+
return (origWriteHead as (...args: unknown[]) => typeof res)(
|
|
88
|
+
statusCode,
|
|
89
|
+
...args,
|
|
90
|
+
)
|
|
91
|
+
} as typeof res.writeHead
|
|
92
|
+
next()
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
// serve a minimal /__server-scan describing THIS vite dev server, so a
|
|
96
|
+
// sootsim shell loaded from <port>/__soot can resolve this app's native
|
|
97
|
+
// bundle. dev-bundle-resolution's resolvePortViaServerScan fetches
|
|
98
|
+
// `/__server-scan` RELATIVE to the shell origin; when the shell is loaded
|
|
99
|
+
// from this target origin, that hits here. without it the request SPA-
|
|
100
|
+
// falls-back to 404 and the bundle never resolves (sootsim open hangs).
|
|
101
|
+
// we describe only this server (the shell drives THIS app) — no localhost-
|
|
102
|
+
// wide scan, so the published plugin pulls in no shell-only scanner
|
|
103
|
+
// internals. shape matches DiscoveredServer enough for the resolver.
|
|
104
|
+
server.middlewares.use((req, res, next) => {
|
|
105
|
+
if ((req.url || '').split('?')[0] !== '/__server-scan') return next()
|
|
106
|
+
const scanPort = server.config.server.port || 8081
|
|
107
|
+
const absoluteBundleUrl = bundleUrl.startsWith('http')
|
|
108
|
+
? bundleUrl
|
|
109
|
+
: `http://localhost:${scanPort}${bundleUrl}`
|
|
110
|
+
res.setHeader('content-type', 'application/json')
|
|
111
|
+
res.end(
|
|
112
|
+
JSON.stringify([
|
|
113
|
+
{
|
|
114
|
+
port: scanPort,
|
|
115
|
+
framework: 'one',
|
|
116
|
+
bundleUrl: absoluteBundleUrl,
|
|
117
|
+
lastSeen: Date.now(),
|
|
118
|
+
},
|
|
119
|
+
]),
|
|
120
|
+
)
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
server.middlewares.use((req, res, next) => {
|
|
124
|
+
const url = req.url || ''
|
|
125
|
+
const pathname = url.split('?')[0]
|
|
126
|
+
const runtimeRoot = resolveRuntimeRootForRequestHost(req.headers.host)
|
|
127
|
+
|
|
128
|
+
if (!runtimeRoot) {
|
|
129
|
+
if (
|
|
130
|
+
pathname === prefix ||
|
|
131
|
+
pathname === prefix + '/' ||
|
|
132
|
+
pathname.startsWith(prefix + '/')
|
|
133
|
+
) {
|
|
134
|
+
res.statusCode = 500
|
|
135
|
+
res.end(SOOTSIM_RUNTIME_MISSING_MESSAGE)
|
|
136
|
+
return
|
|
137
|
+
}
|
|
138
|
+
next()
|
|
139
|
+
return
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// root-relative runtime assets emitted by the shell and engine vite
|
|
143
|
+
// builds. only intercept when the asset exists in the active runtime.
|
|
144
|
+
if (isRootRuntimeAssetPath(pathname)) {
|
|
145
|
+
const fullPath = resolveRuntimeFilePath(runtimeRoot, pathname)
|
|
146
|
+
if (fullPath) {
|
|
147
|
+
serveRuntimeFile(req, res, fullPath)
|
|
148
|
+
return
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// serve the sootsim HTML shell — inject bundle URL + bridge port
|
|
153
|
+
if (pathname === prefix || pathname === prefix + '/') {
|
|
154
|
+
res.setHeader('content-type', 'text/html')
|
|
155
|
+
res.end(buildShellHtml(runtimeRoot))
|
|
156
|
+
return
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// serve runtime files under /__soot/*.
|
|
160
|
+
if (pathname.startsWith(prefix + '/')) {
|
|
161
|
+
const fullPath = resolveRuntimeFilePath(
|
|
162
|
+
runtimeRoot,
|
|
163
|
+
pathname.slice(prefix.length),
|
|
164
|
+
)
|
|
165
|
+
if (fullPath) {
|
|
166
|
+
serveRuntimeFile(req, res, fullPath)
|
|
167
|
+
return
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// extensionless in-shell routes should still load the shell.
|
|
171
|
+
const ext = path.extname(pathname)
|
|
172
|
+
if (!ext) {
|
|
173
|
+
res.setHeader('content-type', 'text/html')
|
|
174
|
+
res.end(buildShellHtml(runtimeRoot))
|
|
175
|
+
return
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
next()
|
|
180
|
+
})
|
|
181
|
+
|
|
182
|
+
const port = server.config.server.port || 8081
|
|
183
|
+
const sootsimUrl = `http://localhost:${port}${prefix}/`
|
|
184
|
+
console.log(`[rnx] serving at ${sootsimUrl}`)
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
]
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export default sootsimPlugin
|