@code-yeongyu/senpi 2026.9.26 → 2026.9.27-2
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/CHANGELOG.md +43 -0
- package/dist/bun-runtime.d.ts +18 -2
- package/dist/bun-runtime.d.ts.map +1 -1
- package/dist/bun-runtime.js +60 -8
- package/dist/bun-runtime.js.map +1 -1
- package/dist/bundle/chunks/{app-server-command-ZRCKWY2X.js → app-server-command-ATWHNOOO.js} +1 -1
- package/dist/bundle/chunks/bun-extension-importer-R4HXF3GD.js +14 -0
- package/dist/bundle/chunks/chunk-2L26KPZ6.js +8 -0
- package/dist/bundle/chunks/{chunk-3WBSBDBX.js → chunk-3CC5ZOBV.js} +1 -1
- package/dist/bundle/chunks/{chunk-OZCB6BP3.js → chunk-67BC7VZV.js} +4 -4
- package/dist/bundle/chunks/{chunk-QGC46CGK.js → chunk-6SLQ5HFO.js} +46 -43
- package/dist/bundle/chunks/{chunk-MKAM7IRH.js → chunk-6W2DB2GC.js} +1 -1
- package/dist/bundle/chunks/{chunk-BSOJHK4W.js → chunk-7FXXRPB3.js} +2 -1
- package/dist/bundle/chunks/{chunk-Y54V65MS.js → chunk-HPY47AVX.js} +1 -1
- package/dist/bundle/chunks/{chunk-CLZVNQW3.js → chunk-LPFZGWG2.js} +1 -1
- package/dist/bundle/chunks/chunk-W3D3ZYDS.js +2 -0
- package/dist/bundle/chunks/{chunk-UBPMXBOJ.js → chunk-XKLR7C5B.js} +1 -1
- package/dist/bundle/chunks/{cli-main-H6JAXAXV.js → cli-main-HOM6UH3H.js} +1 -1
- package/dist/bundle/chunks/{help-fast-path-ZGKPSDFO.js → help-fast-path-YGYHMV2W.js} +1 -1
- package/dist/bundle/chunks/{host-command-BMHJ4YUD.js → host-command-XXSAFWBW.js} +1 -1
- package/dist/bundle/chunks/{host-lifecycle-2GZAGSGW.js → host-lifecycle-GOMGJ25O.js} +1 -1
- package/dist/bundle/chunks/{interactive-host-runtime-YI75GFD5.js → interactive-host-runtime-IYCZWJGX.js} +1 -1
- package/dist/bundle/chunks/{interactive-mode-HM7UQYRC.js → interactive-mode-ZMO7YVYU.js} +1 -1
- package/dist/bundle/chunks/{multi-session-host-7YX2I7UK.js → multi-session-host-CE3W6COI.js} +1 -1
- package/dist/bundle/chunks/{package-manager-cli-3ISYTEL2.js → package-manager-cli-2PHRL2SX.js} +1 -1
- package/dist/bundle/chunks/{rpc-mode-6PY4TN5F.js → rpc-mode-WCETTMFV.js} +1 -1
- package/dist/bundle/chunks/session-worker.js +133 -129
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +4 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/cross-project-session.d.ts +22 -0
- package/dist/cli/cross-project-session.d.ts.map +1 -0
- package/dist/cli/cross-project-session.js +38 -0
- package/dist/cli/cross-project-session.js.map +1 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +19 -5
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/builtin/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/index.js +2 -0
- package/dist/core/extensions/builtin/index.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/index.js +5 -2
- package/dist/core/extensions/builtin/permission-system/index.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.d.ts +5 -0
- package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.js +13 -0
- package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
- package/dist/core/extensions/builtin/repository-identity.d.ts +6 -0
- package/dist/core/extensions/builtin/repository-identity.d.ts.map +1 -0
- package/dist/core/extensions/builtin/repository-identity.js +33 -0
- package/dist/core/extensions/builtin/repository-identity.js.map +1 -0
- package/dist/core/extensions/bun-extension-importer.d.ts.map +1 -1
- package/dist/core/extensions/bun-extension-importer.js +10 -4
- package/dist/core/extensions/bun-extension-importer.js.map +1 -1
- package/dist/core/extensions/bun-extension-registry.js +6 -5
- package/dist/core/extensions/bun-extension-registry.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/kernel-prelude.d.ts +13 -0
- package/dist/core/extensions/kernel-prelude.d.ts.map +1 -0
- package/dist/core/extensions/kernel-prelude.js +38 -0
- package/dist/core/extensions/kernel-prelude.js.map +1 -0
- package/dist/core/extensions/types.d.ts +44 -2
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +4 -2
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/provider-rejected-images.d.ts +18 -0
- package/dist/core/provider-rejected-images.d.ts.map +1 -0
- package/dist/core/provider-rejected-images.js +107 -0
- package/dist/core/provider-rejected-images.js.map +1 -0
- package/dist/core/repository-identity.d.ts +18 -0
- package/dist/core/repository-identity.d.ts.map +1 -0
- package/dist/core/repository-identity.js +75 -0
- package/dist/core/repository-identity.js.map +1 -0
- package/dist/core/session-rebind.d.ts +17 -0
- package/dist/core/session-rebind.d.ts.map +1 -0
- package/dist/core/session-rebind.js +111 -0
- package/dist/core/session-rebind.js.map +1 -0
- package/dist/core/session-title-generator.d.ts.map +1 -1
- package/dist/core/session-title-generator.js +21 -3
- package/dist/core/session-title-generator.js.map +1 -1
- package/dist/core/session-title-reasoning.d.ts +14 -0
- package/dist/core/session-title-reasoning.d.ts.map +1 -0
- package/dist/core/session-title-reasoning.js +31 -0
- package/dist/core/session-title-reasoning.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -1
- package/dist/core/tools/path-utils.js +13 -0
- package/dist/core/tools/path-utils.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +6 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +100 -19
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +2 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/runtime-notice-presenter.d.ts +8 -0
- package/dist/modes/interactive/runtime-notice-presenter.d.ts.map +1 -0
- package/dist/modes/interactive/runtime-notice-presenter.js +69 -0
- package/dist/modes/interactive/runtime-notice-presenter.js.map +1 -0
- package/dist/modes/interactive/runtime-notice.d.ts +50 -0
- package/dist/modes/interactive/runtime-notice.d.ts.map +1 -0
- package/dist/modes/interactive/runtime-notice.js +104 -0
- package/dist/modes/interactive/runtime-notice.js.map +1 -0
- package/docs/environment-variables.md +2 -0
- package/docs/extensions.md +27 -1
- package/docs/quickstart.md +7 -1
- package/docs/sessions.md +9 -0
- package/docs/usage.md +1 -0
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +26 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +7 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/protocol.ts +9 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridges/schema-bridge.ts +2 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/kernel-preludes.ts +30 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +15 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/context-manager.ts +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/local-module-loader.ts +16 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/kernel.ts +6 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/prelude.py +15 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/transport.ts +7 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/kernel-prelude-plan.ts +19 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt-template.ts +2 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +4 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +11 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +1 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/run-eval-cell.ts +1 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +3 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/native/prebuilds/darwin-arm64/senpi_pty.darwin-arm64.node +0 -0
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
- package/dist/bundle/chunks/bun-extension-importer-H4IJCWWQ.js +0 -14
- package/dist/bundle/chunks/chunk-34HMVB33.js +0 -2
- package/dist/bundle/chunks/chunk-T3JBT2IK.js +0 -8
package/CHANGELOG.md
CHANGED
|
@@ -12,6 +12,49 @@
|
|
|
12
12
|
|
|
13
13
|
### Removed
|
|
14
14
|
|
|
15
|
+
## [2026.9.27-2] - 2026-09-27
|
|
16
|
+
|
|
17
|
+
### Breaking Changes
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- Extension tools can declare `kernelPrelude` (JavaScript/Python snippets, one documentation line, exported names) to add globals to eval kernels while the tool is active; `getAllTools()` projects it and rejects exports that shadow built-in kernel helpers. ([#2128](https://github.com/code-yeongyu/senpi/issues/2128))
|
|
22
|
+
- Extension tools can declare `permissionParser(input, cwd)`, so permission rules can gate their calls by tier (for example `my_tool:exec=deny`). A built-in parser for the same tool name always wins.
|
|
23
|
+
- New `tool_activated` extension event, fired when the active tool set gains tools through `pi.setActiveTools()`, `tool_search` promotion, or a lazy by-name activation.
|
|
24
|
+
|
|
25
|
+
- Sessions follow a moved or re-cloned repository: when `--session <id>` (or a `--resume` pick) finds a session filed under another path of the same git repository, senpi shows both paths and offers to move it here, keeping its id, history, goal, loops, and monitors; `--rebind <path|id>` does it without asking, and a different repository keeps the fork prompt. Sessions now record their repository (root commit and `origin` remote) so this works after the old path is gone. ([#2181](https://github.com/code-yeongyu/senpi/issues/2181))
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- The built-in Fireworks default is `accounts/fireworks/models/kimi-k3`; the previous default `kimi-k2p6` is no longer in the Fireworks catalog. ([#2175](https://github.com/code-yeongyu/senpi/issues/2175))
|
|
32
|
+
|
|
33
|
+
- Answering `y` or `yes` to "Fork this session into current directory?" (shown when `--session` finds the session in another project, for example after moving the repository) now forks the session instead of printing `Aborted.`; closing the input without an answer still declines. ([#2180](https://github.com/code-yeongyu/senpi/issues/2180), [#1042](https://github.com/code-yeongyu/senpi/pull/1042) by [@beengineer500](https://github.com/beengineer500))
|
|
34
|
+
|
|
35
|
+
### Removed
|
|
36
|
+
|
|
37
|
+
## [2026.9.27] - 2026-09-27
|
|
38
|
+
|
|
39
|
+
### Breaking Changes
|
|
40
|
+
|
|
41
|
+
### Added
|
|
42
|
+
|
|
43
|
+
- The interactive UI shows a one-time "Running on Node.js" notice (once per version) when senpi or OmO Native starts on Node.js. It says how to install or upgrade Bun and gives the clean reinstall command for the package manager that installed it, for example `npm uninstall -g @code-yeongyu/senpi && bun add -g --ignore-scripts @code-yeongyu/senpi`. Set `SENPI_RUNTIME=node` (`OMO_RUNTIME=node` for OmO Native) to stay on Node.js without it, or `SENPI_SKIP_RUNTIME_NOTICE=1` to hide it. ([#2157](https://github.com/code-yeongyu/senpi/issues/2157))
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
|
|
47
|
+
- npm, pnpm, Yarn, and npx installs now run on Bun when Bun 1.4.0 or newer is installed, like `bun add -g` installs already did. `SENPI_RUNTIME=node` keeps them on Node.js. ([#2157](https://github.com/code-yeongyu/senpi/issues/2157))
|
|
48
|
+
|
|
49
|
+
### Fixed
|
|
50
|
+
|
|
51
|
+
- A session recovers after the provider rejects an image. It used to fail every later turn, text-only ones included, with `Codex error: The image data you provided does not represent a valid image`. The rejected image is now replaced in later requests by a note naming its file, the error says which file was left out, and the next message goes through, also after a restart. ([#2170](https://github.com/code-yeongyu/senpi/issues/2170))
|
|
52
|
+
- The read tool finds a file whose path is wrapped in quotes, such as the `"C:\Users\<user>\Pictures\Screenshots\aaa.png"` that Windows Explorer's "Copy as path" produces, instead of failing with ENOENT. ([#2170](https://github.com/code-yeongyu/senpi/issues/2170))
|
|
53
|
+
- On Bun 1.3.x, extensions now load when they declare a package directory as their entry (`"pi": { "extensions": ["."] }`) or depend on a package that requires a JSON file, such as ajv. Both used to fail with `Cannot find module 'file:/…'` or `ENOENT reading "file:/…"` even though Bun itself loads them. ([#2164](https://github.com/code-yeongyu/senpi/issues/2164))
|
|
54
|
+
- Automatic session titles work on models that cannot turn reasoning off, such as `openrouter/meta/muse-spark-1.3-contributor` and Z.ai GLM 5.3. The title request now asks for the model's lowest supported reasoning level and no longer fails with `Reasoning is mandatory for this endpoint and cannot be disabled. (HTTP 400)`. A title that still fails is recorded in `logs/session.log` instead of showing a runtime error. ([#2163](https://github.com/code-yeongyu/senpi/issues/2163))
|
|
55
|
+
|
|
56
|
+
### Removed
|
|
57
|
+
|
|
15
58
|
## [2026.9.26] - 2026-09-26
|
|
16
59
|
|
|
17
60
|
### Breaking Changes
|
package/dist/bun-runtime.d.ts
CHANGED
|
@@ -9,9 +9,13 @@ export interface BunRuntimeOptions {
|
|
|
9
9
|
readonly platform: NodeJS.Platform;
|
|
10
10
|
readonly exists: (path: string) => boolean;
|
|
11
11
|
readonly realpath: (path: string) => string;
|
|
12
|
+
/** `<bun> --version` output, or `undefined` when the binary cannot be run. */
|
|
13
|
+
readonly bunVersion: (bunPath: string) => string | undefined;
|
|
12
14
|
}
|
|
15
|
+
/** Oldest Bun release a non-Bun install is handed to; older releases miss runtime APIs senpi uses. */
|
|
16
|
+
export declare const MIN_BUN_VERSION = "1.4.0";
|
|
13
17
|
/** Why the process stayed on its current runtime. Surfaced for tests and diagnostics. */
|
|
14
|
-
export type StayReason = "already-bun" | "runtime-pinned-node" | "inspector" | "bun-not-found" | "not-bun-install";
|
|
18
|
+
export type StayReason = "already-bun" | "runtime-pinned-node" | "inspector" | "bun-not-found" | "bun-too-old" | "not-bun-install";
|
|
15
19
|
export type BunReexecDecision = {
|
|
16
20
|
readonly action: "stay";
|
|
17
21
|
readonly reason: StayReason;
|
|
@@ -36,6 +40,14 @@ export interface BunReexecInput {
|
|
|
36
40
|
* is compared both as configured and as resolved, so a symlinked install root still matches.
|
|
37
41
|
*/
|
|
38
42
|
export declare function isUnderBunGlobalTree(scriptRealPath: string, options: BunRuntimeOptions): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Report whether the executed script belongs to an installed package (npm, pnpm, yarn, npx, or a
|
|
45
|
+
* project-local install), as opposed to a source checkout. Only installed packages are handed to a
|
|
46
|
+
* discovered Bun: a checkout run on Node is a developer's deliberate choice.
|
|
47
|
+
*/
|
|
48
|
+
export declare function isInstalledPackageScript(scriptRealPath: string): boolean;
|
|
49
|
+
/** True when `version` (e.g. `1.4.2`, `1.5.0-canary.3`) is at least {@link MIN_BUN_VERSION}. */
|
|
50
|
+
export declare function bunVersionSatisfies(version: string | undefined): boolean;
|
|
39
51
|
/**
|
|
40
52
|
* Locate a Bun binary: the configured install root first, then the default `~/.bun` root, then
|
|
41
53
|
* a PATH scan. Returns `undefined` when Bun is not installed — a missing Bun is never an error,
|
|
@@ -50,9 +62,13 @@ export declare function findBunBinary(options: BunRuntimeOptions): string | unde
|
|
|
50
62
|
* 3. an inherited Inspector option — a debugger session owns a Node socket, keep it;
|
|
51
63
|
* 4. `SENPI_RUNTIME=bun` with Bun installed — explicit opt-in;
|
|
52
64
|
* 5. the script lives in Bun's global install tree with Bun installed — the install implies it;
|
|
53
|
-
* 6.
|
|
65
|
+
* 6. any other installed package with Bun >= {@link MIN_BUN_VERSION} — a machine that has a
|
|
66
|
+
* current Bun runs senpi on it, whichever package manager installed it;
|
|
67
|
+
* 7. otherwise stay (source checkouts, no Bun, or an older Bun).
|
|
54
68
|
*/
|
|
55
69
|
export declare function resolveBunReexec(input: BunReexecInput): BunReexecDecision;
|
|
70
|
+
/** Run `<bun> --version`; any failure (missing, not executable, timeout) means "unknown". */
|
|
71
|
+
export declare function readBunVersion(bunPath: string): string | undefined;
|
|
56
72
|
/** Build the default, process-backed options for the real CLI entry point. */
|
|
57
73
|
export declare function processBunRuntimeOptions(exists: (path: string) => boolean, realpath: (path: string) => string): BunRuntimeOptions;
|
|
58
74
|
//# sourceMappingURL=bun-runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-runtime.d.ts","sourceRoot":"","sources":["../src/bun-runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bun-runtime.d.ts","sourceRoot":"","sources":["../src/bun-runtime.ts"],"names":[],"mappings":"AAiBA,8DAA8D;AAC9D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzC,kFAAkF;AAClF,eAAO,MAAM,eAAe,kBAAkB,CAAC;AAE/C,sFAAsF;AACtF,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC7D;AAED,sGAAsG;AACtG,eAAO,MAAM,eAAe,UAAU,CAAC;AAEvC,yFAAyF;AACzF,MAAM,MAAM,UAAU,GACnB,aAAa,GACb,qBAAqB,GACrB,WAAW,GACX,eAAe,GACf,aAAa,GACb,iBAAiB,CAAC;AAErB,MAAM,MAAM,iBAAiB,GAC1B;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC9B,iFAAiF;IACjF,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAChE,4DAA4D;IAC5D,QAAQ,CAAC,2BAA2B,EAAE,OAAO,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;CACpC;AA0CD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAShG;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAExE;AAED,gGAAgG;AAChG,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CASxE;AAoBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CA4B5E;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,iBAAiB,CAwBzE;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUlE;AAED,8EAA8E;AAC9E,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,EACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAChC,iBAAiB,CASnB"}
|
package/dist/bun-runtime.js
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Runtime selection for
|
|
2
|
+
* Runtime selection for an installed CLI.
|
|
3
3
|
*
|
|
4
4
|
* `bun install -g` writes `~/.bun/bin/senpi` as a symlink into
|
|
5
5
|
* `<BUN_ROOT>/install/global/node_modules/...`, but the launcher still starts the script with
|
|
6
|
-
* whatever interpreter resolves the shebang — Node.
|
|
7
|
-
* Node,
|
|
8
|
-
* facts only, whether the process should
|
|
6
|
+
* whatever interpreter resolves the shebang — Node. npm, pnpm, yarn, and npx installs start on
|
|
7
|
+
* Node too, even on a machine that has Bun. Either way the user silently loses Bun's startup time
|
|
8
|
+
* and its runtime APIs. This module decides, from injected facts only, whether the process should
|
|
9
|
+
* hand itself to Bun.
|
|
9
10
|
*
|
|
10
11
|
* Everything here is pure and injectable so the decision can be tested without touching the
|
|
11
12
|
* host PATH or the real `~/.bun` tree; `cli.ts` owns the single impure call site.
|
|
12
13
|
*/
|
|
14
|
+
import { spawnSync } from "node:child_process";
|
|
13
15
|
import { homedir as osHomedir } from "node:os";
|
|
14
16
|
import { posix, win32 } from "node:path";
|
|
15
17
|
/** Environment variable that pins the runtime explicitly, bypassing detection. */
|
|
16
18
|
export const RUNTIME_ENV_VAR = "SENPI_RUNTIME";
|
|
19
|
+
/** Oldest Bun release a non-Bun install is handed to; older releases miss runtime APIs senpi uses. */
|
|
20
|
+
export const MIN_BUN_VERSION = "1.4.0";
|
|
17
21
|
/** Path separators differ per platform; compare on a single normalized form. */
|
|
18
22
|
function normalize(path) {
|
|
19
23
|
return path.replaceAll("\\", "/");
|
|
@@ -68,6 +72,27 @@ export function isUnderBunGlobalTree(scriptRealPath, options) {
|
|
|
68
72
|
}
|
|
69
73
|
return false;
|
|
70
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Report whether the executed script belongs to an installed package (npm, pnpm, yarn, npx, or a
|
|
77
|
+
* project-local install), as opposed to a source checkout. Only installed packages are handed to a
|
|
78
|
+
* discovered Bun: a checkout run on Node is a developer's deliberate choice.
|
|
79
|
+
*/
|
|
80
|
+
export function isInstalledPackageScript(scriptRealPath) {
|
|
81
|
+
return normalize(scriptRealPath).includes("/node_modules/");
|
|
82
|
+
}
|
|
83
|
+
/** True when `version` (e.g. `1.4.2`, `1.5.0-canary.3`) is at least {@link MIN_BUN_VERSION}. */
|
|
84
|
+
export function bunVersionSatisfies(version) {
|
|
85
|
+
const actual = /^v?(\d+)\.(\d+)\.(\d+)/.exec(version?.trim() ?? "");
|
|
86
|
+
const minimum = /^(\d+)\.(\d+)\.(\d+)/.exec(MIN_BUN_VERSION);
|
|
87
|
+
if (!actual || !minimum)
|
|
88
|
+
return false;
|
|
89
|
+
for (let index = 1; index <= 3; index++) {
|
|
90
|
+
const difference = Number(actual[index]) - Number(minimum[index]);
|
|
91
|
+
if (difference !== 0)
|
|
92
|
+
return difference > 0;
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
71
96
|
/** Executable name for the platform, e.g. `bun` or `bun.exe`. */
|
|
72
97
|
function bunExecutableName(options) {
|
|
73
98
|
return options.platform === "win32" ? "bun.exe" : "bun";
|
|
@@ -133,7 +158,9 @@ function readRuntimePin(options) {
|
|
|
133
158
|
* 3. an inherited Inspector option — a debugger session owns a Node socket, keep it;
|
|
134
159
|
* 4. `SENPI_RUNTIME=bun` with Bun installed — explicit opt-in;
|
|
135
160
|
* 5. the script lives in Bun's global install tree with Bun installed — the install implies it;
|
|
136
|
-
* 6.
|
|
161
|
+
* 6. any other installed package with Bun >= {@link MIN_BUN_VERSION} — a machine that has a
|
|
162
|
+
* current Bun runs senpi on it, whichever package manager installed it;
|
|
163
|
+
* 7. otherwise stay (source checkouts, no Bun, or an older Bun).
|
|
137
164
|
*/
|
|
138
165
|
export function resolveBunReexec(input) {
|
|
139
166
|
if (input.versions.bun !== undefined) {
|
|
@@ -146,18 +173,43 @@ export function resolveBunReexec(input) {
|
|
|
146
173
|
if (input.hasInheritedInspectorOption) {
|
|
147
174
|
return { action: "stay", reason: "inspector" };
|
|
148
175
|
}
|
|
149
|
-
const
|
|
150
|
-
if (!
|
|
176
|
+
const trustsInstalledBun = pinned === "bun" || isUnderBunGlobalTree(input.scriptRealPath, input.options);
|
|
177
|
+
if (!trustsInstalledBun && !isInstalledPackageScript(input.scriptRealPath)) {
|
|
151
178
|
return { action: "stay", reason: "not-bun-install" };
|
|
152
179
|
}
|
|
153
180
|
const bunPath = findBunBinary(input.options);
|
|
154
181
|
if (bunPath === undefined) {
|
|
155
182
|
return { action: "stay", reason: "bun-not-found" };
|
|
156
183
|
}
|
|
184
|
+
// A pin or a bun-global install already proved its Bun; any other install probes it once.
|
|
185
|
+
if (!trustsInstalledBun && !bunVersionSatisfies(input.options.bunVersion(bunPath))) {
|
|
186
|
+
return { action: "stay", reason: "bun-too-old" };
|
|
187
|
+
}
|
|
157
188
|
return { action: "reexec", bunPath };
|
|
158
189
|
}
|
|
190
|
+
/** Run `<bun> --version`; any failure (missing, not executable, timeout) means "unknown". */
|
|
191
|
+
export function readBunVersion(bunPath) {
|
|
192
|
+
try {
|
|
193
|
+
const result = spawnSync(bunPath, ["--version"], { encoding: "utf8", timeout: 5_000, windowsHide: true });
|
|
194
|
+
if (result.status !== 0)
|
|
195
|
+
return undefined;
|
|
196
|
+
const version = result.stdout.trim();
|
|
197
|
+
return version === "" ? undefined : version;
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// Node throws synchronously for a batch file spawned without a shell (spawn EINVAL).
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
159
204
|
/** Build the default, process-backed options for the real CLI entry point. */
|
|
160
205
|
export function processBunRuntimeOptions(exists, realpath) {
|
|
161
|
-
return {
|
|
206
|
+
return {
|
|
207
|
+
env: process.env,
|
|
208
|
+
homedir: osHomedir(),
|
|
209
|
+
platform: process.platform,
|
|
210
|
+
exists,
|
|
211
|
+
realpath,
|
|
212
|
+
bunVersion: readBunVersion,
|
|
213
|
+
};
|
|
162
214
|
}
|
|
163
215
|
//# sourceMappingURL=bun-runtime.js.map
|
package/dist/bun-runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-runtime.js","sourceRoot":"","sources":["../src/bun-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Runtime selection for a CLI that was installed with `bun install -g`.\n *\n * `bun install -g` writes `~/.bun/bin/senpi` as a symlink into\n * `<BUN_ROOT>/install/global/node_modules/...`, but the launcher still starts the script with\n * whatever interpreter resolves the shebang — Node. A user who chose Bun then silently runs on\n * Node, losing Bun's startup time and its runtime APIs. This module decides, from injected\n * facts only, whether the process should hand itself to Bun.\n *\n * Everything here is pure and injectable so the decision can be tested without touching the\n * host PATH or the real `~/.bun` tree; `cli.ts` owns the single impure call site.\n */\nimport { homedir as osHomedir } from \"node:os\";\nimport { posix, win32 } from \"node:path\";\n\n/** Value accepted by the runtime pin environment variable. */\nexport type RuntimeName = \"node\" | \"bun\";\n\n/** Environment variable that pins the runtime explicitly, bypassing detection. */\nexport const RUNTIME_ENV_VAR = \"SENPI_RUNTIME\";\n\n/** Injected view of the world. Defaults read the real process, tests inject fakes. */\nexport interface BunRuntimeOptions {\n\treadonly env: NodeJS.ProcessEnv;\n\treadonly homedir: string;\n\treadonly platform: NodeJS.Platform;\n\treadonly exists: (path: string) => boolean;\n\treadonly realpath: (path: string) => string;\n}\n\n/** Why the process stayed on its current runtime. Surfaced for tests and diagnostics. */\nexport type StayReason = \"already-bun\" | \"runtime-pinned-node\" | \"inspector\" | \"bun-not-found\" | \"not-bun-install\";\n\nexport type BunReexecDecision =\n\t| { readonly action: \"stay\"; readonly reason: StayReason }\n\t| { readonly action: \"reexec\"; readonly bunPath: string };\n\nexport interface BunReexecInput {\n\t/** Real path (symlinks resolved) of the script this process was started with. */\n\treadonly scriptRealPath: string;\n\t/** `process.versions`; a `bun` entry means this process already IS Bun. */\n\treadonly versions: Readonly<Record<string, string | undefined>>;\n\t/** Whether this process inherited a `--inspect*` option. */\n\treadonly hasInheritedInspectorOption: boolean;\n\treadonly options: BunRuntimeOptions;\n}\n\n/** Path separators differ per platform; compare on a single normalized form. */\nfunction normalize(path: string): string {\n\treturn path.replaceAll(\"\\\\\", \"/\");\n}\n\n/**\n * Path semantics of the TARGET platform, not of the host running the code. Joining and PATH\n * splitting must follow the injected platform so the decision is reproducible from a Windows\n * fixture on a POSIX machine and vice versa.\n */\nfunction paths(options: BunRuntimeOptions): typeof posix {\n\treturn options.platform === \"win32\" ? win32 : posix;\n}\n\n/**\n * Root of the Bun installation: `BUN_INSTALL` when set, otherwise `~/.bun`. This is the same\n * resolution order Bun itself uses to place `bin/` and `install/global/`.\n */\nfunction bunRoot(options: BunRuntimeOptions): string {\n\tconst configured = options.env.BUN_INSTALL;\n\tif (configured !== undefined && configured.trim() !== \"\") {\n\t\treturn configured;\n\t}\n\treturn paths(options).join(options.homedir, \".bun\");\n}\n\n/**\n * Resolve a directory through the injected `realpath`, falling back to the input. The bun root\n * can be a symlinked or aliased path (`/tmp` -> `/private/tmp` on macOS, a symlinked `$HOME`),\n * and the script path is compared in its resolved form, so both sides must be resolvable.\n * `realpath` throws on a path that does not exist, which simply means \"no match here\".\n */\nfunction resolveOrSelf(path: string, options: BunRuntimeOptions): string {\n\ttry {\n\t\treturn options.realpath(path);\n\t} catch {\n\t\treturn path;\n\t}\n}\n\n/**\n * Report whether the executed script lives inside Bun's global install tree.\n *\n * The caller must pass an already-resolved real path: `~/.bun/bin/<name>` is a symlink, and the\n * link itself is not under `install/global/`, so an unresolved path never matches. The tree root\n * is compared both as configured and as resolved, so a symlinked install root still matches.\n */\nexport function isUnderBunGlobalTree(scriptRealPath: string, options: BunRuntimeOptions): boolean {\n\tconst globalRoot = paths(options).join(bunRoot(options), \"install\", \"global\");\n\tconst script = normalize(scriptRealPath);\n\tfor (const candidate of new Set([globalRoot, resolveOrSelf(globalRoot, options)])) {\n\t\tif (script.startsWith(`${normalize(candidate)}/`)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/** Executable name for the platform, e.g. `bun` or `bun.exe`. */\nfunction bunExecutableName(options: BunRuntimeOptions): string {\n\treturn options.platform === \"win32\" ? \"bun.exe\" : \"bun\";\n}\n\n/** Candidate file names to probe in a PATH directory, honoring `PATHEXT` on Windows. */\nfunction pathCandidateNames(options: BunRuntimeOptions): string[] {\n\tif (options.platform !== \"win32\") {\n\t\treturn [\"bun\"];\n\t}\n\tconst pathExt = options.env.PATHEXT ?? \".COM;.EXE;.BAT;.CMD\";\n\tconst extensions = pathExt\n\t\t.split(\";\")\n\t\t.map((extension) => extension.trim())\n\t\t.filter((extension) => extension.length > 0);\n\treturn extensions.length > 0 ? extensions.map((extension) => `bun${extension}`) : [\"bun.exe\"];\n}\n\n/**\n * Locate a Bun binary: the configured install root first, then the default `~/.bun` root, then\n * a PATH scan. Returns `undefined` when Bun is not installed — a missing Bun is never an error,\n * the process simply stays on Node.\n */\nexport function findBunBinary(options: BunRuntimeOptions): string | undefined {\n\tconst path = paths(options);\n\tconst executable = bunExecutableName(options);\n\tconst rootCandidates = [\n\t\tpath.join(bunRoot(options), \"bin\", executable),\n\t\tpath.join(options.homedir, \".bun\", \"bin\", executable),\n\t];\n\tfor (const candidate of rootCandidates) {\n\t\tif (options.exists(candidate)) {\n\t\t\treturn candidate;\n\t\t}\n\t}\n\n\tconst pathValue = options.env.PATH ?? options.env.Path;\n\tif (pathValue === undefined || pathValue === \"\") {\n\t\treturn undefined;\n\t}\n\tconst names = pathCandidateNames(options);\n\tfor (const directory of pathValue.split(path.delimiter)) {\n\t\tif (directory === \"\") continue;\n\t\tfor (const name of names) {\n\t\t\tconst candidate = path.join(directory, name);\n\t\t\tif (options.exists(candidate)) {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction readRuntimePin(options: BunRuntimeOptions): RuntimeName | undefined {\n\tconst value = options.env[RUNTIME_ENV_VAR];\n\tif (value === \"node\" || value === \"bun\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\n/**\n * Decide whether this process should re-exec itself under Bun. First match wins:\n *\n * 1. already running Bun — never re-exec, that would loop forever;\n * 2. `SENPI_RUNTIME=node` — an explicit opt-out always wins;\n * 3. an inherited Inspector option — a debugger session owns a Node socket, keep it;\n * 4. `SENPI_RUNTIME=bun` with Bun installed — explicit opt-in;\n * 5. the script lives in Bun's global install tree with Bun installed — the install implies it;\n * 6. otherwise stay.\n */\nexport function resolveBunReexec(input: BunReexecInput): BunReexecDecision {\n\tif (input.versions.bun !== undefined) {\n\t\treturn { action: \"stay\", reason: \"already-bun\" };\n\t}\n\tconst pinned = readRuntimePin(input.options);\n\tif (pinned === \"node\") {\n\t\treturn { action: \"stay\", reason: \"runtime-pinned-node\" };\n\t}\n\tif (input.hasInheritedInspectorOption) {\n\t\treturn { action: \"stay\", reason: \"inspector\" };\n\t}\n\tconst wantsBun = pinned === \"bun\" || isUnderBunGlobalTree(input.scriptRealPath, input.options);\n\tif (!wantsBun) {\n\t\treturn { action: \"stay\", reason: \"not-bun-install\" };\n\t}\n\tconst bunPath = findBunBinary(input.options);\n\tif (bunPath === undefined) {\n\t\treturn { action: \"stay\", reason: \"bun-not-found\" };\n\t}\n\treturn { action: \"reexec\", bunPath };\n}\n\n/** Build the default, process-backed options for the real CLI entry point. */\nexport function processBunRuntimeOptions(\n\texists: (path: string) => boolean,\n\trealpath: (path: string) => string,\n): BunRuntimeOptions {\n\treturn { env: process.env, homedir: osHomedir(), platform: process.platform, exists, realpath };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bun-runtime.js","sourceRoot":"","sources":["../src/bun-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAKzC,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC;AAa/C,sGAAsG;AACtG,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AAyBvC,gFAAgF;AAChF,SAAS,SAAS,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,SAAS,KAAK,CAAC,OAA0B;IACxC,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,OAA0B;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC3C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,IAAY,EAAE,OAA0B;IAC9D,IAAI,CAAC;QACJ,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,cAAsB,EAAE,OAA0B;IACtF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;IACzC,KAAK,MAAM,SAAS,IAAI,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,cAAsB;IAC9D,OAAO,SAAS,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAC7D,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,mBAAmB,CAAC,OAA2B;IAC9D,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC7D,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,IAAI,UAAU,KAAK,CAAC;YAAE,OAAO,UAAU,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,iEAAiE;AACjE,SAAS,iBAAiB,CAAC,OAA0B;IACpD,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AACzD,CAAC;AAED,wFAAwF;AACxF,SAAS,kBAAkB,CAAC,OAA0B;IACrD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,qBAAqB,CAAC;IAC7D,MAAM,UAAU,GAAG,OAAO;SACxB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;SACpC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9C,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC/F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAA0B;IACvD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;KACrD,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACxC,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACvD,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACjD,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC1C,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACzD,IAAI,SAAS,KAAK,EAAE;YAAE,SAAS;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/B,OAAO,SAAS,CAAC;YAClB,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,OAA0B;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC3C,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAqB;IACrD,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAClD,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAC1D,CAAC;IACD,IAAI,KAAK,CAAC,2BAA2B,EAAE,CAAC;QACvC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,kBAAkB,GAAG,MAAM,KAAK,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACzG,IAAI,CAAC,kBAAkB,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;QAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACtD,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACpD,CAAC;IACD,0FAA0F;IAC1F,IAAI,CAAC,kBAAkB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACpF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAClD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,cAAc,CAAC,OAAe;IAC7C,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1G,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACR,qFAAqF;QACrF,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,wBAAwB,CACvC,MAAiC,EACjC,QAAkC;IAElC,OAAO;QACN,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO,EAAE,SAAS,EAAE;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM;QACN,QAAQ;QACR,UAAU,EAAE,cAAc;KAC1B,CAAC;AACH,CAAC","sourcesContent":["/**\n * Runtime selection for an installed CLI.\n *\n * `bun install -g` writes `~/.bun/bin/senpi` as a symlink into\n * `<BUN_ROOT>/install/global/node_modules/...`, but the launcher still starts the script with\n * whatever interpreter resolves the shebang — Node. npm, pnpm, yarn, and npx installs start on\n * Node too, even on a machine that has Bun. Either way the user silently loses Bun's startup time\n * and its runtime APIs. This module decides, from injected facts only, whether the process should\n * hand itself to Bun.\n *\n * Everything here is pure and injectable so the decision can be tested without touching the\n * host PATH or the real `~/.bun` tree; `cli.ts` owns the single impure call site.\n */\nimport { spawnSync } from \"node:child_process\";\nimport { homedir as osHomedir } from \"node:os\";\nimport { posix, win32 } from \"node:path\";\n\n/** Value accepted by the runtime pin environment variable. */\nexport type RuntimeName = \"node\" | \"bun\";\n\n/** Environment variable that pins the runtime explicitly, bypassing detection. */\nexport const RUNTIME_ENV_VAR = \"SENPI_RUNTIME\";\n\n/** Injected view of the world. Defaults read the real process, tests inject fakes. */\nexport interface BunRuntimeOptions {\n\treadonly env: NodeJS.ProcessEnv;\n\treadonly homedir: string;\n\treadonly platform: NodeJS.Platform;\n\treadonly exists: (path: string) => boolean;\n\treadonly realpath: (path: string) => string;\n\t/** `<bun> --version` output, or `undefined` when the binary cannot be run. */\n\treadonly bunVersion: (bunPath: string) => string | undefined;\n}\n\n/** Oldest Bun release a non-Bun install is handed to; older releases miss runtime APIs senpi uses. */\nexport const MIN_BUN_VERSION = \"1.4.0\";\n\n/** Why the process stayed on its current runtime. Surfaced for tests and diagnostics. */\nexport type StayReason =\n\t| \"already-bun\"\n\t| \"runtime-pinned-node\"\n\t| \"inspector\"\n\t| \"bun-not-found\"\n\t| \"bun-too-old\"\n\t| \"not-bun-install\";\n\nexport type BunReexecDecision =\n\t| { readonly action: \"stay\"; readonly reason: StayReason }\n\t| { readonly action: \"reexec\"; readonly bunPath: string };\n\nexport interface BunReexecInput {\n\t/** Real path (symlinks resolved) of the script this process was started with. */\n\treadonly scriptRealPath: string;\n\t/** `process.versions`; a `bun` entry means this process already IS Bun. */\n\treadonly versions: Readonly<Record<string, string | undefined>>;\n\t/** Whether this process inherited a `--inspect*` option. */\n\treadonly hasInheritedInspectorOption: boolean;\n\treadonly options: BunRuntimeOptions;\n}\n\n/** Path separators differ per platform; compare on a single normalized form. */\nfunction normalize(path: string): string {\n\treturn path.replaceAll(\"\\\\\", \"/\");\n}\n\n/**\n * Path semantics of the TARGET platform, not of the host running the code. Joining and PATH\n * splitting must follow the injected platform so the decision is reproducible from a Windows\n * fixture on a POSIX machine and vice versa.\n */\nfunction paths(options: BunRuntimeOptions): typeof posix {\n\treturn options.platform === \"win32\" ? win32 : posix;\n}\n\n/**\n * Root of the Bun installation: `BUN_INSTALL` when set, otherwise `~/.bun`. This is the same\n * resolution order Bun itself uses to place `bin/` and `install/global/`.\n */\nfunction bunRoot(options: BunRuntimeOptions): string {\n\tconst configured = options.env.BUN_INSTALL;\n\tif (configured !== undefined && configured.trim() !== \"\") {\n\t\treturn configured;\n\t}\n\treturn paths(options).join(options.homedir, \".bun\");\n}\n\n/**\n * Resolve a directory through the injected `realpath`, falling back to the input. The bun root\n * can be a symlinked or aliased path (`/tmp` -> `/private/tmp` on macOS, a symlinked `$HOME`),\n * and the script path is compared in its resolved form, so both sides must be resolvable.\n * `realpath` throws on a path that does not exist, which simply means \"no match here\".\n */\nfunction resolveOrSelf(path: string, options: BunRuntimeOptions): string {\n\ttry {\n\t\treturn options.realpath(path);\n\t} catch {\n\t\treturn path;\n\t}\n}\n\n/**\n * Report whether the executed script lives inside Bun's global install tree.\n *\n * The caller must pass an already-resolved real path: `~/.bun/bin/<name>` is a symlink, and the\n * link itself is not under `install/global/`, so an unresolved path never matches. The tree root\n * is compared both as configured and as resolved, so a symlinked install root still matches.\n */\nexport function isUnderBunGlobalTree(scriptRealPath: string, options: BunRuntimeOptions): boolean {\n\tconst globalRoot = paths(options).join(bunRoot(options), \"install\", \"global\");\n\tconst script = normalize(scriptRealPath);\n\tfor (const candidate of new Set([globalRoot, resolveOrSelf(globalRoot, options)])) {\n\t\tif (script.startsWith(`${normalize(candidate)}/`)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Report whether the executed script belongs to an installed package (npm, pnpm, yarn, npx, or a\n * project-local install), as opposed to a source checkout. Only installed packages are handed to a\n * discovered Bun: a checkout run on Node is a developer's deliberate choice.\n */\nexport function isInstalledPackageScript(scriptRealPath: string): boolean {\n\treturn normalize(scriptRealPath).includes(\"/node_modules/\");\n}\n\n/** True when `version` (e.g. `1.4.2`, `1.5.0-canary.3`) is at least {@link MIN_BUN_VERSION}. */\nexport function bunVersionSatisfies(version: string | undefined): boolean {\n\tconst actual = /^v?(\\d+)\\.(\\d+)\\.(\\d+)/.exec(version?.trim() ?? \"\");\n\tconst minimum = /^(\\d+)\\.(\\d+)\\.(\\d+)/.exec(MIN_BUN_VERSION);\n\tif (!actual || !minimum) return false;\n\tfor (let index = 1; index <= 3; index++) {\n\t\tconst difference = Number(actual[index]) - Number(minimum[index]);\n\t\tif (difference !== 0) return difference > 0;\n\t}\n\treturn true;\n}\n\n/** Executable name for the platform, e.g. `bun` or `bun.exe`. */\nfunction bunExecutableName(options: BunRuntimeOptions): string {\n\treturn options.platform === \"win32\" ? \"bun.exe\" : \"bun\";\n}\n\n/** Candidate file names to probe in a PATH directory, honoring `PATHEXT` on Windows. */\nfunction pathCandidateNames(options: BunRuntimeOptions): string[] {\n\tif (options.platform !== \"win32\") {\n\t\treturn [\"bun\"];\n\t}\n\tconst pathExt = options.env.PATHEXT ?? \".COM;.EXE;.BAT;.CMD\";\n\tconst extensions = pathExt\n\t\t.split(\";\")\n\t\t.map((extension) => extension.trim())\n\t\t.filter((extension) => extension.length > 0);\n\treturn extensions.length > 0 ? extensions.map((extension) => `bun${extension}`) : [\"bun.exe\"];\n}\n\n/**\n * Locate a Bun binary: the configured install root first, then the default `~/.bun` root, then\n * a PATH scan. Returns `undefined` when Bun is not installed — a missing Bun is never an error,\n * the process simply stays on Node.\n */\nexport function findBunBinary(options: BunRuntimeOptions): string | undefined {\n\tconst path = paths(options);\n\tconst executable = bunExecutableName(options);\n\tconst rootCandidates = [\n\t\tpath.join(bunRoot(options), \"bin\", executable),\n\t\tpath.join(options.homedir, \".bun\", \"bin\", executable),\n\t];\n\tfor (const candidate of rootCandidates) {\n\t\tif (options.exists(candidate)) {\n\t\t\treturn candidate;\n\t\t}\n\t}\n\n\tconst pathValue = options.env.PATH ?? options.env.Path;\n\tif (pathValue === undefined || pathValue === \"\") {\n\t\treturn undefined;\n\t}\n\tconst names = pathCandidateNames(options);\n\tfor (const directory of pathValue.split(path.delimiter)) {\n\t\tif (directory === \"\") continue;\n\t\tfor (const name of names) {\n\t\t\tconst candidate = path.join(directory, name);\n\t\t\tif (options.exists(candidate)) {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction readRuntimePin(options: BunRuntimeOptions): RuntimeName | undefined {\n\tconst value = options.env[RUNTIME_ENV_VAR];\n\tif (value === \"node\" || value === \"bun\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\n/**\n * Decide whether this process should re-exec itself under Bun. First match wins:\n *\n * 1. already running Bun — never re-exec, that would loop forever;\n * 2. `SENPI_RUNTIME=node` — an explicit opt-out always wins;\n * 3. an inherited Inspector option — a debugger session owns a Node socket, keep it;\n * 4. `SENPI_RUNTIME=bun` with Bun installed — explicit opt-in;\n * 5. the script lives in Bun's global install tree with Bun installed — the install implies it;\n * 6. any other installed package with Bun >= {@link MIN_BUN_VERSION} — a machine that has a\n * current Bun runs senpi on it, whichever package manager installed it;\n * 7. otherwise stay (source checkouts, no Bun, or an older Bun).\n */\nexport function resolveBunReexec(input: BunReexecInput): BunReexecDecision {\n\tif (input.versions.bun !== undefined) {\n\t\treturn { action: \"stay\", reason: \"already-bun\" };\n\t}\n\tconst pinned = readRuntimePin(input.options);\n\tif (pinned === \"node\") {\n\t\treturn { action: \"stay\", reason: \"runtime-pinned-node\" };\n\t}\n\tif (input.hasInheritedInspectorOption) {\n\t\treturn { action: \"stay\", reason: \"inspector\" };\n\t}\n\tconst trustsInstalledBun = pinned === \"bun\" || isUnderBunGlobalTree(input.scriptRealPath, input.options);\n\tif (!trustsInstalledBun && !isInstalledPackageScript(input.scriptRealPath)) {\n\t\treturn { action: \"stay\", reason: \"not-bun-install\" };\n\t}\n\tconst bunPath = findBunBinary(input.options);\n\tif (bunPath === undefined) {\n\t\treturn { action: \"stay\", reason: \"bun-not-found\" };\n\t}\n\t// A pin or a bun-global install already proved its Bun; any other install probes it once.\n\tif (!trustsInstalledBun && !bunVersionSatisfies(input.options.bunVersion(bunPath))) {\n\t\treturn { action: \"stay\", reason: \"bun-too-old\" };\n\t}\n\treturn { action: \"reexec\", bunPath };\n}\n\n/** Run `<bun> --version`; any failure (missing, not executable, timeout) means \"unknown\". */\nexport function readBunVersion(bunPath: string): string | undefined {\n\ttry {\n\t\tconst result = spawnSync(bunPath, [\"--version\"], { encoding: \"utf8\", timeout: 5_000, windowsHide: true });\n\t\tif (result.status !== 0) return undefined;\n\t\tconst version = result.stdout.trim();\n\t\treturn version === \"\" ? undefined : version;\n\t} catch {\n\t\t// Node throws synchronously for a batch file spawned without a shell (spawn EINVAL).\n\t\treturn undefined;\n\t}\n}\n\n/** Build the default, process-backed options for the real CLI entry point. */\nexport function processBunRuntimeOptions(\n\texists: (path: string) => boolean,\n\trealpath: (path: string) => string,\n): BunRuntimeOptions {\n\treturn {\n\t\tenv: process.env,\n\t\thomedir: osHomedir(),\n\t\tplatform: process.platform,\n\t\texists,\n\t\trealpath,\n\t\tbunVersion: readBunVersion,\n\t};\n}\n"]}
|
package/dist/bundle/chunks/{app-server-command-ZRCKWY2X.js → app-server-command-ATWHNOOO.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
|
|
2
|
-
import{import_websocket_server,wrapper_default}from"./chunk-YBZDAABT.js";import{AuthStorage,DefaultResourceLoader,GOAL_STORE_CHANGED_EVENT,ModelRegistry,clearGoal,createAgentSession,createGoal,createPendingQuestion,defaultModelPerProvider,formatProviderNativeBody,formatProviderNativeSummary,getMcpService,goalStoreRef,loadMcpConfig,loadSkills,readGoal,resolveAuthMode,updateGoal}from"./chunk-
|
|
2
|
+
import{import_websocket_server,wrapper_default}from"./chunk-YBZDAABT.js";import{AuthStorage,DefaultResourceLoader,GOAL_STORE_CHANGED_EVENT,ModelRegistry,clearGoal,createAgentSession,createGoal,createPendingQuestion,defaultModelPerProvider,formatProviderNativeBody,formatProviderNativeSummary,getMcpService,goalStoreRef,loadMcpConfig,loadSkills,readGoal,resolveAuthMode,updateGoal}from"./chunk-6SLQ5HFO.js";import{require_ignore}from"./chunk-ZKZAATFM.js";import"./chunk-UYCGOK6M.js";import"./chunk-6WBYI25N.js";import{SessionManager,loadEntriesFromFile}from"./chunk-67BC7VZV.js";import"./chunk-YS5YEX4S.js";import{getCredentialAccounts,getModels,getProviders,getSupportedThinkingLevels,pinCredentialAccount,removeCredentialAccount,subscribeProviderAccountEvents}from"./chunk-2L26KPZ6.js";import{getAvailableThemesWithPaths,getThemeByName,takeOverStdout,theme,waitForRawStdoutBackpressure,writeRawStdout}from"./chunk-77ACEMYL.js";import{x}from"./chunk-EJKCBRYK.js";import"./chunk-6Q6DGME2.js";import{SettingsManager}from"./chunk-WM5FVFAP.js";import"./chunk-YU2P3CAR.js";import"./chunk-BMX2U22F.js";import"./chunk-6W2DB2GC.js";import{acquireOwnershipSafeLock}from"./chunk-LPFZGWG2.js";import"./chunk-HH3KJDWA.js";import{parseDaemonPidFile,processMatchesPidFile,readProcessStartTime,stopValidatedPid,waitForGone,waitForStartTime}from"./chunk-3CC5ZOBV.js";import{attachJsonlLineReader}from"./chunk-XKLR7C5B.js";import"./chunk-FIJJKSPL.js";import"./chunk-H4QOEVS5.js";import"./chunk-HB35RBP4.js";import"./chunk-HZAKOVHN.js";import"./chunk-TTY5BHCG.js";import"./chunk-FHXKBENX.js";import"./chunk-X3T45623.js";import"./chunk-7X72IACK.js";import"./chunk-KUPQO7MC.js";import"./chunk-HPY47AVX.js";import"./chunk-SUQDU5KM.js";import"./chunk-7FXXRPB3.js";import"./chunk-26UBFF6N.js";import"./chunk-KMJXSXRX.js";import"./chunk-L6JO4M6J.js";import"./chunk-RFB5CBW7.js";import"./chunk-2VZJTDUX.js";import"./chunk-ELFCNCBY.js";import"./chunk-PRC5XIIH.js";import"./chunk-W3D3ZYDS.js";import"./chunk-ZOFZRJSL.js";import"./chunk-2SOVDETB.js";import{APP_NAME,CONFIG_DIR_NAME,ENV_SESSION_DIR,VERSION,getAgentDir,getSessionsDir,resolvePath}from"./chunk-Y65WFI5H.js";import"./chunk-ATQFN5HI.js";import"./chunk-RBCQOIAD.js";import"./chunk-WASCMT6Y.js";import"./chunk-X4Q5YSTE.js";import"./chunk-IXAUDPOK.js";import"./chunk-TTHMOL5G.js";import"./chunk-WVGCQOLJ.js";import"./chunk-BPX6QWPD.js";import{normalizeProviderId}from"./chunk-WL5EQYNL.js";import"./chunk-WDTJ6JKE.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-DMI55M2N.js";import"./chunk-BQVVQ2LQ.js";import{__toESM}from"./chunk-IKOFCODM.js";import{isIP}from"node:net";var APP_SERVER_LISTEN_USAGE="Invalid --listen value. Use stdio://, unix://, unix:///abs/path, or ws://IP:PORT.";function formatAppServerUsage(){let listenForms="stdio://|unix://|unix:///abs/path|ws://IP:PORT";return[`Usage: ${APP_NAME} app-server [--listen <${listenForms}>] [--ws-auth <token-file|off>] [--json-logs]`,` ${APP_NAME} app-server daemon <start|stop|status|restart> [--listen <${listenForms}>]`].join(`
|
|
3
3
|
`)}function parseListen(value){if(value==="stdio://")return{kind:"stdio",url:"stdio://"};if(value==="unix://")return{kind:"unix",url:"unix://"};if(value.startsWith("unix:///")){let path=value.slice(7);return path.startsWith("/")?{kind:"unix",url:value,path}:void 0}if(!value.startsWith("ws://"))return;let parsed;try{parsed=new URL(value)}catch(error){if(error instanceof TypeError)return;throw error}let port=Number(parsed.port);if(!(parsed.protocol!=="ws:"||parsed.username!==""||parsed.password!==""||parsed.pathname!=="/"||parsed.search!==""||parsed.hash!==""||parsed.port===""||!Number.isInteger(port)||port<1||port>65535||isIP(parsed.hostname)===0))return{kind:"ws",url:value,host:parsed.hostname,port}}function parseDaemonVerb(value){switch(value){case"start":case"stop":case"status":case"restart":return value;default:return}}function parseWsAuth(value){return value==="off"?{kind:"off"}:{kind:"token-file",path:value}}function parseServerArgs(args){let listen3={kind:"stdio",url:"stdio://"},wsAuth,jsonLogs=!1;for(let index=0;index<args.length;index++){let arg=args[index];if(arg==="--listen"){let value=args[index+1];if(value===void 0)return{kind:"usage-error",message:APP_SERVER_LISTEN_USAGE};let parsed=parseListen(value);if(parsed===void 0)return{kind:"usage-error",message:APP_SERVER_LISTEN_USAGE};listen3=parsed,index++;continue}if(arg==="--ws-auth"){let value=args[index+1];if(value===void 0)return{kind:"usage-error",message:"--ws-auth requires <token-file|off>."};wsAuth=parseWsAuth(value),index++;continue}if(arg==="--json-logs"){jsonLogs=!0;continue}return{kind:"usage-error",message:`Unexpected app-server argument: ${arg}`}}return{kind:"server",listen:listen3,wsAuth,jsonLogs}}function parseDaemonArgs(args){let verb=parseDaemonVerb(args[0]);if(verb===void 0)return{kind:"usage-error",message:"Usage: app-server daemon <start|stop|status|restart>."};let listen3={kind:"ws",url:"ws://127.0.0.1:18800",host:"127.0.0.1",port:18800};for(let index=1;index<args.length;index++){let arg=args[index];if(arg==="--listen"){let value=args[index+1];if(value===void 0)return{kind:"usage-error",message:APP_SERVER_LISTEN_USAGE};let parsed=parseListen(value);if(parsed===void 0)return{kind:"usage-error",message:APP_SERVER_LISTEN_USAGE};listen3=parsed,index++;continue}return{kind:"usage-error",message:`Unexpected app-server daemon argument: ${arg}`}}return{kind:"daemon",verb,listen:listen3}}function parseAppServerCliArgs(args){return args[0]==="daemon"?parseDaemonArgs(args.slice(1)):parseServerArgs(args)}var RpcHandlerError=class extends Error{constructor(error){super(error.message),this.name="RpcHandlerError",this.rpcError=error}};function invalidRequestError(){return{code:-32600,message:"Invalid request"}}function methodNotFoundError(method){return{code:-32601,message:`Method not found: ${method}`}}function invalidParamsError(){return{code:-32602,message:"Invalid params"}}function internalError(message="Internal error"){return{code:-32603,message}}function notInitializedError(){return{code:-32600,message:"Not initialized"}}function alreadyInitializedError(){return{code:-32600,message:"Already initialized"}}function experimentalCapabilityError(method){return{code:-32600,message:`${method} requires experimentalApi capability`}}function registerExtensionRequestMethod(registry,getThread){registry.register("extension_request",{scope:"thread",handler:async({request})=>{let params=request.params;if(typeof params!="object"||params===null||Array.isArray(params))throw new RpcHandlerError({code:-32602,message:"Invalid params"});let threadId=Reflect.get(params,"threadId"),name=Reflect.get(params,"name");if(typeof threadId!="string"||threadId.length===0||typeof name!="string"||name.length===0)throw new RpcHandlerError({code:-32602,message:"Invalid params"});try{return await getThread(threadId).extensionRunner.requestRpc(name,Reflect.get(params,"data"))}catch(error){throw new RpcHandlerError(internalError(error instanceof Error?error.message:String(error)))}}})}function createRegistry(){return new InMemoryMethodRegistry}var InMemoryMethodRegistry=class{constructor(){this.methods=new Map}register(method,registration){this.methods.set(method,registration)}async dispatch(connection,request){if(!connection.initialized){let registration2=this.methods.get(request.method);if(request.method!=="initialize"||registration2?.requiresInit!==!1)return{id:request.id,error:notInitializedError()}}if(connection.initialized&&request.method==="initialize")return{id:request.id,error:alreadyInitializedError()};let registration=this.methods.get(request.method);if(!registration)return{id:request.id,error:methodNotFoundError(request.method)};if(registration.experimental===!0&&connection.capabilities?.experimentalApi!==!0)return{id:request.id,error:experimentalCapabilityError(request.method)};try{let result=await registration.handler({connection,request});return{id:request.id,result}}catch(error){return error instanceof RpcHandlerError?{id:request.id,error:error.rpcError}:{id:request.id,error:internalError(error instanceof Error?error.message:String(error))}}}};function registerFuzzyFileSearchMethods(registry,service){registry.register("fuzzyFileSearch",{scope:"global",handler:({request})=>service.search(parseOneShotParams(request.params))}),registry.register("fuzzyFileSearch/sessionStart",{experimental:!0,scope:"global",handler:({request})=>service.startSession(parseSessionStartParams(request.params))}),registry.register("fuzzyFileSearch/sessionUpdate",{experimental:!0,scope:"global",handler:({request})=>service.updateSession(parseSessionUpdateParams(request.params))}),registry.register("fuzzyFileSearch/sessionStop",{experimental:!0,scope:"global",handler:({request})=>service.stopSession(parseSessionStopParams(request.params))})}function parseOneShotParams(value){let params=objectParams(value,"fuzzyFileSearch");return{query:requiredString(params.query,"fuzzyFileSearch query"),roots:requiredStringArray(params.roots,"fuzzyFileSearch roots"),cancellationToken:optionalString(params.cancellationToken,"fuzzyFileSearch cancellationToken")}}function parseSessionStartParams(value){let params=objectParams(value,"fuzzyFileSearch/sessionStart");return{sessionId:requiredString(params.sessionId,"fuzzyFileSearch/sessionStart sessionId"),roots:requiredStringArray(params.roots,"fuzzyFileSearch/sessionStart roots")}}function parseSessionUpdateParams(value){let params=objectParams(value,"fuzzyFileSearch/sessionUpdate");return{sessionId:requiredString(params.sessionId,"fuzzyFileSearch/sessionUpdate sessionId"),query:requiredString(params.query,"fuzzyFileSearch/sessionUpdate query")}}function parseSessionStopParams(value){let params=objectParams(value,"fuzzyFileSearch/sessionStop");return{sessionId:requiredString(params.sessionId,"fuzzyFileSearch/sessionStop sessionId")}}function objectParams(value,method){if(!isRecord(value))throw invalidRequest(`${method} params must be an object`);return value}function requiredString(value,field){if(typeof value!="string")throw invalidRequest(`${field} must be a string`);return value}function requiredStringArray(value,field){if(!Array.isArray(value)||value.some(entry=>typeof entry!="string"))throw invalidRequest(`${field} must be an array of strings`);return value}function optionalString(value,field){if(value==null)return null;if(typeof value!="string")throw invalidRequest(`${field} must be a string or null`);return value}function invalidRequest(message){return new RpcHandlerError({code:-32600,message})}function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}import{lstat,readdir}from"node:fs/promises";import{basename,join as join2,relative as relative2,resolve,sep as sep2}from"node:path";var import_ignore=__toESM(require_ignore(),1);import{readFile}from"node:fs/promises";import{join,relative,sep}from"node:path";async function addGitignoreScope(matchers,directory){let gitignore=await readableText(join(directory,".gitignore"));return gitignore===void 0?matchers:[...matchers,{directory,matcher:(0,import_ignore.default)().add(gitignore)}]}function isIgnored(matchers,path,isDirectory){let ignored=!1;for(let scope of matchers){let relativePath=relative(scope.directory,path).split(sep).join("/"),result=scope.matcher.test(isDirectory?`${relativePath}/`:relativePath);result.ignored&&(ignored=!0),result.unignored&&(ignored=!1)}return ignored}async function readableText(path){try{return await readFile(path,"utf8")}catch(error){if(error instanceof Error)return;throw error}}var FUZZY_SEARCH_MAX_DEPTH=12,FUZZY_SEARCH_MAX_VISITED_ENTRIES=5e4,FUZZY_SEARCH_RESULT_LIMIT=50,FILENAME_MATCH_BONUS=1e6,CHARACTER_MATCH_SCORE=10,CONTIGUOUS_MATCH_BONUS=20,BOUNDARY_MATCH_BONUS=5,CANCELLATION_YIELD_INTERVAL=256;async function collectFuzzyFileEntries(roots,options={}){let entries=[],state={visitedEntries:0,stopped:!1},maxDepth=options.maxDepth??FUZZY_SEARCH_MAX_DEPTH,maxVisitedEntries=options.maxVisitedEntries??FUZZY_SEARCH_MAX_VISITED_ENTRIES;for(let root of roots){if(options.signal?.aborted||state.stopped)break;let absoluteRoot=resolve(root),rootStat=await readableStat(absoluteRoot);!rootStat?.isDirectory()||rootStat.isSymbolicLink()||await walkDirectory({wireRoot:root,absoluteRoot,absoluteDirectory:absoluteRoot,depth:0,matchers:[],entries,state,signal:options.signal,maxDepth,maxVisitedEntries})}return entries}function rankFuzzyFileEntries(query,entries){if(query.length===0)return[];let results=[];for(let entry of entries){let filenameMatch=scoreSubsequence(entry.fileName,query),pathMatch=filenameMatch??scoreSubsequence(entry.path,query);if(!pathMatch)continue;let filenameOffset=Array.from(entry.path).length-Array.from(entry.fileName).length,indices=filenameMatch?filenameMatch.indices.map(index=>index+filenameOffset):pathMatch.indices;results.push({root:entry.root,path:entry.path,match_type:entry.matchType,file_name:entry.fileName,score:pathMatch.score+(filenameMatch?FILENAME_MATCH_BONUS:0),indices})}return results.sort(compareResults),results.slice(0,FUZZY_SEARCH_RESULT_LIMIT)}async function walkDirectory(input){let matchers=await addGitignoreScope(input.matchers,input.absoluteDirectory),directoryEntries=await readableDirectory(input.absoluteDirectory);directoryEntries.sort((left,right)=>compareText(left.name,right.name));for(let directoryEntry of directoryEntries){if(input.signal?.aborted||input.state.stopped)return;if(input.state.visitedEntries>=input.maxVisitedEntries){input.state.stopped=!0;return}if(input.state.visitedEntries+=1,directoryEntry.name===".git"||directoryEntry.name==="node_modules"||directoryEntry.isSymbolicLink())continue;let isDirectory=directoryEntry.isDirectory();if(!isDirectory&&!directoryEntry.isFile())continue;let absolutePath=join2(input.absoluteDirectory,directoryEntry.name),relativePath=toPosixPath(relative2(input.absoluteRoot,absolutePath));if(isIgnored(matchers,absolutePath,isDirectory))continue;input.entries.push({root:input.wireRoot,path:relativePath,matchType:isDirectory?"directory":"file",fileName:basename(relativePath)});let entryDepth=input.depth+1;isDirectory&&entryDepth<input.maxDepth&&await walkDirectory({...input,absoluteDirectory:absolutePath,depth:entryDepth,matchers}),input.state.visitedEntries%CANCELLATION_YIELD_INTERVAL===0&&await yieldToEventLoop()}}function scoreSubsequence(candidate,query){let normalizedCandidate=normalizeText(candidate),normalizedQuery=query.toLowerCase(),contiguousStart=normalizedCandidate.value.indexOf(normalizedQuery),normalizedIndices=[];if(contiguousStart>=0){let cursor=contiguousStart;for(let character of normalizedQuery)normalizedIndices.push(cursor),cursor+=character.length}else{let cursor=0;for(let character of normalizedQuery){let matchIndex=normalizedCandidate.value.indexOf(character,cursor);if(matchIndex<0)return;normalizedIndices.push(matchIndex),cursor=matchIndex+character.length}}let indices=[];for(let normalizedIndex of normalizedIndices){let sourceIndex=normalizedCandidate.sourceIndices[normalizedIndex];if(sourceIndex===void 0)return;indices.at(-1)!==sourceIndex&&indices.push(sourceIndex)}let candidateCharacters=Array.from(candidate),score=indices.length*CHARACTER_MATCH_SCORE;for(let index=0;index<indices.length;index++){let current=indices[index];if(current===void 0)continue;let previous=indices[index-1];previous!==void 0&¤t===previous+1&&(score+=CONTIGUOUS_MATCH_BONUS),(current===0||isBoundary(candidateCharacters[current-1]))&&(score+=BOUNDARY_MATCH_BONUS)}return{score,indices}}function normalizeText(value){let sourceIndices=[];for(let[sourceIndex,character]of Array.from(value).entries())for(let index=0;index<character.toLowerCase().length;index++)sourceIndices.push(sourceIndex);return{value:value.toLowerCase(),sourceIndices}}function compareResults(left,right){return left.score!==right.score?right.score-left.score:compareText(left.path,right.path)}function compareText(left,right){return left<right?-1:left>right?1:0}function isBoundary(character){return character==="/"||character==="-"||character==="_"||character==="."||character===" "}async function readableDirectory(path){try{return await readdir(path,{withFileTypes:!0})}catch(error){if(error instanceof Error)return[];throw error}}async function readableStat(path){try{return await lstat(path)}catch(error){if(error instanceof Error)return;throw error}}function toPosixPath(path){return path.split(sep2).join("/")}function yieldToEventLoop(){return new Promise(resolve4=>setImmediate(resolve4))}var FuzzyFileSearchService=class{constructor(options){this.activeSearches=new Set,this.pendingSearches=new Map,this.sessions=new Map,this.disposed=!1,this.broadcast=options.broadcast,this.collectEntries=options.collectEntries??((roots,signal)=>collectFuzzyFileEntries(roots,{signal})),this.rankEntries=options.rankEntries??rankFuzzyFileEntries}async search(params){if(this.disposed)return{files:[]};let controller=new AbortController;this.activeSearches.add(controller);let token=params.cancellationToken;token!==null&&(this.pendingSearches.get(token)?.abort(),this.pendingSearches.set(token,controller));try{if(params.query.length===0)return{files:[]};let entries=await this.collectEntries(params.roots,controller.signal);return controller.signal.aborted||this.disposed?{files:[]}:{files:this.rankEntries(params.query,entries)}}finally{this.activeSearches.delete(controller),token!==null&&this.pendingSearches.get(token)===controller&&this.pendingSearches.delete(token)}}startSession(params){if(params.sessionId.length===0)throw invalidRequest2("sessionId must not be empty");this.cancelSession(params.sessionId);let session={id:params.sessionId,roots:params.roots,controller:new AbortController,query:"",version:0,entries:void 0,active:!this.disposed,completedVersion:void 0};return this.sessions.set(session.id,session),this.runTraversal(session),{}}updateSession(params){let session=this.sessions.get(params.sessionId);if(!session?.active)throw invalidRequest2(`fuzzy file search session not found: ${params.sessionId}`);return session.query=params.query,session.version+=1,session.entries!==void 0&&this.emitVersion(session,session.version),{}}stopSession(params){return this.cancelSession(params.sessionId),{}}dispose(){if(!this.disposed){this.disposed=!0;for(let controller of this.activeSearches)controller.abort();this.activeSearches.clear(),this.pendingSearches.clear();for(let session of this.sessions.values())this.deactivate(session);this.sessions.clear()}}async runTraversal(session){let entries;try{entries=await this.collectEntries(session.roots,session.controller.signal)}catch(error){if(!(error instanceof Error))throw error;entries=[]}if(this.isLive(session))for(session.entries=entries;this.isLive(session);){let version=session.version;if(await this.emitVersion(session,version))break}}async emitVersion(session,version){if(await Promise.resolve(),!this.isLive(session)||session.version!==version||session.entries===void 0)return!1;if(session.completedVersion===version)return!0;let query=session.query,files=query.length===0?[]:this.rankEntries(query,session.entries);return!this.isLive(session)||session.version!==version||(this.broadcast({method:"fuzzyFileSearch/sessionUpdated",params:{sessionId:session.id,query,files}}),!this.isLive(session)||session.version!==version)?!1:(session.completedVersion=version,this.broadcast({method:"fuzzyFileSearch/sessionCompleted",params:{sessionId:session.id}}),!0)}cancelSession(sessionId){let session=this.sessions.get(sessionId);session&&(this.deactivate(session),this.sessions.get(sessionId)===session&&this.sessions.delete(sessionId))}deactivate(session){session.active=!1,session.controller.abort()}isLive(session){return!this.disposed&&session.active&&this.sessions.get(session.id)===session}};function invalidRequest2(message){return new RpcHandlerError({code:-32600,message})}var APPROVAL_DECISIONS=["accept","acceptForSession","decline","cancel"],PERMISSION_OPTIONS=["Allow once","Allow always","Deny","Deny with feedback"],CANCEL_REASON="approval request was cancelled because the turn ended",NO_SUBSCRIBER_REASON="no client connected to approve";var ApprovalBridge=class{constructor(sendToThreadSubscribers){this.nextServerRequestId=0,this.pending=new Map,this.sessionAllows=new Set,this.sendToThreadSubscribers=sendToThreadSubscribers}get pendingCount(){return this.pending.size}requestApproval(threadId,kind,payload){let allowKey=createAllowKey(threadId,kind,payload);if(allowKey&&this.sessionAllows.has(allowKey))return Promise.resolve({allow:!0,decision:"acceptForSession"});let requestId=this.nextServerRequestId;this.nextServerRequestId+=1;let request=buildApprovalRequest(threadId,requestId,kind,payload);return new Promise(resolve4=>{this.pending.set(requestId,{threadId,request,allowKey,resolve:resolve4}),!(this.sendToThreadSubscribers(threadId,request)>0)&&(this.pending.delete(requestId),resolve4({allow:!1,decision:"decline",reason:NO_SUBSCRIBER_REASON}))})}resolveResponse(response){let pending=this.pending.get(response.id);if(!pending)return!1;let decision=readDecision(response);return this.pending.delete(response.id),decision==="acceptForSession"&&pending.allowKey&&this.sessionAllows.add(pending.allowKey),this.emitResolved(pending.threadId,response.id),pending.resolve(decisionToOutcome(decision,readReason(response))),!0}replayPendingForThread(threadId){let replayed=0;for(let pending of this.pending.values())pending.threadId===threadId&&(this.sendToThreadSubscribers(threadId,pending.request),replayed+=1);return replayed}cancelPendingForThread(threadId){let cancelled=0;for(let[requestId,pending]of Array.from(this.pending.entries()))pending.threadId===threadId&&(this.pending.delete(requestId),this.emitResolved(threadId,requestId),pending.resolve({allow:!1,decision:"cancel",reason:CANCEL_REASON}),cancelled+=1);return cancelled}emitResolved(threadId,requestId){this.sendToThreadSubscribers(threadId,{method:"serverRequest/resolved",params:{threadId,requestId}})}};function buildApprovalRequest(threadId,requestId,kind,payload){let base={threadId,turnId:payload.turnId??"turn-approval",itemId:payload.itemId??(kind==="commandExecution"?"approval-command":"approval-file-change"),startedAtMs:Date.now()};return kind==="fileChange"?{id:requestId,method:"item/fileChange/requestApproval",params:{...base,reason:payload.reason??null,grantRoot:payload.grantRoot??null}}:{id:requestId,method:"item/commandExecution/requestApproval",params:{...base,approvalId:payload.approvalId??null,environmentId:payload.environmentId??null,reason:payload.reason??null,command:payload.command??null,cwd:payload.cwd??null,availableDecisions:[...APPROVAL_DECISIONS]}}}function decisionToOutcome(decision,reason){return decision==="accept"||decision==="acceptForSession"?{allow:!0,decision}:reason?{allow:!1,decision,reason}:{allow:!1,decision}}function readDecision(response){let decision=isRecord2(response.result)?response.result.decision:void 0;return isApprovalDecision(decision)?decision:"cancel"}function readReason(response){let resultReason=isRecord2(response.result)?response.result.reason??response.result.message:void 0,errorReason=isRecord2(response.error)?response.error.message:void 0,reason=typeof resultReason=="string"?resultReason:errorReason;return typeof reason=="string"&&reason.length>0?reason:void 0}function createAllowKey(threadId,kind,payload){if(!(!payload.toolName||typeof payload.command!="string"))return`${threadId}\0${kind}\0${payload.toolName}\0${payload.command}`}function isApprovalDecision(value){return value==="accept"||value==="acceptForSession"||value==="decline"||value==="cancel"}function isRecord2(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function createAppServerUIContext(bridge,threadId,userInput,getTurnId=()=>"turn-user-input"){let pendingInput,editorText="",editorFactory,toolsExpanded=!1;return{question(request,opts){return userInput?.requestUserInput(threadId,getTurnId(),request.requestId,request,opts)??Promise.resolve({status:"unavailable",answers:{},unanswered:request.questions.map(question=>question.id)})},async select(title,options){let prompt=parsePermissionPrompt(title);if(!prompt||!isPermissionOptions(options))return;let outcome=await bridge.requestApproval(threadId,prompt.kind,{turnId:"turn-approval",itemId:`approval-${prompt.toolName}`,toolName:prompt.toolName,command:prompt.command,reason:prompt.reason});return outcome.decision==="accept"?"Allow once":outcome.decision==="acceptForSession"?"Allow always":outcome.reason&&outcome.reason!==NO_SUBSCRIBER_REASON&&outcome.reason!==CANCEL_REASON?(pendingInput=outcome.reason,"Deny with feedback"):"Deny"},async confirm(title,message){return(await bridge.requestApproval(threadId,"commandExecution",{turnId:"turn-approval",itemId:"approval-confirm",toolName:"confirm",command:title,reason:message})).allow},async input(){let value=pendingInput;return pendingInput=void 0,value},notify(){},onTerminalInput(){return()=>{}},setStatus(){},setWorkingMessage(){},setWorkingVisible(){},setWorkingIndicator(){},setHiddenThinkingLabel(){},setWidget(){},setFooter(){},setHeader(){},setTitle(){},custom(){return Promise.reject(new Error("Custom UI is not available in app-server mode."))},pasteToEditor(text){editorText=text},setEditorText(text){editorText=text},getEditorText(){return editorText},async editor(_title,prefill){return prefill},addAutocompleteProvider(){},setEditorComponent(factory){editorFactory=factory},getEditorComponent(){return editorFactory},theme,getAllThemes:getAvailableThemesWithPaths,getTheme(name){return getThemeByName(name)},setTheme(_nextTheme){return{success:!1,error:"Theme switching is not available in app-server mode."}},getToolsExpanded(){return toolsExpanded},setToolsExpanded(expanded){toolsExpanded=expanded}}}function parsePermissionPrompt(title){let[firstLine="",...rest]=title.split(`
|
|
4
4
|
`),prefix="Permission required: ";if(!firstLine.startsWith(prefix))return;let toolName=firstLine.slice(prefix.length).trim(),reason=rest.join(`
|
|
5
5
|
`).trim();return{kind:permissionKind(toolName),toolName,command:readLineValue(reason,"Command: $ ")??readLineValue(reason,"File: ")??readLineValue(reason,"Path: ")??null,reason}}function permissionKind(toolName){return toolName==="edit"||toolName==="write"||toolName==="apply_patch"||toolName==="multiedit"?"fileChange":"commandExecution"}function readLineValue(text,prefix){return text.split(`
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
|
|
2
|
+
import{external_exports}from"./chunk-KUPQO7MC.js";import"./chunk-IKOFCODM.js";import{readFileSync as readFileSync2,realpathSync,statSync}from"node:fs";import{createRequire,isBuiltin}from"node:module";import{dirname as dirname2,extname as extname2,resolve}from"node:path";import{fileURLToPath as fileURLToPath2}from"node:url";var a,i,r,s=1048576,f=new Uint8Array(new Uint16Array([1]).buffer)[0]===1?function(e,a2){let i2=e.length,r2=0;for(;r2<i2;)a2[r2]=e.charCodeAt(r2++)}:function(e,a2){let i2=e.length,r2=0;for(;r2<i2;){let i3=e.charCodeAt(r2);a2[r2++]=(255&i3)<<8|i3>>>8}},c="xportportlassrometavoyiedeleinstantyreturdebuggeawaithrwhileforifcatcfinallelsbreacontinsyncunctionourceefer;ypenterfacenewkeyofinfertypeofuniqueimportreadonlyabstractthencatchfinallyeclarextendsnumamespaceonstoduleequirelobal",t,b,k;function parse(l2,o2="@"){t=l2,b=o2;let w=Math.max(2<<17,2*t.length),d=2*t.length+w+(2<<17);if(d>s||!a){for(;d>s;)s*=2;i=new ArrayBuffer(s),f(c,new Uint16Array(i,16,226)),a=(function(e,a2,i2){var r2=new e.Int8Array(i2),s2=new e.Int16Array(i2),f2=new e.Int32Array(i2),c2=new e.Uint8Array(i2),t2=new e.Uint16Array(i2),b2=1344;function k2(){var e2=0,a3=0,i3=0,c3=0,k3=0,n3=0,o4=0,h3=0,w3=0,d3=0;d3=b2,b2=b2+10240|0,r2[1108]=1,r2[1106]=0,s2[550]=0,s2[551]=0,f2[141]=232,r2[1109]=0,f2[142]=0,f2[138]=0,r2[1105]=0,f2[143]=d3+2048,f2[144]=d3,r2[1110]=0,e2=(f2[120]|0)+-2|0,f2[145]=e2,a3=e2+(f2[134]<<1)|0,f2[146]=a3;e:for(;;){if(i3=e2+2|0,f2[145]=i3,e2>>>0>=a3>>>0){c3=25;break}a:do switch(s2[i3>>1]|0){case 9:case 10:case 11:case 12:case 13:case 32:break;case 101:{if((s2[551]|0)==0&&Ee(i3)|0&&(re(e2+4|0,16,10)|0)==0)if(l3()|0){f2[141]=232;break a}else if(r2[1108]|0){c3=24;break a}else{c3=11;break e}else c3=24;break}case 105:{if(a3=e2+4|0,(s2[a3>>1]|0)==109&&Ee(i3)|0&&(re(e2+6|0,26,8)|0)==0){u2(),c3=24;break a}if(Ee(i3)|0&&(re(a3,240,16)|0)==0&&(c3=s2[e2+20>>1]|0,c3<<16>>16==47|(Ce(c3)|0))){c3=19;break e}else c3=24;break}case 59:{c3=24;break}case 47:switch(s2[e2+4>>1]|0){case 47:{de();break a}case 42:{H(1);break a}default:{c3=23;break e}}default:{c3=23;break e}}while(!1);(c3|0)==24&&(c3=0,f2[141]=f2[145]),e2=f2[145]|0,a3=f2[146]|0}(c3|0)==11?(e2=f2[145]|0,f2[141]=e2,c3=26):(c3|0)==19||(c3|0)==23?(r2[1108]=0,f2[145]=e2,c3=26):(c3|0)==25&&(r2[1105]|0?e2=0:(e2=i3,c3=26));do if((c3|0)==26){e:for(;;){if(i3=e2+2|0,f2[145]=i3,e2>>>0>=(f2[146]|0)>>>0){c3=166;break}a3=s2[i3>>1]|0;a:do switch(a3<<16>>16){case 9:case 10:case 11:case 12:case 13:case 32:{(Re(a3)|0)&(f2[142]|0)!=0&&B(i3);break}case 101:{(s2[551]|0)==0&&Ee(i3)|0&&(re(e2+4|0,16,10)|0)==0?l3()|0?f2[141]=232:c3=165:c3=162;break}case 105:switch(s2[e2+4>>1]|0){case 109:{if(!(Ee(i3)|0)){c3=162;break a}if(re(e2+6|0,26,8)|0){c3=162;break a}u2(),c3=165;break a}case 110:{if(!(Ee(i3)|0)){c3=162;break a}if(!(y2(1)|0)){c3=162;break a}f2[141]=232;break a}default:{c3=162;break a}}case 99:{(s2[e2+4>>1]|0)==108&&Ee(i3)|0&&(re(e2+6|0,36,6)|0)==0&&Ce(s2[e2+12>>1]|0)|0&&(r2[1110]=1),c3=162;break}case 116:{(s2[e2+4>>1]|0)==121&&Ee(i3)|0&&y2(1)|0?f2[141]=232:c3=162;break}case 100:{(s2[e2+4>>1]|0)==101&&Ee(i3)|0&&g()|0?f2[141]=232:c3=162;break}case 40:{if(e2=s2[551]|0,e2<<16>>16==1024){c3=59;break e}i3=f2[141]|0,c3=f2[143]|0,f2[c3+((e2&65535)<<3)>>2]=1,s2[551]=e2+1<<16>>16,f2[c3+((e2&65535)<<3)+4>>2]=i3,c3=165;break}case 91:{if(e2=s2[551]|0,e2<<16>>16==1024){c3=62;break e}i3=f2[141]|0,c3=f2[143]|0,f2[c3+((e2&65535)<<3)>>2]=8,s2[551]=e2+1<<16>>16,f2[c3+((e2&65535)<<3)+4>>2]=i3,c3=165;break}case 60:{e2=(f2[142]|0)+1|0,e2>>>0>1&&(f2[142]=e2),c3=165;break}case 62:{switch(a3=f2[142]|0,a3|0){case 0:case 1:case-1:{c3=165;break a}default:}(s2[e2>>1]|0)==61||(f2[142]=a3+-1),c3=165;break}case 61:{(f2[142]|0)==1&(s2[551]|0)==0&&(s2[e2+4>>1]|0)!=62&&(f2[142]=-1),c3=165;break}case 93:{if(e2=s2[551]|0,!(e2<<16>>16)){c3=72;break e}s2[551]=e2+-1<<16>>16,c3=165;break}case 44:{if(a3=s2[550]|0,a3<<16>>16&&(n3=s2[551]|0,n3<<16>>16)&&(f2[(f2[143]|0)+((n3&65535)+-1<<3)>>2]|0)==5){if(a3=f2[(f2[144]|0)+((a3&65535)+-1<<2)>>2]|0,f2[a3+4>>2]|0){c3=165;break a}c3=f2[141]|0,f2[a3+4>>2]=c3+2,(f2[a3+44>>2]|0)!=(c3|0)&&(f2[a3+36>>2]=0),f2[145]=e2+4,D(1)|0,c3=f2[145]|0,f2[a3+16>>2]=c3,f2[145]=c3+-2,c3=165;break a}switch(f2[142]|0){case 1:case-1:break;default:{c3=165;break a}}s2[551]|0||G(),c3=165;break}case 59:{(f2[142]|0)!=0&(s2[551]|0)==0&&(f2[142]=0),c3=165;break}case 41:{if(a3=s2[551]|0,!(a3<<16>>16)){c3=87;break e}s2[551]=a3+-1<<16>>16,i3=s2[550]|0,i3<<16>>16!=0&&(f2[(f2[143]|0)+((a3+-1&65535)<<3)>>2]|0)==5&&(a3=f2[(f2[144]|0)+((i3&65535)+-1<<2)>>2]|0,(f2[a3+4>>2]|0)==0&&(c3=f2[141]|0,f2[a3+4>>2]=c3+2,(f2[a3+44>>2]|0)!=(c3|0))&&(f2[a3+36>>2]=0),f2[a3+12>>2]=e2+4,v2(a3),s2[550]=(s2[550]|0)+-1<<16>>16),c3=165;break}case 123:{if(e2=f2[141]|0,c3=f2[128]|0,(s2[e2>>1]|0)==41&(c3|0)!=0&&(f2[c3+12>>2]|0)==(e2+2|0)&&(c3=f2[129]|0,f2[128]=c3,f2[((c3|0)==0?496:c3+52|0)>>2]=0,f2[132]=(f2[132]|0)+-1),a3=s2[551]|0,a3<<16>>16==1024){c3=98;break e}c3=f2[143]|0,f2[c3+((a3&65535)<<3)>>2]=(r2[1110]|0)==0?2:6,s2[551]=a3+1<<16>>16,f2[c3+((a3&65535)<<3)+4>>2]=e2,r2[1110]=0,c3=165;break}case 125:{if(e2=s2[551]|0,!(e2<<16>>16)){c3=101;break e}c3=f2[143]|0,s2[551]=e2+-1<<16>>16,(f2[c3+((e2+-1&65535)<<3)>>2]|0)==4&&(a3=s2[550]|0,a3<<16>>16&&(o4=f2[(f2[144]|0)+((a3&65535)+-1<<2)>>2]|0,(s2[o4+48>>1]|0)==e2+-1<<16>>16<<16>>16)&&(qe(8),c3=f2[136]|0,f2[136]=c3+8,f2[c3>>2]=(f2[145]|0)+2,f2[c3+4>>2]=0,i3=f2[o4+40>>2]|0,f2[((i3|0)==0?o4+36|0:i3+4|0)>>2]=c3,f2[o4+40>>2]=c3),E()),c3=165;break}case 34:case 39:{K(a3),c3=165;break}case 92:{if(e2=fe()|0,!e2)c3=162;else{if((e2|0)<0){c3=110;break e}f2[141]=i3}break}case 47:{switch(s2[e2+4>>1]|0){case 47:{de();break}case 42:{H(1);break}default:{e2=f2[141]|0,a3=s2[e2>>1]|0;i:do if(!(ce(a3)|0))a3<<16>>16==41?(i3=s2[551]|0,Ae(f2[(f2[143]|0)+((i3&65535)<<3)+4>>2]|0)|0||(c3=123)):c3=122;else switch(a3<<16>>16){case 46:if(((s2[e2+-2>>1]|0)+-48&65535)<10){c3=122;break i}else break i;case 43:if((s2[e2+-2>>1]|0)==43){c3=122;break i}else break i;case 45:if((s2[e2+-2>>1]|0)==45){c3=122;break i}else break i;default:break i}while(!1);(c3|0)==122&&(i3=s2[551]|0,c3=123);i:do if((c3|0)==123){if(c3=0,i3<<16>>16!=0&&(h3=f2[143]|0,w3=(i3&65535)+-1|0,a3<<16>>16==102?(f2[h3+(w3<<3)>>2]|0)==1:0)){if((s2[e2+-2>>1]|0)==111&&L(e2+-4|0)|0&&ke(f2[h3+(w3<<3)+4>>2]|0,136,3)|0)break}else c3=128;if((c3|0)==128&&a3<<16>>16==125&&(c3=f2[143]|0,i3=i3&65535,ae(f2[c3+(i3<<3)+4>>2]|0)|0||(f2[c3+(i3<<3)>>2]|0)==6))break;if(!(m2(e2)|0)){switch(a3<<16>>16){case 0:break i;case 47:{if(r2[1109]|0)break i;break}default:}if(c3=f2[130]|0,c3|0&&e2>>>0>=(f2[c3>>2]|0)>>>0&&e2>>>0<=(f2[c3+4>>2]|0)>>>0){ee(),r2[1109]=0,c3=165;break a}i3=f2[120]|0;do{if(e2>>>0<=i3>>>0)break;e2=e2+-2|0,f2[141]=e2,a3=s2[e2>>1]|0}while(!(ve(a3)|0));if(xe(a3)|0){do{if(e2>>>0<=i3>>>0)break;e2=e2+-2|0,f2[141]=e2}while(xe(s2[e2>>1]|0)|0);if(ne(e2)|0){ee(),r2[1109]=0,c3=165;break a}}r2[1109]=1,c3=165;break a}}while(!1);ee(),r2[1109]=0,c3=165;break a}}if((f2[142]|0)!=0&(s2[551]|0)==0){for(a3=f2[145]|0,e2=i3;;){if(e2>>>0>a3>>>0)break a;if(Re(s2[e2>>1]|0)|0)break;e2=e2+2|0}i3=Re(s2[a3>>1]|0)|0,B(i3?a3:a3+2|0)}break}case 96:{if(e2=s2[550]|0,e2<<16>>16&&(k3=f2[(f2[144]|0)+((e2&65535)+-1<<2)>>2]|0,(f2[k3+4>>2]|0)==0)&&(f2[k3>>2]|0)==(i3|0)&&(s2[k3+48>>1]=(t2[551]|0)+1),e2=s2[551]|0,e2<<16>>16==1024){c3=159;break e}i3=f2[141]|0,c3=f2[143]|0,f2[c3+((e2&65535)<<3)>>2]=3,s2[551]=e2+1<<16>>16,f2[c3+((e2&65535)<<3)+4>>2]=i3,E(),c3=165;break}default:(a3&65535)>127&a3<<16>>16!=160|(a3<<16>>16==92|(a3<<16>>16==95|(a3<<16>>16==36|((a3+-48&65535)<10|((a3|32)+-97&65535)<26))))?c3=162:c3=165}while(!1);a:do if((c3|0)==162)for(e2=f2[145]|0;;){if(e2=e2+2|0,c3=s2[e2>>1]|0,!((c3&65535)>127&c3<<16>>16!=160|(c3<<16>>16==92|(c3<<16>>16==95|(c3<<16>>16==36|((c3+-48&65535)<10|((c3|32)+-97&65535)<26)))))){c3=165;break a}f2[145]=e2}while(!1);(c3|0)==165&&(c3=0,f2[141]=f2[145]),e2=f2[145]|0}if((c3|0)==59){je(),e2=0;break}else if((c3|0)==62){je(),e2=0;break}else if((c3|0)==72){je(),e2=0;break}else if((c3|0)==87){je(),e2=0;break}else if((c3|0)==98){je(),e2=0;break}else if((c3|0)==101){je(),e2=0;break}else if((c3|0)==110){je(),e2=0;break}else if((c3|0)==159){je(),e2=0;break}else if((c3|0)==166){if(!((r2[1105]|0)==0&&(s2[550]|s2[551])<<16>>16==0)){e2=0;break}if(f2[133]|0&&(A2(),r2[1105]|0)){e2=0;break}e2=1;break}}while(!1);return b2=d3,e2|0}function l3(){var e2=0,a3=0,i3=0,c3=0,t3=0,b3=0,k3=0,l4=0,u3=0,o4=0,d3=0,v3=0,p3=0,m3=0;d3=f2[145]|0,m3=f2[130]|0,f2[145]=d3+12,e2=D(1)|0,i3=f2[145]|0,(i3|0)==(d3+12|0)&&!(se(e2)|0)?e2=0:u3=3;e:do if((u3|0)==3){f2[131]=d3;a:do switch(e2<<16>>16){case 116:{if((s2[i3>>1]|0)==116&&(re(i3+2|0,234,6)|0)==0){if(a3=s2[i3+8>>1]|0,!(Ce(a3)|0))switch(a3<<16>>16){case 42:case 47:case 123:break;default:{u3=12;break a}}switch(f2[145]=i3+8,e2=D(1)|0,e2<<16>>16){case 42:case 123:{o4=1,u3=13;break a}default:}if(f2[145]=i3,y2(0)|0){e2=1;break e}r2[1108]=0,e2=0;break e}else u3=12;break}case 105:{if(y2(0)|0){e2=1;break e}else u3=12;break}default:o4=0,u3=13}while(!1);a:do if((u3|0)==12)r2[1108]=0,u3=55;else if((u3|0)==13){i:do switch(e2<<16>>16){case 123:{for(f2[145]=(f2[145]|0)+2,e2=D(1)|0;;){r:do if(o4)c3=1;else if(e2<<16>>16==116)if(c3=f2[145]|0,(s2[c3>>1]|0)==116&&(re(c3+2|0,234,6)|0)==0){if(e2=s2[c3+8>>1]|0,!(Ce(e2)|0))switch(e2<<16>>16){case 42:case 47:case 123:break;default:{c3=0,e2=116;break r}}f2[145]=c3+8,e2=D(1)|0;s:do switch(e2<<16>>16){case 97:{if(i3=f2[145]|0,(s2[i3+2>>1]|0)!=115){c3=1,e2=97;break r}if(!(ve(s2[i3+4>>1]|0)|0)){c3=1,e2=97;break r}if(f2[145]=i3+4,e2=D(1)|0,e2<<16>>16!=97)switch(f2[145]=i3,e2<<16>>16){case 44:case 125:{c3=1,e2=97;break r}default:break s}if(e2=f2[145]|0,(s2[e2+2>>1]|0)==115&&ve(s2[e2+4>>1]|0)|0){f2[145]=e2+4,a3=D(1)|0;f:do if(a3<<16>>16==92|(a3+-48&65535)<10)e2=1;else{c:do if(((a3&-33)+-65&65535)>=26){switch(a3<<16>>16){case 36:case 92:case 95:break c;default:}e2=(a3&65535)<128;break f}while(!1);f2[145]=i3,c3=1,e2=97;break r}while(!1);if(f2[145]=i3,a3<<16>>16!=92&e2)break s;c3=1,e2=97;break r}f2[145]=i3;break}case 44:case 125:break;default:{c3=1;break r}}while(!1);f2[145]=c3,c3=0,e2=116}else c3=0,e2=116;else c3=0;while(!1);if(i3=f2[145]|0,Qe(e2)|0?(K(e2),e2=(f2[145]|0)+2|0,f2[145]=e2):(X(e2)|0,e2=f2[145]|0),D(1)|0,u3=f2[130]|0,e2=V(i3,e2)|0,a3=f2[130]|0,(a3|0)==(u3|0)|c3&(a3|0)!=0^1||(r2[a3+25>>0]=r2[a3+25>>0]|4),e2<<16>>16==44&&(f2[145]=(f2[145]|0)+2,e2=D(1)|0),e2<<16>>16==125){u3=46;break}if(u3=f2[145]|0,(u3|0)==(i3|0)|u3>>>0>(f2[146]|0)>>>0){u3=45;break}}if((u3|0)==45){je(),e2=0;break e}else if((u3|0)==46){r2[1106]=1,f2[145]=(f2[145]|0)+2,a3=D(1)|0,i3=0,c3=1,t3=0;break i}break}case 42:{t3=f2[145]|0,f2[145]=t3+2,D(1)|0,a3=f2[145]|0,V(a3,a3)|0,a3=D(1)|0,i3=(f2[130]|0)==(m3|0),c3=0;break}default:switch(r2[1108]=0,e2<<16>>16){case 100:{if(e2=f2[145]|0,re(e2+2|0,382,12)|0){u3=58;break a}if(m3=s2[e2+14>>1]|0,!(m3<<16>>16==47|(Ce(m3)|0))){u3=58;break a}f2[145]=e2+14,h2(),e2=1;break e}case 97:{if(e2=f2[145]|0,re(e2,334,16)|0){u3=78;break a}if(m3=s2[e2+16>>1]|0,!(m3<<16>>16==47|(Ce(m3)|0))){u3=78;break a}f2[145]=e2+16,e2=D(1)|0,u3=55;break a}default:{u3=55;break a}}}while(!1);i:do if(o4)for(e2=(m3|0)==0?500:m3+32|0;;){if(e2=f2[e2>>2]|0,!e2)break i;r2[e2+25>>0]=r2[e2+25>>0]|4,e2=e2+32|0}while(!1);if(a3<<16>>16==102&&(v3=f2[145]|0,(re(v3+2|0,42,6)|0)==0)){if(f2[145]=v3+8,w2(d3,D(1)|0,0),r2[1105]|0){e2=0;break e}for(i3?(f2[(f2[128]|0)+28>>2]=8,Z(t3,t3+2|0,0,0),e2=f2[130]|0,r2[e2+24>>0]=3,o4&&(r2[e2+25>>0]=r2[e2+25>>0]|4,u3=107)):u3=107,(u3|0)==107&&(p3=f2[128]|0,o4&(p3|0)!=0)&&(r2[p3+25>>0]=1),a3=(f2[132]|0)+-1|0,e2=(m3|0)==0?500:m3+32|0;;){if(e2=f2[e2>>2]|0,!e2){e2=0;break e}f2[e2+20>>2]=a3,(r2[e2+24>>0]|0)!=3&&(r2[e2+24>>0]=2,r2[e2+25>>0]=((f2[e2+8>>2]|0)==0?2:0)|r2[e2+25>>0]&4),e2=e2+32|0}}i:do if(c3)for(e2=(m3|0)==0?500:m3+32|0;;){if(e2=f2[e2>>2]|0,!e2)break i;r2[e2+24>>0]=4,f2[133]=(f2[133]|0)+1,e2=e2+32|0}while(!1);f2[145]=(f2[145]|0)+-2,e2=0;break e}while(!1);a:do if((u3|0)==55){switch(e2<<16>>16){case 100:{u3=58;break a}case 97:{u3=78;break a}case 102:break a;case 110:case 101:{if(I(e2)|0){e2=0;break e}switch(e2<<16>>16){case 102:break a;case 108:break;default:{e2=0;break e}}break}case 99:{if(e2=f2[145]|0,(re(e2+2|0,34,8)|0)==0&&ve(s2[e2+10>>1]|0)|0){f2[145]=e2+10,e2=D(1)|0,m3=f2[145]|0,R(e2)|0,e2=f2[145]|0,Z(m3,e2,m3,e2),f2[145]=(f2[145]|0)+-2,e2=0;break e}f2[145]=e2+4;break}case 108:case 118:break;default:{e2=0;break e}}switch(f2[145]=(f2[145]|0)+6,r2[1108]=0,e2=D(1)|0,e2<<16>>16){case 110:case 101:{if(I(e2)|0){e2=0;break e}break}default:}i:for(;;){if(a3=f2[145]|0,a3>>>0>(f2[146]|0)>>>0){e2=a3,u3=96;break}if(e2=le(e2)|0,(f2[145]|0)==(a3|0)){e2=a3,u3=96;break}switch(e2<<16>>16){case 58:{u3=92;break i}case 61:{a3=n2(1)|0;break}default:a3=e2}if(e2=f2[145]|0,a3<<16>>16!=44){u3=96;break}f2[145]=e2+2,e2=D(1)|0}if((u3|0)==92){f2[142]=1,e2=0;break e}else if((u3|0)==96){f2[145]=e2+-2,e2=0;break e}}while(!1);if((u3|0)==58){switch(i3=f2[145]|0,f2[145]=i3+14,(D(1)|0)<<16>>16){case 105:{if(a3=f2[130]|0,y2(0)|0)if(e2=f2[130]|0,(e2|0)==(a3|0)){Z(i3,i3+14|0,0,0),e2=(f2[130]|0)+25|0,r2[e2>>0]=r2[e2>>0]|4,e2=1;break e}else{f2[e2>>2]=i3,f2[(f2[130]|0)+4>>2]=i3+14,e2=1;break e}break}case 97:{e2=f2[145]|0,(re(e2+2|0,192,8)|0)==0&&xe(s2[e2+10>>1]|0)|0&&(f2[145]=e2+10,D(0)|0,u3=66);break}case 102:{u3=66;break}case 99:{e2=f2[145]|0,(re(e2+2|0,34,8)|0)==0&&(m3=s2[e2+10>>1]|0,Ce(m3)|0|m3<<16>>16==123)&&(f2[145]=e2+10,c3=D(1)|0,c3<<16>>16!=123)&&(l4=c3,u3=75);break}default:}a:do if((u3|0)==66&&(t3=f2[145]|0,(re(t3+2|0,200,14)|0)==0)){if(e2=s2[t3+16>>1]|0,!(Ce(e2)|0))switch(e2<<16>>16){case 40:case 42:break;default:break a}f2[145]=t3+16,e2=D(1)|0,e2<<16>>16==42&&(f2[145]=(f2[145]|0)+2,e2=D(1)|0),e2<<16>>16!=40&&(l4=e2,u3=75)}while(!1);if((u3|0)==75&&(b3=f2[145]|0,R(l4)|0,k3=f2[145]|0,k3>>>0>b3>>>0)){Z(i3,i3+14|0,b3,k3),f2[145]=(f2[145]|0)+-2,e2=0;break}Z(i3,i3+14|0,0,0),f2[145]=i3+12,e2=0;break}else(u3|0)==78&&(f2[145]=(f2[145]|0)+10,D(0)|0);f2[145]=(f2[145]|0)+16,e2=D(1)|0,e2<<16>>16==42&&(f2[145]=(f2[145]|0)+2,e2=D(1)|0),m3=f2[145]|0,R(e2)|0,e2=f2[145]|0,Z(m3,e2,m3,e2),f2[145]=(f2[145]|0)+-2,e2=0}while(!1);return e2|0}function n2(e2){e2=e2|0;var a3=0,i3=0,c3=0,t3=0,b3=0,k3=0,n3=0,o4=0,h3=0,w3=0,d3=0,p3=0,A3=0,C2=0,x2=0;d3=s2[551]|0,a3=f2[145]|0,f2[141]=a3,h3=a3,n3=d3,w3=0;e:for(;;){for(i3=f2[146]|0,t3=n3<<16>>16==d3<<16>>16,c3=w3&e2,k3=a3;;){if(b3=k3+2|0,k3>>>0>=i3>>>0){a3=0,o4=153;break e}if(a3=s2[b3>>1]|0,!(xe(a3)|0)){if(t3){switch(a3<<16>>16){case 125:case 93:case 41:case 59:case 44:{o4=153;break e}default:}if(c3&&Re(a3)|0){o4=153;break e}}if(!(Re(a3)|0))break}k3=b3}f2[145]=b3;a:do switch(a3<<16>>16){case 101:{n3<<16>>16==0&&Ee(b3)|0&&(re(k3+4|0,16,10)|0)==0?l3()|0?f2[141]=232:o4=143:o4=140;break}case 105:switch(s2[k3+4>>1]|0){case 109:{if(!(Ee(b3)|0)){o4=140;break a}if(re(k3+6|0,26,8)|0){o4=140;break a}u2(),o4=143;break a}case 110:{if(!(Ee(b3)|0)){o4=140;break a}if(!(y2(1)|0)){o4=140;break a}f2[141]=232;break a}default:{o4=140;break a}}case 99:{(s2[k3+4>>1]|0)==108&&Ee(b3)|0&&(re(k3+6|0,36,6)|0)==0&&Ce(s2[k3+12>>1]|0)|0&&(r2[1110]=1),o4=140;break}case 116:{(s2[k3+4>>1]|0)==121&&Ee(b3)|0&&y2(1)|0?f2[141]=232:o4=140;break}case 100:{(s2[k3+4>>1]|0)==101&&Ee(b3)|0&&g()|0?f2[141]=232:o4=140;break}case 40:if(n3<<16>>16==1024){je();break a}else{o4=n3&65535,k3=f2[143]|0,f2[k3+(o4<<3)>>2]=1,s2[551]=n3+1<<16>>16,f2[k3+(o4<<3)+4>>2]=h3,o4=143;break a}case 91:if(n3<<16>>16==1024){je();break a}else{o4=n3&65535,k3=f2[143]|0,f2[k3+(o4<<3)>>2]=8,s2[551]=n3+1<<16>>16,f2[k3+(o4<<3)+4>>2]=h3,o4=143;break a}case 60:{i3=(f2[142]|0)+1|0,i3>>>0>1&&(f2[142]=i3),o4=143;break}case 62:{switch(i3=f2[142]|0,i3|0){case 0:case 1:case-1:{o4=143;break a}default:}(s2[k3>>1]|0)==61||(f2[142]=i3+-1),o4=143;break}case 61:{n3<<16>>16==0&(f2[142]|0)==1&&(s2[k3+4>>1]|0)!=62&&(f2[142]=-1),o4=143;break}case 93:if(n3<<16>>16){s2[551]=n3+-1<<16>>16,o4=143;break a}else{je();break a}case 44:{if(i3=s2[550]|0,c3=n3<<16>>16==0,!(c3|i3<<16>>16==0)&&(f2[(f2[143]|0)+((n3&65535)+-1<<3)>>2]|0)==5){if(i3=f2[(f2[144]|0)+((i3&65535)+-1<<2)>>2]|0,f2[i3+4>>2]|0){o4=143;break a}f2[i3+4>>2]=h3+2,(f2[i3+44>>2]|0)!=(h3|0)&&(f2[i3+36>>2]=0),f2[145]=k3+4,D(1)|0,o4=f2[145]|0,f2[i3+16>>2]=o4,f2[145]=o4+-2,o4=143;break a}switch(f2[142]|0){case 1:case-1:break;default:{o4=143;break a}}c3&&G(),o4=143;break}case 59:{n3<<16>>16==0&(f2[142]|0)!=0&&(f2[142]=0),o4=143;break}case 41:{if(!(n3<<16>>16)){je();break a}o4=n3+-1<<16>>16,s2[551]=o4,i3=s2[550]|0,i3<<16>>16!=0&&(f2[(f2[143]|0)+((o4&65535)<<3)>>2]|0)==5&&(i3=f2[(f2[144]|0)+((i3&65535)+-1<<2)>>2]|0,(f2[i3+4>>2]|0)==0&&(f2[i3+4>>2]=h3+2,(f2[i3+44>>2]|0)!=(h3|0))&&(f2[i3+36>>2]=0),f2[i3+12>>2]=k3+4,v2(i3),s2[550]=(s2[550]|0)+-1<<16>>16),o4=143;break}case 123:if(k3=f2[128]|0,(s2[h3>>1]|0)==41&(k3|0)!=0&&(f2[k3+12>>2]|0)==(h3+2|0)&&(k3=f2[129]|0,f2[128]=k3,f2[((k3|0)==0?496:k3+52|0)>>2]=0,f2[132]=(f2[132]|0)+-1),n3<<16>>16==1024){je();break a}else{o4=n3&65535,k3=f2[143]|0,f2[k3+(o4<<3)>>2]=(r2[1110]|0)==0?2:6,s2[551]=n3+1<<16>>16,f2[k3+(o4<<3)+4>>2]=h3,r2[1110]=0,o4=143;break a}case 125:{if(!(n3<<16>>16)){je();break a}o4=f2[143]|0,c3=n3+-1<<16>>16,s2[551]=c3,(f2[o4+((c3&65535)<<3)>>2]|0)==4&&(i3=s2[550]|0,i3<<16>>16&&(p3=f2[(f2[144]|0)+((i3&65535)+-1<<2)>>2]|0,(s2[p3+48>>1]|0)==c3<<16>>16)&&(qe(8),o4=f2[136]|0,f2[136]=o4+8,f2[o4>>2]=(f2[145]|0)+2,f2[o4+4>>2]=0,n3=f2[p3+40>>2]|0,f2[((n3|0)==0?p3+36|0:n3+4|0)>>2]=o4,f2[p3+40>>2]=o4),E()),o4=143;break}case 34:case 39:{K(a3),o4=143;break}case 92:{if(i3=fe()|0,i3)if((i3|0)<0){je();break a}else{f2[141]=b3;break a}else o4=140;break}case 47:{switch(s2[k3+4>>1]|0){case 47:{de();break}case 42:{H(1);break}default:{c3=s2[h3>>1]|0;i:do if(!(ce(c3)|0))c3<<16>>16==41&&Ae(f2[(f2[143]|0)+((n3&65535)<<3)+4>>2]|0)|0||(o4=101);else switch(c3<<16>>16){case 46:if(((s2[h3+-2>>1]|0)+-48&65535)<10){o4=101;break i}else break i;case 43:if((s2[h3+-2>>1]|0)==43){o4=101;break i}else break i;case 45:if((s2[h3+-2>>1]|0)==45){o4=101;break i}else break i;default:break i}while(!1);i:do if((o4|0)==101){if(o4=0,n3<<16>>16!=0&&(A3=f2[143]|0,x2=(n3&65535)+-1|0,c3<<16>>16==102?(f2[A3+(x2<<3)>>2]|0)==1:0)){if((s2[h3+-2>>1]|0)==111&&L(h3+-4|0)|0&&ke(f2[A3+(x2<<3)+4>>2]|0,136,3)|0)break}else o4=106;if((o4|0)==106&&c3<<16>>16==125&&(t3=f2[143]|0,i3=n3&65535,ae(f2[t3+(i3<<3)+4>>2]|0)|0||(f2[t3+(i3<<3)>>2]|0)==6))break;if(!(m2(h3)|0)){switch(c3<<16>>16){case 0:break i;case 47:{if(r2[1109]|0)break i;break}default:}if(o4=f2[130]|0,o4|0&&h3>>>0>=(f2[o4>>2]|0)>>>0&&h3>>>0<=(f2[o4+4>>2]|0)>>>0){ee(),r2[1109]=0,o4=143;break a}t3=f2[120]|0,i3=h3;do{if(i3>>>0<=t3>>>0)break;i3=i3+-2|0,f2[141]=i3,c3=s2[i3>>1]|0}while(!(ve(c3)|0));if(xe(c3)|0){do{if(i3>>>0<=t3>>>0)break;i3=i3+-2|0,f2[141]=i3}while(xe(s2[i3>>1]|0)|0);if(ne(i3)|0){ee(),r2[1109]=0,o4=143;break a}}r2[1109]=1,o4=143;break a}}while(!1);ee(),r2[1109]=0,o4=143;break a}}if((f2[142]|0)!=0&(s2[551]|0)==0){for(c3=f2[145]|0,i3=b3;;){if(i3>>>0>c3>>>0)break a;if(Re(s2[i3>>1]|0)|0)break;i3=i3+2|0}n3=Re(s2[c3>>1]|0)|0,B(n3?c3:c3+2|0)}break}case 96:if(i3=s2[550]|0,i3<<16>>16&&(C2=f2[(f2[144]|0)+((i3&65535)+-1<<2)>>2]|0,(f2[C2+4>>2]|0)==0)&&(f2[C2>>2]|0)==(b3|0)&&(s2[C2+48>>1]=(n3&65535)+1),n3<<16>>16==1024){je();break a}else{o4=n3&65535,k3=f2[143]|0,f2[k3+(o4<<3)>>2]=3,s2[551]=n3+1<<16>>16,f2[k3+(o4<<3)+4>>2]=h3,E(),o4=143;break a}default:(a3&65535)>127&a3<<16>>16!=160|(a3<<16>>16==92|(a3<<16>>16==95|(a3<<16>>16==36|((a3+-48&65535)<10|((a3|32)+-97&65535)<26))))?o4=140:o4=143}while(!1);a:do if((o4|0)==140)for(i3=f2[145]|0;;){if(i3=i3+2|0,o4=s2[i3>>1]|0,!((o4&65535)>127&o4<<16>>16!=160|(o4<<16>>16==92|(o4<<16>>16==95|(o4<<16>>16==36|((o4+-48&65535)<10|((o4|32)+-97&65535)<26)))))){o4=143;break a}f2[145]=i3}while(!1);if((o4|0)==143&&(o4=0,f2[141]=f2[145]),r2[1105]|0){a3=0;break}if(c3=f2[141]|0,(c3|0)==(h3|0))if(a3=s2[551]|0,w3&(a3<<16>>16==d3<<16>>16&e2)){if(a3=s2[f2[145]>>1]|0,Re(a3)|0)break;a3=d3,i3=1}else i3=w3;else a3<<16>>16==47?i3=(r2[1109]^1)&255:i3=(a3<<16>>16==96|(a3<<16>>16==34|(a3<<16>>16==39|((a3|32)<<16>>16==125|(a3<<16>>16==41|(ye(a3)|0))))))&1,a3=s2[551]|0,i3=(i3|0)!=0;h3=c3,n3=a3,w3=i3,a3=f2[145]|0}return(o4|0)==153&&(f2[145]=b3),a3|0}function u2(){var e2=0,a3=0,i3=0,c3=0,t3=0,b3=0,k3=0,l4=0,n3=0,u3=0,o4=0;u3=f2[145]|0,f2[145]=u3+12,e2=D(1)|0;e:do if(e2<<16>>16==116)if(i3=f2[145]|0,(s2[i3>>1]|0)==116&&(re(i3+2|0,234,6)|0)==0){if(e2=s2[i3+8>>1]|0,!(Ce(e2)|0))switch(e2<<16>>16){case 42:case 47:case 123:break;default:{e2=116,a3=1,i3=0,c3=0,o4=77;break e}}switch(f2[145]=i3+8,e2=D(1)|0,e2<<16>>16){case 102:{if(e2=f2[145]|0,re(e2+2|0,42,6)|0){e2=102,a3=1,i3=0,c3=1,o4=77;break e}if(a3=s2[e2+8>>1]|0,!(Ce(a3)|0)&&!(a3<<16>>16==47|(Qe(a3)|0))){e2=102,a3=1,i3=0,c3=1,o4=77;break e}if(f2[145]=e2+8,o4=Qe(D(1)|0)|0,f2[145]=e2,!o4){e2=102,a3=1,i3=0,c3=1,o4=77;break e}break}case 44:case 61:break;default:{c3=1,o4=12;break e}}f2[145]=i3,e2=116,a3=1,i3=0,c3=0,o4=77}else e2=116,a3=1,i3=0,c3=0,o4=77;else c3=0,o4=12;while(!1);e:do if((o4|0)==12){i3=f2[145]|0;a:do if(e2<<16>>16==46)switch(f2[145]=i3+2,(D(1)|0)<<16>>16){case 109:{if(e2=f2[145]|0,re(e2+2|0,48,6)|0||(a3=f2[141]|0,!(Se(a3)|0)&&(s2[a3>>1]|0)==46))break e;q(u3,u3,e2+8|0,2);break e}case 115:{if(e2=f2[145]|0,re(e2+2|0,214,10)|0||(a3=f2[141]|0,!(Se(a3)|0)&&(s2[a3>>1]|0)==46))break e;f2[145]=e2+12,e2=D(1)|0,t3=1,o4=40;break a}case 100:{if(e2=f2[145]|0,re(e2+2|0,224,8)|0||(a3=f2[141]|0,!(Se(a3)|0)&&(s2[a3>>1]|0)==46))break e;f2[145]=e2+10,e2=D(1)|0,t3=2,o4=40;break a}default:break e}else{do if(i3>>>0>(u3+12|0)>>>0&e2<<16>>16==115)if((re(i3+2|0,214,10)|0)==0&&Ce(s2[i3+12>>1]|0)|0){if(f2[145]=i3+12,e2=D(1)|0,a3=f2[145]|0,!(e2<<16>>16==44|(a3|0)==(i3+12|0))){if(e2<<16>>16!=102){t3=1,o4=40;break a}if(re(a3+2|0,42,6)|0){e2=102,i3=1;break}if(!(ve(s2[a3+8>>1]|0)|0)){e2=102,i3=1;break}}f2[145]=i3,e2=s2[i3>>1]|0,t3=0,o4=40;break a}else e2=115,i3=0;else{if(!(i3>>>0>(u3+10|0)>>>0&e2<<16>>16==100)){t3=0,o4=40;break a}if((re(i3+2|0,224,8)|0)==0&&Ce(s2[i3+10>>1]|0)|0)if(f2[145]=i3+10,(D(1)|0)<<16>>16==42)e2=42,i3=2;else{f2[145]=i3,e2=s2[i3>>1]|0,t3=0,o4=40;break a}else e2=100,i3=0}while(!1);a3=(i3|0)==0}while(!1);do if((o4|0)==40){if(e2<<16>>16!=40){if(a3=(t3|0)==0,!(a3&e2<<16>>16==123)){i3=t3;break}if(e2=f2[145]|0,s2[551]|0){f2[145]=e2+-2;break e}if(f2[145]=e2+2,(ge(f2[132]|0,0)|0)<<16>>16!=125){je();break e}if(f2[145]=(f2[145]|0)+2,n3=(D(1)|0)<<16>>16==102,e2=f2[145]|0,n3&&re(e2+2|0,42,6)|0){je();break e}if(f2[145]=e2+8,e2=D(1)|0,!(Qe(e2)|0)){je();break e}if(w2(u3,e2,0),e2=f2[128]|0,!(c3&(e2|0)!=0))break e;r2[e2+25>>0]=1;break e}if(e2=s2[551]|0,e2<<16>>16==1024){je();break e}if(a3=f2[145]|0,n3=f2[143]|0,f2[n3+((e2&65535)<<3)>>2]=5,s2[551]=e2+1<<16>>16,f2[n3+((e2&65535)<<3)+4>>2]=a3,(s2[f2[141]>>1]|0)==46)break e;if((s2[550]|0)==512){je();break e}switch(f2[145]=a3+2,c3=D(1)|0,q(u3,f2[145]|0,0,a3),e2=f2[141]|0,a3=s2[e2>>1]|0,a3<<16>>16!=116?(i3=f2[128]|0,r2[i3+26>>0]=0,a3<<16>>16==102&&ke(e2,282,6)|0?(r2[i3+25>>0]=1,a3=i3,e2=i3):(a3=i3,e2=i3)):(a3=(ke(e2+-2|0,112,4)|0)&1,e2=f2[128]|0,r2[e2+26>>0]=a3,a3=e2),t3|0&&(f2[a3+28>>2]=(t3|0)==1?5:7),n3=f2[144]|0,u3=s2[550]|0,s2[550]=u3+1<<16>>16,f2[n3+((u3&65535)<<2)>>2]=e2,c3<<16>>16){case 39:{K(39);break}case 34:{K(34);break}case 96:{W()|0?r2[1111]|0&&(u3=(f2[128]|0)+24|0,r2[u3>>0]=r2[u3>>0]|2):o4=59;break}default:o4=59}if((o4|0)==59){f2[145]=(f2[145]|0)+-2;break e}switch(e2=(f2[145]|0)+2|0,f2[145]=e2,(D(1)|0)<<16>>16){case 44:{f2[145]=(f2[145]|0)+2,D(1)|0,n3=f2[128]|0,f2[n3+4>>2]=e2,u3=f2[145]|0,f2[n3+16>>2]=u3,r2[n3+24>>0]=r2[n3+24>>0]|1,f2[145]=u3+-2;break e}case 41:{s2[551]=(s2[551]|0)+-1<<16>>16,u3=f2[128]|0,f2[u3+4>>2]=e2,f2[u3+12>>2]=(f2[145]|0)+2,r2[u3+24>>0]=r2[u3+24>>0]|1,v2(u3),s2[550]=(s2[550]|0)+-1<<16>>16;break e}default:{f2[145]=(f2[145]|0)+-2;break e}}}while(!1);switch(e2<<16>>16){case 42:case 39:case 34:{t3=i3,o4=79;break}default:o4=77}}while(!1);(o4|0)==77&&((f2[145]|0)==(u3+12|0)?f2[145]=u3+10:(t3=i3,o4=79));e:do if((o4|0)==79){if(!(((t3|0)!=2|e2<<16>>16==42)&(s2[551]|0)==0)){f2[145]=(f2[145]|0)+-2;break}a:do if(a3&&!(e2<<16>>16==92|(e2+-48&65535)<10)){i:do if(((e2&-33)+-65&65535)>=26){switch(e2<<16>>16){case 36:case 92:case 95:break i;default:}if((e2&65535)<=127)break a}while(!1);if(a3=f2[145]|0,X(e2)|0,(f2[145]|0)!=(a3|0)){if((D(1)|0)<<16>>16==61&&(l4=(f2[145]|0)+2|0,(s2[l4>>1]|0)!=61)){f2[145]=l4;i:do if((D(1)|0)<<16>>16==114&&(b3=f2[145]|0,(re(b3+2|0,446,12)|0)==0)&&(k3=s2[b3+14>>1]|0,!((k3+-48&65535)<10|((k3&-33)+-65&65535)<26))){switch(k3<<16>>16){case 36:case 92:case 95:break i;default:}if((k3&65535)<=127){if(f2[145]=b3+14,(D(1)|0)<<16>>16==40&&(f2[145]=(f2[145]|0)+2,n3=D(1)|0,Qe(n3)|0)){if(w2(u3,n3,0),r2[1105]|0||(e2=f2[128]|0,c3&(e2|0)!=0&&(r2[e2+25>>0]=1),f2[145]=(f2[145]|0)+2,(D(1)|0)<<16>>16==41))break e;f2[145]=(f2[145]|0)+-2;break e}f2[145]=b3}}while(!1);C(1,0),f2[145]=(f2[145]|0)+-2;break e}f2[145]=a3,e2=s2[a3>>1]|0}}while(!1);for(Qe(e2)|0||T(e2,t3,f2[132]|0,0),e2=f2[146]|0,a3=f2[145]|0;;){if(a3>>>0>=e2>>>0){o4=112;break}if(i3=s2[a3>>1]|0,Qe(i3)|0)break;n3=a3+2|0,f2[145]=n3,a3=n3}if((o4|0)==112){je();break}w2(u3,i3,t3),e2=f2[128]|0,c3&(e2|0)!=0&&(r2[e2+25>>0]=1)}while(!1)}function o3(e2,a3){e2=e2|0,a3=a3|0;var i3=0,r3=0,c3=0,t3=0,b3=0,k3=0,l4=0;e:for(;;){for(i3=D(1)|0;;){if(i3<<16>>16==125){i3=125;break e}if(t3=f2[145]|0,t3>>>0>(f2[146]|0)>>>0)break e;a:do if(a3)b3=1;else if(i3<<16>>16==116)if((s2[t3>>1]|0)==116&&(re(t3+2|0,234,6)|0)==0){if(i3=s2[t3+8>>1]|0,!(Ce(i3)|0))switch(i3<<16>>16){case 42:case 47:case 123:break;default:{b3=0,i3=116;break a}}switch(f2[145]=t3+8,i3=D(1)|0,i3<<16>>16){case 97:{l4=13;break}case 44:case 125:break;default:{t3=f2[145]|0,b3=1;break a}}i:do if((l4|0)==13){if(l4=0,c3=f2[145]|0,(s2[c3+2>>1]|0)!=115){t3=c3,b3=1,i3=97;break a}if(!(ve(s2[c3+4>>1]|0)|0)){t3=c3,b3=1,i3=97;break a}if(f2[145]=c3+4,i3=D(1)|0,i3<<16>>16!=97)switch(f2[145]=c3,i3<<16>>16){case 44:case 125:{t3=c3,b3=1,i3=97;break a}default:break i}if(i3=f2[145]|0,(s2[i3+2>>1]|0)==115&&ve(s2[i3+4>>1]|0)|0){f2[145]=i3+4,r3=D(1)|0;r:do if(r3<<16>>16==92|(r3+-48&65535)<10)i3=1;else{s:do if(((r3&-33)+-65&65535)>=26){switch(r3<<16>>16){case 36:case 92:case 95:break s;default:}i3=(r3&65535)<128;break r}while(!1);f2[145]=c3,t3=c3,b3=1,i3=97;break a}while(!1);if(f2[145]=c3,r3<<16>>16!=92&i3)break;t3=c3,b3=1,i3=97;break a}f2[145]=c3}while(!1);f2[145]=t3,b3=0,i3=116}else b3=0,i3=116;else b3=0;while(!1);if(Qe(i3)|0)K(i3),i3=(f2[145]|0)+2|0,f2[145]=i3;else if(X(i3)|0,i3=f2[145]|0,(i3|0)==(t3|0)){i3=t3;break}do if((D(1)|0)<<16>>16==97&&(k3=f2[145]|0,(s2[k3+2>>1]|0)==115)){r3=s2[k3+4>>1]|0;a:do if((r3+-48&65535)<10|((r3&-33)+-65&65535)<26)l4=35;else{switch(r3<<16>>16){case 36:case 92:case 95:{l4=35;break a}default:}(r3&65535)>127&&(l4=35)}while(!1);if((l4|0)==35&&(l4=0,!(Ce(r3)|0))){r3=i3,c3=t3;break}f2[145]=k3+4,r3=D(1)|0,c3=f2[145]|0,X(r3)|0,r3=f2[145]|0}else r3=i3,c3=t3;while(!1);if(z(c3,r3,t3,i3,0,e2,b3),i3=D(1)|0,i3<<16>>16==44){l4=38;break}}(l4|0)==38&&(l4=0,i3=f2[145]|0),f2[145]=i3+2}return i3|0}function h2(){var e2=0,a3=0,i3=0,c3=0,t3=0,b3=0;if(e2=D(1)|0,!(y2(0)|0)){t3=0,a3=0,c3=0,i3=1;e:for(;;){if(!i3){b3=33;break}a:do switch(e2<<16>>16){case 110:case 101:{if(I(e2)|0){b3=7;break e}switch(e2<<16>>16){case 109:{b3=29;break}case 102:{b3=26;break}case 108:{b3=18;break}default:i3=0}break}case 97:{e2=f2[145]|0,(re(e2,334,16)|0)==0&&(i3=s2[e2+16>>1]|0,i3<<16>>16==47|(Ce(i3)|0))?(f2[145]=e2+16,e2=t3,i3=c3,b3=32):(e2=97,i3=0);break}case 99:{if(e2=f2[145]|0,(re(e2+2|0,34,8)|0)==0&&(i3=s2[e2+10>>1]|0,i3<<16>>16==47|(Ce(i3)|0))){f2[145]=e2+10,e2=0,a3=1,i3=c3,b3=32;break a}(re(e2+2|0,428,8)|0)==0&&(i3=s2[e2+10>>1]|0,i3<<16>>16==47|(Ce(i3)|0))?(f2[145]=e2+10,e2=1,i3=c3,b3=32):(e2=99,i3=0);break}case 108:{b3=18;break}case 118:{e2=f2[145]|0,(s2[e2+2>>1]|0)==97&&(s2[e2+4>>1]|0)==114&&(i3=s2[e2+6>>1]|0,i3<<16>>16==47|(Ce(i3)|0))?(f2[145]=e2+6,e2=1,i3=c3,b3=32):(e2=118,i3=0);break}case 102:{b3=26;break}case 109:{b3=29;break}default:i3=0}while(!1);(b3|0)==18?(b3=0,e2=f2[145]|0,(s2[e2+2>>1]|0)==101&&(s2[e2+4>>1]|0)==116&&(i3=s2[e2+6>>1]|0,i3<<16>>16==47|(Ce(i3)|0))?(f2[145]=e2+6,e2=1,i3=c3,b3=32):(e2=108,i3=0)):(b3|0)==26?(b3=0,e2=f2[145]|0,(re(e2+2|0,200,14)|0)==0&&(i3=s2[e2+16>>1]|0,i3<<16>>16==47|(Ce(i3)|0))?(f2[145]=e2+16,e2=t3,i3=1,b3=32):(e2=102,i3=0)):(b3|0)==29&&(b3=0,e2=f2[145]|0,(re(e2+2|0,436,10)|0)==0&&(i3=s2[e2+12>>1]|0,i3<<16>>16==47|(Ce(i3)|0))?(f2[145]=e2+12,e2=t3,a3=1,i3=c3,b3=32):(e2=109,i3=0)),(b3|0)==32&&(b3=0,t3=e2,e2=D(1)|0,c3=i3,i3=1)}do if((b3|0)==7)b3=(f2[130]|0)+25|0,r2[b3>>0]=r2[b3>>0]|4,b3=(f2[145]|0)+2|0,f2[145]=b3,N(s2[b3>>1]|0);else if((b3|0)==33){if(t3){M(e2);break}e:do if(!(e2<<16>>16==92|(e2+-48&65535)<10)){a:do if(((e2&-33)+-65&65535)>=26){switch(e2<<16>>16){case 36:case 92:case 95:break a;default:}if((e2&65535)<=127)break e}while(!1);b3=f2[145]|0,R(e2)|0,e2=f2[145]|0,Z(b3,e2,b3,e2),e2=(f2[130]|0)+25|0,r2[e2>>0]=r2[e2>>0]|4,e2=s2[f2[145]>>1]|0}while(!1);if(a3){N(e2);break}else{C(c3,0);break}}while(!1);f2[145]=(f2[145]|0)+-2}}function w2(e2,a3,i3){e2=e2|0,a3=a3|0,i3=i3|0;var r3=0,c3=0,t3=0,b3=0,k3=0;switch(r3=(f2[145]|0)+2|0,a3<<16>>16){case 39:{K(39),c3=5;break}case 34:{K(34),c3=5;break}default:je()}do if((c3|0)==5){if(q(e2,r3,f2[145]|0,1),(i3|0)>0&&(f2[(f2[128]|0)+28>>2]=(i3|0)==1?4:6),f2[145]=(f2[145]|0)+2,b3=(D(0)|0)<<16>>16==119,t3=f2[145]|0,b3&&(s2[t3+2>>1]|0)==105&&(s2[t3+4>>1]|0)==116&&(s2[t3+6>>1]|0)==104){if(f2[145]=t3+8,(D(1)|0)<<16>>16!=123){f2[145]=t3;break}b3=f2[145]|0,r3=b3,c3=0;e:for(;;){f2[145]=r3+2,r3=D(1)|0;do if(r3<<16>>16!=39)if(a3=f2[145]|0,r3<<16>>16==34){K(34),e2=(f2[145]|0)+2|0,f2[145]=e2,r3=D(1)|0;break}else{r3=R(r3)|0,e2=f2[145]|0;break}else a3=f2[145]|0,K(39),e2=(f2[145]|0)+2|0,f2[145]=e2,r3=D(1)|0;while(!1);if(r3<<16>>16!=58){c3=21;break}switch(f2[145]=(f2[145]|0)+2,(D(1)|0)<<16>>16){case 39:{r3=f2[145]|0,K(39);break}case 34:{r3=f2[145]|0,K(34);break}default:{c3=25;break e}}switch(k3=(f2[145]|0)+2|0,qe(20),i3=f2[136]|0,f2[136]=i3+20,f2[i3>>2]=a3,f2[i3+4>>2]=e2,f2[i3+8>>2]=r3,f2[i3+12>>2]=k3,f2[i3+16>>2]=0,f2[((c3|0)==0?(f2[128]|0)+32|0:c3+16|0)>>2]=i3,f2[145]=(f2[145]|0)+2,(D(1)|0)<<16>>16){case 125:{c3=29;break e}case 44:break;default:{c3=27;break e}}r3=(f2[145]|0)+2|0,f2[145]=r3,c3=i3}if((c3|0)==21){f2[145]=t3;break}else if((c3|0)==25){f2[145]=t3;break}else if((c3|0)==27){f2[145]=t3;break}else if((c3|0)==29){k3=f2[128]|0,f2[k3+16>>2]=b3,f2[k3+12>>2]=(f2[145]|0)+2;break}}f2[145]=t3+-2}while(!1)}function d2(){var e2=0,a3=0,i3=0,r3=0,c3=0,t3=0,b3=0;e2=f2[145]|0,c3=(s2[e2>>1]|0)==123,f2[145]=e2+2,e2=D(1)|0,t3=c3?125:93;e:for(;!((t3|0)==(e2&65535|0)||(r3=f2[145]|0,r3>>>0>(f2[146]|0)>>>0));){e2<<16>>16==46&&(s2[r3+2>>1]|0)==46&&(s2[r3+4>>1]|0)==46?(f2[145]=r3+6,e2=le(D(1)|0)|0):b3=9;a:do if((b3|0)==9){b3=0;do if(c3){do if(e2<<16>>16==91)n2(0)|0,f2[145]=(f2[145]|0)+2,a3=r3;else{if(Qe(e2)|0){K(e2),f2[145]=(f2[145]|0)+2,a3=r3;break}if((e2+-48&65535)>=10){R(e2)|0,a3=f2[145]|0;break}e2=r3;i:for(;;){i3=e2+2|0,a3=s2[i3>>1]|0;r:do if((a3+-48&65535)>=10){switch(a3<<16>>16){case 67:case 68:case 70:case 97:case 65:case 99:case 100:case 102:case 46:case 66:case 69:case 79:case 88:case 95:case 98:case 101:case 110:case 111:case 120:break r;case 43:case 45:break;default:break i}switch(s2[e2>>1]|0){case 69:case 101:break;default:break i}}while(!1);e2=i3}f2[145]=i3,a3=r3}while(!1);if(e2=D(1)|0,e2<<16>>16==58){f2[145]=(f2[145]|0)+2,e2=le(D(1)|0)|0;break}a3>>>0>r3>>>0&&Z(r3,a3,r3,a3)}else if(e2<<16>>16==44){f2[145]=r3+2,e2=D(1)|0;break a}else{e2=le(e2)|0;break}while(!1);if(e2<<16>>16==61&&(e2=n2(0)|0),e2<<16>>16!=44)break e;f2[145]=(f2[145]|0)+2,e2=D(1)|0}while(!1)}}function v2(e2){e2=e2|0;var a3=0,i3=0,c3=0,t3=0,b3=0,k3=0;if((r2[e2+25>>0]|0)==0&&(r2[e2+26>>0]|0)==0){switch(k3=f2[145]|0,f2[145]=k3+2,(D(1)|0)<<16>>16){case 91:{if(f2[145]=(f2[145]|0)+2,t3=D(1)|0,Qe(t3)|0){c3=(f2[145]|0)+2|0,i3=f2[146]|0,b3=c3;e:for(;a3=s2[b3>>1]|0,!(b3>>>0>i3>>>0);){a:do if(!((a3+-48&65535)<10|((a3&-33)+-65&65535)<26)){switch(a3<<16>>16){case 36:case 92:case 95:break a;default:}if((a3&65535)<=127)break e}while(!1);if(!(a3<<16>>16!=92&((Ce(a3)|0)^1)))break;b3=b3+2|0}if(a3<<16>>16==t3<<16>>16&&(f2[145]=b3+2,(D(1)|0)<<16>>16==93)){switch(b3-c3>>1|0){case 4:{a3=(re(c3,350,8)|0)==0;break}case 5:{a3=(re(c3,358,10)|0)==0;break}case 7:{a3=(re(c3,368,14)|0)==0;break}default:a3=0}a3=a3^1}else a3=0}else a3=0;break}case 46:{f2[145]=(f2[145]|0)+2,D(1)|0,a3=f2[145]|0,i3=f2[146]|0,t3=a3;e:for(;!(t3>>>0>i3>>>0);){c3=s2[t3>>1]|0;a:do if(!((c3+-48&65535)<10|((c3&-33)+-65&65535)<26)){switch(c3<<16>>16){case 36:case 92:case 95:break a;default:}if((c3&65535)<=127)break e}while(!1);if(!(c3<<16>>16!=92&((Ce(c3)|0)^1)))break;t3=t3+2|0}if((t3|0)!=(a3|0)&&(s2[t3>>1]|0)!=92){switch(t3-a3>>1|0){case 4:{a3=(re(a3,350,8)|0)==0;break}case 5:{a3=(re(a3,358,10)|0)==0;break}case 7:{a3=(re(a3,368,14)|0)==0;break}default:a3=0}a3=a3^1}else a3=0;break}default:a3=0}f2[145]=k3,r2[e2+25>>0]=a3&1}}function p2(e2){e2=e2|0;e:do switch(e2<<16>>16){case 97:{e2=f2[145]|0,re(e2,334,16)|0?e2=0:(e2=s2[e2+16>>1]|0,e2=e2<<16>>16==47|(Ce(e2)|0));break}case 99:{if(e2=f2[145]|0,re(e2+2|0,34,8)|0&&re(e2+2|0,428,8)|0){e2=0;break e}e2=s2[e2+10>>1]|0,e2=e2<<16>>16==47|(Ce(e2)|0);break}case 101:{e2=f2[145]|0,re(e2+2|0,406,6)|0?e2=0:(e2=s2[e2+8>>1]|0,e2=e2<<16>>16==47|(Ce(e2)|0));break}case 102:{e2=f2[145]|0,re(e2+2|0,200,14)|0?e2=0:(e2=s2[e2+16>>1]|0,e2=e2<<16>>16==47|(Ce(e2)|0));break}case 103:{e2=f2[145]|0,re(e2+2|0,458,10)|0?e2=0:(e2=s2[e2+12>>1]|0,e2=e2<<16>>16==47|(Ce(e2)|0));break}case 105:{e2=f2[145]|0,(s2[e2>>1]|0)==105&&(re(e2+2|0,240,16)|0)==0?(e2=s2[e2+18>>1]|0,e2=e2<<16>>16==47|(Ce(e2)|0)):e2=0;break}case 108:{e2=f2[145]|0,(s2[e2+2>>1]|0)==101&&(s2[e2+4>>1]|0)==116?(e2=s2[e2+6>>1]|0,e2=e2<<16>>16==47|(Ce(e2)|0)):e2=0;break}case 109:{e2=f2[145]|0,re(e2+2|0,436,10)|0?e2=0:(e2=s2[e2+12>>1]|0,e2=e2<<16>>16==47|(Ce(e2)|0));break}case 110:{e2=f2[145]|0,re(e2+2|0,412,16)|0?e2=0:(e2=s2[e2+18>>1]|0,e2=e2<<16>>16==47|(Ce(e2)|0));break}case 116:{e2=f2[145]|0,(s2[e2>>1]|0)==116&&(re(e2+2|0,234,6)|0)==0?(e2=s2[e2+8>>1]|0,e2=e2<<16>>16==42|(e2<<16>>16==123|(e2<<16>>16==47|(Ce(e2)|0)))):e2=0;break}case 118:{e2=f2[145]|0,(s2[e2+2>>1]|0)==97&&(s2[e2+4>>1]|0)==114?(e2=s2[e2+6>>1]|0,e2=e2<<16>>16==47|(Ce(e2)|0)):e2=0;break}default:e2=0}while(!1);return e2|0}function y2(e2){e2=e2|0;var a3=0,i3=0,c3=0,t3=0,b3=0,k3=0,l4=0;if(b3=f2[145]|0,k3=s2[b3>>1]|0,k3<<16>>16==105)(re(b3+2|0,240,16)|0)==0&&(t3=s2[b3+18>>1]|0,t3<<16>>16==47|(Ce(t3)|0))?(a3=b3+18|0,l4=8):a3=0;else if(k3<<16>>16==116&&(re(b3+2|0,234,6)|0)==0)if(a3=s2[b3+8>>1]|0,Ce(a3)|0)a3=b3+8|0,l4=8;else switch(a3<<16>>16){case 42:case 47:case 123:{a3=b3+8|0,l4=8;break}default:a3=0}else a3=0;e:do if((l4|0)==8){f2[145]=a3,i3=D(e2^1)|0;a:do if(i3<<16>>16==92|(i3+-48&65535)<10)a3=0,l4=12;else if(((i3&-33)+-65&65535)<26)a3=1;else{switch(i3<<16>>16){case 36:case 92:case 95:{a3=1;break a}default:}a3=(i3&65535)>127,l4=12}while(!1);if((l4|0)==12&&!(i3<<16>>16==92|a3)){f2[145]=b3,a3=0;break}t3=f2[145]|0,R(i3)|0,c3=f2[145]|0,i3=D(1)|0;do if(i3<<16>>16==60)if(S()|0){i3=D(1)|0;break}else{je(),a3=1;break e}while(!1);if(!(k3<<16>>16==105|e2^1|i3<<16>>16==61)){f2[145]=b3,a3=0;break}a3^1|e2||(Z(t3,c3,t3,c3),e2=(f2[130]|0)+25|0,r2[e2>>0]=r2[e2>>0]|4);a:do if(k3<<16>>16==105)N(i3);else{i:for(;;){if(a3=f2[145]|0,a3>>>0>=(f2[146]|0)>>>0){l4=29;break}switch(i3<<16>>16){case 59:break a;case 61:break i;default:}if(Re(i3)|0){l4=29;break}f2[145]=a3+2,i3=D(0)|0}if((l4|0)==29&&i3<<16>>16!=61)break;f2[145]=a3+2,C(1,0)}while(!1);f2[145]=(f2[145]|0)+-2,a3=1}while(!1);return a3|0}function m2(e2){e2=e2|0;e:do switch(s2[e2>>1]|0){case 100:switch(s2[e2+-2>>1]|0){case 105:{e2=ke(e2+-4|0,54,2)|0;break e}case 108:{e2=ke(e2+-4|0,58,3)|0;break e}default:{e2=0;break e}}case 101:switch(s2[e2+-2>>1]|0){case 115:switch(s2[e2+-4>>1]|0){case 108:{e2=we(e2+-6|0,101)|0;break e}case 97:{e2=we(e2+-6|0,99)|0;break e}default:{e2=0;break e}}case 116:{e2=ke(e2+-4|0,64,4)|0;break e}case 117:{e2=ke(e2+-4|0,180,6)|0;break e}default:{e2=0;break e}}case 102:{if((s2[e2+-2>>1]|0)==111&&(s2[e2+-4>>1]|0)==101)switch(s2[e2+-6>>1]|0){case 99:{e2=ke(e2+-8|0,72,6)|0;break e}case 112:{e2=ke(e2+-8|0,84,2)|0;break e}default:{e2=0;break e}}else e2=0;break}case 107:{e2=ke(e2+-2|0,172,4)|0;break}case 110:{we(e2+-2|0,105)|0?e2=1:e2=ke(e2+-2|0,88,5)|0;break}case 111:{e2=we(e2+-2|0,100)|0;break}case 114:{e2=ke(e2+-2|0,98,7)|0;break}case 116:{e2=ke(e2+-2|0,112,4)|0;break}case 119:switch(s2[e2+-2>>1]|0){case 101:{e2=we(e2+-4|0,110)|0;break e}case 111:{e2=ke(e2+-4|0,120,3)|0;break e}default:{e2=0;break e}}default:e2=0}while(!1);return e2|0}function A2(){var e2=0,a3=0,i3=0,c3=0;e:do if(r2[1104]|0){for(e2=f2[133]<<1,a3=4;a3>>>0<e2>>>0;)a3=a3<<1;if(f2[149]=a3,f2[148]=a3+-1,e2=a3<<2,qe(e2),!(r2[1105]|0)){for(i3=f2[136]|0,f2[147]=i3,f2[136]=i3+e2,e2=f2[149]|0,a3=0;(a3|0)!=(e2|0);)f2[i3+(a3<<2)>>2]=0,a3=a3+1|0;for(a3=f2[148]|0,i3=f2[147]|0,e2=500;e2=f2[e2>>2]|0,!!e2;)(r2[e2+24>>0]|0)==4&&(c3=_(f2[e2+8>>2]|0,f2[e2+12>>2]|0)|0,f2[e2+20>>2]=c3,f2[e2+28>>2]=f2[i3+((a3&c3)<<2)>>2],f2[i3+((a3&c3)<<2)>>2]=e2),e2=e2+32|0;for(i3=f2[145]|0,a3=0,e2=496;;){if(e2=f2[e2>>2]|0,!e2){e2=26;break}if((f2[e2+20>>2]|0)==1&&(s2[f2[e2+8>>2]>>1]|0)==105&&J(e2,a3),!(f2[133]|0)){e2=24;break}a3=a3+1|0,e2=e2+52|0}a:do if((e2|0)==24)f2[145]=i3;else if((e2|0)==26&&(c3=f2[133]|0,f2[145]=i3,c3|0))for(a3=f2[149]|0,i3=f2[147]|0,c3=0;;){if((c3|0)==(a3|0))break a;for(e2=i3+(c3<<2)|0;e2=f2[e2>>2]|0,!!e2;)(r2[e2+24>>0]|0)==4&&(r2[e2+24>>0]=1,f2[e2+20>>2]=-1),e2=e2+28|0;c3=c3+1|0}while(!1);f2[147]=0}}else for(e2=500;;){if(e2=f2[e2>>2]|0,!e2)break e;(r2[e2+24>>0]|0)==4&&(r2[e2+24>>0]=1,f2[e2+20>>2]=-1),e2=e2+32|0}while(!1)}function g(){var e2=0,a3=0,i3=0;a3=f2[145]|0;e:do if((re(a3+2|0,382,12)|0)==0&&(e2=s2[a3+14>>1]|0,e2<<16>>16==47|(Ce(e2)|0))){if(f2[145]=a3+14,e2=D(0)|0,!(p2(e2)|0)){f2[145]=a3,e2=0;break}switch(e2<<16>>16){case 105:case 116:{if(y2(1)|0){e2=1;break e}switch(e2<<16>>16){case 109:{a3=20;break}case 108:{a3=9;break}default:a3=21}break}case 99:{(s2[(f2[145]|0)+2>>1]|0)==111?a3=9:(e2=99,a3=21);break}case 102:{e2=8,a3=10;break}case 118:case 108:{a3=9;break}case 109:{a3=20;break}default:a3=21}(a3|0)==9?(e2=e2<<16>>16==99?5:3,a3=10):(a3|0)==20&&(f2[145]=(f2[145]|0)+12,e2=D(1)|0,a3=21);do if((a3|0)==10){if(f2[145]=(f2[145]|0)+(e2<<1),e2=D(1)|0,e2<<16>>16==101&&(i3=f2[145]|0,(re(i3+2|0,406,6)|0)==0)&&(i3=s2[i3+8>>1]|0,i3<<16>>16==47|(Ce(i3)|0))){N(101);break}a:do if(e2<<16>>16==92|(e2+-48&65535)<10)e2=1;else{i:do if(((e2&-33)+-65&65535)>=26){switch(e2<<16>>16){case 36:case 92:case 95:break i;default:}if((e2&65535)<=127){e2=1;break a}}while(!1);R(e2)|0,e2=0}while(!1);C(e2,0)}else(a3|0)==21&&N(e2);while(!1);f2[145]=(f2[145]|0)+-2,e2=1}else e2=0;while(!1);return e2|0}function C(e2,a3){e2=e2|0,a3=a3|0;var i3=0,r3=0,c3=0;e:for(;i3=f2[145]|0,!(i3>>>0>(f2[146]|0)>>>0||(r3=s2[i3>>1]|0,r3<<16>>16==59|r3<<16>>16==44&a3));)a:do if(Re(r3)|0)if(e2){f2[145]=i3+2,e2=1;break}else if(j(a3)|0){e2=1;break}else break e;else{if(xe(r3)|0){f2[145]=i3+2;break}if(!(r3<<16>>16!=125|(s2[551]|0)==0))break e;switch(r3<<16>>16){case 123:case 91:case 40:case 60:if(i3=S()|0,i3){e2=e2&(i3^1);break a}else break e;default:}if(r3<<16>>16==47?c3=(s2[i3+2>>1]|0)==42:c3=0,U(r3,1)|0){if(i3=f2[145]|0,r3<<16>>16!=47){f2[145]=i3+2,e2=0;break}if(r3=(Re(s2[i3>>1]|0)|0)^1,c3^1|r3||(f2[145]=i3+-2,H(1),i3=f2[145]|0),f2[145]=i3+2,e2|r3)break;if(j(a3)|0){e2=1;break}else break e}i:do if(r3<<16>>16==92|(r3+-48&65535)<10)(r3+-48&65535)<10?i3=28:i3=29;else if(((r3&-33)+-65&65535)>=26){switch(r3<<16>>16){case 36:case 92:case 95:{i3=28;break i}default:}(r3&65535)<=127?i3=29:i3=28}else i3=28;while(!1);if((i3|0)==28){e2=f2[145]|0,R(r3)|0,e2=Q(e2,f2[145]|0)|0;break}else if((i3|0)==29){f2[145]=(f2[145]|0)+2,e2=1;break}}while(!1)}function x(e2,a3){e2=e2|0,a3=a3|0;var i3=0,r3=0,c3=0,b3=0,k3=0,l4=0;k3=f2[e2>>2]|0,i3=s2[k3>>1]|0;do if(i3<<16>>16==92)if((k3+2|0)>>>0<a3>>>0&&(s2[k3+2>>1]|0)==117){if((k3+4|0)>>>0<a3>>>0&&(s2[k3+4>>1]|0)==123){for(c3=0,r3=k3+6|0;!(r3>>>0>=a3>>>0||(i3=s2[r3>>1]|0,i3<<16>>16==125));)c3=(i3&15|c3<<4)+(((i3&65535)>>>6)*9|0)|0,r3=r3+2|0;i3=(r3|0)==(a3|0),r3=i3?k3+2|0:r3+2|0,i3=i3?92:c3;break}if((a3-(k3+4)|0)>=8){for(i3=t2[k3+4>>1]|0,i3=((i3>>>6)*9|0)+(i3&15)|0,r3=k3+6|0,c3=1;(c3|0)!=4;)l4=t2[r3>>1]|0,i3=(l4&15|i3<<4)+((l4>>>6)*9|0)|0,r3=r3+2|0,c3=c3+1|0;if((i3&-1024|0)==55296&&(k3+24|0)>>>0<=a3>>>0&&(s2[k3+12>>1]|0)==92&&(s2[k3+14>>1]|0)==117&&(b3=s2[k3+16>>1]|0,b3<<16>>16!=123)){for(r3=3,c3=(((b3&65535)>>>6)*9|0)+(b3&15)|0;(r3|0)!=6;)l4=t2[k3+12+(r3<<1)>>1]|0,r3=r3+1|0,c3=(l4&15|c3<<4)+((l4>>>6)*9|0)|0;l4=(c3&-1024|0)==56320,r3=l4?k3+24|0:k3+12|0,i3=l4?(i3<<10)+-56613888+c3|0:i3}else r3=k3+12|0}else r3=k3+2|0,i3=92}else r3=k3+2|0,i3=92;else(k3+2|0)>>>0<a3>>>0&(i3&-1024)<<16>>16==-10240?(l4=s2[k3+2>>1]|0,r3=(l4&-1024)<<16>>16==-9216?k3+4|0:k3+2|0,i3=(l4&-1024)<<16>>16==-9216?((i3&65535)<<10)+-56613888+(l4&65535)|0:i3&65535):(r3=k3+2|0,i3=i3&65535);while(!1);return f2[e2>>2]=r3,i3|0}function S(){var e2=0,a3=0,i3=0,r3=0;e2=f2[145]|0,a3=s2[e2>>1]|0;e:do switch(a3<<16>>16){case 60:{for(i3=0;;){a:for(;;){if(e2>>>0>(f2[146]|0)>>>0){e2=0;break e}switch(a3=s2[e2>>1]|0,a3<<16>>16){case 60:{r3=6;break a}case 62:{r3=7;break a}case 123:case 91:case 40:break;default:{r3=10;break a}}if(!(S()|0)){e2=0;break e}e2=f2[145]|0}if((r3|0)==6)r3=0,a3=i3+1|0;else if((r3|0)==7)if(r3=0,(s2[e2+-2>>1]|0)!=61){if(a3=i3+-1|0,!a3)break}else a3=i3;else(r3|0)==10&&(r3=0,U(a3,0)|0,e2=f2[145]|0,a3=i3);e2=e2+2|0,f2[145]=e2,i3=a3}f2[145]=e2+2,e2=1;break}case 40:{i3=41,r3=15;break}default:i3=a3<<16>>16==91?93:125,r3=15}while(!1);e:do if((r3|0)==15){for(;;){if(a3=e2+2|0,f2[145]=a3,a3>>>0>(f2[146]|0)>>>0){e2=0;break e}if(a3=s2[a3>>1]|0,(i3|0)==(a3&65535|0))break;switch(a3<<16>>16){case 123:case 91:case 40:{if(!(S()|0)){e2=0;break e}e2=(f2[145]|0)+-2|0,f2[145]=e2;break}default:U(a3,0)|0,e2=f2[145]|0}}f2[145]=e2+4,e2=1}while(!1);return e2|0}function O(){var e2=0,a3=0,i3=0,r3=0,c3=0;e:do if(s2[551]|0)e2=1;else{switch(f2[142]|0){case 0:case 1:case-1:break;default:{e2=1;break e}}switch(r3=f2[141]|0,e2=s2[r3>>1]|0,e2<<16>>16){case 44:case 61:case 46:case 58:case 63:case 38:case 124:case 60:{e2=1;break e}case 62:{if((s2[r3+-2>>1]|0)==61){e2=1;break e}break}default:}if((e2&65535)>127&e2<<16>>16!=160|(e2<<16>>16==92|(e2<<16>>16==95|(e2<<16>>16==36|((e2+-48&65535)<10|((e2|32)+-97&65535)<26))))){for(e2=f2[120]|0,i3=r3;!(i3>>>0<=e2>>>0);)if(a3=i3+-2|0,c3=s2[a3>>1]|0,(c3&65535)>127&c3<<16>>16!=160|(c3<<16>>16==92|(c3<<16>>16==95|(c3<<16>>16==36|((c3+-48&65535)<10|((c3|32)+-97&65535)<26)))))i3=a3;else break;Q(i3,r3+2|0)|0?e2=1:(r3-i3|0)==12&&(s2[i3>>1]|0)==101?e2=(re(i3+2|0,394,12)|0)==0:e2=0}else e2=0}while(!1);return e2|0}function E(){var e2=0,a3=0,i3=0,r3=0;a3=f2[146]|0,i3=f2[145]|0;e:for(;;){if(e2=i3+2|0,i3>>>0>=a3>>>0){a3=15;break}switch(s2[e2>>1]|0){case 96:{a3=8;break e}case 36:{if((s2[i3+4>>1]|0)==123){a3=5;break e}break}case 92:{e2=i3+4|0;break}default:}i3=e2}do if((a3|0)==5)if(a3=i3+4|0,f2[145]=a3,e2=s2[551]|0,e2<<16>>16==1024){je();break}else{r3=f2[143]|0,f2[r3+((e2&65535)<<3)>>2]=4,s2[551]=e2+1<<16>>16,f2[r3+((e2&65535)<<3)+4>>2]=a3;break}else(a3|0)==8?(f2[145]=e2,a3=f2[143]|0,i3=(s2[551]|0)+-1<<16>>16,s2[551]=i3,(f2[a3+((i3&65535)<<3)>>2]|0)!=3&&je(),e2=s2[550]|0,e2<<16>>16&&(r3=f2[(f2[144]|0)+((e2&65535)+-1<<2)>>2]|0,((t2[551]|0)+1|0)==(t2[r3+48>>1]|0))&&(f2[r3+44>>2]=f2[145],s2[r3+48>>1]=0)):(a3|0)==15&&(f2[145]=e2,je());while(!1)}function I(e2){e2=e2|0;var a3=0,i3=0;switch(e2<<16>>16){case 101:{e2=f2[145]|0,(re(e2+2|0,406,6)|0)==0&&(a3=s2[e2+8>>1]|0,a3<<16>>16==47|(Ce(a3)|0))?(a3=e2,e2=e2+8|0,i3=6):e2=0;break}case 110:{e2=f2[145]|0,(re(e2+2|0,412,16)|0)==0&&(a3=s2[e2+18>>1]|0,a3<<16>>16==47|(Ce(a3)|0))?(a3=e2,e2=e2+18|0,i3=6):e2=0;break}default:e2=0}if((i3|0)==6){f2[145]=e2,e2=D(1)|0;e:do if(e2<<16>>16==92|(e2+-48&65535)<10)e2=0;else{a:do if(((e2&-33)+-65&65535)>=26){switch(e2<<16>>16){case 36:case 92:case 95:break a;default:}if((e2&65535)<=127){e2=0;break e}}while(!1);a3=f2[145]|0,R(e2)|0,e2=f2[145]|0,Z(a3,e2,a3,e2),e2=1,a3=(f2[145]|0)+-2|0}while(!1);f2[145]=a3}return e2|0}function U(e2,a3){e2=e2|0,a3=a3|0;e:do if(e2<<16>>16!=47){if(Qe(e2)|0){K(e2),e2=1;break}if(e2<<16>>16==96)for(e2=f2[145]|0;;){if(a3=e2+2|0,f2[145]=a3,a3>>>0>(f2[146]|0)>>>0){e2=1;break e}switch(s2[a3>>1]|0){case 96:{e2=1;break e}case 92:{e2=e2+4|0,f2[145]=e2;break}case 36:{e2=e2+4|0,(s2[e2>>1]|0)==123?(f2[145]=e2,S()|0,e2=(f2[145]|0)+-2|0,f2[145]=e2):e2=a3;break}default:e2=a3}}else e2=0}else switch(s2[(f2[145]|0)+2>>1]|0){case 47:{de(),e2=1;break e}case 42:{H(a3^1),e2=1;break e}default:{e2=0;break e}}while(!1);return e2|0}function N(e2){e2=e2|0;var a3=0,i3=0,r3=0;e:do if(Qe(e2)|0)K(e2),f2[145]=(f2[145]|0)+2,(D(1)|0)<<16>>16==123&&S()|0;else{for(a3=e2;e2=f2[145]|0,i3=a3<<16>>16==123,!(i3|e2>>>0>=(f2[146]|0)>>>0);){switch(a3<<16>>16){case 59:break e;case 47:{r3=9;break}case 91:case 40:case 60:{if(!(S()|0))break e;break}default:a3<<16>>16==96|(Qe(a3)|0)?r3=9:r3=10}(r3|0)==9&&(U(a3,0)|0,e2=f2[145]|0,r3=10),(r3|0)==10&&(r3=0,f2[145]=e2+2),a3=D(1)|0}i3&&S()|0}while(!1)}function T(e2,a3,i3,s3){e2=e2|0,a3=a3|0,i3=i3|0,s3=s3|0,r2[1104]=1;e:do switch(a3|0){case 1:{s3=f2[145]|0,X(e2)|0,z(s3,f2[145]|0,0,0,3,i3,0);break}case 2:{he(i3,0);break}default:{switch(e2<<16>>16){case 42:case 123:break;default:{if(a3=f2[145]|0,X(e2)|0,z(a3,f2[145]|0,0,0,1,i3,s3),(D(1)|0)<<16>>16!=44)break e;f2[145]=(f2[145]|0)+2,e2=D(1)|0}}switch(e2<<16>>16){case 123:{f2[145]=(f2[145]|0)+2,ge(i3,s3)|0;break e}case 42:{he(i3,s3);break e}default:break e}}}while(!1)}function $(e2){e2=e2|0;e:do switch(e2<<16>>16){case 45:case 43:{e2=(s2[(f2[145]|0)+2>>1]|0)!=e2<<16>>16;break}case 33:{e2=(s2[(f2[145]|0)+2>>1]|0)==61;break}case 61:case 62:case 60:case 94:case 124:case 38:case 37:case 47:case 42:case 46:case 63:case 96:case 91:case 40:{e2=1;break}case 105:{if(e2=f2[145]|0,(s2[e2+2>>1]|0)==110&&ve(s2[e2+4>>1]|0)|0){e2=1;break e}(re(e2,72,12)|0)==0&&(s2[e2+12>>1]|0)==99&&(s2[e2+14>>1]|0)==101&&(s2[e2+16>>1]|0)==111&&(s2[e2+18>>1]|0)==102?e2=ve(s2[e2+20>>1]|0)|0:e2=0;break}default:e2=0}while(!1);return e2|0}function q(e2,a3,i3,c3){e2=e2|0,a3=a3|0,i3=i3|0,c3=c3|0;var t3=0,b3=0;qe(56),b3=f2[136]|0,f2[136]=b3+56,t3=f2[128]|0,f2[((t3|0)==0?496:t3+52|0)>>2]=b3,f2[129]=t3,f2[128]=b3,f2[b3+8>>2]=e2,(c3|0)==2?(e2=3,t3=i3):(e2=(c3|0)==1?1:2,t3=(c3|0)==1?i3+2|0:0),f2[b3+12>>2]=t3,f2[b3+28>>2]=e2,f2[b3>>2]=a3,f2[b3+4>>2]=i3,f2[b3+16>>2]=0,f2[b3+20>>2]=c3,r2[b3+24>>0]=(c3|0)==1&1,r2[b3+25>>0]=0,r2[b3+26>>0]=0,f2[b3+52>>2]=0,f2[b3+32>>2]=0,f2[b3+32+4>>2]=0,f2[b3+32+8>>2]=0,f2[b3+32+12>>2]=0,s2[b3+32+16>>1]=0,f2[132]=(f2[132]|0)+1,(c3|0)==1|(c3|0)==2&&(r2[1106]=1)}function P(){var e2=0,a3=0,i3=0;e2=f2[145]|0;e:for(;;){if(e2>>>0>(f2[146]|0)>>>0){e2=0;break}if(a3=s2[e2>>1]|0,a3<<16>>16==125){e2=125;break}a:do if(Qe(a3)|0)K(a3);else{switch(a3<<16>>16){case 47:break;case 92:if((fe()|0)<0){i3=11;break e}else break a;default:break a}switch(s2[e2+2>>1]|0){case 47:{de();break a}case 42:{H(1);break a}default:break a}}while(!1);e2=(f2[145]|0)+2|0,f2[145]=e2}return(i3|0)==11&&(je(),e2=0),e2|0}function j(e2){e2=e2|0;var a3=0,i3=0;i3=f2[145]|0,a3=D(1)|0;e:do if(a3<<16>>16==44&e2)a3=1;else{switch(a3<<16>>16){case 46:case 58:case 63:case 38:case 124:{f2[145]=(f2[145]|0)+2,a3=1;break e}case 61:{if(a3=f2[145]|0,(s2[a3+2>>1]|0)==62){f2[145]=a3+4,a3=1;break e}break}case 101:{if(a3=f2[145]|0,(re(a3+2|0,394,12)|0)==0&&ve(s2[a3+14>>1]|0)|0){f2[145]=a3+14,a3=1;break e}break}default:}f2[145]=i3,a3=0}while(!1);return a3|0}function B(e2){e2=e2|0;var a3=0,i3=0,c3=0;s2[551]|0||(i3=f2[145]|0,f2[145]=e2,a3=D(1)|0,(f2[142]|0)==-1?(e2=s2[f2[141]>>1]|0,e2<<16>>16==47?e2=(r2[1109]^1)&255:e2=(e2<<16>>16==96|(e2<<16>>16==34|(e2<<16>>16==39|((e2|32)<<16>>16==125|(e2<<16>>16==41|(ye(e2)|0))))))&1,!(a3<<16>>16==44|(e2|0)==0)&&!($(a3)|0)&&(c3=10)):!(O()|0)&&!(ie(a3)|0)&&(c3=10),(c3|0)==10&&(f2[142]=0),f2[145]=i3)}function M(e2){e2=e2|0;for(var a3=0,i3=0,c3=0;i3=f2[145]|0,!(i3>>>0>(f2[146]|0)>>>0||(c3=f2[130]|0,e2=le(e2)|0,a3=f2[145]|0,(a3|0)==(i3|0)));){for(i3=(c3|0)==0?500:c3+32|0;i3=f2[i3>>2]|0,!!i3;)r2[i3+25>>0]=r2[i3+25>>0]|4,i3=i3+32|0;switch(e2<<16>>16){case 61:case 58:{f2[145]=a3+2,C(1,1),e2=f2[145]|0,a3=e2,e2=s2[e2>>1]|0;break}default:}if(e2<<16>>16!=44)break;f2[145]=a3+2,e2=D(1)|0}}function z(e2,a3,i3,s3,c3,t3,b3){e2=e2|0,a3=a3|0,i3=i3|0,s3=s3|0,c3=c3|0,t3=t3|0,b3=b3|0;var k3=0,l4=0;k3=f2[147]|0;e:do if(k3|0)for(l4=_(e2,a3)|0,k3=k3+((f2[148]&l4)<<2)|0;;){if(k3=f2[k3>>2]|0,!k3)break e;do if((r2[k3+24>>0]|0)==4&&(f2[k3+20>>2]|0)==(l4|0)){if(b3&&(r2[k3+25>>0]&4)==0)break;F(f2[k3+8>>2]|0,f2[k3+12>>2]|0,e2,a3)|0&&pe(k3,i3,s3,c3,t3)}while(!1);k3=k3+28|0}while(!1)}function D(e2){e2=e2|0;var a3=0,i3=0,r3=0;i3=f2[145]|0;e:do{a3=s2[i3>>1]|0;a:do if(a3<<16>>16!=47)if(e2){if(Ce(a3)|0)break;break e}else{if(xe(a3)|0)break;break e}else switch(s2[i3+2>>1]|0){case 47:{de();break a}case 42:{H(e2);break a}default:{a3=47;break e}}while(!1);r3=f2[145]|0,i3=r3+2|0,f2[145]=i3}while(r3>>>0<(f2[146]|0)>>>0);return a3|0}function F(e2,a3,i3,r3){e2=e2|0,a3=a3|0,i3=i3|0,r3=r3|0;var s3=0,c3=0;c3=b2,b2=b2+16|0,f2[c3+4>>2]=e2,f2[c3>>2]=i3,(a3-e2|0)==(r3-i3|0)&&(re(e2,i3,a3-e2|0)|0)==0?i3=1:s3=3;e:do if((s3|0)==3){for(;e2>>>0<a3>>>0&i3>>>0<r3>>>0;){if(s3=x(c3+4|0,a3)|0,(s3|0)!=(x(c3,r3)|0)){i3=0;break e}e2=f2[c3+4>>2]|0,i3=f2[c3>>2]|0}i3=(e2|0)==(a3|0)&(i3|0)==(r3|0)}while(!1);return b2=c3,i3|0}function G(){var e2=0,a3=0,i3=0,r3=0;f2[142]=0,e2=f2[145]|0;e:for(;f2[145]=e2+2,!(e2>>>0>=(f2[146]|0)>>>0||(i3=D(1)|0,e2=f2[145]|0,i3=le(i3)|0,a3=f2[145]|0,(a3|0)==(e2|0)));)switch(i3<<16>>16){case 44:{e2=a3;break}case 58:{r3=5;break e}case 61:{r3=6;break e}default:{r3=7;break e}}(r3|0)==5?f2[142]=1:(r3|0)==6?f2[142]=-1:(r3|0)==7&&Re(i3)|0&&(f2[145]=a3+-2)}function H(e2){e2=e2|0;var a3=0,i3=0,r3=0;a3=(f2[145]|0)+2|0,f2[145]=a3,r3=f2[146]|0;e:do if(e2){for(;;){if(e2=a3+2|0,a3>>>0>=r3>>>0)break e;if((s2[e2>>1]|0)==42&&(s2[a3+4>>1]|0)==47)break;a3=e2}e2=a3+4|0}else{for(;;){if(e2=a3+2|0,a3>>>0>=r3>>>0||(i3=s2[e2>>1]|0,Re(i3)|0))break e;if(i3<<16>>16==42&&(s2[a3+4>>1]|0)==47)break;a3=e2}e2=a3+4|0}while(!1);f2[145]=e2}function J(e2,a3){e2=e2|0,a3=a3|0;var i3=0,s3=0;switch(f2[145]=(f2[e2+8>>2]|0)+12,i3=D(1)|0,s3=(r2[e2+25>>0]|0)!=0,s3&&(f2[145]=(f2[145]|0)+8,i3=D(1)|0),f2[e2+28>>2]|0){case 4:{f2[145]=(f2[145]|0)+12,T(D(1)|0,1,a3,0);break}case 6:{f2[145]=(f2[145]|0)+10,T(D(1)|0,2,a3,0);break}default:Qe(i3)|0||T(i3,0,a3,s3)}}function K(e2){e2=e2|0;var a3=0,i3=0,r3=0,c3=0;for(c3=f2[146]|0,a3=f2[145]|0;;){if(r3=a3+2|0,a3>>>0>=c3>>>0){a3=9;break}if(i3=s2[r3>>1]|0,i3<<16>>16==e2<<16>>16){a3=10;break}if(i3<<16>>16==92)i3=a3+4|0,(s2[i3>>1]|0)==13?(a3=a3+6|0,a3=(s2[a3>>1]|0)==10?a3:i3):a3=i3;else if(Re(i3)|0){a3=9;break}else a3=r3}(a3|0)==9?(f2[145]=r3,je()):(a3|0)==10&&(f2[145]=r3)}function L(e2){e2=e2|0;var a3=0,i3=0;if(a3=s2[e2>>1]|0,Ce(a3)|0)i3=3;else switch(a3<<16>>16){case 41:case 125:case 93:{i3=3;break}default:e2=0}e:do if((i3|0)==3){for(i3=f2[120]|0;!(e2>>>0<=i3>>>0||(e2=e2+-2|0,!(Ce(a3)|0)));)a3=s2[e2>>1]|0;switch(a3<<16>>16){case 41:case 125:case 93:{e2=1;break e}default:}e2=(se(a3)|0)^1}while(!1);return e2|0}function Q(e2,a3){switch(e2=e2|0,a3=a3|0,a3-e2>>1|0){case 3:{a3=(re(e2,256,6)|0)==0;break}case 5:{re(e2,262,10)|0?a3=(re(e2,272,10)|0)==0:a3=1;break}case 6:{(re(e2,282,12)|0)!=0&&(re(e2,294,12)|0)!=0?a3=(re(e2,306,12)|0)==0:a3=1;break}case 8:{re(e2,318,16)|0?a3=(re(e2,334,16)|0)==0:a3=1;break}default:a3=0}return a3|0}function R(e2){e2=e2|0;for(var a3=0;;){if(e2<<16>>16==92){if(e2=fe()|0,(e2|0)<0){e2=0;break}e2?(e2=(f2[145]|0)+2|0,f2[145]=e2,e2=s2[e2>>1]|0):(e2=92,a3=7)}else a3=7;if((a3|0)==7){if(a3=0,Ce(e2)|0||se(e2)|0)break;if(e2=(f2[145]|0)+2|0,f2[145]=e2,e2=s2[e2>>1]|0,!(e2<<16>>16)){e2=0;break}}}return e2|0}function V(e2,a3){e2=e2|0,a3=a3|0;var i3=0,r3=0,c3=0,t3=0;return i3=f2[145]|0,r3=s2[i3>>1]|0,c3=(e2|0)==(a3|0)?0:e2,t3=(e2|0)==(a3|0)?0:a3,r3<<16>>16==97&&(f2[145]=i3+4,i3=D(1)|0,e2=f2[145]|0,Qe(i3)|0?(K(i3),a3=(f2[145]|0)+2|0,f2[145]=a3):(X(i3)|0,a3=f2[145]|0),r3=D(1)|0,i3=f2[145]|0),(i3|0)!=(e2|0)&&Z(e2,a3,c3,t3),r3|0}function W(){var e2=0,a3=0,i3=0,c3=0;a3=f2[145]|0,r2[1111]=0,i3=f2[146]|0;e:for(;;){if(e2=a3+2|0,a3>>>0>=i3>>>0){e2=0;break}switch(s2[e2>>1]|0){case 96:{c3=8;break e}case 92:{e2=a3+4|0;break}case 13:{r2[1111]=1;break}case 36:{if((s2[a3+4>>1]|0)==123){e2=0;break e}break}default:}a3=e2}return(c3|0)==8&&(f2[145]=e2,e2=1),e2|0}function X(e2){e2=e2|0;e:for(;;){a:do if(!((e2+-48&65535)<10|((e2&-33)+-65&65535)<26)){switch(e2<<16>>16){case 36:case 92:case 95:break a;default:}if((e2&65535)<=127)break e}while(!1);if(Ce(e2)|0)break;if(e2<<16>>16==92&&(fe()|0)<0){e2=0;break}e2=(f2[145]|0)+2|0,f2[145]=e2,e2=s2[e2>>1]|0}return e2|0}function Y(){var e2=0,a3=0,i3=0;i3=f2[146]|0,a3=f2[145]|0;e:for(;;){if(e2=a3+2|0,a3>>>0>=i3>>>0){a3=6;break}switch(s2[e2>>1]|0){case 13:case 10:{a3=6;break e}case 93:{a3=7;break e}case 92:{e2=a3+4|0;break}default:}a3=e2}return(a3|0)==6?(f2[145]=e2,je(),e2=0):(a3|0)==7&&(f2[145]=e2,e2=93),e2|0}function Z(e2,a3,i3,s3){e2=e2|0,a3=a3|0,i3=i3|0,s3=s3|0;var c3=0,t3=0;qe(36),c3=f2[136]|0,f2[136]=c3+36,t3=f2[130]|0,f2[((t3|0)==0?500:t3+32|0)>>2]=c3,f2[130]=c3,f2[c3>>2]=e2,f2[c3+4>>2]=a3,f2[c3+8>>2]=i3,f2[c3+12>>2]=s3,f2[c3+16>>2]=f2[131],f2[c3+20>>2]=-1,r2[c3+24>>0]=1,r2[c3+25>>0]=0,f2[c3+32>>2]=0,r2[1106]=1}function _(e2,a3){e2=e2|0,a3=a3|0;var i3=0,r3=0,f3=0;for(r3=e2,f3=0;;){if(r3>>>0>=a3>>>0){r3=6;break}if(i3=s2[r3>>1]|0,i3<<16>>16==92|(i3&-1024)<<16>>16==-10240){r3=5;break}i3=(f3+(i3&65535)|0)*1025|0,r3=r3+2|0,f3=i3>>>6^i3}return(r3|0)==5?i3=be(e2,a3)|0:(r3|0)==6&&(i3=f3*9|0,i3=(i3>>>11^i3)*32769|0),i3|0}function ee(){var e2=0,a3=0;e:for(;;){if(e2=f2[145]|0,f2[145]=e2+2,e2>>>0>=(f2[146]|0)>>>0){a3=7;break}switch(s2[e2+2>>1]|0){case 13:case 10:{a3=7;break e}case 47:break e;case 91:{Y()|0;break}case 92:{f2[145]=e2+4;break}default:}}(a3|0)==7&&je()}function ae(e2){switch(e2=e2|0,s2[e2>>1]|0){case 62:{e2=(s2[e2+-2>>1]|0)==61;break}case 41:case 59:{e2=1;break}case 104:{e2=ke(e2+-2|0,146,4)|0;break}case 121:{e2=ke(e2+-2|0,154,6)|0;break}case 101:{e2=ke(e2+-2|0,166,3)|0;break}default:e2=0}return e2|0}function ie(e2){e2=e2|0;var a3=0;switch(e2<<16>>16){case 61:case 46:case 58:case 63:case 38:case 124:case 91:case 60:case 44:{e2=1;break}case 101:{e2=f2[145]|0,re(e2+2|0,394,12)|0?(e2=0,a3=4):(e2=ve(s2[e2+14>>1]|0)|0,a3=4);break}default:e2=0,a3=4}return e2|0}function re(e2,a3,i3){e2=e2|0,a3=a3|0,i3=i3|0;var s3=0,f3=0;e:do if(!i3)e2=0;else{for(;s3=r2[e2>>0]|0,f3=r2[a3>>0]|0,s3<<24>>24==f3<<24>>24;)if(i3=i3+-1|0,i3)e2=e2+1|0,a3=a3+1|0;else{e2=0;break e}e2=(s3&255)-(f3&255)|0}while(!1);return e2|0}function se(e2){e2=e2|0;e:do switch(e2<<16>>16){case 38:case 37:case 33:{e2=1;break}default:if((e2&-8)<<16>>16==40|(e2+-58&65535)<6)e2=1;else{switch(e2<<16>>16){case 91:case 93:case 94:{e2=1;break e}default:}e2=(e2+-123&65535)<4}}while(!1);return e2|0}function fe(){var e2=0,a3=0,i3=0;if(e2=f2[145]|0,a3=f2[146]|0,(e2+4|0)>>>0<=a3>>>0&&(s2[e2+2>>1]|0)==117&&(s2[e2+4>>1]|0)==123){for(i3=e2+6|0;;){if(i3>>>0>a3>>>0){e2=-1;break}if((s2[i3>>1]|0)==125){e2=1;break}else i3=i3+2|0}f2[145]=i3}else e2=0;return e2|0}function ce(e2){e2=e2|0;e:do switch(e2<<16>>16){case 38:case 37:case 33:break;default:if(!((e2+-58&65535)<6|(e2+-40&65535)<7&e2<<16>>16!=41)){switch(e2<<16>>16){case 91:case 94:break e;default:}return e2<<16>>16!=125&(e2+-123&65535)<4|0}}while(!1);return 1}function te(e2){e2=e2|0;var a3=0;a3=s2[e2>>1]|0;e:do if((a3+-9&65535)>=5){switch(a3<<16>>16){case 160:case 32:{a3=1;break e}default:}if(se(a3)|0)return a3<<16>>16!=46|(Se(e2)|0)|0;a3=0}else a3=1;while(!1);return a3|0}function be(e2,a3){e2=e2|0,a3=a3|0;var i3=0,r3=0,s3=0;for(r3=b2,b2=b2+16|0,f2[r3>>2]=e2,i3=0;!(e2>>>0>=a3>>>0);)s3=((x(r3,a3)|0)+i3|0)*1025|0,e2=f2[r3>>2]|0,i3=s3>>>6^s3;return s3=i3*9|0,b2=r3,(s3>>>11^s3)*32769|0}function ke(e2,a3,i3){e2=e2|0,a3=a3|0,i3=i3|0;var r3=0,s3=0;return s3=e2+(0-i3<<1)+2|0,r3=f2[120]|0,s3>>>0>=r3>>>0&&(re(s3,a3,i3<<1)|0)==0?(s3|0)==(r3|0)?r3=1:r3=te(e2+(0-i3<<1)|0)|0:r3=0,r3|0}function le(e2){e2=e2|0;var a3=0;switch(e2<<16>>16){case 91:case 123:{d2(),f2[145]=(f2[145]|0)+2;break}default:a3=f2[145]|0,R(e2)|0,e2=f2[145]|0,e2>>>0>a3>>>0&&Z(a3,e2,a3,e2)}return D(1)|0}function ne(e2){switch(e2=e2|0,s2[e2>>1]|0){case 107:{e2=ke(e2+-2|0,172,4)|0;break}case 101:{(s2[e2+-2>>1]|0)==117?e2=ke(e2+-4|0,180,6)|0:e2=0;break}default:e2=0}return e2|0}function ue(e2){e2=e2|0;var a3=0;return f2[134]=e2,a3=f2[120]|0,s2[a3+(e2<<1)>>1]=0,f2[135]=a3+(e2<<1)+2,f2[136]=a3+(e2<<1)+2,f2[124]=0,f2[128]=0,f2[126]=0,f2[125]=0,f2[130]=0,f2[127]=0,f2[132]=0,f2[133]=0,r2[1104]=0,a3|0}function oe(){var e2=0,a3=0;return r2[1107]|0?(e2=f2[139]|0,e2?(e2=e2+4|0,a3=5):e2=0):(r2[1107]=1,e2=(f2[126]|0)+36|0,a3=5),(a3|0)==5&&(e2=f2[e2>>2]|0,f2[139]=e2,e2=(e2|0)!=0),e2|0}function he(e2,a3){e2=e2|0,a3=a3|0;var i3=0,r3=0;f2[145]=(f2[145]|0)+2,D(1)|0,f2[145]=(f2[145]|0)+4,r3=D(1)|0,i3=f2[145]|0,X(r3)|0,z(i3,f2[145]|0,0,0,2,e2,a3)}function we(e2,a3){e2=e2|0,a3=a3|0;var i3=0;return i3=f2[120]|0,i3>>>0<=e2>>>0&&(s2[e2>>1]|0)==a3<<16>>16?(i3|0)==(e2|0)?i3=1:i3=ve(s2[e2+-2>>1]|0)|0:i3=0,i3|0}function de(){var e2=0,a3=0,i3=0;e2=f2[146]|0,i3=f2[145]|0;e:for(;a3=i3+2|0,!(i3>>>0>=e2>>>0);)switch(s2[a3>>1]|0){case 13:case 10:break e;default:i3=a3}f2[145]=a3}function ve(e2){e2=e2|0;e:do if((e2+-9&65535)<5)e2=1;else{switch(e2<<16>>16){case 32:case 160:{e2=1;break e}default:}e2=e2<<16>>16!=46&(se(e2)|0)}while(!1);return e2|0}function pe(e2,a3,i3,s3,c3){e2=e2|0,a3=a3|0,i3=i3|0,s3=s3|0,c3=c3|0,f2[e2+8>>2]=a3,f2[e2+12>>2]=i3,f2[e2+20>>2]=c3,r2[e2+25>>0]=r2[e2+25>>0]&4|s3,r2[e2+24>>0]=2,f2[133]=(f2[133]|0)+-1}function ye(e2){e2=e2|0;e:do if(((e2&-33)+-65&65535)<26|(e2+-48&65535)<10)e2=1;else{switch(e2<<16>>16){case 36:case 95:{e2=1;break e}default:}e2=(e2&65535)>127}while(!1);return e2|0}function me(){var e2=0;switch(e2=f2[(f2[126]|0)+20>>2]|0,e2|0){case 1:{e2=-1;break}case 2:{e2=-2;break}default:e2=e2-(f2[120]|0)>>1}return e2|0}function Ae(e2){return e2=e2|0,!(ke(e2,126,5)|0)&&!(ke(e2,136,3)|0)?e2=ke(e2,142,2)|0:e2=1,e2|0}function ge(e2,a3){return e2=e2|0,a3=a3|0,r2[1104]=1,f2[147]|0?e2=o3(e2,a3)|0:e2=P()|0,e2|0}function Ce(e2){switch(e2=e2|0,e2<<16>>16){case 160:case 9:case 10:case 11:case 12:case 13:case 32:{e2=1;break}default:e2=0}return e2|0}function xe(e2){switch(e2=e2|0,e2<<16>>16){case 160:case 32:case 12:case 11:case 9:{e2=1;break}default:e2=0}return e2|0}function Se(e2){return e2=e2|0,(s2[e2>>1]|0)==46&&(s2[e2+-2>>1]|0)==46?e2=(s2[e2+-4>>1]|0)==46:e2=0,e2|0}function Oe(){var e2=0;return e2=f2[140]|0,e2=f2[((e2|0)==0?(f2[126]|0)+32|0:e2+16|0)>>2]|0,f2[140]=e2,(e2|0)!=0|0}function Ee(e2){return e2=e2|0,(f2[120]|0)==(e2|0)?e2=1:e2=te(e2+-2|0)|0,e2|0}function Ie(){var e2=0;return e2=f2[(f2[127]|0)+12>>2]|0,e2?e2=e2-(f2[120]|0)>>1:e2=-1,e2|0}function Ue(){var e2=0;return e2=f2[(f2[126]|0)+12>>2]|0,e2?e2=e2-(f2[120]|0)>>1:e2=-1,e2|0}function Ne(){var e2=0;return e2=f2[(f2[127]|0)+8>>2]|0,e2?e2=e2-(f2[120]|0)>>1:e2=-1,e2|0}function Te(){var e2=0;return e2=f2[(f2[126]|0)+16>>2]|0,e2?e2=e2-(f2[120]|0)>>1:e2=-1,e2|0}function $e(){var e2=0;return e2=f2[(f2[126]|0)+4>>2]|0,e2?e2=e2-(f2[120]|0)>>1:e2=-1,e2|0}function qe(e2){e2=e2|0,((f2[136]|0)+e2|0)>>>0>(f2[137]|0)>>>0&&De()}function Pe(){var e2=0;return e2=f2[126]|0,e2=f2[((e2|0)==0?496:e2+52|0)>>2]|0,f2[126]=e2,(e2|0)!=0|0}function je(){r2[1105]=1,f2[138]=(f2[145]|0)-(f2[120]|0)>>1,f2[145]=(f2[146]|0)+2}function Be(){var e2=0;return e2=f2[127]|0,e2=f2[((e2|0)==0?500:e2+32|0)>>2]|0,f2[127]=e2,e2|0}function Me(){var e2=0;return e2=f2[126]|0,f2[e2+28>>2]|r2[e2+25>>0]<<4&255|0}function ze(){var e2=0;return e2=f2[127]|0,(r2[e2+25>>0]&4|r2[e2+24>>0])&255|0}function De(){f2[136]=f2[135],f2[138]=-1,r2[1105]=1}function Fe(){return(f2[(f2[127]|0)+16>>2]|0)-(f2[120]|0)>>1|0}function Ge(){return(f2[(f2[140]|0)+12>>2]|0)-(f2[120]|0)>>1|0}function He(){return(f2[(f2[140]|0)+8>>2]|0)-(f2[120]|0)>>1|0}function Je(){return(f2[(f2[140]|0)+4>>2]|0)-(f2[120]|0)>>1|0}function Ke(){return(f2[(f2[126]|0)+8>>2]|0)-(f2[120]|0)>>1|0}function Le(){return(f2[(f2[127]|0)+4>>2]|0)-(f2[120]|0)>>1|0}function Qe(e2){return e2=e2|0,e2<<16>>16==39|e2<<16>>16==34|0}function Re(e2){return e2=e2|0,e2<<16>>16==13|e2<<16>>16==10|0}function Ve(){return(f2[f2[140]>>2]|0)-(f2[120]|0)>>1|0}function We(){return(f2[f2[139]>>2]|0)-(f2[120]|0)>>1|0}function Xe(){return(f2[f2[126]>>2]|0)-(f2[120]|0)>>1|0}function Ye(){return(f2[f2[127]>>2]|0)-(f2[120]|0)>>1|0}function Ze(){return c2[(f2[126]|0)+24>>0]|0|0}function _e(){return r2[(f2[127]|0)+25>>0]&3|0}function ea(e2){e2=e2|0,f2[120]=e2}function aa(){return f2[(f2[127]|0)+20>>2]|0}function ia(){f2[139]=0,r2[1107]=0}function ra(e2){e2=e2|0,f2[137]=e2}function sa(){return(r2[1106]|0)!=0|0}function fa(){return(r2[1108]|0)!=0|0}function ca(){f2[140]=0}function ta(){return f2[138]|0}function ba(e2,a3){return e2=e2|0,a3=a3|0,b2=e2+a3+15&-16,a3|0}return{su:ba,ai:Te,ake:Je,aks:Ve,ave:Ge,avs:He,e:ta,ee:Le,eii:aa,eit:_e,ele:Ie,els:Ne,es:Ye,ess:Fe,et:ze,f:fa,id:me,ie:$e,ip:Ze,is:Xe,it:Me,ms:sa,p:k2,ra:Oe,re:Be,ri:Pe,rsa:ca,rt:oe,rts:ia,sa:ue,sal:ra,se:Ue,ses:ea,ss:Ke,te:We}})(typeof globalThis<"u"?globalThis:self,{},i),r=a.su(s-(2<<17),1344),a.sal(s-(2<<17))}let v=t.length+1;if(a.ses(r),a.sa(v-1),f(t,new Uint16Array(i,r,v)),!a.p()){if(a.e()===-1)return s*=2,a=void 0,parse(l2,o2);k=a.e(),h()}let p=[],y=[];for(;a.ri();){let e=a.is(),i2=a.ie(),r2=a.it(),s2=15&r2,f2=a.ai(),c2=a.id(),b2=a.ss(),k2=a.se(),l3=a.ip(),o3,h2=!1;if(1&l3?o3=n(c2===-1?e:e+1,c2===-1?i2:i2-1,!!(2&l3)):c2!==-1&&t.charCodeAt(e)===96&&(o3=u(e,i2),h2=o3!==void 0),s2===3)p.push({type:"import-meta",specifier:null,typeOnly:!1,start:e,end:i2,importStart:b2,importEnd:k2});else if(c2!==-1){let a2=s2===5?"source":s2===7?"defer":null;p.push({type:"dynamic",specifier:o3,glob:h2,phase:a2,start:e,end:i2,importStart:b2,importEnd:k2,dynamicStart:c2,attributes:null,attributesStart:f2,probablyTypeOnly:!!(16&r2)})}else{let c3=null;if(f2!==-1){for(c3=[],a.rsa();a.ra();){let e2=a.aks(),i3=a.ake(),r3=a.avs(),s3=a.ave();c3.push([A(e2,i3),A(r3,s3)])}c3=c3.length>0?c3:null}let t2=s2===4?"source":s2===6?"defer":null;p.push({type:s2===8?"reexport-star":"static",specifier:o3,phase:t2,start:e,end:i2,importStart:b2,importEnd:k2,attributes:c3,attributesStart:f2,typeOnly:!!(16&r2)})}}let m;for(;m=a.re();){let i2=a.es(),r2=a.ee(),s2=a.els(),f2=a.ele(),c2=a.et(),t2=3&c2,b2=!!(4&c2),k2=a.ess();if(t2===3){let e=a.eii();y.push({type:"reexport-all",from:p[e].specifier,importIndex:e,start:i2,end:r2,exportStart:k2,typeOnly:b2})}else{let e=A(i2,r2);if(t2===1){let a2=s2<0?void 0:A(s2,f2);y.push({type:"direct",name:e,localName:a2,start:i2,end:r2,localStart:s2,localEnd:f2,exportStart:k2,typeOnly:b2})}else{let c3=a.eii(),t3=a.eit(),l3=t3===0?A(s2,f2):t3===1?"default":null;y.push({type:"reexport",name:e,importName:l3,importNameStart:t3===0?s2:-1,importNameEnd:t3===0?f2:-1,from:p[c3].specifier,importIndex:c3,start:i2,end:r2,exportStart:k2,typeOnly:b2})}}}return[p,y,!!a.f(),!!a.ms()];function A(e,a2){let i2=t.charCodeAt(e);return i2===34||i2===39?n(e+1,a2-1):t.slice(e,a2)}}var l=/\r\n?/g;function n(e,a2,i2=!1){let r2=t.slice(e,a2),s2=r2.indexOf("\\");if(s2===-1)return i2?r2.replace(l,`
|
|
3
|
+
`):r2;let f2=r2.slice(0,s2),c2=i2?f2.replace(l,`
|
|
4
|
+
`):f2;for(;;){let a3=s2+1;a3>=r2.length&&(k=e+a3,h());let t2=r2.charCodeAt(a3++);switch(t2){case 13:r2.charCodeAt(a3)===10&&a3++;break;case 10:case 8232:case 8233:break;case 114:c2+="\r";break;case 110:c2+=`
|
|
5
|
+
`;break;case 116:c2+=" ";break;case 98:c2+="\b";break;case 102:c2+="\f";break;case 118:c2+="\v";break;case 120:c2+=String.fromCharCode(o(e+a3,2)),a3+=2;break;case 117:{let i3;if(r2.charCodeAt(a3)===123){let s3=r2.indexOf("}",++a3);s3===-1&&(k=e+a3,h()),i3=o(e+a3,s3-a3),a3=s3+1}else i3=o(e+a3,4),a3+=4;i3>1114111&&(k=e+a3,h()),i3<=65535?c2+=String.fromCharCode(i3):(i3-=65536,c2+=String.fromCharCode(55296+(i3>>10),56320+(1023&i3)));break}case 48:{let i3=r2.charCodeAt(a3);i3>=48&&i3<=57&&(k=e+a3,h()),c2+="\0";break}default:t2>=49&&t2<=57&&(k=e+a3-1,h()),c2+=String.fromCharCode(t2)}let b2=r2.indexOf("\\",a3);if(b2===-1)return f2=r2.slice(a3),c2+(i2?f2.replace(l,`
|
|
6
|
+
`):f2);f2=r2.slice(a3,b2),c2+=i2?f2.replace(l,`
|
|
7
|
+
`):f2,s2=b2}}function u(e,i2){if(a.rts(),!a.rt())return;let r2="",s2=e+1,f2=e+1,c2=a.te();for(;f2<i2;){let e2=t.charCodeAt(f2);if(e2===96)break;e2!==92?e2!==42?e2===36&&t.charCodeAt(f2+1)===123&&f2+2<=c2?(r2+=t.slice(s2,f2)+"*",f2=s2=c2,c2=a.rt()?a.te():-1):f2++:(r2+=t.slice(s2,f2)+"\\*",s2=++f2):f2+=2}return r2+t.slice(s2,f2)}function o(e,a2){(a2<1||e+a2>t.length)&&(k=e,h());let i2=0,r2=e+a2;for(let a3=e;a3<r2;a3++){let e2=t.charCodeAt(a3),r3=32|e2,s2=e2>=48&&e2<=57?e2-48:r3>=97&&r3<=102?r3-87:-1;s2===-1&&(k=a3,h()),i2=16*i2+s2}return i2}function h(){throw Object.assign(Error(`Parse error ${b}:${t.slice(0,k).split(`
|
|
8
|
+
`).length}:${k-t.lastIndexOf(`
|
|
9
|
+
`,k-1)}`),{idx:k})}import{readFileSync}from"node:fs";import{extname}from"node:path";var commonJsByPath=new Map;function isCommonJsFile(path){let cached=commonJsByPath.get(path);if(cached!==void 0)return cached;let result=detect(path);return commonJsByPath.set(path,result),result}function detect(path){let extension=extname(path);if(extension===".cjs")return!0;if(extension===".mjs"||extension===".ts"||extension===".tsx"||extension===".mts")return!1;try{let[,,,hasModuleSyntax]=parse(readFileSync(path,"utf8"),path);return!hasModuleSyntax}catch{return!1}}function parseImportClause(clause){let rest=clause.trim();if(rest==="")return;let defaultBinding,namespaceBinding,named=[],braceStart=rest.indexOf("{"),head=(braceStart>=0?rest.slice(0,braceStart):rest).trim().replace(/,$/,"").trim();if(head!==""){let namespace=/^\*\s+as\s+([A-Za-z_$][\w$]*)$/.exec(head);if(namespace?.[1]!==void 0)namespaceBinding=namespace[1];else if(/^[A-Za-z_$][\w$]*$/.test(head))defaultBinding=head;else return}if(braceStart>=0){let braceEnd=rest.lastIndexOf("}");if(braceEnd<braceStart)return;rest=rest.slice(braceStart+1,braceEnd);for(let raw of rest.split(",")){let entry=raw.trim();if(entry==="")continue;let aliased=/^(?:(["'])(.+?)\1|([A-Za-z_$][\w$]*))\s+as\s+([A-Za-z_$][\w$]*)$/.exec(entry);if(aliased){named.push({imported:aliased[2]??aliased[3]??"",local:aliased[4]??""});continue}if(/^[A-Za-z_$][\w$]*$/.test(entry)){named.push({imported:entry,local:entry});continue}return}}return{defaultBinding,namespaceBinding,named}}function rewriteCommonJsImport(clause,resolvedId,alias,attributes=""){let parsed=parseImportClause(clause);if(parsed===void 0)return`import ${JSON.stringify(resolvedId)}${attributes};`;let lines=[`import ${alias} from ${JSON.stringify(resolvedId)}${attributes};`];if(parsed.defaultBinding!==void 0&&lines.push(`const ${parsed.defaultBinding} = ${alias};`),parsed.namespaceBinding!==void 0&&lines.push(`const ${parsed.namespaceBinding} = ${alias};`),parsed.named.length>0){let pattern=parsed.named.map(({imported,local})=>{let key=/^[A-Za-z_$][\w$]*$/.test(imported)?imported:JSON.stringify(imported);return key===local?key:`${key}: ${local}`}).join(", ");lines.push(`const { ${pattern} } = ${alias};`)}return lines.join(" ")}var diagnosticSchema=external_exports.object({message:external_exports.string(),position:external_exports.object({line:external_exports.number(),column:external_exports.number()}).nullish()}),ExtensionSourceError=class extends Error{constructor(filename,cause){let diagnostics=external_exports.array(diagnosticSchema).parse(cause.errors).map(({message,position})=>({message,...position?{line:position.line,column:position.column}:{}}));super(diagnostics.map(item=>`${filename}${item.line===void 0?"":`:${item.line}:${item.column}`}: ${item.message}`).join(`
|
|
10
|
+
`),{cause}),this.name="ExtensionSourceError",this.filename=filename,this.diagnostics=diagnostics}};import{existsSync}from"node:fs";import{dirname,isAbsolute}from"node:path";import{fileURLToPath,pathToFileURL}from"node:url";var RUNTIME_METADATA=Symbol.for("senpi.extension.runtime.metadata");function publishRuntimeMetadata(value){globalThis[RUNTIME_METADATA]=value}var importModule=new Function("specifier","options","return import(specifier, options)"),extensionNamespace="senpi-extension",RUNTIME_SPECIFIER="runtime",runtimeModulePath=resolveRuntimeModulePath();function resolveRuntimeModulePath(){try{let candidate=fileURLToPath(new URL("./extension-runtime-module.js",import.meta.url));return existsSync(candidate)?candidate:void 0}catch{return}}function splitModuleId(id){let slash=id.indexOf("/");if(!(slash<=0||slash===id.length-1))return{generation:id.slice(0,slash),filename:decodeURIComponent(id.slice(slash+1))}}var graphs=new Map,collected=new FinalizationRegistry(generation=>graphs.delete(generation)),nextGeneration=0,installed=!1,pluginRegistrations=0,registeredHosts=new Set,ExtensionModuleIdError=class extends Error{constructor(id){super(`Extension module id is not "<generation>/<encoded filename>": ${id}`),this.name="ExtensionModuleIdError"}},ExtensionGenerationDisposedError=class extends Error{constructor(generation){super(`Extension generation ${generation} has been disposed`),this.name="ExtensionGenerationDisposedError",this.generation=generation}};function graphFor(generation){let graph=graphs.get(generation)?.deref();if(!graph)throw new ExtensionGenerationDisposedError(generation);return graph}function metadata(generation,filename){let resolvePath=specifier=>{let id=graphFor(generation).resolve(specifier,filename);return id.startsWith(`${extensionNamespace}:`)?decodeURIComponent(id.slice(id.indexOf("/")+1)):isAbsolute(id)?id:void 0},require2=Object.assign(specifier=>graphFor(generation).require(specifier,filename),{resolve:specifier=>resolvePath(specifier)??graphFor(generation).resolve(specifier,filename)});return{url:pathToFileURL(filename).href,path:filename,dir:dirname(filename),require:require2,commonJs:body=>graphFor(generation).evaluateCommonJs(filename,body),import:async(specifier,options)=>importModule(graphFor(generation).resolve(specifier,filename),options),resolve:specifier=>{let path=resolvePath(specifier);return path===void 0?graphFor(generation).resolve(specifier,filename):pathToFileURL(path).href}}}function installRegistry(virtualModules){let hosts=Object.entries(virtualModules).filter(([name])=>!registeredHosts.has(name));(!installed||hosts.length>0)&&(pluginRegistrations++,Bun.plugin({name:extensionNamespace,setup(builder){for(let[name,exports]of hosts)builder.module(name,()=>({exports,loader:"object"})),registeredHosts.add(name);installed||(publishRuntimeMetadata(metadata),builder.module(`${extensionNamespace}:${RUNTIME_SPECIFIER}`,()=>({exports:{metadata},loader:"object"})),builder.onResolve({filter:/.*/,namespace:extensionNamespace},({path})=>{if(path===RUNTIME_SPECIFIER)return runtimeModulePath===void 0?{path,namespace:extensionNamespace}:{path:runtimeModulePath,namespace:"file"};let parsed=splitModuleId(path);if(parsed===void 0)throw new ExtensionModuleIdError(path);return graphFor(parsed.generation),{path,namespace:extensionNamespace}}),builder.onLoad({filter:/.*/,namespace:extensionNamespace},({path})=>{let parsed=splitModuleId(path);if(parsed===void 0)throw new ExtensionModuleIdError(path);return graphFor(parsed.generation).load(parsed.filename)}),installed=!0)}}))}function registerExtensionGraph(graph,virtualModules){installRegistry(virtualModules);let generation=String(nextGeneration++);return graphs.set(generation,new WeakRef(graph)),collected.register(graph,generation,graph),{generation,dispose(){graphs.delete(generation),collected.unregister(graph)}}}function bunExtensionImporterStats(){return{generations:[...graphs.values()].filter(entry=>entry.deref()).length,plugins:pluginRegistrations}}var __rewriteRelativeImportExtension=function(path,preserveJsx){return typeof path=="string"&&/^\.\.?\//.test(path)?path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(m,tsx,d,ext,cm){return tsx?preserveJsx?".jsx":".js":d&&(!ext||!cm)?m:d+ext+"."+cm.toLowerCase()+"js"}):path};function createBunExtensionImporter(virtualModules){let sources=new Map,commonJs=new Set,commonJsModules=new Map,nativeRequire=createRequire(import.meta.url),active=!0,assertActive=()=>{if(!active)throw new ExtensionGenerationDisposedError(registration.generation)},moduleId=filename=>`${extensionNamespace}:${registration.generation}/${encodeURIComponent(filename)}`,fileTarget=resolved=>/\.[cm]?[jt]sx?$/.test(resolved)?{id:moduleId(resolved),path:resolved}:{id:resolved},resolveTarget=(specifier,filename)=>{if(assertActive(),Object.hasOwn(virtualModules,specifier)||isBuiltin(specifier)||specifier.startsWith("bun:"))return{id:specifier};if(specifier.startsWith(`${extensionNamespace}:`))return{id:specifier};let path=specifier.startsWith("file:")?fileURLToPath2(specifier):specifier;return fileTarget(realpathSync(Bun.resolveSync(path,dirname2(filename))))},graph={assertActive,resolve(specifier,filename){return resolveTarget(specifier,filename).id},require(specifier,filename){let id=graph.resolve(specifier,filename),evaluating=commonJsModules.get(id);if(evaluating!==void 0)return evaluating.exports;let result=nativeRequire(id);return commonJs.has(id)?result.default:result},evaluateCommonJs(filename,body){assertActive();let id=moduleId(filename),module={exports:{}};commonJsModules.set(id,module);try{body.call(module.exports,module.exports,module)}catch(error){throw commonJsModules.delete(id),error}return module.exports},load(filename){assertActive();let existing=sources.get(filename);if(existing)return existing;let source=readFileSync2(filename,"utf8"),name="__senpiExtensionMeta";for(;source.includes(name);)name+="_";let extension=extname2(filename),transpiler=new Bun.Transpiler({loader:extension===".tsx"?"tsx":extension===".jsx"?"jsx":"ts",target:"bun",define:{"import.meta":name,require:`${name}.require`,__filename:`${name}.path`,__dirname:`${name}.dir`}}),contents;try{contents=transpiler.transformSync(source)}catch(error){throw error instanceof AggregateError?new ExtensionSourceError(filename,error):error}let[imports,,,hasModuleSyntax]=parse(contents,filename),edits=[],commonJsImports=0;for(let edge of imports)if(edge.type==="dynamic")edits.push({start:edge.importStart,end:edge.dynamicStart,text:`${name}.import`});else if(edge.type==="static"||edge.type==="reexport-star"){let target=resolveTarget(edge.specifier,filename);if(target.path!==void 0&&isCommonJsFile(target.path)){let clause=contents.slice(edge.importStart+6,edge.start-1).replace(/\bfrom\s*$/,""),attributes=edge.attributesStart<0?"":contents.slice(edge.end+1,edge.importEnd).replace(/;\s*$/,"");edits.push({start:edge.importStart,end:edge.importEnd,text:rewriteCommonJsImport(clause,target.id,`${name}Cjs${commonJsImports++}`,attributes)})}else edits.push({start:edge.start-1,end:edge.end+1,text:JSON.stringify(target.id)})}for(let edit of edits.sort((a2,b2)=>b2.start-a2.start))contents=contents.slice(0,edit.start)+edit.text+contents.slice(edit.end);contents=contents.replace(/^#![^\n]*\n/,""),!hasModuleSyntax&&extension!==".mjs"&&extension!==".mts"&&(commonJs.add(moduleId(filename)),contents=`export default ${name}.commonJs(function (exports, module) {
|
|
11
|
+
${contents}
|
|
12
|
+
});`),contents=`import { metadata as ${name}Factory } from "${extensionNamespace}:runtime";
|
|
13
|
+
const ${name} = ${name}Factory(${JSON.stringify(registration.generation)}, ${JSON.stringify(filename)});
|
|
14
|
+
${contents}`;let prepared={contents,loader:"js"};return sources.set(filename,prepared),prepared}},registration=registerExtensionGraph(graph,virtualModules);return{async import(path,_options){assertActive();let absolute=realpathSync(resolve(path)),entry=statSync(absolute).isDirectory()?realpathSync(Bun.resolveSync(absolute,absolute)):absolute,{id}=fileTarget(entry),factory=(await import(__rewriteRelativeImportExtension(id))).default;return typeof factory!="function"?factory:function(...args){return graph.assertActive(),factory.apply(this,args)}},compiledFiles(){return[...sources.keys()]},dispose(){active=!1,registration.dispose(),sources.clear(),commonJs.clear(),commonJsModules.clear()}}}export{bunExtensionImporterStats,createBunExtensionImporter};
|