@ray-js/robot-map-sdk 0.0.11 → 0.0.13
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/bin/docs-server.js +205 -14
- package/dist-docs/404.html +3 -3
- package/dist-docs/assets/{app.3-ianRvb.js → app.CoDGIQ53.js} +1 -1
- package/dist-docs/assets/chunks/@localSearchIndexroot.DELY0TLT.js +1 -0
- package/dist-docs/assets/chunks/{BitmapFont.C8awBCd1.js → BitmapFont.DDRqV796.js} +1 -1
- package/dist-docs/assets/chunks/{BufferResource.C5TLxka4.js → BufferResource.aFEHKM_N.js} +1 -1
- package/dist-docs/assets/chunks/{CanvasRenderer.DyglCOE2.js → CanvasRenderer.BefGXFZ-.js} +1 -1
- package/dist-docs/assets/chunks/{RenderTargetSystem._cMCUdmu.js → RenderTargetSystem.CsgIm493.js} +1 -1
- package/dist-docs/assets/chunks/{VPLocalSearchBox.DYzATQt_.js → VPLocalSearchBox.CVEAMjKj.js} +1 -1
- package/dist-docs/assets/chunks/{WebGLRenderer.C_pauwH4.js → WebGLRenderer.p4DxJ1iF.js} +1 -1
- package/dist-docs/assets/chunks/{WebGPURenderer.DuRPdsh5.js → WebGPURenderer.BhOx1ll0.js} +1 -1
- package/dist-docs/assets/chunks/{browserAll.BebatlLr.js → browserAll.CXRAifqY.js} +1 -1
- package/dist-docs/assets/chunks/{index.DR0yN-kU.js → index.Dmmvsq5C.js} +4 -4
- package/dist-docs/assets/chunks/theme.Cii0G4Y-.js +4 -0
- package/dist-docs/assets/chunks/{webworkerAll.BAL0vGum.js → webworkerAll.CY0RXZhY.js} +1 -1
- package/dist-docs/assets/{guide_getting-started.md.DzTPTYGC.js → guide_getting-started.md.9hcfOAq4.js} +1 -1
- package/dist-docs/assets/plans_2026-03-11-simulator-logger-dump-implementation-plan.md.Ck5BGdoX.js +1 -0
- package/dist-docs/assets/plans_2026-03-11-simulator-logger-dump-implementation-plan.md.Ck5BGdoX.lean.js +1 -0
- package/dist-docs/assets/records_bugs_2026-03-11-render-result-runtime-sync-bugfix.md.DRNUuaFT.js +1 -0
- package/dist-docs/assets/records_bugs_2026-03-11-render-result-runtime-sync-bugfix.md.DRNUuaFT.lean.js +1 -0
- package/dist-docs/assets/records_plans_2026-03-11-docs-cli-ui-polish-plan.md.B8oZt_5R.js +1 -0
- package/dist-docs/assets/records_plans_2026-03-11-docs-cli-ui-polish-plan.md.B8oZt_5R.lean.js +1 -0
- package/dist-docs/assets/records_plans_2026-03-11-simulator-logger-dump-plan.md.CkjDCM2N.js +1 -0
- package/dist-docs/assets/records_plans_2026-03-11-simulator-logger-dump-plan.md.CkjDCM2N.lean.js +1 -0
- package/dist-docs/assets/records_plans_2026-03-11-simulator-style-tokenization-plan.md.D4BgkNlO.js +1 -0
- package/dist-docs/assets/records_plans_2026-03-11-simulator-style-tokenization-plan.md.D4BgkNlO.lean.js +1 -0
- package/dist-docs/assets/{style.DrlDtCux.css → style.hiWmcVfN.css} +1 -1
- package/dist-docs/guide/advanced-usage.html +4 -4
- package/dist-docs/guide/concepts.html +4 -4
- package/dist-docs/guide/getting-started.html +6 -6
- package/dist-docs/guide/mcp.html +4 -4
- package/dist-docs/hashmap.json +1 -1
- package/dist-docs/index.html +4 -4
- package/dist-docs/plans/2026-03-04-detected-objects-visibility-design.html +4 -4
- package/dist-docs/plans/2026-03-04-show-detected-objects-implementation-plan.html +4 -4
- package/dist-docs/plans/2026-03-10-simulator-debug-design.html +4 -4
- package/dist-docs/plans/2026-03-10-simulator-events-console-design.html +4 -4
- package/dist-docs/plans/2026-03-10-simulator-events-console-implementation-plan.html +4 -4
- package/dist-docs/plans/2026-03-10-simulator-runtime-controls-design.html +4 -4
- package/dist-docs/plans/2026-03-10-simulator-runtime-controls-implementation-plan.html +4 -4
- package/dist-docs/plans/2026-03-11-simulator-logger-dump-implementation-plan.html +25 -0
- package/dist-docs/records/bugs/2026-02-28-fix-pixi-bindgroup-webgpu-snapshot-whitescreen-bugfix.html +4 -4
- package/dist-docs/records/bugs/2026-03-10-events-drawer-toolbar-scroll-bugfix.html +4 -4
- package/dist-docs/records/bugs/2026-03-10-simulator-initial-render-layout-bugfix.html +4 -4
- package/dist-docs/records/bugs/2026-03-10-simulator-wheel-scroll-leak-bugfix.html +4 -4
- package/dist-docs/records/bugs/2026-03-11-docs-server-bin-clean-bugfix.html +4 -4
- package/dist-docs/records/bugs/2026-03-11-render-result-runtime-sync-bugfix.html +25 -0
- package/dist-docs/records/plans/2026-03-02-furniture-feature-plan.html +4 -4
- package/dist-docs/records/plans/2026-03-10-simulator-events-console-plan.html +4 -4
- package/dist-docs/records/plans/2026-03-10-simulator-last-successful-combo-cache-plan.html +4 -4
- package/dist-docs/records/plans/2026-03-10-simulator-map-parsed-view-plan.html +4 -4
- package/dist-docs/records/plans/2026-03-10-simulator-map-playground-refactor-plan.html +4 -4
- package/dist-docs/records/plans/2026-03-10-simulator-playground-plan.html +4 -4
- package/dist-docs/records/plans/2026-03-10-simulator-runtime-controls-plan.html +4 -4
- package/dist-docs/records/plans/2026-03-11-docs-cli-ui-polish-plan.html +25 -0
- package/dist-docs/records/plans/2026-03-11-simulator-logger-dump-plan.html +25 -0
- package/dist-docs/records/plans/2026-03-11-simulator-src-migration-implementation.html +4 -4
- package/dist-docs/records/plans/2026-03-11-simulator-src-migration-plan.html +4 -4
- package/dist-docs/records/plans/2026-03-11-simulator-style-tokenization-plan.html +25 -0
- package/dist-docs/reference/callbacks.html +4 -4
- package/dist-docs/reference/config.html +4 -4
- package/dist-docs/reference/data.html +4 -4
- package/dist-docs/reference/methods.html +4 -4
- package/dist-docs/reference/runtime.html +4 -4
- package/dist-docs/reference/types.html +4 -4
- package/dist-docs/reference/utils.html +4 -4
- package/dist-docs/simulator/index.html +4 -4
- package/package.json +1 -1
- package/dist-docs/assets/chunks/@localSearchIndexroot.l5uunL9n.js +0 -1
- package/dist-docs/assets/chunks/theme.Dn4kNa0x.js +0 -4
- /package/dist-docs/assets/{guide_getting-started.md.DzTPTYGC.lean.js → guide_getting-started.md.9hcfOAq4.lean.js} +0 -0
package/bin/docs-server.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { createServer } from 'node:http'
|
|
4
4
|
import { readFile, stat } from 'node:fs/promises'
|
|
5
5
|
import { dirname, extname, join, normalize } from 'node:path'
|
|
6
|
+
import { spawn } from 'node:child_process'
|
|
6
7
|
import process from 'node:process'
|
|
7
8
|
import { fileURLToPath } from 'node:url'
|
|
8
9
|
|
|
@@ -26,17 +27,24 @@ const MIME_TYPES = {
|
|
|
26
27
|
|
|
27
28
|
const HELP_TEXT = `
|
|
28
29
|
Usage:
|
|
29
|
-
robot-map-docs [--host <host>] [--port <port>]
|
|
30
|
+
robot-map-docs [--host <host>] [--port <port>] [--open]
|
|
30
31
|
|
|
31
32
|
Options:
|
|
32
33
|
--host, -H Host to bind (default: 127.0.0.1)
|
|
33
|
-
--port, -p Port to listen on (default:
|
|
34
|
+
--port, -p Port to listen on (default: 5180)
|
|
35
|
+
--open, -o Open docs in browser after server starts
|
|
36
|
+
--no-open Disable browser auto-open
|
|
37
|
+
--quiet, -q Minimal logs (errors only)
|
|
34
38
|
--help, -h Show this help message
|
|
35
39
|
`
|
|
36
40
|
|
|
37
41
|
const parseArgs = (argv) => {
|
|
38
42
|
let host = '127.0.0.1'
|
|
39
|
-
let port =
|
|
43
|
+
let port = 5180
|
|
44
|
+
let shouldOpen =
|
|
45
|
+
process.env.ROBOT_MAP_DOCS_OPEN === '1' ||
|
|
46
|
+
process.env.ROBOT_MAP_DOCS_OPEN === 'true'
|
|
47
|
+
let quiet = false
|
|
40
48
|
|
|
41
49
|
for (let i = 0; i < argv.length; i += 1) {
|
|
42
50
|
const arg = argv[i]
|
|
@@ -62,9 +70,25 @@ const parseArgs = (argv) => {
|
|
|
62
70
|
i += 1
|
|
63
71
|
continue
|
|
64
72
|
}
|
|
73
|
+
|
|
74
|
+
if (arg === '--open' || arg === '-o') {
|
|
75
|
+
shouldOpen = true
|
|
76
|
+
continue
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (arg === '--no-open') {
|
|
80
|
+
shouldOpen = false
|
|
81
|
+
continue
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (arg === '--quiet' || arg === '-q') {
|
|
85
|
+
quiet = true
|
|
86
|
+
continue
|
|
87
|
+
}
|
|
88
|
+
|
|
65
89
|
}
|
|
66
90
|
|
|
67
|
-
return { host, port }
|
|
91
|
+
return { host, port, shouldOpen, quiet }
|
|
68
92
|
}
|
|
69
93
|
|
|
70
94
|
const getSafePath = (rawPathname) => {
|
|
@@ -86,6 +110,110 @@ const getSafePath = (rawPathname) => {
|
|
|
86
110
|
const currentFile = fileURLToPath(import.meta.url)
|
|
87
111
|
const currentDir = dirname(currentFile)
|
|
88
112
|
const docsRoot = join(currentDir, '..', 'dist-docs')
|
|
113
|
+
const packageRoot = join(currentDir, '..')
|
|
114
|
+
|
|
115
|
+
const isColorEnabled = () =>
|
|
116
|
+
process.stdout.isTTY &&
|
|
117
|
+
process.env.NO_COLOR !== '1' &&
|
|
118
|
+
process.env.FORCE_COLOR !== '0'
|
|
119
|
+
|
|
120
|
+
const color = {
|
|
121
|
+
reset: '\x1b[0m',
|
|
122
|
+
dim: '\x1b[2m',
|
|
123
|
+
accent: '\x1b[38;2;72;151;108m',
|
|
124
|
+
accentSoft: '\x1b[38;2;121;206;160m',
|
|
125
|
+
warn: '\x1b[38;2;214;162;64m',
|
|
126
|
+
danger: '\x1b[38;2;220;95;95m',
|
|
127
|
+
bold: '\x1b[1m',
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const withColor = (value, style) => {
|
|
131
|
+
if (!isColorEnabled()) return value
|
|
132
|
+
return `${style}${value}${color.reset}`
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const createLogger = ({ quiet }) => ({
|
|
136
|
+
info: (text) => {
|
|
137
|
+
if (!quiet) {
|
|
138
|
+
console.log(`${withColor('[docs]', color.accent)} ${text}`)
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
warn: (text) => {
|
|
142
|
+
if (!quiet) {
|
|
143
|
+
console.warn(`${withColor('[warn]', color.warn)} ${text}`)
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
error: (text) => {
|
|
147
|
+
console.error(`${withColor('[error]', color.danger)} ${text}`)
|
|
148
|
+
},
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
const formatDurationMs = (durationMs) => `${Math.max(0, durationMs)}ms`
|
|
152
|
+
|
|
153
|
+
const formatBorder = (title) =>
|
|
154
|
+
withColor(`+-------------------- ${title} --------------------+`, color.accent)
|
|
155
|
+
|
|
156
|
+
const renderBanner = ({
|
|
157
|
+
version,
|
|
158
|
+
host,
|
|
159
|
+
port,
|
|
160
|
+
startupMs,
|
|
161
|
+
openMode,
|
|
162
|
+
}) => {
|
|
163
|
+
const endpoint = `http://${host}:${String(port)}`
|
|
164
|
+
const lines = [
|
|
165
|
+
formatBorder('Robot Map Docs'),
|
|
166
|
+
`${withColor(' Package ', color.dim)} ${withColor(
|
|
167
|
+
`@ray-js/robot-map-sdk@${version}`,
|
|
168
|
+
color.bold,
|
|
169
|
+
)}`,
|
|
170
|
+
`${withColor(' URL ', color.dim)} ${withColor(endpoint, color.accentSoft)}`,
|
|
171
|
+
`${withColor(' Open ', color.dim)} ${openMode}`,
|
|
172
|
+
`${withColor(' Startup ', color.dim)} ${formatDurationMs(startupMs)}`,
|
|
173
|
+
withColor('+---------------------------------------------------+', color.accent),
|
|
174
|
+
withColor('Press Ctrl+C to stop', color.dim),
|
|
175
|
+
]
|
|
176
|
+
return lines.join('\n')
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
const getPackageVersion = async () => {
|
|
180
|
+
try {
|
|
181
|
+
const content = await readFile(join(packageRoot, 'package.json'), 'utf-8')
|
|
182
|
+
const parsed = JSON.parse(content)
|
|
183
|
+
if (typeof parsed.version === 'string' && parsed.version.trim()) {
|
|
184
|
+
return parsed.version
|
|
185
|
+
}
|
|
186
|
+
} catch (_error) {
|
|
187
|
+
// Ignore and fall back to unknown.
|
|
188
|
+
}
|
|
189
|
+
return 'unknown'
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const openBrowser = (url) => {
|
|
193
|
+
let cmd = ''
|
|
194
|
+
let args = []
|
|
195
|
+
|
|
196
|
+
if (process.platform === 'darwin') {
|
|
197
|
+
cmd = 'open'
|
|
198
|
+
args = [url]
|
|
199
|
+
} else if (process.platform === 'win32') {
|
|
200
|
+
cmd = 'cmd'
|
|
201
|
+
args = ['/c', 'start', '', url]
|
|
202
|
+
} else {
|
|
203
|
+
cmd = 'xdg-open'
|
|
204
|
+
args = [url]
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return new Promise((resolve, reject) => {
|
|
208
|
+
const child = spawn(cmd, args, {
|
|
209
|
+
detached: true,
|
|
210
|
+
stdio: 'ignore',
|
|
211
|
+
})
|
|
212
|
+
child.on('error', reject)
|
|
213
|
+
child.unref()
|
|
214
|
+
resolve()
|
|
215
|
+
})
|
|
216
|
+
}
|
|
89
217
|
|
|
90
218
|
const serveFile = async (filePath, response) => {
|
|
91
219
|
const content = await readFile(filePath)
|
|
@@ -155,7 +283,10 @@ const createRequestHandler = () => async (request, response) => {
|
|
|
155
283
|
}
|
|
156
284
|
|
|
157
285
|
const main = async () => {
|
|
158
|
-
const
|
|
286
|
+
const startTime = Date.now()
|
|
287
|
+
const { host, port, shouldOpen, quiet } = parseArgs(process.argv.slice(2))
|
|
288
|
+
const logger = createLogger({ quiet })
|
|
289
|
+
const packageVersion = await getPackageVersion()
|
|
159
290
|
|
|
160
291
|
try {
|
|
161
292
|
const rootStat = await stat(docsRoot)
|
|
@@ -169,22 +300,82 @@ const main = async () => {
|
|
|
169
300
|
? error.code
|
|
170
301
|
: undefined
|
|
171
302
|
if (String(maybeCode ?? '') !== 'ENOENT') {
|
|
172
|
-
|
|
173
|
-
`[robot-map-docs] docs root check warning: ${error.message}`,
|
|
174
|
-
)
|
|
303
|
+
logger.warn(`docs root check warning: ${error.message}`)
|
|
175
304
|
}
|
|
176
305
|
}
|
|
177
|
-
|
|
178
|
-
'[robot-map-docs] dist-docs not found. Please build docs before publish.',
|
|
179
|
-
)
|
|
306
|
+
logger.error('dist-docs not found. Please build docs before publish.')
|
|
180
307
|
process.exit(1)
|
|
181
308
|
}
|
|
182
309
|
|
|
183
310
|
const server = createServer(createRequestHandler())
|
|
311
|
+
const sockets = new Set()
|
|
312
|
+
let shuttingDown = false
|
|
313
|
+
|
|
314
|
+
server.on('connection', (socket) => {
|
|
315
|
+
sockets.add(socket)
|
|
316
|
+
socket.on('close', () => {
|
|
317
|
+
sockets.delete(socket)
|
|
318
|
+
})
|
|
319
|
+
})
|
|
320
|
+
|
|
321
|
+
server.on('error', (error) => {
|
|
322
|
+
const message = error instanceof Error ? error.message : String(error)
|
|
323
|
+
logger.error(`failed to start server: ${message}`)
|
|
324
|
+
if (String((error && error.code) ?? '') === 'EADDRINUSE') {
|
|
325
|
+
logger.warn(`port ${port} is already in use. Try "--port ${port + 1}".`)
|
|
326
|
+
}
|
|
327
|
+
process.exit(1)
|
|
328
|
+
})
|
|
329
|
+
|
|
184
330
|
server.listen(port, host, () => {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
)
|
|
331
|
+
const endpoint = `http://${host}:${String(port)}`
|
|
332
|
+
const startupMs = Date.now() - startTime
|
|
333
|
+
if (!quiet) {
|
|
334
|
+
console.log(
|
|
335
|
+
renderBanner({
|
|
336
|
+
version: packageVersion,
|
|
337
|
+
host,
|
|
338
|
+
port,
|
|
339
|
+
startupMs,
|
|
340
|
+
openMode: shouldOpen ? 'enabled' : 'disabled',
|
|
341
|
+
}),
|
|
342
|
+
)
|
|
343
|
+
} else {
|
|
344
|
+
logger.info(`serving dist-docs at ${endpoint}`)
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (shouldOpen) {
|
|
348
|
+
openBrowser(endpoint).catch((error) => {
|
|
349
|
+
const message = error instanceof Error ? error.message : String(error)
|
|
350
|
+
logger.warn(`failed to open browser automatically: ${message}`)
|
|
351
|
+
})
|
|
352
|
+
}
|
|
353
|
+
})
|
|
354
|
+
|
|
355
|
+
process.once('SIGINT', () => {
|
|
356
|
+
if (shuttingDown) {
|
|
357
|
+
logger.warn('force exit on repeated interrupt')
|
|
358
|
+
process.exit(130)
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
shuttingDown = true
|
|
362
|
+
logger.info('shutting down...')
|
|
363
|
+
|
|
364
|
+
server.close()
|
|
365
|
+
|
|
366
|
+
for (const socket of sockets) {
|
|
367
|
+
socket.destroy()
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// Always terminate quickly in CLI usage; do not risk hanging on keep-alive.
|
|
371
|
+
setTimeout(() => {
|
|
372
|
+
process.exit(130)
|
|
373
|
+
}, 80)
|
|
374
|
+
|
|
375
|
+
setTimeout(() => {
|
|
376
|
+
logger.warn('shutdown timeout, forcing exit')
|
|
377
|
+
process.exit(130)
|
|
378
|
+
}, 1500).unref()
|
|
188
379
|
})
|
|
189
380
|
}
|
|
190
381
|
|
package/dist-docs/404.html
CHANGED
|
@@ -6,17 +6,17 @@
|
|
|
6
6
|
<title>404 | Tuya Robot Map</title>
|
|
7
7
|
<meta name="description" content="Not Found">
|
|
8
8
|
<meta name="generator" content="VitePress v1.6.4">
|
|
9
|
-
<link rel="preload stylesheet" href="/assets/style.
|
|
9
|
+
<link rel="preload stylesheet" href="/assets/style.hiWmcVfN.css" as="style">
|
|
10
10
|
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
|
|
11
11
|
|
|
12
|
-
<script type="module" src="/assets/app.
|
|
12
|
+
<script type="module" src="/assets/app.CoDGIQ53.js"></script>
|
|
13
13
|
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
|
14
14
|
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
|
15
15
|
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
|
16
16
|
</head>
|
|
17
17
|
<body>
|
|
18
18
|
<div id="app"></div>
|
|
19
|
-
<script>window.__VP_HASH_MAP__=JSON.parse("{\"guide_advanced-usage.md\":\"COVLyRkA\",\"guide_concepts.md\":\"CJ87tk-r\",\"guide_getting-started.md\":\"
|
|
19
|
+
<script>window.__VP_HASH_MAP__=JSON.parse("{\"guide_advanced-usage.md\":\"COVLyRkA\",\"guide_concepts.md\":\"CJ87tk-r\",\"guide_getting-started.md\":\"9hcfOAq4\",\"guide_mcp.md\":\"CabCiX8Z\",\"index.md\":\"wTsFvv0N\",\"plans_2026-03-04-detected-objects-visibility-design.md\":\"Dqboot5W\",\"plans_2026-03-04-show-detected-objects-implementation-plan.md\":\"CDWwQtWj\",\"plans_2026-03-10-simulator-debug-design.md\":\"BZibn7uw\",\"plans_2026-03-10-simulator-events-console-design.md\":\"BVmEzCbR\",\"plans_2026-03-10-simulator-events-console-implementation-plan.md\":\"S2f1zs9-\",\"plans_2026-03-10-simulator-runtime-controls-design.md\":\"mqeNaYgg\",\"plans_2026-03-10-simulator-runtime-controls-implementation-plan.md\":\"BXG1UWFt\",\"plans_2026-03-11-simulator-logger-dump-implementation-plan.md\":\"Ck5BGdoX\",\"records_bugs_2026-02-28-fix-pixi-bindgroup-webgpu-snapshot-whitescreen-bugfix.md\":\"BbQpA41Y\",\"records_bugs_2026-03-10-events-drawer-toolbar-scroll-bugfix.md\":\"DbHxPv4D\",\"records_bugs_2026-03-10-simulator-initial-render-layout-bugfix.md\":\"w7--2hvH\",\"records_bugs_2026-03-10-simulator-wheel-scroll-leak-bugfix.md\":\"B6gIem2P\",\"records_bugs_2026-03-11-docs-server-bin-clean-bugfix.md\":\"GGWCjkok\",\"records_bugs_2026-03-11-render-result-runtime-sync-bugfix.md\":\"DRNUuaFT\",\"records_plans_2026-03-02-furniture-feature-plan.md\":\"CqSsyNDo\",\"records_plans_2026-03-10-simulator-events-console-plan.md\":\"CfHLEHcc\",\"records_plans_2026-03-10-simulator-last-successful-combo-cache-plan.md\":\"Z2RoK239\",\"records_plans_2026-03-10-simulator-map-parsed-view-plan.md\":\"S9jPz75o\",\"records_plans_2026-03-10-simulator-map-playground-refactor-plan.md\":\"BuILlmcV\",\"records_plans_2026-03-10-simulator-playground-plan.md\":\"CQAR-T7p\",\"records_plans_2026-03-10-simulator-runtime-controls-plan.md\":\"DSVD-qCa\",\"records_plans_2026-03-11-docs-cli-ui-polish-plan.md\":\"B8oZt_5R\",\"records_plans_2026-03-11-simulator-logger-dump-plan.md\":\"CkjDCM2N\",\"records_plans_2026-03-11-simulator-src-migration-implementation.md\":\"FnB5Cx6R\",\"records_plans_2026-03-11-simulator-src-migration-plan.md\":\"BBfaeRrq\",\"records_plans_2026-03-11-simulator-style-tokenization-plan.md\":\"D4BgkNlO\",\"reference_callbacks.md\":\"BIwuGR3s\",\"reference_config.md\":\"DHynhVxG\",\"reference_data.md\":\"B_XpUFrn\",\"reference_methods.md\":\"eH-UCMbE\",\"reference_runtime.md\":\"BEy8BhSZ\",\"reference_types.md\":\"hikiO8Cq\",\"reference_utils.md\":\"Dy6XKVWh\",\"simulator_index.md\":\"CF95Y_c9\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Tuya Robot Map\",\"description\":\"涂鸦扫地机地图组件\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"siteTitle\":\"Tuya Robot Map\",\"outline\":{\"level\":[2,6],\"label\":\"页面导航\"},\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"指南\",\"link\":\"/guide/concepts\",\"activeMatch\":\"^/guide/\"},{\"text\":\"参考\",\"link\":\"/reference/data\",\"activeMatch\":\"^/reference/\"},{\"text\":\"模拟调试\",\"link\":\"/simulator/\",\"activeMatch\":\"^/simulator/\"}],\"sidebar\":{\"/guide/\":[{\"text\":\"指南\",\"items\":[{\"text\":\"基本概念\",\"link\":\"/guide/concepts\"},{\"text\":\"快速开始\",\"link\":\"/guide/getting-started\"},{\"text\":\"进阶使用\",\"link\":\"/guide/advanced-usage\"}]}],\"/reference/\":[{\"text\":\"组件Props\",\"items\":[{\"text\":\"数据\",\"link\":\"/reference/data\"},{\"text\":\"配置\",\"link\":\"/reference/config\"},{\"text\":\"运行时\",\"link\":\"/reference/runtime\"},{\"text\":\"地图事件回调\",\"link\":\"/reference/callbacks\"}]},{\"text\":\"方法\",\"items\":[{\"text\":\"地图方法\",\"link\":\"/reference/methods\"},{\"text\":\"工具方法\",\"link\":\"/reference/utils\"}]},{\"text\":\"类型定义\",\"items\":[{\"text\":\"类型定义\",\"link\":\"/reference/types\"}]}],\"/simulator/\":[{\"text\":\"模拟调试\",\"items\":[{\"text\":\"实时模拟调试\",\"link\":\"/simulator/\"}]}]},\"search\":{\"provider\":\"local\"},\"lastUpdated\":{\"text\":\"最后更新于\",\"formatOptions\":{\"dateStyle\":\"short\",\"timeStyle\":\"short\"}}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
|
20
20
|
|
|
21
21
|
</body>
|
|
22
22
|
</html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{R as p}from"./chunks/theme.
|
|
1
|
+
import{R as p}from"./chunks/theme.Cii0G4Y-.js";import{R as s,ad as i,ae as u,af as c,ag as l,ah as f,ai as d,aj as m,ak as h,al as g,am as A,d as v,u as R,v as w,s as y,an as C,ao as P,ap as b,a7 as E}from"./chunks/framework.CBLqO2Q1.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),P(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),a=j();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return A(S)}function D(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
|